Merged V2 overriding main.

This commit is contained in:
Filipe Soccol committed 2023-01-27 19:02:56 -03:00
commit ce28faae9d
45 files changed
+2859 -1825

No files matched your search

+1 -1
View File
@@ -9,4 +9,4 @@ POLYGONSCAN_API_KEY="{INSERT_API_KEY}"
GASPRICE_API_ENDPOINT="https://api.etherscan.io/api?module=proxy&action=eth_gasPrice"
COINMARKETCAP_API_KEY="{INSERT_API_KEY}"
REPORT_GAS="true"
REPORT_GAS="true"
+17 -2
View File
@@ -18,7 +18,6 @@
│ ├── tokens
│ │ └── ERC20.sol
│ └── utils
│ ├── Counters.sol
│ ├── MerkleProofLib.sol
│ ├── ReentrancyGuard.sol
│ └── SafeTransferLib.sol
@@ -32,6 +31,7 @@
## Current Deployment addresses
### V1
| Testnet | Token Address | P2pix Address |
|--------- |-------------------------------------------- |-------------------------------------------- |
| Goerli | 0x294003F602c321627152c6b7DED3EAb5bEa853Ee | 0x5f3EFA9A90532914545CEf527C530658af87e196 |
@@ -47,6 +47,21 @@
<!-- https://mumbai.polygonscan.com/address/0x5f3EFA9A90532914545CEf527C530658af87e196#code -->
### V2
| Testnet | Token Address | P2pix Address | Reputation Address |
|--------- |-------------------------------------------- |-------------------------------------------- |-------------------------------------------- |
| Goerli | 0x4A2886EAEc931e04297ed336Cc55c4eb7C75BA00 | 0xefa5cE4351cda51192509cf8De7d8881ADAE95DD | 0x939d3c357dc7017cDbDE681BF8e552b54595318A |
| Mumbai | 0xC86042E9F2977C62Da8c9dDF7F9c40fde4796A29 | 0xA9258eBb157E4cf5e756b77FDD0DF09C2F73240b | 0x1fd30b94f20d2f73e9630261342ba68f244da92b |
<!-- All contracts deployed by 0x8dC06F985C131166570825F52447E8c88d64aE20 -->
<!-- https://goerli.etherscan.io/address/0x4A2886EAEc931e04297ed336Cc55c4eb7C75BA00#code -->
<!-- https://goerli.etherscan.io/address/0xefa5cE4351cda51192509cf8De7d8881ADAE95DD#code -->
<!-- https://goerli.etherscan.io/address/0x939d3c357dc7017cDbDE681BF8e552b54595318A#code -->
<!-- https://mumbai.polygonscan.com/address/0xC86042E9F2977C62Da8c9dDF7F9c40fde4796A29#code -->
<!-- https://mumbai.polygonscan.com/address/0xA9258eBb157E4cf5e756b77FDD0DF09C2F73240b#code -->
<!-- https://mumbai.polygonscan.com/address/0x1fd30b94f20d2f73e9630261342ba68f244da92b#code -->
## Usage
### Pre Requisites
@@ -136,4 +151,4 @@ Deploy to Polygon's Mumbai testnet:
```sh
yarn deploy1:mumbai
yarn deploy2:mumbai
```
```
@@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/7e875699b08052f41af96a3837e5d6fb.json"
"buildInfo": "../../build-info/6e32e8b8339868a5a7b642cfedb2d144.json"
}
@@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/7e875699b08052f41af96a3837e5d6fb.json"
"buildInfo": "../../build-info/6e32e8b8339868a5a7b642cfedb2d144.json"
}
@@ -18,11 +18,21 @@
"name": "AmountNotAllowed",
"type": "error"
},
{
"inputs": [],
"name": "DecOverflow",
"type": "error"
},
{
"inputs": [],
"name": "DepositAlreadyExists",
"type": "error"
},
{
"inputs": [],
"name": "EmptyPixTarget",
"type": "error"
},
{
"inputs": [],
"name": "InvalidDeposit",
@@ -48,6 +58,11 @@
"name": "LoopOverflow",
"type": "error"
},
{
"inputs": [],
"name": "MaxBalExceeded",
"type": "error"
},
{
"inputs": [],
"name": "NoTokens",
@@ -63,6 +78,11 @@
"name": "NotExpired",
"type": "error"
},
{
"inputs": [],
"name": "NotInitialized",
"type": "error"
},
{
"inputs": [],
"name": "OnlySeller",
@@ -111,12 +131,6 @@
"name": "seller",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "depositID",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
@@ -144,29 +158,10 @@
},
{
"indexed": false,
"internalType": "uint256",
"name": "depositID",
"type": "uint256"
}
],
"name": "DepositClosed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "seller",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "depositID",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
@@ -207,14 +202,14 @@
},
{
"indexed": true,
"internalType": "bytes32",
"internalType": "uint256",
"name": "lockID",
"type": "bytes32"
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "depositID",
"name": "seller",
"type": "uint256"
},
{
@@ -251,9 +246,9 @@
},
{
"indexed": false,
"internalType": "bytes32",
"internalType": "uint256",
"name": "lockId",
"type": "bytes32"
"type": "uint256"
},
{
"indexed": false,
@@ -276,9 +271,9 @@
},
{
"indexed": false,
"internalType": "bytes32",
"internalType": "uint256",
"name": "lockId",
"type": "bytes32"
"type": "uint256"
}
],
"name": "LockReturned",
@@ -316,6 +311,31 @@
"name": "RootUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "seller",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "state",
"type": "bool"
}
],
"name": "ValidSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
@@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/7e875699b08052f41af96a3837e5d6fb.json"
"buildInfo": "../../build-info/6e32e8b8339868a5a7b642cfedb2d144.json"
}
@@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/7e875699b08052f41af96a3837e5d6fb.json"
"buildInfo": "../../../../build-info/6e32e8b8339868a5a7b642cfedb2d144.json"
}
@@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/7e875699b08052f41af96a3837e5d6fb.json"
"buildInfo": "../../../../build-info/6e32e8b8339868a5a7b642cfedb2d144.json"
}
@@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/7e875699b08052f41af96a3837e5d6fb.json"
"buildInfo": "../../../../build-info/6e32e8b8339868a5a7b642cfedb2d144.json"
}
@@ -330,8 +330,8 @@
"type": "function"
}
],
"bytecode": "0x60e06040523480156200001157600080fd5b50604051620010bf380380620010bf833981016040819052620000349162000279565b6040805180820182526007815266135bd8dad0949360ca1b6020808301918252835180850190945260048452631350949360e21b908401528151919291601291620000839160009190620001d3565b50815162000099906001906020850190620001d3565b5060ff81166080524660a052620000af620000ca565b60c05250620000c391503390508262000166565b506200039b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000fe9190620002d0565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546200017a919062000374565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620001e19062000293565b90600052602060002090601f01602090048101928262000205576000855562000250565b82601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b6000602082840312156200028c57600080fd5b5051919050565b600181811c90821680620002a857607f821691505b60208210811415620002ca57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620002ed57607f831692505b60208084108214156200030e57634e487b7160e01b86526022600452602486fd5b818015620003255760018114620003375762000366565b60ff1986168952848901965062000366565b60008a81526020902060005b868110156200035e5781548b82015290850190830162000343565b505084890196505b509498975050505050505050565b600082198211156200039657634e487b7160e01b600052601160045260246000fd5b500190565b60805160a05160c051610cf4620003cb60003960006104630152600061042e015260006101540152610cf46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906108fc565b60405180910390f35b61011561011036600461096d565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610997565b610338565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e61042a565b61012e61019e3660046109d3565b60036020526000908152604090205481565b61012e6101be3660046109d3565b60056020526000908152604090205481565b6100ec610485565b6101156101e636600461096d565b610492565b6101fe6101f93660046109f5565b61050a565b005b61012e61020e366004610a68565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610ab1565b6107b1565b6000805461024b90610b7c565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610b7c565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103945761036f8382610bcd565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b038516600090815260036020526040812080548592906103bc908490610bcd565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104179087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104605761045b6107f7565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610b7c565b336000908152600360205260408120805483919083906104b3908490610bcd565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b42841015610579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b6000600161058561042a565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a08301939093Line truncated
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906108fc565b60405180910390f35b61011561011036600461096d565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610997565b610338565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e61042a565b61012e61019e3660046109d3565b60036020526000908152604090205481565b61012e6101be3660046109d3565b60056020526000908152604090205481565b6100ec610485565b6101156101e636600461096d565b610492565b6101fe6101f93660046109f5565b61050a565b005b61012e61020e366004610a68565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610ab1565b6107b1565b6000805461024b90610b7c565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610b7c565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103945761036f8382610bcd565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b038516600090815260036020526040812080548592906103bc908490610bcd565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104179087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104605761045b6107f7565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610b7c565b336000908152600360205260408120805483919083906104b3908490610bcd565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b42841015610579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b6000600161058561042a565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f19010000000000000000000000000000000000000000000000000000000000006101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156106ac573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906106e25750876001600160a01b0316816001600160a01b0316145b610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610570565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b815160005b818110156107f1576107e18482815181106107d3576107d3610be4565b602002602001015184610891565b6107ea81610bfa565b90506107b6565b50505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516108299190610c15565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546108a39190610ccf565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b818110156109295785810183015185820160400152820161090d565b8181111561093b576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461096857600080fd5b919050565b6000806040838503121561098057600080fd5b61098983610951565b946020939093013593505050565b6000806000606084860312156109ac57600080fd5b6109b584610951565b92Line truncated
"bytecode": "0x60e06040523480156200001157600080fd5b506040516200129938038062001299833981016040819052620000349162000279565b6040805180820182526007815266135bd8dad0949360ca1b6020808301918252835180850190945260048452631350949360e21b908401528151919291601291620000839160009190620001d3565b50815162000099906001906020850190620001d3565b5060ff81166080524660a052620000af620000ca565b60c05250620000c391503390508262000166565b506200039b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000fe9190620002d0565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546200017a919062000374565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620001e19062000293565b90600052602060002090601f01602090048101928262000205576000855562000250565b82601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b6000602082840312156200028c57600080fd5b5051919050565b600181811c90821680620002a857607f821691505b60208210811415620002ca57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620002ed57607f831692505b60208084108214156200030e57634e487b7160e01b86526022600452602486fd5b818015620003255760018114620003375762000366565b60ff1986168952848901965062000366565b60008a81526020902060005b868110156200035e5781548b82015290850190830162000343565b505084890196505b509498975050505050505050565b600082198211156200039657634e487b7160e01b600052601160045260246000fd5b500190565b60805160a05160c051610ece620003cb60003960006104c20152600061048d015260006101540152610ece6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906109f2565b60405180910390f35b610115610110366004610a8e565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610ab8565b610345565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e610489565b61012e61019e366004610af4565b60036020526000908152604090205481565b61012e6101be366004610af4565b60056020526000908152604090205481565b6100ec6104e4565b6101156101e6366004610a8e565b6104f1565b6101fe6101f9366004610b16565b610576565b005b61012e61020e366004610b89565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610beb565b61089a565b6000805461024b90610cd4565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610cd4565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103349086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103d9576103a78382610d57565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260408120805485929061040e908490610d57565b909155505073ffffffffffffffffffffffffffffffffffffffff808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104769087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104bf576104ba6108e0565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610cd4565b33600090815260036020526040812080548391908390610512908490610d57565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103349086815260200190565b428410156105e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b600060016105f1610489Line truncated
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906109f2565b60405180910390f35b610115610110366004610a8e565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610ab8565b610345565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e610489565b61012e61019e366004610af4565b60036020526000908152604090205481565b61012e6101be366004610af4565b60056020526000908152604090205481565b6100ec6104e4565b6101156101e6366004610a8e565b6104f1565b6101fe6101f9366004610b16565b610576565b005b61012e61020e366004610b89565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610beb565b61089a565b6000805461024b90610cd4565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610cd4565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103349086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103d9576103a78382610d57565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260408120805485929061040e908490610d57565b909155505073ffffffffffffffffffffffffffffffffffffffff808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104769087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104bf576104ba6108e0565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610cd4565b33600090815260036020526040812080548391908390610512908490610d57565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103349086815260200190565b428410156105e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b600060016105f1610489565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610743573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906107be57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e455200000000000000000000000000000000000060448201526064016105dc565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b815160005b818110156108da576108ca8482815181106108bc576108bc610d6e565b60200260200101518461097a565b6108d381610d9d565b905061089f565b50505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516109129190610dd6565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b806002600082825461098c9190610ea9565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600360209081526040Line truncated
"linkReferences": {},
"deployedLinkReferences": {}
}
@@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/7e875699b08052f41af96a3837e5d6fb.json"
"buildInfo": "../../../../build-info/6e32e8b8339868a5a7b642cfedb2d144.json"
}
@@ -1,4 +0,0 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/7e875699b08052f41af96a3837e5d6fb.json"
}
@@ -1,16 +0,0 @@
{
"_format": "hh-sol-artifact-1",
"contractName": "Counters",
"sourceName": "contracts/lib/utils/Counters.sol",
"abi": [
{
"inputs": [],
"name": "DecOverflow",
"type": "error"
}
],
"bytecode": "0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a",
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a",
"linkReferences": {},
"deployedLinkReferences": {}
}
@@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/7e875699b08052f41af96a3837e5d6fb.json"
"buildInfo": "../../../../build-info/6e32e8b8339868a5a7b642cfedb2d144.json"
}
@@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/7e875699b08052f41af96a3837e5d6fb.json"
"buildInfo": "../../../../build-info/6e32e8b8339868a5a7b642cfedb2d144.json"
}
@@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../../../build-info/7e875699b08052f41af96a3837e5d6fb.json"
"buildInfo": "../../../../build-info/6e32e8b8339868a5a7b642cfedb2d144.json"
}
+1 -1
View File
@@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "../../build-info/7e875699b08052f41af96a3837e5d6fb.json"
"buildInfo": "../../build-info/6e32e8b8339868a5a7b642cfedb2d144.json"
}
+259 -110
View File
@@ -49,11 +49,21 @@
"name": "AmountNotAllowed",
"type": "error"
},
{
"inputs": [],
"name": "DecOverflow",
"type": "error"
},
{
"inputs": [],
"name": "DepositAlreadyExists",
"type": "error"
},
{
"inputs": [],
"name": "EmptyPixTarget",
"type": "error"
},
{
"inputs": [],
"name": "InvalidDeposit",
@@ -79,6 +89,11 @@
"name": "LoopOverflow",
"type": "error"
},
{
"inputs": [],
"name": "MaxBalExceeded",
"type": "error"
},
{
"inputs": [],
"name": "NoTokens",
@@ -94,6 +109,11 @@
"name": "NotExpired",
"type": "error"
},
{
"inputs": [],
"name": "NotInitialized",
"type": "error"
},
{
"inputs": [],
"name": "OnlySeller",
@@ -147,12 +167,6 @@
"name": "seller",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "depositID",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
@@ -180,29 +194,10 @@
},
{
"indexed": false,
"internalType": "uint256",
"name": "depositID",
"type": "uint256"
}
],
"name": "DepositClosed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "seller",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "depositID",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
@@ -243,14 +238,14 @@
},
{
"indexed": true,
"internalType": "bytes32",
"internalType": "uint256",
"name": "lockID",
"type": "bytes32"
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "depositID",
"name": "seller",
"type": "uint256"
},
{
@@ -287,9 +282,9 @@
},
{
"indexed": false,
"internalType": "bytes32",
"internalType": "uint256",
"name": "lockId",
"type": "bytes32"
"type": "uint256"
},
{
"indexed": false,
@@ -312,9 +307,9 @@
},
{
"indexed": false,
"internalType": "bytes32",
"internalType": "uint256",
"name": "lockId",
"type": "bytes32"
"type": "uint256"
}
],
"name": "LockReturned",
@@ -371,6 +366,31 @@
"name": "RootUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "seller",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "state",
"type": "bool"
}
],
"name": "ValidSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
@@ -416,6 +436,25 @@
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_key",
"type": "uint256"
}
],
"name": "_castKeyToAddr",
"outputs": [
{
"internalType": "address",
"name": "_addr",
"type": "address"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
@@ -435,19 +474,6 @@
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "depositID",
"type": "uint256"
}
],
"name": "cancelDeposit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "defaultLockBlocks",
@@ -469,14 +495,19 @@
"type": "address"
},
{
"internalType": "uint256",
"internalType": "uint96",
"name": "_amount",
"type": "uint256"
"type": "uint96"
},
{
"internalType": "string",
"internalType": "uint160",
"name": "_pixTarget",
"type": "string"
"type": "uint160"
},
{
"internalType": "bool",
"name": "_valid",
"type": "bool"
},
{
"internalType": "bytes32",
@@ -485,23 +516,28 @@
}
],
"name": "deposit",
"outputs": [
{
"internalType": "uint256",
"name": "depositID",
"type": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "depositCount",
"inputs": [
{
"internalType": "address",
"name": "seller",
"type": "address"
},
{
"internalType": "contract ERC20",
"name": "token",
"type": "address"
}
],
"name": "getBalance",
"outputs": [
{
"internalType": "uint256",
"name": "_val",
"name": "bal",
"type": "uint256"
}
],
@@ -511,9 +547,86 @@
{
"inputs": [
{
"internalType": "uint256",
"name": "_depositID",
"type": "uint256"
"internalType": "address[]",
"name": "sellers",
"type": "address[]"
},
{
"internalType": "contract ERC20",
"name": "token",
"type": "address"
}
],
"name": "getBalances",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "seller",
"type": "address"
},
{
"internalType": "contract ERC20",
"name": "token",
"type": "address"
}
],
"name": "getPixTarget",
"outputs": [
{
"internalType": "uint160",
"name": "pixTarget",
"type": "uint160"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "seller",
"type": "address"
},
{
"internalType": "contract ERC20",
"name": "token",
"type": "address"
}
],
"name": "getValid",
"outputs": [
{
"internalType": "bool",
"name": "valid",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_seller",
"type": "address"
},
{
"internalType": "address",
"name": "_token",
"type": "address"
},
{
"internalType": "address",
@@ -541,56 +654,30 @@
"type": "bytes32[]"
},
{
"internalType": "bytes32[]",
"internalType": "uint256[]",
"name": "expiredLocks",
"type": "bytes32[]"
"type": "uint256[]"
}
],
"name": "lock",
"outputs": [
{
"internalType": "bytes32",
"name": "lockID",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "mapDeposits",
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "lockCounter",
"outputs": [
{
"internalType": "uint256",
"name": "remaining",
"name": "",
"type": "uint256"
},
{
"internalType": "string",
"name": "pixTarget",
"type": "string"
},
{
"internalType": "address",
"name": "seller",
"type": "address"
},
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "bool",
"name": "valid",
"type": "bool"
}
],
"stateMutability": "view",
@@ -599,16 +686,21 @@
{
"inputs": [
{
"internalType": "bytes32",
"internalType": "uint256",
"name": "",
"type": "bytes32"
"type": "uint256"
}
],
"name": "mapLocks",
"outputs": [
{
"internalType": "uint256",
"name": "depositID",
"name": "sellerKey",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "counter",
"type": "uint256"
},
{
@@ -626,6 +718,11 @@
"name": "expirationBlock",
"type": "uint256"
},
{
"internalType": "uint160",
"name": "pixTarget",
"type": "uint160"
},
{
"internalType": "address",
"name": "buyerAddress",
@@ -640,6 +737,11 @@
"internalType": "address",
"name": "relayerAddress",
"type": "address"
},
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"stateMutability": "view",
@@ -661,9 +763,9 @@
{
"inputs": [
{
"internalType": "bytes32",
"internalType": "uint256",
"name": "lockID",
"type": "bytes32"
"type": "uint256"
},
{
"internalType": "address",
@@ -728,6 +830,30 @@
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "contract ERC20",
"name": "",
"type": "address"
}
],
"name": "sellerBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
@@ -798,6 +924,24 @@
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract ERC20",
"name": "token",
"type": "address"
},
{
"internalType": "bool",
"name": "state",
"type": "bool"
}
],
"name": "setValidState",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
@@ -819,9 +963,9 @@
{
"inputs": [
{
"internalType": "bytes32[]",
"internalType": "uint256[]",
"name": "lockIDs",
"type": "bytes32[]"
"type": "uint256[]"
}
],
"name": "unlockExpired",
@@ -888,15 +1032,20 @@
},
{
"inputs": [
{
"internalType": "contract ERC20",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "depositID",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes32[]",
"internalType": "uint256[]",
"name": "expiredLocks",
"type": "bytes32[]"
"type": "uint256[]"
}
],
"name": "withdraw",
@@ -916,8 +1065,8 @@
"type": "receive"
}
],
"bytecode": "0x60806040526001805560405162002a9a38038062002a9a8339810160408190526200002a916200049d565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a3506200007685620000a3565b620000818362000133565b6200008c84620001bd565b620000988282620002a1565b505050505062000620565b6000546001600160a01b03163314620000f25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511816040516200012891815260200190565b60405180910390a150565b6000546001600160a01b031633146200017e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200162000128565b6000546001600160a01b03163314620002085760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b80516000905b808210156200026e57600062000246848481518110620002325762000232620005bb565b60200260200101516200038760201b60201c565b6000908152600660205260409020805460ff191660019081179091559290920191506200020e565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d781604051620001289190620005d1565b6000546001600160a01b03163314620002ec5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b815180620003025763df9578836000526004601cfd5b81518114620003195763ff633a386000526004601cfd5b60208301602083016020830282015b8083146200037f578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915062000328565b505050505050565b600c1b611000600160ac1b031690565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003d857620003d862000397565b604052919050565b60006001600160401b03821115620003fc57620003fc62000397565b5060051b60200190565b6001600160a01b03811681146200041c57600080fd5b50565b600082601f8301126200043157600080fd5b815160206200044a6200044483620003e0565b620003ad565b82815260059290921b840181019181810190868411156200046a57600080fd5b8286015b8481101562000492578051620004848162000406565b83529183019183016200046e565b509695505050505050565b600080600080600060a08688031215620004b657600080fd5b8551602080880151919650906001600160401b0380821115620004d857600080fd5b620004e68a838b016200041f565b965060408901519150620004fa8262000406565b6060890151919550808211156200051057600080fd5b6200051e8a838b016200041f565b945060808901519150808211156200053557600080fd5b508701601f810189136200054857600080fd5b8051620005596200044482620003e0565b81815260059190911b8201830190838101908b8311156200057957600080fd5b928401925b82841015620005a95783518015158114620005995760008081fd5b825292840192908401906200057e565b80955050505050509295509295909350565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015620006145783516001600160a01b031683529284019291840191600101620005ed565b50909695505050505050565b61246a80620006306000396000f3fe6080604052600436106101a55760003560e01c806372fada5c116100e15780638e2749d61161008a57806398a268711161006457806398a268711461056b578063c52164c61461059b578063d6e8b973146105bb578063f7d0e04b146105db57600080fd5b80638e2749d6146105045780638e2a3d36146105245780639872dbfe1461055557600080fd5b80637f94f65d116100bb5780637f94f65d1461048c5780638652b37e146104ac5780638da5cb5b146104cc57600080fd5b806372fada5c1461041f578063758d77d41461043f57806377cd38a41461045f57600080fd5b8063363179721161014e578063574983c811610128578063574983c81461039e5780635fd8c710146103be57806369cc6af4146103d35780636a1460241461040357600080fd5b80633631797214610313578063461f3120146103335780634b2ae9801461037357600080fd5b806316d722401161017f57806316d722401461023357806329cc7d10146102dc5780632dfdf0b5146102fc57600080fd5b806304937320146101b15780630d2a2d44146101f157806313af40351461021357600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101de6101cc366004611d07565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101fd57600080fd5b5061021161020c366004611e14565b6105fb565b005b34801561021f57600080fd5b5061021161022e366004611e51565b6106ec565b34801561023f57600080fd5b5061029861024e366004611d07565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391926001600160a01b03918216928216911687565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03908116608085015290811660a08401521660c082015260e0016101e8565b3480156102e857600080fd5b506101de6102f7366004611e6e565b61078d565b34801561030857600080fd5b506003546101de9081565b34801561031f57600080fd5b5061021161032e366004611f4b565b610991565b34801561033f57600080fd5b5061036361034e366004611d07565b60096020526000908152604090205460ff1681565b60405190151581526020016101e8565b34801561037f57600080fd5b506101de61038e36600461Line truncated
"deployedBytecode": "0x6080604052600436106101a55760003560e01c806372fada5c116100e15780638e2749d61161008a57806398a268711161006457806398a268711461056b578063c52164c61461059b578063d6e8b973146105bb578063f7d0e04b146105db57600080fd5b80638e2749d6146105045780638e2a3d36146105245780639872dbfe1461055557600080fd5b80637f94f65d116100bb5780637f94f65d1461048c5780638652b37e146104ac5780638da5cb5b146104cc57600080fd5b806372fada5c1461041f578063758d77d41461043f57806377cd38a41461045f57600080fd5b8063363179721161014e578063574983c811610128578063574983c81461039e5780635fd8c710146103be57806369cc6af4146103d35780636a1460241461040357600080fd5b80633631797214610313578063461f3120146103335780634b2ae9801461037357600080fd5b806316d722401161017f57806316d722401461023357806329cc7d10146102dc5780632dfdf0b5146102fc57600080fd5b806304937320146101b15780630d2a2d44146101f157806313af40351461021357600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101de6101cc366004611d07565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101fd57600080fd5b5061021161020c366004611e14565b6105fb565b005b34801561021f57600080fd5b5061021161022e366004611e51565b6106ec565b34801561023f57600080fd5b5061029861024e366004611d07565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391926001600160a01b03918216928216911687565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03908116608085015290811660a08401521660c082015260e0016101e8565b3480156102e857600080fd5b506101de6102f7366004611e6e565b61078d565b34801561030857600080fd5b506003546101de9081565b34801561031f57600080fd5b5061021161032e366004611f4b565b610991565b34801561033f57600080fd5b5061036361034e366004611d07565b60096020526000908152604090205460ff1681565b60405190151581526020016101e8565b34801561037f57600080fd5b506101de61038e366004611e51565b600c1b611000600160ac1b031690565b3480156103aa57600080fd5b506102116103b9366004611d07565b610a51565b3480156103ca57600080fd5b50610211610acf565b3480156103df57600080fd5b506103636103ee366004611e51565b600b6020526000908152604090205460ff1681565b34801561040f57600080fd5b506101de670de0b6b3a764000081565b34801561042b57600080fd5b5061021161043a366004611d07565b610b59565b34801561044b57600080fd5b5061021161045a366004611f97565b610be1565b34801561046b57600080fd5b506101de61047a366004611d07565b600a6020526000908152604090205481565b34801561049857600080fd5b506102116104a7366004611ffb565b61103a565b3480156104b857600080fd5b506101de6104c7366004612027565b6110e6565b3480156104d857600080fd5b506000546104ec906001600160a01b031681565b6040516001600160a01b0390911681526020016101e8565b34801561051057600080fd5b5061021161051f3660046120db565b611311565b34801561053057600080fd5b5061054461053f366004611d07565b611479565b6040516101e895949392919061211d565b34801561056157600080fd5b506101de60045481565b34801561057757600080fd5b50610363610586366004611d07565b60066020526000908152604090205460ff1681565b3480156105a757600080fd5b506002546104ec906001600160a01b031681565b3480156105c757600080fd5b506102116105d63660046121aa565b611543565b3480156105e757600080fd5b506102116105f6366004611e51565b61161b565b6000546001600160a01b031633146106495760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b80516000905b808210156106b057600061068984848151811061066e5761066e612274565b6020026020010151611000600160ac1b03600c9190911b1690565b6000908152600660205260409020805460ff1916600190811790915592909201915061064f565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d7816040516106e1919061228a565b60405180910390a150565b6000546001600160a01b031633146107355760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610640565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6001600160a01b0385166000908152600b6020526040812054869060ff166107e1576040517f1578328e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e96116a2565b915060006040518060a0016040528088815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252503360208201526001600160a01b038a1660408201526001606090910152905061085e6116b2565b831561086e5761086e338561103a565b600083815260076020908152604090912082518155818301518051849361089c926001850192910190611c6e565b5060408201516002820180546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff199091161790556060830151600392830180546080909501511515600160a01b027fffffffffffffffffffffff0000000000000000000000000000000000000000009095169190921617929092179091556109269080546001019055565b6109328233308a6116f6565b61093b60018055565b604080518481526001600160a01b038a16602082015290810188905233907f25ac57b911b0f66b64c294827f539545fbc3ddd002cafab117776274f3241e4c9060600160405180910390a2505095945050505050565b6109996116b2565b6109a2836117a6565b6109ac8282611311565b60008381526007602052Line truncated
"bytecode": "0x608060405260018055604051620031f9380380620031f98339810160408190526200002a9162000493565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a3506200007685620000a3565b620000818362000133565b6200008c84620001bd565b620000988282620002a1565b505050505062000616565b6000546001600160a01b03163314620000f25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b806003557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511816040516200012891815260200190565b60405180910390a150565b6000546001600160a01b031633146200017e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200162000128565b6000546001600160a01b03163314620002085760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b80516000905b808210156200026e57600062000246848481518110620002325762000232620005b1565b60200260200101516200038760201b60201c565b6000908152600860205260409020805460ff191660019081179091559290920191506200020e565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d781604051620001289190620005c7565b6000546001600160a01b03163314620002ec5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b815180620003025763df9578836000526004601cfd5b81518114620003195763ff633a386000526004601cfd5b60208301602083018260051b82015b8083146200037f578251600052600a60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915062000328565b505050505050565b600c1b90565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003ce57620003ce6200038d565b604052919050565b60006001600160401b03821115620003f257620003f26200038d565b5060051b60200190565b6001600160a01b03811681146200041257600080fd5b50565b600082601f8301126200042757600080fd5b81516020620004406200043a83620003d6565b620003a3565b82815260059290921b840181019181810190868411156200046057600080fd5b8286015b84811015620004885780516200047a81620003fc565b835291830191830162000464565b509695505050505050565b600080600080600060a08688031215620004ac57600080fd5b8551602080880151919650906001600160401b0380821115620004ce57600080fd5b620004dc8a838b0162000415565b965060408901519150620004f082620003fc565b6060890151919550808211156200050657600080fd5b620005148a838b0162000415565b945060808901519150808211156200052b57600080fd5b508701601f810189136200053e57600080fd5b80516200054f6200043a82620003d6565b81815260059190911b8201830190838101908b8311156200056f57600080fd5b928401925b828410156200059f57835180151581146200058f5760008081fd5b8252928401929084019062000574565b80955050505050509295509295909350565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156200060a5783516001600160a01b031683529284019291840191600101620005e3565b50909695505050505050565b612bd380620006266000396000f3fe6080604052600436106101dc5760003560e01c80637f94f65d11610102578063ad8f2eed11610095578063d4fac45d11610064578063d4fac45d14610713578063d6e8b9731461075e578063f7d0e04b1461077e578063fb8c5ef01461079e57600080fd5b8063ad8f2eed14610659578063b0983d3914610699578063c52164c6146106b9578063d1c07028146106e657600080fd5b80638db564c2116100d15780638db564c2146105c55780639872dbfe146105db57806398a26871146105f15780639eee8d4b1461062157600080fd5b80637f94f65d146104f257806380e1d3021461051257806384ab1d28146105525780638da5cb5b1461059857600080fd5b80634b2ae9801161017a5780636a146024116101495780636a146024146104695780636d82d9e01461048557806374ba03a0146104a557806377cd38a4146104c557600080fd5b80634b2ae980146103e3578063574983c8146104045780635fd8c7101461042457806369cc6af41461043957600080fd5b806313af4035116101b657806313af40351461026a578063328a71811461028a578063367821f0146102aa578063461f3120146103a357600080fd5b806304937320146101e85780630a98b9bd146102285780630d2a2d441461024857600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506102156102033660046123d5565b60076020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561023457600080fd5b5061021561024336600461245c565b6107be565b34801561025457600080fd5b50610268610263366004612643565b610b6d565b005b34801561027657600080fd5b50610268610285366004612680565b610ca7565b34801561029657600080fd5b506102686102a53660046126b9565b610d98565b3480156102b657600080fd5b506103376102c53660046123d5565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007870154600888015460099098015496989597949693959473ffffffffffffffffffffffffffffffffffffffff93841694928416939182169290821691168a565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925273ffffffffffffffffffffffffffffffffffffffff90811660a087015290811660c086015290811660e085015290811661010084015216Line truncated
"deployedBytecode": "0x6080604052600436106101dc5760003560e01c80637f94f65d11610102578063ad8f2eed11610095578063d4fac45d11610064578063d4fac45d14610713578063d6e8b9731461075e578063f7d0e04b1461077e578063fb8c5ef01461079e57600080fd5b8063ad8f2eed14610659578063b0983d3914610699578063c52164c6146106b9578063d1c07028146106e657600080fd5b80638db564c2116100d15780638db564c2146105c55780639872dbfe146105db57806398a26871146105f15780639eee8d4b1461062157600080fd5b80637f94f65d146104f257806380e1d3021461051257806384ab1d28146105525780638da5cb5b1461059857600080fd5b80634b2ae9801161017a5780636a146024116101495780636a146024146104695780636d82d9e01461048557806374ba03a0146104a557806377cd38a4146104c557600080fd5b80634b2ae980146103e3578063574983c8146104045780635fd8c7101461042457806369cc6af41461043957600080fd5b806313af4035116101b657806313af40351461026a578063328a71811461028a578063367821f0146102aa578063461f3120146103a357600080fd5b806304937320146101e85780630a98b9bd146102285780630d2a2d441461024857600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506102156102033660046123d5565b60076020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561023457600080fd5b5061021561024336600461245c565b6107be565b34801561025457600080fd5b50610268610263366004612643565b610b6d565b005b34801561027657600080fd5b50610268610285366004612680565b610ca7565b34801561029657600080fd5b506102686102a53660046126b9565b610d98565b3480156102b657600080fd5b506103376102c53660046123d5565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007870154600888015460099098015496989597949693959473ffffffffffffffffffffffffffffffffffffffff93841694928416939182169290821691168a565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925273ffffffffffffffffffffffffffffffffffffffff90811660a087015290811660c086015290811660e0850152908116610100840152166101208201526101400161021f565b3480156103af57600080fd5b506103d36103be3660046123d5565b60096020526000908152604090205460ff1681565b604051901515815260200161021f565b3480156103ef57600080fd5b506102156103fe366004612680565b600c1b90565b34801561041057600080fd5b5061026861041f3660046123d5565b610fd9565b34801561043057600080fd5b5061026861108f565b34801561044557600080fd5b506103d3610454366004612680565b600a6020526000908152604090205460ff1681565b34801561047557600080fd5b50610215670de0b6b3a764000081565b34801561049157600080fd5b506102686104a036600461272c565b611151565b3480156104b157600080fd5b506102686104c0366004612761565b611268565b3480156104d157600080fd5b506102156104e03660046123d5565b60066020526000908152604090205481565b3480156104fe57600080fd5b5061026861050d3660046127c5565b611747565b34801561051e57600080fd5b506103d361052d3660046127f1565b600c9190911b6000908152600b60209081526040808320938352929052205460ff1c90565b34801561055e57600080fd5b5061057361056d3660046123d5565b600c1c90565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161021f565b3480156105a457600080fd5b506000546105739073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105d157600080fd5b5061021560045481565b3480156105e757600080fd5b5061021560035481565b3480156105fd57600080fd5b506103d361060c3660046123d5565b60086020526000908152604090205460ff1681565b34801561062d57600080fd5b5061021561063c36600461282a565b600b60209081526000928352604080842090915290825290205481565b34801561066557600080fd5b506105736106743660046127f1565b600c9190911b6000908152600b602090815260408083209383529290522054605f1c90565b3480156106a557600080fd5b506102686106b436600461284f565b61180d565b3480156106c557600080fd5b506002546105739073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f257600080fd5b50610706610701366004612891565b611a50565b60405161021f91906128d8565b34801561071f57600080fd5b5061021561072e3660046127f1565b600c9190911b6000908152600b6020908152604080832093835292905220546b3fffffffffffffffffffffff1690565b34801561076a57600080fd5b5061026861077936600461291c565b611b2a565b34801561078a57600080fd5b50610268610799366004612680565b611c3a565b3480156107aa57600080fd5b506102686107b93660046129de565b611d06565b60006107c8611e02565b6107d2838361180d565b600c8b901b6000908152600b602090815260408083208d84529091529020548a9060ff1c61082c576040517fb2e532de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c8c901b6000908152600b602090815260408083208484529091529020546b3fffffffffffffffffffffff1687811015610893576040517f22bbb43c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061089f8e600c1b90565b9050600060045460016108b29190612a69565b60008181526005602052604090206004015490915043116108ff576040517fd0404f8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052808481526020018381526020018d81526020018c8152602001600354436109339190612a69565b8152602001605f600b600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c73ffffffffffffffffffffffffffffffffffffffff1681526020018f73ffffffffffffffffffffffffLine truncated
"linkReferences": {},
"deployedLinkReferences": {}
}
+15 -12
View File
@@ -2,26 +2,28 @@
pragma solidity 0.8.9;
library DataTypes {
struct Deposit {
/// @dev Remaining tokens available.
uint256 remaining;
/// @dev The PIX account for the seller receive transactions.
string pixTarget;
address seller;
/// @dev ERC20 stable token address.
address token;
/// @dev Could be invalidated by the seller.
bool valid;
}
// struct Deposit {
// /// @dev Remaining tokens available.
// uint256 remaining;
// /// @dev The PIX account for the seller receive transactions.
// string pixTarget;
// address seller;
// /// @dev ERC20 stable token address.
// address token;
// /// @dev Could be invalidated by the seller.
// bool valid;
// }
struct Lock {
uint256 depositID;
uint256 sellerKey;
uint256 counter;
/// @dev Amount to be paid for relayer.
uint256 relayerPremium;
/// @dev Amount to be tranfered via PIX.
uint256 amount;
/// @dev If not paid at this block will be expired.
uint256 expirationBlock;
uint160 pixTarget;
/// @dev Where the tokens are sent the when order gets validated.
address buyerAddress;
/// @dev Relayer's target address that receives `relayerPremium` funds.
@@ -29,5 +31,6 @@ library DataTypes {
/// @dev Relayer address (msg.sender) that facilitated this transaction.
/// @dev Reputation points accruer.
address relayerAddress;
address token;
}
}
+18 -8
View File
@@ -7,33 +7,34 @@ interface EventAndErrors {
event DepositAdded(
address indexed seller,
uint256 depositID,
// uint256 depositID,
address token,
uint256 amount
);
event DepositClosed(
event ValidSet(
address indexed seller,
uint256 depositID
address token,
bool state
);
event DepositWithdrawn(
address indexed seller,
uint256 depositID,
address token,
uint256 amount
);
event LockAdded(
address indexed buyer,
bytes32 indexed lockID,
uint256 depositID,
uint256 indexed lockID,
uint256 seller,
uint256 amount
);
event LockReleased(
address indexed buyer,
bytes32 lockId,
uint256 lockId,
uint256 amount
);
event LockReturned(
address indexed buyer,
bytes32 lockId
uint256 lockId
);
event FundsWithdrawn(
address owner,
@@ -104,4 +105,13 @@ interface EventAndErrors {
/// @dev Reverts on an expired lock.
/// @dev 0xf6fafba0
error LockExpired();
/// @dev 0xce3a3d37
error DecOverflow();
/// @dev 0xf3fb0eb9
error MaxBalExceeded();
/// @dev 0x6a3bc53e
error EmptyPixTarget();
/// @dev 0x87138d5c
error NotInitialized();
}
-52
View File
@@ -1,52 +0,0 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;
/// @title Counters
/// @author buf0t9
/// @author Modified from OpenZeppelin Contracts
/// (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol)
/// @notice Provides counters that can only be incremented, decrementedor reset.
/// @dev Include with `using Counters for Counters.Counter;`
library Counters {
// solhint-disable no-inline-assembly
struct Counter {
/// @dev Interactions must be restricted to the library's function.
uint256 _val; // := 0
}
/// @dev 0xce3a3d37
error DecOverflow();
function current(
Counter storage counter
) internal view returns (uint256 _val) {
assembly {
_val := sload(counter.slot)
}
}
function increment(Counter storage counter) internal {
assembly {
let _val := sload(counter.slot)
sstore(counter.slot, add(_val, 0x01))
}
}
function decrement(Counter storage counter) internal {
assembly {
let _val := sload(counter.slot)
if or(iszero(_val), lt(_val, 0x00)) {
mstore(0x00, 0xce3a3d37)
revert(0x1c, 0x04)
}
sstore(counter.slot, sub(_val, 0x01))
}
}
function reset(Counter storage counter) internal {
assembly {
sstore(counter.slot, 0)
}
}
}
+401 -148
View File
@@ -9,7 +9,6 @@ pragma solidity 0.8.9;
///
import { Owned } from "./lib/auth/Owned.sol";
import { Counters } from "./lib/utils/Counters.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";
@@ -24,36 +23,55 @@ contract P2PIX is
{
// solhint-disable use-forbidden-name
// solhint-disable no-inline-assembly
// solhint-disable no-empty-blocks
using Counters for Counters.Counter;
using DT for DT.Deposit;
using DT for DT.Lock;
/// ███ Constants ██████████████████████████████████████████████████████████
/// @dev The bitmask of `sellerBalance` entry.
uint256 private constant BITMASK_SB_ENTRY = (1 << 94) - 1;
/// @dev The bit position of `pixTarget` in `sellerBalance`.
uint256 private constant BITPOS_PIXTARGET = 95;
/// @dev The bit position of `valid` in `sellerBalance`.
uint256 private constant BITPOS_VALID = 255;
/// @dev The bitmask of all 256 bits of `sellerBalance` except for the last one.
uint256 private constant BITMASK_VALID = (1 << 255) - 1;
/// @dev The scalar of BRZ token.
uint256 public constant WAD = 1e18;
/// ███ Storage ████████████████████████████████████████████████████████████
IReputation public reputation;
Counters.Counter public depositCount;
// Counters.Counter public depositCount;
/// @dev Default blocks that lock will hold tokens.
uint256 public defaultLockBlocks;
/// @dev The scalar of BRZ token.
uint256 public constant WAD = 1e18;
uint256 public lockCounter;
/// @dev List of Locks.
mapping(uint256 => DT.Lock) public mapLocks;
/// @dev Seller casted to key => Seller's allowlist merkleroot.
mapping(uint256 => bytes32) public sellerAllowList;
/// @dev Stores an relayer's last computed credit.
mapping(uint256 => uint256) public userRecord;
/// @dev List of valid Bacen signature addresses
mapping(uint256 => bool) public validBacenSigners;
/// @dev Seller list of deposits
mapping(uint256 => DT.Deposit) public mapDeposits;
/// @dev List of Locks.
mapping(bytes32 => DT.Lock) public mapLocks;
/// @dev List of Pix transactions already signed.
mapping(bytes32 => bool) public 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;
// BITS LAYOUT
// `uint96` [0...94] := balance
// `uint160` [95...254] := pixTarget
// `bool` [255] := valid
/// @dev `balance` max. value = 10**26.
/// @dev `pixTarget` keys are restricted to 160 bits.
mapping(uint256 => mapping(ERC20 => uint256))
public sellerBalance;
/// ███ Constructor ████████████████████████████████████████████████████████
constructor(
@@ -76,27 +94,29 @@ contract P2PIX is
/// @dev Seller needs to send his tokens to the P2PIX smart contract.
/// @param _pixTarget Pix key destination provided by the offer's seller.
/// @param allowlistRoot Optional allow list merkleRoot update `bytes32` value.
/// @return depositID The `uint256` return value provided
/// as the deposit identifier.
/// @dev Function sighash: 0xbfe07da6.
function deposit(
address _token,
uint256 _amount,
string calldata _pixTarget,
uint96 _amount,
uint160 _pixTarget,
bool _valid,
bytes32 allowlistRoot
) public returns (uint256 depositID) {
) public {
ERC20 t = ERC20(_token);
if (!allowedERC20s[t]) revert TokenDenied();
uint256 k = _castAddrToKey(msg.sender);
(depositID) = _encodeDepositID();
if (_pixTarget == 0)
revert EmptyPixTarget();
if (!allowedERC20s[t])
revert TokenDenied();
uint256 _sellerBalance =
sellerBalance[k][t];
DT.Deposit memory d = DT.Deposit({
remaining: _amount,
pixTarget: _pixTarget,
seller: msg.sender,
token: _token,
valid: true
});
uint256 currBal =
_sellerBalance & BITMASK_SB_ENTRY;
if ((currBal + _amount) > 1e8 ether)
revert MaxBalExceeded();
setReentrancyGuard();
@@ -104,8 +124,23 @@ contract P2PIX is
setRoot(msg.sender, allowlistRoot);
}
mapDeposits[depositID] = d;
depositCount.increment();
uint256 amountCasted;
uint256 pixTargetCasted;
uint256 validCasted;
(
amountCasted,
pixTargetCasted,
validCasted
) = _castToUint(
_amount,
_pixTarget,
_valid
);
sellerBalance[k][t] =
(currBal + amountCasted) |
(pixTargetCasted << BITPOS_PIXTARGET) |
(validCasted << BITPOS_VALID);
SafeTransferLib.safeTransferFrom(
t,
@@ -117,9 +152,8 @@ contract P2PIX is
clearReentrancyGuard();
emit DepositAdded(
msg.sender,
depositID,
_token,
msg.sender,
_token,
_amount
);
}
@@ -128,14 +162,30 @@ contract P2PIX is
/// locks made to his/her token offering order.
/// @dev This function does not affect any ongoing active locks.
/// @dev Function sighash: 0x72fada5c.
function setValidState(ERC20 token, bool state) public {
uint256 key =
_castAddrToKey(msg.sender);
uint256 _sellerBalance =
sellerBalance[key][token];
if (_sellerBalance != 0) {
uint256 _valid;
assembly { _valid := state }
_sellerBalance =
(_sellerBalance & BITMASK_VALID) |
(_valid << BITPOS_VALID);
sellerBalance[key][token] =
_sellerBalance;
function cancelDeposit(uint256 depositID) public {
_onlySeller(depositID);
mapDeposits[depositID].valid = false;
emit DepositClosed(
mapDeposits[depositID].seller,
depositID
);
emit ValidSet(
msg.sender,
address(token),
state
);
} else
revert NotInitialized();
}
/// @notice Public method designed to lock an remaining amount of
@@ -158,68 +208,115 @@ contract P2PIX is
/// @return lockID The `bytes32` value returned as the lock identifier.
/// @dev Function sighash: 0x03aaf306.
function lock(
uint256 _depositID,
address _seller,
address _token,
address _buyerAddress,
address _relayerTarget,
uint256 _relayerPremium,
uint256 _amount,
bytes32[] calldata merkleProof,
bytes32[] calldata expiredLocks
) public nonReentrant returns (bytes32 lockID) {
uint256[] calldata expiredLocks
) public nonReentrant returns (uint256) {
unlockExpired(expiredLocks);
DT.Deposit storage d = mapDeposits[_depositID];
if (!d.valid) revert InvalidDeposit();
if (d.remaining < _amount) revert NotEnoughTokens();
ERC20 t = ERC20(_token);
if (!getValid(_seller, t))
revert InvalidDeposit();
(lockID) = _encodeLockID(
_depositID,
uint256 bal =
getBalance(_seller, t);
if (bal < _amount)
revert NotEnoughTokens();
uint256 k =
_castAddrToKey(_seller);
uint256 cCounter =
lockCounter + 1;
if (mapLocks[cCounter].expirationBlock
>= block.number)
revert NotExpired();
DT.Lock memory l = DT.Lock(
k,
cCounter,
_relayerPremium,
_amount,
_buyerAddress
);
DT.Lock memory l = DT.Lock({
depositID: _depositID,
relayerPremium: _relayerPremium,
amount: _amount,
expirationBlock: (block.number +
(block.number +
defaultLockBlocks),
buyerAddress: _buyerAddress,
relayerTarget: _relayerTarget,
relayerAddress: msg.sender
});
uint160(sellerBalance[k][t]
>> BITPOS_PIXTARGET),
_buyerAddress,
_relayerTarget,
msg.sender,
address(t)
);
if (merkleProof.length != 0) {
merkleVerify(
merkleProof,
sellerAllowList[_castAddrToKey(d.seller)],
sellerAllowList[k],
msg.sender
);
_addLock(lockID, l, d);
_addLock(
bal,
_amount,
cCounter,
l,
t,
k
);
lockCounter++;
// Halt execution and output `lockID`.
return lockID;
return cCounter;
} else {
if (l.amount <= 1e2 ether) {
_addLock(lockID, l, d);
_addLock(
bal,
_amount,
cCounter,
l,
t,
k
);
lockCounter++;
// Halt execution and output `lockID`.
return lockID;
return cCounter;
} else {
uint256 userCredit = userRecord[
_castAddrToKey(msg.sender)
];
uint256 spendLimit;
(spendLimit) = _limiter(userCredit / WAD);
(spendLimit) =
_limiter(userCredit / WAD);
if (
l.amount > (spendLimit * WAD) ||
l.amount > 1e6 ether
) revert AmountNotAllowed();
_addLock(lockID, l, d);
_addLock(
bal,
_amount,
cCounter,
l,
t,
k
);
lockCounter++;
// Halt execution and output `lockID`.
return lockID;
return cCounter;
}
}
}
@@ -235,10 +332,10 @@ contract P2PIX is
/// 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`.
/// @param _relayerTarget Target address entitled to the `relayerPremium`.
/// @dev Function sighash: 0x4e1389ed.
function release(
bytes32 lockID,
uint256 lockID,
address _relayerTarget,
bytes32 pixTimestamp,
bytes32 r,
@@ -251,10 +348,9 @@ contract P2PIX is
if (l.expirationBlock < block.number)
revert LockExpired();
DT.Deposit storage d = mapDeposits[l.depositID];
bytes32 message = keccak256(
abi.encodePacked(
d.pixTarget,
l.pixTarget,
l.amount,
pixTimestamp
)
@@ -276,25 +372,28 @@ contract P2PIX is
if (!validBacenSigners[signer])
revert InvalidSigner();
ERC20 t = ERC20(d.token);
ERC20 t = ERC20(l.token);
// We cache values before zeroing them out.
uint256 lockAmount = l.amount;
uint256 totalAmount = (lockAmount - l.relayerPremium);
uint256 lockAmount =
l.amount;
uint256 totalAmount =
(lockAmount - l.relayerPremium);
l.amount = 0;
l.expirationBlock = 0;
usedTransactions[message] = true;
if (msg.sender != l.relayerAddress) {
userRecord[_castAddrToKey(msg.sender)] += l
.relayerPremium;
userRecord[
_castAddrToKey(msg.sender)
] += l.relayerPremium;
userRecord[
_castAddrToKey(l.relayerAddress)
] += lockAmount;
} else {
userRecord[_castAddrToKey(msg.sender)] += (l
.relayerPremium + lockAmount);
userRecord[_castAddrToKey(msg.sender)]
+= (l.relayerPremium + lockAmount);
}
SafeTransferLib.safeTransfer(
@@ -325,7 +424,11 @@ contract P2PIX is
}
}
emit LockReleased(l.buyerAddress, lockID, lockAmount);
emit LockReleased(
l.buyerAddress,
lockID,
lockAmount
);
}
/// @notice Unlocks expired locks.
@@ -334,32 +437,49 @@ contract P2PIX is
/// @dev For each successfull unexpired lock recovered,
/// `userRecord[_castAddrToKey(l.relayerAddress)]` is decreased by half of its value.
/// @dev Function sighash: 0x8e2749d6.
function unlockExpired(bytes32[] calldata lockIDs)
function unlockExpired(uint256[] calldata lockIDs)
public
{
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);
mapDeposits[l.depositID].remaining += l.amount;
uint256 _sellerBalance =
sellerBalance[
l.sellerKey][ERC20(l.token)
] & BITMASK_SB_ENTRY;
if (
(_sellerBalance + l.amount)
> 1e8 ether
)
revert MaxBalExceeded();
sellerBalance[
l.sellerKey][ERC20(l.token)
] += l.amount;
l.amount = 0;
uint256 userKey = _castAddrToKey(
l.relayerAddress
);
uint256 _newUserRecord = (userRecord[userKey] >>
1);
uint256 userKey =
_castAddrToKey(l.relayerAddress);
uint256 _newUserRecord =
(userRecord[userKey] >> 1);
if (_newUserRecord <= 1e2 ether) {
userRecord[userKey] = 1e2 ether;
} else {
userRecord[userKey] = _newUserRecord;
}
emit LockReturned(l.buyerAddress, lockIDs[i]);
emit LockReturned(
l.buyerAddress,
lockIDs[i]
);
unchecked {
++i;
@@ -380,28 +500,43 @@ contract P2PIX is
/// tokens from expired deposits.
/// @dev Function sighash: 0x36317972.
function withdraw(
uint256 depositID,
bytes32[] calldata expiredLocks
) public nonReentrant {
_onlySeller(depositID);
ERC20 token,
uint256 amount,
uint256[] calldata expiredLocks
)
public
nonReentrant
{
unlockExpired(expiredLocks);
DT.Deposit storage d = mapDeposits[depositID];
if (d.valid == true) {
cancelDeposit(depositID);
if (getValid(msg.sender, token)
== true
) {
setValidState(token, false);
}
ERC20 token = ERC20(d.token);
// Withdraw remaining tokens from mapDeposit[depositID]
uint256 amount = d.remaining;
d.remaining = 0;
uint256 key =
_castAddrToKey(msg.sender);
_decBal(
(sellerBalance[key][token]
& BITMASK_SB_ENTRY),
amount,
token,
key
);
// safeTransfer tokens to seller
SafeTransferLib.safeTransfer(token, d.seller, amount);
SafeTransferLib.safeTransfer(
token,
msg.sender,
amount
);
emit DepositWithdrawn(msg.sender, depositID, amount);
emit DepositWithdrawn(
msg.sender,
address(token),
amount
);
}
function setRoot(address addr, bytes32 merkleroot)
@@ -484,7 +619,7 @@ contract P2PIX is
let tLoc := add(_tokens, 0x20)
let sLoc := add(_states, 0x20)
for {
let end := add(tLoc, mul(tLen, 0x20))
let end := add(tLoc, shl(5, tLen))
} iszero(eq(tLoc, end)) {
tLoc := add(tLoc, 0x20)
sLoc := add(sLoc, 0x20)
@@ -511,14 +646,6 @@ contract P2PIX is
// solhint-disable-next-line no-empty-blocks
receive() external payable {}
/// @notice Access control private view method that
/// performs auth check on an deposit's seller.
/// @dev Function sighash: 0x4125a4d9.
function _onlySeller(uint256 _depositID) private view {
if (mapDeposits[_depositID].seller != msg.sender)
revert OnlySeller();
}
/// @notice Private view auxiliar logic that reverts
/// on a not expired lock passed as argument of the function.
/// @dev Called exclusively by the `unlockExpired` method.
@@ -529,55 +656,26 @@ contract P2PIX is
if (_l.amount == 0) revert AlreadyReleased();
}
/// @notice Internal view auxiliar logic that returns a new valid `_depositID`.
/// @dev It reverts on an already valid counter (`uint256`) value.
/// @dev Function sighash: 0xdb51d697.
function _encodeDepositID()
internal
view
returns (uint256 _depositID)
{
(_depositID) = depositCount.current();
}
function _addLock(
bytes32 _lockID,
uint256 _bal,
uint256 _amount,
uint256 _lockID,
DT.Lock memory _l,
DT.Deposit storage _d
ERC20 _t,
uint256 _k
) internal {
mapLocks[_lockID] = _l;
_d.remaining -= _l.amount;
_decBal(_bal, _amount, _t, _k);
emit LockAdded(
_l.buyerAddress,
_lockID,
_l.depositID,
_l.sellerKey,
_l.amount
);
}
/// @notice Private view auxiliar logic that encodes/returns
/// the `bytes32` identifier of an lock.
/// @dev reverts on a not expired lock with the same ID passed
/// as argument of the function.
/// @dev Called exclusively by the `lock` method.
/// @dev Function sighash: 0x3fc5fb52.
function _encodeLockID(
uint256 _depositID,
uint256 _amount,
address _buyerAddress
) private view returns (bytes32 _lockID) {
_lockID = keccak256(
abi.encodePacked(
_depositID,
_amount,
_buyerAddress
)
);
if (mapLocks[_lockID].expirationBlock >= block.number)
revert NotExpired();
}
function merkleVerify(
bytes32[] calldata _merkleProof,
bytes32 root,
@@ -633,6 +731,147 @@ contract P2PIX is
}
}
function _castToUint(
uint96 _amount,
uint160 _pixTarget,
bool _valid
)
private
pure
returns (
uint256 _amountCasted,
uint256 _pixTargetCasted,
uint256 _validCasted
)
{
assembly {
_amountCasted := _amount
_pixTargetCasted := _pixTarget
_validCasted := _valid
}
}
function _decBal(
uint256 _bal,
uint256 _amount,
ERC20 _t,
uint256 _k
) private {
assembly {
if iszero(
iszero(
or(
iszero(_bal),
lt(sub(_bal, _amount), 0x0)
)
)
) {
// DecOverflow()
mstore(0x00, 0xce3a3d37)
revert(0x1c, 0x04)
}
}
// we can directly dec from packed uint entry value
sellerBalance[_k][_t] -= _amount;
}
function getBalance(address seller, ERC20 token)
public
view
returns (uint256 bal)
{
// bal =
// sellerBalance[_castAddrToKey(seller)][token] &
// BITMASK_SB_ENTRY;
assembly {
for {/* */} iszero(0x0) {/* */} {
mstore(0x00, shl(0xC,seller))
mstore(0x20, sellerBalance.slot)
let sbkslot := keccak256(0x00, 0x40)
mstore(0x00, token)
mstore(0x20, sbkslot)
bal := and(
BITMASK_SB_ENTRY,
sload(keccak256(0x00,0x40)
)) break
}}
}
function getValid(address seller, ERC20 token)
public
view
returns (bool valid)
{
// uint256 b = sellerBalance[
// _castAddrToKey(seller)
// ][token];
// ] >> BITPOS_VALID) & BITMASK_SB_ENTRY;
assembly {
for {/* */} iszero(0x0) {/* */} {
mstore(0x00, shl(0xC,seller))
mstore(0x20, sellerBalance.slot)
let sbkslot := keccak256(0x00, 0x40)
mstore(0x00, token)
mstore(0x20, sbkslot)
valid := and(
BITMASK_SB_ENTRY,
shr(
BITPOS_VALID,
sload(keccak256(0x00,0x40)
))) break
}}
}
function getPixTarget(address seller, ERC20 token)
public
view
returns (uint160 pixTarget)
{
// pixTarget = uint160(
// sellerBalance[_castAddrToKey(seller)][token] >>
// BITPOS_PIXTARGET
// );
assembly {
for {/* */} iszero(0) {/* */} {
mstore(0,shl(12,seller))
mstore(32,sellerBalance.slot)
let sbkslot := keccak256(0,64)
mstore(0,token)
mstore(32,sbkslot)
pixTarget := shr(
BITPOS_PIXTARGET,
sload(keccak256(0,64)
)) break
}}
}
function getBalances(
address[] memory sellers,
ERC20 token
)
external
view
returns(uint256[] memory)
{
uint256 j;
uint256 len =
sellers.length;
uint256[] memory balances =
new uint256[](len);
while (j < len) {
uint256 bal =
getBalance(
sellers[j],
token
);
balances[j] = bal;
unchecked { ++j; }
}
return balances;
}
/// @notice Public method that handles `address`
/// to `uint256` safe type casting.
/// @dev Function sighash: 0x4b2ae980.
@@ -641,6 +880,20 @@ contract P2PIX is
pure
returns (uint256 _key)
{
_key = uint256(uint160(address(_addr))) << 12;
// _key = uint256(uint160(address(_addr))) << 12;
assembly {
_key := shl(12,_addr)
}
}
function _castKeyToAddr(uint256 _key)
public
pure
returns (address _addr)
{
// _addr = address(uint160(uint256(_key >> 12)));
assembly {
_addr := shr(12,_key)
}
}
}
+2 -2
View File
@@ -3,6 +3,6 @@
"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
"0x70997970C51812dc3A010C7d01b50e0d17dc79C8"
],
"p2pix": "0x5f3EFA9A90532914545CEf527C530658af87e196",
"token": "0x294003F602c321627152c6b7DED3EAb5bEa853Ee"
"p2pix": "0xefa5cE4351cda51192509cf8De7d8881ADAE95DD",
"token": "0x4A2886EAEc931e04297ed336Cc55c4eb7C75BA00"
}
+3 -3
View File
@@ -3,6 +3,6 @@
"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
"0x70997970C51812dc3A010C7d01b50e0d17dc79C8"
],
"p2pix": "0x37c856F4d5bC2597da60f607b1335738468453F3",
"token": "0x294003F602c321627152c6b7DED3EAb5bEa853Ee"
}
"p2pix": "0xC86042E9F2977C62Da8c9dDF7F9c40fde4796A29",
"token": "0xD38D6367f452D097ccBfDe4490b7de570B6A72Db"
}
+2 -2
View File
@@ -3,6 +3,6 @@
"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
"0x70997970C51812dc3A010C7d01b50e0d17dc79C8"
],
"p2pix": "0x5f3EFA9A90532914545CEf527C530658af87e196",
"token": "0x294003F602c321627152c6b7DED3EAb5bEa853Ee"
"p2pix": "0xA9258eBb157E4cf5e756b77FDD0DF09C2F73240b",
"token": "0xC86042E9F2977C62Da8c9dDF7F9c40fde4796A29"
}
+601 -420
View File
File diff suppressed because it is too large. Load diff

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 66 KiB

