diff --git a/contracts/p2pix.sol b/contracts/p2pix.sol index 518cc20..6a60a60 100644 --- a/contracts/p2pix.sol +++ b/contracts/p2pix.sol @@ -21,8 +21,6 @@ contract P2PIX is BaseUtils { using DT for DT.Lock; using DT for DT.LockStatus; - /// ███ Storage ████████████████████████████████████████████████████████████ - uint256 public lockCounter; /// @dev List of Locks. @@ -30,8 +28,6 @@ contract P2PIX is BaseUtils { /// @dev Stores an relayer's last computed credit. mapping(uint256 => uint256) public userRecord; - /// ███ Constructor ████████████████████████████████████████████████████████ - constructor( uint256 defaultBlocks, address[] memory validSigners, @@ -48,15 +44,13 @@ contract P2PIX is BaseUtils { ) payable {/* */} - /// ███ Public FX ██████████████████████████████████████████████████████████ - /// @notice Creates a deposit order based on a seller's /// offer of an amount of ERC20 tokens. /// @notice Seller needs to send his tokens to the P2PIX smart contract. /// @param pixTarget Pix key destination provided by the offer's seller. /// @param allowlistRoot Optional allow list merkleRoot update `bytes32` value. /// as the deposit identifier. - /// @dev Function sighash: 0xbfe07da6. + /// @dev Function sighash: 0x5e918943 function deposit( string calldata pixTarget, bytes32 allowlistRoot, @@ -104,8 +98,8 @@ contract P2PIX is BaseUtils { /// @notice Enables seller to invalidate future /// locks made to his/her token offering order. - /// @dev This function does not affect any ongoing active locks. - /// @dev Function sighash: 0x72fada5c. + /// @notice This function does not affect any ongoing active locks. + /// @dev Function sighash: 0x6d82d9e0 function setValidState(ERC20 token, bool state) public { uint256 _sellerBalance = __sellerBalance(msg.sender, token); @@ -124,22 +118,22 @@ contract P2PIX is BaseUtils { /// @notice Public method designed to lock an remaining amount of /// the deposit order of a seller. - /// @dev Transaction forwarding must leave `merkleProof` empty; + /// @notice Transaction forwarding must leave `merkleProof` empty; /// otherwise, the trustedForwarder must be previously added /// to a seller whitelist. - /// @dev This method can be performed either by: + /// @notice This method can be performed either by: /// - An user allowed via the seller's allowlist; /// - An user with enough userRecord to lock the wished amount; - /// @dev There can only exist a lock per each `_amount` partitioned + /// @notice There can only exist a lock per each `_amount` partitioned /// from the total `remaining` value. - /// @dev Locks can only be performed in valid orders. + /// @notice Locks can only be performed in valid orders. /// @param amount The deposit's remaining amount wished to be locked. /// @param merkleProof Provided as a pass if the `msg.sender` is in the /// seller's allowlist; Left empty otherwise; - /// @param expiredLocks An array of `bytes32` identifiers to be + /// @param expiredLocks An array of identifiers to be /// provided so to unexpire locks using this transaction gas push. - /// @return lockID The `bytes32` value returned as the lock identifier. - /// @dev Function sighash: 0x03aaf306. + /// @return lockID The lock identifier. + /// @dev Function sighash: 0xdc43221c function lock( address seller, ERC20 token, @@ -196,16 +190,16 @@ contract P2PIX is BaseUtils { /// @notice Lock release method that liquidate lock /// orders and distributes relayer fees. - /// @dev This method can be called by any public actor + /// @notice This method can be called by any public actor /// as long the signature provided is valid. - /// @dev `relayerPremium` gets splitted equaly + /// @notice `relayerPremium` gets splitted equaly /// if relayer addresses differ. - /// @dev If the `msg.sender` of this method and `l.relayerAddress` are the same, + /// @notice 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; - /// @dev Function sighash: 0x4e1389ed. + /// @dev Function sighash: 0x11fc7f9a function release( uint256 lockID, bytes32 pixTimestamp, @@ -254,11 +248,11 @@ contract P2PIX is BaseUtils { } /// @notice Unlocks expired locks. - /// @dev Triggered in the callgraph by both `lock` and `withdraw` functions. - /// @dev This method can also have any public actor as its `tx.origin`. - /// @dev For each successfull unexpired lock recovered, + /// @notice Triggered in the callgraph by both `lock` and `withdraw` functions. + /// @notice This method can also have any public actor as its `tx.origin`. + /// @notice For each successfull unexpired lock recovered, /// `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value. - /// @dev Function sighash: 0x8e2749d6. + /// @dev Function sighash: 0xb0983d39 function unlockExpired(uint256[] calldata lockIDs) public { @@ -308,9 +302,9 @@ contract P2PIX is BaseUtils { } /// @notice Seller's expired deposit fund sweeper. - /// @dev A seller may use this method to recover + /// @notice A seller may use this method to recover /// tokens from expired deposits. - /// @dev Function sighash: 0x36317972. + /// @dev Function sighash: 0xfb8c5ef0 function withdraw( ERC20 token, uint256 amount, @@ -368,15 +362,12 @@ contract P2PIX is BaseUtils { } } - /// ███ Helper FX ██████████████████████████████████████████████████████████ - // solhint-disable-next-line no-empty-blocks receive() external payable {} /// @notice Private view auxiliar logic that reverts /// on a not expired lock passed as argument of the function. /// @dev Called exclusively by the `unlockExpired` method. - /// @dev Function sighash: 0x74e2a0bb. function _notExpired(DT.Lock storage _l) private view { if (_l.expirationBlock > block.number) revert NotExpired(); @@ -517,7 +508,7 @@ contract P2PIX is BaseUtils { } /// @notice External getter that returns the status of a lockIDs array. - /// @dev Call will not revert if provided with an empty array as parameter. + /// @notice Call will not revert if provided with an empty array as parameter. /// @dev Function sighash: 0x49ef8448 function getLocksStatus(uint256[] memory ids) external diff --git a/docs/DataTypes.md b/docs/DataTypes.md deleted file mode 100644 index 9c5f8d4..0000000 --- a/docs/DataTypes.md +++ /dev/null @@ -1 +0,0 @@ -# DataTypes diff --git a/docs/EventAndErrors.md b/docs/EventAndErrors.md deleted file mode 100644 index ff543b2..0000000 --- a/docs/EventAndErrors.md +++ /dev/null @@ -1,264 +0,0 @@ -# EventAndErrors - -## Events - -### AllowedERC20Updated - -```solidity -event AllowedERC20Updated(address indexed token, bool indexed state) -``` - -#### Parameters - -| Name | Type | Description | -| --------------- | ------- | ----------- | -| token `indexed` | address | undefined | -| state `indexed` | bool | undefined | - -### DepositAdded - -```solidity -event DepositAdded(address indexed seller, uint256 depositID, address token, uint256 amount) -``` - -███ Events ████████████████████████████████████████████████████████████ - -#### Parameters - -| Name | Type | Description | -| ---------------- | ------- | ----------- | -| seller `indexed` | address | undefined | -| depositID | uint256 | undefined | -| token | address | undefined | -| amount | uint256 | undefined | - -### DepositClosed - -```solidity -event DepositClosed(address indexed seller, uint256 depositID) -``` - -#### Parameters - -| Name | Type | Description | -| ---------------- | ------- | ----------- | -| seller `indexed` | address | undefined | -| depositID | uint256 | undefined | - -### DepositWithdrawn - -```solidity -event DepositWithdrawn(address indexed seller, uint256 depositID, uint256 amount) -``` - -#### Parameters - -| Name | Type | Description | -| ---------------- | ------- | ----------- | -| seller `indexed` | address | undefined | -| depositID | uint256 | undefined | -| amount | uint256 | undefined | - -### FundsWithdrawn - -```solidity -event FundsWithdrawn(address owner, uint256 amount) -``` - -#### Parameters - -| Name | Type | Description | -| ------ | ------- | ----------- | -| owner | address | undefined | -| amount | uint256 | undefined | - -### LockAdded - -```solidity -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 | -| amount | uint256 | undefined | - -### LockBlocksUpdated - -```solidity -event LockBlocksUpdated(uint256 blocks) -``` - -#### Parameters - -| Name | Type | Description | -| ------ | ------- | ----------- | -| blocks | uint256 | undefined | - -### LockReleased - -```solidity -event LockReleased(address indexed buyer, bytes32 lockId) -``` - -#### Parameters - -| Name | Type | Description | -| --------------- | ------- | ----------- | -| buyer `indexed` | address | undefined | -| lockId | bytes32 | undefined | - -### LockReturned - -```solidity -event LockReturned(address indexed buyer, bytes32 lockId) -``` - -#### Parameters - -| Name | Type | Description | -| --------------- | ------- | ----------- | -| buyer `indexed` | address | undefined | -| lockId | bytes32 | undefined | - -### ReputationUpdated - -```solidity -event ReputationUpdated(address reputation) -``` - -#### Parameters - -| Name | Type | Description | -| ---------- | ------- | ----------- | -| reputation | address | undefined | - -### ValidSignersUpdated - -```solidity -event ValidSignersUpdated(address[] signers) -``` - -#### Parameters - -| Name | Type | Description | -| ------- | --------- | ----------- | -| signers | address[] | undefined | - -## Errors - -### AddressDenied - -```solidity -error AddressDenied() -``` - -_Address doesn't exist in a MerkleTree.Address not allowed as relayer.0x3b8474be_ - -### AlreadyReleased - -```solidity -error AlreadyReleased() -``` - -_Lock already released or returned.0x63b4904e_ - -### AmountNotAllowed - -```solidity -error AmountNotAllowed() -``` - -_Wished amount to be locked exceeds the limit allowed.0x1c18f846_ - -### DepositAlreadyExists - -```solidity -error DepositAlreadyExists() -``` - -_Deposit already exist and it is still valid.0xc44bd765_ - -### InvalidDeposit - -```solidity -error InvalidDeposit() -``` - -_Deposit not valid anymore.0xb2e532de_ - -### InvalidSigner - -```solidity -error InvalidSigner() -``` - -_Signer is not a valid signer.0x815e1d64_ - -### LengthMismatch - -```solidity -error LengthMismatch() -``` - -_Arrays' length don't match.0xff633a38_ - -### LoopOverflow - -```solidity -error LoopOverflow() -``` - -_Loop bounds have overflowed.0xdfb035c9_ - -### NoTokens - -```solidity -error NoTokens() -``` - -_No tokens array provided as argument.0xdf957883_ - -### NotEnoughTokens - -```solidity -error NotEnoughTokens() -``` - -_Not enough token remaining on deposit.0x22bbb43c_ - -### NotExpired - -```solidity -error NotExpired() -``` - -_Lock not expired or already released.Another lock with same ID is not expired yet.0xd0404f85_ - -### OnlySeller - -```solidity -error OnlySeller() -``` - -_Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726_ - -### TokenDenied - -```solidity -error TokenDenied() -``` - -_Token address not allowed to be deposited.0x1578328e_ - -### TxAlreadyUsed - -```solidity -error TxAlreadyUsed() -``` - -_Transaction already used to unlock payment.0xf490a6ea_ diff --git a/docs/P2PIX.md b/docs/P2PIX.md deleted file mode 100644 index 0561a82..0000000 --- a/docs/P2PIX.md +++ /dev/null @@ -1,694 +0,0 @@ -# P2PIX - -## Methods - -### \_castAddrToKey - -```solidity -function _castAddrToKey(address _addr) external pure returns (uint256 _key) -``` - -Public method that handles `address` to `uint256` safe type casting. - -_Function sighash: 0x4b2ae980._ - -#### Parameters - -| Name | Type | Description | -| ------ | ------- | ----------- | -| \_addr | address | undefined | - -#### Returns - -| Name | Type | Description | -| ----- | ------- | ----------- | -| \_key | uint256 | undefined | - -### allowedERC20s - -```solidity -function allowedERC20s(contract ERC20) external view returns (bool) -``` - -_Tokens allowed to serve as the underlying amount of a deposit._ - -#### Parameters - -| Name | Type | Description | -| ---- | -------------- | ----------- | -| \_0 | contract ERC20 | undefined | - -#### Returns - -| Name | Type | Description | -| ---- | ---- | ----------- | -| \_0 | bool | undefined | - -### cancelDeposit - -```solidity -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._ - -#### Parameters - -| Name | Type | Description | -| --------- | ------- | ----------- | -| depositID | uint256 | undefined | - -### defaultLockBlocks - -```solidity -function defaultLockBlocks() external view returns (uint256) -``` - -_Default blocks that lock will hold tokens._ - -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | uint256 | undefined | - -### deposit - -```solidity -function deposit(address _token, uint256 _amount, string _pixTarget, bytes32 allowlistRoot) external nonpayable returns (uint256 depositID) -``` - -Creates a deposit order based on a seller's offer of an amount of ERC20 tokens. - -_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'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 - -```solidity -function depositCount() external view returns (uint256 _val) -``` - -#### Returns - -| Name | Type | Description | -| ----- | ------- | ----------- | -| \_val | uint256 | undefined | - -### lock - -```solidity -function lock(uint256 _depositID, address _buyerAddress, address _relayerTarget, uint256 _relayerPremium, uint256 _amount, bytes32[] merkleProof, bytes32[] expiredLocks) external nonpayable returns (bytes32 lockID) -``` - -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'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'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'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 - -```solidity -function mapDeposits(uint256) external view returns (uint256 remaining, string pixTarget, address seller, address token, bool valid) -``` - -_Seller list of deposits_ - -#### Parameters - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | uint256 | undefined | - -#### Returns - -| Name | Type | Description | -| --------- | ------- | ----------- | -| remaining | uint256 | undefined | -| pixTarget | string | undefined | -| seller | address | undefined | -| token | address | undefined | -| valid | bool | undefined | - -### mapLocks - -```solidity -function mapLocks(bytes32) external view returns (uint256 depositID, uint256 relayerPremium, uint256 amount, uint256 expirationBlock, address buyerAddress, address relayerTarget, address relayerAddress) -``` - -_List of Locks._ - -#### Parameters - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | bytes32 | undefined | - -#### Returns - -| Name | Type | Description | -| --------------- | ------- | ----------- | -| depositID | uint256 | undefined | -| relayerPremium | uint256 | undefined | -| amount | uint256 | undefined | -| expirationBlock | uint256 | undefined | -| buyerAddress | address | undefined | -| relayerTarget | address | undefined | -| relayerAddress | address | undefined | - -### owner - -```solidity -function owner() external view returns (address) -``` - -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | address | undefined | - -### release - -```solidity -function release(bytes32 lockID, address _relayerTarget, uint256 pixTimestamp, bytes32 r, bytes32 s, uint8 v) external nonpayable -``` - -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._ - -#### Parameters - -| Name | Type | Description | -| --------------- | ------- | ----------------------------------------------- | -| lockID | bytes32 | undefined | -| \_relayerTarget | address | Target address entitled to the `relayerPremim`. | -| pixTimestamp | uint256 | undefined | -| r | bytes32 | undefined | -| s | bytes32 | undefined | -| v | uint8 | undefined | - -### reputation - -```solidity -function reputation() external view returns (contract IReputation) -``` - -███ Storage ████████████████████████████████████████████████████████████ - -#### Returns - -| Name | Type | Description | -| ---- | -------------------- | ----------- | -| \_0 | contract IReputation | undefined | - -### sellerAllowList - -```solidity -function sellerAllowList(uint256) external view returns (bytes32) -``` - -_Seller casted to key => Seller's allowlist merkleroot._ - -#### Parameters - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | uint256 | undefined | - -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | bytes32 | undefined | - -### setDefaultLockBlocks - -```solidity -function setDefaultLockBlocks(uint256 _blocks) external nonpayable -``` - -#### Parameters - -| Name | Type | Description | -| -------- | ------- | ----------- | -| \_blocks | uint256 | undefined | - -### setOwner - -```solidity -function setOwner(address newOwner) external nonpayable -``` - -#### Parameters - -| Name | Type | Description | -| -------- | ------- | ----------- | -| newOwner | address | undefined | - -### setReputation - -```solidity -function setReputation(contract IReputation _reputation) external nonpayable -``` - -#### Parameters - -| Name | Type | Description | -| ------------ | -------------------- | ----------- | -| \_reputation | contract IReputation | undefined | - -### setRoot - -```solidity -function setRoot(address addr, bytes32 merkleroot) external nonpayable -``` - -#### Parameters - -| Name | Type | Description | -| ---------- | ------- | ----------- | -| addr | address | undefined | -| merkleroot | bytes32 | undefined | - -### setValidSigners - -```solidity -function setValidSigners(address[] _validSigners) external nonpayable -``` - -#### Parameters - -| Name | Type | Description | -| -------------- | --------- | ----------- | -| \_validSigners | address[] | undefined | - -### tokenSettings - -```solidity -function tokenSettings(address[] _tokens, bool[] _states) external nonpayable -``` - -#### Parameters - -| Name | Type | Description | -| -------- | --------- | ----------- | -| \_tokens | address[] | undefined | -| \_states | bool[] | undefined | - -### unlockExpired - -```solidity -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._ - -#### Parameters - -| Name | Type | Description | -| ------- | --------- | ----------- | -| lockIDs | bytes32[] | undefined | - -### userRecord - -```solidity -function userRecord(uint256) external view returns (uint256) -``` - -_Stores an relayer's last computed credit._ - -#### Parameters - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | uint256 | undefined | - -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | uint256 | undefined | - -### validBacenSigners - -```solidity -function validBacenSigners(uint256) external view returns (bool) -``` - -_List of valid Bacen signature addresses_ - -#### Parameters - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | uint256 | undefined | - -#### Returns - -| Name | Type | Description | -| ---- | ---- | ----------- | -| \_0 | bool | undefined | - -### withdraw - -```solidity -function withdraw(uint256 depositID, bytes32[] expiredLocks) external nonpayable -``` - -Seller's expired deposit fund sweeper. - -_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 | - -### withdrawBalance - -```solidity -function withdrawBalance() external nonpayable -``` - -_Contract's underlying balance withdraw method.Function sighash: 0x5fd8c710._ - -## Events - -### AllowedERC20Updated - -```solidity -event AllowedERC20Updated(address indexed token, bool indexed state) -``` - -#### Parameters - -| Name | Type | Description | -| --------------- | ------- | ----------- | -| token `indexed` | address | undefined | -| state `indexed` | bool | undefined | - -### DepositAdded - -```solidity -event DepositAdded(address indexed seller, uint256 depositID, address token, uint256 amount) -``` - -███ Events ████████████████████████████████████████████████████████████ - -#### Parameters - -| Name | Type | Description | -| ---------------- | ------- | ----------- | -| seller `indexed` | address | undefined | -| depositID | uint256 | undefined | -| token | address | undefined | -| amount | uint256 | undefined | - -### DepositClosed - -```solidity -event DepositClosed(address indexed seller, uint256 depositID) -``` - -#### Parameters - -| Name | Type | Description | -| ---------------- | ------- | ----------- | -| seller `indexed` | address | undefined | -| depositID | uint256 | undefined | - -### DepositWithdrawn - -```solidity -event DepositWithdrawn(address indexed seller, uint256 depositID, uint256 amount) -``` - -#### Parameters - -| Name | Type | Description | -| ---------------- | ------- | ----------- | -| seller `indexed` | address | undefined | -| depositID | uint256 | undefined | -| amount | uint256 | undefined | - -### FundsWithdrawn - -```solidity -event FundsWithdrawn(address owner, uint256 amount) -``` - -#### Parameters - -| Name | Type | Description | -| ------ | ------- | ----------- | -| owner | address | undefined | -| amount | uint256 | undefined | - -### LockAdded - -```solidity -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 | -| amount | uint256 | undefined | - -### LockBlocksUpdated - -```solidity -event LockBlocksUpdated(uint256 blocks) -``` - -#### Parameters - -| Name | Type | Description | -| ------ | ------- | ----------- | -| blocks | uint256 | undefined | - -### LockReleased - -```solidity -event LockReleased(address indexed buyer, bytes32 lockId) -``` - -#### Parameters - -| Name | Type | Description | -| --------------- | ------- | ----------- | -| buyer `indexed` | address | undefined | -| lockId | bytes32 | undefined | - -### LockReturned - -```solidity -event LockReturned(address indexed buyer, bytes32 lockId) -``` - -#### Parameters - -| Name | Type | Description | -| --------------- | ------- | ----------- | -| buyer `indexed` | address | undefined | -| lockId | bytes32 | undefined | - -### OwnerUpdated - -```solidity -event OwnerUpdated(address indexed user, address indexed newOwner) -``` - -#### Parameters - -| Name | Type | Description | -| ------------------ | ------- | ----------- | -| user `indexed` | address | undefined | -| newOwner `indexed` | address | undefined | - -### ReputationUpdated - -```solidity -event ReputationUpdated(address reputation) -``` - -#### Parameters - -| Name | Type | Description | -| ---------- | ------- | ----------- | -| reputation | address | undefined | - -### ValidSignersUpdated - -```solidity -event ValidSignersUpdated(address[] signers) -``` - -#### Parameters - -| Name | Type | Description | -| ------- | --------- | ----------- | -| signers | address[] | undefined | - -## Errors - -### AddressDenied - -```solidity -error AddressDenied() -``` - -_Address doesn't exist in a MerkleTree.Address not allowed as relayer.0x3b8474be_ - -### AlreadyReleased - -```solidity -error AlreadyReleased() -``` - -_Lock already released or returned.0x63b4904e_ - -### AmountNotAllowed - -```solidity -error AmountNotAllowed() -``` - -_Wished amount to be locked exceeds the limit allowed.0x1c18f846_ - -### DepositAlreadyExists - -```solidity -error DepositAlreadyExists() -``` - -_Deposit already exist and it is still valid.0xc44bd765_ - -### InvalidDeposit - -```solidity -error InvalidDeposit() -``` - -_Deposit not valid anymore.0xb2e532de_ - -### InvalidSigner - -```solidity -error InvalidSigner() -``` - -_Signer is not a valid signer.0x815e1d64_ - -### LengthMismatch - -```solidity -error LengthMismatch() -``` - -_Arrays' length don't match.0xff633a38_ - -### LoopOverflow - -```solidity -error LoopOverflow() -``` - -_Loop bounds have overflowed.0xdfb035c9_ - -### NoTokens - -```solidity -error NoTokens() -``` - -_No tokens array provided as argument.0xdf957883_ - -### NotEnoughTokens - -```solidity -error NotEnoughTokens() -``` - -_Not enough token remaining on deposit.0x22bbb43c_ - -### NotExpired - -```solidity -error NotExpired() -``` - -_Lock not expired or already released.Another lock with same ID is not expired yet.0xd0404f85_ - -### OnlySeller - -```solidity -error OnlySeller() -``` - -_Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726_ - -### Reentrancy - -```solidity -error Reentrancy() -``` - -### TokenDenied - -```solidity -error TokenDenied() -``` - -_Token address not allowed to be deposited.0x1578328e_ - -### TxAlreadyUsed - -```solidity -error TxAlreadyUsed() -``` - -_Transaction already used to unlock payment.0xf490a6ea_ diff --git a/docs/Reputation.md b/docs/Reputation.md index 866311a..9443694 100644 --- a/docs/Reputation.md +++ b/docs/Reputation.md @@ -1,6 +1,28 @@ -# Reputation +# Solidity API -## Methods +## Reputation + +### maxLimit + +```solidity +uint256 maxLimit +``` + +_Asymptote numerator constant value for the `limiter` fx._ + +### magicValue + +```solidity +uint256 magicValue +``` + +_Denominator's constant operand for the `limiter` fx._ + +### constructor + +```solidity +constructor() public payable +``` ### limiter @@ -8,81 +30,12 @@ function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit) ``` -#### Parameters - -| Name | Type | Description | -| ------------ | ------- | ----------- | -| \_userCredit | uint256 | undefined | - -#### Returns - -| Name | Type | Description | -| ------------ | ------- | ----------- | -| \_spendLimit | uint256 | undefined | - -### magicValue +### sqrt ```solidity -function magicValue() external view returns (uint256) +function sqrt(uint256 x) internal pure returns (uint256 z) ``` -_Denominator's constant operand for the `limiter` fx. _ +Taken from Solmate's FixedPointMathLib. +(https://github.com/transmissions11/solmate/blob/main/src/utils/FixedPointMathLib.sol) -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | uint256 | undefined | - -### maxLimit - -```solidity -function maxLimit() external view returns (uint256) -``` - -_Asymptote numerator constant value for the `limiter` fx._ - -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | uint256 | undefined | - -### owner - -```solidity -function owner() external view returns (address) -``` - -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | address | undefined | - -### setOwner - -```solidity -function setOwner(address newOwner) external nonpayable -``` - -#### Parameters - -| Name | Type | Description | -| -------- | ------- | ----------- | -| newOwner | address | undefined | - -## Events - -### OwnerUpdated - -```solidity -event OwnerUpdated(address indexed user, address indexed newOwner) -``` - -#### Parameters - -| Name | Type | Description | -| ------------------ | ------- | ----------- | -| user `indexed` | address | undefined | -| newOwner `indexed` | address | undefined | diff --git a/docs/core/BaseUtils.md b/docs/core/BaseUtils.md new file mode 100644 index 0000000..992bc64 --- /dev/null +++ b/docs/core/BaseUtils.md @@ -0,0 +1,89 @@ +# Solidity API + +## BaseUtils + +### _setUsedTransactions + +```solidity +function _setUsedTransactions(bytes32 message) internal +``` + +███ Helper FX ██████████████████████████████████████████████████████████ + +### usedTransactions + +```solidity +function usedTransactions(bytes32 message) public view returns (bool used) +``` + +### _signerCheck + +```solidity +function _signerCheck(bytes32 _message, bytes _signature) internal view +``` + +### _merkleVerify + +```solidity +function _merkleVerify(bytes32[] _merkleProof, bytes32 _root, address _addr) internal pure +``` + +### _castBool + +```solidity +function _castBool(bool _valid) internal pure returns (uint256 _validCasted) +``` + +### getStr + +```solidity +function getStr(string str) public pure returns (bytes32 strEnc) +``` + +### _setSellerBalance + +```solidity +function _setSellerBalance(address _sellerKey, contract ERC20 _erc20, uint256 _packed, bytes32 _pixTarget) internal +``` + +### _setValidState + +```solidity +function _setValidState(address _sellerKey, contract ERC20 _erc20, uint256 _packed) internal +``` + +### _addSellerBalance + +```solidity +function _addSellerBalance(address _sellerKey, contract ERC20 _erc20, uint256 _amount) internal +``` + +### _decSellerBalance + +```solidity +function _decSellerBalance(address _sellerKey, contract ERC20 _erc20, uint256 _amount) internal +``` + +### __sellerBalance + +```solidity +function __sellerBalance(address _sellerKey, contract ERC20 _erc20) internal view returns (uint256 _packed) +``` + +### _castAddrToKey + +```solidity +function _castAddrToKey(address _addr) public pure returns (uint256 _key) +``` + +Public method that handles `address` +to `uint256` safe type casting. + +_Function sighash: 0x4b2ae980._ + +### _castKeyToAddr + +```solidity +function _castKeyToAddr(uint256 _key) public pure returns (address _addr) +``` + diff --git a/docs/core/Constants.md b/docs/core/Constants.md new file mode 100644 index 0000000..3caea5b --- /dev/null +++ b/docs/core/Constants.md @@ -0,0 +1,96 @@ +# Solidity API + +## Constants + +### _ROOT_UPDATED_EVENT_SIGNATURE + +```solidity +uint256 _ROOT_UPDATED_EVENT_SIGNATURE +``` + +███ Constants ██████████████████████████████████████████████████████████ + +### _ALLOWED_ERC20_UPDATED_EVENT_SIGNATURE + +```solidity +uint256 _ALLOWED_ERC20_UPDATED_EVENT_SIGNATURE +``` + +### _TRUSTED_FORWARDER_UPDATED_EVENT_SIGNATURE + +```solidity +uint256 _TRUSTED_FORWARDER_UPDATED_EVENT_SIGNATURE +``` + +### _SELLER_ALLOWLIST_SLOT_SEED + +```solidity +uint256 _SELLER_ALLOWLIST_SLOT_SEED +``` + +_Seller casted to key => Seller's allowlist merkleroot. +mapping(uint256 => bytes32) public sellerAllowList;_ + +### _ALLOWED_ERC20_SLOT_SEED + +```solidity +uint256 _ALLOWED_ERC20_SLOT_SEED +``` + +_Tokens allowed to serve as the underlying amount of a deposit. +mapping(ERC20 => bool) public allowedERC20s;_ + +### _SELLER_BALANCE_SLOT_SEED + +```solidity +uint256 _SELLER_BALANCE_SLOT_SEED +``` + +_Value in custom storage slot given by: + mstore(0x20, token) + mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) + mstore(0x00, seller) + let value := sload(keccak256(0x0c, 0x34))._ + +### BITMASK_SB_ENTRY + +```solidity +uint256 BITMASK_SB_ENTRY +``` + +_The bitmask of `sellerBalance` entry._ + +### BITPOS_VALID + +```solidity +uint256 BITPOS_VALID +``` + +_The bit position of `valid` in `sellerBalance`._ + +### WAD + +```solidity +uint256 WAD +``` + +_The scalar of BRZ token._ + +### MAXBALANCE_UPPERBOUND + +```solidity +uint256 MAXBALANCE_UPPERBOUND +``` + +### REPUTATION_LOWERBOUND + +```solidity +uint256 REPUTATION_LOWERBOUND +``` + +### LOCKAMOUNT_UPPERBOUND + +```solidity +uint256 LOCKAMOUNT_UPPERBOUND +``` + diff --git a/docs/core/DataTypes.md b/docs/core/DataTypes.md new file mode 100644 index 0000000..304d309 --- /dev/null +++ b/docs/core/DataTypes.md @@ -0,0 +1,29 @@ +# Solidity API + +## DataTypes + +### Lock + +```solidity +struct Lock { + uint256 counter; + uint256 expirationBlock; + bytes32 pixTarget; + uint80 amount; + contract ERC20 token; + address buyerAddress; + address seller; +} +``` + +### LockStatus + +```solidity +enum LockStatus { + Inexistent, + Active, + Expired, + Released +} +``` + diff --git a/docs/core/EventAndErrors.md b/docs/core/EventAndErrors.md new file mode 100644 index 0000000..69a9c9b --- /dev/null +++ b/docs/core/EventAndErrors.md @@ -0,0 +1,278 @@ +# Solidity API + +## EventAndErrors + +### DepositAdded + +```solidity +event DepositAdded(address seller, contract ERC20 token, uint256 amount) +``` + +_0x63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf_ + +### ValidSet + +```solidity +event ValidSet(address seller, contract ERC20 token, bool state) +``` + +_0xca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d49_ + +### DepositWithdrawn + +```solidity +event DepositWithdrawn(address seller, contract ERC20 token, uint256 amount) +``` + +_0x2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e_ + +### LockAdded + +```solidity +event LockAdded(address buyer, uint256 lockID, address seller, uint256 amount) +``` + +_0x8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65_ + +### LockReleased + +```solidity +event LockReleased(address buyer, uint256 lockId, uint256 amount) +``` + +_0x364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8_ + +### LockReturned + +```solidity +event LockReturned(address buyer, uint256 lockId) +``` + +_0x830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da5_ + +### FundsWithdrawn + +```solidity +event FundsWithdrawn(address owner, uint256 amount) +``` + +_0xeaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d_ + +### RootUpdated + +```solidity +event RootUpdated(address seller, bytes32 merkleRoot) +``` + +_0x0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632_ + +### AllowedERC20Updated + +```solidity +event AllowedERC20Updated(address token, bool state) +``` + +_0x5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a_ + +### TrustedForwarderUpdated + +```solidity +event TrustedForwarderUpdated(address forwarder, bool state) +``` + +_0xbee55516e29d3969d3cb8eb01351eb3c52d06f9e2435bd5a8bfe3647e185df92_ + +### ReputationUpdated + +```solidity +event ReputationUpdated(address reputation) +``` + +_0xe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f_ + +### LockBlocksUpdated + +```solidity +event LockBlocksUpdated(uint256 blocks) +``` + +_0x70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511_ + +### ValidSignersUpdated + +```solidity +event ValidSignersUpdated(address[] signers) +``` + +_0x14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d7_ + +### OnlySeller + +```solidity +error OnlySeller() +``` + +_Only seller could call this function. +`msg.sender` and the seller differ. +0x85d1f726_ + +### NotExpired + +```solidity +error NotExpired() +``` + +_Lock not expired or already released. +Another lock with same ID is not expired yet. +0xd0404f85_ + +### LoopOverflow + +```solidity +error LoopOverflow() +``` + +_Loop bounds have overflowed. +0xdfb035c9_ + +### InvalidDeposit + +```solidity +error InvalidDeposit() +``` + +_Deposit not valid anymore. +0xb2e532de_ + +### NotEnoughTokens + +```solidity +error NotEnoughTokens() +``` + +_Not enough token remaining on deposit. +0x22bbb43c_ + +### AlreadyReleased + +```solidity +error AlreadyReleased() +``` + +_Lock already released or returned. +0x63b4904e_ + +### TxAlreadyUsed + +```solidity +error TxAlreadyUsed() +``` + +_Transaction already used to unlock payment. +0xf490a6ea_ + +### InvalidSigner + +```solidity +error InvalidSigner() +``` + +_Signer is not a valid signer. +0x815e1d64_ + +### AddressDenied + +```solidity +error AddressDenied() +``` + +_Address doesn't exist in a MerkleTree. +Address not allowed as relayer. +0x3b8474be_ + +### LengthMismatch + +```solidity +error LengthMismatch() +``` + +_Arrays' length don't match. +0xff633a38_ + +### NoTokens + +```solidity +error NoTokens() +``` + +_No tokens array provided as argument. +0xdf957883_ + +### TokenDenied + +```solidity +error TokenDenied() +``` + +_Token address not allowed to be deposited. +0x1578328e_ + +### AmountNotAllowed + +```solidity +error AmountNotAllowed() +``` + +_Wished amount to be locked exceeds the limit allowed. +0x1c18f846_ + +### StaticCallFailed + +```solidity +error StaticCallFailed() +``` + +_Reverts when success return value returns false. +0xe10bf1cc_ + +### LockExpired + +```solidity +error LockExpired() +``` + +_Reverts on an expired lock. +0xf6fafba0_ + +### DecOverflow + +```solidity +error DecOverflow() +``` + +_0xce3a3d37_ + +### MaxBalExceeded + +```solidity +error MaxBalExceeded() +``` + +_0xf3fb0eb9_ + +### EmptyPixTarget + +```solidity +error EmptyPixTarget() +``` + +_0x6a3bc53e_ + +### NotInitialized + +```solidity +error NotInitialized() +``` + +_0x87138d5c_ + diff --git a/docs/core/OwnerSettings.md b/docs/core/OwnerSettings.md new file mode 100644 index 0000000..6dbe0fc --- /dev/null +++ b/docs/core/OwnerSettings.md @@ -0,0 +1,98 @@ +# Solidity API + +## OwnerSettings + +### reputation + +```solidity +contract IReputation reputation +``` + +_List of valid Bacen signature addresses + mapping(uint256 => bool) public validBacenSigners; +Value in custom storage slot given by: + let value := sload(shl(12, address))._ + +### defaultLockBlocks + +```solidity +uint256 defaultLockBlocks +``` + +_Default blocks that lock will hold tokens._ + +### constructor + +```solidity +constructor(uint256 defaultBlocks, address[] validSigners, address _reputation, contract ERC20[] tokens, bool[] tokenStates) internal +``` + +███ Constructor ████████████████████████████████████████████████████████ + +### setTrustedFowarders + +```solidity +function setTrustedFowarders(address[] forwarders, bool[] states) external +``` + +███ Owner Only █████████████████████████████████████████████████████████ + +### withdrawBalance + +```solidity +function withdrawBalance() external +``` + +_Contract's underlying balance withdraw method. +Function sighash: 0x5fd8c710._ + +### setReputation + +```solidity +function setReputation(contract IReputation _reputation) public +``` + +### setDefaultLockBlocks + +```solidity +function setDefaultLockBlocks(uint256 _blocks) public +``` + +### setValidSigners + +```solidity +function setValidSigners(address[] _validSigners) public +``` + +### tokenSettings + +```solidity +function tokenSettings(contract ERC20[] _tokens, bool[] _states) public +``` + +### validBacenSigners + +```solidity +function validBacenSigners(uint256 signer) public view returns (bool valid) +``` + +███ View FX ████████████████████████████████████████████████████████████ + +### sellerAllowList + +```solidity +function sellerAllowList(address sellerKey) public view returns (bytes32 root) +``` + +### allowedERC20s + +```solidity +function allowedERC20s(contract ERC20 erc20) public view returns (bool state) +``` + +### _limiter + +```solidity +function _limiter(uint256 _userCredit) internal view returns (uint256 _spendLimit) +``` + diff --git a/docs/lib/auth/Owned.md b/docs/lib/auth/Owned.md index 6857e48..9e4919d 100644 --- a/docs/lib/auth/Owned.md +++ b/docs/lib/auth/Owned.md @@ -1,46 +1,42 @@ -# Owned +# Solidity API -_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Owned.sol)_ +## Owned Simple single owner authorization mixin. -## Methods - -### owner +### Unauthorized ```solidity -function owner() external view returns (address) +error Unauthorized() ``` -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | address | undefined | - -### setOwner - -```solidity -function setOwner(address newOwner) external nonpayable -``` - -#### Parameters - -| Name | Type | Description | -| -------- | ------- | ----------- | -| newOwner | address | undefined | - -## Events - ### OwnerUpdated ```solidity -event OwnerUpdated(address indexed user, address indexed newOwner) +event OwnerUpdated(address user, address newOwner) ``` -#### Parameters +### owner + +```solidity +address owner +``` + +### onlyOwner + +```solidity +modifier onlyOwner() +``` + +### constructor + +```solidity +constructor(address _owner) internal +``` + +### setOwner + +```solidity +function setOwner(address newOwner) public virtual +``` -| Name | Type | Description | -| ------------------ | ------- | ----------- | -| user `indexed` | address | undefined | -| newOwner `indexed` | address | undefined | diff --git a/docs/lib/interfaces/IReputation.md b/docs/lib/interfaces/IReputation.md index 329640a..6412dc1 100644 --- a/docs/lib/interfaces/IReputation.md +++ b/docs/lib/interfaces/IReputation.md @@ -1,6 +1,6 @@ -# IReputation +# Solidity API -## Methods +## IReputation ### limiter @@ -8,14 +8,3 @@ function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit) ``` -#### Parameters - -| Name | Type | Description | -| ------------ | ------- | ----------- | -| \_userCredit | uint256 | undefined | - -#### Returns - -| Name | Type | Description | -| ------------ | ------- | ----------- | -| \_spendLimit | uint256 | undefined | diff --git a/docs/lib/metatx/ERC2771Context.md b/docs/lib/metatx/ERC2771Context.md new file mode 100644 index 0000000..f0546ea --- /dev/null +++ b/docs/lib/metatx/ERC2771Context.md @@ -0,0 +1,53 @@ +# Solidity API + +## Context + +_Provides information about the current execution context, including the +sender of the transaction and its data. While these are generally available +via msg.sender and msg.data, they should not be accessed in such a direct +manner, since when dealing with meta-transactions the account sending and +paying for execution may not be the actual sender (as far as an application +is concerned). + +This contract is only required for intermediate, library-like contracts._ + +### _msgSender + +```solidity +function _msgSender() internal view virtual returns (address) +``` + +### _msgData + +```solidity +function _msgData() internal view virtual returns (bytes) +``` + +## ERC2771Context + +_Context variant with ERC2771 support._ + +### trustedForwarders + +```solidity +mapping(address => bool) trustedForwarders +``` + +### _msgSender + +```solidity +function _msgSender() internal view virtual returns (address sender) +``` + +### isTrustedForwarder + +```solidity +function isTrustedForwarder(address forwarder) public view virtual returns (bool) +``` + +### _msgData + +```solidity +function _msgData() internal view virtual returns (bytes) +``` + diff --git a/docs/lib/mock/mockToken.md b/docs/lib/mock/mockToken.md new file mode 100644 index 0000000..ae62b10 --- /dev/null +++ b/docs/lib/mock/mockToken.md @@ -0,0 +1,16 @@ +# Solidity API + +## MockToken + +### constructor + +```solidity +constructor(uint256 supply) public +``` + +### mint + +```solidity +function mint(address[] to, uint256 value) public virtual +``` + diff --git a/docs/lib/tokens/ERC20.md b/docs/lib/tokens/ERC20.md index 6216aa8..e4272cd 100644 --- a/docs/lib/tokens/ERC20.md +++ b/docs/lib/tokens/ERC20.md @@ -1,230 +1,128 @@ -# ERC20 +# Solidity API -_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)_ +## ERC20 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._ -## Methods - -### DOMAIN_SEPARATOR +### Transfer ```solidity -function DOMAIN_SEPARATOR() external view returns (bytes32) +event Transfer(address from, address to, uint256 amount) ``` -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | bytes32 | undefined | - -### allowance - -```solidity -function allowance(address, address) external view returns (uint256) -``` - -#### Parameters - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | address | undefined | -| \_1 | address | undefined | - -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | uint256 | undefined | - -### approve - -```solidity -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 | - -### balanceOf - -```solidity -function balanceOf(address) external view returns (uint256) -``` - -#### Parameters - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | address | undefined | - -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | uint256 | undefined | - -### decimals - -```solidity -function decimals() external view returns (uint8) -``` - -#### Returns - -| Name | Type | Description | -| ---- | ----- | ----------- | -| \_0 | uint8 | undefined | - -### name - -```solidity -function name() external view returns (string) -``` - -#### Returns - -| Name | Type | Description | -| ---- | ------ | ----------- | -| \_0 | string | undefined | - -### nonces - -```solidity -function nonces(address) external view returns (uint256) -``` - -#### Parameters - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | address | undefined | - -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | uint256 | undefined | - -### permit - -```solidity -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 | -| deadline | uint256 | undefined | -| v | uint8 | undefined | -| r | bytes32 | undefined | -| s | bytes32 | undefined | - -### symbol - -```solidity -function symbol() external view returns (string) -``` - -#### Returns - -| Name | Type | Description | -| ---- | ------ | ----------- | -| \_0 | string | undefined | - -### totalSupply - -```solidity -function totalSupply() external view returns (uint256) -``` - -#### Returns - -| Name | Type | Description | -| ---- | ------- | ----------- | -| \_0 | uint256 | undefined | - -### transfer - -```solidity -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 | - -### transferFrom - -```solidity -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 | - -#### Returns - -| Name | Type | Description | -| ---- | ---- | ----------- | -| \_0 | bool | undefined | - -## Events - ### Approval ```solidity -event Approval(address indexed owner, address indexed spender, uint256 amount) +event Approval(address owner, address spender, uint256 amount) ``` -#### Parameters - -| Name | Type | Description | -| ----------------- | ------- | ----------- | -| owner `indexed` | address | undefined | -| spender `indexed` | address | undefined | -| amount | uint256 | undefined | - -### Transfer +### name ```solidity -event Transfer(address indexed from, address indexed to, uint256 amount) +string name ``` -#### Parameters +### symbol + +```solidity +string symbol +``` + +### decimals + +```solidity +uint8 decimals +``` + +### totalSupply + +```solidity +uint256 totalSupply +``` + +### balanceOf + +```solidity +mapping(address => uint256) balanceOf +``` + +### allowance + +```solidity +mapping(address => mapping(address => uint256)) allowance +``` + +### INITIAL_CHAIN_ID + +```solidity +uint256 INITIAL_CHAIN_ID +``` + +### INITIAL_DOMAIN_SEPARATOR + +```solidity +bytes32 INITIAL_DOMAIN_SEPARATOR +``` + +### nonces + +```solidity +mapping(address => uint256) nonces +``` + +### constructor + +```solidity +constructor(string _name, string _symbol, uint8 _decimals) internal +``` + +### approve + +```solidity +function approve(address spender, uint256 amount) public virtual returns (bool) +``` + +### transfer + +```solidity +function transfer(address to, uint256 amount) public virtual returns (bool) +``` + +### transferFrom + +```solidity +function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) +``` + +### permit + +```solidity +function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public virtual +``` + +### DOMAIN_SEPARATOR + +```solidity +function DOMAIN_SEPARATOR() public view virtual returns (bytes32) +``` + +### computeDomainSeparator + +```solidity +function computeDomainSeparator() internal view virtual returns (bytes32) +``` + +### _mint + +```solidity +function _mint(address to, uint256 amount) internal virtual +``` + +### _burn + +```solidity +function _burn(address from, uint256 amount) internal virtual +``` -| Name | Type | Description | -| -------------- | ------- | ----------- | -| from `indexed` | address | undefined | -| to `indexed` | address | undefined | -| amount | uint256 | undefined | diff --git a/docs/lib/utils/ECDSA.md b/docs/lib/utils/ECDSA.md new file mode 100644 index 0000000..22ae664 --- /dev/null +++ b/docs/lib/utils/ECDSA.md @@ -0,0 +1,38 @@ +# Solidity API + +## ECDSA + +Gas optimized ECDSA wrapper. + +### InvalidSignature + +```solidity +error InvalidSignature() +``` + +_The signature is invalid._ + +### recoverCalldata + +```solidity +function recoverCalldata(bytes32 hash, bytes signature) internal view returns (address result) +``` + +_Recovers the signer's address from a message digest `hash`, +and the `signature`. + +This function does NOT accept EIP-2098 short form signatures. +Use `recover(bytes32 hash, bytes32 r, bytes32 vs)` for EIP-2098 +short form signatures instead._ + +### toEthSignedMessageHash + +```solidity +function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 result) +``` + +_Returns an Ethereum Signed Message, created from a `hash`. +This produces a hash corresponding to the one signed with the +[`eth_sign`](https://eth.wiki/json-rpc/API#eth_sign) +JSON-RPC method as part of EIP-191._ + diff --git a/docs/lib/utils/MerkleProofLib.md b/docs/lib/utils/MerkleProofLib.md index 2768596..3883662 100644 --- a/docs/lib/utils/MerkleProofLib.md +++ b/docs/lib/utils/MerkleProofLib.md @@ -1,5 +1,14 @@ -# MerkleProofLib +# Solidity API -_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)_ +## MerkleProofLib Gas optimized verification of proof of inclusion for a leaf in a Merkle tree. + +### verify + +```solidity +function verify(bytes32[] proof, bytes32 root, bytes32 leaf) internal pure returns (bool isValid) +``` + +_Returns whether `leaf` exists in the Merkle tree with `root`, given `proof`._ + diff --git a/docs/lib/utils/Multicall.md b/docs/lib/utils/Multicall.md new file mode 100644 index 0000000..4b94460 --- /dev/null +++ b/docs/lib/utils/Multicall.md @@ -0,0 +1,50 @@ +# Solidity API + +## Multicall + +Contract that batches view function calls and aggregates their results. + +### CallFailed + +```solidity +error CallFailed(string reason) +``` + +_0x_ + +### Call + +```solidity +struct Call { + address target; + bytes callData; +} +``` + +### Result + +```solidity +struct Result { + bool success; + bytes returnData; +} +``` + +### constructor + +```solidity +constructor() public payable +``` + +### mtc1 + +```solidity +function mtc1(struct Multicall.Call[] calls) external returns (uint256, bytes[]) +``` + +### mtc2 + +```solidity +function mtc2(struct Multicall.Call[] calls) external returns (uint256, bytes32, struct Multicall.Result[]) +``` + diff --git a/docs/lib/utils/ReentrancyGuard.md b/docs/lib/utils/ReentrancyGuard.md index 26bf837..77b936c 100644 --- a/docs/lib/utils/ReentrancyGuard.md +++ b/docs/lib/utils/ReentrancyGuard.md @@ -1,13 +1,34 @@ -# ReentrancyGuard +# Solidity API -_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)_ +## ReentrancyGuard Reentrancy protection for smart contracts. -## Errors - ### Reentrancy ```solidity error Reentrancy() ``` + +### nonReentrant + +```solidity +modifier nonReentrant() +``` + +### setReentrancyGuard + +```solidity +function setReentrancyGuard() internal virtual +``` + +_Check guard sentinel value and set it._ + +### clearReentrancyGuard + +```solidity +function clearReentrancyGuard() internal virtual +``` + +_Unset sentinel value._ + diff --git a/docs/lib/utils/SafeTransferLib.md b/docs/lib/utils/SafeTransferLib.md index 454ca1c..720dc7e 100644 --- a/docs/lib/utils/SafeTransferLib.md +++ b/docs/lib/utils/SafeTransferLib.md @@ -1,7 +1,62 @@ -# SafeTransferLib +# Solidity API -_Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol)_ +## SafeTransferLib Safe ETH and ERC20 transfer library that gracefully handles missing return values. -_Caution! This library won't check that a token has code, responsibility is delegated to the caller._ +_Caution! This library won't check that a token has code, responsibility is delegated to the caller._ + +### ETHTransferFailed + +```solidity +error ETHTransferFailed() +``` + +_The ETH transfer has failed._ + +### TransferFromFailed + +```solidity +error TransferFromFailed() +``` + +_The ERC20 `transferFrom` has failed._ + +### TransferFailed + +```solidity +error TransferFailed() +``` + +_The ERC20 `transfer` has failed._ + +### safeTransferETH + +```solidity +function safeTransferETH(address to, uint256 amount) internal +``` + +_Sends `amount` (in wei) ETH to `to`. +Reverts upon failure._ + +### safeTransferFrom + +```solidity +function safeTransferFrom(contract ERC20 token, address from, address to, uint256 amount) internal +``` + +_Sends `amount` of ERC20 `token` from `from` to `to`. +Reverts upon failure. + +The `from` account must have at least `amount` approved for +the current contract to manage._ + +### safeTransfer + +```solidity +function safeTransfer(contract ERC20 token, address to, uint256 amount) internal +``` + +_Sends `amount` of ERC20 `token` from the current contract to `to`. +Reverts upon failure._ + diff --git a/docs/p2pix.md b/docs/p2pix.md new file mode 100644 index 0000000..18f494d --- /dev/null +++ b/docs/p2pix.md @@ -0,0 +1,207 @@ +# Solidity API + +## P2PIX + +### lockCounter + +```solidity +uint256 lockCounter +``` + +### mapLocks + +```solidity +mapping(uint256 => struct DataTypes.Lock) mapLocks +``` + +_List of Locks._ + +### userRecord + +```solidity +mapping(uint256 => uint256) userRecord +``` + +_Stores an relayer's last computed credit._ + +### constructor + +```solidity +constructor(uint256 defaultBlocks, address[] validSigners, address _reputation, contract ERC20[] tokens, bool[] tokenStates) public payable +``` + +### deposit + +```solidity +function deposit(string pixTarget, bytes32 allowlistRoot, contract ERC20 token, uint96 amount, bool valid) public +``` + +Creates a deposit order based on a seller's +offer of an amount of ERC20 tokens. +Seller needs to send his tokens to the P2PIX smart contract. + +_Function sighash: 0x5e918943_ + +#### Parameters + +| Name | Type | Description | +| ---- | ---- | ----------- | +| pixTarget | string | Pix key destination provided by the offer's seller. | +| allowlistRoot | bytes32 | Optional allow list merkleRoot update `bytes32` value. as the deposit identifier. | +| token | contract ERC20 | | +| amount | uint96 | | +| valid | bool | | + +### setValidState + +```solidity +function setValidState(contract ERC20 token, bool state) public +``` + +Enables seller to invalidate future +locks made to his/her token offering order. +This function does not affect any ongoing active locks. + +_Function sighash: 0x6d82d9e0_ + +### lock + +```solidity +function lock(address seller, contract ERC20 token, uint80 amount, bytes32[] merkleProof, uint256[] expiredLocks) public returns (uint256 lockID) +``` + +Public method designed to lock an remaining amount of +the deposit order of a seller. +Transaction forwarding must leave `merkleProof` empty; +otherwise, the trustedForwarder must be previously added +to a seller whitelist. +This method can be performed either by: +- An user allowed via the seller'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: 0xdc43221c_ + +#### Parameters + +| Name | Type | Description | +| ---- | ---- | ----------- | +| seller | address | | +| token | contract ERC20 | | +| amount | uint80 | The deposit's remaining amount wished to be locked. | +| merkleProof | bytes32[] | Provided as a pass if the `msg.sender` is in the seller's allowlist; Left empty otherwise; | +| expiredLocks | uint256[] | An array of identifiers to be provided so to unexpire locks using this transaction gas push. | + +#### Return Values + +| Name | Type | Description | +| ---- | ---- | ----------- | +| lockID | uint256 | The lock identifier. | + +### release + +```solidity +function release(uint256 lockID, bytes32 pixTimestamp, bytes signature) public +``` + +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 relayer 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: 0x11fc7f9a_ + +### unlockExpired + +```solidity +function unlockExpired(uint256[] lockIDs) public +``` + +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: 0xb0983d39_ + +### withdraw + +```solidity +function withdraw(contract ERC20 token, uint256 amount, uint256[] expiredLocks) public +``` + +Seller's expired deposit fund sweeper. +A seller may use this method to recover +tokens from expired deposits. + +_Function sighash: 0xfb8c5ef0_ + +### setRoot + +```solidity +function setRoot(address addr, bytes32 merkleroot) public +``` + +### receive + +```solidity +receive() external payable +``` + +### _addLock + +```solidity +function _addLock(uint256 _bal, struct DataTypes.Lock _l) internal +``` + +### getBalance + +```solidity +function getBalance(address seller, contract ERC20 token) public view returns (uint256 bal) +``` + +### getValid + +```solidity +function getValid(address seller, contract ERC20 token) public view returns (bool valid) +``` + +### getPixTarget + +```solidity +function getPixTarget(address seller, contract ERC20 token) public view returns (bytes32 pixTarget) +``` + +### getPixTargetString + +```solidity +function getPixTargetString(address seller, contract ERC20 token) public view returns (string pixTarget) +``` + +### getBalances + +```solidity +function getBalances(address[] sellers, contract ERC20 token) external view returns (uint256[]) +``` + +### getLocksStatus + +```solidity +function getLocksStatus(uint256[] ids) external view returns (uint256[], enum DataTypes.LockStatus[]) +``` + +External getter that returns the status of a lockIDs array. +Call will not revert if provided with an empty array as parameter. + +_Function sighash: 0x49ef8448_ + diff --git a/hardhat.config.ts b/hardhat.config.ts index a5fabc4..de2fbc0 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -6,6 +6,7 @@ import { HardhatUserConfig } from "hardhat/config"; import { NetworkUserConfig } from "hardhat/types"; import "hardhat-contract-sizer"; import { resolve } from "path"; +import "solidity-docgen"; dotenvConfig({ path: resolve(__dirname, "./.env") }); @@ -146,6 +147,9 @@ const config: HardhatUserConfig = { outDir: "src/types", target: "ethers-v5", }, + docgen: { + pages: "files", + } }; export default config; diff --git a/package.json b/package.json index 16a0efb..06bb03a 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "solhint": "^3.3.7", "solhint-plugin-prettier": "^0.0.5", "solidity-coverage": "^0.8.2", + "solidity-docgen": "^0.6.0-beta.36", "ts-generator": "^0.1.1", "ts-node": "^10.9.1", "typechain": "^8.1.1",