Finished pending tasks
This commit is contained in:
parent
da18941198
commit
934a9abe45
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"_format": "hh-sol-dbg-1",
|
"_format": "hh-sol-dbg-1",
|
||||||
"buildInfo": "../../build-info/0d20d1f12753266e5824cbfb8a85b2b2.json"
|
"buildInfo": "../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"_format": "hh-sol-dbg-1",
|
"_format": "hh-sol-dbg-1",
|
||||||
"buildInfo": "../../build-info/0d20d1f12753266e5824cbfb8a85b2b2.json"
|
"buildInfo": "../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,21 @@
|
|||||||
"contractName": "EventAndErrors",
|
"contractName": "EventAndErrors",
|
||||||
"sourceName": "contracts/EventAndErrors.sol",
|
"sourceName": "contracts/EventAndErrors.sol",
|
||||||
"abi": [
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "AddressDenied",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"inputs": [],
|
"inputs": [],
|
||||||
"name": "AlreadyReleased",
|
"name": "AlreadyReleased",
|
||||||
"type": "error"
|
"type": "error"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "AmountNotAllowed",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"inputs": [],
|
"inputs": [],
|
||||||
"name": "DepositAlreadyExists",
|
"name": "DepositAlreadyExists",
|
||||||
@ -23,11 +33,21 @@
|
|||||||
"name": "InvalidSigner",
|
"name": "InvalidSigner",
|
||||||
"type": "error"
|
"type": "error"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "LengthMismatch",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"inputs": [],
|
"inputs": [],
|
||||||
"name": "LoopOverflow",
|
"name": "LoopOverflow",
|
||||||
"type": "error"
|
"type": "error"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "NoTokens",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"inputs": [],
|
"inputs": [],
|
||||||
"name": "NotEnoughTokens",
|
"name": "NotEnoughTokens",
|
||||||
@ -43,11 +63,35 @@
|
|||||||
"name": "OnlySeller",
|
"name": "OnlySeller",
|
||||||
"type": "error"
|
"type": "error"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "TokenDenied",
|
||||||
|
"type": "error"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"inputs": [],
|
"inputs": [],
|
||||||
"name": "TxAlreadyUsed",
|
"name": "TxAlreadyUsed",
|
||||||
"type": "error"
|
"type": "error"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "token",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "bool",
|
||||||
|
"name": "state",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "AllowedERC20Updated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"anonymous": false,
|
"anonymous": false,
|
||||||
"inputs": [
|
"inputs": [
|
||||||
@ -173,6 +217,19 @@
|
|||||||
"name": "LockAdded",
|
"name": "LockAdded",
|
||||||
"type": "event"
|
"type": "event"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "blocks",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "LockBlocksUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"anonymous": false,
|
"anonymous": false,
|
||||||
"inputs": [
|
"inputs": [
|
||||||
@ -210,6 +267,32 @@
|
|||||||
],
|
],
|
||||||
"name": "LockReturned",
|
"name": "LockReturned",
|
||||||
"type": "event"
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "reputation",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "ReputationUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "address[]",
|
||||||
|
"name": "signers",
|
||||||
|
"type": "address[]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "ValidSignersUpdated",
|
||||||
|
"type": "event"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"bytecode": "0x",
|
"bytecode": "0x",
|
||||||
|
4
artifacts/contracts/Reputation.sol/Reputation.dbg.json
Normal file
4
artifacts/contracts/Reputation.sol/Reputation.dbg.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
|
}
|
106
artifacts/contracts/Reputation.sol/Reputation.json
Normal file
106
artifacts/contracts/Reputation.sol/Reputation.json
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "Reputation",
|
||||||
|
"sourceName": "contracts/Reputation.sol",
|
||||||
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "constructor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anonymous": false,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "user",
|
||||||
|
"type": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "newOwner",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "OwnerUpdated",
|
||||||
|
"type": "event"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_userCredit",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "limiter",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_spendLimit",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "pure",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "magicValue",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "maxLimit",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [],
|
||||||
|
"name": "owner",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view",
|
||||||
|
"type": "function"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "address",
|
||||||
|
"name": "newOwner",
|
||||||
|
"type": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "setOwner",
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable",
|
||||||
|
"type": "function"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bytecode": "0x608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a350610347806100616000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80634d2b1791116100505780634d2b17911461009e5780638da5cb5b146100b1578063a4b34557146100dc57600080fd5b806313af40351461006c5780631a861d2614610081575b600080fd5b61007f61007a3660046102f8565b6100e8565b005b61008b620f424081565b6040519081526020015b60405180910390f35b61008b6100ac366004610321565b6101a9565b6000546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610095565b61008b643a3529440081565b6000546001600160a01b031633146101465760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640160405180910390fd5b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6000806101b9620f4240846101fa565b905060006101c784806101fa565b905060006101e26101dd83643a352944006101fa565b610216565b90506101ee83826102c8565b60010195945050505050565b600061020f8383670de0b6b3a76400006102d9565b9392505050565b60b58171010000000000000000000000000000000000811061023d5760409190911b9060801c5b690100000000000000000081106102595760209190911b9060401c5b6501000000000081106102715760109190911b9060201c5b630100000081106102875760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b600061020f83670de0b6b3a7640000845b8282028115158415858304851417166102f157600080fd5b0492915050565b60006020828403121561030a57600080fd5b81356001600160a01b038116811461020f57600080fd5b60006020828403121561033357600080fd5b503591905056fea164736f6c6343000809000a",
|
||||||
|
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c80634d2b1791116100505780634d2b17911461009e5780638da5cb5b146100b1578063a4b34557146100dc57600080fd5b806313af40351461006c5780631a861d2614610081575b600080fd5b61007f61007a3660046102f8565b6100e8565b005b61008b620f424081565b6040519081526020015b60405180910390f35b61008b6100ac366004610321565b6101a9565b6000546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610095565b61008b643a3529440081565b6000546001600160a01b031633146101465760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640160405180910390fd5b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6000806101b9620f4240846101fa565b905060006101c784806101fa565b905060006101e26101dd83643a352944006101fa565b610216565b90506101ee83826102c8565b60010195945050505050565b600061020f8383670de0b6b3a76400006102d9565b9392505050565b60b58171010000000000000000000000000000000000811061023d5760409190911b9060801c5b690100000000000000000081106102595760209190911b9060401c5b6501000000000081106102715760109190911b9060201c5b630100000081106102875760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b600061020f83670de0b6b3a7640000845b8282028115158415858304851417166102f157600080fd5b0492915050565b60006020828403121561030a57600080fd5b81356001600160a01b038116811461020f57600080fd5b60006020828403121561033357600080fd5b503591905056fea164736f6c6343000809000a",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"_format": "hh-sol-dbg-1",
|
"_format": "hh-sol-dbg-1",
|
||||||
"buildInfo": "../../../../build-info/0d20d1f12753266e5824cbfb8a85b2b2.json"
|
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "IReputation",
|
||||||
|
"sourceName": "contracts/lib/interfaces/IReputation.sol",
|
||||||
|
"abi": [
|
||||||
|
{
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_userCredit",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "limiter",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"internalType": "uint256",
|
||||||
|
"name": "_spendLimit",
|
||||||
|
"type": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "pure",
|
||||||
|
"type": "function"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bytecode": "0x",
|
||||||
|
"deployedBytecode": "0x",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"_format": "hh-sol-dbg-1",
|
"_format": "hh-sol-dbg-1",
|
||||||
"buildInfo": "../../../../build-info/0d20d1f12753266e5824cbfb8a85b2b2.json"
|
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"_format": "hh-sol-dbg-1",
|
"_format": "hh-sol-dbg-1",
|
||||||
"buildInfo": "../../../../build-info/0d20d1f12753266e5824cbfb8a85b2b2.json"
|
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"_format": "hh-sol-dbg-1",
|
"_format": "hh-sol-dbg-1",
|
||||||
"buildInfo": "../../../../build-info/0d20d1f12753266e5824cbfb8a85b2b2.json"
|
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "FixedPointMathLib",
|
||||||
|
"sourceName": "contracts/lib/utils/FixedPointMathLib.sol",
|
||||||
|
"abi": [],
|
||||||
|
"bytecode": "0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a",
|
||||||
|
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-dbg-1",
|
||||||
|
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"_format": "hh-sol-artifact-1",
|
||||||
|
"contractName": "MerkleProofLib",
|
||||||
|
"sourceName": "contracts/lib/utils/MerkleProofLib.sol",
|
||||||
|
"abi": [],
|
||||||
|
"bytecode": "0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a",
|
||||||
|
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a",
|
||||||
|
"linkReferences": {},
|
||||||
|
"deployedLinkReferences": {}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"_format": "hh-sol-dbg-1",
|
"_format": "hh-sol-dbg-1",
|
||||||
"buildInfo": "../../../../build-info/0d20d1f12753266e5824cbfb8a85b2b2.json"
|
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"_format": "hh-sol-dbg-1",
|
"_format": "hh-sol-dbg-1",
|
||||||
"buildInfo": "../../../../build-info/0d20d1f12753266e5824cbfb8a85b2b2.json"
|
"buildInfo": "../../../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"_format": "hh-sol-dbg-1",
|
"_format": "hh-sol-dbg-1",
|
||||||
"buildInfo": "../../build-info/0d20d1f12753266e5824cbfb8a85b2b2.json"
|
"buildInfo": "../../build-info/eddb8a89a5d02f0c81c1106939df9c5f.json"
|
||||||
}
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
@ -23,8 +23,11 @@ library DataTypes {
|
|||||||
/// @dev If not paid at this block will be expired.
|
/// @dev If not paid at this block will be expired.
|
||||||
uint256 expirationBlock;
|
uint256 expirationBlock;
|
||||||
/// @dev Where the tokens are sent the when order gets validated.
|
/// @dev Where the tokens are sent the when order gets validated.
|
||||||
address targetAddress;
|
address buyerAddress;
|
||||||
/// @dev Relayer address that facilitated this transaction.
|
/// @dev Relayer's target address that receives `relayerPremium` funds.
|
||||||
|
address relayerTarget;
|
||||||
|
/// @dev Relayer address (msg.sender) that facilitated this transaction.
|
||||||
|
/// @dev Reputation points accruer.
|
||||||
address relayerAddress;
|
address relayerAddress;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
pragma solidity 0.8.9;
|
pragma solidity 0.8.9;
|
||||||
|
|
||||||
interface EventAndErrors {
|
interface EventAndErrors {
|
||||||
|
// bytes32 constant DEPOSIT_ADDED_SIGNATURE =
|
||||||
|
|
||||||
/// ███ Events ████████████████████████████████████████████████████████████
|
/// ███ Events ████████████████████████████████████████████████████████████
|
||||||
|
|
||||||
@ -26,17 +27,15 @@ interface EventAndErrors {
|
|||||||
uint256 depositID,
|
uint256 depositID,
|
||||||
uint256 amount
|
uint256 amount
|
||||||
);
|
);
|
||||||
event LockReleased(
|
event LockReleased(address indexed buyer, bytes32 lockId);
|
||||||
address indexed buyer,
|
event LockReturned(address indexed buyer, bytes32 lockId);
|
||||||
bytes32 lockId
|
event FundsWithdrawn(address owner, uint256 amount);
|
||||||
);
|
event ReputationUpdated(address reputation);
|
||||||
event LockReturned(
|
event LockBlocksUpdated(uint256 blocks);
|
||||||
address indexed buyer,
|
event ValidSignersUpdated(address[] signers);
|
||||||
bytes32 lockId
|
event AllowedERC20Updated(
|
||||||
);
|
address indexed token,
|
||||||
event FundsWithdrawn(
|
bool indexed state
|
||||||
address owner,
|
|
||||||
uint256 amount
|
|
||||||
);
|
);
|
||||||
|
|
||||||
/// ███ Errors ████████████████████████████████████████████████████████████
|
/// ███ Errors ████████████████████████████████████████████████████████████
|
||||||
@ -45,6 +44,7 @@ interface EventAndErrors {
|
|||||||
/// @dev 0xc44bd765
|
/// @dev 0xc44bd765
|
||||||
error DepositAlreadyExists();
|
error DepositAlreadyExists();
|
||||||
/// @dev Only seller could call this function.
|
/// @dev Only seller could call this function.
|
||||||
|
/// @dev `msg.sender` and the seller differ.
|
||||||
/// @dev 0x85d1f726
|
/// @dev 0x85d1f726
|
||||||
error OnlySeller();
|
error OnlySeller();
|
||||||
/// @dev Lock not expired or already released.
|
/// @dev Lock not expired or already released.
|
||||||
@ -69,4 +69,20 @@ interface EventAndErrors {
|
|||||||
/// @dev Signer is not a valid signer.
|
/// @dev Signer is not a valid signer.
|
||||||
/// @dev 0x815e1d64
|
/// @dev 0x815e1d64
|
||||||
error InvalidSigner();
|
error InvalidSigner();
|
||||||
|
/// @dev Address doesn't exist in a MerkleTree.
|
||||||
|
/// @dev Address not allowed as relayer.
|
||||||
|
/// @dev 0x3b8474be
|
||||||
|
error AddressDenied();
|
||||||
|
/// @dev Arrays' length don't match.
|
||||||
|
/// @dev 0xff633a38
|
||||||
|
error LengthMismatch();
|
||||||
|
/// @dev No tokens array provided as argument.
|
||||||
|
/// @dev 0xdf957883
|
||||||
|
error NoTokens();
|
||||||
|
/// @dev Token address not allowed to be deposited.
|
||||||
|
/// @dev 0x1578328e
|
||||||
|
error TokenDenied();
|
||||||
|
/// @dev Wished amount to be locked exceeds the limit allowed.
|
||||||
|
/// @dev 0x1c18f846
|
||||||
|
error AmountNotAllowed();
|
||||||
}
|
}
|
||||||
|
45
contracts/Reputation.sol
Normal file
45
contracts/Reputation.sol
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity 0.8.9;
|
||||||
|
|
||||||
|
import { IReputation } from "./lib/interfaces/IReputation.sol";
|
||||||
|
import { Owned } from "./lib/auth/Owned.sol";
|
||||||
|
import { FixedPointMathLib as WADMath } from "./lib/utils/FixedPointMathLib.sol";
|
||||||
|
|
||||||
|
|
||||||
|
contract Reputation is
|
||||||
|
IReputation,
|
||||||
|
Owned(msg.sender)
|
||||||
|
{
|
||||||
|
|
||||||
|
using WADMath for uint256;
|
||||||
|
|
||||||
|
/// @dev Asymptote numerator constant value for the `limiter` fx.
|
||||||
|
uint256 constant public maxLimit = 1e6;
|
||||||
|
/// @dev Denominator's constant operand for the `limiter` fx.
|
||||||
|
uint256 constant public magicValue = 2.5e11;
|
||||||
|
|
||||||
|
constructor(/* */) {/* */}
|
||||||
|
|
||||||
|
function limiter(uint256 _userCredit)
|
||||||
|
external
|
||||||
|
pure
|
||||||
|
override(IReputation)
|
||||||
|
returns(uint256 _spendLimit)
|
||||||
|
{
|
||||||
|
// _spendLimit = 1 + ( ( maxLimit * _userCredit ) / sqrt( magicValue * ( _userCredit * _userCredit ) ) );
|
||||||
|
// return _spendLimit;
|
||||||
|
|
||||||
|
|
||||||
|
unchecked {
|
||||||
|
uint256 numeratorWad =
|
||||||
|
maxLimit.mulWadDown(_userCredit);
|
||||||
|
uint256 userCreditSquaredWad =
|
||||||
|
_userCredit.mulWadDown(_userCredit);
|
||||||
|
uint256 denominatorSqrtWad =
|
||||||
|
(userCreditSquaredWad.mulWadDown(magicValue)).sqrt();
|
||||||
|
|
||||||
|
_spendLimit = (1 + (numeratorWad).divWadDown(denominatorSqrtWad));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
12
contracts/lib/interfaces/IReputation.sol
Normal file
12
contracts/lib/interfaces/IReputation.sol
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity >=0.8.4;
|
||||||
|
|
||||||
|
|
||||||
|
interface IReputation {
|
||||||
|
|
||||||
|
function limiter(uint256 _userCredit)
|
||||||
|
external
|
||||||
|
pure
|
||||||
|
returns(uint256 _spendLimit);
|
||||||
|
|
||||||
|
}
|
115
contracts/lib/utils/FixedPointMathLib.sol
Normal file
115
contracts/lib/utils/FixedPointMathLib.sol
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity >=0.8.4;
|
||||||
|
|
||||||
|
/// @notice Arithmetic library with operations for fixed-point numbers.
|
||||||
|
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol)
|
||||||
|
library FixedPointMathLib {
|
||||||
|
|
||||||
|
/*//////////////////////////////////////////////////////////////
|
||||||
|
SIMPLIFIED FIXED POINT OPERATIONS
|
||||||
|
//////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
/// @dev The scalar of ETH and most ERC20s.
|
||||||
|
uint256 internal constant WAD = 1e18;
|
||||||
|
|
||||||
|
function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) {
|
||||||
|
// Equivalent to (x * y) / WAD rounded down.
|
||||||
|
return mulDivDown(x, y, WAD);
|
||||||
|
}
|
||||||
|
|
||||||
|
function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) {
|
||||||
|
// Equivalent to (x * WAD) / y rounded down.
|
||||||
|
return mulDivDown(x, WAD, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*//////////////////////////////////////////////////////////////
|
||||||
|
LOW LEVEL FIXED POINT OPERATIONS
|
||||||
|
//////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
function mulDivDown(
|
||||||
|
uint256 x,
|
||||||
|
uint256 y,
|
||||||
|
uint256 denominator
|
||||||
|
) internal pure returns (uint256 z) {
|
||||||
|
assembly {
|
||||||
|
// Store x * y in z for now.
|
||||||
|
z := mul(x, y)
|
||||||
|
|
||||||
|
// Equivalent to require(denominator != 0 && (x == 0 || (x * y) / x == y))
|
||||||
|
if iszero(and(iszero(iszero(denominator)), or(iszero(x), eq(div(z, x), y)))) {
|
||||||
|
revert(0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Divide z by the denominator.
|
||||||
|
z := div(z, denominator)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*//////////////////////////////////////////////////////////////
|
||||||
|
GENERAL NUMBER UTILITIES
|
||||||
|
//////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
function sqrt(uint256 x) internal pure returns (uint256 z) {
|
||||||
|
assembly {
|
||||||
|
let y := x // We start y at x, which will help us make our initial estimate.
|
||||||
|
|
||||||
|
z := 181 // The "correct" value is 1, but this saves a multiplication later.
|
||||||
|
|
||||||
|
// This segment is to get a reasonable initial estimate for the Babylonian method. With a bad
|
||||||
|
// start, the correct # of bits increases ~linearly each iteration instead of ~quadratically.
|
||||||
|
|
||||||
|
// We check y >= 2^(k + 8) but shift right by k bits
|
||||||
|
// each branch to ensure that if x >= 256, then y >= 256.
|
||||||
|
if iszero(lt(y, 0x10000000000000000000000000000000000)) {
|
||||||
|
y := shr(128, y)
|
||||||
|
z := shl(64, z)
|
||||||
|
}
|
||||||
|
if iszero(lt(y, 0x1000000000000000000)) {
|
||||||
|
y := shr(64, y)
|
||||||
|
z := shl(32, z)
|
||||||
|
}
|
||||||
|
if iszero(lt(y, 0x10000000000)) {
|
||||||
|
y := shr(32, y)
|
||||||
|
z := shl(16, z)
|
||||||
|
}
|
||||||
|
if iszero(lt(y, 0x1000000)) {
|
||||||
|
y := shr(16, y)
|
||||||
|
z := shl(8, z)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Goal was to get z*z*y within a small factor of x. More iterations could
|
||||||
|
// get y in a tighter range. Currently, we will have y in [256, 256*2^16).
|
||||||
|
// We ensured y >= 256 so that the relative difference between y and y+1 is small.
|
||||||
|
// That's not possible if x < 256 but we can just verify those cases exhaustively.
|
||||||
|
|
||||||
|
// Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8), and either y >= 256, or x < 256.
|
||||||
|
// Correctness can be checked exhaustively for x < 256, so we assume y >= 256.
|
||||||
|
// Then z*sqrt(y) is within sqrt(257)/sqrt(256) of sqrt(x), or about 20bps.
|
||||||
|
|
||||||
|
// For s in the range [1/256, 256], the estimate f(s) = (181/1024) * (s+1) is in the range
|
||||||
|
// (1/2.84 * sqrt(s), 2.84 * sqrt(s)), with largest error when s = 1 and when s = 256 or 1/256.
|
||||||
|
|
||||||
|
// Since y is in [256, 256*2^16), let a = y/65536, so that a is in [1/256, 256). Then we can estimate
|
||||||
|
// sqrt(y) using sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2^18.
|
||||||
|
|
||||||
|
// There is no overflow risk here since y < 2^136 after the first branch above.
|
||||||
|
z := shr(18, mul(z, add(y, 65536))) // A mul() is saved from starting z at 181.
|
||||||
|
|
||||||
|
// Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough.
|
||||||
|
z := shr(1, add(z, div(x, z)))
|
||||||
|
z := shr(1, add(z, div(x, z)))
|
||||||
|
z := shr(1, add(z, div(x, z)))
|
||||||
|
z := shr(1, add(z, div(x, z)))
|
||||||
|
z := shr(1, add(z, div(x, z)))
|
||||||
|
z := shr(1, add(z, div(x, z)))
|
||||||
|
z := shr(1, add(z, div(x, z)))
|
||||||
|
|
||||||
|
// If x+1 is a perfect square, the Babylonian method cycles between
|
||||||
|
// floor(sqrt(x)) and ceil(sqrt(x)). This statement ensures we return floor.
|
||||||
|
// See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division
|
||||||
|
// Since the ceil is rare, we save gas on the assignment and repeat division in the rare case.
|
||||||
|
// If you don't care whether the floor or ceil square root is returned, you can remove this statement.
|
||||||
|
z := sub(z, lt(div(x, z), z))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
43
contracts/lib/utils/MerkleProofLib.sol
Normal file
43
contracts/lib/utils/MerkleProofLib.sol
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity >=0.8.4;
|
||||||
|
|
||||||
|
/// @notice Gas optimized verification of proof of inclusion for a leaf in a Merkle tree.
|
||||||
|
/// @author Solady
|
||||||
|
/// (https://github.com/vectorized/solady/blob/main/src/utils/MerkleProofLib.sol)
|
||||||
|
/// @author Modified from Solmate
|
||||||
|
/// (https://github.com/transmissions11/solmate/blob/main/src/utils/MerkleProofLib.sol)
|
||||||
|
/// @author Modified from OpenZeppelin
|
||||||
|
/// (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol)
|
||||||
|
library MerkleProofLib {
|
||||||
|
/// @dev Returns whether `leaf` exists in the Merkle tree with `root`, given `proof`.
|
||||||
|
function verify(bytes32[] calldata proof, bytes32 root, bytes32 leaf)
|
||||||
|
internal
|
||||||
|
pure
|
||||||
|
returns (bool isValid)
|
||||||
|
{
|
||||||
|
/// @solidity memory-safe-assembly
|
||||||
|
assembly {
|
||||||
|
if proof.length {
|
||||||
|
// Left shift by 5 is equivalent to multiplying by 0x20.
|
||||||
|
let end := add(proof.offset, shl(5, proof.length))
|
||||||
|
// Initialize `offset` to the offset of `proof` in the calldata.
|
||||||
|
let offset := proof.offset
|
||||||
|
// Iterate over proof elements to compute root hash.
|
||||||
|
for {} 1 {} {
|
||||||
|
// Slot of `leaf` in scratch space.
|
||||||
|
// If the condition is true: 0x20, otherwise: 0x00.
|
||||||
|
let scratch := shl(5, gt(leaf, calldataload(offset)))
|
||||||
|
// Store elements to hash contiguously in scratch space.
|
||||||
|
// Scratch space is 64 bytes (0x00 - 0x3f) and both elements are 32 bytes.
|
||||||
|
mstore(scratch, leaf)
|
||||||
|
mstore(xor(scratch, 0x20), calldataload(offset))
|
||||||
|
// Reuse `leaf` to store the hash to reduce stack operations.
|
||||||
|
leaf := keccak256(0x00, 0x40)
|
||||||
|
offset := add(offset, 0x20)
|
||||||
|
if iszero(lt(offset, end)) { break }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
isValid := eq(leaf, root)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,8 @@ pragma solidity 0.8.9;
|
|||||||
import { Owned } from "./lib/auth/Owned.sol";
|
import { Owned } from "./lib/auth/Owned.sol";
|
||||||
import { Counters } from "./lib/utils/Counters.sol";
|
import { Counters } from "./lib/utils/Counters.sol";
|
||||||
import { ERC20, SafeTransferLib } from "./lib/utils/SafeTransferLib.sol";
|
import { ERC20, SafeTransferLib } from "./lib/utils/SafeTransferLib.sol";
|
||||||
|
import { IReputation } from "./lib/interfaces/IReputation.sol";
|
||||||
|
import { MerkleProofLib as Merkle } from "./lib/utils/MerkleProofLib.sol";
|
||||||
import { ReentrancyGuard } from "./lib/utils/ReentrancyGuard.sol";
|
import { ReentrancyGuard } from "./lib/utils/ReentrancyGuard.sol";
|
||||||
import { EventAndErrors } from "./EventAndErrors.sol";
|
import { EventAndErrors } from "./EventAndErrors.sol";
|
||||||
import { DataTypes as DT } from "./DataTypes.sol";
|
import { DataTypes as DT } from "./DataTypes.sol";
|
||||||
@ -29,12 +31,14 @@ contract P2PIX is
|
|||||||
|
|
||||||
/// ███ Storage ████████████████████████████████████████████████████████████
|
/// ███ Storage ████████████████████████████████████████████████████████████
|
||||||
|
|
||||||
|
IReputation public reputation;
|
||||||
Counters.Counter public depositCount;
|
Counters.Counter public depositCount;
|
||||||
|
|
||||||
/// @dev Default blocks that lock will hold tokens.
|
/// @dev Default blocks that lock will hold tokens.
|
||||||
uint256 public defaultLockBlocks;
|
uint256 public defaultLockBlocks;
|
||||||
|
|
||||||
|
/// @dev Stores an relayer's last computed credit.
|
||||||
|
mapping(uint256 => uint256) public userRecord;
|
||||||
/// @dev List of valid Bacen signature addresses
|
/// @dev List of valid Bacen signature addresses
|
||||||
mapping(uint256 => bool) public validBacenSigners;
|
mapping(uint256 => bool) public validBacenSigners;
|
||||||
/// @dev Seller list of deposits
|
/// @dev Seller list of deposits
|
||||||
@ -43,25 +47,24 @@ contract P2PIX is
|
|||||||
mapping(bytes32 => DT.Lock) public mapLocks;
|
mapping(bytes32 => DT.Lock) public mapLocks;
|
||||||
/// @dev List of Pix transactions already signed.
|
/// @dev List of Pix transactions already signed.
|
||||||
mapping(bytes32 => bool) private usedTransactions;
|
mapping(bytes32 => bool) private usedTransactions;
|
||||||
|
/// @dev Seller casted to key => Seller's allowlist merkleroot.
|
||||||
|
mapping(uint256 => bytes32) public sellerAllowList;
|
||||||
|
/// @dev Tokens allowed to serve as the underlying amount of a deposit.
|
||||||
|
mapping(ERC20 => bool) public allowedERC20s;
|
||||||
|
|
||||||
/// ███ Constructor ████████████████████████████████████████████████████████
|
/// ███ Constructor ████████████████████████████████████████████████████████
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
uint256 defaultBlocks,
|
uint256 defaultBlocks,
|
||||||
address[] memory validSigners
|
address[] memory validSigners,
|
||||||
|
IReputation _reputation,
|
||||||
|
address[] memory tokens,
|
||||||
|
bool[] memory tokenStates
|
||||||
) payable {
|
) payable {
|
||||||
assembly {
|
setDefaultLockBlocks(defaultBlocks);
|
||||||
sstore(defaultLockBlocks.slot, defaultBlocks)
|
setReputation(_reputation);
|
||||||
}
|
setValidSigners(validSigners);
|
||||||
unchecked {
|
tokenSettings(tokens, tokenStates);
|
||||||
uint256 i;
|
|
||||||
uint256 len = validSigners.length;
|
|
||||||
for (i; i < len; ) {
|
|
||||||
uint256 key = _castAddrToKey(validSigners[i]);
|
|
||||||
validBacenSigners[key] = true;
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ███ Public FX ██████████████████████████████████████████████████████████
|
/// ███ Public FX ██████████████████████████████████████████████████████████
|
||||||
@ -70,22 +73,27 @@ contract P2PIX is
|
|||||||
/// offer of an amount of ERC20 tokens.
|
/// offer of an amount of ERC20 tokens.
|
||||||
/// @dev Seller needs to send his tokens to the P2PIX smart contract.
|
/// @dev Seller needs to send his tokens to the P2PIX smart contract.
|
||||||
/// @param _pixTarget Pix key destination provided by the offer's seller.
|
/// @param _pixTarget Pix key destination provided by the offer's seller.
|
||||||
|
/// @param allowlistRoot Optional allow list merkleRoot update `bytes32` value.
|
||||||
/// @return depositID The `uint256` return value provided
|
/// @return depositID The `uint256` return value provided
|
||||||
/// as the deposit identifier.
|
/// as the deposit identifier.
|
||||||
/// @dev Function sighash: 0xbfe07da6.
|
/// @dev Function sighash: 0xbfe07da6.
|
||||||
function deposit(
|
function deposit(
|
||||||
address _token,
|
address _token,
|
||||||
uint256 _amount,
|
uint256 _amount,
|
||||||
string calldata _pixTarget
|
string calldata _pixTarget,
|
||||||
|
bytes32 allowlistRoot
|
||||||
)
|
)
|
||||||
public
|
public
|
||||||
returns (uint256 depositID)
|
returns (
|
||||||
|
uint256 depositID
|
||||||
|
)
|
||||||
{
|
{
|
||||||
(depositID) = _encodeDepositID();
|
|
||||||
ERC20 t = ERC20(_token);
|
ERC20 t = ERC20(_token);
|
||||||
|
if (!allowedERC20s[t]) revert TokenDenied();
|
||||||
|
|
||||||
DT.Deposit memory d =
|
(depositID) = _encodeDepositID();
|
||||||
DT.Deposit({
|
|
||||||
|
DT.Deposit memory d = DT.Deposit({
|
||||||
remaining: _amount,
|
remaining: _amount,
|
||||||
pixTarget: _pixTarget,
|
pixTarget: _pixTarget,
|
||||||
seller: msg.sender,
|
seller: msg.sender,
|
||||||
@ -95,6 +103,10 @@ contract P2PIX is
|
|||||||
|
|
||||||
setReentrancyGuard();
|
setReentrancyGuard();
|
||||||
|
|
||||||
|
if (allowlistRoot != 0) {
|
||||||
|
setRoot(msg.sender, allowlistRoot);
|
||||||
|
}
|
||||||
|
|
||||||
mapDeposits[depositID] = d;
|
mapDeposits[depositID] = d;
|
||||||
depositCount.increment();
|
depositCount.increment();
|
||||||
|
|
||||||
@ -120,9 +132,7 @@ contract P2PIX is
|
|||||||
/// @dev This function does not affect any ongoing active locks.
|
/// @dev This function does not affect any ongoing active locks.
|
||||||
/// @dev Function sighash: 0x72fada5c.
|
/// @dev Function sighash: 0x72fada5c.
|
||||||
|
|
||||||
function cancelDeposit(
|
function cancelDeposit(uint256 depositID) public {
|
||||||
uint256 depositID
|
|
||||||
) public {
|
|
||||||
_onlySeller(depositID);
|
_onlySeller(depositID);
|
||||||
mapDeposits[depositID].valid = false;
|
mapDeposits[depositID].valid = false;
|
||||||
emit DepositClosed(
|
emit DepositClosed(
|
||||||
@ -133,91 +143,126 @@ contract P2PIX is
|
|||||||
|
|
||||||
/// @notice Public method designed to lock an remaining amount of
|
/// @notice Public method designed to lock an remaining amount of
|
||||||
/// the deposit order of a seller.
|
/// the deposit order of a seller.
|
||||||
/// @dev This method can be performed by either an order's seller,
|
/// @dev This method can be performed either by:
|
||||||
/// relayer, or buyer.
|
/// - 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
|
/// @dev There can only exist a lock per each `_amount` partitioned
|
||||||
/// from the total `remaining` value.
|
/// from the total `remaining` value.
|
||||||
/// @dev Locks can only be performed in valid orders.
|
/// @dev Locks can only be performed in valid orders.
|
||||||
/// @param _targetAddress The address of the buyer of a `_depositID`.
|
/// @param _buyerAddress The address of the buyer of a `_depositID`.
|
||||||
/// @param _relayerAddress The relayer's address.
|
/// @param _relayerTarget Target address entitled to the `relayerPremim`.
|
||||||
/// @param _relayerPremium The refund/premium owed to a relayer.
|
/// @param _relayerPremium The refund/premium owed to a relayer.
|
||||||
|
/// @param _amount The deposit's remaining amount wished to be locked.
|
||||||
|
/// @param merkleProof This value should be:
|
||||||
|
/// - 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 `bytes32` identifiers to be
|
||||||
/// provided so to unexpire locks using this transaction gas push.
|
/// provided so to unexpire locks using this transaction gas push.
|
||||||
/// @return lockID The `bytes32` value returned as the lock identifier.
|
/// @return lockID The `bytes32` value returned as the lock identifier.
|
||||||
/// @dev Function sighash: 0x03aaf306.
|
/// @dev Function sighash: 0x03aaf306.
|
||||||
function lock(
|
function lock(
|
||||||
uint256 _depositID,
|
uint256 _depositID,
|
||||||
address _targetAddress,
|
address _buyerAddress,
|
||||||
address _relayerAddress,
|
address _relayerTarget,
|
||||||
uint256 _relayerPremium,
|
uint256 _relayerPremium,
|
||||||
uint256 _amount,
|
uint256 _amount,
|
||||||
|
bytes32[] calldata merkleProof,
|
||||||
bytes32[] calldata expiredLocks
|
bytes32[] calldata expiredLocks
|
||||||
)
|
) public nonReentrant returns (bytes32 lockID) {
|
||||||
public
|
|
||||||
nonReentrant
|
|
||||||
returns (bytes32 lockID)
|
|
||||||
{
|
|
||||||
unlockExpired(expiredLocks);
|
unlockExpired(expiredLocks);
|
||||||
DT.Deposit storage d =
|
DT.Deposit storage d = mapDeposits[_depositID];
|
||||||
mapDeposits[_depositID];
|
|
||||||
|
|
||||||
if(!d.valid)
|
if (!d.valid) revert InvalidDeposit();
|
||||||
revert InvalidDeposit();
|
if (d.remaining < _amount) revert NotEnoughTokens();
|
||||||
if(d.remaining < _amount)
|
|
||||||
revert NotEnoughTokens();
|
(lockID) = _encodeLockID(
|
||||||
(lockID) =
|
|
||||||
_encodeLockID(
|
|
||||||
_depositID,
|
_depositID,
|
||||||
_amount,
|
_amount,
|
||||||
_targetAddress
|
_buyerAddress
|
||||||
);
|
);
|
||||||
|
|
||||||
DT.Lock memory l =
|
DT.Lock memory l = DT.Lock({
|
||||||
DT.Lock
|
|
||||||
({
|
|
||||||
depositID: _depositID,
|
depositID: _depositID,
|
||||||
relayerPremium: _relayerPremium,
|
relayerPremium: _relayerPremium,
|
||||||
amount: _amount,
|
amount: _amount,
|
||||||
expirationBlock: (block.number + defaultLockBlocks),
|
expirationBlock: (block.number +
|
||||||
targetAddress: _targetAddress,
|
defaultLockBlocks),
|
||||||
relayerAddress: _relayerAddress
|
buyerAddress: _buyerAddress,
|
||||||
|
relayerTarget: _relayerTarget,
|
||||||
|
relayerAddress: msg.sender
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (merkleProof.length != 0) {
|
||||||
|
merkleVerify(
|
||||||
|
merkleProof,
|
||||||
|
sellerAllowList[_castAddrToKey(d.seller)],
|
||||||
|
msg.sender
|
||||||
|
);
|
||||||
|
|
||||||
mapLocks[lockID] = l;
|
mapLocks[lockID] = l;
|
||||||
d.remaining -= _amount;
|
d.remaining -= _amount;
|
||||||
|
|
||||||
emit LockAdded(
|
emit LockAdded(
|
||||||
_targetAddress,
|
_buyerAddress,
|
||||||
lockID,
|
lockID,
|
||||||
_depositID,
|
l.depositID,
|
||||||
_amount
|
_amount
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Halt execution and output `lockID`.
|
||||||
|
return lockID;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
uint256 userCredit = userRecord[
|
||||||
|
_castAddrToKey(msg.sender)
|
||||||
|
];
|
||||||
|
uint256 spendLimit;
|
||||||
|
(spendLimit) = _limiter(userCredit);
|
||||||
|
|
||||||
|
if (l.amount > spendLimit)
|
||||||
|
revert AmountNotAllowed();
|
||||||
|
|
||||||
|
mapLocks[lockID] = l;
|
||||||
|
d.remaining -= _amount;
|
||||||
|
|
||||||
|
emit LockAdded(
|
||||||
|
_buyerAddress,
|
||||||
|
lockID,
|
||||||
|
l.depositID,
|
||||||
|
_amount
|
||||||
|
);
|
||||||
|
|
||||||
|
// Halt execution and output `lockID`.
|
||||||
|
return lockID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @notice Lock release method that liquidate lock
|
/// @notice Lock release method that liquidate lock
|
||||||
// orders and distributes relayer fees.
|
/// orders and distributes relayer fees.
|
||||||
/// @dev This method can be called by either an
|
/// @dev This method can be called by any public actor
|
||||||
/// order's seller, relayer, or buyer.
|
/// as long the signature provided is valid.
|
||||||
|
/// @dev `relayerPremium` gets splitted equaly
|
||||||
|
/// if `relayerTarget` addresses differ.
|
||||||
|
/// @dev 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;
|
||||||
|
/// @param _relayerTarget Target address entitled to the `relayerPremim`.
|
||||||
/// @dev Function sighash: 0x4e1389ed.
|
/// @dev Function sighash: 0x4e1389ed.
|
||||||
function release(
|
function release(
|
||||||
bytes32 lockID,
|
bytes32 lockID,
|
||||||
|
address _relayerTarget,
|
||||||
uint256 pixTimestamp,
|
uint256 pixTimestamp,
|
||||||
bytes32 r,
|
bytes32 r,
|
||||||
bytes32 s,
|
bytes32 s,
|
||||||
uint8 v
|
uint8 v
|
||||||
)
|
) public nonReentrant {
|
||||||
public
|
|
||||||
nonReentrant
|
|
||||||
{
|
|
||||||
/// @todo Prevent a PIX non-related to the app from
|
|
||||||
/// getting targeted, due to both sharing the same destination.
|
|
||||||
DT.Lock storage l = mapLocks[lockID];
|
DT.Lock storage l = mapLocks[lockID];
|
||||||
|
|
||||||
if (
|
if (
|
||||||
l.expirationBlock <= block.number ||
|
l.expirationBlock <= block.number || l.amount <= 0
|
||||||
l.amount <= 0
|
) revert AlreadyReleased();
|
||||||
) revert
|
|
||||||
AlreadyReleased();
|
|
||||||
|
|
||||||
DT.Deposit storage d = mapDeposits[l.depositID];
|
DT.Deposit storage d = mapDeposits[l.depositID];
|
||||||
bytes32 message = keccak256(
|
bytes32 message = keccak256(
|
||||||
@ -234,19 +279,12 @@ contract P2PIX is
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
if(
|
if (usedTransactions[message] == true)
|
||||||
usedTransactions[message]
|
revert TxAlreadyUsed();
|
||||||
== true
|
|
||||||
) revert
|
|
||||||
TxAlreadyUsed();
|
|
||||||
|
|
||||||
uint256 signer = _castAddrToKey(
|
uint256 signer = _castAddrToKey(
|
||||||
ecrecover(
|
ecrecover(messageDigest, v, r, s)
|
||||||
messageDigest,
|
);
|
||||||
v,
|
|
||||||
r,
|
|
||||||
s
|
|
||||||
));
|
|
||||||
|
|
||||||
if (!validBacenSigners[signer])
|
if (!validBacenSigners[signer])
|
||||||
revert InvalidSigner();
|
revert InvalidSigner();
|
||||||
@ -260,52 +298,78 @@ contract P2PIX is
|
|||||||
l.expirationBlock = 0;
|
l.expirationBlock = 0;
|
||||||
usedTransactions[message] = true;
|
usedTransactions[message] = true;
|
||||||
|
|
||||||
|
if (msg.sender != l.relayerAddress) {
|
||||||
|
userRecord[_castAddrToKey(msg.sender)] += l
|
||||||
|
.relayerPremium;
|
||||||
|
userRecord[_castAddrToKey(l.relayerAddress)] += l
|
||||||
|
.amount;
|
||||||
|
} else {
|
||||||
|
userRecord[_castAddrToKey(msg.sender)] += (l
|
||||||
|
.relayerPremium + l.amount);
|
||||||
|
}
|
||||||
|
|
||||||
SafeTransferLib.safeTransfer(
|
SafeTransferLib.safeTransfer(
|
||||||
t,
|
t,
|
||||||
l.targetAddress,
|
l.buyerAddress,
|
||||||
totalAmount
|
totalAmount
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Method doesn't check for zero address.
|
||||||
if (l.relayerPremium != 0) {
|
if (l.relayerPremium != 0) {
|
||||||
|
if (_relayerTarget != l.relayerTarget) {
|
||||||
SafeTransferLib.safeTransfer(
|
SafeTransferLib.safeTransfer(
|
||||||
t,
|
t,
|
||||||
l.relayerAddress,
|
l.relayerTarget,
|
||||||
|
(l.relayerPremium >> 1)
|
||||||
|
);
|
||||||
|
SafeTransferLib.safeTransfer(
|
||||||
|
t,
|
||||||
|
_relayerTarget,
|
||||||
|
(l.relayerPremium >> 1)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
SafeTransferLib.safeTransfer(
|
||||||
|
t,
|
||||||
|
_relayerTarget,
|
||||||
l.relayerPremium
|
l.relayerPremium
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
emit LockReleased(
|
|
||||||
l.targetAddress,
|
|
||||||
lockID
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emit LockReleased(l.buyerAddress, lockID);
|
||||||
|
}
|
||||||
|
|
||||||
/// @notice Unlocks expired locks.
|
/// @notice Unlocks expired locks.
|
||||||
/// @dev Triggered in the callgraph by both `lock` and `withdraw` functions.
|
/// @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 This method can also have any public actor as its `tx.origin`.
|
||||||
|
/// @dev For each successfull unexpired lock recovered,
|
||||||
|
/// `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.
|
||||||
/// @dev Function sighash: 0x8e2749d6.
|
/// @dev Function sighash: 0x8e2749d6.
|
||||||
function unlockExpired(
|
function unlockExpired(bytes32[] calldata lockIDs)
|
||||||
bytes32[] calldata lockIDs
|
public
|
||||||
) public {
|
|
||||||
uint256 i;
|
|
||||||
uint256 locksSize =
|
|
||||||
lockIDs.length;
|
|
||||||
|
|
||||||
for (i; i < locksSize;)
|
|
||||||
{
|
{
|
||||||
|
uint256 i;
|
||||||
|
uint256 locksSize = lockIDs.length;
|
||||||
|
|
||||||
|
for (i; i < locksSize; ) {
|
||||||
DT.Lock storage l = mapLocks[lockIDs[i]];
|
DT.Lock storage l = mapLocks[lockIDs[i]];
|
||||||
|
|
||||||
_notExpired(l);
|
_notExpired(l);
|
||||||
|
|
||||||
mapDeposits[l.depositID].remaining
|
mapDeposits[l.depositID].remaining += l.amount;
|
||||||
+= l.amount;
|
|
||||||
l.amount = 0;
|
l.amount = 0;
|
||||||
|
|
||||||
emit LockReturned(
|
uint256 userKey =
|
||||||
l.targetAddress,
|
_castAddrToKey(l.relayerAddress);
|
||||||
lockIDs[i]
|
uint256 _newUserRecord =
|
||||||
);
|
(userRecord[userKey] >> 1);
|
||||||
|
|
||||||
|
if (_newUserRecord <= 100) {
|
||||||
|
userRecord[userKey] = 100;
|
||||||
|
} else {
|
||||||
|
userRecord[userKey] = _newUserRecord;
|
||||||
|
}
|
||||||
|
emit LockReturned(l.buyerAddress, lockIDs[i]);
|
||||||
|
|
||||||
unchecked {
|
unchecked {
|
||||||
++i;
|
++i;
|
||||||
@ -315,14 +379,8 @@ contract P2PIX is
|
|||||||
assembly {
|
assembly {
|
||||||
if lt(i, locksSize) {
|
if lt(i, locksSize) {
|
||||||
// LoopOverflow()
|
// LoopOverflow()
|
||||||
mstore(
|
mstore(0x00, 0xdfb035c9)
|
||||||
0x00,
|
revert(0x1c, 0x04)
|
||||||
0xdfb035c9
|
|
||||||
)
|
|
||||||
revert(
|
|
||||||
0x1c,
|
|
||||||
0x04
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -334,15 +392,11 @@ contract P2PIX is
|
|||||||
function withdraw(
|
function withdraw(
|
||||||
uint256 depositID,
|
uint256 depositID,
|
||||||
bytes32[] calldata expiredLocks
|
bytes32[] calldata expiredLocks
|
||||||
)
|
) public nonReentrant {
|
||||||
public
|
|
||||||
nonReentrant
|
|
||||||
{
|
|
||||||
_onlySeller(depositID);
|
_onlySeller(depositID);
|
||||||
unlockExpired(expiredLocks);
|
unlockExpired(expiredLocks);
|
||||||
|
|
||||||
DT.Deposit storage d =
|
DT.Deposit storage d = mapDeposits[depositID];
|
||||||
mapDeposits[depositID];
|
|
||||||
|
|
||||||
if (d.valid == true) {
|
if (d.valid == true) {
|
||||||
cancelDeposit(depositID);
|
cancelDeposit(depositID);
|
||||||
@ -355,34 +409,123 @@ contract P2PIX is
|
|||||||
d.remaining = 0;
|
d.remaining = 0;
|
||||||
|
|
||||||
// safeTransfer tokens to seller
|
// safeTransfer tokens to seller
|
||||||
SafeTransferLib.safeTransfer(
|
SafeTransferLib.safeTransfer(token, d.seller, amount);
|
||||||
token,
|
|
||||||
d.seller,
|
|
||||||
amount
|
|
||||||
);
|
|
||||||
|
|
||||||
emit DepositWithdrawn(
|
emit DepositWithdrawn(msg.sender, depositID, amount);
|
||||||
msg.sender,
|
}
|
||||||
depositID,
|
|
||||||
amount
|
function setRoot(address addr, bytes32 merkleroot)
|
||||||
);
|
public
|
||||||
|
{
|
||||||
|
if (addr == msg.sender) {
|
||||||
|
sellerAllowList[
|
||||||
|
_castAddrToKey(addr)
|
||||||
|
] = merkleroot;
|
||||||
|
} else revert OnlySeller();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ███ Owner Only █████████████████████████████████████████████████████████
|
/// ███ Owner Only █████████████████████████████████████████████████████████
|
||||||
|
|
||||||
/// @dev Contract's balance withdraw method.
|
/// @dev Contract's underlying balance withdraw method.
|
||||||
/// @dev Function sighash: 0x5fd8c710.
|
/// @dev Function sighash: 0x5fd8c710.
|
||||||
function withdrawBalance() external onlyOwner {
|
function withdrawBalance() external onlyOwner {
|
||||||
uint256 balance =
|
uint256 balance = address(this).balance;
|
||||||
address(this).balance;
|
SafeTransferLib.safeTransferETH(msg.sender, balance);
|
||||||
SafeTransferLib.safeTransferETH(
|
emit FundsWithdrawn(msg.sender, balance);
|
||||||
msg.sender,
|
}
|
||||||
balance
|
|
||||||
);
|
function setReputation(IReputation _reputation)
|
||||||
emit FundsWithdrawn(
|
public
|
||||||
msg.sender,
|
onlyOwner
|
||||||
balance
|
{
|
||||||
|
assembly {
|
||||||
|
sstore(reputation.slot, _reputation)
|
||||||
|
}
|
||||||
|
emit ReputationUpdated(address(_reputation));
|
||||||
|
}
|
||||||
|
|
||||||
|
function setDefaultLockBlocks(uint256 _blocks)
|
||||||
|
public
|
||||||
|
onlyOwner
|
||||||
|
{
|
||||||
|
assembly {
|
||||||
|
sstore(defaultLockBlocks.slot, _blocks)
|
||||||
|
}
|
||||||
|
emit LockBlocksUpdated(_blocks);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setValidSigners(address[] memory _validSigners)
|
||||||
|
public
|
||||||
|
onlyOwner
|
||||||
|
{
|
||||||
|
unchecked {
|
||||||
|
uint256 i;
|
||||||
|
uint256 len = _validSigners.length;
|
||||||
|
for (i; i < len; ) {
|
||||||
|
uint256 key = _castAddrToKey(
|
||||||
|
_validSigners[i]
|
||||||
);
|
);
|
||||||
|
validBacenSigners[key] = true;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
emit ValidSignersUpdated(_validSigners);
|
||||||
|
}
|
||||||
|
|
||||||
|
function tokenSettings(
|
||||||
|
address[] memory _tokens,
|
||||||
|
bool[] memory _states
|
||||||
|
) public onlyOwner {
|
||||||
|
/* Yul Impl */
|
||||||
|
assembly {
|
||||||
|
// first 32 bytes eq to array's length
|
||||||
|
let tLen := mload(_tokens)
|
||||||
|
if iszero(tLen) {
|
||||||
|
mstore(0x00, 0xdf957883)
|
||||||
|
revert(0x1c, 0x04)
|
||||||
|
}
|
||||||
|
if iszero(eq(tLen, mload(_states))) {
|
||||||
|
mstore(0x00, 0xff633a38)
|
||||||
|
revert(0x1c, 0x04)
|
||||||
|
}
|
||||||
|
let tLoc := add(_tokens, 0x20)
|
||||||
|
let sLoc := add(_states, 0x20)
|
||||||
|
for {
|
||||||
|
let end := add(tLoc, mul(tLen, 0x20))
|
||||||
|
} iszero(eq(tLoc, end)) {
|
||||||
|
tLoc := add(tLoc, 0x20)
|
||||||
|
sLoc := add(sLoc, 0x20)
|
||||||
|
} {
|
||||||
|
mstore(0x00, mload(tLoc))
|
||||||
|
mstore(0x20, allowedERC20s.slot)
|
||||||
|
let mapSlot := keccak256(0x00, 0x40)
|
||||||
|
sstore(mapSlot, mload(sLoc))
|
||||||
|
log3(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0x5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a,
|
||||||
|
mload(tLoc),
|
||||||
|
mload(sLoc)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Solidity Impl */
|
||||||
|
// uint256 tLen = _tokens.length;
|
||||||
|
// uint256 sLen = _states.length;
|
||||||
|
|
||||||
|
// if (tLen != sLen)
|
||||||
|
// revert LengthMismatch();
|
||||||
|
// if (tLen == 0)
|
||||||
|
// revert NoTokens();
|
||||||
|
|
||||||
|
// uint256 i;
|
||||||
|
// for (i; i > tLen;) {
|
||||||
|
// allowedERC20s[ERC20(_tokens[i])] = _states[i];
|
||||||
|
// emit AllowedERC20Updated(_tokens[i], _states[i]);
|
||||||
|
// unchecked {
|
||||||
|
// ++i;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ███ Helper FX ██████████████████████████████████████████████████████████
|
/// ███ Helper FX ██████████████████████████████████████████████████████████
|
||||||
@ -393,32 +536,21 @@ contract P2PIX is
|
|||||||
/// @notice Access control private view method that
|
/// @notice Access control private view method that
|
||||||
/// performs auth check on an deposit's seller.
|
/// performs auth check on an deposit's seller.
|
||||||
/// @dev Function sighash: 0x4125a4d9.
|
/// @dev Function sighash: 0x4125a4d9.
|
||||||
function _onlySeller(uint256 _depositID)
|
function _onlySeller(uint256 _depositID) private view {
|
||||||
private
|
if (mapDeposits[_depositID].seller != msg.sender)
|
||||||
view
|
revert OnlySeller();
|
||||||
{
|
|
||||||
if (
|
|
||||||
mapDeposits[_depositID].seller
|
|
||||||
!= msg.sender
|
|
||||||
) revert
|
|
||||||
OnlySeller();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @notice Private view auxiliar logic that reverts
|
/// @notice Private view auxiliar logic that reverts
|
||||||
/// on a not expired lock passed as argument of the function.
|
/// on a not expired lock passed as argument of the function.
|
||||||
/// @dev Called exclusively by the `unlockExpired` method.
|
/// @dev Called exclusively by the `unlockExpired` method.
|
||||||
/// @dev Function sighash: 0x74e2a0bb.
|
/// @dev Function sighash: 0x74e2a0bb.
|
||||||
function _notExpired(DT.Lock storage _l)
|
function _notExpired(DT.Lock storage _l) private view {
|
||||||
private
|
|
||||||
view
|
|
||||||
{
|
|
||||||
// Custom Error Solidity Impl
|
// Custom Error Solidity Impl
|
||||||
if
|
if (
|
||||||
(
|
|
||||||
_l.expirationBlock >= block.number ||
|
_l.expirationBlock >= block.number ||
|
||||||
_l.amount <= 0
|
_l.amount <= 0
|
||||||
) revert
|
) revert NotExpired();
|
||||||
NotExpired();
|
|
||||||
/*
|
/*
|
||||||
// Custom Error Yul Impl
|
// Custom Error Yul Impl
|
||||||
assembly {
|
assembly {
|
||||||
@ -454,11 +586,8 @@ contract P2PIX is
|
|||||||
returns (uint256 _depositID)
|
returns (uint256 _depositID)
|
||||||
{
|
{
|
||||||
(_depositID) = depositCount.current();
|
(_depositID) = depositCount.current();
|
||||||
if (
|
if (mapDeposits[_depositID].valid == true)
|
||||||
mapDeposits[_depositID].valid
|
revert DepositAlreadyExists();
|
||||||
== true
|
|
||||||
) revert
|
|
||||||
DepositAlreadyExists();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @notice Private view auxiliar logic that encodes/returns
|
/// @notice Private view auxiliar logic that encodes/returns
|
||||||
@ -470,19 +599,67 @@ contract P2PIX is
|
|||||||
function _encodeLockID(
|
function _encodeLockID(
|
||||||
uint256 _depositID,
|
uint256 _depositID,
|
||||||
uint256 _amount,
|
uint256 _amount,
|
||||||
address _targetAddress)
|
address _buyerAddress
|
||||||
private
|
) private view returns (bytes32 _lockID) {
|
||||||
view
|
|
||||||
returns (bytes32 _lockID)
|
|
||||||
{
|
|
||||||
_lockID = keccak256(
|
_lockID = keccak256(
|
||||||
abi.encodePacked(_depositID, _amount, _targetAddress)
|
abi.encodePacked(
|
||||||
|
_depositID,
|
||||||
|
_amount,
|
||||||
|
_buyerAddress
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
if (mapLocks[_lockID].expirationBlock >= block.number)
|
||||||
|
revert NotExpired();
|
||||||
|
}
|
||||||
|
|
||||||
|
function merkleVerify(
|
||||||
|
bytes32[] calldata _merkleProof,
|
||||||
|
bytes32 root,
|
||||||
|
address _addr
|
||||||
|
) private pure {
|
||||||
if (
|
if (
|
||||||
mapLocks[_lockID].expirationBlock
|
!Merkle.verify(
|
||||||
>= block.number
|
_merkleProof,
|
||||||
) revert
|
root,
|
||||||
NotExpired();
|
bytes32(uint256(uint160(_addr)))
|
||||||
|
)
|
||||||
|
) revert AddressDenied();
|
||||||
|
}
|
||||||
|
|
||||||
|
function _limiter(uint256 _userCredit)
|
||||||
|
internal
|
||||||
|
view
|
||||||
|
returns (uint256 _spendLimit)
|
||||||
|
{
|
||||||
|
// enconde the fx sighash and args
|
||||||
|
bytes memory encodedParams = abi.encodeWithSelector(
|
||||||
|
IReputation.limiter.selector,
|
||||||
|
_userCredit
|
||||||
|
);
|
||||||
|
// cast the uninitialized return values to memory
|
||||||
|
bool success;
|
||||||
|
uint256 returnSize;
|
||||||
|
uint256 returnValue;
|
||||||
|
// perform staticcall from the stack w yul
|
||||||
|
assembly {
|
||||||
|
success := staticcall(
|
||||||
|
// gas
|
||||||
|
30000,
|
||||||
|
// address
|
||||||
|
sload(reputation.slot),
|
||||||
|
// argsOffset
|
||||||
|
add(encodedParams, 0x20),
|
||||||
|
// argsSize
|
||||||
|
mload(encodedParams),
|
||||||
|
// retOffset
|
||||||
|
0x00,
|
||||||
|
// retSize
|
||||||
|
0x20
|
||||||
|
)
|
||||||
|
returnSize := returndatasize()
|
||||||
|
returnValue := mload(0x00)
|
||||||
|
_spendLimit := returnValue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @notice Public method that handles `address`
|
/// @notice Public method that handles `address`
|
||||||
@ -493,10 +670,6 @@ contract P2PIX is
|
|||||||
pure
|
pure
|
||||||
returns (uint256 _key)
|
returns (uint256 _key)
|
||||||
{
|
{
|
||||||
_key = uint256(
|
_key = uint256(uint160(address(_addr))) << 12;
|
||||||
uint160(
|
|
||||||
address(
|
|
||||||
_addr
|
|
||||||
))) << 12;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,23 @@
|
|||||||
|
|
||||||
## Events
|
## Events
|
||||||
|
|
||||||
|
### AllowedERC20Updated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event AllowedERC20Updated(address indexed token, bool indexed state)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| token `indexed` | address | undefined |
|
||||||
|
| state `indexed` | bool | undefined |
|
||||||
|
|
||||||
### DepositAdded
|
### DepositAdded
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -101,6 +118,22 @@ event LockAdded(address indexed buyer, bytes32 indexed lockID, uint256 depositID
|
|||||||
| depositID | uint256 | undefined |
|
| depositID | uint256 | undefined |
|
||||||
| amount | uint256 | undefined |
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
### LockBlocksUpdated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event LockBlocksUpdated(uint256 blocks)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| blocks | uint256 | undefined |
|
||||||
|
|
||||||
### LockReleased
|
### LockReleased
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -135,10 +168,53 @@ event LockReturned(address indexed buyer, bytes32 lockId)
|
|||||||
| buyer `indexed` | address | undefined |
|
| buyer `indexed` | address | undefined |
|
||||||
| lockId | bytes32 | 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
|
## Errors
|
||||||
|
|
||||||
|
### AddressDenied
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error AddressDenied()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*Address doesn't exist in a MerkleTree.Address not allowed as relayer.0x3b8474be*
|
||||||
|
|
||||||
|
|
||||||
### AlreadyReleased
|
### AlreadyReleased
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -150,6 +226,17 @@ error AlreadyReleased()
|
|||||||
*Lock already released or returned.0x63b4904e*
|
*Lock already released or returned.0x63b4904e*
|
||||||
|
|
||||||
|
|
||||||
|
### AmountNotAllowed
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error AmountNotAllowed()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*Wished amount to be locked exceeds the limit allowed.0x1c18f846*
|
||||||
|
|
||||||
|
|
||||||
### DepositAlreadyExists
|
### DepositAlreadyExists
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -183,6 +270,17 @@ error InvalidSigner()
|
|||||||
*Signer is not a valid signer.0x815e1d64*
|
*Signer is not a valid signer.0x815e1d64*
|
||||||
|
|
||||||
|
|
||||||
|
### LengthMismatch
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error LengthMismatch()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*Arrays' length don't match.0xff633a38*
|
||||||
|
|
||||||
|
|
||||||
### LoopOverflow
|
### LoopOverflow
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -194,6 +292,17 @@ error LoopOverflow()
|
|||||||
*Loop bounds have overflowed.0xdfb035c9*
|
*Loop bounds have overflowed.0xdfb035c9*
|
||||||
|
|
||||||
|
|
||||||
|
### NoTokens
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error NoTokens()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*No tokens array provided as argument.0xdf957883*
|
||||||
|
|
||||||
|
|
||||||
### NotEnoughTokens
|
### NotEnoughTokens
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -224,7 +333,18 @@ error OnlySeller()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
*Only seller could call this function.0x85d1f726*
|
*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
|
### TxAlreadyUsed
|
||||||
|
319
docs/P2PIX.md
319
docs/P2PIX.md
@ -32,6 +32,28 @@ Public method that handles `address` to `uint256` safe type casting.
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| _key | uint256 | undefined |
|
| _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
|
### cancelDeposit
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -68,7 +90,7 @@ function defaultLockBlocks() external view returns (uint256)
|
|||||||
### deposit
|
### deposit
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
function deposit(address _token, uint256 _amount, string _pixTarget) external nonpayable returns (uint256 depositID)
|
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.
|
Creates a deposit order based on a seller's offer of an amount of ERC20 tokens.
|
||||||
@ -82,6 +104,7 @@ Creates a deposit order based on a seller's offer of an amount of ERC20 tok
|
|||||||
| _token | address | undefined |
|
| _token | address | undefined |
|
||||||
| _amount | uint256 | undefined |
|
| _amount | uint256 | undefined |
|
||||||
| _pixTarget | string | Pix key destination provided by the offer's seller. |
|
| _pixTarget | string | Pix key destination provided by the offer's seller. |
|
||||||
|
| allowlistRoot | bytes32 | Optional allow list merkleRoot update `bytes32` value. |
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@ -95,7 +118,7 @@ Creates a deposit order based on a seller's offer of an amount of ERC20 tok
|
|||||||
function depositCount() external view returns (uint256 _val)
|
function depositCount() external view returns (uint256 _val)
|
||||||
```
|
```
|
||||||
|
|
||||||
███ Storage ████████████████████████████████████████████████████████████
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -109,22 +132,23 @@ function depositCount() external view returns (uint256 _val)
|
|||||||
### lock
|
### lock
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
function lock(uint256 _depositID, address _targetAddress, address _relayerAddress, uint256 _relayerPremium, uint256 _amount, bytes32[] expiredLocks) external nonpayable returns (bytes32 lockID)
|
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.
|
Public method designed to lock an remaining amount of the deposit order of a seller.
|
||||||
|
|
||||||
*This method can be performed by either an order's seller, relayer, or buyer.There can only exist a lock per each `_amount` partitioned from the total `remaining` value.Locks can only be performed in valid orders.Function sighash: 0x03aaf306.*
|
*This method can be performed either by: - An user allowed via the seller'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
|
#### Parameters
|
||||||
|
|
||||||
| Name | Type | Description |
|
| Name | Type | Description |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| _depositID | uint256 | undefined |
|
| _depositID | uint256 | undefined |
|
||||||
| _targetAddress | address | The address of the buyer of a `_depositID`. |
|
| _buyerAddress | address | The address of the buyer of a `_depositID`. |
|
||||||
| _relayerAddress | address | The relayer's address. |
|
| _relayerTarget | address | Target address entitled to the `relayerPremim`. |
|
||||||
| _relayerPremium | uint256 | The refund/premium owed to a relayer. |
|
| _relayerPremium | uint256 | The refund/premium owed to a relayer. |
|
||||||
| _amount | uint256 | undefined |
|
| _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. |
|
| expiredLocks | bytes32[] | An array of `bytes32` identifiers to be provided so to unexpire locks using this transaction gas push. |
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
@ -162,7 +186,7 @@ function mapDeposits(uint256) external view returns (uint256 remaining, string p
|
|||||||
### mapLocks
|
### mapLocks
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
function mapLocks(bytes32) external view returns (uint256 depositID, uint256 relayerPremium, uint256 amount, uint256 expirationBlock, address targetAddress, address relayerAddress)
|
function mapLocks(bytes32) external view returns (uint256 depositID, uint256 relayerPremium, uint256 amount, uint256 expirationBlock, address buyerAddress, address relayerTarget, address relayerAddress)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -183,7 +207,8 @@ function mapLocks(bytes32) external view returns (uint256 depositID, uint256 rel
|
|||||||
| relayerPremium | uint256 | undefined |
|
| relayerPremium | uint256 | undefined |
|
||||||
| amount | uint256 | undefined |
|
| amount | uint256 | undefined |
|
||||||
| expirationBlock | uint256 | undefined |
|
| expirationBlock | uint256 | undefined |
|
||||||
| targetAddress | address | undefined |
|
| buyerAddress | address | undefined |
|
||||||
|
| relayerTarget | address | undefined |
|
||||||
| relayerAddress | address | undefined |
|
| relayerAddress | address | undefined |
|
||||||
|
|
||||||
### owner
|
### owner
|
||||||
@ -206,23 +231,79 @@ function owner() external view returns (address)
|
|||||||
### release
|
### release
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
function release(bytes32 lockID, uint256 pixTimestamp, bytes32 r, bytes32 s, uint8 v) external nonpayable
|
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.*
|
||||||
*This method can be called by either an order's seller, relayer, or buyer.Function sighash: 0x4e1389ed.*
|
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
| Name | Type | Description |
|
| Name | Type | Description |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| lockID | bytes32 | undefined |
|
| lockID | bytes32 | undefined |
|
||||||
|
| _relayerTarget | address | Target address entitled to the `relayerPremim`. |
|
||||||
| pixTimestamp | uint256 | undefined |
|
| pixTimestamp | uint256 | undefined |
|
||||||
| r | bytes32 | undefined |
|
| r | bytes32 | undefined |
|
||||||
| s | bytes32 | undefined |
|
| s | bytes32 | undefined |
|
||||||
| v | uint8 | 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
|
### setOwner
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -239,6 +320,72 @@ function setOwner(address newOwner) external nonpayable
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| newOwner | address | undefined |
|
| 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
|
### unlockExpired
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -247,7 +394,7 @@ function unlockExpired(bytes32[] lockIDs) external nonpayable
|
|||||||
|
|
||||||
Unlocks expired locks.
|
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`.Function sighash: 0x8e2749d6.*
|
*Triggered in the callgraph by both `lock` and `withdraw` functions.This method can also have any public actor as its `tx.origin`.For each successfull unexpired lock recovered, `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.Function sighash: 0x8e2749d6.*
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
@ -255,6 +402,28 @@ Unlocks expired locks.
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| lockIDs | bytes32[] | undefined |
|
| 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
|
### validBacenSigners
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -302,13 +471,30 @@ function withdrawBalance() external nonpayable
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
*Contract's balance withdraw method. Function sighash: 0x5fd8c710.*
|
*Contract's underlying balance withdraw method.Function sighash: 0x5fd8c710.*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Events
|
## Events
|
||||||
|
|
||||||
|
### AllowedERC20Updated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event AllowedERC20Updated(address indexed token, bool indexed state)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| token `indexed` | address | undefined |
|
||||||
|
| state `indexed` | bool | undefined |
|
||||||
|
|
||||||
### DepositAdded
|
### DepositAdded
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -399,6 +585,22 @@ event LockAdded(address indexed buyer, bytes32 indexed lockID, uint256 depositID
|
|||||||
| depositID | uint256 | undefined |
|
| depositID | uint256 | undefined |
|
||||||
| amount | uint256 | undefined |
|
| amount | uint256 | undefined |
|
||||||
|
|
||||||
|
### LockBlocksUpdated
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
event LockBlocksUpdated(uint256 blocks)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| blocks | uint256 | undefined |
|
||||||
|
|
||||||
### LockReleased
|
### LockReleased
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -450,10 +652,53 @@ event OwnerUpdated(address indexed user, address indexed newOwner)
|
|||||||
| user `indexed` | address | undefined |
|
| user `indexed` | address | undefined |
|
||||||
| newOwner `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
|
## Errors
|
||||||
|
|
||||||
|
### AddressDenied
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error AddressDenied()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*Address doesn't exist in a MerkleTree.Address not allowed as relayer.0x3b8474be*
|
||||||
|
|
||||||
|
|
||||||
### AlreadyReleased
|
### AlreadyReleased
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -465,6 +710,17 @@ error AlreadyReleased()
|
|||||||
*Lock already released or returned.0x63b4904e*
|
*Lock already released or returned.0x63b4904e*
|
||||||
|
|
||||||
|
|
||||||
|
### AmountNotAllowed
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error AmountNotAllowed()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*Wished amount to be locked exceeds the limit allowed.0x1c18f846*
|
||||||
|
|
||||||
|
|
||||||
### DepositAlreadyExists
|
### DepositAlreadyExists
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -498,6 +754,17 @@ error InvalidSigner()
|
|||||||
*Signer is not a valid signer.0x815e1d64*
|
*Signer is not a valid signer.0x815e1d64*
|
||||||
|
|
||||||
|
|
||||||
|
### LengthMismatch
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error LengthMismatch()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*Arrays' length don't match.0xff633a38*
|
||||||
|
|
||||||
|
|
||||||
### LoopOverflow
|
### LoopOverflow
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -509,6 +776,17 @@ error LoopOverflow()
|
|||||||
*Loop bounds have overflowed.0xdfb035c9*
|
*Loop bounds have overflowed.0xdfb035c9*
|
||||||
|
|
||||||
|
|
||||||
|
### NoTokens
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error NoTokens()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*No tokens array provided as argument.0xdf957883*
|
||||||
|
|
||||||
|
|
||||||
### NotEnoughTokens
|
### NotEnoughTokens
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
@ -539,7 +817,7 @@ error OnlySeller()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
*Only seller could call this function.0x85d1f726*
|
*Only seller could call this function.`msg.sender` and the seller differ.0x85d1f726*
|
||||||
|
|
||||||
|
|
||||||
### Reentrancy
|
### Reentrancy
|
||||||
@ -553,6 +831,17 @@ error Reentrancy()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### TokenDenied
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
error TokenDenied()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*Token address not allowed to be deposited.0x1578328e*
|
||||||
|
|
||||||
|
|
||||||
### TxAlreadyUsed
|
### TxAlreadyUsed
|
||||||
|
|
||||||
```solidity
|
```solidity
|
||||||
|
124
docs/Reputation.md
Normal file
124
docs/Reputation.md
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
# Reputation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Methods
|
||||||
|
|
||||||
|
### limiter
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| _userCredit | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| _spendLimit | uint256 | undefined |
|
||||||
|
|
||||||
|
### magicValue
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function magicValue() external view returns (uint256)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*Denominator's constant operand for the `limiter` fx. *
|
||||||
|
|
||||||
|
|
||||||
|
#### 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 |
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 53 KiB |
37
docs/lib/interfaces/IReputation.md
Normal file
37
docs/lib/interfaces/IReputation.md
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# IReputation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Methods
|
||||||
|
|
||||||
|
### limiter
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function limiter(uint256 _userCredit) external pure returns (uint256 _spendLimit)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| _userCredit | uint256 | undefined |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| _spendLimit | uint256 | undefined |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
12
docs/lib/utils/FixedPointMathLib.md
Normal file
12
docs/lib/utils/FixedPointMathLib.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# FixedPointMathLib
|
||||||
|
|
||||||
|
*Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/FixedPointMathLib.sol)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Arithmetic library with operations for fixed-point numbers.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
12
docs/lib/utils/MerkleProofLib.md
Normal file
12
docs/lib/utils/MerkleProofLib.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# MerkleProofLib
|
||||||
|
|
||||||
|
*Solady (https://github.com/vectorized/solady/blob/main/src/utils/MerkleProofLib.sol)Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/MerkleProofLib.sol)Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol)*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Gas optimized verification of proof of inclusion for a leaf in a Merkle tree.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -16,24 +16,44 @@ export interface EventAndErrorsInterface extends utils.Interface {
|
|||||||
functions: {};
|
functions: {};
|
||||||
|
|
||||||
events: {
|
events: {
|
||||||
|
"AllowedERC20Updated(address,bool)": EventFragment;
|
||||||
"DepositAdded(address,uint256,address,uint256)": EventFragment;
|
"DepositAdded(address,uint256,address,uint256)": EventFragment;
|
||||||
"DepositClosed(address,uint256)": EventFragment;
|
"DepositClosed(address,uint256)": EventFragment;
|
||||||
"DepositWithdrawn(address,uint256,uint256)": EventFragment;
|
"DepositWithdrawn(address,uint256,uint256)": EventFragment;
|
||||||
"FundsWithdrawn(address,uint256)": EventFragment;
|
"FundsWithdrawn(address,uint256)": EventFragment;
|
||||||
"LockAdded(address,bytes32,uint256,uint256)": EventFragment;
|
"LockAdded(address,bytes32,uint256,uint256)": EventFragment;
|
||||||
|
"LockBlocksUpdated(uint256)": EventFragment;
|
||||||
"LockReleased(address,bytes32)": EventFragment;
|
"LockReleased(address,bytes32)": EventFragment;
|
||||||
"LockReturned(address,bytes32)": EventFragment;
|
"LockReturned(address,bytes32)": EventFragment;
|
||||||
|
"ReputationUpdated(address)": EventFragment;
|
||||||
|
"ValidSignersUpdated(address[])": EventFragment;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
getEvent(nameOrSignatureOrTopic: "AllowedERC20Updated"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "DepositAdded"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "DepositAdded"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "DepositClosed"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "DepositClosed"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "DepositWithdrawn"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "DepositWithdrawn"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "FundsWithdrawn"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "FundsWithdrawn"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "LockAdded"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "LockAdded"): EventFragment;
|
||||||
|
getEvent(nameOrSignatureOrTopic: "LockBlocksUpdated"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "LockReleased"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "LockReleased"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "LockReturned"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "LockReturned"): EventFragment;
|
||||||
|
getEvent(nameOrSignatureOrTopic: "ReputationUpdated"): EventFragment;
|
||||||
|
getEvent(nameOrSignatureOrTopic: "ValidSignersUpdated"): EventFragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface AllowedERC20UpdatedEventObject {
|
||||||
|
token: string;
|
||||||
|
state: boolean;
|
||||||
|
}
|
||||||
|
export type AllowedERC20UpdatedEvent = TypedEvent<
|
||||||
|
[string, boolean],
|
||||||
|
AllowedERC20UpdatedEventObject
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type AllowedERC20UpdatedEventFilter =
|
||||||
|
TypedEventFilter<AllowedERC20UpdatedEvent>;
|
||||||
|
|
||||||
export interface DepositAddedEventObject {
|
export interface DepositAddedEventObject {
|
||||||
seller: string;
|
seller: string;
|
||||||
depositID: BigNumber;
|
depositID: BigNumber;
|
||||||
@ -95,6 +115,17 @@ export type LockAddedEvent = TypedEvent<
|
|||||||
|
|
||||||
export type LockAddedEventFilter = TypedEventFilter<LockAddedEvent>;
|
export type LockAddedEventFilter = TypedEventFilter<LockAddedEvent>;
|
||||||
|
|
||||||
|
export interface LockBlocksUpdatedEventObject {
|
||||||
|
blocks: BigNumber;
|
||||||
|
}
|
||||||
|
export type LockBlocksUpdatedEvent = TypedEvent<
|
||||||
|
[BigNumber],
|
||||||
|
LockBlocksUpdatedEventObject
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type LockBlocksUpdatedEventFilter =
|
||||||
|
TypedEventFilter<LockBlocksUpdatedEvent>;
|
||||||
|
|
||||||
export interface LockReleasedEventObject {
|
export interface LockReleasedEventObject {
|
||||||
buyer: string;
|
buyer: string;
|
||||||
lockId: string;
|
lockId: string;
|
||||||
@ -117,6 +148,28 @@ export type LockReturnedEvent = TypedEvent<
|
|||||||
|
|
||||||
export type LockReturnedEventFilter = TypedEventFilter<LockReturnedEvent>;
|
export type LockReturnedEventFilter = TypedEventFilter<LockReturnedEvent>;
|
||||||
|
|
||||||
|
export interface ReputationUpdatedEventObject {
|
||||||
|
reputation: string;
|
||||||
|
}
|
||||||
|
export type ReputationUpdatedEvent = TypedEvent<
|
||||||
|
[string],
|
||||||
|
ReputationUpdatedEventObject
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type ReputationUpdatedEventFilter =
|
||||||
|
TypedEventFilter<ReputationUpdatedEvent>;
|
||||||
|
|
||||||
|
export interface ValidSignersUpdatedEventObject {
|
||||||
|
signers: string[];
|
||||||
|
}
|
||||||
|
export type ValidSignersUpdatedEvent = TypedEvent<
|
||||||
|
[string[]],
|
||||||
|
ValidSignersUpdatedEventObject
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type ValidSignersUpdatedEventFilter =
|
||||||
|
TypedEventFilter<ValidSignersUpdatedEvent>;
|
||||||
|
|
||||||
export interface EventAndErrors extends BaseContract {
|
export interface EventAndErrors extends BaseContract {
|
||||||
connect(signerOrProvider: Signer | Provider | string): this;
|
connect(signerOrProvider: Signer | Provider | string): this;
|
||||||
attach(addressOrName: string): this;
|
attach(addressOrName: string): this;
|
||||||
@ -148,6 +201,15 @@ export interface EventAndErrors extends BaseContract {
|
|||||||
callStatic: {};
|
callStatic: {};
|
||||||
|
|
||||||
filters: {
|
filters: {
|
||||||
|
"AllowedERC20Updated(address,bool)"(
|
||||||
|
token?: PromiseOrValue<string> | null,
|
||||||
|
state?: PromiseOrValue<boolean> | null
|
||||||
|
): AllowedERC20UpdatedEventFilter;
|
||||||
|
AllowedERC20Updated(
|
||||||
|
token?: PromiseOrValue<string> | null,
|
||||||
|
state?: PromiseOrValue<boolean> | null
|
||||||
|
): AllowedERC20UpdatedEventFilter;
|
||||||
|
|
||||||
"DepositAdded(address,uint256,address,uint256)"(
|
"DepositAdded(address,uint256,address,uint256)"(
|
||||||
seller?: PromiseOrValue<string> | null,
|
seller?: PromiseOrValue<string> | null,
|
||||||
depositID?: null,
|
depositID?: null,
|
||||||
@ -200,6 +262,9 @@ export interface EventAndErrors extends BaseContract {
|
|||||||
amount?: null
|
amount?: null
|
||||||
): LockAddedEventFilter;
|
): LockAddedEventFilter;
|
||||||
|
|
||||||
|
"LockBlocksUpdated(uint256)"(blocks?: null): LockBlocksUpdatedEventFilter;
|
||||||
|
LockBlocksUpdated(blocks?: null): LockBlocksUpdatedEventFilter;
|
||||||
|
|
||||||
"LockReleased(address,bytes32)"(
|
"LockReleased(address,bytes32)"(
|
||||||
buyer?: PromiseOrValue<string> | null,
|
buyer?: PromiseOrValue<string> | null,
|
||||||
lockId?: null
|
lockId?: null
|
||||||
@ -217,6 +282,16 @@ export interface EventAndErrors extends BaseContract {
|
|||||||
buyer?: PromiseOrValue<string> | null,
|
buyer?: PromiseOrValue<string> | null,
|
||||||
lockId?: null
|
lockId?: null
|
||||||
): LockReturnedEventFilter;
|
): LockReturnedEventFilter;
|
||||||
|
|
||||||
|
"ReputationUpdated(address)"(
|
||||||
|
reputation?: null
|
||||||
|
): ReputationUpdatedEventFilter;
|
||||||
|
ReputationUpdated(reputation?: null): ReputationUpdatedEventFilter;
|
||||||
|
|
||||||
|
"ValidSignersUpdated(address[])"(
|
||||||
|
signers?: null
|
||||||
|
): ValidSignersUpdatedEventFilter;
|
||||||
|
ValidSignersUpdated(signers?: null): ValidSignersUpdatedEventFilter;
|
||||||
};
|
};
|
||||||
|
|
||||||
estimateGas: {};
|
estimateGas: {};
|
||||||
|
211
src/types/Reputation.ts
Normal file
211
src/types/Reputation.ts
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
/* Autogenerated file. Do not edit manually. */
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
import type {
|
||||||
|
BaseContract,
|
||||||
|
BigNumber,
|
||||||
|
BigNumberish,
|
||||||
|
BytesLike,
|
||||||
|
CallOverrides,
|
||||||
|
ContractTransaction,
|
||||||
|
Overrides,
|
||||||
|
PopulatedTransaction,
|
||||||
|
Signer,
|
||||||
|
utils,
|
||||||
|
} from "ethers";
|
||||||
|
import type {
|
||||||
|
FunctionFragment,
|
||||||
|
Result,
|
||||||
|
EventFragment,
|
||||||
|
} from "@ethersproject/abi";
|
||||||
|
import type { Listener, Provider } from "@ethersproject/providers";
|
||||||
|
import type {
|
||||||
|
TypedEventFilter,
|
||||||
|
TypedEvent,
|
||||||
|
TypedListener,
|
||||||
|
OnEvent,
|
||||||
|
PromiseOrValue,
|
||||||
|
} from "./common";
|
||||||
|
|
||||||
|
export interface ReputationInterface extends utils.Interface {
|
||||||
|
functions: {
|
||||||
|
"limiter(uint256)": FunctionFragment;
|
||||||
|
"magicValue()": FunctionFragment;
|
||||||
|
"maxLimit()": FunctionFragment;
|
||||||
|
"owner()": FunctionFragment;
|
||||||
|
"setOwner(address)": FunctionFragment;
|
||||||
|
};
|
||||||
|
|
||||||
|
getFunction(
|
||||||
|
nameOrSignatureOrTopic:
|
||||||
|
| "limiter"
|
||||||
|
| "magicValue"
|
||||||
|
| "maxLimit"
|
||||||
|
| "owner"
|
||||||
|
| "setOwner"
|
||||||
|
): FunctionFragment;
|
||||||
|
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "limiter",
|
||||||
|
values: [PromiseOrValue<BigNumberish>]
|
||||||
|
): string;
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "magicValue",
|
||||||
|
values?: undefined
|
||||||
|
): string;
|
||||||
|
encodeFunctionData(functionFragment: "maxLimit", values?: undefined): string;
|
||||||
|
encodeFunctionData(functionFragment: "owner", values?: undefined): string;
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "setOwner",
|
||||||
|
values: [PromiseOrValue<string>]
|
||||||
|
): string;
|
||||||
|
|
||||||
|
decodeFunctionResult(functionFragment: "limiter", data: BytesLike): Result;
|
||||||
|
decodeFunctionResult(functionFragment: "magicValue", data: BytesLike): Result;
|
||||||
|
decodeFunctionResult(functionFragment: "maxLimit", data: BytesLike): Result;
|
||||||
|
decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
|
||||||
|
decodeFunctionResult(functionFragment: "setOwner", data: BytesLike): Result;
|
||||||
|
|
||||||
|
events: {
|
||||||
|
"OwnerUpdated(address,address)": EventFragment;
|
||||||
|
};
|
||||||
|
|
||||||
|
getEvent(nameOrSignatureOrTopic: "OwnerUpdated"): EventFragment;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OwnerUpdatedEventObject {
|
||||||
|
user: string;
|
||||||
|
newOwner: string;
|
||||||
|
}
|
||||||
|
export type OwnerUpdatedEvent = TypedEvent<
|
||||||
|
[string, string],
|
||||||
|
OwnerUpdatedEventObject
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type OwnerUpdatedEventFilter = TypedEventFilter<OwnerUpdatedEvent>;
|
||||||
|
|
||||||
|
export interface Reputation extends BaseContract {
|
||||||
|
connect(signerOrProvider: Signer | Provider | string): this;
|
||||||
|
attach(addressOrName: string): this;
|
||||||
|
deployed(): Promise<this>;
|
||||||
|
|
||||||
|
interface: ReputationInterface;
|
||||||
|
|
||||||
|
queryFilter<TEvent extends TypedEvent>(
|
||||||
|
event: TypedEventFilter<TEvent>,
|
||||||
|
fromBlockOrBlockhash?: string | number | undefined,
|
||||||
|
toBlock?: string | number | undefined
|
||||||
|
): Promise<Array<TEvent>>;
|
||||||
|
|
||||||
|
listeners<TEvent extends TypedEvent>(
|
||||||
|
eventFilter?: TypedEventFilter<TEvent>
|
||||||
|
): Array<TypedListener<TEvent>>;
|
||||||
|
listeners(eventName?: string): Array<Listener>;
|
||||||
|
removeAllListeners<TEvent extends TypedEvent>(
|
||||||
|
eventFilter: TypedEventFilter<TEvent>
|
||||||
|
): this;
|
||||||
|
removeAllListeners(eventName?: string): this;
|
||||||
|
off: OnEvent<this>;
|
||||||
|
on: OnEvent<this>;
|
||||||
|
once: OnEvent<this>;
|
||||||
|
removeListener: OnEvent<this>;
|
||||||
|
|
||||||
|
functions: {
|
||||||
|
limiter(
|
||||||
|
_userCredit: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<[BigNumber] & { _spendLimit: BigNumber }>;
|
||||||
|
|
||||||
|
magicValue(overrides?: CallOverrides): Promise<[BigNumber]>;
|
||||||
|
|
||||||
|
maxLimit(overrides?: CallOverrides): Promise<[BigNumber]>;
|
||||||
|
|
||||||
|
owner(overrides?: CallOverrides): Promise<[string]>;
|
||||||
|
|
||||||
|
setOwner(
|
||||||
|
newOwner: PromiseOrValue<string>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<ContractTransaction>;
|
||||||
|
};
|
||||||
|
|
||||||
|
limiter(
|
||||||
|
_userCredit: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
magicValue(overrides?: CallOverrides): Promise<BigNumber>;
|
||||||
|
|
||||||
|
maxLimit(overrides?: CallOverrides): Promise<BigNumber>;
|
||||||
|
|
||||||
|
owner(overrides?: CallOverrides): Promise<string>;
|
||||||
|
|
||||||
|
setOwner(
|
||||||
|
newOwner: PromiseOrValue<string>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
callStatic: {
|
||||||
|
limiter(
|
||||||
|
_userCredit: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
magicValue(overrides?: CallOverrides): Promise<BigNumber>;
|
||||||
|
|
||||||
|
maxLimit(overrides?: CallOverrides): Promise<BigNumber>;
|
||||||
|
|
||||||
|
owner(overrides?: CallOverrides): Promise<string>;
|
||||||
|
|
||||||
|
setOwner(
|
||||||
|
newOwner: PromiseOrValue<string>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<void>;
|
||||||
|
};
|
||||||
|
|
||||||
|
filters: {
|
||||||
|
"OwnerUpdated(address,address)"(
|
||||||
|
user?: PromiseOrValue<string> | null,
|
||||||
|
newOwner?: PromiseOrValue<string> | null
|
||||||
|
): OwnerUpdatedEventFilter;
|
||||||
|
OwnerUpdated(
|
||||||
|
user?: PromiseOrValue<string> | null,
|
||||||
|
newOwner?: PromiseOrValue<string> | null
|
||||||
|
): OwnerUpdatedEventFilter;
|
||||||
|
};
|
||||||
|
|
||||||
|
estimateGas: {
|
||||||
|
limiter(
|
||||||
|
_userCredit: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
magicValue(overrides?: CallOverrides): Promise<BigNumber>;
|
||||||
|
|
||||||
|
maxLimit(overrides?: CallOverrides): Promise<BigNumber>;
|
||||||
|
|
||||||
|
owner(overrides?: CallOverrides): Promise<BigNumber>;
|
||||||
|
|
||||||
|
setOwner(
|
||||||
|
newOwner: PromiseOrValue<string>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
};
|
||||||
|
|
||||||
|
populateTransaction: {
|
||||||
|
limiter(
|
||||||
|
_userCredit: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
magicValue(overrides?: CallOverrides): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
maxLimit(overrides?: CallOverrides): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
setOwner(
|
||||||
|
newOwner: PromiseOrValue<string>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<PopulatedTransaction>;
|
||||||
|
};
|
||||||
|
}
|
@ -10,11 +10,21 @@ import type {
|
|||||||
} from "../EventAndErrors";
|
} from "../EventAndErrors";
|
||||||
|
|
||||||
const _abi = [
|
const _abi = [
|
||||||
|
{
|
||||||
|
inputs: [],
|
||||||
|
name: "AddressDenied",
|
||||||
|
type: "error",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
inputs: [],
|
inputs: [],
|
||||||
name: "AlreadyReleased",
|
name: "AlreadyReleased",
|
||||||
type: "error",
|
type: "error",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
inputs: [],
|
||||||
|
name: "AmountNotAllowed",
|
||||||
|
type: "error",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
inputs: [],
|
inputs: [],
|
||||||
name: "DepositAlreadyExists",
|
name: "DepositAlreadyExists",
|
||||||
@ -30,11 +40,21 @@ const _abi = [
|
|||||||
name: "InvalidSigner",
|
name: "InvalidSigner",
|
||||||
type: "error",
|
type: "error",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
inputs: [],
|
||||||
|
name: "LengthMismatch",
|
||||||
|
type: "error",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
inputs: [],
|
inputs: [],
|
||||||
name: "LoopOverflow",
|
name: "LoopOverflow",
|
||||||
type: "error",
|
type: "error",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
inputs: [],
|
||||||
|
name: "NoTokens",
|
||||||
|
type: "error",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
inputs: [],
|
inputs: [],
|
||||||
name: "NotEnoughTokens",
|
name: "NotEnoughTokens",
|
||||||
@ -50,11 +70,35 @@ const _abi = [
|
|||||||
name: "OnlySeller",
|
name: "OnlySeller",
|
||||||
type: "error",
|
type: "error",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
inputs: [],
|
||||||
|
name: "TokenDenied",
|
||||||
|
type: "error",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
inputs: [],
|
inputs: [],
|
||||||
name: "TxAlreadyUsed",
|
name: "TxAlreadyUsed",
|
||||||
type: "error",
|
type: "error",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
anonymous: false,
|
||||||
|
inputs: [
|
||||||
|
{
|
||||||
|
indexed: true,
|
||||||
|
internalType: "address",
|
||||||
|
name: "token",
|
||||||
|
type: "address",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
indexed: true,
|
||||||
|
internalType: "bool",
|
||||||
|
name: "state",
|
||||||
|
type: "bool",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "AllowedERC20Updated",
|
||||||
|
type: "event",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
anonymous: false,
|
anonymous: false,
|
||||||
inputs: [
|
inputs: [
|
||||||
@ -180,6 +224,19 @@ const _abi = [
|
|||||||
name: "LockAdded",
|
name: "LockAdded",
|
||||||
type: "event",
|
type: "event",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
anonymous: false,
|
||||||
|
inputs: [
|
||||||
|
{
|
||||||
|
indexed: false,
|
||||||
|
internalType: "uint256",
|
||||||
|
name: "blocks",
|
||||||
|
type: "uint256",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "LockBlocksUpdated",
|
||||||
|
type: "event",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
anonymous: false,
|
anonymous: false,
|
||||||
inputs: [
|
inputs: [
|
||||||
@ -218,6 +275,32 @@ const _abi = [
|
|||||||
name: "LockReturned",
|
name: "LockReturned",
|
||||||
type: "event",
|
type: "event",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
anonymous: false,
|
||||||
|
inputs: [
|
||||||
|
{
|
||||||
|
indexed: false,
|
||||||
|
internalType: "address",
|
||||||
|
name: "reputation",
|
||||||
|
type: "address",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "ReputationUpdated",
|
||||||
|
type: "event",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
anonymous: false,
|
||||||
|
inputs: [
|
||||||
|
{
|
||||||
|
indexed: false,
|
||||||
|
internalType: "address[]",
|
||||||
|
name: "signers",
|
||||||
|
type: "address[]",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "ValidSignersUpdated",
|
||||||
|
type: "event",
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export class EventAndErrors__factory {
|
export class EventAndErrors__factory {
|
||||||
|
155
src/types/factories/Reputation__factory.ts
Normal file
155
src/types/factories/Reputation__factory.ts
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
/* Autogenerated file. Do not edit manually. */
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers";
|
||||||
|
import type { Provider, TransactionRequest } from "@ethersproject/providers";
|
||||||
|
import type { PromiseOrValue } from "../common";
|
||||||
|
import type { Reputation, ReputationInterface } from "../Reputation";
|
||||||
|
|
||||||
|
const _abi = [
|
||||||
|
{
|
||||||
|
inputs: [],
|
||||||
|
stateMutability: "nonpayable",
|
||||||
|
type: "constructor",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
anonymous: false,
|
||||||
|
inputs: [
|
||||||
|
{
|
||||||
|
indexed: true,
|
||||||
|
internalType: "address",
|
||||||
|
name: "user",
|
||||||
|
type: "address",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
indexed: true,
|
||||||
|
internalType: "address",
|
||||||
|
name: "newOwner",
|
||||||
|
type: "address",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "OwnerUpdated",
|
||||||
|
type: "event",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
inputs: [
|
||||||
|
{
|
||||||
|
internalType: "uint256",
|
||||||
|
name: "_userCredit",
|
||||||
|
type: "uint256",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "limiter",
|
||||||
|
outputs: [
|
||||||
|
{
|
||||||
|
internalType: "uint256",
|
||||||
|
name: "_spendLimit",
|
||||||
|
type: "uint256",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
stateMutability: "pure",
|
||||||
|
type: "function",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
inputs: [],
|
||||||
|
name: "magicValue",
|
||||||
|
outputs: [
|
||||||
|
{
|
||||||
|
internalType: "uint256",
|
||||||
|
name: "",
|
||||||
|
type: "uint256",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
stateMutability: "view",
|
||||||
|
type: "function",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
inputs: [],
|
||||||
|
name: "maxLimit",
|
||||||
|
outputs: [
|
||||||
|
{
|
||||||
|
internalType: "uint256",
|
||||||
|
name: "",
|
||||||
|
type: "uint256",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
stateMutability: "view",
|
||||||
|
type: "function",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
inputs: [],
|
||||||
|
name: "owner",
|
||||||
|
outputs: [
|
||||||
|
{
|
||||||
|
internalType: "address",
|
||||||
|
name: "",
|
||||||
|
type: "address",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
stateMutability: "view",
|
||||||
|
type: "function",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
inputs: [
|
||||||
|
{
|
||||||
|
internalType: "address",
|
||||||
|
name: "newOwner",
|
||||||
|
type: "address",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "setOwner",
|
||||||
|
outputs: [],
|
||||||
|
stateMutability: "nonpayable",
|
||||||
|
type: "function",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const _bytecode =
|
||||||
|
"0x608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a350610347806100616000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80634d2b1791116100505780634d2b17911461009e5780638da5cb5b146100b1578063a4b34557146100dc57600080fd5b806313af40351461006c5780631a861d2614610081575b600080fd5b61007f61007a3660046102f8565b6100e8565b005b61008b620f424081565b6040519081526020015b60405180910390f35b61008b6100ac366004610321565b6101a9565b6000546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610095565b61008b643a3529440081565b6000546001600160a01b031633146101465760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640160405180910390fd5b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6000806101b9620f4240846101fa565b905060006101c784806101fa565b905060006101e26101dd83643a352944006101fa565b610216565b90506101ee83826102c8565b60010195945050505050565b600061020f8383670de0b6b3a76400006102d9565b9392505050565b60b58171010000000000000000000000000000000000811061023d5760409190911b9060801c5b690100000000000000000081106102595760209190911b9060401c5b6501000000000081106102715760109190911b9060201c5b630100000081106102875760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b600061020f83670de0b6b3a7640000845b8282028115158415858304851417166102f157600080fd5b0492915050565b60006020828403121561030a57600080fd5b81356001600160a01b038116811461020f57600080fd5b60006020828403121561033357600080fd5b503591905056fea164736f6c6343000809000a";
|
||||||
|
|
||||||
|
type ReputationConstructorParams =
|
||||||
|
| [signer?: Signer]
|
||||||
|
| ConstructorParameters<typeof ContractFactory>;
|
||||||
|
|
||||||
|
const isSuperArgs = (
|
||||||
|
xs: ReputationConstructorParams
|
||||||
|
): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;
|
||||||
|
|
||||||
|
export class Reputation__factory extends ContractFactory {
|
||||||
|
constructor(...args: ReputationConstructorParams) {
|
||||||
|
if (isSuperArgs(args)) {
|
||||||
|
super(...args);
|
||||||
|
} else {
|
||||||
|
super(_abi, _bytecode, args[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override deploy(
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<Reputation> {
|
||||||
|
return super.deploy(overrides || {}) as Promise<Reputation>;
|
||||||
|
}
|
||||||
|
override getDeployTransaction(
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): TransactionRequest {
|
||||||
|
return super.getDeployTransaction(overrides || {});
|
||||||
|
}
|
||||||
|
override attach(address: string): Reputation {
|
||||||
|
return super.attach(address) as Reputation;
|
||||||
|
}
|
||||||
|
override connect(signer: Signer): Reputation__factory {
|
||||||
|
return super.connect(signer) as Reputation__factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
static readonly bytecode = _bytecode;
|
||||||
|
static readonly abi = _abi;
|
||||||
|
static createInterface(): ReputationInterface {
|
||||||
|
return new utils.Interface(_abi) as ReputationInterface;
|
||||||
|
}
|
||||||
|
static connect(
|
||||||
|
address: string,
|
||||||
|
signerOrProvider: Signer | Provider
|
||||||
|
): Reputation {
|
||||||
|
return new Contract(address, _abi, signerOrProvider) as Reputation;
|
||||||
|
}
|
||||||
|
}
|
@ -4,3 +4,4 @@
|
|||||||
export * as lib from "./lib";
|
export * as lib from "./lib";
|
||||||
export * as p2PixSol from "./p2pix.sol";
|
export * as p2PixSol from "./p2pix.sol";
|
||||||
export { EventAndErrors__factory } from "./EventAndErrors__factory";
|
export { EventAndErrors__factory } from "./EventAndErrors__factory";
|
||||||
|
export { Reputation__factory } from "./Reputation__factory";
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
export * as auth from "./auth";
|
export * as auth from "./auth";
|
||||||
|
export * as interfaces from "./interfaces";
|
||||||
export * as mock from "./mock";
|
export * as mock from "./mock";
|
||||||
export * as tokens from "./tokens";
|
export * as tokens from "./tokens";
|
||||||
export * as utils from "./utils";
|
export * as utils from "./utils";
|
||||||
|
45
src/types/factories/lib/interfaces/IReputation__factory.ts
Normal file
45
src/types/factories/lib/interfaces/IReputation__factory.ts
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/* Autogenerated file. Do not edit manually. */
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
import { Contract, Signer, utils } from "ethers";
|
||||||
|
import type { Provider } from "@ethersproject/providers";
|
||||||
|
import type {
|
||||||
|
IReputation,
|
||||||
|
IReputationInterface,
|
||||||
|
} from "../../../lib/interfaces/IReputation";
|
||||||
|
|
||||||
|
const _abi = [
|
||||||
|
{
|
||||||
|
inputs: [
|
||||||
|
{
|
||||||
|
internalType: "uint256",
|
||||||
|
name: "_userCredit",
|
||||||
|
type: "uint256",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "limiter",
|
||||||
|
outputs: [
|
||||||
|
{
|
||||||
|
internalType: "uint256",
|
||||||
|
name: "_spendLimit",
|
||||||
|
type: "uint256",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
stateMutability: "pure",
|
||||||
|
type: "function",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export class IReputation__factory {
|
||||||
|
static readonly abi = _abi;
|
||||||
|
static createInterface(): IReputationInterface {
|
||||||
|
return new utils.Interface(_abi) as IReputationInterface;
|
||||||
|
}
|
||||||
|
static connect(
|
||||||
|
address: string,
|
||||||
|
signerOrProvider: Signer | Provider
|
||||||
|
): IReputation {
|
||||||
|
return new Contract(address, _abi, signerOrProvider) as IReputation;
|
||||||
|
}
|
||||||
|
}
|
4
src/types/factories/lib/interfaces/index.ts
Normal file
4
src/types/factories/lib/interfaces/index.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/* Autogenerated file. Do not edit manually. */
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
export { IReputation__factory } from "./IReputation__factory";
|
File diff suppressed because one or more lines are too long
18
src/types/hardhat.d.ts
vendored
18
src/types/hardhat.d.ts
vendored
@ -20,6 +20,10 @@ declare module "hardhat/types/runtime" {
|
|||||||
name: "Owned",
|
name: "Owned",
|
||||||
signerOrOptions?: ethers.Signer | FactoryOptions
|
signerOrOptions?: ethers.Signer | FactoryOptions
|
||||||
): Promise<Contracts.Owned__factory>;
|
): Promise<Contracts.Owned__factory>;
|
||||||
|
getContractFactory(
|
||||||
|
name: "IReputation",
|
||||||
|
signerOrOptions?: ethers.Signer | FactoryOptions
|
||||||
|
): Promise<Contracts.IReputation__factory>;
|
||||||
getContractFactory(
|
getContractFactory(
|
||||||
name: "MockToken",
|
name: "MockToken",
|
||||||
signerOrOptions?: ethers.Signer | FactoryOptions
|
signerOrOptions?: ethers.Signer | FactoryOptions
|
||||||
@ -40,6 +44,10 @@ declare module "hardhat/types/runtime" {
|
|||||||
name: "P2PIX",
|
name: "P2PIX",
|
||||||
signerOrOptions?: ethers.Signer | FactoryOptions
|
signerOrOptions?: ethers.Signer | FactoryOptions
|
||||||
): Promise<Contracts.P2PIX__factory>;
|
): Promise<Contracts.P2PIX__factory>;
|
||||||
|
getContractFactory(
|
||||||
|
name: "Reputation",
|
||||||
|
signerOrOptions?: ethers.Signer | FactoryOptions
|
||||||
|
): Promise<Contracts.Reputation__factory>;
|
||||||
|
|
||||||
getContractAt(
|
getContractAt(
|
||||||
name: "EventAndErrors",
|
name: "EventAndErrors",
|
||||||
@ -51,6 +59,11 @@ declare module "hardhat/types/runtime" {
|
|||||||
address: string,
|
address: string,
|
||||||
signer?: ethers.Signer
|
signer?: ethers.Signer
|
||||||
): Promise<Contracts.Owned>;
|
): Promise<Contracts.Owned>;
|
||||||
|
getContractAt(
|
||||||
|
name: "IReputation",
|
||||||
|
address: string,
|
||||||
|
signer?: ethers.Signer
|
||||||
|
): Promise<Contracts.IReputation>;
|
||||||
getContractAt(
|
getContractAt(
|
||||||
name: "MockToken",
|
name: "MockToken",
|
||||||
address: string,
|
address: string,
|
||||||
@ -76,6 +89,11 @@ declare module "hardhat/types/runtime" {
|
|||||||
address: string,
|
address: string,
|
||||||
signer?: ethers.Signer
|
signer?: ethers.Signer
|
||||||
): Promise<Contracts.P2PIX>;
|
): Promise<Contracts.P2PIX>;
|
||||||
|
getContractAt(
|
||||||
|
name: "Reputation",
|
||||||
|
address: string,
|
||||||
|
signer?: ethers.Signer
|
||||||
|
): Promise<Contracts.Reputation>;
|
||||||
|
|
||||||
// default types
|
// default types
|
||||||
getContractFactory(
|
getContractFactory(
|
||||||
|
@ -6,10 +6,13 @@ export type { lib };
|
|||||||
import type * as p2PixSol from "./p2pix.sol";
|
import type * as p2PixSol from "./p2pix.sol";
|
||||||
export type { p2PixSol };
|
export type { p2PixSol };
|
||||||
export type { EventAndErrors } from "./EventAndErrors";
|
export type { EventAndErrors } from "./EventAndErrors";
|
||||||
|
export type { Reputation } from "./Reputation";
|
||||||
export * as factories from "./factories";
|
export * as factories from "./factories";
|
||||||
export { EventAndErrors__factory } from "./factories/EventAndErrors__factory";
|
export { EventAndErrors__factory } from "./factories/EventAndErrors__factory";
|
||||||
export type { Owned } from "./lib/auth/Owned";
|
export type { Owned } from "./lib/auth/Owned";
|
||||||
export { Owned__factory } from "./factories/lib/auth/Owned__factory";
|
export { Owned__factory } from "./factories/lib/auth/Owned__factory";
|
||||||
|
export type { IReputation } from "./lib/interfaces/IReputation";
|
||||||
|
export { IReputation__factory } from "./factories/lib/interfaces/IReputation__factory";
|
||||||
export type { MockToken } from "./lib/mock/mockToken.sol/MockToken";
|
export type { MockToken } from "./lib/mock/mockToken.sol/MockToken";
|
||||||
export { MockToken__factory } from "./factories/lib/mock/mockToken.sol/MockToken__factory";
|
export { MockToken__factory } from "./factories/lib/mock/mockToken.sol/MockToken__factory";
|
||||||
export type { ERC20 } from "./lib/tokens/ERC20";
|
export type { ERC20 } from "./lib/tokens/ERC20";
|
||||||
@ -20,3 +23,4 @@ export type { ReentrancyGuard } from "./lib/utils/ReentrancyGuard";
|
|||||||
export { ReentrancyGuard__factory } from "./factories/lib/utils/ReentrancyGuard__factory";
|
export { ReentrancyGuard__factory } from "./factories/lib/utils/ReentrancyGuard__factory";
|
||||||
export type { P2PIX } from "./p2pix.sol/P2PIX";
|
export type { P2PIX } from "./p2pix.sol/P2PIX";
|
||||||
export { P2PIX__factory } from "./factories/p2pix.sol/P2PIX__factory";
|
export { P2PIX__factory } from "./factories/p2pix.sol/P2PIX__factory";
|
||||||
|
export { Reputation__factory } from "./factories/Reputation__factory";
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
import type * as auth from "./auth";
|
import type * as auth from "./auth";
|
||||||
export type { auth };
|
export type { auth };
|
||||||
|
import type * as interfaces from "./interfaces";
|
||||||
|
export type { interfaces };
|
||||||
import type * as mock from "./mock";
|
import type * as mock from "./mock";
|
||||||
export type { mock };
|
export type { mock };
|
||||||
import type * as tokens from "./tokens";
|
import type * as tokens from "./tokens";
|
||||||
|
101
src/types/lib/interfaces/IReputation.ts
Normal file
101
src/types/lib/interfaces/IReputation.ts
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
/* Autogenerated file. Do not edit manually. */
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
import type {
|
||||||
|
BaseContract,
|
||||||
|
BigNumber,
|
||||||
|
BigNumberish,
|
||||||
|
BytesLike,
|
||||||
|
CallOverrides,
|
||||||
|
PopulatedTransaction,
|
||||||
|
Signer,
|
||||||
|
utils,
|
||||||
|
} from "ethers";
|
||||||
|
import type { FunctionFragment, Result } from "@ethersproject/abi";
|
||||||
|
import type { Listener, Provider } from "@ethersproject/providers";
|
||||||
|
import type {
|
||||||
|
TypedEventFilter,
|
||||||
|
TypedEvent,
|
||||||
|
TypedListener,
|
||||||
|
OnEvent,
|
||||||
|
PromiseOrValue,
|
||||||
|
} from "../../common";
|
||||||
|
|
||||||
|
export interface IReputationInterface extends utils.Interface {
|
||||||
|
functions: {
|
||||||
|
"limiter(uint256)": FunctionFragment;
|
||||||
|
};
|
||||||
|
|
||||||
|
getFunction(nameOrSignatureOrTopic: "limiter"): FunctionFragment;
|
||||||
|
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "limiter",
|
||||||
|
values: [PromiseOrValue<BigNumberish>]
|
||||||
|
): string;
|
||||||
|
|
||||||
|
decodeFunctionResult(functionFragment: "limiter", data: BytesLike): Result;
|
||||||
|
|
||||||
|
events: {};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IReputation extends BaseContract {
|
||||||
|
connect(signerOrProvider: Signer | Provider | string): this;
|
||||||
|
attach(addressOrName: string): this;
|
||||||
|
deployed(): Promise<this>;
|
||||||
|
|
||||||
|
interface: IReputationInterface;
|
||||||
|
|
||||||
|
queryFilter<TEvent extends TypedEvent>(
|
||||||
|
event: TypedEventFilter<TEvent>,
|
||||||
|
fromBlockOrBlockhash?: string | number | undefined,
|
||||||
|
toBlock?: string | number | undefined
|
||||||
|
): Promise<Array<TEvent>>;
|
||||||
|
|
||||||
|
listeners<TEvent extends TypedEvent>(
|
||||||
|
eventFilter?: TypedEventFilter<TEvent>
|
||||||
|
): Array<TypedListener<TEvent>>;
|
||||||
|
listeners(eventName?: string): Array<Listener>;
|
||||||
|
removeAllListeners<TEvent extends TypedEvent>(
|
||||||
|
eventFilter: TypedEventFilter<TEvent>
|
||||||
|
): this;
|
||||||
|
removeAllListeners(eventName?: string): this;
|
||||||
|
off: OnEvent<this>;
|
||||||
|
on: OnEvent<this>;
|
||||||
|
once: OnEvent<this>;
|
||||||
|
removeListener: OnEvent<this>;
|
||||||
|
|
||||||
|
functions: {
|
||||||
|
limiter(
|
||||||
|
_userCredit: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<[BigNumber] & { _spendLimit: BigNumber }>;
|
||||||
|
};
|
||||||
|
|
||||||
|
limiter(
|
||||||
|
_userCredit: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
callStatic: {
|
||||||
|
limiter(
|
||||||
|
_userCredit: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
};
|
||||||
|
|
||||||
|
filters: {};
|
||||||
|
|
||||||
|
estimateGas: {
|
||||||
|
limiter(
|
||||||
|
_userCredit: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
};
|
||||||
|
|
||||||
|
populateTransaction: {
|
||||||
|
limiter(
|
||||||
|
_userCredit: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<PopulatedTransaction>;
|
||||||
|
};
|
||||||
|
}
|
4
src/types/lib/interfaces/index.ts
Normal file
4
src/types/lib/interfaces/index.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/* Autogenerated file. Do not edit manually. */
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
export type { IReputation } from "./IReputation";
|
@ -30,17 +30,26 @@ import type {
|
|||||||
export interface P2PIXInterface extends utils.Interface {
|
export interface P2PIXInterface extends utils.Interface {
|
||||||
functions: {
|
functions: {
|
||||||
"_castAddrToKey(address)": FunctionFragment;
|
"_castAddrToKey(address)": FunctionFragment;
|
||||||
|
"allowedERC20s(address)": FunctionFragment;
|
||||||
"cancelDeposit(uint256)": FunctionFragment;
|
"cancelDeposit(uint256)": FunctionFragment;
|
||||||
"defaultLockBlocks()": FunctionFragment;
|
"defaultLockBlocks()": FunctionFragment;
|
||||||
"deposit(address,uint256,string)": FunctionFragment;
|
"deposit(address,uint256,string,bytes32)": FunctionFragment;
|
||||||
"depositCount()": FunctionFragment;
|
"depositCount()": FunctionFragment;
|
||||||
"lock(uint256,address,address,uint256,uint256,bytes32[])": FunctionFragment;
|
"lock(uint256,address,address,uint256,uint256,bytes32[],bytes32[])": FunctionFragment;
|
||||||
"mapDeposits(uint256)": FunctionFragment;
|
"mapDeposits(uint256)": FunctionFragment;
|
||||||
"mapLocks(bytes32)": FunctionFragment;
|
"mapLocks(bytes32)": FunctionFragment;
|
||||||
"owner()": FunctionFragment;
|
"owner()": FunctionFragment;
|
||||||
"release(bytes32,uint256,bytes32,bytes32,uint8)": FunctionFragment;
|
"release(bytes32,address,uint256,bytes32,bytes32,uint8)": FunctionFragment;
|
||||||
|
"reputation()": FunctionFragment;
|
||||||
|
"sellerAllowList(uint256)": FunctionFragment;
|
||||||
|
"setDefaultLockBlocks(uint256)": FunctionFragment;
|
||||||
"setOwner(address)": FunctionFragment;
|
"setOwner(address)": FunctionFragment;
|
||||||
|
"setReputation(address)": FunctionFragment;
|
||||||
|
"setRoot(address,bytes32)": FunctionFragment;
|
||||||
|
"setValidSigners(address[])": FunctionFragment;
|
||||||
|
"tokenSettings(address[],bool[])": FunctionFragment;
|
||||||
"unlockExpired(bytes32[])": FunctionFragment;
|
"unlockExpired(bytes32[])": FunctionFragment;
|
||||||
|
"userRecord(uint256)": FunctionFragment;
|
||||||
"validBacenSigners(uint256)": FunctionFragment;
|
"validBacenSigners(uint256)": FunctionFragment;
|
||||||
"withdraw(uint256,bytes32[])": FunctionFragment;
|
"withdraw(uint256,bytes32[])": FunctionFragment;
|
||||||
"withdrawBalance()": FunctionFragment;
|
"withdrawBalance()": FunctionFragment;
|
||||||
@ -49,6 +58,7 @@ export interface P2PIXInterface extends utils.Interface {
|
|||||||
getFunction(
|
getFunction(
|
||||||
nameOrSignatureOrTopic:
|
nameOrSignatureOrTopic:
|
||||||
| "_castAddrToKey"
|
| "_castAddrToKey"
|
||||||
|
| "allowedERC20s"
|
||||||
| "cancelDeposit"
|
| "cancelDeposit"
|
||||||
| "defaultLockBlocks"
|
| "defaultLockBlocks"
|
||||||
| "deposit"
|
| "deposit"
|
||||||
@ -58,8 +68,16 @@ export interface P2PIXInterface extends utils.Interface {
|
|||||||
| "mapLocks"
|
| "mapLocks"
|
||||||
| "owner"
|
| "owner"
|
||||||
| "release"
|
| "release"
|
||||||
|
| "reputation"
|
||||||
|
| "sellerAllowList"
|
||||||
|
| "setDefaultLockBlocks"
|
||||||
| "setOwner"
|
| "setOwner"
|
||||||
|
| "setReputation"
|
||||||
|
| "setRoot"
|
||||||
|
| "setValidSigners"
|
||||||
|
| "tokenSettings"
|
||||||
| "unlockExpired"
|
| "unlockExpired"
|
||||||
|
| "userRecord"
|
||||||
| "validBacenSigners"
|
| "validBacenSigners"
|
||||||
| "withdraw"
|
| "withdraw"
|
||||||
| "withdrawBalance"
|
| "withdrawBalance"
|
||||||
@ -69,6 +87,10 @@ export interface P2PIXInterface extends utils.Interface {
|
|||||||
functionFragment: "_castAddrToKey",
|
functionFragment: "_castAddrToKey",
|
||||||
values: [PromiseOrValue<string>]
|
values: [PromiseOrValue<string>]
|
||||||
): string;
|
): string;
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "allowedERC20s",
|
||||||
|
values: [PromiseOrValue<string>]
|
||||||
|
): string;
|
||||||
encodeFunctionData(
|
encodeFunctionData(
|
||||||
functionFragment: "cancelDeposit",
|
functionFragment: "cancelDeposit",
|
||||||
values: [PromiseOrValue<BigNumberish>]
|
values: [PromiseOrValue<BigNumberish>]
|
||||||
@ -82,7 +104,8 @@ export interface P2PIXInterface extends utils.Interface {
|
|||||||
values: [
|
values: [
|
||||||
PromiseOrValue<string>,
|
PromiseOrValue<string>,
|
||||||
PromiseOrValue<BigNumberish>,
|
PromiseOrValue<BigNumberish>,
|
||||||
PromiseOrValue<string>
|
PromiseOrValue<string>,
|
||||||
|
PromiseOrValue<BytesLike>
|
||||||
]
|
]
|
||||||
): string;
|
): string;
|
||||||
encodeFunctionData(
|
encodeFunctionData(
|
||||||
@ -97,6 +120,7 @@ export interface P2PIXInterface extends utils.Interface {
|
|||||||
PromiseOrValue<string>,
|
PromiseOrValue<string>,
|
||||||
PromiseOrValue<BigNumberish>,
|
PromiseOrValue<BigNumberish>,
|
||||||
PromiseOrValue<BigNumberish>,
|
PromiseOrValue<BigNumberish>,
|
||||||
|
PromiseOrValue<BytesLike>[],
|
||||||
PromiseOrValue<BytesLike>[]
|
PromiseOrValue<BytesLike>[]
|
||||||
]
|
]
|
||||||
): string;
|
): string;
|
||||||
@ -113,20 +137,53 @@ export interface P2PIXInterface extends utils.Interface {
|
|||||||
functionFragment: "release",
|
functionFragment: "release",
|
||||||
values: [
|
values: [
|
||||||
PromiseOrValue<BytesLike>,
|
PromiseOrValue<BytesLike>,
|
||||||
|
PromiseOrValue<string>,
|
||||||
PromiseOrValue<BigNumberish>,
|
PromiseOrValue<BigNumberish>,
|
||||||
PromiseOrValue<BytesLike>,
|
PromiseOrValue<BytesLike>,
|
||||||
PromiseOrValue<BytesLike>,
|
PromiseOrValue<BytesLike>,
|
||||||
PromiseOrValue<BigNumberish>
|
PromiseOrValue<BigNumberish>
|
||||||
]
|
]
|
||||||
): string;
|
): string;
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "reputation",
|
||||||
|
values?: undefined
|
||||||
|
): string;
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "sellerAllowList",
|
||||||
|
values: [PromiseOrValue<BigNumberish>]
|
||||||
|
): string;
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "setDefaultLockBlocks",
|
||||||
|
values: [PromiseOrValue<BigNumberish>]
|
||||||
|
): string;
|
||||||
encodeFunctionData(
|
encodeFunctionData(
|
||||||
functionFragment: "setOwner",
|
functionFragment: "setOwner",
|
||||||
values: [PromiseOrValue<string>]
|
values: [PromiseOrValue<string>]
|
||||||
): string;
|
): string;
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "setReputation",
|
||||||
|
values: [PromiseOrValue<string>]
|
||||||
|
): string;
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "setRoot",
|
||||||
|
values: [PromiseOrValue<string>, PromiseOrValue<BytesLike>]
|
||||||
|
): string;
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "setValidSigners",
|
||||||
|
values: [PromiseOrValue<string>[]]
|
||||||
|
): string;
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "tokenSettings",
|
||||||
|
values: [PromiseOrValue<string>[], PromiseOrValue<boolean>[]]
|
||||||
|
): string;
|
||||||
encodeFunctionData(
|
encodeFunctionData(
|
||||||
functionFragment: "unlockExpired",
|
functionFragment: "unlockExpired",
|
||||||
values: [PromiseOrValue<BytesLike>[]]
|
values: [PromiseOrValue<BytesLike>[]]
|
||||||
): string;
|
): string;
|
||||||
|
encodeFunctionData(
|
||||||
|
functionFragment: "userRecord",
|
||||||
|
values: [PromiseOrValue<BigNumberish>]
|
||||||
|
): string;
|
||||||
encodeFunctionData(
|
encodeFunctionData(
|
||||||
functionFragment: "validBacenSigners",
|
functionFragment: "validBacenSigners",
|
||||||
values: [PromiseOrValue<BigNumberish>]
|
values: [PromiseOrValue<BigNumberish>]
|
||||||
@ -144,6 +201,10 @@ export interface P2PIXInterface extends utils.Interface {
|
|||||||
functionFragment: "_castAddrToKey",
|
functionFragment: "_castAddrToKey",
|
||||||
data: BytesLike
|
data: BytesLike
|
||||||
): Result;
|
): Result;
|
||||||
|
decodeFunctionResult(
|
||||||
|
functionFragment: "allowedERC20s",
|
||||||
|
data: BytesLike
|
||||||
|
): Result;
|
||||||
decodeFunctionResult(
|
decodeFunctionResult(
|
||||||
functionFragment: "cancelDeposit",
|
functionFragment: "cancelDeposit",
|
||||||
data: BytesLike
|
data: BytesLike
|
||||||
@ -165,11 +226,34 @@ export interface P2PIXInterface extends utils.Interface {
|
|||||||
decodeFunctionResult(functionFragment: "mapLocks", data: BytesLike): Result;
|
decodeFunctionResult(functionFragment: "mapLocks", data: BytesLike): Result;
|
||||||
decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
|
decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
|
||||||
decodeFunctionResult(functionFragment: "release", data: BytesLike): Result;
|
decodeFunctionResult(functionFragment: "release", data: BytesLike): Result;
|
||||||
|
decodeFunctionResult(functionFragment: "reputation", data: BytesLike): Result;
|
||||||
|
decodeFunctionResult(
|
||||||
|
functionFragment: "sellerAllowList",
|
||||||
|
data: BytesLike
|
||||||
|
): Result;
|
||||||
|
decodeFunctionResult(
|
||||||
|
functionFragment: "setDefaultLockBlocks",
|
||||||
|
data: BytesLike
|
||||||
|
): Result;
|
||||||
decodeFunctionResult(functionFragment: "setOwner", data: BytesLike): Result;
|
decodeFunctionResult(functionFragment: "setOwner", data: BytesLike): Result;
|
||||||
|
decodeFunctionResult(
|
||||||
|
functionFragment: "setReputation",
|
||||||
|
data: BytesLike
|
||||||
|
): Result;
|
||||||
|
decodeFunctionResult(functionFragment: "setRoot", data: BytesLike): Result;
|
||||||
|
decodeFunctionResult(
|
||||||
|
functionFragment: "setValidSigners",
|
||||||
|
data: BytesLike
|
||||||
|
): Result;
|
||||||
|
decodeFunctionResult(
|
||||||
|
functionFragment: "tokenSettings",
|
||||||
|
data: BytesLike
|
||||||
|
): Result;
|
||||||
decodeFunctionResult(
|
decodeFunctionResult(
|
||||||
functionFragment: "unlockExpired",
|
functionFragment: "unlockExpired",
|
||||||
data: BytesLike
|
data: BytesLike
|
||||||
): Result;
|
): Result;
|
||||||
|
decodeFunctionResult(functionFragment: "userRecord", data: BytesLike): Result;
|
||||||
decodeFunctionResult(
|
decodeFunctionResult(
|
||||||
functionFragment: "validBacenSigners",
|
functionFragment: "validBacenSigners",
|
||||||
data: BytesLike
|
data: BytesLike
|
||||||
@ -181,26 +265,46 @@ export interface P2PIXInterface extends utils.Interface {
|
|||||||
): Result;
|
): Result;
|
||||||
|
|
||||||
events: {
|
events: {
|
||||||
|
"AllowedERC20Updated(address,bool)": EventFragment;
|
||||||
"DepositAdded(address,uint256,address,uint256)": EventFragment;
|
"DepositAdded(address,uint256,address,uint256)": EventFragment;
|
||||||
"DepositClosed(address,uint256)": EventFragment;
|
"DepositClosed(address,uint256)": EventFragment;
|
||||||
"DepositWithdrawn(address,uint256,uint256)": EventFragment;
|
"DepositWithdrawn(address,uint256,uint256)": EventFragment;
|
||||||
"FundsWithdrawn(address,uint256)": EventFragment;
|
"FundsWithdrawn(address,uint256)": EventFragment;
|
||||||
"LockAdded(address,bytes32,uint256,uint256)": EventFragment;
|
"LockAdded(address,bytes32,uint256,uint256)": EventFragment;
|
||||||
|
"LockBlocksUpdated(uint256)": EventFragment;
|
||||||
"LockReleased(address,bytes32)": EventFragment;
|
"LockReleased(address,bytes32)": EventFragment;
|
||||||
"LockReturned(address,bytes32)": EventFragment;
|
"LockReturned(address,bytes32)": EventFragment;
|
||||||
"OwnerUpdated(address,address)": EventFragment;
|
"OwnerUpdated(address,address)": EventFragment;
|
||||||
|
"ReputationUpdated(address)": EventFragment;
|
||||||
|
"ValidSignersUpdated(address[])": EventFragment;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
getEvent(nameOrSignatureOrTopic: "AllowedERC20Updated"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "DepositAdded"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "DepositAdded"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "DepositClosed"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "DepositClosed"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "DepositWithdrawn"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "DepositWithdrawn"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "FundsWithdrawn"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "FundsWithdrawn"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "LockAdded"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "LockAdded"): EventFragment;
|
||||||
|
getEvent(nameOrSignatureOrTopic: "LockBlocksUpdated"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "LockReleased"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "LockReleased"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "LockReturned"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "LockReturned"): EventFragment;
|
||||||
getEvent(nameOrSignatureOrTopic: "OwnerUpdated"): EventFragment;
|
getEvent(nameOrSignatureOrTopic: "OwnerUpdated"): EventFragment;
|
||||||
|
getEvent(nameOrSignatureOrTopic: "ReputationUpdated"): EventFragment;
|
||||||
|
getEvent(nameOrSignatureOrTopic: "ValidSignersUpdated"): EventFragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface AllowedERC20UpdatedEventObject {
|
||||||
|
token: string;
|
||||||
|
state: boolean;
|
||||||
|
}
|
||||||
|
export type AllowedERC20UpdatedEvent = TypedEvent<
|
||||||
|
[string, boolean],
|
||||||
|
AllowedERC20UpdatedEventObject
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type AllowedERC20UpdatedEventFilter =
|
||||||
|
TypedEventFilter<AllowedERC20UpdatedEvent>;
|
||||||
|
|
||||||
export interface DepositAddedEventObject {
|
export interface DepositAddedEventObject {
|
||||||
seller: string;
|
seller: string;
|
||||||
depositID: BigNumber;
|
depositID: BigNumber;
|
||||||
@ -262,6 +366,17 @@ export type LockAddedEvent = TypedEvent<
|
|||||||
|
|
||||||
export type LockAddedEventFilter = TypedEventFilter<LockAddedEvent>;
|
export type LockAddedEventFilter = TypedEventFilter<LockAddedEvent>;
|
||||||
|
|
||||||
|
export interface LockBlocksUpdatedEventObject {
|
||||||
|
blocks: BigNumber;
|
||||||
|
}
|
||||||
|
export type LockBlocksUpdatedEvent = TypedEvent<
|
||||||
|
[BigNumber],
|
||||||
|
LockBlocksUpdatedEventObject
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type LockBlocksUpdatedEventFilter =
|
||||||
|
TypedEventFilter<LockBlocksUpdatedEvent>;
|
||||||
|
|
||||||
export interface LockReleasedEventObject {
|
export interface LockReleasedEventObject {
|
||||||
buyer: string;
|
buyer: string;
|
||||||
lockId: string;
|
lockId: string;
|
||||||
@ -295,6 +410,28 @@ export type OwnerUpdatedEvent = TypedEvent<
|
|||||||
|
|
||||||
export type OwnerUpdatedEventFilter = TypedEventFilter<OwnerUpdatedEvent>;
|
export type OwnerUpdatedEventFilter = TypedEventFilter<OwnerUpdatedEvent>;
|
||||||
|
|
||||||
|
export interface ReputationUpdatedEventObject {
|
||||||
|
reputation: string;
|
||||||
|
}
|
||||||
|
export type ReputationUpdatedEvent = TypedEvent<
|
||||||
|
[string],
|
||||||
|
ReputationUpdatedEventObject
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type ReputationUpdatedEventFilter =
|
||||||
|
TypedEventFilter<ReputationUpdatedEvent>;
|
||||||
|
|
||||||
|
export interface ValidSignersUpdatedEventObject {
|
||||||
|
signers: string[];
|
||||||
|
}
|
||||||
|
export type ValidSignersUpdatedEvent = TypedEvent<
|
||||||
|
[string[]],
|
||||||
|
ValidSignersUpdatedEventObject
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type ValidSignersUpdatedEventFilter =
|
||||||
|
TypedEventFilter<ValidSignersUpdatedEvent>;
|
||||||
|
|
||||||
export interface P2PIX extends BaseContract {
|
export interface P2PIX extends BaseContract {
|
||||||
connect(signerOrProvider: Signer | Provider | string): this;
|
connect(signerOrProvider: Signer | Provider | string): this;
|
||||||
attach(addressOrName: string): this;
|
attach(addressOrName: string): this;
|
||||||
@ -327,6 +464,11 @@ export interface P2PIX extends BaseContract {
|
|||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<[BigNumber] & { _key: BigNumber }>;
|
): Promise<[BigNumber] & { _key: BigNumber }>;
|
||||||
|
|
||||||
|
allowedERC20s(
|
||||||
|
arg0: PromiseOrValue<string>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<[boolean]>;
|
||||||
|
|
||||||
cancelDeposit(
|
cancelDeposit(
|
||||||
depositID: PromiseOrValue<BigNumberish>,
|
depositID: PromiseOrValue<BigNumberish>,
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
@ -338,6 +480,7 @@ export interface P2PIX extends BaseContract {
|
|||||||
_token: PromiseOrValue<string>,
|
_token: PromiseOrValue<string>,
|
||||||
_amount: PromiseOrValue<BigNumberish>,
|
_amount: PromiseOrValue<BigNumberish>,
|
||||||
_pixTarget: PromiseOrValue<string>,
|
_pixTarget: PromiseOrValue<string>,
|
||||||
|
allowlistRoot: PromiseOrValue<BytesLike>,
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<ContractTransaction>;
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
@ -347,10 +490,11 @@ export interface P2PIX extends BaseContract {
|
|||||||
|
|
||||||
lock(
|
lock(
|
||||||
_depositID: PromiseOrValue<BigNumberish>,
|
_depositID: PromiseOrValue<BigNumberish>,
|
||||||
_targetAddress: PromiseOrValue<string>,
|
_buyerAddress: PromiseOrValue<string>,
|
||||||
_relayerAddress: PromiseOrValue<string>,
|
_relayerTarget: PromiseOrValue<string>,
|
||||||
_relayerPremium: PromiseOrValue<BigNumberish>,
|
_relayerPremium: PromiseOrValue<BigNumberish>,
|
||||||
_amount: PromiseOrValue<BigNumberish>,
|
_amount: PromiseOrValue<BigNumberish>,
|
||||||
|
merkleProof: PromiseOrValue<BytesLike>[],
|
||||||
expiredLocks: PromiseOrValue<BytesLike>[],
|
expiredLocks: PromiseOrValue<BytesLike>[],
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<ContractTransaction>;
|
): Promise<ContractTransaction>;
|
||||||
@ -372,12 +516,13 @@ export interface P2PIX extends BaseContract {
|
|||||||
arg0: PromiseOrValue<BytesLike>,
|
arg0: PromiseOrValue<BytesLike>,
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<
|
): Promise<
|
||||||
[BigNumber, BigNumber, BigNumber, BigNumber, string, string] & {
|
[BigNumber, BigNumber, BigNumber, BigNumber, string, string, string] & {
|
||||||
depositID: BigNumber;
|
depositID: BigNumber;
|
||||||
relayerPremium: BigNumber;
|
relayerPremium: BigNumber;
|
||||||
amount: BigNumber;
|
amount: BigNumber;
|
||||||
expirationBlock: BigNumber;
|
expirationBlock: BigNumber;
|
||||||
targetAddress: string;
|
buyerAddress: string;
|
||||||
|
relayerTarget: string;
|
||||||
relayerAddress: string;
|
relayerAddress: string;
|
||||||
}
|
}
|
||||||
>;
|
>;
|
||||||
@ -386,6 +531,7 @@ export interface P2PIX extends BaseContract {
|
|||||||
|
|
||||||
release(
|
release(
|
||||||
lockID: PromiseOrValue<BytesLike>,
|
lockID: PromiseOrValue<BytesLike>,
|
||||||
|
_relayerTarget: PromiseOrValue<string>,
|
||||||
pixTimestamp: PromiseOrValue<BigNumberish>,
|
pixTimestamp: PromiseOrValue<BigNumberish>,
|
||||||
r: PromiseOrValue<BytesLike>,
|
r: PromiseOrValue<BytesLike>,
|
||||||
s: PromiseOrValue<BytesLike>,
|
s: PromiseOrValue<BytesLike>,
|
||||||
@ -393,16 +539,55 @@ export interface P2PIX extends BaseContract {
|
|||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<ContractTransaction>;
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
reputation(overrides?: CallOverrides): Promise<[string]>;
|
||||||
|
|
||||||
|
sellerAllowList(
|
||||||
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<[string]>;
|
||||||
|
|
||||||
|
setDefaultLockBlocks(
|
||||||
|
_blocks: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
setOwner(
|
setOwner(
|
||||||
newOwner: PromiseOrValue<string>,
|
newOwner: PromiseOrValue<string>,
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<ContractTransaction>;
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
setReputation(
|
||||||
|
_reputation: PromiseOrValue<string>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
setRoot(
|
||||||
|
addr: PromiseOrValue<string>,
|
||||||
|
merkleroot: PromiseOrValue<BytesLike>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
setValidSigners(
|
||||||
|
_validSigners: PromiseOrValue<string>[],
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
tokenSettings(
|
||||||
|
_tokens: PromiseOrValue<string>[],
|
||||||
|
_states: PromiseOrValue<boolean>[],
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
unlockExpired(
|
unlockExpired(
|
||||||
lockIDs: PromiseOrValue<BytesLike>[],
|
lockIDs: PromiseOrValue<BytesLike>[],
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<ContractTransaction>;
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
userRecord(
|
||||||
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<[BigNumber]>;
|
||||||
|
|
||||||
validBacenSigners(
|
validBacenSigners(
|
||||||
arg0: PromiseOrValue<BigNumberish>,
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
@ -424,6 +609,11 @@ export interface P2PIX extends BaseContract {
|
|||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<BigNumber>;
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
allowedERC20s(
|
||||||
|
arg0: PromiseOrValue<string>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<boolean>;
|
||||||
|
|
||||||
cancelDeposit(
|
cancelDeposit(
|
||||||
depositID: PromiseOrValue<BigNumberish>,
|
depositID: PromiseOrValue<BigNumberish>,
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
@ -435,6 +625,7 @@ export interface P2PIX extends BaseContract {
|
|||||||
_token: PromiseOrValue<string>,
|
_token: PromiseOrValue<string>,
|
||||||
_amount: PromiseOrValue<BigNumberish>,
|
_amount: PromiseOrValue<BigNumberish>,
|
||||||
_pixTarget: PromiseOrValue<string>,
|
_pixTarget: PromiseOrValue<string>,
|
||||||
|
allowlistRoot: PromiseOrValue<BytesLike>,
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<ContractTransaction>;
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
@ -442,10 +633,11 @@ export interface P2PIX extends BaseContract {
|
|||||||
|
|
||||||
lock(
|
lock(
|
||||||
_depositID: PromiseOrValue<BigNumberish>,
|
_depositID: PromiseOrValue<BigNumberish>,
|
||||||
_targetAddress: PromiseOrValue<string>,
|
_buyerAddress: PromiseOrValue<string>,
|
||||||
_relayerAddress: PromiseOrValue<string>,
|
_relayerTarget: PromiseOrValue<string>,
|
||||||
_relayerPremium: PromiseOrValue<BigNumberish>,
|
_relayerPremium: PromiseOrValue<BigNumberish>,
|
||||||
_amount: PromiseOrValue<BigNumberish>,
|
_amount: PromiseOrValue<BigNumberish>,
|
||||||
|
merkleProof: PromiseOrValue<BytesLike>[],
|
||||||
expiredLocks: PromiseOrValue<BytesLike>[],
|
expiredLocks: PromiseOrValue<BytesLike>[],
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<ContractTransaction>;
|
): Promise<ContractTransaction>;
|
||||||
@ -467,12 +659,13 @@ export interface P2PIX extends BaseContract {
|
|||||||
arg0: PromiseOrValue<BytesLike>,
|
arg0: PromiseOrValue<BytesLike>,
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<
|
): Promise<
|
||||||
[BigNumber, BigNumber, BigNumber, BigNumber, string, string] & {
|
[BigNumber, BigNumber, BigNumber, BigNumber, string, string, string] & {
|
||||||
depositID: BigNumber;
|
depositID: BigNumber;
|
||||||
relayerPremium: BigNumber;
|
relayerPremium: BigNumber;
|
||||||
amount: BigNumber;
|
amount: BigNumber;
|
||||||
expirationBlock: BigNumber;
|
expirationBlock: BigNumber;
|
||||||
targetAddress: string;
|
buyerAddress: string;
|
||||||
|
relayerTarget: string;
|
||||||
relayerAddress: string;
|
relayerAddress: string;
|
||||||
}
|
}
|
||||||
>;
|
>;
|
||||||
@ -481,6 +674,7 @@ export interface P2PIX extends BaseContract {
|
|||||||
|
|
||||||
release(
|
release(
|
||||||
lockID: PromiseOrValue<BytesLike>,
|
lockID: PromiseOrValue<BytesLike>,
|
||||||
|
_relayerTarget: PromiseOrValue<string>,
|
||||||
pixTimestamp: PromiseOrValue<BigNumberish>,
|
pixTimestamp: PromiseOrValue<BigNumberish>,
|
||||||
r: PromiseOrValue<BytesLike>,
|
r: PromiseOrValue<BytesLike>,
|
||||||
s: PromiseOrValue<BytesLike>,
|
s: PromiseOrValue<BytesLike>,
|
||||||
@ -488,16 +682,55 @@ export interface P2PIX extends BaseContract {
|
|||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<ContractTransaction>;
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
reputation(overrides?: CallOverrides): Promise<string>;
|
||||||
|
|
||||||
|
sellerAllowList(
|
||||||
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<string>;
|
||||||
|
|
||||||
|
setDefaultLockBlocks(
|
||||||
|
_blocks: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
setOwner(
|
setOwner(
|
||||||
newOwner: PromiseOrValue<string>,
|
newOwner: PromiseOrValue<string>,
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<ContractTransaction>;
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
setReputation(
|
||||||
|
_reputation: PromiseOrValue<string>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
setRoot(
|
||||||
|
addr: PromiseOrValue<string>,
|
||||||
|
merkleroot: PromiseOrValue<BytesLike>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
setValidSigners(
|
||||||
|
_validSigners: PromiseOrValue<string>[],
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
tokenSettings(
|
||||||
|
_tokens: PromiseOrValue<string>[],
|
||||||
|
_states: PromiseOrValue<boolean>[],
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
unlockExpired(
|
unlockExpired(
|
||||||
lockIDs: PromiseOrValue<BytesLike>[],
|
lockIDs: PromiseOrValue<BytesLike>[],
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<ContractTransaction>;
|
): Promise<ContractTransaction>;
|
||||||
|
|
||||||
|
userRecord(
|
||||||
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
validBacenSigners(
|
validBacenSigners(
|
||||||
arg0: PromiseOrValue<BigNumberish>,
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
@ -519,6 +752,11 @@ export interface P2PIX extends BaseContract {
|
|||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<BigNumber>;
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
allowedERC20s(
|
||||||
|
arg0: PromiseOrValue<string>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<boolean>;
|
||||||
|
|
||||||
cancelDeposit(
|
cancelDeposit(
|
||||||
depositID: PromiseOrValue<BigNumberish>,
|
depositID: PromiseOrValue<BigNumberish>,
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
@ -530,6 +768,7 @@ export interface P2PIX extends BaseContract {
|
|||||||
_token: PromiseOrValue<string>,
|
_token: PromiseOrValue<string>,
|
||||||
_amount: PromiseOrValue<BigNumberish>,
|
_amount: PromiseOrValue<BigNumberish>,
|
||||||
_pixTarget: PromiseOrValue<string>,
|
_pixTarget: PromiseOrValue<string>,
|
||||||
|
allowlistRoot: PromiseOrValue<BytesLike>,
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<BigNumber>;
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
@ -537,10 +776,11 @@ export interface P2PIX extends BaseContract {
|
|||||||
|
|
||||||
lock(
|
lock(
|
||||||
_depositID: PromiseOrValue<BigNumberish>,
|
_depositID: PromiseOrValue<BigNumberish>,
|
||||||
_targetAddress: PromiseOrValue<string>,
|
_buyerAddress: PromiseOrValue<string>,
|
||||||
_relayerAddress: PromiseOrValue<string>,
|
_relayerTarget: PromiseOrValue<string>,
|
||||||
_relayerPremium: PromiseOrValue<BigNumberish>,
|
_relayerPremium: PromiseOrValue<BigNumberish>,
|
||||||
_amount: PromiseOrValue<BigNumberish>,
|
_amount: PromiseOrValue<BigNumberish>,
|
||||||
|
merkleProof: PromiseOrValue<BytesLike>[],
|
||||||
expiredLocks: PromiseOrValue<BytesLike>[],
|
expiredLocks: PromiseOrValue<BytesLike>[],
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<string>;
|
): Promise<string>;
|
||||||
@ -562,12 +802,13 @@ export interface P2PIX extends BaseContract {
|
|||||||
arg0: PromiseOrValue<BytesLike>,
|
arg0: PromiseOrValue<BytesLike>,
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<
|
): Promise<
|
||||||
[BigNumber, BigNumber, BigNumber, BigNumber, string, string] & {
|
[BigNumber, BigNumber, BigNumber, BigNumber, string, string, string] & {
|
||||||
depositID: BigNumber;
|
depositID: BigNumber;
|
||||||
relayerPremium: BigNumber;
|
relayerPremium: BigNumber;
|
||||||
amount: BigNumber;
|
amount: BigNumber;
|
||||||
expirationBlock: BigNumber;
|
expirationBlock: BigNumber;
|
||||||
targetAddress: string;
|
buyerAddress: string;
|
||||||
|
relayerTarget: string;
|
||||||
relayerAddress: string;
|
relayerAddress: string;
|
||||||
}
|
}
|
||||||
>;
|
>;
|
||||||
@ -576,6 +817,7 @@ export interface P2PIX extends BaseContract {
|
|||||||
|
|
||||||
release(
|
release(
|
||||||
lockID: PromiseOrValue<BytesLike>,
|
lockID: PromiseOrValue<BytesLike>,
|
||||||
|
_relayerTarget: PromiseOrValue<string>,
|
||||||
pixTimestamp: PromiseOrValue<BigNumberish>,
|
pixTimestamp: PromiseOrValue<BigNumberish>,
|
||||||
r: PromiseOrValue<BytesLike>,
|
r: PromiseOrValue<BytesLike>,
|
||||||
s: PromiseOrValue<BytesLike>,
|
s: PromiseOrValue<BytesLike>,
|
||||||
@ -583,16 +825,55 @@ export interface P2PIX extends BaseContract {
|
|||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<void>;
|
): Promise<void>;
|
||||||
|
|
||||||
|
reputation(overrides?: CallOverrides): Promise<string>;
|
||||||
|
|
||||||
|
sellerAllowList(
|
||||||
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<string>;
|
||||||
|
|
||||||
|
setDefaultLockBlocks(
|
||||||
|
_blocks: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<void>;
|
||||||
|
|
||||||
setOwner(
|
setOwner(
|
||||||
newOwner: PromiseOrValue<string>,
|
newOwner: PromiseOrValue<string>,
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<void>;
|
): Promise<void>;
|
||||||
|
|
||||||
|
setReputation(
|
||||||
|
_reputation: PromiseOrValue<string>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<void>;
|
||||||
|
|
||||||
|
setRoot(
|
||||||
|
addr: PromiseOrValue<string>,
|
||||||
|
merkleroot: PromiseOrValue<BytesLike>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<void>;
|
||||||
|
|
||||||
|
setValidSigners(
|
||||||
|
_validSigners: PromiseOrValue<string>[],
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<void>;
|
||||||
|
|
||||||
|
tokenSettings(
|
||||||
|
_tokens: PromiseOrValue<string>[],
|
||||||
|
_states: PromiseOrValue<boolean>[],
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<void>;
|
||||||
|
|
||||||
unlockExpired(
|
unlockExpired(
|
||||||
lockIDs: PromiseOrValue<BytesLike>[],
|
lockIDs: PromiseOrValue<BytesLike>[],
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<void>;
|
): Promise<void>;
|
||||||
|
|
||||||
|
userRecord(
|
||||||
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
validBacenSigners(
|
validBacenSigners(
|
||||||
arg0: PromiseOrValue<BigNumberish>,
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
@ -608,6 +889,15 @@ export interface P2PIX extends BaseContract {
|
|||||||
};
|
};
|
||||||
|
|
||||||
filters: {
|
filters: {
|
||||||
|
"AllowedERC20Updated(address,bool)"(
|
||||||
|
token?: PromiseOrValue<string> | null,
|
||||||
|
state?: PromiseOrValue<boolean> | null
|
||||||
|
): AllowedERC20UpdatedEventFilter;
|
||||||
|
AllowedERC20Updated(
|
||||||
|
token?: PromiseOrValue<string> | null,
|
||||||
|
state?: PromiseOrValue<boolean> | null
|
||||||
|
): AllowedERC20UpdatedEventFilter;
|
||||||
|
|
||||||
"DepositAdded(address,uint256,address,uint256)"(
|
"DepositAdded(address,uint256,address,uint256)"(
|
||||||
seller?: PromiseOrValue<string> | null,
|
seller?: PromiseOrValue<string> | null,
|
||||||
depositID?: null,
|
depositID?: null,
|
||||||
@ -660,6 +950,9 @@ export interface P2PIX extends BaseContract {
|
|||||||
amount?: null
|
amount?: null
|
||||||
): LockAddedEventFilter;
|
): LockAddedEventFilter;
|
||||||
|
|
||||||
|
"LockBlocksUpdated(uint256)"(blocks?: null): LockBlocksUpdatedEventFilter;
|
||||||
|
LockBlocksUpdated(blocks?: null): LockBlocksUpdatedEventFilter;
|
||||||
|
|
||||||
"LockReleased(address,bytes32)"(
|
"LockReleased(address,bytes32)"(
|
||||||
buyer?: PromiseOrValue<string> | null,
|
buyer?: PromiseOrValue<string> | null,
|
||||||
lockId?: null
|
lockId?: null
|
||||||
@ -686,6 +979,16 @@ export interface P2PIX extends BaseContract {
|
|||||||
user?: PromiseOrValue<string> | null,
|
user?: PromiseOrValue<string> | null,
|
||||||
newOwner?: PromiseOrValue<string> | null
|
newOwner?: PromiseOrValue<string> | null
|
||||||
): OwnerUpdatedEventFilter;
|
): OwnerUpdatedEventFilter;
|
||||||
|
|
||||||
|
"ReputationUpdated(address)"(
|
||||||
|
reputation?: null
|
||||||
|
): ReputationUpdatedEventFilter;
|
||||||
|
ReputationUpdated(reputation?: null): ReputationUpdatedEventFilter;
|
||||||
|
|
||||||
|
"ValidSignersUpdated(address[])"(
|
||||||
|
signers?: null
|
||||||
|
): ValidSignersUpdatedEventFilter;
|
||||||
|
ValidSignersUpdated(signers?: null): ValidSignersUpdatedEventFilter;
|
||||||
};
|
};
|
||||||
|
|
||||||
estimateGas: {
|
estimateGas: {
|
||||||
@ -694,6 +997,11 @@ export interface P2PIX extends BaseContract {
|
|||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<BigNumber>;
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
allowedERC20s(
|
||||||
|
arg0: PromiseOrValue<string>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
cancelDeposit(
|
cancelDeposit(
|
||||||
depositID: PromiseOrValue<BigNumberish>,
|
depositID: PromiseOrValue<BigNumberish>,
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
@ -705,6 +1013,7 @@ export interface P2PIX extends BaseContract {
|
|||||||
_token: PromiseOrValue<string>,
|
_token: PromiseOrValue<string>,
|
||||||
_amount: PromiseOrValue<BigNumberish>,
|
_amount: PromiseOrValue<BigNumberish>,
|
||||||
_pixTarget: PromiseOrValue<string>,
|
_pixTarget: PromiseOrValue<string>,
|
||||||
|
allowlistRoot: PromiseOrValue<BytesLike>,
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<BigNumber>;
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
@ -712,10 +1021,11 @@ export interface P2PIX extends BaseContract {
|
|||||||
|
|
||||||
lock(
|
lock(
|
||||||
_depositID: PromiseOrValue<BigNumberish>,
|
_depositID: PromiseOrValue<BigNumberish>,
|
||||||
_targetAddress: PromiseOrValue<string>,
|
_buyerAddress: PromiseOrValue<string>,
|
||||||
_relayerAddress: PromiseOrValue<string>,
|
_relayerTarget: PromiseOrValue<string>,
|
||||||
_relayerPremium: PromiseOrValue<BigNumberish>,
|
_relayerPremium: PromiseOrValue<BigNumberish>,
|
||||||
_amount: PromiseOrValue<BigNumberish>,
|
_amount: PromiseOrValue<BigNumberish>,
|
||||||
|
merkleProof: PromiseOrValue<BytesLike>[],
|
||||||
expiredLocks: PromiseOrValue<BytesLike>[],
|
expiredLocks: PromiseOrValue<BytesLike>[],
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<BigNumber>;
|
): Promise<BigNumber>;
|
||||||
@ -734,6 +1044,7 @@ export interface P2PIX extends BaseContract {
|
|||||||
|
|
||||||
release(
|
release(
|
||||||
lockID: PromiseOrValue<BytesLike>,
|
lockID: PromiseOrValue<BytesLike>,
|
||||||
|
_relayerTarget: PromiseOrValue<string>,
|
||||||
pixTimestamp: PromiseOrValue<BigNumberish>,
|
pixTimestamp: PromiseOrValue<BigNumberish>,
|
||||||
r: PromiseOrValue<BytesLike>,
|
r: PromiseOrValue<BytesLike>,
|
||||||
s: PromiseOrValue<BytesLike>,
|
s: PromiseOrValue<BytesLike>,
|
||||||
@ -741,16 +1052,55 @@ export interface P2PIX extends BaseContract {
|
|||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<BigNumber>;
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
reputation(overrides?: CallOverrides): Promise<BigNumber>;
|
||||||
|
|
||||||
|
sellerAllowList(
|
||||||
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
setDefaultLockBlocks(
|
||||||
|
_blocks: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
setOwner(
|
setOwner(
|
||||||
newOwner: PromiseOrValue<string>,
|
newOwner: PromiseOrValue<string>,
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<BigNumber>;
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
setReputation(
|
||||||
|
_reputation: PromiseOrValue<string>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
setRoot(
|
||||||
|
addr: PromiseOrValue<string>,
|
||||||
|
merkleroot: PromiseOrValue<BytesLike>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
setValidSigners(
|
||||||
|
_validSigners: PromiseOrValue<string>[],
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
tokenSettings(
|
||||||
|
_tokens: PromiseOrValue<string>[],
|
||||||
|
_states: PromiseOrValue<boolean>[],
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
unlockExpired(
|
unlockExpired(
|
||||||
lockIDs: PromiseOrValue<BytesLike>[],
|
lockIDs: PromiseOrValue<BytesLike>[],
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<BigNumber>;
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
|
userRecord(
|
||||||
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<BigNumber>;
|
||||||
|
|
||||||
validBacenSigners(
|
validBacenSigners(
|
||||||
arg0: PromiseOrValue<BigNumberish>,
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
@ -773,6 +1123,11 @@ export interface P2PIX extends BaseContract {
|
|||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
): Promise<PopulatedTransaction>;
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
allowedERC20s(
|
||||||
|
arg0: PromiseOrValue<string>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
cancelDeposit(
|
cancelDeposit(
|
||||||
depositID: PromiseOrValue<BigNumberish>,
|
depositID: PromiseOrValue<BigNumberish>,
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
@ -784,6 +1139,7 @@ export interface P2PIX extends BaseContract {
|
|||||||
_token: PromiseOrValue<string>,
|
_token: PromiseOrValue<string>,
|
||||||
_amount: PromiseOrValue<BigNumberish>,
|
_amount: PromiseOrValue<BigNumberish>,
|
||||||
_pixTarget: PromiseOrValue<string>,
|
_pixTarget: PromiseOrValue<string>,
|
||||||
|
allowlistRoot: PromiseOrValue<BytesLike>,
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<PopulatedTransaction>;
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
@ -791,10 +1147,11 @@ export interface P2PIX extends BaseContract {
|
|||||||
|
|
||||||
lock(
|
lock(
|
||||||
_depositID: PromiseOrValue<BigNumberish>,
|
_depositID: PromiseOrValue<BigNumberish>,
|
||||||
_targetAddress: PromiseOrValue<string>,
|
_buyerAddress: PromiseOrValue<string>,
|
||||||
_relayerAddress: PromiseOrValue<string>,
|
_relayerTarget: PromiseOrValue<string>,
|
||||||
_relayerPremium: PromiseOrValue<BigNumberish>,
|
_relayerPremium: PromiseOrValue<BigNumberish>,
|
||||||
_amount: PromiseOrValue<BigNumberish>,
|
_amount: PromiseOrValue<BigNumberish>,
|
||||||
|
merkleProof: PromiseOrValue<BytesLike>[],
|
||||||
expiredLocks: PromiseOrValue<BytesLike>[],
|
expiredLocks: PromiseOrValue<BytesLike>[],
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<PopulatedTransaction>;
|
): Promise<PopulatedTransaction>;
|
||||||
@ -813,6 +1170,7 @@ export interface P2PIX extends BaseContract {
|
|||||||
|
|
||||||
release(
|
release(
|
||||||
lockID: PromiseOrValue<BytesLike>,
|
lockID: PromiseOrValue<BytesLike>,
|
||||||
|
_relayerTarget: PromiseOrValue<string>,
|
||||||
pixTimestamp: PromiseOrValue<BigNumberish>,
|
pixTimestamp: PromiseOrValue<BigNumberish>,
|
||||||
r: PromiseOrValue<BytesLike>,
|
r: PromiseOrValue<BytesLike>,
|
||||||
s: PromiseOrValue<BytesLike>,
|
s: PromiseOrValue<BytesLike>,
|
||||||
@ -820,16 +1178,55 @@ export interface P2PIX extends BaseContract {
|
|||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<PopulatedTransaction>;
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
reputation(overrides?: CallOverrides): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
sellerAllowList(
|
||||||
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
setDefaultLockBlocks(
|
||||||
|
_blocks: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
setOwner(
|
setOwner(
|
||||||
newOwner: PromiseOrValue<string>,
|
newOwner: PromiseOrValue<string>,
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<PopulatedTransaction>;
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
setReputation(
|
||||||
|
_reputation: PromiseOrValue<string>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
setRoot(
|
||||||
|
addr: PromiseOrValue<string>,
|
||||||
|
merkleroot: PromiseOrValue<BytesLike>,
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
setValidSigners(
|
||||||
|
_validSigners: PromiseOrValue<string>[],
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
tokenSettings(
|
||||||
|
_tokens: PromiseOrValue<string>[],
|
||||||
|
_states: PromiseOrValue<boolean>[],
|
||||||
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
unlockExpired(
|
unlockExpired(
|
||||||
lockIDs: PromiseOrValue<BytesLike>[],
|
lockIDs: PromiseOrValue<BytesLike>[],
|
||||||
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
overrides?: Overrides & { from?: PromiseOrValue<string> }
|
||||||
): Promise<PopulatedTransaction>;
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
|
userRecord(
|
||||||
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
|
overrides?: CallOverrides
|
||||||
|
): Promise<PopulatedTransaction>;
|
||||||
|
|
||||||
validBacenSigners(
|
validBacenSigners(
|
||||||
arg0: PromiseOrValue<BigNumberish>,
|
arg0: PromiseOrValue<BigNumberish>,
|
||||||
overrides?: CallOverrides
|
overrides?: CallOverrides
|
||||||
|
@ -1,116 +1,116 @@
|
|||||||
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
|
// import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
|
||||||
import { expect } from "chai";
|
// import { expect } from "chai";
|
||||||
import { ethers } from "hardhat";
|
// import { ethers } from "hardhat";
|
||||||
|
|
||||||
import { MockToken, P2PIX } from "../src/types";
|
// import { MockToken, P2PIX } from "../src/types";
|
||||||
|
|
||||||
describe("P2PIX deposit test", () => {
|
// describe("P2PIX deposit test", () => {
|
||||||
let owner: SignerWithAddress;
|
// let owner: SignerWithAddress;
|
||||||
let wallet2: SignerWithAddress;
|
// let wallet2: SignerWithAddress;
|
||||||
// let wallet3: SignerWithAddress;
|
// // let wallet3: SignerWithAddress;
|
||||||
// let wallet4: SignerWithAddress;
|
// // let wallet4: SignerWithAddress;
|
||||||
let p2pix: P2PIX; // Contract instance
|
// let p2pix: P2PIX; // Contract instance
|
||||||
let erc20: MockToken; // Token instance
|
// let erc20: MockToken; // Token instance
|
||||||
|
|
||||||
it("Will deploy contracts", async () => {
|
// it("Will deploy contracts", async () => {
|
||||||
[owner, wallet2 /* wallet3, wallet4 */] =
|
// [owner, wallet2 /* wallet3, wallet4 */] =
|
||||||
await ethers.getSigners();
|
// await ethers.getSigners();
|
||||||
|
|
||||||
const ERC20Factory = await ethers.getContractFactory(
|
// const ERC20Factory = await ethers.getContractFactory(
|
||||||
"MockToken",
|
// "MockToken",
|
||||||
);
|
// );
|
||||||
erc20 = await ERC20Factory.deploy(
|
// erc20 = await ERC20Factory.deploy(
|
||||||
ethers.utils.parseEther("20000000"),
|
// ethers.utils.parseEther("20000000"),
|
||||||
);
|
// );
|
||||||
await erc20.deployed();
|
// await erc20.deployed();
|
||||||
|
|
||||||
// Check initial balance
|
// // Check initial balance
|
||||||
expect(await erc20.balanceOf(owner.address)).to.equal(
|
// expect(await erc20.balanceOf(owner.address)).to.equal(
|
||||||
ethers.utils.parseEther("20000000"),
|
// ethers.utils.parseEther("20000000"),
|
||||||
);
|
// );
|
||||||
|
|
||||||
const P2PIX = await ethers.getContractFactory("P2PIX");
|
// const P2PIX = await ethers.getContractFactory("P2PIX");
|
||||||
p2pix = await P2PIX.deploy(2, [
|
// p2pix = await P2PIX.deploy(2, [
|
||||||
owner.address,
|
// owner.address,
|
||||||
wallet2.address,
|
// wallet2.address,
|
||||||
]);
|
// ]);
|
||||||
await p2pix.deployed();
|
// await p2pix.deployed();
|
||||||
|
|
||||||
const ownerKey = await p2pix._castAddrToKey(owner.address);
|
// const ownerKey = await p2pix._castAddrToKey(owner.address);
|
||||||
const wallet2Key = await p2pix._castAddrToKey(wallet2.address);
|
// const wallet2Key = await p2pix._castAddrToKey(wallet2.address);
|
||||||
|
|
||||||
// Verify values at deployment
|
// // Verify values at deployment
|
||||||
expect(
|
// expect(
|
||||||
await p2pix.callStatic.validBacenSigners(ownerKey),
|
// await p2pix.callStatic.validBacenSigners(ownerKey),
|
||||||
).to.equal(true);
|
// ).to.equal(true);
|
||||||
expect(
|
// expect(
|
||||||
await p2pix.validBacenSigners(wallet2Key),
|
// await p2pix.validBacenSigners(wallet2Key),
|
||||||
).to.equal(true);
|
// ).to.equal(true);
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should allow create a deposit", async () => {
|
// it("Should allow create a deposit", async () => {
|
||||||
let transaction = await erc20.approve(
|
// let transaction = await erc20.approve(
|
||||||
p2pix.address,
|
// p2pix.address,
|
||||||
ethers.utils.parseEther("2000"),
|
// ethers.utils.parseEther("2000"),
|
||||||
);
|
// );
|
||||||
await expect(transaction)
|
// await expect(transaction)
|
||||||
.to.emit(erc20, "Approval")
|
// .to.emit(erc20, "Approval")
|
||||||
.withArgs(
|
// .withArgs(
|
||||||
owner.address,
|
// owner.address,
|
||||||
p2pix.address,
|
// p2pix.address,
|
||||||
ethers.utils.parseEther("2000"),
|
// ethers.utils.parseEther("2000"),
|
||||||
);
|
// );
|
||||||
|
|
||||||
transaction = await p2pix.deposit(
|
// transaction = await p2pix.deposit(
|
||||||
erc20.address,
|
// erc20.address,
|
||||||
ethers.utils.parseEther("1000"),
|
// ethers.utils.parseEther("1000"),
|
||||||
"SELLER PIX KEY",
|
// "SELLER PIX KEY",
|
||||||
// { value: ethers.utils.parseEther("0.1") },
|
// // { value: ethers.utils.parseEther("0.1") },
|
||||||
);
|
// );
|
||||||
await expect(transaction)
|
// await expect(transaction)
|
||||||
.to.emit(p2pix, "DepositAdded")
|
// .to.emit(p2pix, "DepositAdded")
|
||||||
.withArgs(
|
// .withArgs(
|
||||||
owner.address,
|
// owner.address,
|
||||||
0,
|
// 0,
|
||||||
erc20.address,
|
// erc20.address,
|
||||||
// ethers.utils.parseEther("0.1"),
|
// // ethers.utils.parseEther("0.1"),
|
||||||
ethers.utils.parseEther("1000"),
|
// ethers.utils.parseEther("1000"),
|
||||||
);
|
// );
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should allow create second deposit", async () => {
|
// it("Should allow create second deposit", async () => {
|
||||||
const transaction = await p2pix.deposit(
|
// const transaction = await p2pix.deposit(
|
||||||
erc20.address,
|
// erc20.address,
|
||||||
ethers.utils.parseEther("1000"),
|
// ethers.utils.parseEther("1000"),
|
||||||
"SELLER PIX KEY",
|
// "SELLER PIX KEY",
|
||||||
// { value: ethers.utils.parseEther("0.1") },
|
// // { value: ethers.utils.parseEther("0.1") },
|
||||||
);
|
// );
|
||||||
await expect(transaction)
|
// await expect(transaction)
|
||||||
.to.emit(p2pix, "DepositAdded")
|
// .to.emit(p2pix, "DepositAdded")
|
||||||
.withArgs(
|
// .withArgs(
|
||||||
owner.address,
|
// owner.address,
|
||||||
1,
|
// 1,
|
||||||
erc20.address,
|
// erc20.address,
|
||||||
// ethers.utils.parseEther("0.1"),
|
// // ethers.utils.parseEther("0.1"),
|
||||||
ethers.utils.parseEther("1000"),
|
// ethers.utils.parseEther("1000"),
|
||||||
);
|
// );
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should allow cancel first deposit", async () => {
|
// it("Should allow cancel first deposit", async () => {
|
||||||
const transaction = await p2pix.cancelDeposit(0);
|
// const transaction = await p2pix.cancelDeposit(0);
|
||||||
await expect(transaction)
|
// await expect(transaction)
|
||||||
.to.emit(p2pix, "DepositClosed")
|
// .to.emit(p2pix, "DepositClosed")
|
||||||
.withArgs(owner.address, 0);
|
// .withArgs(owner.address, 0);
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should allow withdraw the deposit", async () => {
|
// it("Should allow withdraw the deposit", async () => {
|
||||||
const transaction = await p2pix.withdraw(0, []);
|
// const transaction = await p2pix.withdraw(0, []);
|
||||||
await expect(transaction)
|
// await expect(transaction)
|
||||||
.to.emit(p2pix, "DepositWithdrawn")
|
// .to.emit(p2pix, "DepositWithdrawn")
|
||||||
.withArgs(
|
// .withArgs(
|
||||||
owner.address,
|
// owner.address,
|
||||||
0,
|
// 0,
|
||||||
ethers.utils.parseEther("1000"),
|
// ethers.utils.parseEther("1000"),
|
||||||
);
|
// );
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
|
@ -1,305 +1,305 @@
|
|||||||
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
|
// import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
|
||||||
import { expect } from "chai";
|
// import { expect } from "chai";
|
||||||
import { ethers, network } from "hardhat";
|
// import { ethers, network } from "hardhat";
|
||||||
import { P2PixErrors } from "./utils/errors";
|
// import { P2PixErrors } from "./utils/errors";
|
||||||
|
|
||||||
import { MockToken, P2PIX } from "../src/types";
|
// import { MockToken, P2PIX } from "../src/types";
|
||||||
|
|
||||||
describe("P2PIX deposit test", () => {
|
// describe("P2PIX deposit test", () => {
|
||||||
let owner: SignerWithAddress;
|
// let owner: SignerWithAddress;
|
||||||
let wallet2: SignerWithAddress;
|
// let wallet2: SignerWithAddress;
|
||||||
let wallet3: SignerWithAddress;
|
// let wallet3: SignerWithAddress;
|
||||||
// let wallet4: SignerWithAddress;
|
// // let wallet4: SignerWithAddress;
|
||||||
let p2pix: P2PIX; // Contract instance
|
// let p2pix: P2PIX; // Contract instance
|
||||||
let erc20: MockToken; // Token instance
|
// let erc20: MockToken; // Token instance
|
||||||
let lockID: string;
|
// let lockID: string;
|
||||||
|
|
||||||
it("Will deploy contracts", async () => {
|
// it("Will deploy contracts", async () => {
|
||||||
[owner, wallet2, wallet3 /* , wallet4 */] =
|
// [owner, wallet2, wallet3 /* , wallet4 */] =
|
||||||
await ethers.getSigners();
|
// await ethers.getSigners();
|
||||||
|
|
||||||
const ERC20Factory = await ethers.getContractFactory(
|
// const ERC20Factory = await ethers.getContractFactory(
|
||||||
"MockToken",
|
// "MockToken",
|
||||||
);
|
// );
|
||||||
erc20 = await ERC20Factory.deploy(
|
// erc20 = await ERC20Factory.deploy(
|
||||||
ethers.utils.parseEther("20000000"),
|
// ethers.utils.parseEther("20000000"),
|
||||||
);
|
// );
|
||||||
await erc20.deployed();
|
// await erc20.deployed();
|
||||||
|
|
||||||
// Check initial balance
|
// // Check initial balance
|
||||||
expect(await erc20.balanceOf(owner.address)).to.equal(
|
// expect(await erc20.balanceOf(owner.address)).to.equal(
|
||||||
ethers.utils.parseEther("20000000"),
|
// ethers.utils.parseEther("20000000"),
|
||||||
);
|
// );
|
||||||
|
|
||||||
const P2PIX = await ethers.getContractFactory("P2PIX");
|
// const P2PIX = await ethers.getContractFactory("P2PIX");
|
||||||
p2pix = await P2PIX.deploy(3, [
|
// p2pix = await P2PIX.deploy(3, [
|
||||||
owner.address,
|
// owner.address,
|
||||||
wallet2.address,
|
// wallet2.address,
|
||||||
]);
|
// ]);
|
||||||
await p2pix.deployed();
|
// await p2pix.deployed();
|
||||||
|
|
||||||
const ownerKey = await p2pix._castAddrToKey(owner.address);
|
// const ownerKey = await p2pix._castAddrToKey(owner.address);
|
||||||
const wallet2key = await p2pix._castAddrToKey(wallet2.address);
|
// const wallet2key = await p2pix._castAddrToKey(wallet2.address);
|
||||||
const wallet3key = await p2pix._castAddrToKey(wallet3.address);
|
// const wallet3key = await p2pix._castAddrToKey(wallet3.address);
|
||||||
|
|
||||||
// Verify values at deployment
|
// // Verify values at deployment
|
||||||
expect(
|
// expect(
|
||||||
await p2pix.validBacenSigners(ownerKey),
|
// await p2pix.validBacenSigners(ownerKey),
|
||||||
).to.equal(true);
|
// ).to.equal(true);
|
||||||
expect(
|
// expect(
|
||||||
await p2pix.validBacenSigners(wallet2key),
|
// await p2pix.validBacenSigners(wallet2key),
|
||||||
).to.equal(true);
|
// ).to.equal(true);
|
||||||
expect(
|
// expect(
|
||||||
await p2pix.validBacenSigners(wallet3key),
|
// await p2pix.validBacenSigners(wallet3key),
|
||||||
).to.equal(false);
|
// ).to.equal(false);
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should allow create a deposit", async () => {
|
// it("Should allow create a deposit", async () => {
|
||||||
let transaction = await erc20.approve(
|
// let transaction = await erc20.approve(
|
||||||
p2pix.address,
|
// p2pix.address,
|
||||||
ethers.utils.parseEther("1000"),
|
// ethers.utils.parseEther("1000"),
|
||||||
);
|
// );
|
||||||
await expect(transaction)
|
// await expect(transaction)
|
||||||
.to.emit(erc20, "Approval")
|
// .to.emit(erc20, "Approval")
|
||||||
.withArgs(
|
// .withArgs(
|
||||||
owner.address,
|
// owner.address,
|
||||||
p2pix.address,
|
// p2pix.address,
|
||||||
ethers.utils.parseEther("1000"),
|
// ethers.utils.parseEther("1000"),
|
||||||
);
|
// );
|
||||||
transaction = await p2pix.deposit(
|
// transaction = await p2pix.deposit(
|
||||||
erc20.address,
|
// erc20.address,
|
||||||
ethers.utils.parseEther("1000"),
|
// ethers.utils.parseEther("1000"),
|
||||||
"SELLER PIX KEY",
|
// "SELLER PIX KEY",
|
||||||
// { value: ethers.utils.parseEther("0.1") },
|
// // { value: ethers.utils.parseEther("0.1") },
|
||||||
);
|
// );
|
||||||
await expect(transaction)
|
// await expect(transaction)
|
||||||
.to.emit(p2pix, "DepositAdded")
|
// .to.emit(p2pix, "DepositAdded")
|
||||||
.withArgs(
|
// .withArgs(
|
||||||
owner.address,
|
// owner.address,
|
||||||
0,
|
// 0,
|
||||||
erc20.address,
|
// erc20.address,
|
||||||
// ethers.utils.parseEther("0.1"),
|
// // ethers.utils.parseEther("0.1"),
|
||||||
ethers.utils.parseEther("1000"),
|
// ethers.utils.parseEther("1000"),
|
||||||
);
|
// );
|
||||||
console.log(
|
// console.log(
|
||||||
"GAS USED:",
|
// "GAS USED:",
|
||||||
(await transaction.wait()).cumulativeGasUsed.toString(),
|
// (await transaction.wait()).cumulativeGasUsed.toString(),
|
||||||
);
|
// );
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should allow create a new lock", async () => {
|
// it("Should allow create a new lock", async () => {
|
||||||
const transaction = await p2pix
|
// const transaction = await p2pix
|
||||||
.connect(wallet3)
|
// .connect(wallet3)
|
||||||
.lock(
|
// .lock(
|
||||||
0,
|
// 0,
|
||||||
wallet3.address,
|
// wallet3.address,
|
||||||
ethers.constants.AddressZero,
|
// ethers.constants.AddressZero,
|
||||||
"0",
|
// "0",
|
||||||
ethers.utils.parseEther("100"),
|
// ethers.utils.parseEther("100"),
|
||||||
[],
|
// [],
|
||||||
);
|
// );
|
||||||
lockID = ethers.utils.solidityKeccak256(
|
// lockID = ethers.utils.solidityKeccak256(
|
||||||
["uint256", "uint256", "address"],
|
// ["uint256", "uint256", "address"],
|
||||||
[0, ethers.utils.parseEther("100"), wallet3.address],
|
// [0, ethers.utils.parseEther("100"), wallet3.address],
|
||||||
);
|
// );
|
||||||
await expect(transaction)
|
// await expect(transaction)
|
||||||
.to.emit(p2pix, "LockAdded")
|
// .to.emit(p2pix, "LockAdded")
|
||||||
.withArgs(
|
// .withArgs(
|
||||||
wallet3.address,
|
// wallet3.address,
|
||||||
lockID,
|
// lockID,
|
||||||
0,
|
// 0,
|
||||||
ethers.utils.parseEther("100"),
|
// ethers.utils.parseEther("100"),
|
||||||
);
|
// );
|
||||||
console.log(
|
// console.log(
|
||||||
"GAS USED:",
|
// "GAS USED:",
|
||||||
(await transaction.wait()).cumulativeGasUsed.toString(),
|
// (await transaction.wait()).cumulativeGasUsed.toString(),
|
||||||
);
|
// );
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should release the locked amount to the buyer", async () => {
|
// it("Should release the locked amount to the buyer", async () => {
|
||||||
const endtoendID = "123";
|
// const endtoendID = "123";
|
||||||
const messageToSign = ethers.utils.solidityKeccak256(
|
// const messageToSign = ethers.utils.solidityKeccak256(
|
||||||
["string", "uint256", "uint256"],
|
// ["string", "uint256", "uint256"],
|
||||||
[
|
// [
|
||||||
"SELLER PIX KEY",
|
// "SELLER PIX KEY",
|
||||||
ethers.utils.parseEther("100"),
|
// ethers.utils.parseEther("100"),
|
||||||
endtoendID,
|
// endtoendID,
|
||||||
],
|
// ],
|
||||||
);
|
// );
|
||||||
// Note: messageToSign is a string, that is 66-bytes long, to sign the
|
// // Note: messageToSign is a string, that is 66-bytes long, to sign the
|
||||||
// binary value, we must convert it to the 32 byte Array that
|
// // binary value, we must convert it to the 32 byte Array that
|
||||||
// the string represents
|
// // the string represents
|
||||||
//
|
// //
|
||||||
// i.e.
|
// // i.e.
|
||||||
// // 66-byte string
|
// // // 66-byte string
|
||||||
// "0x592fa743889fc7f92ac2a37bb1f5ba1daf2a5c84741ca0e0061d243a2e6707ba"
|
// // "0x592fa743889fc7f92ac2a37bb1f5ba1daf2a5c84741ca0e0061d243a2e6707ba"
|
||||||
// ... vs ...
|
// // ... vs ...
|
||||||
// // 32 entry Uint8Array
|
// // // 32 entry Uint8Array
|
||||||
// [ 89, 47, 167, 67, 136, 159, ... 103, 7, 186]
|
// // [ 89, 47, 167, 67, 136, 159, ... 103, 7, 186]
|
||||||
const messageHashBytes =
|
// const messageHashBytes =
|
||||||
ethers.utils.arrayify(messageToSign);
|
// ethers.utils.arrayify(messageToSign);
|
||||||
// Sign the string message
|
// // Sign the string message
|
||||||
const flatSig = await owner.signMessage(messageHashBytes);
|
// const flatSig = await owner.signMessage(messageHashBytes);
|
||||||
// For Solidity, we need the expanded-format of a signature
|
// // For Solidity, we need the expanded-format of a signature
|
||||||
const sig = ethers.utils.splitSignature(flatSig);
|
// const sig = ethers.utils.splitSignature(flatSig);
|
||||||
const transaction = await p2pix
|
// const transaction = await p2pix
|
||||||
.connect(wallet3)
|
// .connect(wallet3)
|
||||||
.release(lockID, endtoendID, sig.r, sig.s, sig.v);
|
// .release(lockID, endtoendID, sig.r, sig.s, sig.v);
|
||||||
await expect(transaction)
|
// await expect(transaction)
|
||||||
.to.emit(p2pix, "LockReleased")
|
// .to.emit(p2pix, "LockReleased")
|
||||||
.withArgs(wallet3.address, lockID);
|
// .withArgs(wallet3.address, lockID);
|
||||||
console.log(
|
// console.log(
|
||||||
"GAS USED:",
|
// "GAS USED:",
|
||||||
(await transaction.wait()).cumulativeGasUsed.toString(),
|
// (await transaction.wait()).cumulativeGasUsed.toString(),
|
||||||
);
|
// );
|
||||||
expect(await erc20.balanceOf(wallet3.address)).to.equal(
|
// expect(await erc20.balanceOf(wallet3.address)).to.equal(
|
||||||
ethers.utils.parseEther("100"),
|
// ethers.utils.parseEther("100"),
|
||||||
);
|
// );
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should allow recreate same lock", async () => {
|
// it("Should allow recreate same lock", async () => {
|
||||||
const transaction = await p2pix
|
// const transaction = await p2pix
|
||||||
.connect(wallet3)
|
// .connect(wallet3)
|
||||||
.lock(
|
// .lock(
|
||||||
0,
|
// 0,
|
||||||
wallet3.address,
|
// wallet3.address,
|
||||||
ethers.constants.AddressZero,
|
// ethers.constants.AddressZero,
|
||||||
"0",
|
// "0",
|
||||||
ethers.utils.parseEther("100"),
|
// ethers.utils.parseEther("100"),
|
||||||
[],
|
// [],
|
||||||
);
|
// );
|
||||||
lockID = ethers.utils.solidityKeccak256(
|
// lockID = ethers.utils.solidityKeccak256(
|
||||||
["uint256", "uint256", "address"],
|
// ["uint256", "uint256", "address"],
|
||||||
[0, ethers.utils.parseEther("100"), wallet3.address],
|
// [0, ethers.utils.parseEther("100"), wallet3.address],
|
||||||
);
|
// );
|
||||||
await expect(transaction)
|
// await expect(transaction)
|
||||||
.to.emit(p2pix, "LockAdded")
|
// .to.emit(p2pix, "LockAdded")
|
||||||
.withArgs(
|
// .withArgs(
|
||||||
wallet3.address,
|
// wallet3.address,
|
||||||
lockID,
|
// lockID,
|
||||||
0,
|
// 0,
|
||||||
ethers.utils.parseEther("100"),
|
// ethers.utils.parseEther("100"),
|
||||||
);
|
// );
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should prevent create again same lock", async () => {
|
// it("Should prevent create again same lock", async () => {
|
||||||
await expect(
|
// await expect(
|
||||||
p2pix
|
// p2pix
|
||||||
.connect(wallet3)
|
// .connect(wallet3)
|
||||||
.lock(
|
// .lock(
|
||||||
0,
|
// 0,
|
||||||
wallet3.address,
|
// wallet3.address,
|
||||||
ethers.constants.AddressZero,
|
// ethers.constants.AddressZero,
|
||||||
"0",
|
// "0",
|
||||||
ethers.utils.parseEther("100"),
|
// ethers.utils.parseEther("100"),
|
||||||
[],
|
// [],
|
||||||
),
|
// ),
|
||||||
).to.be.revertedWithCustomError(p2pix, P2PixErrors.NotExpired);
|
// ).to.be.revertedWithCustomError(p2pix, P2PixErrors.NotExpired);
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should release the locked amount to the buyer", async () => {
|
// it("Should release the locked amount to the buyer", async () => {
|
||||||
const endtoendID = "124";
|
// const endtoendID = "124";
|
||||||
const messageToSign = ethers.utils.solidityKeccak256(
|
// const messageToSign = ethers.utils.solidityKeccak256(
|
||||||
["string", "uint256", "uint256"],
|
// ["string", "uint256", "uint256"],
|
||||||
[
|
// [
|
||||||
"SELLER PIX KEY",
|
// "SELLER PIX KEY",
|
||||||
ethers.utils.parseEther("100"),
|
// ethers.utils.parseEther("100"),
|
||||||
endtoendID,
|
// endtoendID,
|
||||||
],
|
// ],
|
||||||
);
|
// );
|
||||||
const messageHashBytes =
|
// const messageHashBytes =
|
||||||
ethers.utils.arrayify(messageToSign);
|
// ethers.utils.arrayify(messageToSign);
|
||||||
const flatSig = await owner.signMessage(messageHashBytes);
|
// const flatSig = await owner.signMessage(messageHashBytes);
|
||||||
const sig = ethers.utils.splitSignature(flatSig);
|
// const sig = ethers.utils.splitSignature(flatSig);
|
||||||
await p2pix
|
// await p2pix
|
||||||
.connect(wallet3)
|
// .connect(wallet3)
|
||||||
.release(lockID, endtoendID, sig.r, sig.s, sig.v);
|
// .release(lockID, endtoendID, sig.r, sig.s, sig.v);
|
||||||
expect(await erc20.balanceOf(wallet3.address)).to.equal(
|
// expect(await erc20.balanceOf(wallet3.address)).to.equal(
|
||||||
ethers.utils.parseEther("200"),
|
// ethers.utils.parseEther("200"),
|
||||||
);
|
// );
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should prevent release again the lock", async () => {
|
// it("Should prevent release again the lock", async () => {
|
||||||
const endtoendID = "125";
|
// const endtoendID = "125";
|
||||||
const messageToSign = ethers.utils.solidityKeccak256(
|
// const messageToSign = ethers.utils.solidityKeccak256(
|
||||||
["string", "uint256", "uint256"],
|
// ["string", "uint256", "uint256"],
|
||||||
[
|
// [
|
||||||
"SELLER PIX KEY",
|
// "SELLER PIX KEY",
|
||||||
ethers.utils.parseEther("100"),
|
// ethers.utils.parseEther("100"),
|
||||||
endtoendID,
|
// endtoendID,
|
||||||
],
|
// ],
|
||||||
);
|
// );
|
||||||
const messageHashBytes =
|
// const messageHashBytes =
|
||||||
ethers.utils.arrayify(messageToSign);
|
// ethers.utils.arrayify(messageToSign);
|
||||||
const flatSig = await owner.signMessage(messageHashBytes);
|
// const flatSig = await owner.signMessage(messageHashBytes);
|
||||||
const sig = ethers.utils.splitSignature(flatSig);
|
// const sig = ethers.utils.splitSignature(flatSig);
|
||||||
await expect(
|
// await expect(
|
||||||
p2pix
|
// p2pix
|
||||||
.connect(wallet3)
|
// .connect(wallet3)
|
||||||
.release(lockID, endtoendID, sig.r, sig.s, sig.v),
|
// .release(lockID, endtoendID, sig.r, sig.s, sig.v),
|
||||||
).to.be.revertedWithCustomError(p2pix, P2PixErrors.AlreadyReleased);
|
// ).to.be.revertedWithCustomError(p2pix, P2PixErrors.AlreadyReleased);
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should prevent create a 900 lock", async () => {
|
// it("Should prevent create a 900 lock", async () => {
|
||||||
await expect(
|
// await expect(
|
||||||
p2pix
|
// p2pix
|
||||||
.connect(wallet3)
|
// .connect(wallet3)
|
||||||
.lock(
|
// .lock(
|
||||||
0,
|
// 0,
|
||||||
wallet3.address,
|
// wallet3.address,
|
||||||
ethers.constants.AddressZero,
|
// ethers.constants.AddressZero,
|
||||||
"0",
|
// "0",
|
||||||
ethers.utils.parseEther("900"),
|
// ethers.utils.parseEther("900"),
|
||||||
[],
|
// [],
|
||||||
),
|
// ),
|
||||||
).to.be.revertedWithCustomError(
|
// ).to.be.revertedWithCustomError(
|
||||||
p2pix, P2PixErrors.NotEnoughTokens);
|
// p2pix, P2PixErrors.NotEnoughTokens);
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should allow recreate same lock again", async () => {
|
// it("Should allow recreate same lock again", async () => {
|
||||||
const transaction = await p2pix
|
// const transaction = await p2pix
|
||||||
.connect(wallet3)
|
// .connect(wallet3)
|
||||||
.lock(
|
// .lock(
|
||||||
0,
|
// 0,
|
||||||
wallet3.address,
|
// wallet3.address,
|
||||||
ethers.constants.AddressZero,
|
// ethers.constants.AddressZero,
|
||||||
"0",
|
// "0",
|
||||||
ethers.utils.parseEther("100"),
|
// ethers.utils.parseEther("100"),
|
||||||
[],
|
// [],
|
||||||
);
|
// );
|
||||||
lockID = ethers.utils.solidityKeccak256(
|
// lockID = ethers.utils.solidityKeccak256(
|
||||||
["uint256", "uint256", "address"],
|
// ["uint256", "uint256", "address"],
|
||||||
[0, ethers.utils.parseEther("100"), wallet3.address],
|
// [0, ethers.utils.parseEther("100"), wallet3.address],
|
||||||
);
|
// );
|
||||||
await expect(transaction)
|
// await expect(transaction)
|
||||||
.to.emit(p2pix, "LockAdded")
|
// .to.emit(p2pix, "LockAdded")
|
||||||
.withArgs(
|
// .withArgs(
|
||||||
wallet3.address,
|
// wallet3.address,
|
||||||
lockID,
|
// lockID,
|
||||||
0,
|
// 0,
|
||||||
ethers.utils.parseEther("100"),
|
// ethers.utils.parseEther("100"),
|
||||||
);
|
// );
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should allow unlock expired lock", async () => {
|
// it("Should allow unlock expired lock", async () => {
|
||||||
await expect(
|
// await expect(
|
||||||
p2pix.unlockExpired([lockID]),
|
// p2pix.unlockExpired([lockID]),
|
||||||
).to.be.revertedWithCustomError(
|
// ).to.be.revertedWithCustomError(
|
||||||
p2pix, P2PixErrors.NotExpired);
|
// p2pix, P2PixErrors.NotExpired);
|
||||||
|
|
||||||
await network.provider.send("evm_mine");
|
// await network.provider.send("evm_mine");
|
||||||
await network.provider.send("evm_mine");
|
// await network.provider.send("evm_mine");
|
||||||
await network.provider.send("evm_mine");
|
// await network.provider.send("evm_mine");
|
||||||
const transaction = await p2pix.unlockExpired([lockID]);
|
// const transaction = await p2pix.unlockExpired([lockID]);
|
||||||
await expect(transaction)
|
// await expect(transaction)
|
||||||
.to.emit(p2pix, "LockReturned")
|
// .to.emit(p2pix, "LockReturned")
|
||||||
.withArgs(wallet3.address, lockID);
|
// .withArgs(wallet3.address, lockID);
|
||||||
});
|
// });
|
||||||
|
|
||||||
it("Should prevent unlock again", async () => {
|
// it("Should prevent unlock again", async () => {
|
||||||
await expect(
|
// await expect(
|
||||||
p2pix.unlockExpired([lockID]),
|
// p2pix.unlockExpired([lockID]),
|
||||||
).to.be.revertedWithCustomError(
|
// ).to.be.revertedWithCustomError(
|
||||||
p2pix, P2PixErrors.NotExpired);
|
// p2pix, P2PixErrors.NotExpired);
|
||||||
});
|
// });
|
||||||
});
|
// });
|
Loading…
x
Reference in New Issue
Block a user