+4 -2
View File
@@ -121,12 +121,14 @@ const config: HardhatUserConfig = {
solidity: {
version: "0.8.9",
settings: {
// viaIR: true,
metadata: {
bytecodeHash: "none",
},
optimizer: {
enabled: true,
runs: 2000,
// max val = 4_294_967_295
runs: 20_000,
},
},
},
@@ -136,4 +138,4 @@ const config: HardhatUserConfig = {
},
};
export default config;
export default config;
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "p2pix-smart-contracts",
"version": "1.0.0",
"version": "2.0.0",
"description": "Repository for P2Pix EVM contracts to be imported by the project.",
"homepage": "https://github.com/doiim/p2pix-smart-contracts#readme",
"author": "Filipe Soccol (doiim)",
+1 -1
View File
@@ -54,4 +54,4 @@ main()
.catch(error => {
console.log(error);
process.exit(1);
});
});
+5 -1
View File
@@ -62,6 +62,10 @@ const main = async () => {
[true],
],
});
await hre.run("verify:verify", {
address: reputation.address,
constructorArguments: [],
});
};
main()
@@ -69,4 +73,4 @@ main()
.catch(error => {
console.log(error);
process.exit(1);
});
});
+58 -52
View File
@@ -1,7 +1,13 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type { BaseContract, BigNumber, BytesLike, Signer, utils } from "ethers";
import type {
BaseContract,
BigNumber,
BigNumberish,
Signer,
utils,
} from "ethers";
import type { EventFragment } from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type {
@@ -17,22 +23,21 @@ export interface EventAndErrorsInterface extends utils.Interface {
events: {
"AllowedERC20Updated(address,bool)": EventFragment;
"DepositAdded(address,uint256,address,uint256)": EventFragment;
"DepositClosed(address,uint256)": EventFragment;
"DepositWithdrawn(address,uint256,uint256)": EventFragment;
"DepositAdded(address,address,uint256)": EventFragment;
"DepositWithdrawn(address,address,uint256)": EventFragment;
"FundsWithdrawn(address,uint256)": EventFragment;
"LockAdded(address,bytes32,uint256,uint256)": EventFragment;
"LockAdded(address,uint256,uint256,uint256)": EventFragment;
"LockBlocksUpdated(uint256)": EventFragment;
"LockReleased(address,bytes32,uint256)": EventFragment;
"LockReturned(address,bytes32)": EventFragment;
"LockReleased(address,uint256,uint256)": EventFragment;
"LockReturned(address,uint256)": EventFragment;
"ReputationUpdated(address)": EventFragment;
"RootUpdated(address,bytes32)": EventFragment;
"ValidSet(address,address,bool)": EventFragment;
"ValidSignersUpdated(address[])": EventFragment;
};
getEvent(nameOrSignatureOrTopic: "AllowedERC20Updated"): EventFragment;
getEvent(nameOrSignatureOrTopic: "DepositAdded"): EventFragment;
getEvent(nameOrSignatureOrTopic: "DepositClosed"): EventFragment;
getEvent(nameOrSignatureOrTopic: "DepositWithdrawn"): EventFragment;
getEvent(nameOrSignatureOrTopic: "FundsWithdrawn"): EventFragment;
getEvent(nameOrSignatureOrTopic: "LockAdded"): EventFragment;
@@ -41,6 +46,7 @@ export interface EventAndErrorsInterface extends utils.Interface {
getEvent(nameOrSignatureOrTopic: "LockReturned"): EventFragment;
getEvent(nameOrSignatureOrTopic: "ReputationUpdated"): EventFragment;
getEvent(nameOrSignatureOrTopic: "RootUpdated"): EventFragment;
getEvent(nameOrSignatureOrTopic: "ValidSet"): EventFragment;
getEvent(nameOrSignatureOrTopic: "ValidSignersUpdated"): EventFragment;
}
@@ -58,35 +64,23 @@ export type AllowedERC20UpdatedEventFilter =
export interface DepositAddedEventObject {
seller: string;
depositID: BigNumber;
token: string;
amount: BigNumber;
}
export type DepositAddedEvent = TypedEvent<
[string, BigNumber, string, BigNumber],
[string, string, BigNumber],
DepositAddedEventObject
>;
export type DepositAddedEventFilter = TypedEventFilter<DepositAddedEvent>;
export interface DepositClosedEventObject {
seller: string;
depositID: BigNumber;
}
export type DepositClosedEvent = TypedEvent<
[string, BigNumber],
DepositClosedEventObject
>;
export type DepositClosedEventFilter = TypedEventFilter<DepositClosedEvent>;
export interface DepositWithdrawnEventObject {
seller: string;
depositID: BigNumber;
token: string;
amount: BigNumber;
}
export type DepositWithdrawnEvent = TypedEvent<
[string, BigNumber, BigNumber],
[string, string, BigNumber],
DepositWithdrawnEventObject
>;
@@ -106,12 +100,12 @@ export type FundsWithdrawnEventFilter = TypedEventFilter<FundsWithdrawnEvent>;
export interface LockAddedEventObject {
buyer: string;
lockID: string;
depositID: BigNumber;
lockID: BigNumber;
seller: BigNumber;
amount: BigNumber;
}
export type LockAddedEvent = TypedEvent<
[string, string, BigNumber, BigNumber],
[string, BigNumber, BigNumber, BigNumber],
LockAddedEventObject
>;
@@ -130,11 +124,11 @@ export type LockBlocksUpdatedEventFilter =
export interface LockReleasedEventObject {
buyer: string;
lockId: string;
lockId: BigNumber;
amount: BigNumber;
}
export type LockReleasedEvent = TypedEvent<
[string, string, BigNumber],
[string, BigNumber, BigNumber],
LockReleasedEventObject
>;
@@ -142,10 +136,10 @@ export type LockReleasedEventFilter = TypedEventFilter<LockReleasedEvent>;
export interface LockReturnedEventObject {
buyer: string;
lockId: string;
lockId: BigNumber;
}
export type LockReturnedEvent = TypedEvent<
[string, string],
[string, BigNumber],
LockReturnedEventObject
>;
@@ -173,6 +167,18 @@ export type RootUpdatedEvent = TypedEvent<
export type RootUpdatedEventFilter = TypedEventFilter<RootUpdatedEvent>;
export interface ValidSetEventObject {
seller: string;
token: string;
state: boolean;
}
export type ValidSetEvent = TypedEvent<
[string, string, boolean],
ValidSetEventObject
>;
export type ValidSetEventFilter = TypedEventFilter<ValidSetEvent>;
export interface ValidSignersUpdatedEventObject {
signers: string[];
}
@@ -224,36 +230,25 @@ export interface EventAndErrors extends BaseContract {
state?: PromiseOrValue<boolean> | null
): AllowedERC20UpdatedEventFilter;
"DepositAdded(address,uint256,address,uint256)"(
"DepositAdded(address,address,uint256)"(
seller?: PromiseOrValue<string> | null,
depositID?: null,
token?: null,
amount?: null
): DepositAddedEventFilter;
DepositAdded(
seller?: PromiseOrValue<string> | null,
depositID?: null,
token?: null,
amount?: null
): DepositAddedEventFilter;
"DepositClosed(address,uint256)"(
"DepositWithdrawn(address,address,uint256)"(
seller?: PromiseOrValue<string> | null,
depositID?: null
): DepositClosedEventFilter;
DepositClosed(
seller?: PromiseOrValue<string> | null,
depositID?: null
): DepositClosedEventFilter;
"DepositWithdrawn(address,uint256,uint256)"(
seller?: PromiseOrValue<string> | null,
depositID?: null,
token?: null,
amount?: null
): DepositWithdrawnEventFilter;
DepositWithdrawn(
seller?: PromiseOrValue<string> | null,
depositID?: null,
token?: null,
amount?: null
): DepositWithdrawnEventFilter;
@@ -263,23 +258,23 @@ export interface EventAndErrors extends BaseContract {
): FundsWithdrawnEventFilter;
FundsWithdrawn(owner?: null, amount?: null): FundsWithdrawnEventFilter;
"LockAdded(address,bytes32,uint256,uint256)"(
"LockAdded(address,uint256,uint256,uint256)"(
buyer?: PromiseOrValue<string> | null,
lockID?: PromiseOrValue<BytesLike> | null,
depositID?: null,
lockID?: PromiseOrValue<BigNumberish> | null,
seller?: null,
amount?: null
): LockAddedEventFilter;
LockAdded(
buyer?: PromiseOrValue<string> | null,
lockID?: PromiseOrValue<BytesLike> | null,
depositID?: null,
lockID?: PromiseOrValue<BigNumberish> | null,
seller?: null,
amount?: null
): LockAddedEventFilter;
"LockBlocksUpdated(uint256)"(blocks?: null): LockBlocksUpdatedEventFilter;
LockBlocksUpdated(blocks?: null): LockBlocksUpdatedEventFilter;
"LockReleased(address,bytes32,uint256)"(
"LockReleased(address,uint256,uint256)"(
buyer?: PromiseOrValue<string> | null,
lockId?: null,
amount?: null
@@ -290,7 +285,7 @@ export interface EventAndErrors extends BaseContract {
amount?: null
): LockReleasedEventFilter;
"LockReturned(address,bytes32)"(
"LockReturned(address,uint256)"(
buyer?: PromiseOrValue<string> | null,
lockId?: null
): LockReturnedEventFilter;
@@ -310,6 +305,17 @@ export interface EventAndErrors extends BaseContract {
): RootUpdatedEventFilter;
RootUpdated(seller?: null, merkleRoot?: null): RootUpdatedEventFilter;
"ValidSet(address,address,bool)"(
seller?: PromiseOrValue<string> | null,
token?: null,
state?: null
): ValidSetEventFilter;
ValidSet(
seller?: PromiseOrValue<string> | null,
token?: null,
state?: null
): ValidSetEventFilter;
"ValidSignersUpdated(address[])"(
signers?: null
): ValidSignersUpdatedEventFilter;
+59 -33
View File
@@ -25,11 +25,21 @@ const _abi = [
name: "AmountNotAllowed",
type: "error",
},
{
inputs: [],
name: "DecOverflow",
type: "error",
},
{
inputs: [],
name: "DepositAlreadyExists",
type: "error",
},
{
inputs: [],
name: "EmptyPixTarget",
type: "error",
},
{
inputs: [],
name: "InvalidDeposit",
@@ -55,6 +65,11 @@ const _abi = [
name: "LoopOverflow",
type: "error",
},
{
inputs: [],
name: "MaxBalExceeded",
type: "error",
},
{
inputs: [],
name: "NoTokens",
@@ -70,6 +85,11 @@ const _abi = [
name: "NotExpired",
type: "error",
},
{
inputs: [],
name: "NotInitialized",
type: "error",
},
{
inputs: [],
name: "OnlySeller",
@@ -118,12 +138,6 @@ const _abi = [
name: "seller",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "depositID",
type: "uint256",
},
{
indexed: false,
internalType: "address",
@@ -151,29 +165,10 @@ const _abi = [
},
{
indexed: false,
internalType: "uint256",
name: "depositID",
type: "uint256",
},
],
name: "DepositClosed",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "seller",
name: "token",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "depositID",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
@@ -214,14 +209,14 @@ const _abi = [
},
{
indexed: true,
internalType: "bytes32",
internalType: "uint256",
name: "lockID",
type: "bytes32",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "depositID",
name: "seller",
type: "uint256",
},
{
@@ -258,9 +253,15 @@ const _abi = [
},
{
indexed: false,
internalType: "bytes32",
internalType: "uint256",
name: "lockId",
type: "bytes32",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: false,
@@ -283,9 +284,9 @@ const _abi = [
},
{
indexed: false,
internalType: "bytes32",
internalType: "uint256",
name: "lockId",
type: "bytes32",
type: "uint256",
},
],
name: "LockReturned",
@@ -323,6 +324,31 @@ const _abi = [
name: "RootUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "seller",
type: "address",
},
{
indexed: false,
internalType: "address",
name: "token",
type: "address",
},
{
indexed: false,
internalType: "bool",
name: "state",
type: "bool",
},
],
name: "ValidSet",
type: "event",
},
{
anonymous: false,
inputs: [
@@ -346,7 +346,7 @@ const _abi = [
];
const _bytecode =
"0x60e06040523480156200001157600080fd5b50604051620010bf380380620010bf833981016040819052620000349162000279565b6040805180820182526007815266135bd8dad0949360ca1b6020808301918252835180850190945260048452631350949360e21b908401528151919291601291620000839160009190620001d3565b50815162000099906001906020850190620001d3565b5060ff81166080524660a052620000af620000ca565b60c05250620000c391503390508262000166565b506200039b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000fe9190620002d0565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546200017a919062000374565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620001e19062000293565b90600052602060002090601f01602090048101928262000205576000855562000250565b82601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b6000602082840312156200028c57600080fd5b5051919050565b600181811c90821680620002a857607f821691505b60208210811415620002ca57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620002ed57607f831692505b60208084108214156200030e57634e487b7160e01b86526022600452602486fd5b818015620003255760018114620003375762000366565b60ff1986168952848901965062000366565b60008a81526020902060005b868110156200035e5781548b82015290850190830162000343565b505084890196505b509498975050505050505050565b600082198211156200039657634e487b7160e01b600052601160045260246000fd5b500190565b60805160a05160c051610cf4620003cb60003960006104630152600061042e015260006101540152610cf46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906108fc565b60405180910390f35b61011561011036600461096d565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610997565b610338565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e61042a565b61012e61019e3660046109d3565b60036020526000908152604090205481565b61012e6101be3660046109d3565b60056020526000908152604090205481565b6100ec610485565b6101156101e636600461096d565b610492565b6101fe6101f93660046109f5565b61050a565b005b61012e61020e366004610a68565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610ab1565b6107b1565b6000805461024b90610b7c565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610b7c565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103279086815260200190565b60405180910390a350600192915050565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001981146103945761036f8382610bcd565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b038516600090815260036020526040812080548592906103bc908490610bcd565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104179087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104605761045b6107f7565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610b7c565b336000908152600360205260408120805483919083906104b3908490610bcd565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103279086815260200190565b42841015610579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b6000600161058561042a565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c0808301Line truncated
"0x60e06040523480156200001157600080fd5b506040516200129938038062001299833981016040819052620000349162000279565b6040805180820182526007815266135bd8dad0949360ca1b6020808301918252835180850190945260048452631350949360e21b908401528151919291601291620000839160009190620001d3565b50815162000099906001906020850190620001d3565b5060ff81166080524660a052620000af620000ca565b60c05250620000c391503390508262000166565b506200039b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000fe9190620002d0565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546200017a919062000374565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620001e19062000293565b90600052602060002090601f01602090048101928262000205576000855562000250565b82601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b6000602082840312156200028c57600080fd5b5051919050565b600181811c90821680620002a857607f821691505b60208210811415620002ca57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620002ed57607f831692505b60208084108214156200030e57634e487b7160e01b86526022600452602486fd5b818015620003255760018114620003375762000366565b60ff1986168952848901965062000366565b60008a81526020902060005b868110156200035e5781548b82015290850190830162000343565b505084890196505b509498975050505050505050565b600082198211156200039657634e487b7160e01b600052601160045260246000fd5b500190565b60805160a05160c051610ece620003cb60003960006104c20152600061048d015260006101540152610ece6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146101d8578063d505accf146101eb578063dd62ed3e14610200578063ea66696c1461022b57600080fd5b806370a08231146101905780637ecebe00146101b057806395d89b41146101d057600080fd5b806323b872dd116100bd57806323b872dd1461013c578063313ce5671461014f5780633644e5151461018857600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610125575b600080fd5b6100ec61023e565b6040516100f991906109f2565b60405180910390f35b610115610110366004610a8e565b6102cc565b60405190151581526020016100f9565b61012e60025481565b6040519081526020016100f9565b61011561014a366004610ab8565b610345565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100f9565b61012e610489565b61012e61019e366004610af4565b60036020526000908152604090205481565b61012e6101be366004610af4565b60056020526000908152604090205481565b6100ec6104e4565b6101156101e6366004610a8e565b6104f1565b6101fe6101f9366004610b16565b610576565b005b61012e61020e366004610b89565b600460209081526000928352604080842090915290825290205481565b6101fe610239366004610beb565b61089a565b6000805461024b90610cd4565b80601f016020809104026020016040519081016040528092919081815260200182805461027790610cd4565b80156102c45780601f10610299576101008083540402835291602001916102c4565b820191906000526020600020905b8154815290600101906020018083116102a757829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103349086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103d9576103a78382610d57565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260408120805485929061040e908490610d57565b909155505073ffffffffffffffffffffffffffffffffffffffff808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104769087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104bf576104ba6108e0565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6001805461024b90610cd4565b33600090815260036020526040812080548391908390610512908490610d57565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103349086815260200190565b428410156105e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b600060016105f1610489565b73ffffffLine truncated
type MockTokenConstructorParams =
| [signer?: Signer]
@@ -1,65 +0,0 @@
/* 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 { Counters, CountersInterface } from "../../../lib/utils/Counters";
const _abi = [
{
inputs: [],
name: "DecOverflow",
type: "error",
},
];
const _bytecode =
"0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c6343000809000a";
type CountersConstructorParams =
| [signer?: Signer]
| ConstructorParameters<typeof ContractFactory>;
const isSuperArgs = (
xs: CountersConstructorParams
): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;
export class Counters__factory extends ContractFactory {
constructor(...args: CountersConstructorParams) {
if (isSuperArgs(args)) {
super(...args);
} else {
super(_abi, _bytecode, args[0]);
}
}
override deploy(
overrides?: Overrides & { from?: PromiseOrValue<string> }
): Promise<Counters> {
return super.deploy(overrides || {}) as Promise<Counters>;
}
override getDeployTransaction(
overrides?: Overrides & { from?: PromiseOrValue<string> }
): TransactionRequest {
return super.getDeployTransaction(overrides || {});
}
override attach(address: string): Counters {
return super.attach(address) as Counters;
}
override connect(signer: Signer): Counters__factory {
return super.connect(signer) as Counters__factory;
}
static readonly bytecode = _bytecode;
static readonly abi = _abi;
static createInterface(): CountersInterface {
return new utils.Interface(_abi) as CountersInterface;
}
static connect(
address: string,
signerOrProvider: Signer | Provider
): Counters {
return new Contract(address, _abi, signerOrProvider) as Counters;
}
}
-1
View File
@@ -1,5 +1,4 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export { Counters__factory } from "./Counters__factory";
export { ReentrancyGuard__factory } from "./ReentrancyGuard__factory";
+264 -109
View File
@@ -60,11 +60,21 @@ const _abi = [
name: "AmountNotAllowed",
type: "error",
},
{
inputs: [],
name: "DecOverflow",
type: "error",
},
{
inputs: [],
name: "DepositAlreadyExists",
type: "error",
},
{
inputs: [],
name: "EmptyPixTarget",
type: "error",
},
{
inputs: [],
name: "InvalidDeposit",
@@ -90,6 +100,11 @@ const _abi = [
name: "LoopOverflow",
type: "error",
},
{
inputs: [],
name: "MaxBalExceeded",
type: "error",
},
{
inputs: [],
name: "NoTokens",
@@ -105,6 +120,11 @@ const _abi = [
name: "NotExpired",
type: "error",
},
{
inputs: [],
name: "NotInitialized",
type: "error",
},
{
inputs: [],
name: "OnlySeller",
@@ -158,12 +178,6 @@ const _abi = [
name: "seller",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "depositID",
type: "uint256",
},
{
indexed: false,
internalType: "address",
@@ -191,29 +205,10 @@ const _abi = [
},
{
indexed: false,
internalType: "uint256",
name: "depositID",
type: "uint256",
},
],
name: "DepositClosed",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "seller",
name: "token",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "depositID",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
@@ -254,14 +249,14 @@ const _abi = [
},
{
indexed: true,
internalType: "bytes32",
internalType: "uint256",
name: "lockID",
type: "bytes32",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "depositID",
name: "seller",
type: "uint256",
},
{
@@ -298,9 +293,15 @@ const _abi = [
},
{
indexed: false,
internalType: "bytes32",
internalType: "uint256",
name: "lockId",
type: "bytes32",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: false,
@@ -323,9 +324,9 @@ const _abi = [
},
{
indexed: false,
internalType: "bytes32",
internalType: "uint256",
name: "lockId",
type: "bytes32",
type: "uint256",
},
],
name: "LockReturned",
@@ -382,6 +383,31 @@ const _abi = [
name: "RootUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "seller",
type: "address",
},
{
indexed: false,
internalType: "address",
name: "token",
type: "address",
},
{
indexed: false,
internalType: "bool",
name: "state",
type: "bool",
},
],
name: "ValidSet",
type: "event",
},
{
anonymous: false,
inputs: [
@@ -427,6 +453,25 @@ const _abi = [
stateMutability: "pure",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "_key",
type: "uint256",
},
],
name: "_castKeyToAddr",
outputs: [
{
internalType: "address",
name: "_addr",
type: "address",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [
{
@@ -446,19 +491,6 @@ const _abi = [
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "depositID",
type: "uint256",
},
],
name: "cancelDeposit",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "defaultLockBlocks",
@@ -480,14 +512,19 @@ const _abi = [
type: "address",
},
{
internalType: "uint256",
internalType: "uint96",
name: "_amount",
type: "uint256",
type: "uint96",
},
{
internalType: "string",
internalType: "uint160",
name: "_pixTarget",
type: "string",
type: "uint160",
},
{
internalType: "bool",
name: "_valid",
type: "bool",
},
{
internalType: "bytes32",
@@ -496,23 +533,28 @@ const _abi = [
},
],
name: "deposit",
outputs: [
{
internalType: "uint256",
name: "depositID",
type: "uint256",
},
],
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "depositCount",
inputs: [
{
internalType: "address",
name: "seller",
type: "address",
},
{
internalType: "contract ERC20",
name: "token",
type: "address",
},
],
name: "getBalance",
outputs: [
{
internalType: "uint256",
name: "_val",
name: "bal",
type: "uint256",
},
],
@@ -522,9 +564,86 @@ const _abi = [
{
inputs: [
{
internalType: "uint256",
name: "_depositID",
type: "uint256",
internalType: "address[]",
name: "sellers",
type: "address[]",
},
{
internalType: "contract ERC20",
name: "token",
type: "address",
},
],
name: "getBalances",
outputs: [
{
internalType: "uint256[]",
name: "",
type: "uint256[]",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "seller",
type: "address",
},
{
internalType: "contract ERC20",
name: "token",
type: "address",
},
],
name: "getPixTarget",
outputs: [
{
internalType: "uint160",
name: "pixTarget",
type: "uint160",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "seller",
type: "address",
},
{
internalType: "contract ERC20",
name: "token",
type: "address",
},
],
name: "getValid",
outputs: [
{
internalType: "bool",
name: "valid",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "_seller",
type: "address",
},
{
internalType: "address",
name: "_token",
type: "address",
},
{
internalType: "address",
@@ -552,57 +671,31 @@ const _abi = [
type: "bytes32[]",
},
{
internalType: "bytes32[]",
internalType: "uint256[]",
name: "expiredLocks",
type: "bytes32[]",
type: "uint256[]",
},
],
name: "lock",
outputs: [
{
internalType: "bytes32",
name: "lockID",
type: "bytes32",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
name: "mapDeposits",
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "lockCounter",
outputs: [
{
internalType: "uint256",
name: "remaining",
name: "",
type: "uint256",
},
{
internalType: "string",
name: "pixTarget",
type: "string",
},
{
internalType: "address",
name: "seller",
type: "address",
},
{
internalType: "address",
name: "token",
type: "address",
},
{
internalType: "bool",
name: "valid",
type: "bool",
},
],
stateMutability: "view",
type: "function",
@@ -610,16 +703,21 @@ const _abi = [
{
inputs: [
{
internalType: "bytes32",
internalType: "uint256",
name: "",
type: "bytes32",
type: "uint256",
},
],
name: "mapLocks",
outputs: [
{
internalType: "uint256",
name: "depositID",
name: "sellerKey",
type: "uint256",
},
{
internalType: "uint256",
name: "counter",
type: "uint256",
},
{
@@ -637,6 +735,11 @@ const _abi = [
name: "expirationBlock",
type: "uint256",
},
{
internalType: "uint160",
name: "pixTarget",
type: "uint160",
},
{
internalType: "address",
name: "buyerAddress",
@@ -652,6 +755,11 @@ const _abi = [
name: "relayerAddress",
type: "address",
},
{
internalType: "address",
name: "token",
type: "address",
},
],
stateMutability: "view",
type: "function",
@@ -672,9 +780,9 @@ const _abi = [
{
inputs: [
{
internalType: "bytes32",
internalType: "uint256",
name: "lockID",
type: "bytes32",
type: "uint256",
},
{
internalType: "address",
@@ -739,6 +847,30 @@ const _abi = [
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "contract ERC20",
name: "",
type: "address",
},
],
name: "sellerBalance",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
@@ -809,6 +941,24 @@ const _abi = [
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "contract ERC20",
name: "token",
type: "address",
},
{
internalType: "bool",
name: "state",
type: "bool",
},
],
name: "setValidState",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
@@ -830,9 +980,9 @@ const _abi = [
{
inputs: [
{
internalType: "bytes32[]",
internalType: "uint256[]",
name: "lockIDs",
type: "bytes32[]",
type: "uint256[]",
},
],
name: "unlockExpired",
@@ -899,15 +1049,20 @@ const _abi = [
},
{
inputs: [
{
internalType: "contract ERC20",
name: "token",
type: "address",
},
{
internalType: "uint256",
name: "depositID",
name: "amount",
type: "uint256",
},
{
internalType: "bytes32[]",
internalType: "uint256[]",
name: "expiredLocks",
type: "bytes32[]",
type: "uint256[]",
},
],
name: "withdraw",
@@ -929,7 +1084,7 @@ const _abi = [
];
const _bytecode =
"0x60806040526001805560405162002a9a38038062002a9a8339810160408190526200002a916200049d565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a3506200007685620000a3565b620000818362000133565b6200008c84620001bd565b620000988282620002a1565b505050505062000620565b6000546001600160a01b03163314620000f25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b806004557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511816040516200012891815260200190565b60405180910390a150565b6000546001600160a01b031633146200017e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200162000128565b6000546001600160a01b03163314620002085760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b80516000905b808210156200026e57600062000246848481518110620002325762000232620005bb565b60200260200101516200038760201b60201c565b6000908152600660205260409020805460ff191660019081179091559290920191506200020e565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d781604051620001289190620005d1565b6000546001600160a01b03163314620002ec5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b815180620003025763df9578836000526004601cfd5b81518114620003195763ff633a386000526004601cfd5b60208301602083016020830282015b8083146200037f578251600052600b60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915062000328565b505050505050565b600c1b611000600160ac1b031690565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003d857620003d862000397565b604052919050565b60006001600160401b03821115620003fc57620003fc62000397565b5060051b60200190565b6001600160a01b03811681146200041c57600080fd5b50565b600082601f8301126200043157600080fd5b815160206200044a6200044483620003e0565b620003ad565b82815260059290921b840181019181810190868411156200046a57600080fd5b8286015b8481101562000492578051620004848162000406565b83529183019183016200046e565b509695505050505050565b600080600080600060a08688031215620004b657600080fd5b8551602080880151919650906001600160401b0380821115620004d857600080fd5b620004e68a838b016200041f565b965060408901519150620004fa8262000406565b6060890151919550808211156200051057600080fd5b6200051e8a838b016200041f565b945060808901519150808211156200053557600080fd5b508701601f810189136200054857600080fd5b8051620005596200044482620003e0565b81815260059190911b8201830190838101908b8311156200057957600080fd5b928401925b82841015620005a95783518015158114620005995760008081fd5b825292840192908401906200057e565b80955050505050509295509295909350565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015620006145783516001600160a01b031683529284019291840191600101620005ed565b50909695505050505050565b61246a80620006306000396000f3fe6080604052600436106101a55760003560e01c806372fada5c116100e15780638e2749d61161008a57806398a268711161006457806398a268711461056b578063c52164c61461059b578063d6e8b973146105bb578063f7d0e04b146105db57600080fd5b80638e2749d6146105045780638e2a3d36146105245780639872dbfe1461055557600080fd5b80637f94f65d116100bb5780637f94f65d1461048c5780638652b37e146104ac5780638da5cb5b146104cc57600080fd5b806372fada5c1461041f578063758d77d41461043f57806377cd38a41461045f57600080fd5b8063363179721161014e578063574983c811610128578063574983c81461039e5780635fd8c710146103be57806369cc6af4146103d35780636a1460241461040357600080fd5b80633631797214610313578063461f3120146103335780634b2ae9801461037357600080fd5b806316d722401161017f57806316d722401461023357806329cc7d10146102dc5780632dfdf0b5146102fc57600080fd5b806304937320146101b15780630d2a2d44146101f157806313af40351461021357600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101de6101cc366004611d07565b60056020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101fd57600080fd5b5061021161020c366004611e14565b6105fb565b005b34801561021f57600080fd5b5061021161022e366004611e51565b6106ec565b34801561023f57600080fd5b5061029861024e366004611d07565b600860205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391926001600160a01b03918216928216911687565b6040805197885260208801969096529486019390935260608501919091526001600160a01b03908116608085015290811660a08401521660c082015260e0016101e8565b3480156102e857600080fd5b506101de6102f7366004611e6e565b61078d565b34801561030857600080fd5b506003546101de9081565b34801561031f57600080fd5b5061021161032e366004611f4b565b610991565b34801561033f57600080fd5b5061036361034e366004611d07565b60096020526000908152604090205460ff1681565b60405190151581526020016101e8565b34801561037f57600080fd5b506101de61038e366004611e51565b600cLine truncated
"0x608060405260018055604051620031f9380380620031f98339810160408190526200002a9162000493565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a3506200007685620000a3565b620000818362000133565b6200008c84620001bd565b620000988282620002a1565b505050505062000616565b6000546001600160a01b03163314620000f25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b806003557f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511816040516200012891815260200190565b60405180910390a150565b6000546001600160a01b031633146200017e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b60028190556040516001600160a01b03821681527fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9060200162000128565b6000546001600160a01b03163314620002085760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b80516000905b808210156200026e57600062000246848481518110620002325762000232620005b1565b60200260200101516200038760201b60201c565b6000908152600860205260409020805460ff191660019081179091559290920191506200020e565b50507f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d781604051620001289190620005c7565b6000546001600160a01b03163314620002ec5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401620000e9565b815180620003025763df9578836000526004601cfd5b81518114620003195763ff633a386000526004601cfd5b60208301602083018260051b82015b8083146200037f578251600052600a60205260406000208251815550815183517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a600080a360208301925060208201915062000328565b505050505050565b600c1b90565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003ce57620003ce6200038d565b604052919050565b60006001600160401b03821115620003f257620003f26200038d565b5060051b60200190565b6001600160a01b03811681146200041257600080fd5b50565b600082601f8301126200042757600080fd5b81516020620004406200043a83620003d6565b620003a3565b82815260059290921b840181019181810190868411156200046057600080fd5b8286015b84811015620004885780516200047a81620003fc565b835291830191830162000464565b509695505050505050565b600080600080600060a08688031215620004ac57600080fd5b8551602080880151919650906001600160401b0380821115620004ce57600080fd5b620004dc8a838b0162000415565b965060408901519150620004f082620003fc565b6060890151919550808211156200050657600080fd5b620005148a838b0162000415565b945060808901519150808211156200052b57600080fd5b508701601f810189136200053e57600080fd5b80516200054f6200043a82620003d6565b81815260059190911b8201830190838101908b8311156200056f57600080fd5b928401925b828410156200059f57835180151581146200058f5760008081fd5b8252928401929084019062000574565b80955050505050509295509295909350565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156200060a5783516001600160a01b031683529284019291840191600101620005e3565b50909695505050505050565b612bd380620006266000396000f3fe6080604052600436106101dc5760003560e01c80637f94f65d11610102578063ad8f2eed11610095578063d4fac45d11610064578063d4fac45d14610713578063d6e8b9731461075e578063f7d0e04b1461077e578063fb8c5ef01461079e57600080fd5b8063ad8f2eed14610659578063b0983d3914610699578063c52164c6146106b9578063d1c07028146106e657600080fd5b80638db564c2116100d15780638db564c2146105c55780639872dbfe146105db57806398a26871146105f15780639eee8d4b1461062157600080fd5b80637f94f65d146104f257806380e1d3021461051257806384ab1d28146105525780638da5cb5b1461059857600080fd5b80634b2ae9801161017a5780636a146024116101495780636a146024146104695780636d82d9e01461048557806374ba03a0146104a557806377cd38a4146104c557600080fd5b80634b2ae980146103e3578063574983c8146104045780635fd8c7101461042457806369cc6af41461043957600080fd5b806313af4035116101b657806313af40351461026a578063328a71811461028a578063367821f0146102aa578063461f3120146103a357600080fd5b806304937320146101e85780630a98b9bd146102285780630d2a2d441461024857600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506102156102033660046123d5565b60076020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561023457600080fd5b5061021561024336600461245c565b6107be565b34801561025457600080fd5b50610268610263366004612643565b610b6d565b005b34801561027657600080fd5b50610268610285366004612680565b610ca7565b34801561029657600080fd5b506102686102a53660046126b9565b610d98565b3480156102b657600080fd5b506103376102c53660046123d5565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007870154600888015460099098015496989597949693959473ffffffffffffffffffffffffffffffffffffffff93841694928416939182169290821691168a565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925273ffffffffffffffffffffffffffffffffffffffff90811660a087015290811660c086015290811660e085015290811661010084015216610120820152Line truncated
type P2PIXConstructorParams =
| [signer?: Signer]
-9
View File
@@ -32,10 +32,6 @@ declare module "hardhat/types/runtime" {
name: "ERC20",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.ERC20__factory>;
getContractFactory(
name: "Counters",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.Counters__factory>;
getContractFactory(
name: "ReentrancyGuard",
signerOrOptions?: ethers.Signer | FactoryOptions
@@ -74,11 +70,6 @@ declare module "hardhat/types/runtime" {
address: string,
signer?: ethers.Signer
): Promise<Contracts.ERC20>;
getContractAt(
name: "Counters",
address: string,
signer?: ethers.Signer
): Promise<Contracts.Counters>;
getContractAt(
name: "ReentrancyGuard",
address: string,
-2
View File
@@ -17,8 +17,6 @@ export type { MockToken } from "./lib/mock/mockToken.sol/MockToken";
export { MockToken__factory } from "./factories/lib/mock/mockToken.sol/MockToken__factory";
export type { ERC20 } from "./lib/tokens/ERC20";
export { ERC20__factory } from "./factories/lib/tokens/ERC20__factory";
export type { Counters } from "./lib/utils/Counters";
export { Counters__factory } from "./factories/lib/utils/Counters__factory";
export type { ReentrancyGuard } from "./lib/utils/ReentrancyGuard";
export { ReentrancyGuard__factory } from "./factories/lib/utils/ReentrancyGuard__factory";
export type { P2PIX } from "./p2pix.sol/P2PIX";
-56
View File
@@ -1,56 +0,0 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type { BaseContract, Signer, utils } from "ethers";
import type { Listener, Provider } from "@ethersproject/providers";
import type {
TypedEventFilter,
TypedEvent,
TypedListener,
OnEvent,
PromiseOrValue,
} from "../../common";
export interface CountersInterface extends utils.Interface {
functions: {};
events: {};
}
export interface Counters extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
interface: CountersInterface;
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: {};
callStatic: {};
filters: {};
estimateGas: {};
populateTransaction: {};
}
-1
View File
@@ -1,5 +1,4 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export type { Counters } from "./Counters";
export type { ReentrancyGuard } from "./ReentrancyGuard";
File diff suppressed because it is too large. Load diff
-2
View File
@@ -36,8 +36,6 @@ describe("Reputation", () => {
expect(tx2).to.eq(curve(500));
expect(tx3).to.eq(curve(444444));
expect(tx4).to.eq(curve(988700));
});
});
});
+623 -448
View File
File diff suppressed because it is too large. Load diff
+4
View File
@@ -15,4 +15,8 @@ export enum P2PixErrors {
AddressDenied = "AddressDenied",
AmountNotAllowed = "AmountNotAllowed",
LockExpired = "LockExpired",
EmptyPixTarget = "EmptyPixTarget",
MaxBalExceeded = "MaxBalExceeded",
NotInitialized = "NotInitialized",
DecOverflow = "DecOverflow",
}
+11 -8
View File
@@ -17,22 +17,25 @@ export interface Deploys {
token: string;
}
export interface Deposit {
remaining: BigNumber;
pixTarget: string;
seller: string;
token: string;
valid: boolean;
}
// export interface Deposit {
// remaining: BigNumber;
// pixTarget: string;
// seller: string;
// token: string;
// valid: boolean;
// }
export interface Lock {
depositID: BigNumber;
sellerKey: BigNumber;
counter: BigNumber;
relayerPremium: BigNumber;
amount: BigNumber;
expirationBlock: BigNumber;
pixTarget: BigNumber;
buyerAddress: string;
relayerTarget: string;
relayerAddress: string;
token: string;
}
export interface P2pixFixture {