# 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*