From d57fbde4c032ef097a31cebcbb1538d0a9df518a Mon Sep 17 00:00:00 2001 From: Filipe Soccol Date: Wed, 9 Nov 2022 16:29:27 -0300 Subject: [PATCH] Replace deposit prices for ETH premium. --- artifacts/contracts/p2pix.sol/P2PIX.dbg.json | 2 +- artifacts/contracts/p2pix.sol/P2PIX.json | 134 ++++++++++++------- contracts/p2pix.sol | 56 ++++---- test/1-deposit.test.js | 16 +-- test/2-lock-release.test.js | 19 ++- 5 files changed, 126 insertions(+), 101 deletions(-) diff --git a/artifacts/contracts/p2pix.sol/P2PIX.dbg.json b/artifacts/contracts/p2pix.sol/P2PIX.dbg.json index 81db4d7..998cb55 100644 --- a/artifacts/contracts/p2pix.sol/P2PIX.dbg.json +++ b/artifacts/contracts/p2pix.sol/P2PIX.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/7e909668316aeda4fb9591ef4393e389.json" + "buildInfo": "../../build-info/fa666dddb19de15d02d4eaf695a7b974.json" } diff --git a/artifacts/contracts/p2pix.sol/P2PIX.json b/artifacts/contracts/p2pix.sol/P2PIX.json index 5511e73..37272af 100644 --- a/artifacts/contracts/p2pix.sol/P2PIX.json +++ b/artifacts/contracts/p2pix.sol/P2PIX.json @@ -43,7 +43,7 @@ { "indexed": false, "internalType": "uint256", - "name": "price", + "name": "premium", "type": "uint256" }, { @@ -75,25 +75,6 @@ "name": "DepositClosed", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "depositID", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "price", - "type": "uint256" - } - ], - "name": "DepositPriceChanged", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -145,12 +126,6 @@ "internalType": "uint256", "name": "amount", "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "locked", - "type": "uint256" } ], "name": "LockAdded", @@ -194,6 +169,44 @@ "name": "LockReturned", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "PremiumsWithdrawn", + "type": "event" + }, { "inputs": [ { @@ -207,24 +220,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "depositID", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "price", - "type": "uint256" - } - ], - "name": "changeDepositPrice", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "defaultLockBlocks", @@ -250,11 +245,6 @@ "name": "amount", "type": "uint256" }, - { - "internalType": "uint256", - "name": "price", - "type": "uint256" - }, { "internalType": "string", "name": "pixTarget", @@ -269,7 +259,7 @@ "type": "bytes32" } ], - "stateMutability": "nonpayable", + "stateMutability": "payable", "type": "function" }, { @@ -316,6 +306,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -349,6 +352,26 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -398,10 +421,17 @@ "outputs": [], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [], + "name": "withdrawPremiums", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b50604051620029a5380380620029a583398181016040528101906200003791906200030d565b8160008190555060005b81518160ff161015620000db576001806000848460ff16815181106200006c576200006b62000373565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620000d290620003de565b91505062000041565b5050506200040c565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6200010d81620000f8565b81146200011957600080fd5b50565b6000815190506200012d8162000102565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001838262000138565b810181811067ffffffffffffffff82111715620001a557620001a462000149565b5b80604052505050565b6000620001ba620000e4565b9050620001c8828262000178565b919050565b600067ffffffffffffffff821115620001eb57620001ea62000149565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022e8262000201565b9050919050565b620002408162000221565b81146200024c57600080fd5b50565b600081519050620002608162000235565b92915050565b60006200027d6200027784620001cd565b620001ae565b90508083825260208201905060208402830185811115620002a357620002a2620001fc565b5b835b81811015620002d05780620002bb88826200024f565b845260208401935050602081019050620002a5565b5050509392505050565b600082601f830112620002f257620002f162000133565b5b81516200030484826020860162000266565b91505092915050565b60008060408385031215620003275762000326620000ee565b5b600062000337858286016200011c565b925050602083015167ffffffffffffffff8111156200035b576200035a620000f3565b5b6200036985828601620002da565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff82169050919050565b6000620003eb82620003d1565b915060ff8203620004015762000400620003a2565b5b600182019050919050565b612589806200041c6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063708ace6511610066578063708ace651461011c5780638e2749d61461014c5780639872dbfe14610168578063b93bd7d414610186578063e33f7291146101b657610093565b806331404484146100985780633a8cbc38146100b45780634b83a7be146100e45780634e1389ed14610100575b600080fd5b6100b260048036038101906100ad9190611264565b6101d2565b005b6100ce60048036038101906100c9919061138a565b61032e565b6040516100db9190611421565b60405180910390f35b6100fe60048036038101906100f99190611492565b610639565b005b61011a6004803603810190610115919061152b565b61085c565b005b610136600480360381019061013191906115a6565b610cee565b6040516101439190611421565b60405180910390f35b61016660048036038101906101619190611655565b611018565b005b6101706111a1565b60405161017d91906116b1565b60405180910390f35b6101a0600480360381019061019b91906116cc565b6111a7565b6040516101ad9190611714565b60405180910390f35b6101d060048036038101906101cb919061172f565b6111c7565b005b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026e906117f2565b60405180910390fd5b60006002600084815260200190815260200160002060040160006101000a81548160ff0219169083151502179055506002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f81a84d666c6a692c1cf93ca3b3648cc7bf23d34a1c6afa2e15e346f424baa06c836040516103229190611421565b60405180910390a25050565b600082828660405160200161034593929190611872565b6040516020818303038152906040528051906020012090506002600082815260200190815260200160002060040160009054906101000a900460ff16156103c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b89061190e565b60405180910390fd5b60008690508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330896040518463ffffffff1660e01b81526004016104039392919061193d565b6020604051808303816000875af1158015610422573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044691906119a0565b5060006040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200187815260200160011515815260200186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050806002600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160050190816105d69190611c13565b509050503373ffffffffffffffffffffffffffffffffffffffff167fb2d817df1a92003b7e8b40681145547601989b987e206c6f7d0bc46369652913848a898b6040516106269493929190611ce5565b60405180910390a2505095945050505050565b823373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d5906117f2565b60405180910390fd5b6106e88383611018565b60006002600086815260200190815260200160002090508060040160009054906101000a900460ff16156107205761071f856101d2565b5b60008160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600201546040518363ffffffff1660e01b81526004016107ac929190611d2a565b6020604051808303816000875af11580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef91906119a0565b50600082600201549050600083600201819055503373ffffffffffffffffffffffffffffffffffffffff167fbc44d79619424e05dd4e8ea6a3e67823f43e45cf0c9b52463ec7a8806146991d888360405161084b929190611d53565b60405180910390a250505050505050565b600060036000878152602001908152602001600020905043816006015411801561088a575060008160050154115b6108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c090611dee565b60405180910390fd5b6000600260008360000154815260200190815260200160002090506000600260008460000154815260200190815260200160002060050183600401548860405160200161091893929190611e91565b6040516020818303038152906040528051906020012090506000816040516020016109439190611f37565b6040516020818303038152906040528051906020012090506004600083815260200190815260200160002060009054906101000a900460ff16156109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b390611fcf565b60405180910390fd5b6000600182878a8a604051600081526020016040526040516109e19493929190611ffe565b6020604051602081039080840390855afa158015610a03573d6000803e3d6000fd5b505050602060405103519050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a92906120b5565b60405180910390fd5b60008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8760010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688600301548960050154610b199190612104565b6040518363ffffffff1660e01b8152600401610b36929190611d2a565b6020604051808303816000875af1158015610b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7991906119a0565b50600086600301541115610c2f578073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688600301546040518363ffffffff1660e01b8152600401610bea929190611d2a565b6020604051808303816000875af1158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d91906119a0565b505b600086600501819055506000866006018190555060016004600086815260200190815260200160002060006101000a81548160ff0219169083151502179055508560010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d8c604051610cd99190611421565b60405180910390a25050505050505050505050565b6000610cfa8383611018565b6000600260008a815260200190815260200160002090508060040160009054906101000a900460ff16610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990612184565b60405180910390fd5b60008160030154670de0b6b3a764000087610d7d91906121a4565b610d879190612215565b90508082600201541015610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc7906122b8565b60405180910390fd5b89868a604051602001610de593929190612320565b60405160208183030381529060405280519060200120925043600360008581526020019081526020016000206006015410610e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4c906123cf565b60405180910390fd5b60006040518060e001604052808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200189815260200188815260200183815260200160005443610ec091906123ef565b815250905080600360008681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015590505081836002016000828254610fb09190612104565b92505081905550838a73ffffffffffffffffffffffffffffffffffffffff167fd122043a71eaa13e3a89d5660c858559e90861de4a8afcb4a9795e855539d6438d8a8660405161100293929190612423565b60405180910390a3505050979650505050505050565b600082829050905060005b818161ffff16101561119b5760006003600086868561ffff1681811061104c5761104b61245a565b5b905060200201358152602001908152602001600020905043816006015410801561107a575060008160050154115b6110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b0906124fb565b60405180910390fd5b8060050154600260008360000154815260200190815260200160002060020160008282546110e791906123ef565b92505081905550600081600501819055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff86868561ffff1681811061116b5761116a61245a565b5b9050602002013560405161117f9190611421565b60405180910390a250808061119390612529565b915050611023565b50505050565b60005481565b60016020528060005260406000206000915054906101000a900460ff1681565b6000600260008481526020019081526020016000209050818160030181905550827f42dfc0c297064717f06aefc162216c94dc59f9a1af9ff6ed92f00cadbe9ba8038360405161121791906116b1565b60405180910390a2505050565b600080fd5b600080fd5b6000819050919050565b6112418161122e565b811461124c57600080fd5b50565b60008135905061125e81611238565b92915050565b60006020828403121561127a57611279611224565b5b60006112888482850161124f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112bc82611291565b9050919050565b6112cc816112b1565b81146112d757600080fd5b50565b6000813590506112e9816112c3565b92915050565b6000819050919050565b611302816112ef565b811461130d57600080fd5b50565b60008135905061131f816112f9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261134a57611349611325565b5b8235905067ffffffffffffffff8111156113675761136661132a565b5b6020830191508360018202830111156113835761138261132f565b5b9250929050565b6000806000806000608086880312156113a6576113a5611224565b5b60006113b4888289016112da565b95505060206113c588828901611310565b94505060406113d688828901611310565b935050606086013567ffffffffffffffff8111156113f7576113f6611229565b5b61140388828901611334565b92509250509295509295909350565b61141b8161122e565b82525050565b60006020820190506114366000830184611412565b92915050565b60008083601f84011261145257611451611325565b5b8235905067ffffffffffffffff81111561146f5761146e61132a565b5b60208301915083602082028301111561148b5761148a61132f565b5b9250929050565b6000806000604084860312156114ab576114aa611224565b5b60006114b98682870161124f565b935050602084013567ffffffffffffffff8111156114da576114d9611229565b5b6114e68682870161143c565b92509250509250925092565b600060ff82169050919050565b611508816114f2565b811461151357600080fd5b50565b600081359050611525816114ff565b92915050565b600080600080600060a0868803121561154757611546611224565b5b60006115558882890161124f565b955050602061156688828901611310565b94505060406115778882890161124f565b93505060606115888882890161124f565b925050608061159988828901611516565b9150509295509295909350565b600080600080600080600060c0888a0312156115c5576115c4611224565b5b60006115d38a828b0161124f565b97505060206115e48a828b016112da565b96505060406115f58a828b016112da565b95505060606116068a828b01611310565b94505060806116178a828b01611310565b93505060a088013567ffffffffffffffff81111561163857611637611229565b5b6116448a828b0161143c565b925092505092959891949750929550565b6000806020838503121561166c5761166b611224565b5b600083013567ffffffffffffffff81111561168a57611689611229565b5b6116968582860161143c565b92509250509250929050565b6116ab816112ef565b82525050565b60006020820190506116c660008301846116a2565b92915050565b6000602082840312156116e2576116e1611224565b5b60006116f0848285016112da565b91505092915050565b60008115159050919050565b61170e816116f9565b82525050565b60006020820190506117296000830184611705565b92915050565b6000806040838503121561174657611745611224565b5b60006117548582860161124f565b925050602061176585828601611310565b9150509250929050565b600082825260208201905092915050565b7f50325049583a204f6e6c792073656c6c657220636f756c642063616c6c20746860008201527f69732066756e6374696f6e2e0000000000000000000000000000000000000000602082015250565b60006117dc602c8361176f565b91506117e782611780565b604082019050919050565b6000602082019050818103600083015261180b816117cf565b9050919050565b600081905092915050565b82818337600083830152505050565b60006118388385611812565b935061184583858461181d565b82840190509392505050565b6000819050919050565b61186c611867826112ef565b611851565b82525050565b600061187f82858761182c565b915061188b828461185b565b602082019150819050949350505050565b7f50325049583a204465706f73697420616c726561647920657869737420616e6460008201527f206974206973207374696c6c2076616c69640000000000000000000000000000602082015250565b60006118f860328361176f565b91506119038261189c565b604082019050919050565b60006020820190508181036000830152611927816118eb565b9050919050565b611937816112b1565b82525050565b6000606082019050611952600083018661192e565b61195f602083018561192e565b61196c60408301846116a2565b949350505050565b61197d816116f9565b811461198857600080fd5b50565b60008151905061199a81611974565b92915050565b6000602082840312156119b6576119b5611224565b5b60006119c48482850161198b565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a4e57607f821691505b602082108103611a6157611a60611a07565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ac97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611a8c565b611ad38683611a8c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611b10611b0b611b06846112ef565b611aeb565b6112ef565b9050919050565b6000819050919050565b611b2a83611af5565b611b3e611b3682611b17565b848454611a99565b825550505050565b600090565b611b53611b46565b611b5e818484611b21565b505050565b5b81811015611b8257611b77600082611b4b565b600181019050611b64565b5050565b601f821115611bc757611b9881611a67565b611ba184611a7c565b81016020851015611bb0578190505b611bc4611bbc85611a7c565b830182611b63565b50505b505050565b600082821c905092915050565b6000611bea60001984600802611bcc565b1980831691505092915050565b6000611c038383611bd9565b9150826002028217905092915050565b611c1c826119cd565b67ffffffffffffffff811115611c3557611c346119d8565b5b611c3f8254611a36565b611c4a828285611b86565b600060209050601f831160018114611c7d5760008415611c6b578287015190505b611c758582611bf7565b865550611cdd565b601f198416611c8b86611a67565b60005b82811015611cb357848901518255600182019150602085019450602081019050611c8e565b86831015611cd05784890151611ccc601f891682611bd9565b8355505b6001600288020188555050505b505050505050565b6000608082019050611cfa6000830187611412565b611d07602083018661192e565b611d1460408301856116a2565b611d2160608301846116a2565b95945050505050565b6000604082019050611d3f600083018561192e565b611d4c60208301846116a2565b9392505050565b6000604082019050611d686000830185611412565b611d7560208301846116a2565b9392505050565b7f50325049583a204c6f636b20616c72656164792072656c6561736564206f722060008201527f72657475726e6564000000000000000000000000000000000000000000000000602082015250565b6000611dd860288361176f565b9150611de382611d7c565b604082019050919050565b60006020820190508181036000830152611e0781611dcb565b9050919050565b60008154611e1b81611a36565b611e258186611812565b94506001821660008114611e405760018114611e5557611e88565b60ff1983168652811515820286019350611e88565b611e5e85611a67565b60005b83811015611e8057815481890152600182019150602081019050611e61565b838801955050505b50505092915050565b6000611e9d8286611e0e565b9150611ea9828561185b565b602082019150611eb9828461185b565b602082019150819050949350505050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611f00601c83611812565b9150611f0b82611eca565b601c82019050919050565b6000819050919050565b611f31611f2c8261122e565b611f16565b82525050565b6000611f4282611ef3565b9150611f4e8284611f20565b60208201915081905092915050565b7f50325049583a205472616e73616374696f6e20616c726561647920757365642060008201527f746f20756e6c6f636b207061796d656e74000000000000000000000000000000602082015250565b6000611fb960318361176f565b9150611fc482611f5d565b604082019050919050565b60006020820190508181036000830152611fe881611fac565b9050919050565b611ff8816114f2565b82525050565b60006080820190506120136000830187611412565b6120206020830186611fef565b61202d6040830185611412565b61203a6060830184611412565b95945050505050565b7f50325049583a205369676e6572206973206e6f7420612076616c69642073696760008201527f6e65720000000000000000000000000000000000000000000000000000000000602082015250565b600061209f60238361176f565b91506120aa82612043565b604082019050919050565b600060208201905081810360008301526120ce81612092565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061210f826112ef565b915061211a836112ef565b9250828203905081811115612132576121316120d5565b5b92915050565b7f50325049583a204465706f736974206e6f742076616c696420616e796d6f7265600082015250565b600061216e60208361176f565b915061217982612138565b602082019050919050565b6000602082019050818103600083015261219d81612161565b9050919050565b60006121af826112ef565b91506121ba836112ef565b92508282026121c8816112ef565b915082820484148315176121df576121de6120d5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612220826112ef565b915061222b836112ef565b92508261223b5761223a6121e6565b5b828204905092915050565b7f50325049583a204e6f7420656e6f75676820746f6b656e2072656d61696e696e60008201527f67206f6e206465706f7369740000000000000000000000000000000000000000602082015250565b60006122a2602c8361176f565b91506122ad82612246565b604082019050919050565b600060208201905081810360008301526122d181612295565b9050919050565b60008160601b9050919050565b60006122f0826122d8565b9050919050565b6000612302826122e5565b9050919050565b61231a612315826112b1565b6122f7565b82525050565b600061232c8286611f20565b60208201915061233c828561185b565b60208201915061234c8284612309565b601482019150819050949350505050565b7f50325049583a20416e6f74686572206c6f636b20776974682073616d6520494460008201527f206973206e6f7420657870697265642079657400000000000000000000000000602082015250565b60006123b960338361176f565b91506123c48261235d565b604082019050919050565b600060208201905081810360008301526123e8816123ac565b9050919050565b60006123fa826112ef565b9150612405836112ef565b925082820190508082111561241d5761241c6120d5565b5b92915050565b60006060820190506124386000830186611412565b61244560208301856116a2565b61245260408301846116a2565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f50325049583a204c6f636b206e6f742065787069726564206f7220616c72656160008201527f64792072656c6561736564000000000000000000000000000000000000000000602082015250565b60006124e5602b8361176f565b91506124f082612489565b604082019050919050565b60006020820190508181036000830152612514816124d8565b9050919050565b600061ffff82169050919050565b60006125348261251b565b915061ffff8203612548576125476120d5565b5b60018201905091905056fea2646970667358221220b2c46c7bf94e90ea83c1fcb04e9d8c8e81d1f22325b65ab6850361de1bdba86e64736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063708ace6511610066578063708ace651461011c5780638e2749d61461014c5780639872dbfe14610168578063b93bd7d414610186578063e33f7291146101b657610093565b806331404484146100985780633a8cbc38146100b45780634b83a7be146100e45780634e1389ed14610100575b600080fd5b6100b260048036038101906100ad9190611264565b6101d2565b005b6100ce60048036038101906100c9919061138a565b61032e565b6040516100db9190611421565b60405180910390f35b6100fe60048036038101906100f99190611492565b610639565b005b61011a6004803603810190610115919061152b565b61085c565b005b610136600480360381019061013191906115a6565b610cee565b6040516101439190611421565b60405180910390f35b61016660048036038101906101619190611655565b611018565b005b6101706111a1565b60405161017d91906116b1565b60405180910390f35b6101a0600480360381019061019b91906116cc565b6111a7565b6040516101ad9190611714565b60405180910390f35b6101d060048036038101906101cb919061172f565b6111c7565b005b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026e906117f2565b60405180910390fd5b60006002600084815260200190815260200160002060040160006101000a81548160ff0219169083151502179055506002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f81a84d666c6a692c1cf93ca3b3648cc7bf23d34a1c6afa2e15e346f424baa06c836040516103229190611421565b60405180910390a25050565b600082828660405160200161034593929190611872565b6040516020818303038152906040528051906020012090506002600082815260200190815260200160002060040160009054906101000a900460ff16156103c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b89061190e565b60405180910390fd5b60008690508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330896040518463ffffffff1660e01b81526004016104039392919061193d565b6020604051808303816000875af1158015610422573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044691906119a0565b5060006040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200187815260200160011515815260200186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050806002600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160050190816105d69190611c13565b509050503373ffffffffffffffffffffffffffffffffffffffff167fb2d817df1a92003b7e8b40681145547601989b987e206c6f7d0bc46369652913848a898b6040516106269493929190611ce5565b60405180910390a2505095945050505050565b823373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d5906117f2565b60405180910390fd5b6106e88383611018565b60006002600086815260200190815260200160002090508060040160009054906101000a900460ff16156107205761071f856101d2565b5b60008160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600201546040518363ffffffff1660e01b81526004016107ac929190611d2a565b6020604051808303816000875af11580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef91906119a0565b50600082600201549050600083600201819055503373ffffffffffffffffffffffffffffffffffffffff167fbc44d79619424e05dd4e8ea6a3e67823f43e45cf0c9b52463ec7a8806146991d888360405161084b929190611d53565b60405180910390a250505050505050565b600060036000878152602001908152602001600020905043816006015411801561088a575060008160050154115b6108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c090611dee565b60405180910390fd5b6000600260008360000154815260200190815260200160002090506000600260008460000154815260200190815260200160002060050183600401548860405160200161091893929190611e91565b6040516020818303038152906040528051906020012090506000816040516020016109439190611f37565b6040516020818303038152906040528051906020012090506004600083815260200190815260200160002060009054906101000a900460ff16156109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b390611fcf565b60405180910390fd5b6000600182878a8a604051600081526020016040526040516109e19493929190611ffe565b6020604051602081039080840390855afa158015610a03573d6000803e3d6000fd5b505050602060405103519050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a92906120b5565b60405180910390fd5b60008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8760010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688600301548960050154610b199190612104565b6040518363ffffffff1660e01b8152600401610b36929190611d2a565b6020604051808303816000875af1158015610b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7991906119a0565b50600086600301541115610c2f578073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688600301546040518363ffffffff1660e01b8152600401610bea929190611d2a565b6020604051808303816000875af1158015610c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2d91906119a0565b505b600086600501819055506000866006018190555060016004600086815260200190815260200160002060006101000a81548160ff0219169083151502179055508560010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d8c604051610cd99190611421565b60405180910390a25050505050505050505050565b6000610cfa8383611018565b6000600260008a815260200190815260200160002090508060040160009054906101000a900460ff16610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990612184565b60405180910390fd5b60008160030154670de0b6b3a764000087610d7d91906121a4565b610d879190612215565b90508082600201541015610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc7906122b8565b60405180910390fd5b89868a604051602001610de593929190612320565b60405160208183030381529060405280519060200120925043600360008581526020019081526020016000206006015410610e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4c906123cf565b60405180910390fd5b60006040518060e001604052808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200189815260200188815260200183815260200160005443610ec091906123ef565b815250905080600360008681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015590505081836002016000828254610fb09190612104565b92505081905550838a73ffffffffffffffffffffffffffffffffffffffff167fd122043a71eaa13e3a89d5660c858559e90861de4a8afcb4a9795e855539d6438d8a8660405161100293929190612423565b60405180910390a3505050979650505050505050565b600082829050905060005b818161ffff16101561119b5760006003600086868561ffff1681811061104c5761104b61245a565b5b905060200201358152602001908152602001600020905043816006015410801561107a575060008160050154115b6110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b0906124fb565b60405180910390fd5b8060050154600260008360000154815260200190815260200160002060020160008282546110e791906123ef565b92505081905550600081600501819055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff86868561ffff1681811061116b5761116a61245a565b5b9050602002013560405161117f9190611421565b60405180910390a250808061119390612529565b915050611023565b50505050565b60005481565b60016020528060005260406000206000915054906101000a900460ff1681565b6000600260008481526020019081526020016000209050818160030181905550827f42dfc0c297064717f06aefc162216c94dc59f9a1af9ff6ed92f00cadbe9ba8038360405161121791906116b1565b60405180910390a2505050565b600080fd5b600080fd5b6000819050919050565b6112418161122e565b811461124c57600080fd5b50565b60008135905061125e81611238565b92915050565b60006020828403121561127a57611279611224565b5b60006112888482850161124f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112bc82611291565b9050919050565b6112cc816112b1565b81146112d757600080fd5b50565b6000813590506112e9816112c3565b92915050565b6000819050919050565b611302816112ef565b811461130d57600080fd5b50565b60008135905061131f816112f9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261134a57611349611325565b5b8235905067ffffffffffffffff8111156113675761136661132a565b5b6020830191508360018202830111156113835761138261132f565b5b9250929050565b6000806000806000608086880312156113a6576113a5611224565b5b60006113b4888289016112da565b95505060206113c588828901611310565b94505060406113d688828901611310565b935050606086013567ffffffffffffffff8111156113f7576113f6611229565b5b61140388828901611334565b92509250509295509295909350565b61141b8161122e565b82525050565b60006020820190506114366000830184611412565b92915050565b60008083601f84011261145257611451611325565b5b8235905067ffffffffffffffff81111561146f5761146e61132a565b5b60208301915083602082028301111561148b5761148a61132f565b5b9250929050565b6000806000604084860312156114ab576114aa611224565b5b60006114b98682870161124f565b935050602084013567ffffffffffffffff8111156114da576114d9611229565b5b6114e68682870161143c565b92509250509250925092565b600060ff82169050919050565b611508816114f2565b811461151357600080fd5b50565b600081359050611525816114ff565b92915050565b600080600080600060a0868803121561154757611546611224565b5b60006115558882890161124f565b955050602061156688828901611310565b94505060406115778882890161124f565b93505060606115888882890161124f565b925050608061159988828901611516565b9150509295509295909350565b600080600080600080600060c0888a0312156115c5576115c4611224565b5b60006115d38a828b0161124f565b97505060206115e48a828b016112da565b96505060406115f58a828b016112da565b95505060606116068a828b01611310565b94505060806116178a828b01611310565b93505060a088013567ffffffffffffffff81111561163857611637611229565b5b6116448a828b0161143c565b925092505092959891949750929550565b6000806020838503121561166c5761166b611224565b5b600083013567ffffffffffffffff81111561168a57611689611229565b5b6116968582860161143c565b92509250509250929050565b6116ab816112ef565b82525050565b60006020820190506116c660008301846116a2565b92915050565b6000602082840312156116e2576116e1611224565b5b60006116f0848285016112da565b91505092915050565b60008115159050919050565b61170e816116f9565b82525050565b60006020820190506117296000830184611705565b92915050565b6000806040838503121561174657611745611224565b5b60006117548582860161124f565b925050602061176585828601611310565b9150509250929050565b600082825260208201905092915050565b7f50325049583a204f6e6c792073656c6c657220636f756c642063616c6c20746860008201527f69732066756e6374696f6e2e0000000000000000000000000000000000000000602082015250565b60006117dc602c8361176f565b91506117e782611780565b604082019050919050565b6000602082019050818103600083015261180b816117cf565b9050919050565b600081905092915050565b82818337600083830152505050565b60006118388385611812565b935061184583858461181d565b82840190509392505050565b6000819050919050565b61186c611867826112ef565b611851565b82525050565b600061187f82858761182c565b915061188b828461185b565b602082019150819050949350505050565b7f50325049583a204465706f73697420616c726561647920657869737420616e6460008201527f206974206973207374696c6c2076616c69640000000000000000000000000000602082015250565b60006118f860328361176f565b91506119038261189c565b604082019050919050565b60006020820190508181036000830152611927816118eb565b9050919050565b611937816112b1565b82525050565b6000606082019050611952600083018661192e565b61195f602083018561192e565b61196c60408301846116a2565b949350505050565b61197d816116f9565b811461198857600080fd5b50565b60008151905061199a81611974565b92915050565b6000602082840312156119b6576119b5611224565b5b60006119c48482850161198b565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a4e57607f821691505b602082108103611a6157611a60611a07565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ac97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611a8c565b611ad38683611a8c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611b10611b0b611b06846112ef565b611aeb565b6112ef565b9050919050565b6000819050919050565b611b2a83611af5565b611b3e611b3682611b17565b848454611a99565b825550505050565b600090565b611b53611b46565b611b5e818484611b21565b505050565b5b81811015611b8257611b77600082611b4b565b600181019050611b64565b5050565b601f821115611bc757611b9881611a67565b611ba184611a7c565b81016020851015611bb0578190505b611bc4611bbc85611a7c565b830182611b63565b50505b505050565b600082821c905092915050565b6000611bea60001984600802611bcc565b1980831691505092915050565b6000611c038383611bd9565b9150826002028217905092915050565b611c1c826119cd565b67ffffffffffffffff811115611c3557611c346119d8565b5b611c3f8254611a36565b611c4a828285611b86565b600060209050601f831160018114611c7d5760008415611c6b578287015190505b611c758582611bf7565b865550611cdd565b601f198416611c8b86611a67565b60005b82811015611cb357848901518255600182019150602085019450602081019050611c8e565b86831015611cd05784890151611ccc601f891682611bd9565b8355505b6001600288020188555050505b505050505050565b6000608082019050611cfa6000830187611412565b611d07602083018661192e565b611d1460408301856116a2565b611d2160608301846116a2565b95945050505050565b6000604082019050611d3f600083018561192e565b611d4c60208301846116a2565b9392505050565b6000604082019050611d686000830185611412565b611d7560208301846116a2565b9392505050565b7f50325049583a204c6f636b20616c72656164792072656c6561736564206f722060008201527f72657475726e6564000000000000000000000000000000000000000000000000602082015250565b6000611dd860288361176f565b9150611de382611d7c565b604082019050919050565b60006020820190508181036000830152611e0781611dcb565b9050919050565b60008154611e1b81611a36565b611e258186611812565b94506001821660008114611e405760018114611e5557611e88565b60ff1983168652811515820286019350611e88565b611e5e85611a67565b60005b83811015611e8057815481890152600182019150602081019050611e61565b838801955050505b50505092915050565b6000611e9d8286611e0e565b9150611ea9828561185b565b602082019150611eb9828461185b565b602082019150819050949350505050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611f00601c83611812565b9150611f0b82611eca565b601c82019050919050565b6000819050919050565b611f31611f2c8261122e565b611f16565b82525050565b6000611f4282611ef3565b9150611f4e8284611f20565b60208201915081905092915050565b7f50325049583a205472616e73616374696f6e20616c726561647920757365642060008201527f746f20756e6c6f636b207061796d656e74000000000000000000000000000000602082015250565b6000611fb960318361176f565b9150611fc482611f5d565b604082019050919050565b60006020820190508181036000830152611fe881611fac565b9050919050565b611ff8816114f2565b82525050565b60006080820190506120136000830187611412565b6120206020830186611fef565b61202d6040830185611412565b61203a6060830184611412565b95945050505050565b7f50325049583a205369676e6572206973206e6f7420612076616c69642073696760008201527f6e65720000000000000000000000000000000000000000000000000000000000602082015250565b600061209f60238361176f565b91506120aa82612043565b604082019050919050565b600060208201905081810360008301526120ce81612092565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061210f826112ef565b915061211a836112ef565b9250828203905081811115612132576121316120d5565b5b92915050565b7f50325049583a204465706f736974206e6f742076616c696420616e796d6f7265600082015250565b600061216e60208361176f565b915061217982612138565b602082019050919050565b6000602082019050818103600083015261219d81612161565b9050919050565b60006121af826112ef565b91506121ba836112ef565b92508282026121c8816112ef565b915082820484148315176121df576121de6120d5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612220826112ef565b915061222b836112ef565b92508261223b5761223a6121e6565b5b828204905092915050565b7f50325049583a204e6f7420656e6f75676820746f6b656e2072656d61696e696e60008201527f67206f6e206465706f7369740000000000000000000000000000000000000000602082015250565b60006122a2602c8361176f565b91506122ad82612246565b604082019050919050565b600060208201905081810360008301526122d181612295565b9050919050565b60008160601b9050919050565b60006122f0826122d8565b9050919050565b6000612302826122e5565b9050919050565b61231a612315826112b1565b6122f7565b82525050565b600061232c8286611f20565b60208201915061233c828561185b565b60208201915061234c8284612309565b601482019150819050949350505050565b7f50325049583a20416e6f74686572206c6f636b20776974682073616d6520494460008201527f206973206e6f7420657870697265642079657400000000000000000000000000602082015250565b60006123b960338361176f565b91506123c48261235d565b604082019050919050565b600060208201905081810360008301526123e8816123ac565b9050919050565b60006123fa826112ef565b9150612405836112ef565b925082820190508082111561241d5761241c6120d5565b5b92915050565b60006060820190506124386000830186611412565b61244560208301856116a2565b61245260408301846116a2565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f50325049583a204c6f636b206e6f742065787069726564206f7220616c72656160008201527f64792072656c6561736564000000000000000000000000000000000000000000602082015250565b60006124e5602b8361176f565b91506124f082612489565b604082019050919050565b60006020820190508181036000830152612514816124d8565b9050919050565b600061ffff82169050919050565b60006125348261251b565b915061ffff8203612548576125476120d5565b5b60018201905091905056fea2646970667358221220b2c46c7bf94e90ea83c1fcb04e9d8c8e81d1f22325b65ab6850361de1bdba86e64736f6c63430008110033", + "bytecode": "0x60806040523480156200001157600080fd5b5060405162002d5538038062002d558339818101604052810190620000379190620003fa565b620000576200004b6200010560201b60201c565b6200010d60201b60201c565b8160018190555060005b81518160ff161015620000fc57600160026000848460ff16815181106200008d576200008c62000460565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620000f390620004cb565b91505062000061565b505050620004f9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620001fa81620001e5565b81146200020657600080fd5b50565b6000815190506200021a81620001ef565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002708262000225565b810181811067ffffffffffffffff8211171562000292576200029162000236565b5b80604052505050565b6000620002a7620001d1565b9050620002b5828262000265565b919050565b600067ffffffffffffffff821115620002d857620002d762000236565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200031b82620002ee565b9050919050565b6200032d816200030e565b81146200033957600080fd5b50565b6000815190506200034d8162000322565b92915050565b60006200036a6200036484620002ba565b6200029b565b9050808382526020820190506020840283018581111562000390576200038f620002e9565b5b835b81811015620003bd5780620003a888826200033c565b84526020840193505060208101905062000392565b5050509392505050565b600082601f830112620003df57620003de62000220565b5b8151620003f184826020860162000353565b91505092915050565b60008060408385031215620004145762000413620001db565b5b6000620004248582860162000209565b925050602083015167ffffffffffffffff811115620004485762000447620001e0565b5b6200045685828601620003c7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff82169050919050565b6000620004d882620004be565b915060ff8203620004ee57620004ed6200048f565b5b600182019050919050565b61284c80620005096000396000f3fe6080604052600436106100a75760003560e01c80638da5cb5b116100645780638da5cb5b146101925780638e2749d6146101bd5780639872dbfe146101e6578063b93bd7d414610211578063bfe07da61461024e578063f2fde38b1461027e576100a7565b806331404484146100ac5780634b83a7be146100d55780634e1389ed146100fe5780636193cdfb14610127578063708ace651461013e578063715018a61461017b575b600080fd5b3480156100b857600080fd5b506100d360048036038101906100ce919061153b565b6102a7565b005b3480156100e157600080fd5b506100fc60048036038101906100f791906115cd565b610403565b005b34801561010a57600080fd5b506101256004803603810190610120919061169c565b610626565b005b34801561013357600080fd5b5061013c610ab8565b005b34801561014a57600080fd5b5061016560048036038101906101609190611775565b610b48565b6040516101729190611833565b60405180910390f35b34801561018757600080fd5b50610190610e38565b005b34801561019e57600080fd5b506101a7610e4c565b6040516101b4919061185d565b60405180910390f35b3480156101c957600080fd5b506101e460048036038101906101df9190611878565b610e75565b005b3480156101f257600080fd5b506101fb610ffe565b60405161020891906118d4565b60405180910390f35b34801561021d57600080fd5b50610238600480360381019061023391906118ef565b611004565b6040516102459190611937565b60405180910390f35b610268600480360381019061026391906119a8565b611024565b6040516102759190611833565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a091906118ef565b61132e565b005b803373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461034c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034390611a9f565b60405180910390fd5b60006003600084815260200190815260200160002060040160006101000a81548160ff0219169083151502179055506003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f81a84d666c6a692c1cf93ca3b3648cc7bf23d34a1c6afa2e15e346f424baa06c836040516103f79190611833565b60405180910390a25050565b823373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049f90611a9f565b60405180910390fd5b6104b28383610e75565b60006003600086815260200190815260200160002090508060040160009054906101000a900460ff16156104ea576104e9856102a7565b5b60008160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600201546040518363ffffffff1660e01b8152600401610576929190611abf565b6020604051808303816000875af1158015610595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b99190611b14565b50600082600201549050600083600201819055503373ffffffffffffffffffffffffffffffffffffffff167fbc44d79619424e05dd4e8ea6a3e67823f43e45cf0c9b52463ec7a8806146991d8883604051610615929190611b41565b60405180910390a250505050505050565b6000600460008781526020019081526020016000209050438160050154118015610654575060008160040154115b610693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068a90611bdc565b60405180910390fd5b600060036000836000015481526020019081526020016000209050600060036000846000015481526020019081526020016000206005018360040154886040516020016106e293929190611d20565b60405160208183030381529060405280519060200120905060008160405160200161070d9190611dc6565b6040516020818303038152906040528051906020012090506005600083815260200190815260200160002060009054906101000a900460ff1615610786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077d90611e5e565b60405180910390fd5b6000600182878a8a604051600081526020016040526040516107ab9493929190611e8d565b6020604051602081039080840390855afa1580156107cd573d6000803e3d6000fd5b505050602060405103519050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085c90611f44565b60405180910390fd5b60008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8760010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886003015489600401546108e39190611f93565b6040518363ffffffff1660e01b8152600401610900929190611abf565b6020604051808303816000875af115801561091f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109439190611b14565b506000866003015411156109f9578073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688600301546040518363ffffffff1660e01b81526004016109b4929190611abf565b6020604051808303816000875af11580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f79190611b14565b505b600086600401819055506000866005018190555060016005600086815260200190815260200160002060006101000a81548160ff0219169083151502179055508560010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d8c604051610aa39190611833565b60405180910390a25050505050505050505050565b610ac06113b1565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b0b573d6000803e3d6000fd5b507fbf0d92faf65e256806eefa1a0d281d4873cc3c80d1ed25b8ae6f7cc66fc918ef3382604051610b3d929190611abf565b60405180910390a150565b6000610b548383610e75565b6000600360008a815260200190815260200160002090508060040160009054906101000a900460ff16610bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb390612013565b60405180910390fd5b8481600201541015610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa906120a5565b60405180910390fd5b888589604051602001610c189392919061210d565b60405160208183030381529060405280519060200120915043600460008481526020019081526020016000206005015410610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f906121bc565b60405180910390fd5b60006040518060c001604052808b81526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200187815260200160015443610ced91906121dc565b815250905080600460008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015590505085826002016000828254610dd39190611f93565b92505081905550828973ffffffffffffffffffffffffffffffffffffffff167f51a2e0610065407cec419b292d4e03c1149e2336f34bc3bdab24dba9fe7edbff8c89604051610e23929190611b41565b60405180910390a35050979650505050505050565b610e406113b1565b610e4a600061142f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600082829050905060005b818161ffff161015610ff85760006004600086868561ffff16818110610ea957610ea8612210565b5b9050602002013581526020019081526020016000209050438160050154108015610ed7575060008160040154115b610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d906122b1565b60405180910390fd5b806004015460036000836000015481526020019081526020016000206002016000828254610f4491906121dc565b92505081905550600081600401819055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff86868561ffff16818110610fc857610fc7612210565b5b90506020020135604051610fdc9190611833565b60405180910390a2508080610ff0906122df565b915050610e80565b50505050565b60015481565b60026020528060005260406000206000915054906101000a900460ff1681565b600082828560405160200161103b9392919061233d565b6040516020818303038152906040528051906020012090506003600082815260200190815260200160002060040160009054906101000a900460ff16156110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae906123d9565b60405180910390fd5b60008590508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b81526004016110f9939291906123f9565b6020604051808303816000875af1158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c9190611b14565b5060006040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200187815260200134815260200160011515815260200186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050806003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160050190816112cc9190612601565b509050503373ffffffffffffffffffffffffffffffffffffffff167fb2d817df1a92003b7e8b40681145547601989b987e206c6f7d0bc463696529138489348a60405161131c94939291906126d3565b60405180910390a25050949350505050565b6113366113b1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c9061278a565b60405180910390fd5b6113ae8161142f565b50565b6113b96114f3565b73ffffffffffffffffffffffffffffffffffffffff166113d7610e4c565b73ffffffffffffffffffffffffffffffffffffffff161461142d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611424906127f6565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600080fd5b6000819050919050565b61151881611505565b811461152357600080fd5b50565b6000813590506115358161150f565b92915050565b600060208284031215611551576115506114fb565b5b600061155f84828501611526565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261158d5761158c611568565b5b8235905067ffffffffffffffff8111156115aa576115a961156d565b5b6020830191508360208202830111156115c6576115c5611572565b5b9250929050565b6000806000604084860312156115e6576115e56114fb565b5b60006115f486828701611526565b935050602084013567ffffffffffffffff81111561161557611614611500565b5b61162186828701611577565b92509250509250925092565b6000819050919050565b6116408161162d565b811461164b57600080fd5b50565b60008135905061165d81611637565b92915050565b600060ff82169050919050565b61167981611663565b811461168457600080fd5b50565b60008135905061169681611670565b92915050565b600080600080600060a086880312156116b8576116b76114fb565b5b60006116c688828901611526565b95505060206116d78882890161164e565b94505060406116e888828901611526565b93505060606116f988828901611526565b925050608061170a88828901611687565b9150509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061174282611717565b9050919050565b61175281611737565b811461175d57600080fd5b50565b60008135905061176f81611749565b92915050565b600080600080600080600060c0888a031215611794576117936114fb565b5b60006117a28a828b01611526565b97505060206117b38a828b01611760565b96505060406117c48a828b01611760565b95505060606117d58a828b0161164e565b94505060806117e68a828b0161164e565b93505060a088013567ffffffffffffffff81111561180757611806611500565b5b6118138a828b01611577565b925092505092959891949750929550565b61182d81611505565b82525050565b60006020820190506118486000830184611824565b92915050565b61185781611737565b82525050565b6000602082019050611872600083018461184e565b92915050565b6000806020838503121561188f5761188e6114fb565b5b600083013567ffffffffffffffff8111156118ad576118ac611500565b5b6118b985828601611577565b92509250509250929050565b6118ce8161162d565b82525050565b60006020820190506118e960008301846118c5565b92915050565b600060208284031215611905576119046114fb565b5b600061191384828501611760565b91505092915050565b60008115159050919050565b6119318161191c565b82525050565b600060208201905061194c6000830184611928565b92915050565b60008083601f84011261196857611967611568565b5b8235905067ffffffffffffffff8111156119855761198461156d565b5b6020830191508360018202830111156119a1576119a0611572565b5b9250929050565b600080600080606085870312156119c2576119c16114fb565b5b60006119d087828801611760565b94505060206119e18782880161164e565b935050604085013567ffffffffffffffff811115611a0257611a01611500565b5b611a0e87828801611952565b925092505092959194509250565b600082825260208201905092915050565b7f50325049583a204f6e6c792073656c6c657220636f756c642063616c6c20746860008201527f69732066756e6374696f6e2e0000000000000000000000000000000000000000602082015250565b6000611a89602c83611a1c565b9150611a9482611a2d565b604082019050919050565b60006020820190508181036000830152611ab881611a7c565b9050919050565b6000604082019050611ad4600083018561184e565b611ae160208301846118c5565b9392505050565b611af18161191c565b8114611afc57600080fd5b50565b600081519050611b0e81611ae8565b92915050565b600060208284031215611b2a57611b296114fb565b5b6000611b3884828501611aff565b91505092915050565b6000604082019050611b566000830185611824565b611b6360208301846118c5565b9392505050565b7f50325049583a204c6f636b20616c72656164792072656c6561736564206f722060008201527f72657475726e6564000000000000000000000000000000000000000000000000602082015250565b6000611bc6602883611a1c565b9150611bd182611b6a565b604082019050919050565b60006020820190508181036000830152611bf581611bb9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c4357607f821691505b602082108103611c5657611c55611bfc565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611c8981611c2b565b611c938186611c5c565b94506001821660008114611cae5760018114611cc357611cf6565b60ff1983168652811515820286019350611cf6565b611ccc85611c67565b60005b83811015611cee57815481890152600182019150602081019050611ccf565b838801955050505b50505092915050565b6000819050919050565b611d1a611d158261162d565b611cff565b82525050565b6000611d2c8286611c7c565b9150611d388285611d09565b602082019150611d488284611d09565b602082019150819050949350505050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611d8f601c83611c5c565b9150611d9a82611d59565b601c82019050919050565b6000819050919050565b611dc0611dbb82611505565b611da5565b82525050565b6000611dd182611d82565b9150611ddd8284611daf565b60208201915081905092915050565b7f50325049583a205472616e73616374696f6e20616c726561647920757365642060008201527f746f20756e6c6f636b207061796d656e74000000000000000000000000000000602082015250565b6000611e48603183611a1c565b9150611e5382611dec565b604082019050919050565b60006020820190508181036000830152611e7781611e3b565b9050919050565b611e8781611663565b82525050565b6000608082019050611ea26000830187611824565b611eaf6020830186611e7e565b611ebc6040830185611824565b611ec96060830184611824565b95945050505050565b7f50325049583a205369676e6572206973206e6f7420612076616c69642073696760008201527f6e65720000000000000000000000000000000000000000000000000000000000602082015250565b6000611f2e602383611a1c565b9150611f3982611ed2565b604082019050919050565b60006020820190508181036000830152611f5d81611f21565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f9e8261162d565b9150611fa98361162d565b9250828203905081811115611fc157611fc0611f64565b5b92915050565b7f50325049583a204465706f736974206e6f742076616c696420616e796d6f7265600082015250565b6000611ffd602083611a1c565b915061200882611fc7565b602082019050919050565b6000602082019050818103600083015261202c81611ff0565b9050919050565b7f50325049583a204e6f7420656e6f75676820746f6b656e2072656d61696e696e60008201527f67206f6e206465706f7369740000000000000000000000000000000000000000602082015250565b600061208f602c83611a1c565b915061209a82612033565b604082019050919050565b600060208201905081810360008301526120be81612082565b9050919050565b60008160601b9050919050565b60006120dd826120c5565b9050919050565b60006120ef826120d2565b9050919050565b61210761210282611737565b6120e4565b82525050565b60006121198286611daf565b6020820191506121298285611d09565b60208201915061213982846120f6565b601482019150819050949350505050565b7f50325049583a20416e6f74686572206c6f636b20776974682073616d6520494460008201527f206973206e6f7420657870697265642079657400000000000000000000000000602082015250565b60006121a6603383611a1c565b91506121b18261214a565b604082019050919050565b600060208201905081810360008301526121d581612199565b9050919050565b60006121e78261162d565b91506121f28361162d565b925082820190508082111561220a57612209611f64565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f50325049583a204c6f636b206e6f742065787069726564206f7220616c72656160008201527f64792072656c6561736564000000000000000000000000000000000000000000602082015250565b600061229b602b83611a1c565b91506122a68261223f565b604082019050919050565b600060208201905081810360008301526122ca8161228e565b9050919050565b600061ffff82169050919050565b60006122ea826122d1565b915061ffff82036122fe576122fd611f64565b5b600182019050919050565b82818337600083830152505050565b60006123248385611c5c565b9350612331838584612309565b82840190509392505050565b600061234a828587612318565b91506123568284611d09565b602082019150819050949350505050565b7f50325049583a204465706f73697420616c726561647920657869737420616e6460008201527f206974206973207374696c6c2076616c69640000000000000000000000000000602082015250565b60006123c3603283611a1c565b91506123ce82612367565b604082019050919050565b600060208201905081810360008301526123f2816123b6565b9050919050565b600060608201905061240e600083018661184e565b61241b602083018561184e565b61242860408301846118c5565b949350505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b6000600883026124b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261247a565b6124c1868361247a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006124fe6124f96124f48461162d565b6124d9565b61162d565b9050919050565b6000819050919050565b612518836124e3565b61252c61252482612505565b848454612487565b825550505050565b600090565b612541612534565b61254c81848461250f565b505050565b5b8181101561257057612565600082612539565b600181019050612552565b5050565b601f8211156125b55761258681611c67565b61258f8461246a565b8101602085101561259e578190505b6125b26125aa8561246a565b830182612551565b50505b505050565b600082821c905092915050565b60006125d8600019846008026125ba565b1980831691505092915050565b60006125f183836125c7565b9150826002028217905092915050565b61260a82612430565b67ffffffffffffffff8111156126235761262261243b565b5b61262d8254611c2b565b612638828285612574565b600060209050601f83116001811461266b5760008415612659578287015190505b61266385826125e5565b8655506126cb565b601f19841661267986611c67565b60005b828110156126a15784890151825560018201915060208501945060208101905061267c565b868310156126be57848901516126ba601f8916826125c7565b8355505b6001600288020188555050505b505050505050565b60006080820190506126e86000830187611824565b6126f5602083018661184e565b61270260408301856118c5565b61270f60608301846118c5565b95945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612774602683611a1c565b915061277f82612718565b604082019050919050565b600060208201905081810360008301526127a381612767565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127e0602083611a1c565b91506127eb826127aa565b602082019050919050565b6000602082019050818103600083015261280f816127d3565b905091905056fea264697066735822122097123275465ebf28c67c80f8cc74fe2270822a328b1635fcaae5417f02f4fc5a64736f6c63430008110033", + "deployedBytecode": "0x6080604052600436106100a75760003560e01c80638da5cb5b116100645780638da5cb5b146101925780638e2749d6146101bd5780639872dbfe146101e6578063b93bd7d414610211578063bfe07da61461024e578063f2fde38b1461027e576100a7565b806331404484146100ac5780634b83a7be146100d55780634e1389ed146100fe5780636193cdfb14610127578063708ace651461013e578063715018a61461017b575b600080fd5b3480156100b857600080fd5b506100d360048036038101906100ce919061153b565b6102a7565b005b3480156100e157600080fd5b506100fc60048036038101906100f791906115cd565b610403565b005b34801561010a57600080fd5b506101256004803603810190610120919061169c565b610626565b005b34801561013357600080fd5b5061013c610ab8565b005b34801561014a57600080fd5b5061016560048036038101906101609190611775565b610b48565b6040516101729190611833565b60405180910390f35b34801561018757600080fd5b50610190610e38565b005b34801561019e57600080fd5b506101a7610e4c565b6040516101b4919061185d565b60405180910390f35b3480156101c957600080fd5b506101e460048036038101906101df9190611878565b610e75565b005b3480156101f257600080fd5b506101fb610ffe565b60405161020891906118d4565b60405180910390f35b34801561021d57600080fd5b50610238600480360381019061023391906118ef565b611004565b6040516102459190611937565b60405180910390f35b610268600480360381019061026391906119a8565b611024565b6040516102759190611833565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a091906118ef565b61132e565b005b803373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461034c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034390611a9f565b60405180910390fd5b60006003600084815260200190815260200160002060040160006101000a81548160ff0219169083151502179055506003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f81a84d666c6a692c1cf93ca3b3648cc7bf23d34a1c6afa2e15e346f424baa06c836040516103f79190611833565b60405180910390a25050565b823373ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049f90611a9f565b60405180910390fd5b6104b28383610e75565b60006003600086815260200190815260200160002090508060040160009054906101000a900460ff16156104ea576104e9856102a7565b5b60008160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600201546040518363ffffffff1660e01b8152600401610576929190611abf565b6020604051808303816000875af1158015610595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b99190611b14565b50600082600201549050600083600201819055503373ffffffffffffffffffffffffffffffffffffffff167fbc44d79619424e05dd4e8ea6a3e67823f43e45cf0c9b52463ec7a8806146991d8883604051610615929190611b41565b60405180910390a250505050505050565b6000600460008781526020019081526020016000209050438160050154118015610654575060008160040154115b610693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068a90611bdc565b60405180910390fd5b600060036000836000015481526020019081526020016000209050600060036000846000015481526020019081526020016000206005018360040154886040516020016106e293929190611d20565b60405160208183030381529060405280519060200120905060008160405160200161070d9190611dc6565b6040516020818303038152906040528051906020012090506005600083815260200190815260200160002060009054906101000a900460ff1615610786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077d90611e5e565b60405180910390fd5b6000600182878a8a604051600081526020016040526040516107ab9493929190611e8d565b6020604051602081039080840390855afa1580156107cd573d6000803e3d6000fd5b505050602060405103519050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085c90611f44565b60405180910390fd5b60008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8760010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886003015489600401546108e39190611f93565b6040518363ffffffff1660e01b8152600401610900929190611abf565b6020604051808303816000875af115801561091f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109439190611b14565b506000866003015411156109f9578073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688600301546040518363ffffffff1660e01b81526004016109b4929190611abf565b6020604051808303816000875af11580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f79190611b14565b505b600086600401819055506000866005018190555060016005600086815260200190815260200160002060006101000a81548160ff0219169083151502179055508560010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d8c604051610aa39190611833565b60405180910390a25050505050505050505050565b610ac06113b1565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b0b573d6000803e3d6000fd5b507fbf0d92faf65e256806eefa1a0d281d4873cc3c80d1ed25b8ae6f7cc66fc918ef3382604051610b3d929190611abf565b60405180910390a150565b6000610b548383610e75565b6000600360008a815260200190815260200160002090508060040160009054906101000a900460ff16610bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb390612013565b60405180910390fd5b8481600201541015610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa906120a5565b60405180910390fd5b888589604051602001610c189392919061210d565b60405160208183030381529060405280519060200120915043600460008481526020019081526020016000206005015410610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f906121bc565b60405180910390fd5b60006040518060c001604052808b81526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188815260200187815260200160015443610ced91906121dc565b815250905080600460008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015590505085826002016000828254610dd39190611f93565b92505081905550828973ffffffffffffffffffffffffffffffffffffffff167f51a2e0610065407cec419b292d4e03c1149e2336f34bc3bdab24dba9fe7edbff8c89604051610e23929190611b41565b60405180910390a35050979650505050505050565b610e406113b1565b610e4a600061142f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600082829050905060005b818161ffff161015610ff85760006004600086868561ffff16818110610ea957610ea8612210565b5b9050602002013581526020019081526020016000209050438160050154108015610ed7575060008160040154115b610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d906122b1565b60405180910390fd5b806004015460036000836000015481526020019081526020016000206002016000828254610f4491906121dc565b92505081905550600081600401819055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f67e089478e21dd12c98e69331c4152f6c9b2038b91e0f28268ffa01558c0b4ff86868561ffff16818110610fc857610fc7612210565b5b90506020020135604051610fdc9190611833565b60405180910390a2508080610ff0906122df565b915050610e80565b50505050565b60015481565b60026020528060005260406000206000915054906101000a900460ff1681565b600082828560405160200161103b9392919061233d565b6040516020818303038152906040528051906020012090506003600082815260200190815260200160002060040160009054906101000a900460ff16156110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae906123d9565b60405180910390fd5b60008590508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b81526004016110f9939291906123f9565b6020604051808303816000875af1158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c9190611b14565b5060006040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200187815260200134815260200160011515815260200186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050806003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160050190816112cc9190612601565b509050503373ffffffffffffffffffffffffffffffffffffffff167fb2d817df1a92003b7e8b40681145547601989b987e206c6f7d0bc463696529138489348a60405161131c94939291906126d3565b60405180910390a25050949350505050565b6113366113b1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c9061278a565b60405180910390fd5b6113ae8161142f565b50565b6113b96114f3565b73ffffffffffffffffffffffffffffffffffffffff166113d7610e4c565b73ffffffffffffffffffffffffffffffffffffffff161461142d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611424906127f6565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600080fd5b6000819050919050565b61151881611505565b811461152357600080fd5b50565b6000813590506115358161150f565b92915050565b600060208284031215611551576115506114fb565b5b600061155f84828501611526565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261158d5761158c611568565b5b8235905067ffffffffffffffff8111156115aa576115a961156d565b5b6020830191508360208202830111156115c6576115c5611572565b5b9250929050565b6000806000604084860312156115e6576115e56114fb565b5b60006115f486828701611526565b935050602084013567ffffffffffffffff81111561161557611614611500565b5b61162186828701611577565b92509250509250925092565b6000819050919050565b6116408161162d565b811461164b57600080fd5b50565b60008135905061165d81611637565b92915050565b600060ff82169050919050565b61167981611663565b811461168457600080fd5b50565b60008135905061169681611670565b92915050565b600080600080600060a086880312156116b8576116b76114fb565b5b60006116c688828901611526565b95505060206116d78882890161164e565b94505060406116e888828901611526565b93505060606116f988828901611526565b925050608061170a88828901611687565b9150509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061174282611717565b9050919050565b61175281611737565b811461175d57600080fd5b50565b60008135905061176f81611749565b92915050565b600080600080600080600060c0888a031215611794576117936114fb565b5b60006117a28a828b01611526565b97505060206117b38a828b01611760565b96505060406117c48a828b01611760565b95505060606117d58a828b0161164e565b94505060806117e68a828b0161164e565b93505060a088013567ffffffffffffffff81111561180757611806611500565b5b6118138a828b01611577565b925092505092959891949750929550565b61182d81611505565b82525050565b60006020820190506118486000830184611824565b92915050565b61185781611737565b82525050565b6000602082019050611872600083018461184e565b92915050565b6000806020838503121561188f5761188e6114fb565b5b600083013567ffffffffffffffff8111156118ad576118ac611500565b5b6118b985828601611577565b92509250509250929050565b6118ce8161162d565b82525050565b60006020820190506118e960008301846118c5565b92915050565b600060208284031215611905576119046114fb565b5b600061191384828501611760565b91505092915050565b60008115159050919050565b6119318161191c565b82525050565b600060208201905061194c6000830184611928565b92915050565b60008083601f84011261196857611967611568565b5b8235905067ffffffffffffffff8111156119855761198461156d565b5b6020830191508360018202830111156119a1576119a0611572565b5b9250929050565b600080600080606085870312156119c2576119c16114fb565b5b60006119d087828801611760565b94505060206119e18782880161164e565b935050604085013567ffffffffffffffff811115611a0257611a01611500565b5b611a0e87828801611952565b925092505092959194509250565b600082825260208201905092915050565b7f50325049583a204f6e6c792073656c6c657220636f756c642063616c6c20746860008201527f69732066756e6374696f6e2e0000000000000000000000000000000000000000602082015250565b6000611a89602c83611a1c565b9150611a9482611a2d565b604082019050919050565b60006020820190508181036000830152611ab881611a7c565b9050919050565b6000604082019050611ad4600083018561184e565b611ae160208301846118c5565b9392505050565b611af18161191c565b8114611afc57600080fd5b50565b600081519050611b0e81611ae8565b92915050565b600060208284031215611b2a57611b296114fb565b5b6000611b3884828501611aff565b91505092915050565b6000604082019050611b566000830185611824565b611b6360208301846118c5565b9392505050565b7f50325049583a204c6f636b20616c72656164792072656c6561736564206f722060008201527f72657475726e6564000000000000000000000000000000000000000000000000602082015250565b6000611bc6602883611a1c565b9150611bd182611b6a565b604082019050919050565b60006020820190508181036000830152611bf581611bb9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c4357607f821691505b602082108103611c5657611c55611bfc565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611c8981611c2b565b611c938186611c5c565b94506001821660008114611cae5760018114611cc357611cf6565b60ff1983168652811515820286019350611cf6565b611ccc85611c67565b60005b83811015611cee57815481890152600182019150602081019050611ccf565b838801955050505b50505092915050565b6000819050919050565b611d1a611d158261162d565b611cff565b82525050565b6000611d2c8286611c7c565b9150611d388285611d09565b602082019150611d488284611d09565b602082019150819050949350505050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611d8f601c83611c5c565b9150611d9a82611d59565b601c82019050919050565b6000819050919050565b611dc0611dbb82611505565b611da5565b82525050565b6000611dd182611d82565b9150611ddd8284611daf565b60208201915081905092915050565b7f50325049583a205472616e73616374696f6e20616c726561647920757365642060008201527f746f20756e6c6f636b207061796d656e74000000000000000000000000000000602082015250565b6000611e48603183611a1c565b9150611e5382611dec565b604082019050919050565b60006020820190508181036000830152611e7781611e3b565b9050919050565b611e8781611663565b82525050565b6000608082019050611ea26000830187611824565b611eaf6020830186611e7e565b611ebc6040830185611824565b611ec96060830184611824565b95945050505050565b7f50325049583a205369676e6572206973206e6f7420612076616c69642073696760008201527f6e65720000000000000000000000000000000000000000000000000000000000602082015250565b6000611f2e602383611a1c565b9150611f3982611ed2565b604082019050919050565b60006020820190508181036000830152611f5d81611f21565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f9e8261162d565b9150611fa98361162d565b9250828203905081811115611fc157611fc0611f64565b5b92915050565b7f50325049583a204465706f736974206e6f742076616c696420616e796d6f7265600082015250565b6000611ffd602083611a1c565b915061200882611fc7565b602082019050919050565b6000602082019050818103600083015261202c81611ff0565b9050919050565b7f50325049583a204e6f7420656e6f75676820746f6b656e2072656d61696e696e60008201527f67206f6e206465706f7369740000000000000000000000000000000000000000602082015250565b600061208f602c83611a1c565b915061209a82612033565b604082019050919050565b600060208201905081810360008301526120be81612082565b9050919050565b60008160601b9050919050565b60006120dd826120c5565b9050919050565b60006120ef826120d2565b9050919050565b61210761210282611737565b6120e4565b82525050565b60006121198286611daf565b6020820191506121298285611d09565b60208201915061213982846120f6565b601482019150819050949350505050565b7f50325049583a20416e6f74686572206c6f636b20776974682073616d6520494460008201527f206973206e6f7420657870697265642079657400000000000000000000000000602082015250565b60006121a6603383611a1c565b91506121b18261214a565b604082019050919050565b600060208201905081810360008301526121d581612199565b9050919050565b60006121e78261162d565b91506121f28361162d565b925082820190508082111561220a57612209611f64565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f50325049583a204c6f636b206e6f742065787069726564206f7220616c72656160008201527f64792072656c6561736564000000000000000000000000000000000000000000602082015250565b600061229b602b83611a1c565b91506122a68261223f565b604082019050919050565b600060208201905081810360008301526122ca8161228e565b9050919050565b600061ffff82169050919050565b60006122ea826122d1565b915061ffff82036122fe576122fd611f64565b5b600182019050919050565b82818337600083830152505050565b60006123248385611c5c565b9350612331838584612309565b82840190509392505050565b600061234a828587612318565b91506123568284611d09565b602082019150819050949350505050565b7f50325049583a204465706f73697420616c726561647920657869737420616e6460008201527f206974206973207374696c6c2076616c69640000000000000000000000000000602082015250565b60006123c3603283611a1c565b91506123ce82612367565b604082019050919050565b600060208201905081810360008301526123f2816123b6565b9050919050565b600060608201905061240e600083018661184e565b61241b602083018561184e565b61242860408301846118c5565b949350505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b6000600883026124b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261247a565b6124c1868361247a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006124fe6124f96124f48461162d565b6124d9565b61162d565b9050919050565b6000819050919050565b612518836124e3565b61252c61252482612505565b848454612487565b825550505050565b600090565b612541612534565b61254c81848461250f565b505050565b5b8181101561257057612565600082612539565b600181019050612552565b5050565b601f8211156125b55761258681611c67565b61258f8461246a565b8101602085101561259e578190505b6125b26125aa8561246a565b830182612551565b50505b505050565b600082821c905092915050565b60006125d8600019846008026125ba565b1980831691505092915050565b60006125f183836125c7565b9150826002028217905092915050565b61260a82612430565b67ffffffffffffffff8111156126235761262261243b565b5b61262d8254611c2b565b612638828285612574565b600060209050601f83116001811461266b5760008415612659578287015190505b61266385826125e5565b8655506126cb565b601f19841661267986611c67565b60005b828110156126a15784890151825560018201915060208501945060208101905061267c565b868310156126be57848901516126ba601f8916826125c7565b8355505b6001600288020188555050505b505050505050565b60006080820190506126e86000830187611824565b6126f5602083018661184e565b61270260408301856118c5565b61270f60608301846118c5565b95945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612774602683611a1c565b915061277f82612718565b604082019050919050565b600060208201905081810360008301526127a381612767565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127e0602083611a1c565b91506127eb826127aa565b602082019050919050565b6000602082019050818103600083015261280f816127d3565b905091905056fea264697066735822122097123275465ebf28c67c80f8cc74fe2270822a328b1635fcaae5417f02f4fc5a64736f6c63430008110033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/p2pix.sol b/contracts/p2pix.sol index 58e095e..813f08d 100644 --- a/contracts/p2pix.sol +++ b/contracts/p2pix.sol @@ -2,22 +2,24 @@ pragma solidity ^0.8.9; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; -contract P2PIX { +contract P2PIX is Ownable { - event DepositAdded(address indexed seller, bytes32 depositID, address token, uint256 price, uint256 amount); + event DepositAdded(address indexed seller, bytes32 depositID, address token, uint256 premium, uint256 amount); event DepositClosed(address indexed seller, bytes32 depositID); event DepositWithdrawn(address indexed seller, bytes32 depositID, uint256 amount); - event DepositPriceChanged(bytes32 indexed depositID, uint256 price); - event LockAdded(address indexed buyer, bytes32 indexed lockID, bytes32 depositID, uint256 amount, uint256 locked); + event LockAdded(address indexed buyer, bytes32 indexed lockID, bytes32 depositID, uint256 amount); event LockReleased(address indexed buyer, bytes32 lockId); event LockReturned(address indexed buyer, bytes32 lockId); + // Events + event PremiumsWithdrawn(address owner, uint256 amount); struct Deposit { address seller; address token; // ERC20 stable token address uint256 remaining; // Remaining tokens available - uint256 price; // Price in R$ per token + uint256 premium; // Premium paid in ETH for priority bool valid; // Could be invalidated by the seller string pixTarget; // The PIX account for the seller receive transactions } @@ -28,7 +30,6 @@ contract P2PIX { address relayerAddress; // Relayer address that facilitated this transaction uint256 relayerPremium; // Amount to be paid for relayer uint256 amount; // Amount to be tranfered via PIX - uint256 locked; // Amount locked in tokens from deposit uint256 expirationBlock; // If not paid at this block will be expired } @@ -49,7 +50,7 @@ contract P2PIX { _; } - constructor (uint256 defaultBlocks, address[] memory validSigners) { + constructor (uint256 defaultBlocks, address[] memory validSigners) Ownable() { defaultLockBlocks = defaultBlocks; for (uint8 i = 0; i < validSigners.length; i++){ validBacenSigners[validSigners[i]] = true; @@ -60,16 +61,15 @@ contract P2PIX { function deposit( address token, uint256 amount, - uint256 price, string calldata pixTarget - ) public returns (bytes32 depositID){ + ) public payable returns (bytes32 depositID){ depositID = keccak256(abi.encodePacked(pixTarget, amount)); require(!mapDeposits[depositID].valid, 'P2PIX: Deposit already exist and it is still valid'); IERC20 t = IERC20(token); t.transferFrom(msg.sender, address(this), amount); - Deposit memory d = Deposit(msg.sender, token, amount, price, true, pixTarget); + Deposit memory d = Deposit(msg.sender, token, amount, msg.value, true, pixTarget); mapDeposits[depositID] = d; - emit DepositAdded(msg.sender, depositID, token, price, amount); + emit DepositAdded(msg.sender, depositID, token, msg.value, amount); } // Vendedor pode invalidar da ordem de venda impedindo novos locks na mesma (isso não afeta nenhum lock que esteja ativo). @@ -95,8 +95,7 @@ contract P2PIX { unlockExpired(expiredLocks); Deposit storage d = mapDeposits[depositID]; require(d.valid, "P2PIX: Deposit not valid anymore"); - uint256 toLock = (amount * 1 ether) / d.price; - require(d.remaining >= toLock, "P2PIX: Not enough token remaining on deposit"); + require(d.remaining >= amount, "P2PIX: Not enough token remaining on deposit"); lockID = keccak256(abi.encodePacked(depositID, amount, targetAddress)); require( mapLocks[lockID].expirationBlock < block.number, @@ -108,12 +107,11 @@ contract P2PIX { relayerAddress, relayerPremium, amount, - toLock, block.number+defaultLockBlocks ); mapLocks[lockID] = l; - d.remaining -= toLock; - emit LockAdded(targetAddress, lockID, depositID, amount, toLock); + d.remaining -= amount; + emit LockAdded(targetAddress, lockID, depositID, amount); } // Relayer interage com o smart contract, colocando no calldata o comprovante do PIX realizado. @@ -127,7 +125,7 @@ contract P2PIX { ) public { // TODO **Prevenir que um Pix não relacionado ao APP seja usado pois tem o mesmo destino Lock storage l = mapLocks[lockID]; - require(l.expirationBlock > block.number && l.locked > 0, "P2PIX: Lock already released or returned"); + require(l.expirationBlock > block.number && l.amount > 0, "P2PIX: Lock already released or returned"); Deposit storage d = mapDeposits[l.depositID]; bytes32 message = keccak256(abi.encodePacked( mapDeposits[l.depositID].pixTarget, @@ -139,29 +137,22 @@ contract P2PIX { address signer = ecrecover(messageDigest, v, r, s); require(validBacenSigners[signer], "P2PIX: Signer is not a valid signer"); IERC20 t = IERC20(d.token); - t.transfer(l.targetAddress, l.locked-l.relayerPremium); + t.transfer(l.targetAddress, l.amount-l.relayerPremium); if (l.relayerPremium > 0) t.transfer(l.relayerAddress, l.relayerPremium); - l.locked = 0; + l.amount = 0; l.expirationBlock = 0; usedTransactions[message] = true; emit LockReleased(l.targetAddress, lockID); } - // Change price for deposit amount - function changeDepositPrice(bytes32 depositID, uint256 price) public onlySeller(depositID) { - Deposit storage d = mapDeposits[depositID]; - d.price = price; - emit DepositPriceChanged(depositID, price); - } - // Unlock expired locks function unlockExpired(bytes32[] calldata lockIDs) public { uint256 locksSize = lockIDs.length; for (uint16 i = 0; i < locksSize; i++){ Lock storage l = mapLocks[lockIDs[i]]; - require(l.expirationBlock < block.number && l.locked > 0, "P2PIX: Lock not expired or already released"); - mapDeposits[l.depositID].remaining += l.locked; - l.locked = 0; + require(l.expirationBlock < block.number && l.amount > 0, "P2PIX: Lock not expired or already released"); + mapDeposits[l.depositID].remaining += l.amount; + l.amount = 0; emit LockReturned(l.targetAddress, lockIDs[i]); } } @@ -182,4 +173,11 @@ contract P2PIX { emit DepositWithdrawn(msg.sender, depositID, amount); } + // O dono do contrato pode sacar os premiums pagos + function withdrawPremiums() external onlyOwner { + uint256 balance = address(this).balance; + payable(msg.sender).transfer(balance); + emit PremiumsWithdrawn(msg.sender, balance); + } + } \ No newline at end of file diff --git a/test/1-deposit.test.js b/test/1-deposit.test.js index 7a9e877..9b3ddd6 100644 --- a/test/1-deposit.test.js +++ b/test/1-deposit.test.js @@ -40,15 +40,15 @@ describe("P2PIX deposit test", function () { transaction = await p2pix.deposit( erc20.address, ethers.utils.parseEther('1000'), - ethers.utils.parseEther('0.99'), - 'SELLER PIX KEY' + 'SELLER PIX KEY', + {value:ethers.utils.parseEther('0.1')} ); depositID = ethers.utils.solidityKeccak256(['string', 'uint256'], ['SELLER PIX KEY', ethers.utils.parseEther('1000')]) await expect(transaction).to.emit(p2pix, 'DepositAdded').withArgs( owner.address, depositID, erc20.address, - ethers.utils.parseEther('0.99'), + ethers.utils.parseEther('0.1'), ethers.utils.parseEther('1000') ) }) @@ -57,8 +57,8 @@ describe("P2PIX deposit test", function () { await expect(p2pix.deposit( erc20.address, ethers.utils.parseEther('1000'), - ethers.utils.parseEther('0.99'), - 'SELLER PIX KEY' + 'SELLER PIX KEY', + {value:ethers.utils.parseEther('0.1')} )) .to.be.revertedWith('P2PIX: Deposit already exist and it is still valid'); }) @@ -83,15 +83,15 @@ describe("P2PIX deposit test", function () { transaction = await p2pix.deposit( erc20.address, ethers.utils.parseEther('1000'), - ethers.utils.parseEther('0.99'), - 'SELLER PIX KEY' + 'SELLER PIX KEY', + {value:ethers.utils.parseEther('0.1')} ); depositID = ethers.utils.solidityKeccak256(['string', 'uint256'], ['SELLER PIX KEY', ethers.utils.parseEther('1000')]) await expect(transaction).to.emit(p2pix, 'DepositAdded').withArgs( owner.address, depositID, erc20.address, - ethers.utils.parseEther('0.99'), + ethers.utils.parseEther('0.1'), ethers.utils.parseEther('1000') ) }) diff --git a/test/2-lock-release.test.js b/test/2-lock-release.test.js index c6cd66c..73ae633 100644 --- a/test/2-lock-release.test.js +++ b/test/2-lock-release.test.js @@ -41,15 +41,15 @@ describe("P2PIX lock/release test", function () { transaction = await p2pix.deposit( erc20.address, ethers.utils.parseEther('1000'), - ethers.utils.parseEther('0.99'), - 'SELLER PIX KEY' + 'SELLER PIX KEY', + {value:ethers.utils.parseEther('0.1')} ); depositID = ethers.utils.solidityKeccak256(['string', 'uint256'], ['SELLER PIX KEY', ethers.utils.parseEther('1000')]) await expect(transaction).to.emit(p2pix, 'DepositAdded').withArgs( owner.address, depositID, erc20.address, - ethers.utils.parseEther('0.99'), + ethers.utils.parseEther('0.1'), ethers.utils.parseEther('1000') ) console.log('GAS USED:', (await transaction.wait()).cumulativeGasUsed.toString()) @@ -73,8 +73,7 @@ describe("P2PIX lock/release test", function () { wallet3.address, lockID, depositID, - ethers.utils.parseEther('100'), - "101010101010101010101" + ethers.utils.parseEther('100') ) console.log('GAS USED:', (await transaction.wait()).cumulativeGasUsed.toString()) }) @@ -113,7 +112,7 @@ describe("P2PIX lock/release test", function () { lockID ) console.log('GAS USED:', (await transaction.wait()).cumulativeGasUsed.toString()) - expect(await erc20.balanceOf(wallet3.address)).to.equal("101010101010101010101"); + expect(await erc20.balanceOf(wallet3.address)).to.equal(ethers.utils.parseEther('100')); }) it("Should allow recreate same lock", async function () { @@ -135,7 +134,6 @@ describe("P2PIX lock/release test", function () { lockID, depositID, ethers.utils.parseEther('100'), - "101010101010101010101" ) }) @@ -167,7 +165,7 @@ describe("P2PIX lock/release test", function () { sig.s, sig.v ) - expect(await erc20.balanceOf(wallet3.address)).to.equal("202020202020202020202"); + expect(await erc20.balanceOf(wallet3.address)).to.equal(ethers.utils.parseEther('200')); }) it("Should prevent release again the lock", async function () { @@ -195,7 +193,7 @@ describe("P2PIX lock/release test", function () { wallet3.address, ethers.constants.AddressZero, '0', - ethers.utils.parseEther('800'), + ethers.utils.parseEther('900'), [] )).to.be.revertedWith('P2PIX: Not enough token remaining on deposit'); }) @@ -218,8 +216,7 @@ describe("P2PIX lock/release test", function () { wallet3.address, lockID, depositID, - ethers.utils.parseEther('100'), - "101010101010101010101" + ethers.utils.parseEther('100') ) })