update documentation

This commit is contained in:
hueso 2024-02-13 16:35:16 -03:00
parent f02dad07c8
commit 1ffa9c6b5c
23 changed files with 1240 additions and 1328 deletions

View File

@ -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

View File

@ -1 +0,0 @@
# DataTypes

View File

@ -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_

View File

@ -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_

View File

@ -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 |

89
docs/core/BaseUtils.md Normal file
View File

@ -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)
```

96
docs/core/Constants.md Normal file
View File

@ -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
```

29
docs/core/DataTypes.md Normal file
View File

@ -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
}
```

278
docs/core/EventAndErrors.md Normal file
View File

@ -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_

View File

@ -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)
```

View File

@ -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 |

View File

@ -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 |

View File

@ -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)
```

View File

@ -0,0 +1,16 @@
# Solidity API
## MockToken
### constructor
```solidity
constructor(uint256 supply) public
```
### mint
```solidity
function mint(address[] to, uint256 value) public virtual
```

View File

@ -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 |

38
docs/lib/utils/ECDSA.md Normal file
View File

@ -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._

View File

@ -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`._

View File

@ -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[])
```

View File

@ -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._

View File

@ -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._

207
docs/p2pix.md Normal file
View File

@ -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_

View File

@ -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;

View File

@ -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",