test: 🚧 Added fixtures for new test schema

This commit is contained in:
PedroCailleret 2022-12-03 01:17:48 -03:00
parent 4403541660
commit c69d82ccee
49 changed files with 931 additions and 1126 deletions

View File

@ -26,7 +26,9 @@
├── p2pix.sol
└── Reputation.sol
```
## Callgraph
![Callgraph](docs/callgraph.svg)
## Usage
@ -76,16 +78,15 @@ $ yarn clean
To import artifacts on the project use the following:
```ts
import P2PIXArtifact from 'p2pix-smart-contracts/artifacts/contracts/p2pix.sol/P2PIX.json'
import P2PIXArtifact from "p2pix-smart-contracts/artifacts/contracts/p2pix.sol/P2PIX.json";
```
To grab deployment addresses you can just grab from deploys folder:
```ts
import localhostDeploys from 'p2pix-smart-contracts/deploys/localhost.json'
import localhostDeploys from "p2pix-smart-contracts/deploys/localhost.json";
```
## Deploying to local environment
On the first teminal, use the following command and import some wallets to your Metamask, then connect to the network pointed:

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
}

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
}

View File

@ -63,6 +63,11 @@
"name": "OnlySeller",
"type": "error"
},
{
"inputs": [],
"name": "StaticCallFailed",
"type": "error"
},
{
"inputs": [],
"name": "TokenDenied",

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
}

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../../../build-info/da574cda4da83daffd2579005f189352.json"
}

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
}

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../../../build-info/da574cda4da83daffd2579005f189352.json"
}

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../../../build-info/da574cda4da83daffd2579005f189352.json"
}

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../../../build-info/da574cda4da83daffd2579005f189352.json"
}

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
}

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
}

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
}

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../../../build-info/da574cda4da83daffd2579005f189352.json"
}

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
"buildInfo": "../../build-info/727fbe6b5a53dc5c0af688ab7bc65edd.json"
}

File diff suppressed because one or more lines are too long

View File

@ -2,7 +2,6 @@
pragma solidity 0.8.9;
interface EventAndErrors {
/// Events
event DepositAdded(

View File

@ -5,41 +5,43 @@ import { IReputation } from "./lib/interfaces/IReputation.sol";
import { Owned } from "./lib/auth/Owned.sol";
import { FixedPointMathLib as WADMath } from "./lib/utils/FixedPointMathLib.sol";
contract Reputation is
IReputation,
Owned(msg.sender)
{
contract Reputation is IReputation, Owned(msg.sender) {
using WADMath for uint256;
/// @dev Asymptote numerator constant value for the `limiter` fx.
uint256 constant public maxLimit = 1e6;
uint256 public constant maxLimit = 1e6;
/// @dev Denominator's constant operand for the `limiter` fx.
uint256 constant public magicValue = 2.5e11;
uint256 public constant magicValue = 2.5e11;
constructor(/* */) {/* */}
constructor() /* */ {
/* */
}
function limiter(uint256 _userCredit)
function limiter(
uint256 _userCredit
)
external
pure
override(IReputation)
returns(uint256 _spendLimit)
returns (uint256 _spendLimit)
{
// _spendLimit = 1 + ( ( maxLimit * _userCredit ) / sqrt( magicValue * ( _userCredit * _userCredit ) ) );
// return _spendLimit;
unchecked {
uint256 numeratorWad =
maxLimit.mulWadDown(_userCredit);
uint256 userCreditSquaredWad =
_userCredit.mulWadDown(_userCredit);
uint256 denominatorSqrtWad =
(userCreditSquaredWad.mulWadDown(magicValue)).sqrt();
uint256 numeratorWad = maxLimit.mulWadDown(
_userCredit
);
uint256 userCreditSquaredWad = _userCredit
.mulWadDown(_userCredit);
uint256 denominatorSqrtWad = (
userCreditSquaredWad.mulWadDown(magicValue)
).sqrt();
_spendLimit = (1 + (numeratorWad).divWadDown(denominatorSqrtWad));
_spendLimit = (1 +
(numeratorWad).divWadDown(
denominatorSqrtWad
));
}
}
}

View File

@ -1,12 +1,8 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;
interface IReputation {
function limiter(uint256 _userCredit)
external
pure
returns(uint256 _spendLimit);
function limiter(
uint256 _userCredit
) external pure returns (uint256 _spendLimit);
}

View File

@ -4,7 +4,6 @@ pragma solidity >=0.8.4;
/// @notice Arithmetic library with operations for fixed-point numbers.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol)
library FixedPointMathLib {
/*//////////////////////////////////////////////////////////////
SIMPLIFIED FIXED POINT OPERATIONS
//////////////////////////////////////////////////////////////*/
@ -12,12 +11,18 @@ library FixedPointMathLib {
/// @dev The scalar of ETH and most ERC20s.
uint256 internal constant WAD = 1e18;
function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) {
function mulWadDown(
uint256 x,
uint256 y
) internal pure returns (uint256) {
// Equivalent to (x * y) / WAD rounded down.
return mulDivDown(x, y, WAD);
}
function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) {
function divWadDown(
uint256 x,
uint256 y
) internal pure returns (uint256) {
// Equivalent to (x * WAD) / y rounded down.
return mulDivDown(x, WAD, y);
}
@ -36,7 +41,12 @@ library FixedPointMathLib {
z := mul(x, y)
// Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y))
if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) {
if iszero(
and(
iszero(iszero(denominator)),
or(iszero(x), eq(div(z, x), y))
)
) {
revert(0, 0)
}
@ -49,7 +59,9 @@ library FixedPointMathLib {
GENERAL NUMBER UTILITIES
//////////////////////////////////////////////////////////////*/
function sqrt(uint256 x) internal pure returns (uint256 z) {
function sqrt(
uint256 x
) internal pure returns (uint256 z) {
assembly {
let y := x // We start y at x, which will help us make our initial estimate.
@ -60,7 +72,9 @@ library FixedPointMathLib {
// We check y >= 2^(k + 8) but shift right by k bits
// each branch to ensure that if x >= 256, then y >= 256.
if iszero(lt(y, 0x10000000000000000000000000000000000)) {
if iszero(
lt(y, 0x10000000000000000000000000000000000)
) {
y := shr(128, y)
z := shl(64, z)
}

View File

@ -10,31 +10,46 @@ pragma solidity >=0.8.4;
/// (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol)
library MerkleProofLib {
/// @dev Returns whether `leaf` exists in the Merkle tree with `root`, given `proof`.
function verify(bytes32[] calldata proof, bytes32 root, bytes32 leaf)
internal
pure
returns (bool isValid)
{
function verify(
bytes32[] calldata proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool isValid) {
/// @solidity memory-safe-assembly
assembly {
if proof.length {
// Left shift by 5 is equivalent to multiplying by 0x20.
let end := add(proof.offset, shl(5, proof.length))
let end := add(
proof.offset,
shl(5, proof.length)
)
// Initialize `offset` to the offset of `proof` in the calldata.
let offset := proof.offset
// Iterate over proof elements to compute root hash.
for {} 1 {} {
for {
} 1 {
} {
// Slot of `leaf` in scratch space.
// If the condition is true: 0x20, otherwise: 0x00.
let scratch := shl(5, gt(leaf, calldataload(offset)))
let scratch := shl(
5,
gt(leaf, calldataload(offset))
)
// Store elements to hash contiguously in scratch space.
// Scratch space is 64 bytes (0x00 - 0x3f) and both elements are 32 bytes.
mstore(scratch, leaf)
mstore(xor(scratch, 0x20), calldataload(offset))
mstore(
xor(scratch, 0x20),
calldataload(offset)
)
// Reuse `leaf` to store the hash to reduce stack operations.
leaf := keccak256(0x00, 0x40)
offset := add(offset, 0x20)
if iszero(lt(offset, end)) { break }
if iszero(lt(offset, end)) {
break
}
}
}
isValid := eq(leaf, root)

View File

@ -82,12 +82,7 @@ contract P2PIX is
uint256 _amount,
string calldata _pixTarget,
bytes32 allowlistRoot
)
public
returns (
uint256 depositID
)
{
) public returns (uint256 depositID) {
ERC20 t = ERC20(_token);
if (!allowedERC20s[t]) revert TokenDenied();
@ -211,8 +206,7 @@ contract P2PIX is
// Halt execution and output `lockID`.
return lockID;
}
else {
} else {
uint256 userCredit = userRecord[
_castAddrToKey(msg.sender)
];
@ -345,9 +339,9 @@ contract P2PIX is
/// @dev For each successfull unexpired lock recovered,
/// `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.
/// @dev Function sighash: 0x8e2749d6.
function unlockExpired(bytes32[] calldata lockIDs)
public
{
function unlockExpired(
bytes32[] calldata lockIDs
) public {
uint256 i;
uint256 locksSize = lockIDs.length;
@ -359,10 +353,11 @@ contract P2PIX is
mapDeposits[l.depositID].remaining += l.amount;
l.amount = 0;
uint256 userKey =
_castAddrToKey(l.relayerAddress);
uint256 _newUserRecord =
(userRecord[userKey] >> 1);
uint256 userKey = _castAddrToKey(
l.relayerAddress
);
uint256 _newUserRecord = (userRecord[userKey] >>
1);
if (_newUserRecord <= 100) {
userRecord[userKey] = 100;
@ -414,9 +409,10 @@ contract P2PIX is
emit DepositWithdrawn(msg.sender, depositID, amount);
}
function setRoot(address addr, bytes32 merkleroot)
public
{
function setRoot(
address addr,
bytes32 merkleroot
) public {
if (addr == msg.sender) {
sellerAllowList[
_castAddrToKey(addr)
@ -434,30 +430,27 @@ contract P2PIX is
emit FundsWithdrawn(msg.sender, balance);
}
function setReputation(IReputation _reputation)
public
onlyOwner
{
function setReputation(
IReputation _reputation
) public onlyOwner {
assembly {
sstore(reputation.slot, _reputation)
}
emit ReputationUpdated(address(_reputation));
}
function setDefaultLockBlocks(uint256 _blocks)
public
onlyOwner
{
function setDefaultLockBlocks(
uint256 _blocks
) public onlyOwner {
assembly {
sstore(defaultLockBlocks.slot, _blocks)
}
emit LockBlocksUpdated(_blocks);
}
function setValidSigners(address[] memory _validSigners)
public
onlyOwner
{
function setValidSigners(
address[] memory _validSigners
) public onlyOwner {
unchecked {
uint256 i;
uint256 len = _validSigners.length;
@ -626,11 +619,9 @@ contract P2PIX is
) revert AddressDenied();
}
function _limiter(uint256 _userCredit)
internal
view
returns (uint256 _spendLimit)
{
function _limiter(
uint256 _userCredit
) internal view returns (uint256 _spendLimit) {
// enconde the fx sighash and args
bytes memory encodedParams = abi.encodeWithSelector(
IReputation.limiter.selector,
@ -670,11 +661,9 @@ contract P2PIX is
/// @notice Public method that handles `address`
/// to `uint256` safe type casting.
/// @dev Function sighash: 0x4b2ae980.
function _castAddrToKey(address _addr)
public
pure
returns (uint256 _key)
{
function _castAddrToKey(
address _addr
) public pure returns (uint256 _key) {
_key = uint256(uint160(address(_addr))) << 12;
}
}

View File

@ -1,12 +1 @@
# DataTypes

View File

@ -1,14 +1,5 @@
# EventAndErrors
## Events
### AllowedERC20Updated
@ -17,14 +8,10 @@
event AllowedERC20Updated(address indexed token, bool indexed state)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| --------------- | ------- | ----------- |
| token `indexed` | address | undefined |
| state `indexed` | bool | undefined |
@ -36,12 +23,10 @@ event DepositAdded(address indexed seller, uint256 depositID, address token, uin
███ Events ████████████████████████████████████████████████████████████
#### Parameters
| Name | Type | Description |
|---|---|---|
| ---------------- | ------- | ----------- |
| seller `indexed` | address | undefined |
| depositID | uint256 | undefined |
| token | address | undefined |
@ -53,14 +38,10 @@ event DepositAdded(address indexed seller, uint256 depositID, address token, uin
event DepositClosed(address indexed seller, uint256 depositID)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ---------------- | ------- | ----------- |
| seller `indexed` | address | undefined |
| depositID | uint256 | undefined |
@ -70,14 +51,10 @@ event DepositClosed(address indexed seller, uint256 depositID)
event DepositWithdrawn(address indexed seller, uint256 depositID, uint256 amount)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ---------------- | ------- | ----------- |
| seller `indexed` | address | undefined |
| depositID | uint256 | undefined |
| amount | uint256 | undefined |
@ -88,14 +65,10 @@ event DepositWithdrawn(address indexed seller, uint256 depositID, uint256 amount
event FundsWithdrawn(address owner, uint256 amount)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------ | ------- | ----------- |
| owner | address | undefined |
| amount | uint256 | undefined |
@ -105,14 +78,10 @@ event FundsWithdrawn(address owner, uint256 amount)
event LockAdded(address indexed buyer, bytes32 indexed lockID, uint256 depositID, uint256 amount)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ---------------- | ------- | ----------- |
| buyer `indexed` | address | undefined |
| lockID `indexed` | bytes32 | undefined |
| depositID | uint256 | undefined |
@ -124,14 +93,10 @@ event LockAdded(address indexed buyer, bytes32 indexed lockID, uint256 depositID
event LockBlocksUpdated(uint256 blocks)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------ | ------- | ----------- |
| blocks | uint256 | undefined |
### LockReleased
@ -140,14 +105,10 @@ event LockBlocksUpdated(uint256 blocks)
event LockReleased(address indexed buyer, bytes32 lockId)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| --------------- | ------- | ----------- |
| buyer `indexed` | address | undefined |
| lockId | bytes32 | undefined |
@ -157,14 +118,10 @@ event LockReleased(address indexed buyer, bytes32 lockId)
event LockReturned(address indexed buyer, bytes32 lockId)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| --------------- | ------- | ----------- |
| buyer `indexed` | address | undefined |
| lockId | bytes32 | undefined |
@ -174,14 +131,10 @@ event LockReturned(address indexed buyer, bytes32 lockId)
event ReputationUpdated(address reputation)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ---------- | ------- | ----------- |
| reputation | address | undefined |
### ValidSignersUpdated
@ -190,18 +143,12 @@ event ReputationUpdated(address reputation)
event ValidSignersUpdated(address[] signers)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------- | --------- | ----------- |
| signers | address[] | undefined |
## Errors
### AddressDenied
@ -210,10 +157,7 @@ event ValidSignersUpdated(address[] signers)
error AddressDenied()
```
*Address doesn&#39;t exist in a MerkleTree.Address not allowed as relayer.0x3b8474be*
_Address doesn&#39;t exist in a MerkleTree.Address not allowed as relayer.0x3b8474be_
### AlreadyReleased
@ -221,10 +165,7 @@ error AddressDenied()
error AlreadyReleased()
```
*Lock already released or returned.0x63b4904e*
_Lock already released or returned.0x63b4904e_
### AmountNotAllowed
@ -232,10 +173,7 @@ error AlreadyReleased()
error AmountNotAllowed()
```
*Wished amount to be locked exceeds the limit allowed.0x1c18f846*
_Wished amount to be locked exceeds the limit allowed.0x1c18f846_
### DepositAlreadyExists
@ -243,10 +181,7 @@ error AmountNotAllowed()
error DepositAlreadyExists()
```
*Deposit already exist and it is still valid.0xc44bd765*
_Deposit already exist and it is still valid.0xc44bd765_
### InvalidDeposit
@ -254,10 +189,7 @@ error DepositAlreadyExists()
error InvalidDeposit()
```
*Deposit not valid anymore.0xb2e532de*
_Deposit not valid anymore.0xb2e532de_
### InvalidSigner
@ -265,10 +197,7 @@ error InvalidDeposit()
error InvalidSigner()
```
*Signer is not a valid signer.0x815e1d64*
_Signer is not a valid signer.0x815e1d64_
### LengthMismatch
@ -276,10 +205,7 @@ error InvalidSigner()
error LengthMismatch()
```
*Arrays&#39; length don&#39;t match.0xff633a38*
_Arrays&#39; length don&#39;t match.0xff633a38_
### LoopOverflow
@ -287,10 +213,7 @@ error LengthMismatch()
error LoopOverflow()
```
*Loop bounds have overflowed.0xdfb035c9*
_Loop bounds have overflowed.0xdfb035c9_
### NoTokens
@ -298,10 +221,7 @@ error LoopOverflow()
error NoTokens()
```
*No tokens array provided as argument.0xdf957883*
_No tokens array provided as argument.0xdf957883_
### NotEnoughTokens
@ -309,10 +229,7 @@ error NoTokens()
error NotEnoughTokens()
```
*Not enough token remaining on deposit.0x22bbb43c*
_Not enough token remaining on deposit.0x22bbb43c_
### NotExpired
@ -320,10 +237,7 @@ error NotEnoughTokens()
error NotExpired()
```
*Lock not expired or already released.Another lock with same ID is not expired yet.0xd0404f85*
_Lock not expired or already released.Another lock with same ID is not expired yet.0xd0404f85_
### OnlySeller
@ -331,10 +245,7 @@ error NotExpired()
error OnlySeller()
```
*Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726*
_Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726_
### TokenDenied
@ -342,10 +253,7 @@ error OnlySeller()
error TokenDenied()
```
*Token address not allowed to be deposited.0x1578328e*
_Token address not allowed to be deposited.0x1578328e_
### TxAlreadyUsed
@ -353,9 +261,4 @@ error TokenDenied()
error TxAlreadyUsed()
```
*Transaction already used to unlock payment.0xf490a6ea*
_Transaction already used to unlock payment.0xf490a6ea_

View File

@ -1,16 +1,8 @@
# P2PIX
## Methods
### _castAddrToKey
### \_castAddrToKey
```solidity
function _castAddrToKey(address _addr) external pure returns (uint256 _key)
@ -18,19 +10,19 @@ function _castAddrToKey(address _addr) external pure returns (uint256 _key)
Public method that handles `address` to `uint256` safe type casting.
*Function sighash: 0x4b2ae980.*
_Function sighash: 0x4b2ae980._
#### Parameters
| Name | Type | Description |
|---|---|---|
| _addr | address | undefined |
| ------ | ------- | ----------- |
| \_addr | address | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _key | uint256 | undefined |
| ----- | ------- | ----------- |
| \_key | uint256 | undefined |
### allowedERC20s
@ -38,21 +30,19 @@ Public method that handles `address` to `uint256` safe type casting.
function allowedERC20s(contract ERC20) external view returns (bool)
```
*Tokens allowed to serve as the underlying amount of a deposit.*
_Tokens allowed to serve as the underlying amount of a deposit._
#### Parameters
| Name | Type | Description |
|---|---|---|
| _0 | contract ERC20 | undefined |
| ---- | -------------- | ----------- |
| \_0 | contract ERC20 | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | bool | undefined |
| ---- | ---- | ----------- |
| \_0 | bool | undefined |
### cancelDeposit
@ -62,12 +52,12 @@ function cancelDeposit(uint256 depositID) external nonpayable
Enables seller to invalidate future locks made to his/her token offering order.
*This function does not affect any ongoing active locks.Function sighash: 0x72fada5c.*
_This function does not affect any ongoing active locks.Function sighash: 0x72fada5c._
#### Parameters
| Name | Type | Description |
|---|---|---|
| --------- | ------- | ----------- |
| depositID | uint256 | undefined |
### defaultLockBlocks
@ -76,16 +66,13 @@ Enables seller to invalidate future locks made to his/her token offering order.
function defaultLockBlocks() external view returns (uint256)
```
*Default blocks that lock will hold tokens.*
_Default blocks that lock will hold tokens._
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
### deposit
@ -95,21 +82,21 @@ function deposit(address _token, uint256 _amount, string _pixTarget, bytes32 all
Creates a deposit order based on a seller&#39;s offer of an amount of ERC20 tokens.
*Seller needs to send his tokens to the P2PIX smart contract.Function sighash: 0xbfe07da6.*
_Seller needs to send his tokens to the P2PIX smart contract.Function sighash: 0xbfe07da6._
#### Parameters
| Name | Type | Description |
|---|---|---|
| _token | address | undefined |
| _amount | uint256 | undefined |
| _pixTarget | string | Pix key destination provided by the offer&#39;s seller. |
| ------------- | ------- | ------------------------------------------------------- |
| \_token | address | undefined |
| \_amount | uint256 | undefined |
| \_pixTarget | string | Pix key destination provided by the offer&#39;s seller. |
| allowlistRoot | bytes32 | Optional allow list merkleRoot update `bytes32` value. |
#### Returns
| Name | Type | Description |
|---|---|---|
| --------- | ------- | -------------------------------------------------------------- |
| depositID | uint256 | The `uint256` return value provided as the deposit identifier. |
### depositCount
@ -118,16 +105,11 @@ Creates a deposit order based on a seller&#39;s offer of an amount of ERC20 toke
function depositCount() external view returns (uint256 _val)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _val | uint256 | undefined |
| ----- | ------- | ----------- |
| \_val | uint256 | undefined |
### lock
@ -137,24 +119,24 @@ function lock(uint256 _depositID, address _buyerAddress, address _relayerTarget,
Public method designed to lock an remaining amount of the deposit order of a seller.
*This method can be performed either by: - An user allowed via the seller&#39;s allowlist; - An user with enough userRecord to lock the wished amount; There can only exist a lock per each `_amount` partitioned from the total `remaining` value.Locks can only be performed in valid orders.Function sighash: 0x03aaf306.*
_This method can be performed either by: - An user allowed via the seller&#39;s allowlist; - An user with enough userRecord to lock the wished amount; There can only exist a lock per each `_amount` partitioned from the total `remaining` value.Locks can only be performed in valid orders.Function sighash: 0x03aaf306._
#### Parameters
| Name | Type | Description |
|---|---|---|
| _depositID | uint256 | undefined |
| _buyerAddress | address | The address of the buyer of a `_depositID`. |
| _relayerTarget | address | Target address entitled to the `relayerPremim`. |
| _relayerPremium | uint256 | The refund/premium owed to a relayer. |
| _amount | uint256 | The deposit&#39;s remaining amount wished to be locked. |
| ---------------- | --------- | ------------------------------------------------------------------------------------------------------------------------ |
| \_depositID | uint256 | undefined |
| \_buyerAddress | address | The address of the buyer of a `_depositID`. |
| \_relayerTarget | address | Target address entitled to the `relayerPremim`. |
| \_relayerPremium | uint256 | The refund/premium owed to a relayer. |
| \_amount | uint256 | The deposit&#39;s remaining amount wished to be locked. |
| merkleProof | bytes32[] | This value should be: - Provided as a pass if the `msg.sender` is in the seller&#39;s allowlist; - Left empty otherwise; |
| expiredLocks | bytes32[] | An array of `bytes32` identifiers to be provided so to unexpire locks using this transaction gas push. |
#### Returns
| Name | Type | Description |
|---|---|---|
| ------ | ------- | ---------------------------------------------------- |
| lockID | bytes32 | The `bytes32` value returned as the lock identifier. |
### mapDeposits
@ -163,20 +145,18 @@ Public method designed to lock an remaining amount of the deposit order of a sel
function mapDeposits(uint256) external view returns (uint256 remaining, string pixTarget, address seller, address token, bool valid)
```
*Seller list of deposits*
_Seller list of deposits_
#### Parameters
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| --------- | ------- | ----------- |
| remaining | uint256 | undefined |
| pixTarget | string | undefined |
| seller | address | undefined |
@ -189,20 +169,18 @@ function mapDeposits(uint256) external view returns (uint256 remaining, string p
function mapLocks(bytes32) external view returns (uint256 depositID, uint256 relayerPremium, uint256 amount, uint256 expirationBlock, address buyerAddress, address relayerTarget, address relayerAddress)
```
*List of Locks.*
_List of Locks._
#### Parameters
| Name | Type | Description |
|---|---|---|
| _0 | bytes32 | undefined |
| ---- | ------- | ----------- |
| \_0 | bytes32 | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| --------------- | ------- | ----------- |
| depositID | uint256 | undefined |
| relayerPremium | uint256 | undefined |
| amount | uint256 | undefined |
@ -217,16 +195,11 @@ function mapLocks(bytes32) external view returns (uint256 depositID, uint256 rel
function owner() external view returns (address)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |
| ---- | ------- | ----------- |
| \_0 | address | undefined |
### release
@ -236,14 +209,14 @@ function release(bytes32 lockID, address _relayerTarget, uint256 pixTimestamp, b
Lock release method that liquidate lock orders and distributes relayer fees.
*This method can be called by any public actor as long the signature provided is valid.`relayerPremium` gets splitted equaly if `relayerTarget` addresses differ.If the `msg.sender` of this method and `l.relayerAddress` are the same, `msg.sender` accrues both l.amount and l.relayerPremium as userRecord credit. In case of they differing: - `lock` caller gets accrued with `l.amount` as userRecord credit; - `release` caller gets accrued with `l.relayerPremium` as userRecord credit; Function sighash: 0x4e1389ed.*
_This method can be called by any public actor as long the signature provided is valid.`relayerPremium` gets splitted equaly if `relayerTarget` addresses differ.If the `msg.sender` of this method and `l.relayerAddress` are the same, `msg.sender` accrues both l.amount and l.relayerPremium as userRecord credit. In case of they differing: - `lock` caller gets accrued with `l.amount` as userRecord credit; - `release` caller gets accrued with `l.relayerPremium` as userRecord credit; Function sighash: 0x4e1389ed._
#### Parameters
| Name | Type | Description |
|---|---|---|
| --------------- | ------- | ----------------------------------------------- |
| lockID | bytes32 | undefined |
| _relayerTarget | address | Target address entitled to the `relayerPremim`. |
| \_relayerTarget | address | Target address entitled to the `relayerPremim`. |
| pixTimestamp | uint256 | undefined |
| r | bytes32 | undefined |
| s | bytes32 | undefined |
@ -257,14 +230,11 @@ function reputation() external view returns (contract IReputation)
███ Storage ████████████████████████████████████████████████████████████
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | contract IReputation | undefined |
| ---- | -------------------- | ----------- |
| \_0 | contract IReputation | undefined |
### sellerAllowList
@ -272,21 +242,19 @@ function reputation() external view returns (contract IReputation)
function sellerAllowList(uint256) external view returns (bytes32)
```
*Seller casted to key =&gt; Seller&#39;s allowlist merkleroot.*
_Seller casted to key =&gt; Seller&#39;s allowlist merkleroot._
#### Parameters
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | bytes32 | undefined |
| ---- | ------- | ----------- |
| \_0 | bytes32 | undefined |
### setDefaultLockBlocks
@ -294,15 +262,11 @@ function sellerAllowList(uint256) external view returns (bytes32)
function setDefaultLockBlocks(uint256 _blocks) external nonpayable
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| _blocks | uint256 | undefined |
| -------- | ------- | ----------- |
| \_blocks | uint256 | undefined |
### setOwner
@ -310,14 +274,10 @@ function setDefaultLockBlocks(uint256 _blocks) external nonpayable
function setOwner(address newOwner) external nonpayable
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| -------- | ------- | ----------- |
| newOwner | address | undefined |
### setReputation
@ -326,15 +286,11 @@ function setOwner(address newOwner) external nonpayable
function setReputation(contract IReputation _reputation) external nonpayable
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| _reputation | contract IReputation | undefined |
| ------------ | -------------------- | ----------- |
| \_reputation | contract IReputation | undefined |
### setRoot
@ -342,14 +298,10 @@ function setReputation(contract IReputation _reputation) external nonpayable
function setRoot(address addr, bytes32 merkleroot) external nonpayable
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ---------- | ------- | ----------- |
| addr | address | undefined |
| merkleroot | bytes32 | undefined |
@ -359,15 +311,11 @@ function setRoot(address addr, bytes32 merkleroot) external nonpayable
function setValidSigners(address[] _validSigners) external nonpayable
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| _validSigners | address[] | undefined |
| -------------- | --------- | ----------- |
| \_validSigners | address[] | undefined |
### tokenSettings
@ -375,16 +323,12 @@ function setValidSigners(address[] _validSigners) external nonpayable
function tokenSettings(address[] _tokens, bool[] _states) external nonpayable
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| _tokens | address[] | undefined |
| _states | bool[] | undefined |
| -------- | --------- | ----------- |
| \_tokens | address[] | undefined |
| \_states | bool[] | undefined |
### unlockExpired
@ -394,12 +338,12 @@ function unlockExpired(bytes32[] lockIDs) external nonpayable
Unlocks expired locks.
*Triggered in the callgraph by both `lock` and `withdraw` functions.This method can also have any public actor as its `tx.origin`.For each successfull unexpired lock recovered, `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.Function sighash: 0x8e2749d6.*
_Triggered in the callgraph by both `lock` and `withdraw` functions.This method can also have any public actor as its `tx.origin`.For each successfull unexpired lock recovered, `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.Function sighash: 0x8e2749d6._
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------- | --------- | ----------- |
| lockIDs | bytes32[] | undefined |
### userRecord
@ -408,21 +352,19 @@ Unlocks expired locks.
function userRecord(uint256) external view returns (uint256)
```
*Stores an relayer&#39;s last computed credit.*
_Stores an relayer&#39;s last computed credit._
#### Parameters
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
### validBacenSigners
@ -430,21 +372,19 @@ function userRecord(uint256) external view returns (uint256)
function validBacenSigners(uint256) external view returns (bool)
```
*List of valid Bacen signature addresses*
_List of valid Bacen signature addresses_
#### Parameters
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | bool | undefined |
| ---- | ---- | ----------- |
| \_0 | bool | undefined |
### withdraw
@ -454,12 +394,12 @@ function withdraw(uint256 depositID, bytes32[] expiredLocks) external nonpayable
Seller&#39;s expired deposit fund sweeper.
*A seller may use this method to recover tokens from expired deposits.Function sighash: 0x36317972.*
_A seller may use this method to recover tokens from expired deposits.Function sighash: 0x36317972._
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------------ | --------- | ----------- |
| depositID | uint256 | undefined |
| expiredLocks | bytes32[] | undefined |
@ -469,12 +409,7 @@ Seller&#39;s expired deposit fund sweeper.
function withdrawBalance() external nonpayable
```
*Contract&#39;s underlying balance withdraw method.Function sighash: 0x5fd8c710.*
_Contract&#39;s underlying balance withdraw method.Function sighash: 0x5fd8c710._
## Events
@ -484,14 +419,10 @@ function withdrawBalance() external nonpayable
event AllowedERC20Updated(address indexed token, bool indexed state)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| --------------- | ------- | ----------- |
| token `indexed` | address | undefined |
| state `indexed` | bool | undefined |
@ -503,12 +434,10 @@ event DepositAdded(address indexed seller, uint256 depositID, address token, uin
███ Events ████████████████████████████████████████████████████████████
#### Parameters
| Name | Type | Description |
|---|---|---|
| ---------------- | ------- | ----------- |
| seller `indexed` | address | undefined |
| depositID | uint256 | undefined |
| token | address | undefined |
@ -520,14 +449,10 @@ event DepositAdded(address indexed seller, uint256 depositID, address token, uin
event DepositClosed(address indexed seller, uint256 depositID)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ---------------- | ------- | ----------- |
| seller `indexed` | address | undefined |
| depositID | uint256 | undefined |
@ -537,14 +462,10 @@ event DepositClosed(address indexed seller, uint256 depositID)
event DepositWithdrawn(address indexed seller, uint256 depositID, uint256 amount)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ---------------- | ------- | ----------- |
| seller `indexed` | address | undefined |
| depositID | uint256 | undefined |
| amount | uint256 | undefined |
@ -555,14 +476,10 @@ event DepositWithdrawn(address indexed seller, uint256 depositID, uint256 amount
event FundsWithdrawn(address owner, uint256 amount)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------ | ------- | ----------- |
| owner | address | undefined |
| amount | uint256 | undefined |
@ -572,14 +489,10 @@ event FundsWithdrawn(address owner, uint256 amount)
event LockAdded(address indexed buyer, bytes32 indexed lockID, uint256 depositID, uint256 amount)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ---------------- | ------- | ----------- |
| buyer `indexed` | address | undefined |
| lockID `indexed` | bytes32 | undefined |
| depositID | uint256 | undefined |
@ -591,14 +504,10 @@ event LockAdded(address indexed buyer, bytes32 indexed lockID, uint256 depositID
event LockBlocksUpdated(uint256 blocks)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------ | ------- | ----------- |
| blocks | uint256 | undefined |
### LockReleased
@ -607,14 +516,10 @@ event LockBlocksUpdated(uint256 blocks)
event LockReleased(address indexed buyer, bytes32 lockId)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| --------------- | ------- | ----------- |
| buyer `indexed` | address | undefined |
| lockId | bytes32 | undefined |
@ -624,14 +529,10 @@ event LockReleased(address indexed buyer, bytes32 lockId)
event LockReturned(address indexed buyer, bytes32 lockId)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| --------------- | ------- | ----------- |
| buyer `indexed` | address | undefined |
| lockId | bytes32 | undefined |
@ -641,14 +542,10 @@ event LockReturned(address indexed buyer, bytes32 lockId)
event OwnerUpdated(address indexed user, address indexed newOwner)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------------------ | ------- | ----------- |
| user `indexed` | address | undefined |
| newOwner `indexed` | address | undefined |
@ -658,14 +555,10 @@ event OwnerUpdated(address indexed user, address indexed newOwner)
event ReputationUpdated(address reputation)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ---------- | ------- | ----------- |
| reputation | address | undefined |
### ValidSignersUpdated
@ -674,18 +567,12 @@ event ReputationUpdated(address reputation)
event ValidSignersUpdated(address[] signers)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------- | --------- | ----------- |
| signers | address[] | undefined |
## Errors
### AddressDenied
@ -694,10 +581,7 @@ event ValidSignersUpdated(address[] signers)
error AddressDenied()
```
*Address doesn&#39;t exist in a MerkleTree.Address not allowed as relayer.0x3b8474be*
_Address doesn&#39;t exist in a MerkleTree.Address not allowed as relayer.0x3b8474be_
### AlreadyReleased
@ -705,10 +589,7 @@ error AddressDenied()
error AlreadyReleased()
```
*Lock already released or returned.0x63b4904e*
_Lock already released or returned.0x63b4904e_
### AmountNotAllowed
@ -716,10 +597,7 @@ error AlreadyReleased()
error AmountNotAllowed()
```
*Wished amount to be locked exceeds the limit allowed.0x1c18f846*
_Wished amount to be locked exceeds the limit allowed.0x1c18f846_
### DepositAlreadyExists
@ -727,10 +605,7 @@ error AmountNotAllowed()
error DepositAlreadyExists()
```
*Deposit already exist and it is still valid.0xc44bd765*
_Deposit already exist and it is still valid.0xc44bd765_
### InvalidDeposit
@ -738,10 +613,7 @@ error DepositAlreadyExists()
error InvalidDeposit()
```
*Deposit not valid anymore.0xb2e532de*
_Deposit not valid anymore.0xb2e532de_
### InvalidSigner
@ -749,10 +621,7 @@ error InvalidDeposit()
error InvalidSigner()
```
*Signer is not a valid signer.0x815e1d64*
_Signer is not a valid signer.0x815e1d64_
### LengthMismatch
@ -760,10 +629,7 @@ error InvalidSigner()
error LengthMismatch()
```
*Arrays&#39; length don&#39;t match.0xff633a38*
_Arrays&#39; length don&#39;t match.0xff633a38_
### LoopOverflow
@ -771,10 +637,7 @@ error LengthMismatch()
error LoopOverflow()
```
*Loop bounds have overflowed.0xdfb035c9*
_Loop bounds have overflowed.0xdfb035c9_
### NoTokens
@ -782,10 +645,7 @@ error LoopOverflow()
error NoTokens()
```
*No tokens array provided as argument.0xdf957883*
_No tokens array provided as argument.0xdf957883_
### NotEnoughTokens
@ -793,10 +653,7 @@ error NoTokens()
error NotEnoughTokens()
```
*Not enough token remaining on deposit.0x22bbb43c*
_Not enough token remaining on deposit.0x22bbb43c_
### NotExpired
@ -804,10 +661,7 @@ error NotEnoughTokens()
error NotExpired()
```
*Lock not expired or already released.Another lock with same ID is not expired yet.0xd0404f85*
_Lock not expired or already released.Another lock with same ID is not expired yet.0xd0404f85_
### OnlySeller
@ -815,10 +669,7 @@ error NotExpired()
error OnlySeller()
```
*Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726*
_Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726_
### Reentrancy
@ -826,21 +677,13 @@ error OnlySeller()
error Reentrancy()
```
### TokenDenied
```solidity
error TokenDenied()
```
*Token address not allowed to be deposited.0x1578328e*
_Token address not allowed to be deposited.0x1578328e_
### TxAlreadyUsed
@ -848,9 +691,4 @@ error TokenDenied()
error TxAlreadyUsed()
```
*Transaction already used to unlock payment.0xf490a6ea*
_Transaction already used to unlock payment.0xf490a6ea_

View File

@ -1,13 +1,5 @@
# Reputation
## Methods
### limiter
@ -16,21 +8,17 @@
function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| _userCredit | uint256 | undefined |
| ------------ | ------- | ----------- |
| \_userCredit | uint256 | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _spendLimit | uint256 | undefined |
| ------------ | ------- | ----------- |
| \_spendLimit | uint256 | undefined |
### magicValue
@ -38,16 +26,13 @@ function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit
function magicValue() external view returns (uint256)
```
*Denominator&#39;s constant operand for the `limiter` fx. *
_Denominator&#39;s constant operand for the `limiter` fx. _
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
### maxLimit
@ -55,16 +40,13 @@ function magicValue() external view returns (uint256)
function maxLimit() external view returns (uint256)
```
*Asymptote numerator constant value for the `limiter` fx.*
_Asymptote numerator constant value for the `limiter` fx._
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
### owner
@ -72,16 +54,11 @@ function maxLimit() external view returns (uint256)
function owner() external view returns (address)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |
| ---- | ------- | ----------- |
| \_0 | address | undefined |
### setOwner
@ -89,18 +66,12 @@ function owner() external view returns (address)
function setOwner(address newOwner) external nonpayable
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| -------- | ------- | ----------- |
| newOwner | address | undefined |
## Events
### OwnerUpdated
@ -109,16 +80,9 @@ function setOwner(address newOwner) external nonpayable
event OwnerUpdated(address indexed user, address indexed newOwner)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------------------ | ------- | ----------- |
| user `indexed` | address | undefined |
| newOwner `indexed` | address | undefined |

View File

@ -1,13 +1,9 @@
# Owned
*Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Owned.sol)*
_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Owned.sol)_
Simple single owner authorization mixin.
## Methods
### owner
@ -16,16 +12,11 @@ Simple single owner authorization mixin.
function owner() external view returns (address)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |
| ---- | ------- | ----------- |
| \_0 | address | undefined |
### setOwner
@ -33,18 +24,12 @@ function owner() external view returns (address)
function setOwner(address newOwner) external nonpayable
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| -------- | ------- | ----------- |
| newOwner | address | undefined |
## Events
### OwnerUpdated
@ -53,16 +38,9 @@ function setOwner(address newOwner) external nonpayable
event OwnerUpdated(address indexed user, address indexed newOwner)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------------------ | ------- | ----------- |
| user `indexed` | address | undefined |
| newOwner `indexed` | address | undefined |

View File

@ -1,13 +1,5 @@
# IReputation
## Methods
### limiter
@ -16,22 +8,14 @@
function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| _userCredit | uint256 | undefined |
| ------------ | ------- | ----------- |
| \_userCredit | uint256 | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _spendLimit | uint256 | undefined |
| ------------ | ------- | ----------- |
| \_spendLimit | uint256 | undefined |

View File

@ -1,13 +1,5 @@
# MockToken
## Methods
### DOMAIN_SEPARATOR
@ -16,16 +8,11 @@
function DOMAIN_SEPARATOR() external view returns (bytes32)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | bytes32 | undefined |
| ---- | ------- | ----------- |
| \_0 | bytes32 | undefined |
### allowance
@ -33,22 +20,18 @@ function DOMAIN_SEPARATOR() external view returns (bytes32)
function allowance(address, address) external view returns (uint256)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |
| _1 | address | undefined |
| ---- | ------- | ----------- |
| \_0 | address | undefined |
| \_1 | address | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
### approve
@ -56,22 +39,18 @@ function allowance(address, address) external view returns (uint256)
function approve(address spender, uint256 amount) external nonpayable returns (bool)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------- | ------- | ----------- |
| spender | address | undefined |
| amount | uint256 | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | bool | undefined |
| ---- | ---- | ----------- |
| \_0 | bool | undefined |
### balanceOf
@ -79,21 +58,17 @@ function approve(address spender, uint256 amount) external nonpayable returns (b
function balanceOf(address) external view returns (uint256)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |
| ---- | ------- | ----------- |
| \_0 | address | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
### decimals
@ -101,16 +76,11 @@ function balanceOf(address) external view returns (uint256)
function decimals() external view returns (uint8)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint8 | undefined |
| ---- | ----- | ----------- |
| \_0 | uint8 | undefined |
### name
@ -118,16 +88,11 @@ function decimals() external view returns (uint8)
function name() external view returns (string)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | string | undefined |
| ---- | ------ | ----------- |
| \_0 | string | undefined |
### nonces
@ -135,21 +100,17 @@ function name() external view returns (string)
function nonces(address) external view returns (uint256)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |
| ---- | ------- | ----------- |
| \_0 | address | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
### permit
@ -157,14 +118,10 @@ function nonces(address) external view returns (uint256)
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external nonpayable
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| -------- | ------- | ----------- |
| owner | address | undefined |
| spender | address | undefined |
| value | uint256 | undefined |
@ -179,16 +136,11 @@ function permit(address owner, address spender, uint256 value, uint256 deadline,
function symbol() external view returns (string)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | string | undefined |
| ---- | ------ | ----------- |
| \_0 | string | undefined |
### totalSupply
@ -196,16 +148,11 @@ function symbol() external view returns (string)
function totalSupply() external view returns (uint256)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
### transfer
@ -213,22 +160,18 @@ function totalSupply() external view returns (uint256)
function transfer(address to, uint256 amount) external nonpayable returns (bool)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------ | ------- | ----------- |
| to | address | undefined |
| amount | uint256 | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | bool | undefined |
| ---- | ---- | ----------- |
| \_0 | bool | undefined |
### transferFrom
@ -236,14 +179,10 @@ function transfer(address to, uint256 amount) external nonpayable returns (bool)
function transferFrom(address from, address to, uint256 amount) external nonpayable returns (bool)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------ | ------- | ----------- |
| from | address | undefined |
| to | address | undefined |
| amount | uint256 | undefined |
@ -251,10 +190,8 @@ function transferFrom(address from, address to, uint256 amount) external nonpaya
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | bool | undefined |
| ---- | ---- | ----------- |
| \_0 | bool | undefined |
## Events
@ -264,14 +201,10 @@ function transferFrom(address from, address to, uint256 amount) external nonpaya
event Approval(address indexed owner, address indexed spender, uint256 amount)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ----------------- | ------- | ----------- |
| owner `indexed` | address | undefined |
| spender `indexed` | address | undefined |
| amount | uint256 | undefined |
@ -282,17 +215,10 @@ event Approval(address indexed owner, address indexed spender, uint256 amount)
event Transfer(address indexed from, address indexed to, uint256 amount)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| -------------- | ------- | ----------- |
| from `indexed` | address | undefined |
| to `indexed` | address | undefined |
| amount | uint256 | undefined |

View File

@ -1,12 +1,10 @@
# ERC20
*Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)*
_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)_
Modern and gas efficient ERC20 + EIP-2612 implementation.
*Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.*
_Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it._
## Methods
@ -16,16 +14,11 @@ Modern and gas efficient ERC20 + EIP-2612 implementation.
function DOMAIN_SEPARATOR() external view returns (bytes32)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | bytes32 | undefined |
| ---- | ------- | ----------- |
| \_0 | bytes32 | undefined |
### allowance
@ -33,22 +26,18 @@ function DOMAIN_SEPARATOR() external view returns (bytes32)
function allowance(address, address) external view returns (uint256)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |
| _1 | address | undefined |
| ---- | ------- | ----------- |
| \_0 | address | undefined |
| \_1 | address | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
### approve
@ -56,22 +45,18 @@ function allowance(address, address) external view returns (uint256)
function approve(address spender, uint256 amount) external nonpayable returns (bool)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------- | ------- | ----------- |
| spender | address | undefined |
| amount | uint256 | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | bool | undefined |
| ---- | ---- | ----------- |
| \_0 | bool | undefined |
### balanceOf
@ -79,21 +64,17 @@ function approve(address spender, uint256 amount) external nonpayable returns (b
function balanceOf(address) external view returns (uint256)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |
| ---- | ------- | ----------- |
| \_0 | address | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
### decimals
@ -101,16 +82,11 @@ function balanceOf(address) external view returns (uint256)
function decimals() external view returns (uint8)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint8 | undefined |
| ---- | ----- | ----------- |
| \_0 | uint8 | undefined |
### name
@ -118,16 +94,11 @@ function decimals() external view returns (uint8)
function name() external view returns (string)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | string | undefined |
| ---- | ------ | ----------- |
| \_0 | string | undefined |
### nonces
@ -135,21 +106,17 @@ function name() external view returns (string)
function nonces(address) external view returns (uint256)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |
| ---- | ------- | ----------- |
| \_0 | address | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
### permit
@ -157,14 +124,10 @@ function nonces(address) external view returns (uint256)
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external nonpayable
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| -------- | ------- | ----------- |
| owner | address | undefined |
| spender | address | undefined |
| value | uint256 | undefined |
@ -179,16 +142,11 @@ function permit(address owner, address spender, uint256 value, uint256 deadline,
function symbol() external view returns (string)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | string | undefined |
| ---- | ------ | ----------- |
| \_0 | string | undefined |
### totalSupply
@ -196,16 +154,11 @@ function symbol() external view returns (string)
function totalSupply() external view returns (uint256)
```
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |
| ---- | ------- | ----------- |
| \_0 | uint256 | undefined |
### transfer
@ -213,22 +166,18 @@ function totalSupply() external view returns (uint256)
function transfer(address to, uint256 amount) external nonpayable returns (bool)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------ | ------- | ----------- |
| to | address | undefined |
| amount | uint256 | undefined |
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | bool | undefined |
| ---- | ---- | ----------- |
| \_0 | bool | undefined |
### transferFrom
@ -236,14 +185,10 @@ function transfer(address to, uint256 amount) external nonpayable returns (bool)
function transferFrom(address from, address to, uint256 amount) external nonpayable returns (bool)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ------ | ------- | ----------- |
| from | address | undefined |
| to | address | undefined |
| amount | uint256 | undefined |
@ -251,10 +196,8 @@ function transferFrom(address from, address to, uint256 amount) external nonpaya
#### Returns
| Name | Type | Description |
|---|---|---|
| _0 | bool | undefined |
| ---- | ---- | ----------- |
| \_0 | bool | undefined |
## Events
@ -264,14 +207,10 @@ function transferFrom(address from, address to, uint256 amount) external nonpaya
event Approval(address indexed owner, address indexed spender, uint256 amount)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| ----------------- | ------- | ----------- |
| owner `indexed` | address | undefined |
| spender `indexed` | address | undefined |
| amount | uint256 | undefined |
@ -282,17 +221,10 @@ event Approval(address indexed owner, address indexed spender, uint256 amount)
event Transfer(address indexed from, address indexed to, uint256 amount)
```
#### Parameters
| Name | Type | Description |
|---|---|---|
| -------------- | ------- | ----------- |
| from `indexed` | address | undefined |
| to `indexed` | address | undefined |
| amount | uint256 | undefined |

View File

@ -1,14 +1,12 @@
# Counters
*buf0t9Modified from OpenZeppelin Contracts (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol)*
_buf0t9Modified from OpenZeppelin Contracts (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol)_
> Counters
Provides counters that can only be incremented, decrementedor reset.
*Include with `using Counters for Counters.Counter;`*
_Include with `using Counters for Counters.Counter;`_
## Errors
@ -18,9 +16,4 @@ Provides counters that can only be incremented, decrementedor reset.
error DecOverflow()
```
*0xce3a3d37*
_0xce3a3d37_

View File

@ -1,12 +1,5 @@
# FixedPointMathLib
*Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol)*
_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol)_
Arithmetic library with operations for fixed-point numbers.

View File

@ -1,12 +1,5 @@
# MerkleProofLib
*Solady (https://github.com/vectorized/solady/blob/main/src/utils/MerkleProofLib.sol)Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/MerkleProofLib.sol)Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol)*
_Solady (https://github.com/vectorized/solady/blob/main/src/utils/MerkleProofLib.sol)Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/MerkleProofLib.sol)Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol)_
Gas optimized verification of proof of inclusion for a leaf in a Merkle tree.

View File

@ -1,15 +1,9 @@
# ReentrancyGuard
*z0r0z.ethModified from Seaport (https://github.com/ProjectOpenSea/seaport/blob/main/contracts/lib/ReentrancyGuard.sol)Modified from Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/ReentrancyGuard.sol)*
_z0r0z.ethModified from Seaport (https://github.com/ProjectOpenSea/seaport/blob/main/contracts/lib/ReentrancyGuard.sol)Modified from Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/ReentrancyGuard.sol)_
Reentrancy protection for smart contracts.
## Errors
### Reentrancy
@ -17,10 +11,3 @@ Reentrancy protection for smart contracts.
```solidity
error Reentrancy()
```

View File

@ -1,12 +1,7 @@
# SafeTransferLib
*Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)*
_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)_
Safe ETH and ERC20 transfer library that gracefully handles missing return values.
*Caution! This library won&#39;t check that a token has code, responsibility is delegated to the caller.*
_Caution! This library won&#39;t check that a token has code, responsibility is delegated to the caller._

View File

@ -1,12 +1,11 @@
import "@nomicfoundation/hardhat-chai-matchers";
import "@nomicfoundation/hardhat-toolbox";
import { config as dotenvConfig } from "dotenv";
import "hardhat-tracer";
import { HardhatUserConfig } from "hardhat/config";
import { NetworkUserConfig } from "hardhat/types";
import { resolve } from "path";
import "hardhat-tracer";
dotenvConfig({ path: resolve(__dirname, "./.env") });
const mnemonic: string | undefined = process.env.MNEMONIC;

View File

@ -2,6 +2,7 @@ import "@nomiclabs/hardhat-ethers";
import "@nomiclabs/hardhat-etherscan";
import * as fs from "fs";
import { ethers, network } from "hardhat";
// import hre from "hardhat";
interface Deploys {

View File

@ -3,6 +3,7 @@ import "@nomiclabs/hardhat-etherscan";
import { BigNumber } from "ethers";
import * as fs from "fs";
import { ethers, network } from "hardhat";
// import hre from "hardhat";
interface Deploys {

View File

@ -70,6 +70,11 @@ const _abi = [
name: "OnlySeller",
type: "error",
},
{
inputs: [],
name: "StaticCallFailed",
type: "error",
},
{
inputs: [],
name: "TokenDenied",

File diff suppressed because one or more lines are too long

149
test/p2pix.test.ts Normal file
View File

@ -0,0 +1,149 @@
import "@nomicfoundation/hardhat-chai-matchers";
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
import { expect } from "chai";
import { BigNumber, Wallet } from "ethers";
import { ethers, network } from "hardhat";
import { MockToken, P2PIX, Reputation } from "../src/types";
import { P2PixErrors } from "./utils/errors";
import { p2pixFixture } from "./utils/fixtures";
describe("P2PIX", () => {
type WalletWithAddress = Wallet & SignerWithAddress;
// contract deployer/admin
let owner: WalletWithAddress;
// extra EOAs
let acc01: WalletWithAddress;
let acc02: WalletWithAddress;
let acc03: WalletWithAddress;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let res: any;
let p2pix: P2PIX; // Contract instance
let erc20: MockToken; // Token instance
let reputation: Reputation; // Reputation Interface instance;
const fundAmount: BigNumber =
ethers.utils.parseEther("10000");
const price: BigNumber = ethers.utils.parseEther("100");
const zero = ethers.constants.AddressZero;
before("Set signers and reset network", async () => {
[owner, acc01, acc02, acc03] =
await // eslint-disable-next-line @typescript-eslint/no-explicit-any
(ethers as any).getSigners();
await network.provider.send("hardhat_reset");
});
beforeEach("Load deployment fixtures", async () => {
({ erc20, p2pix, reputation } = await loadFixture(
p2pixFixture,
));
});
describe("Init", async () => {
it("P2PIX, Reputation and ERC20 should initialize", async () => {
await p2pix.deployed();
await erc20.deployed();
await reputation.deployed();
expect(p2pix).to.be.ok;
expect(erc20).to.be.ok;
expect(reputation).to.be.ok;
const ownerKey = await p2pix._castAddrToKey(
owner.address,
);
const acc01Key = await p2pix._castAddrToKey(
acc01.address,
);
// storage checks
expect(
await p2pix.callStatic.defaultLockBlocks(),
).to.eq(4);
expect(await p2pix.callStatic.reputation()).to.eq(
reputation.address,
);
expect(await p2pix.callStatic.depositCount()).to.eq(0);
expect(
await p2pix.callStatic.validBacenSigners(ownerKey),
).to.eq(true);
expect(
await p2pix.callStatic.validBacenSigners(acc01Key),
).to.eq(true);
expect(
await p2pix.callStatic.allowedERC20s(erc20.address),
).to.eq(true);
// event emission
await expect(await p2pix.deployTransaction)
.to.emit(p2pix, "OwnerUpdated")
.withArgs(zero, owner.address)
.and.to.emit(p2pix, "LockBlocksUpdated")
.withArgs(4)
.and.to.emit(p2pix, "ReputationUpdated")
.withArgs(reputation.address)
.and.to.emit(p2pix, "ValidSignersUpdated")
.withArgs([owner.address, acc01.address])
.and.to.emit(p2pix, "AllowedERC20Updated")
.withArgs(erc20.address, true);
});
it("accounts have been funded", async () => {
// can't be eq to fundAmount due to contract deployment cost
res = await ethers.provider.getBalance(owner.address);
expect(res.toString()).to.have.lengthOf(22);
// console.log(res); // lengthOf = 22
// console.log(fundAmount); // lengthOf = 23
// those should eq to hardhat prefunded account's value
expect(
await ethers.provider.getBalance(acc01.address),
).to.eq(fundAmount);
expect(
await ethers.provider.getBalance(acc02.address),
).to.eq(fundAmount);
expect(
await ethers.provider.getBalance(acc03.address),
).to.eq(fundAmount);
});
});
// each describe tests a set of functionalities of the contract's behavior
describe("Owner Functions", async () => {
it("should allow contract's balance withdraw", async () => {
const oldBal = await p2pix.provider.getBalance(
p2pix.address,
);
const tx1 = await acc01.sendTransaction({
to: p2pix.address,
value: price,
});
const newBal = await p2pix.provider.getBalance(
p2pix.address,
);
expect(tx1).to.be.ok;
expect(oldBal).to.eq(0);
expect(newBal).to.eq(price);
await expect(
p2pix.withdrawBalance(),
).to.changeEtherBalances(
[owner.address, p2pix.address],
[price, "-100000000000000000000"],
);
await expect(
p2pix.connect(acc01).withdrawBalance(),
).to.be.revertedWith(
P2PixErrors.UNAUTHORIZED,
);
});
});
});

View File

@ -8,4 +8,5 @@ export enum P2PixErrors {
AlreadyReleased = "AlreadyReleased",
TxAlreadyUsed = "TxAlreadyUsed",
InvalidSigner = "InvalidSigner",
UNAUTHORIZED = "UNAUTHORIZED",
}

82
test/utils/fixtures.ts Normal file
View File

@ -0,0 +1,82 @@
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
import { Signer } from "ethers";
import { ethers } from "hardhat";
// import keccak256 from "keccak256";
// import { MerkleTree } from "merkletreejs";
import {
MockToken,
P2PIX,
Reputation,
} from "../../src/types";
// exported interfaces
export interface P2pixFixture {
p2pix: P2PIX;
reputation: Reputation;
erc20: MockToken;
// proof: string[];
// wrongProof: string[];
// merkleRoot: string;
}
// exported constants
export const getSignerAddrs = (
amount: number,
addrs: SignerWithAddress[],
): string[] => {
const signers: string[] = [];
const buffr = addrs.slice(0, amount);
for (let i = 0; i < amount; i++) {
signers.push(buffr[i].address);
}
return signers;
};
export const randomSigners = (amount: number): Signer[] => {
const signers: Signer[] = [];
for (let i = 0; i < amount; i++) {
signers.push(ethers.Wallet.createRandom());
}
return signers;
};
export const getError = (Error: string) =>
ethers.utils
.keccak256(ethers.utils.toUtf8Bytes(Error))
.slice(0, 10);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const padBuffer = (addr: any) => {
return Buffer.from(
addr.substr(2).padStart(32 * 2, 0),
"hex",
);
};
// exported async functions
export async function p2pixFixture(): Promise<P2pixFixture> {
const validSigners = getSignerAddrs(
2,
await ethers.getSigners(),
);
const Reputation = await ethers.getContractFactory(
"Reputation",
);
const reputation =
(await Reputation.deploy()) as Reputation;
const ERC20 = await ethers.getContractFactory("MockToken");
const erc20 = (await ERC20.deploy(
ethers.utils.parseEther("20000000"), // 20M
)) as MockToken;
const P2PIX = await ethers.getContractFactory("P2PIX");
const p2pix = (await P2PIX.deploy(
4,
validSigners,
reputation.address,
[erc20.address],
[true],
)) as P2PIX;
return { reputation, erc20, p2pix };
}

View File

@ -3175,7 +3175,7 @@ __metadata:
languageName: node
linkType: hard
"bn.js@npm:^5.2.1":
"bn.js@npm:^5.2.0, bn.js@npm:^5.2.1":
version: 5.2.1
resolution: "bn.js@npm:5.2.1"
checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3
@ -3291,6 +3291,13 @@ __metadata:
languageName: node
linkType: hard
"buffer-reverse@npm:^1.0.1":
version: 1.0.1
resolution: "buffer-reverse@npm:1.0.1"
checksum: e350872a89b17af0a7e1bd7a73239a535164f3f010b0800add44f2e52bd0511548dc5b96c20309effba969868c385023d2d02a0add6155f6a76da7b3073b77bd
languageName: node
linkType: hard
"buffer-xor@npm:^1.0.3":
version: 1.0.3
resolution: "buffer-xor@npm:1.0.3"
@ -4146,6 +4153,13 @@ __metadata:
languageName: node
linkType: hard
"crypto-js@npm:^3.1.9-1":
version: 3.3.0
resolution: "crypto-js@npm:3.3.0"
checksum: 193923143a4784b2f974366068d96fe8280168fd3fef2bfea9551a5c3e32096f5a8fa49ff4eeb5bd0b9716d325618d38cfbe6125e359a4ef488fbca93e600824
languageName: node
linkType: hard
"cz-conventional-changelog@npm:3.2.0":
version: 3.2.0
resolution: "cz-conventional-changelog@npm:3.2.0"
@ -5067,7 +5081,7 @@ __metadata:
languageName: node
linkType: hard
"ethers@npm:^5.7.2":
"ethers@npm:^5.6.1, ethers@npm:^5.7.2":
version: 5.7.2
resolution: "ethers@npm:5.7.2"
dependencies:
@ -6035,6 +6049,19 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"hardhat-tracer@npm:^1.2.0":
version: 1.2.0
resolution: "hardhat-tracer@npm:1.2.0"
dependencies:
ethers: ^5.6.1
peerDependencies:
chalk: 4.x
ethers: 5.x
hardhat: 2.x
checksum: 1d348fb3ed60cbde2287329730ccd37c73af80cc2cf4ccfb045f26af26c7efebd4a6fdf611035f34ca7fb75d0eb95985e8f5ed4f0537d2615fb6e126d1d035f0
languageName: node
linkType: hard
"hardhat@npm:^2.12.2":
version: 2.12.2
resolution: "hardhat@npm:2.12.2"
@ -7028,6 +7055,17 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"keccak256@npm:^1.0.6":
version: 1.0.6
resolution: "keccak256@npm:1.0.6"
dependencies:
bn.js: ^5.2.0
buffer: ^6.0.3
keccak: ^3.0.2
checksum: decafb4b37adcfa6d06b6a5d28546d0d7a9f01ccf4b8cc8963cf8188fcc79a230d7e22988e860813623c602d764259734423e38fd7b9aadfeb409d6928a1d4cf
languageName: node
linkType: hard
"keccak@npm:^3.0.0":
version: 3.0.1
resolution: "keccak@npm:3.0.1"
@ -7456,6 +7494,19 @@ fsevents@~2.1.1:
languageName: node
linkType: hard
"merkletreejs@npm:^0.2.32":
version: 0.2.32
resolution: "merkletreejs@npm:0.2.32"
dependencies:
bignumber.js: ^9.0.1
buffer-reverse: ^1.0.1
crypto-js: ^3.1.9-1
treeify: ^1.1.0
web3-utils: ^1.3.4
checksum: 041b235adde94de584fdf5ef60138baca8d6f16bb48b3b7f714b607eaa76e4207ed5fef501ee5967371c56c5876804c4ff6da4705707f8cc0362d5c1e0358425
languageName: node
linkType: hard
"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4":
version: 4.0.4
resolution: "micromatch@npm:4.0.4"
@ -8407,9 +8458,12 @@ fsevents@~2.1.1:
fs-extra: ^10.1.0
hardhat: ^2.12.2
hardhat-gas-reporter: ^1.0.9
hardhat-tracer: ^1.2.0
husky: ^8.0.1
keccak256: ^1.0.6
lint-staged: ^13.0.3
lodash: ^4.17.21
merkletreejs: ^0.2.32
mocha: ^10.1.0
pinst: ^3.0.0
prettier: ^2.7.1
@ -10295,6 +10349,13 @@ resolve@1.17.0:
languageName: node
linkType: hard
"treeify@npm:^1.1.0":
version: 1.1.0
resolution: "treeify@npm:1.1.0"
checksum: aa00dded220c1dd052573bd6fc2c52862f09870851a284f0d3650d72bf913ba9b4f6b824f4f1ab81899bae29375f4266b07fe47cbf82343a1efa13cc09ce87af
languageName: node
linkType: hard
"trim-newlines@npm:^3.0.0":
version: 3.0.0
resolution: "trim-newlines@npm:3.0.0"
@ -10805,7 +10866,7 @@ resolve@1.17.0:
languageName: node
linkType: hard
"web3-utils@npm:^1.3.6":
"web3-utils@npm:^1.3.4, web3-utils@npm:^1.3.6":
version: 1.8.1
resolution: "web3-utils@npm:1.8.1"
dependencies: