From c9243a38d1bb34c2b49e30ae1b1cdd512682c624 Mon Sep 17 00:00:00 2001 From: Filipe Soccol Date: Tue, 25 Oct 2022 15:21:54 -0300 Subject: [PATCH] Added tests to check deposit and withdraw. --- artifacts/contracts/p2pix.sol/P2PIX.dbg.json | 2 +- artifacts/contracts/p2pix.sol/P2PIX.json | 29 +++++++++- contracts/p2pix.sol | 8 ++- test/1-deposit.test.js | 58 +++++++++++++++++++- 4 files changed, 89 insertions(+), 8 deletions(-) diff --git a/artifacts/contracts/p2pix.sol/P2PIX.dbg.json b/artifacts/contracts/p2pix.sol/P2PIX.dbg.json index cb70068..4bdcda0 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/95a2398b2b781a5a5893b30eeccd0c46.json" + "buildInfo": "../../build-info/e163883cb06c01d261c8d27101a410f2.json" } diff --git a/artifacts/contracts/p2pix.sol/P2PIX.json b/artifacts/contracts/p2pix.sol/P2PIX.json index ea3c577..f015f6e 100644 --- a/artifacts/contracts/p2pix.sol/P2PIX.json +++ b/artifacts/contracts/p2pix.sol/P2PIX.json @@ -69,6 +69,31 @@ "name": "DepositClosed", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "seller", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "depositID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositWithdrawn", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -260,8 +285,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b50604051620020223803806200202283398181016040528101906200003791906200030d565b8160008190555060005b81518160ff161015620000db576001806000848460ff16815181106200006c576200006b62000373565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620000d290620003de565b91505062000041565b5050506200040c565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6200010d81620000f8565b81146200011957600080fd5b50565b6000815190506200012d8162000102565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001838262000138565b810181811067ffffffffffffffff82111715620001a557620001a462000149565b5b80604052505050565b6000620001ba620000e4565b9050620001c8828262000178565b919050565b600067ffffffffffffffff821115620001eb57620001ea62000149565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022e8262000201565b9050919050565b620002408162000221565b81146200024c57600080fd5b50565b600081519050620002608162000235565b92915050565b60006200027d6200027784620001cd565b620001ae565b90508083825260208201905060208402830185811115620002a357620002a2620001fc565b5b835b81811015620002d05780620002bb88826200024f565b845260208401935050602081019050620002a5565b5050509392505050565b600082601f830112620002f257620002f162000133565b5b81516200030484826020860162000266565b91505092915050565b60008060408385031215620003275762000326620000ee565b5b600062000337858286016200011c565b925050602083015167ffffffffffffffff8111156200035b576200035a620000f3565b5b6200036985828601620002da565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff82169050919050565b6000620003eb82620003d1565b915060ff8203620004015762000400620003a2565b5b600182019050919050565b611c06806200041c6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806331404484146100675780634e1389ed146100835780638e19899e1461009f578063b21a99d2146100bb578063b93bd7d4146100eb578063bfe07da61461011b575b600080fd5b610081600480360381019061007c9190610e9b565b61014b565b005b61009d60048036038101906100989190610f37565b6102a7565b005b6100b960048036038101906100b49190610e9b565b61054d565b005b6100d560048036038101906100d09190611010565b61061c565b6040516100e2919061109a565b60405180910390f35b610105600480360381019061010091906110b5565b6109cb565b60405161011291906110fd565b60405180910390f35b6101356004803603810190610130919061117d565b6109eb565b604051610142919061109a565b60405180910390f35b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146101f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e790611274565b60405180910390fd5b60006002600084815260200190815260200160002060030160006101000a81548160ff0219169083151502179055506002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f81a84d666c6a692c1cf93ca3b3648cc7bf23d34a1c6afa2e15e346f424baa06c8360405161029b919061109a565b60405180910390a25050565b6000600560008781526020019081526020016000209050600060026000836000015481526020019081526020016000206004018260040154876040516020016102f2939291906113b8565b6040516020818303038152906040528051906020012090506006600082815260200190815260200160002060009054906101000a900460ff161561036b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036290611463565b60405180910390fd5b6000600182858888604051600081526020016040526040516103909493929190611492565b6020604051602081039080840390855afa1580156103b2573d6000803e3d6000fd5b505050602060405103519050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661044a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044190611523565b60405180910390fd5b60018360060160006101000a81548160ff02191690831515021790555060016006600084815260200190815260200160002060006101000a81548160ff0219169083151502179055506104a08360000154610bf7565b600460008560000154815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055508260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d8960405161053b919061109a565b60405180910390a25050505050505050565b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e990611274565b60405180910390fd5b6105fb82610bf7565b50600060026000848152602001908152602001600020600201819055505050565b6000806002600088815260200190815260200160002090508060030160009054906101000a900460ff16610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c9061158f565b60405180910390fd5b828160020154116106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c2906115fb565b60405180910390fd5b8683876040516020016106e093929190611684565b60405160208183030381529060405280519060200120915043600560008481526020019081526020016000206005015410610750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074790611733565b60405180910390fd5b60006040518060e001604052808981526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001600054436107b59190611782565b815260200160001515815250905080600560008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555090505082600360008a8152602001908152602001600020600460008b815260200190815260200160002060009054906101000a900461ffff1661ffff16815481106108fb576108fa6117b6565b5b906000526020600020018190555060046000898152602001908152602001600020600081819054906101000a900461ffff168092919061093a906117f3565b91906101000a81548161ffff021916908361ffff1602179055505083826002016000828254610969919061181d565b925050819055508673ffffffffffffffffffffffffffffffffffffffff167f628415da70a2c48a4b0ec6d330bb84602bfa2b9f13415d12e273a7844ec8126b84866040516109b8929190611860565b60405180910390a2505095945050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b6000806040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200160011515815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050838386604051602001610a9f939291906118bd565b604051602081830303815290604052805190602001209150806002600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055506080820151816004019081610b989190611ab8565b509050503373ffffffffffffffffffffffffffffffffffffffff167fff446757a2885630e74116c217f433ee3c8ff5e1a60055ca9c30d89f29e6f1b4838888604051610be693929190611b99565b60405180910390a250949350505050565b60008060036000848152602001908152602001600020905060006004600085815260200190815260200160002060009054906101000a900461ffff1690506000925060005b8161ffff168161ffff161015610e5357600060056000858461ffff1681548110610c6957610c686117b6565b5b906000526020600020015481526020019081526020016000206040518060e0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509050438160a00151118015610d9357508060c00151155b15610df257838261ffff1681548110610daf57610dae6117b6565b5b9060005260206000200154848661ffff1681548110610dd157610dd06117b6565b5b90600052602060002001819055508480610dea906117f3565b955050610e3f565b438160a00151108015610e0757508060c00151155b15610e3e578060800151600260008881526020019081526020016000206002016000828254610e369190611782565b925050819055505b5b508080610e4b906117f3565b915050610c3c565b505050919050565b600080fd5b600080fd5b6000819050919050565b610e7881610e65565b8114610e8357600080fd5b50565b600081359050610e9581610e6f565b92915050565b600060208284031215610eb157610eb0610e5b565b5b6000610ebf84828501610e86565b91505092915050565b6000819050919050565b610edb81610ec8565b8114610ee657600080fd5b50565b600081359050610ef881610ed2565b92915050565b600060ff82169050919050565b610f1481610efe565b8114610f1f57600080fd5b50565b600081359050610f3181610f0b565b92915050565b600080600080600060a08688031215610f5357610f52610e5b565b5b6000610f6188828901610e86565b9550506020610f7288828901610ee9565b9450506040610f8388828901610e86565b9350506060610f9488828901610e86565b9250506080610fa588828901610f22565b9150509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610fdd82610fb2565b9050919050565b610fed81610fd2565b8114610ff857600080fd5b50565b60008135905061100a81610fe4565b92915050565b600080600080600060a0868803121561102c5761102b610e5b565b5b600061103a88828901610e86565b955050602061104b88828901610ffb565b945050604061105c88828901610ffb565b935050606061106d88828901610ee9565b925050608061107e88828901610ee9565b9150509295509295909350565b61109481610e65565b82525050565b60006020820190506110af600083018461108b565b92915050565b6000602082840312156110cb576110ca610e5b565b5b60006110d984828501610ffb565b91505092915050565b60008115159050919050565b6110f7816110e2565b82525050565b600060208201905061111260008301846110ee565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261113d5761113c611118565b5b8235905067ffffffffffffffff81111561115a5761115961111d565b5b60208301915083600182028301111561117657611175611122565b5b9250929050565b6000806000806060858703121561119757611196610e5b565b5b60006111a587828801610ffb565b94505060206111b687828801610ee9565b935050604085013567ffffffffffffffff8111156111d7576111d6610e60565b5b6111e387828801611127565b925092505092959194509250565b600082825260208201905092915050565b7f50325049583a204f6e6c792073656c6c657220636f756c642063616c6c20746860008201527f69732066756e6374696f6e2e0000000000000000000000000000000000000000602082015250565b600061125e602c836111f1565b915061126982611202565b604082019050919050565b6000602082019050818103600083015261128d81611251565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806112db57607f821691505b6020821081036112ee576112ed611294565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611321816112c3565b61132b81866112f4565b94506001821660008114611346576001811461135b5761138e565b60ff198316865281151582028601935061138e565b611364856112ff565b60005b8381101561138657815481890152600182019150602081019050611367565b838801955050505b50505092915050565b6000819050919050565b6113b26113ad82610ec8565b611397565b82525050565b60006113c48286611314565b91506113d082856113a1565b6020820191506113e082846113a1565b602082019150819050949350505050565b7f5472616e73616374696f6e20616c7265616479207573656420746f20756e6c6f60008201527f636b207061796d656e742e000000000000000000000000000000000000000000602082015250565b600061144d602b836111f1565b9150611458826113f1565b604082019050919050565b6000602082019050818103600083015261147c81611440565b9050919050565b61148c81610efe565b82525050565b60006080820190506114a7600083018761108b565b6114b46020830186611483565b6114c1604083018561108b565b6114ce606083018461108b565b95945050505050565b7f5369676e6572206973206e6f7420612076616c6964207369676e65722e000000600082015250565b600061150d601d836111f1565b9150611518826114d7565b602082019050919050565b6000602082019050818103600083015261153c81611500565b9050919050565b7f50325049583a204465706f736974206e6f742076616c696420616e796d6f7265600082015250565b60006115796020836111f1565b915061158482611543565b602082019050919050565b600060208201905081810360008301526115a88161156c565b9050919050565b7f50325049583a204e6f7420656e6f7567682072656d61696e696e670000000000600082015250565b60006115e5601b836111f1565b91506115f0826115af565b602082019050919050565b60006020820190508181036000830152611614816115d8565b9050919050565b6000819050919050565b61163661163182610e65565b61161b565b82525050565b60008160601b9050919050565b60006116548261163c565b9050919050565b600061166682611649565b9050919050565b61167e61167982610fd2565b61165b565b82525050565b60006116908286611625565b6020820191506116a082856113a1565b6020820191506116b0828461166d565b601482019150819050949350505050565b7f50325049583a20416e6f74686572206c6f636b20776974682073616d6520494460008201527f206973206e6f7420657870697265642079657400000000000000000000000000602082015250565b600061171d6033836111f1565b9150611728826116c1565b604082019050919050565b6000602082019050818103600083015261174c81611710565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061178d82610ec8565b915061179883610ec8565b92508282019050808211156117b0576117af611753565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff82169050919050565b60006117fe826117e5565b915061ffff820361181257611811611753565b5b600182019050919050565b600061182882610ec8565b915061183383610ec8565b925082820390508181111561184b5761184a611753565b5b92915050565b61185a81610ec8565b82525050565b6000604082019050611875600083018561108b565b6118826020830184611851565b9392505050565b82818337600083830152505050565b60006118a483856112f4565b93506118b1838584611889565b82840190509392505050565b60006118ca828587611898565b91506118d682846113a1565b602082019150819050949350505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b60006008830261196e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611931565b6119788683611931565b95508019841693508086168417925050509392505050565b6000819050919050565b60006119b56119b06119ab84610ec8565b611990565b610ec8565b9050919050565b6000819050919050565b6119cf8361199a565b6119e36119db826119bc565b84845461193e565b825550505050565b600090565b6119f86119eb565b611a038184846119c6565b505050565b5b81811015611a2757611a1c6000826119f0565b600181019050611a09565b5050565b601f821115611a6c57611a3d816112ff565b611a4684611921565b81016020851015611a55578190505b611a69611a6185611921565b830182611a08565b50505b505050565b600082821c905092915050565b6000611a8f60001984600802611a71565b1980831691505092915050565b6000611aa88383611a7e565b9150826002028217905092915050565b611ac1826118e7565b67ffffffffffffffff811115611ada57611ad96118f2565b5b611ae482546112c3565b611aef828285611a2b565b600060209050601f831160018114611b225760008415611b10578287015190505b611b1a8582611a9c565b865550611b82565b601f198416611b30866112ff565b60005b82811015611b5857848901518255600182019150602085019450602081019050611b33565b86831015611b755784890151611b71601f891682611a7e565b8355505b6001600288020188555050505b505050505050565b611b9381610fd2565b82525050565b6000606082019050611bae600083018661108b565b611bbb6020830185611b8a565b611bc86040830184611851565b94935050505056fea2646970667358221220edcb93a67aab1506665a2a6b0b40c4a620f728d32ab4345732acbd57b494d2f964736f6c63430008110033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806331404484146100675780634e1389ed146100835780638e19899e1461009f578063b21a99d2146100bb578063b93bd7d4146100eb578063bfe07da61461011b575b600080fd5b610081600480360381019061007c9190610e9b565b61014b565b005b61009d60048036038101906100989190610f37565b6102a7565b005b6100b960048036038101906100b49190610e9b565b61054d565b005b6100d560048036038101906100d09190611010565b61061c565b6040516100e2919061109a565b60405180910390f35b610105600480360381019061010091906110b5565b6109cb565b60405161011291906110fd565b60405180910390f35b6101356004803603810190610130919061117d565b6109eb565b604051610142919061109a565b60405180910390f35b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146101f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e790611274565b60405180910390fd5b60006002600084815260200190815260200160002060030160006101000a81548160ff0219169083151502179055506002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f81a84d666c6a692c1cf93ca3b3648cc7bf23d34a1c6afa2e15e346f424baa06c8360405161029b919061109a565b60405180910390a25050565b6000600560008781526020019081526020016000209050600060026000836000015481526020019081526020016000206004018260040154876040516020016102f2939291906113b8565b6040516020818303038152906040528051906020012090506006600082815260200190815260200160002060009054906101000a900460ff161561036b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036290611463565b60405180910390fd5b6000600182858888604051600081526020016040526040516103909493929190611492565b6020604051602081039080840390855afa1580156103b2573d6000803e3d6000fd5b505050602060405103519050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661044a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044190611523565b60405180910390fd5b60018360060160006101000a81548160ff02191690831515021790555060016006600084815260200190815260200160002060006101000a81548160ff0219169083151502179055506104a08360000154610bf7565b600460008560000154815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055508260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d8960405161053b919061109a565b60405180910390a25050505050505050565b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e990611274565b60405180910390fd5b6105fb82610bf7565b50600060026000848152602001908152602001600020600201819055505050565b6000806002600088815260200190815260200160002090508060030160009054906101000a900460ff16610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067c9061158f565b60405180910390fd5b828160020154116106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c2906115fb565b60405180910390fd5b8683876040516020016106e093929190611684565b60405160208183030381529060405280519060200120915043600560008481526020019081526020016000206005015410610750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074790611733565b60405180910390fd5b60006040518060e001604052808981526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001600054436107b59190611782565b815260200160001515815250905080600560008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555090505082600360008a8152602001908152602001600020600460008b815260200190815260200160002060009054906101000a900461ffff1661ffff16815481106108fb576108fa6117b6565b5b906000526020600020018190555060046000898152602001908152602001600020600081819054906101000a900461ffff168092919061093a906117f3565b91906101000a81548161ffff021916908361ffff1602179055505083826002016000828254610969919061181d565b925050819055508673ffffffffffffffffffffffffffffffffffffffff167f628415da70a2c48a4b0ec6d330bb84602bfa2b9f13415d12e273a7844ec8126b84866040516109b8929190611860565b60405180910390a2505095945050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b6000806040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200160011515815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050838386604051602001610a9f939291906118bd565b604051602081830303815290604052805190602001209150806002600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055506080820151816004019081610b989190611ab8565b509050503373ffffffffffffffffffffffffffffffffffffffff167fff446757a2885630e74116c217f433ee3c8ff5e1a60055ca9c30d89f29e6f1b4838888604051610be693929190611b99565b60405180910390a250949350505050565b60008060036000848152602001908152602001600020905060006004600085815260200190815260200160002060009054906101000a900461ffff1690506000925060005b8161ffff168161ffff161015610e5357600060056000858461ffff1681548110610c6957610c686117b6565b5b906000526020600020015481526020019081526020016000206040518060e0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509050438160a00151118015610d9357508060c00151155b15610df257838261ffff1681548110610daf57610dae6117b6565b5b9060005260206000200154848661ffff1681548110610dd157610dd06117b6565b5b90600052602060002001819055508480610dea906117f3565b955050610e3f565b438160a00151108015610e0757508060c00151155b15610e3e578060800151600260008881526020019081526020016000206002016000828254610e369190611782565b925050819055505b5b508080610e4b906117f3565b915050610c3c565b505050919050565b600080fd5b600080fd5b6000819050919050565b610e7881610e65565b8114610e8357600080fd5b50565b600081359050610e9581610e6f565b92915050565b600060208284031215610eb157610eb0610e5b565b5b6000610ebf84828501610e86565b91505092915050565b6000819050919050565b610edb81610ec8565b8114610ee657600080fd5b50565b600081359050610ef881610ed2565b92915050565b600060ff82169050919050565b610f1481610efe565b8114610f1f57600080fd5b50565b600081359050610f3181610f0b565b92915050565b600080600080600060a08688031215610f5357610f52610e5b565b5b6000610f6188828901610e86565b9550506020610f7288828901610ee9565b9450506040610f8388828901610e86565b9350506060610f9488828901610e86565b9250506080610fa588828901610f22565b9150509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610fdd82610fb2565b9050919050565b610fed81610fd2565b8114610ff857600080fd5b50565b60008135905061100a81610fe4565b92915050565b600080600080600060a0868803121561102c5761102b610e5b565b5b600061103a88828901610e86565b955050602061104b88828901610ffb565b945050604061105c88828901610ffb565b935050606061106d88828901610ee9565b925050608061107e88828901610ee9565b9150509295509295909350565b61109481610e65565b82525050565b60006020820190506110af600083018461108b565b92915050565b6000602082840312156110cb576110ca610e5b565b5b60006110d984828501610ffb565b91505092915050565b60008115159050919050565b6110f7816110e2565b82525050565b600060208201905061111260008301846110ee565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261113d5761113c611118565b5b8235905067ffffffffffffffff81111561115a5761115961111d565b5b60208301915083600182028301111561117657611175611122565b5b9250929050565b6000806000806060858703121561119757611196610e5b565b5b60006111a587828801610ffb565b94505060206111b687828801610ee9565b935050604085013567ffffffffffffffff8111156111d7576111d6610e60565b5b6111e387828801611127565b925092505092959194509250565b600082825260208201905092915050565b7f50325049583a204f6e6c792073656c6c657220636f756c642063616c6c20746860008201527f69732066756e6374696f6e2e0000000000000000000000000000000000000000602082015250565b600061125e602c836111f1565b915061126982611202565b604082019050919050565b6000602082019050818103600083015261128d81611251565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806112db57607f821691505b6020821081036112ee576112ed611294565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611321816112c3565b61132b81866112f4565b94506001821660008114611346576001811461135b5761138e565b60ff198316865281151582028601935061138e565b611364856112ff565b60005b8381101561138657815481890152600182019150602081019050611367565b838801955050505b50505092915050565b6000819050919050565b6113b26113ad82610ec8565b611397565b82525050565b60006113c48286611314565b91506113d082856113a1565b6020820191506113e082846113a1565b602082019150819050949350505050565b7f5472616e73616374696f6e20616c7265616479207573656420746f20756e6c6f60008201527f636b207061796d656e742e000000000000000000000000000000000000000000602082015250565b600061144d602b836111f1565b9150611458826113f1565b604082019050919050565b6000602082019050818103600083015261147c81611440565b9050919050565b61148c81610efe565b82525050565b60006080820190506114a7600083018761108b565b6114b46020830186611483565b6114c1604083018561108b565b6114ce606083018461108b565b95945050505050565b7f5369676e6572206973206e6f7420612076616c6964207369676e65722e000000600082015250565b600061150d601d836111f1565b9150611518826114d7565b602082019050919050565b6000602082019050818103600083015261153c81611500565b9050919050565b7f50325049583a204465706f736974206e6f742076616c696420616e796d6f7265600082015250565b60006115796020836111f1565b915061158482611543565b602082019050919050565b600060208201905081810360008301526115a88161156c565b9050919050565b7f50325049583a204e6f7420656e6f7567682072656d61696e696e670000000000600082015250565b60006115e5601b836111f1565b91506115f0826115af565b602082019050919050565b60006020820190508181036000830152611614816115d8565b9050919050565b6000819050919050565b61163661163182610e65565b61161b565b82525050565b60008160601b9050919050565b60006116548261163c565b9050919050565b600061166682611649565b9050919050565b61167e61167982610fd2565b61165b565b82525050565b60006116908286611625565b6020820191506116a082856113a1565b6020820191506116b0828461166d565b601482019150819050949350505050565b7f50325049583a20416e6f74686572206c6f636b20776974682073616d6520494460008201527f206973206e6f7420657870697265642079657400000000000000000000000000602082015250565b600061171d6033836111f1565b9150611728826116c1565b604082019050919050565b6000602082019050818103600083015261174c81611710565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061178d82610ec8565b915061179883610ec8565b92508282019050808211156117b0576117af611753565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff82169050919050565b60006117fe826117e5565b915061ffff820361181257611811611753565b5b600182019050919050565b600061182882610ec8565b915061183383610ec8565b925082820390508181111561184b5761184a611753565b5b92915050565b61185a81610ec8565b82525050565b6000604082019050611875600083018561108b565b6118826020830184611851565b9392505050565b82818337600083830152505050565b60006118a483856112f4565b93506118b1838584611889565b82840190509392505050565b60006118ca828587611898565b91506118d682846113a1565b602082019150819050949350505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b60006008830261196e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611931565b6119788683611931565b95508019841693508086168417925050509392505050565b6000819050919050565b60006119b56119b06119ab84610ec8565b611990565b610ec8565b9050919050565b6000819050919050565b6119cf8361199a565b6119e36119db826119bc565b84845461193e565b825550505050565b600090565b6119f86119eb565b611a038184846119c6565b505050565b5b81811015611a2757611a1c6000826119f0565b600181019050611a09565b5050565b601f821115611a6c57611a3d816112ff565b611a4684611921565b81016020851015611a55578190505b611a69611a6185611921565b830182611a08565b50505b505050565b600082821c905092915050565b6000611a8f60001984600802611a71565b1980831691505092915050565b6000611aa88383611a7e565b9150826002028217905092915050565b611ac1826118e7565b67ffffffffffffffff811115611ada57611ad96118f2565b5b611ae482546112c3565b611aef828285611a2b565b600060209050601f831160018114611b225760008415611b10578287015190505b611b1a8582611a9c565b865550611b82565b601f198416611b30866112ff565b60005b82811015611b5857848901518255600182019150602085019450602081019050611b33565b86831015611b755784890151611b71601f891682611a7e565b8355505b6001600288020188555050505b505050505050565b611b9381610fd2565b82525050565b6000606082019050611bae600083018661108b565b611bbb6020830185611b8a565b611bc86040830184611851565b94935050505056fea2646970667358221220edcb93a67aab1506665a2a6b0b40c4a620f728d32ab4345732acbd57b494d2f964736f6c63430008110033", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620021853803806200218583398181016040528101906200003791906200030d565b8160008190555060005b81518160ff161015620000db576001806000848460ff16815181106200006c576200006b62000373565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620000d290620003de565b91505062000041565b5050506200040c565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6200010d81620000f8565b81146200011957600080fd5b50565b6000815190506200012d8162000102565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001838262000138565b810181811067ffffffffffffffff82111715620001a557620001a462000149565b5b80604052505050565b6000620001ba620000e4565b9050620001c8828262000178565b919050565b600067ffffffffffffffff821115620001eb57620001ea62000149565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022e8262000201565b9050919050565b620002408162000221565b81146200024c57600080fd5b50565b600081519050620002608162000235565b92915050565b60006200027d6200027784620001cd565b620001ae565b90508083825260208201905060208402830185811115620002a357620002a2620001fc565b5b835b81811015620002d05780620002bb88826200024f565b845260208401935050602081019050620002a5565b5050509392505050565b600082601f830112620002f257620002f162000133565b5b81516200030484826020860162000266565b91505092915050565b60008060408385031215620003275762000326620000ee565b5b600062000337858286016200011c565b925050602083015167ffffffffffffffff8111156200035b576200035a620000f3565b5b6200036985828601620002da565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff82169050919050565b6000620003eb82620003d1565b915060ff8203620004015762000400620003a2565b5b600182019050919050565b611d69806200041c6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806331404484146100675780634e1389ed146100835780638e19899e1461009f578063b21a99d2146100bb578063b93bd7d4146100eb578063bfe07da61461011b575b600080fd5b610081600480360381019061007c9190610f6c565b61014b565b005b61009d60048036038101906100989190611008565b6102a7565b005b6100b960048036038101906100b49190610f6c565b61054d565b005b6100d560048036038101906100d091906110e1565b610688565b6040516100e2919061116b565b60405180910390f35b61010560048036038101906101009190611186565b610a37565b60405161011291906111ce565b60405180910390f35b6101356004803603810190610130919061124e565b610a57565b604051610142919061116b565b60405180910390f35b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146101f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e790611345565b60405180910390fd5b60006002600084815260200190815260200160002060030160006101000a81548160ff0219169083151502179055506002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f81a84d666c6a692c1cf93ca3b3648cc7bf23d34a1c6afa2e15e346f424baa06c8360405161029b919061116b565b60405180910390a25050565b6000600560008781526020019081526020016000209050600060026000836000015481526020019081526020016000206004018260040154876040516020016102f293929190611489565b6040516020818303038152906040528051906020012090506006600082815260200190815260200160002060009054906101000a900460ff161561036b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036290611534565b60405180910390fd5b6000600182858888604051600081526020016040526040516103909493929190611563565b6020604051602081039080840390855afa1580156103b2573d6000803e3d6000fd5b505050602060405103519050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661044a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610441906115f4565b60405180910390fd5b60018360060160006101000a81548160ff02191690831515021790555060016006600084815260200190815260200160002060006101000a81548160ff0219169083151502179055506104a08360000154610cc8565b600460008560000154815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055508260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d8960405161053b919061116b565b60405180910390a25050505050505050565b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e990611345565b60405180910390fd5b6105fb82610cc8565b50600060026000848152602001908152602001600020600201549050600060026000858152602001908152602001600020600201819055503373ffffffffffffffffffffffffffffffffffffffff167fbc44d79619424e05dd4e8ea6a3e67823f43e45cf0c9b52463ec7a8806146991d848360405161067b929190611623565b60405180910390a2505050565b6000806002600088815260200190815260200160002090508060030160009054906101000a900460ff166106f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e890611698565b60405180910390fd5b82816002015411610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e90611704565b60405180910390fd5b86838760405160200161074c9392919061178d565b604051602081830303815290604052805190602001209150436005600084815260200190815260200160002060050154106107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b39061183c565b60405180910390fd5b60006040518060e001604052808981526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200160005443610821919061188b565b815260200160001515815250905080600560008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555090505082600360008a8152602001908152602001600020600460008b815260200190815260200160002060009054906101000a900461ffff1661ffff1681548110610967576109666118bf565b5b906000526020600020018190555060046000898152602001908152602001600020600081819054906101000a900461ffff16809291906109a6906118fc565b91906101000a81548161ffff021916908361ffff16021790555050838260020160008282546109d59190611926565b925050819055508673ffffffffffffffffffffffffffffffffffffffff167f628415da70a2c48a4b0ec6d330bb84602bfa2b9f13415d12e273a7844ec8126b8486604051610a24929190611623565b60405180910390a2505095945050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b6000828285604051602001610a6e9392919061198e565b6040516020818303038152906040528051906020012090506002600082815260200190815260200160002060030160009054906101000a900460ff1615610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190611a2a565b60405180910390fd5b60006040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200160011515815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050806002600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055506080820151816004019081610c699190611c1b565b509050503373ffffffffffffffffffffffffffffffffffffffff167fff446757a2885630e74116c217f433ee3c8ff5e1a60055ca9c30d89f29e6f1b4838888604051610cb793929190611cfc565b60405180910390a250949350505050565b60008060036000848152602001908152602001600020905060006004600085815260200190815260200160002060009054906101000a900461ffff1690506000925060005b8161ffff168161ffff161015610f2457600060056000858461ffff1681548110610d3a57610d396118bf565b5b906000526020600020015481526020019081526020016000206040518060e0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509050438160a00151118015610e6457508060c00151155b15610ec357838261ffff1681548110610e8057610e7f6118bf565b5b9060005260206000200154848661ffff1681548110610ea257610ea16118bf565b5b90600052602060002001819055508480610ebb906118fc565b955050610f10565b438160a00151108015610ed857508060c00151155b15610f0f578060800151600260008881526020019081526020016000206002016000828254610f07919061188b565b925050819055505b5b508080610f1c906118fc565b915050610d0d565b505050919050565b600080fd5b600080fd5b6000819050919050565b610f4981610f36565b8114610f5457600080fd5b50565b600081359050610f6681610f40565b92915050565b600060208284031215610f8257610f81610f2c565b5b6000610f9084828501610f57565b91505092915050565b6000819050919050565b610fac81610f99565b8114610fb757600080fd5b50565b600081359050610fc981610fa3565b92915050565b600060ff82169050919050565b610fe581610fcf565b8114610ff057600080fd5b50565b60008135905061100281610fdc565b92915050565b600080600080600060a0868803121561102457611023610f2c565b5b600061103288828901610f57565b955050602061104388828901610fba565b945050604061105488828901610f57565b935050606061106588828901610f57565b925050608061107688828901610ff3565b9150509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110ae82611083565b9050919050565b6110be816110a3565b81146110c957600080fd5b50565b6000813590506110db816110b5565b92915050565b600080600080600060a086880312156110fd576110fc610f2c565b5b600061110b88828901610f57565b955050602061111c888289016110cc565b945050604061112d888289016110cc565b935050606061113e88828901610fba565b925050608061114f88828901610fba565b9150509295509295909350565b61116581610f36565b82525050565b6000602082019050611180600083018461115c565b92915050565b60006020828403121561119c5761119b610f2c565b5b60006111aa848285016110cc565b91505092915050565b60008115159050919050565b6111c8816111b3565b82525050565b60006020820190506111e360008301846111bf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261120e5761120d6111e9565b5b8235905067ffffffffffffffff81111561122b5761122a6111ee565b5b602083019150836001820283011115611247576112466111f3565b5b9250929050565b6000806000806060858703121561126857611267610f2c565b5b6000611276878288016110cc565b945050602061128787828801610fba565b935050604085013567ffffffffffffffff8111156112a8576112a7610f31565b5b6112b4878288016111f8565b925092505092959194509250565b600082825260208201905092915050565b7f50325049583a204f6e6c792073656c6c657220636f756c642063616c6c20746860008201527f69732066756e6374696f6e2e0000000000000000000000000000000000000000602082015250565b600061132f602c836112c2565b915061133a826112d3565b604082019050919050565b6000602082019050818103600083015261135e81611322565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806113ac57607f821691505b6020821081036113bf576113be611365565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546113f281611394565b6113fc81866113c5565b94506001821660008114611417576001811461142c5761145f565b60ff198316865281151582028601935061145f565b611435856113d0565b60005b8381101561145757815481890152600182019150602081019050611438565b838801955050505b50505092915050565b6000819050919050565b61148361147e82610f99565b611468565b82525050565b600061149582866113e5565b91506114a18285611472565b6020820191506114b18284611472565b602082019150819050949350505050565b7f5472616e73616374696f6e20616c7265616479207573656420746f20756e6c6f60008201527f636b207061796d656e742e000000000000000000000000000000000000000000602082015250565b600061151e602b836112c2565b9150611529826114c2565b604082019050919050565b6000602082019050818103600083015261154d81611511565b9050919050565b61155d81610fcf565b82525050565b6000608082019050611578600083018761115c565b6115856020830186611554565b611592604083018561115c565b61159f606083018461115c565b95945050505050565b7f5369676e6572206973206e6f7420612076616c6964207369676e65722e000000600082015250565b60006115de601d836112c2565b91506115e9826115a8565b602082019050919050565b6000602082019050818103600083015261160d816115d1565b9050919050565b61161d81610f99565b82525050565b6000604082019050611638600083018561115c565b6116456020830184611614565b9392505050565b7f50325049583a204465706f736974206e6f742076616c696420616e796d6f7265600082015250565b60006116826020836112c2565b915061168d8261164c565b602082019050919050565b600060208201905081810360008301526116b181611675565b9050919050565b7f50325049583a204e6f7420656e6f7567682072656d61696e696e670000000000600082015250565b60006116ee601b836112c2565b91506116f9826116b8565b602082019050919050565b6000602082019050818103600083015261171d816116e1565b9050919050565b6000819050919050565b61173f61173a82610f36565b611724565b82525050565b60008160601b9050919050565b600061175d82611745565b9050919050565b600061176f82611752565b9050919050565b611787611782826110a3565b611764565b82525050565b6000611799828661172e565b6020820191506117a98285611472565b6020820191506117b98284611776565b601482019150819050949350505050565b7f50325049583a20416e6f74686572206c6f636b20776974682073616d6520494460008201527f206973206e6f7420657870697265642079657400000000000000000000000000602082015250565b60006118266033836112c2565b9150611831826117ca565b604082019050919050565b6000602082019050818103600083015261185581611819565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061189682610f99565b91506118a183610f99565b92508282019050808211156118b9576118b861185c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff82169050919050565b6000611907826118ee565b915061ffff820361191b5761191a61185c565b5b600182019050919050565b600061193182610f99565b915061193c83610f99565b92508282039050818111156119545761195361185c565b5b92915050565b82818337600083830152505050565b600061197583856113c5565b935061198283858461195a565b82840190509392505050565b600061199b828587611969565b91506119a78284611472565b602082019150819050949350505050565b7f50325049583a204465706f73697420616c726561647920657869737420616e6460008201527f206974206973207374696c6c2076616c69640000000000000000000000000000602082015250565b6000611a146032836112c2565b9150611a1f826119b8565b604082019050919050565b60006020820190508181036000830152611a4381611a07565b9050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ad17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611a94565b611adb8683611a94565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611b18611b13611b0e84610f99565b611af3565b610f99565b9050919050565b6000819050919050565b611b3283611afd565b611b46611b3e82611b1f565b848454611aa1565b825550505050565b600090565b611b5b611b4e565b611b66818484611b29565b505050565b5b81811015611b8a57611b7f600082611b53565b600181019050611b6c565b5050565b601f821115611bcf57611ba0816113d0565b611ba984611a84565b81016020851015611bb8578190505b611bcc611bc485611a84565b830182611b6b565b50505b505050565b600082821c905092915050565b6000611bf260001984600802611bd4565b1980831691505092915050565b6000611c0b8383611be1565b9150826002028217905092915050565b611c2482611a4a565b67ffffffffffffffff811115611c3d57611c3c611a55565b5b611c478254611394565b611c52828285611b8e565b600060209050601f831160018114611c855760008415611c73578287015190505b611c7d8582611bff565b865550611ce5565b601f198416611c93866113d0565b60005b82811015611cbb57848901518255600182019150602085019450602081019050611c96565b86831015611cd85784890151611cd4601f891682611be1565b8355505b6001600288020188555050505b505050505050565b611cf6816110a3565b82525050565b6000606082019050611d11600083018661115c565b611d1e6020830185611ced565b611d2b6040830184611614565b94935050505056fea2646970667358221220fe9ff1e9a517a7b010e12ac35c5ea0c1d6330b7c228192d600f1a49e6213c01664736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806331404484146100675780634e1389ed146100835780638e19899e1461009f578063b21a99d2146100bb578063b93bd7d4146100eb578063bfe07da61461011b575b600080fd5b610081600480360381019061007c9190610f6c565b61014b565b005b61009d60048036038101906100989190611008565b6102a7565b005b6100b960048036038101906100b49190610f6c565b61054d565b005b6100d560048036038101906100d091906110e1565b610688565b6040516100e2919061116b565b60405180910390f35b61010560048036038101906101009190611186565b610a37565b60405161011291906111ce565b60405180910390f35b6101356004803603810190610130919061124e565b610a57565b604051610142919061116b565b60405180910390f35b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146101f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e790611345565b60405180910390fd5b60006002600084815260200190815260200160002060030160006101000a81548160ff0219169083151502179055506002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f81a84d666c6a692c1cf93ca3b3648cc7bf23d34a1c6afa2e15e346f424baa06c8360405161029b919061116b565b60405180910390a25050565b6000600560008781526020019081526020016000209050600060026000836000015481526020019081526020016000206004018260040154876040516020016102f293929190611489565b6040516020818303038152906040528051906020012090506006600082815260200190815260200160002060009054906101000a900460ff161561036b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036290611534565b60405180910390fd5b6000600182858888604051600081526020016040526040516103909493929190611563565b6020604051602081039080840390855afa1580156103b2573d6000803e3d6000fd5b505050602060405103519050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661044a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610441906115f4565b60405180910390fd5b60018360060160006101000a81548160ff02191690831515021790555060016006600084815260200190815260200160002060006101000a81548160ff0219169083151502179055506104a08360000154610cc8565b600460008560000154815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055508260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5e420822d2f7281fdc4b763c62c8b7874bf22108a35efe93144d79296aacc67d8960405161053b919061116b565b60405180910390a25050505050505050565b803373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e990611345565b60405180910390fd5b6105fb82610cc8565b50600060026000848152602001908152602001600020600201549050600060026000858152602001908152602001600020600201819055503373ffffffffffffffffffffffffffffffffffffffff167fbc44d79619424e05dd4e8ea6a3e67823f43e45cf0c9b52463ec7a8806146991d848360405161067b929190611623565b60405180910390a2505050565b6000806002600088815260200190815260200160002090508060030160009054906101000a900460ff166106f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e890611698565b60405180910390fd5b82816002015411610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e90611704565b60405180910390fd5b86838760405160200161074c9392919061178d565b604051602081830303815290604052805190602001209150436005600084815260200190815260200160002060050154106107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b39061183c565b60405180910390fd5b60006040518060e001604052808981526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200160005443610821919061188b565b815260200160001515815250905080600560008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555090505082600360008a8152602001908152602001600020600460008b815260200190815260200160002060009054906101000a900461ffff1661ffff1681548110610967576109666118bf565b5b906000526020600020018190555060046000898152602001908152602001600020600081819054906101000a900461ffff16809291906109a6906118fc565b91906101000a81548161ffff021916908361ffff16021790555050838260020160008282546109d59190611926565b925050819055508673ffffffffffffffffffffffffffffffffffffffff167f628415da70a2c48a4b0ec6d330bb84602bfa2b9f13415d12e273a7844ec8126b8486604051610a24929190611623565b60405180910390a2505095945050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b6000828285604051602001610a6e9392919061198e565b6040516020818303038152906040528051906020012090506002600082815260200190815260200160002060030160009054906101000a900460ff1615610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190611a2a565b60405180910390fd5b60006040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200160011515815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050806002600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055506080820151816004019081610c699190611c1b565b509050503373ffffffffffffffffffffffffffffffffffffffff167fff446757a2885630e74116c217f433ee3c8ff5e1a60055ca9c30d89f29e6f1b4838888604051610cb793929190611cfc565b60405180910390a250949350505050565b60008060036000848152602001908152602001600020905060006004600085815260200190815260200160002060009054906101000a900461ffff1690506000925060005b8161ffff168161ffff161015610f2457600060056000858461ffff1681548110610d3a57610d396118bf565b5b906000526020600020015481526020019081526020016000206040518060e0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509050438160a00151118015610e6457508060c00151155b15610ec357838261ffff1681548110610e8057610e7f6118bf565b5b9060005260206000200154848661ffff1681548110610ea257610ea16118bf565b5b90600052602060002001819055508480610ebb906118fc565b955050610f10565b438160a00151108015610ed857508060c00151155b15610f0f578060800151600260008881526020019081526020016000206002016000828254610f07919061188b565b925050819055505b5b508080610f1c906118fc565b915050610d0d565b505050919050565b600080fd5b600080fd5b6000819050919050565b610f4981610f36565b8114610f5457600080fd5b50565b600081359050610f6681610f40565b92915050565b600060208284031215610f8257610f81610f2c565b5b6000610f9084828501610f57565b91505092915050565b6000819050919050565b610fac81610f99565b8114610fb757600080fd5b50565b600081359050610fc981610fa3565b92915050565b600060ff82169050919050565b610fe581610fcf565b8114610ff057600080fd5b50565b60008135905061100281610fdc565b92915050565b600080600080600060a0868803121561102457611023610f2c565b5b600061103288828901610f57565b955050602061104388828901610fba565b945050604061105488828901610f57565b935050606061106588828901610f57565b925050608061107688828901610ff3565b9150509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110ae82611083565b9050919050565b6110be816110a3565b81146110c957600080fd5b50565b6000813590506110db816110b5565b92915050565b600080600080600060a086880312156110fd576110fc610f2c565b5b600061110b88828901610f57565b955050602061111c888289016110cc565b945050604061112d888289016110cc565b935050606061113e88828901610fba565b925050608061114f88828901610fba565b9150509295509295909350565b61116581610f36565b82525050565b6000602082019050611180600083018461115c565b92915050565b60006020828403121561119c5761119b610f2c565b5b60006111aa848285016110cc565b91505092915050565b60008115159050919050565b6111c8816111b3565b82525050565b60006020820190506111e360008301846111bf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261120e5761120d6111e9565b5b8235905067ffffffffffffffff81111561122b5761122a6111ee565b5b602083019150836001820283011115611247576112466111f3565b5b9250929050565b6000806000806060858703121561126857611267610f2c565b5b6000611276878288016110cc565b945050602061128787828801610fba565b935050604085013567ffffffffffffffff8111156112a8576112a7610f31565b5b6112b4878288016111f8565b925092505092959194509250565b600082825260208201905092915050565b7f50325049583a204f6e6c792073656c6c657220636f756c642063616c6c20746860008201527f69732066756e6374696f6e2e0000000000000000000000000000000000000000602082015250565b600061132f602c836112c2565b915061133a826112d3565b604082019050919050565b6000602082019050818103600083015261135e81611322565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806113ac57607f821691505b6020821081036113bf576113be611365565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546113f281611394565b6113fc81866113c5565b94506001821660008114611417576001811461142c5761145f565b60ff198316865281151582028601935061145f565b611435856113d0565b60005b8381101561145757815481890152600182019150602081019050611438565b838801955050505b50505092915050565b6000819050919050565b61148361147e82610f99565b611468565b82525050565b600061149582866113e5565b91506114a18285611472565b6020820191506114b18284611472565b602082019150819050949350505050565b7f5472616e73616374696f6e20616c7265616479207573656420746f20756e6c6f60008201527f636b207061796d656e742e000000000000000000000000000000000000000000602082015250565b600061151e602b836112c2565b9150611529826114c2565b604082019050919050565b6000602082019050818103600083015261154d81611511565b9050919050565b61155d81610fcf565b82525050565b6000608082019050611578600083018761115c565b6115856020830186611554565b611592604083018561115c565b61159f606083018461115c565b95945050505050565b7f5369676e6572206973206e6f7420612076616c6964207369676e65722e000000600082015250565b60006115de601d836112c2565b91506115e9826115a8565b602082019050919050565b6000602082019050818103600083015261160d816115d1565b9050919050565b61161d81610f99565b82525050565b6000604082019050611638600083018561115c565b6116456020830184611614565b9392505050565b7f50325049583a204465706f736974206e6f742076616c696420616e796d6f7265600082015250565b60006116826020836112c2565b915061168d8261164c565b602082019050919050565b600060208201905081810360008301526116b181611675565b9050919050565b7f50325049583a204e6f7420656e6f7567682072656d61696e696e670000000000600082015250565b60006116ee601b836112c2565b91506116f9826116b8565b602082019050919050565b6000602082019050818103600083015261171d816116e1565b9050919050565b6000819050919050565b61173f61173a82610f36565b611724565b82525050565b60008160601b9050919050565b600061175d82611745565b9050919050565b600061176f82611752565b9050919050565b611787611782826110a3565b611764565b82525050565b6000611799828661172e565b6020820191506117a98285611472565b6020820191506117b98284611776565b601482019150819050949350505050565b7f50325049583a20416e6f74686572206c6f636b20776974682073616d6520494460008201527f206973206e6f7420657870697265642079657400000000000000000000000000602082015250565b60006118266033836112c2565b9150611831826117ca565b604082019050919050565b6000602082019050818103600083015261185581611819565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061189682610f99565b91506118a183610f99565b92508282019050808211156118b9576118b861185c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff82169050919050565b6000611907826118ee565b915061ffff820361191b5761191a61185c565b5b600182019050919050565b600061193182610f99565b915061193c83610f99565b92508282039050818111156119545761195361185c565b5b92915050565b82818337600083830152505050565b600061197583856113c5565b935061198283858461195a565b82840190509392505050565b600061199b828587611969565b91506119a78284611472565b602082019150819050949350505050565b7f50325049583a204465706f73697420616c726561647920657869737420616e6460008201527f206974206973207374696c6c2076616c69640000000000000000000000000000602082015250565b6000611a146032836112c2565b9150611a1f826119b8565b604082019050919050565b60006020820190508181036000830152611a4381611a07565b9050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ad17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611a94565b611adb8683611a94565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611b18611b13611b0e84610f99565b611af3565b610f99565b9050919050565b6000819050919050565b611b3283611afd565b611b46611b3e82611b1f565b848454611aa1565b825550505050565b600090565b611b5b611b4e565b611b66818484611b29565b505050565b5b81811015611b8a57611b7f600082611b53565b600181019050611b6c565b5050565b601f821115611bcf57611ba0816113d0565b611ba984611a84565b81016020851015611bb8578190505b611bcc611bc485611a84565b830182611b6b565b50505b505050565b600082821c905092915050565b6000611bf260001984600802611bd4565b1980831691505092915050565b6000611c0b8383611be1565b9150826002028217905092915050565b611c2482611a4a565b67ffffffffffffffff811115611c3d57611c3c611a55565b5b611c478254611394565b611c52828285611b8e565b600060209050601f831160018114611c855760008415611c73578287015190505b611c7d8582611bff565b865550611ce5565b601f198416611c93866113d0565b60005b82811015611cbb57848901518255600182019150602085019450602081019050611c96565b86831015611cd85784890151611cd4601f891682611be1565b8355505b6001600288020188555050505b505050505050565b611cf6816110a3565b82525050565b6000606082019050611d11600083018661115c565b611d1e6020830185611ced565b611d2b6040830184611614565b94935050505056fea2646970667358221220fe9ff1e9a517a7b010e12ac35c5ea0c1d6330b7c228192d600f1a49e6213c01664736f6c63430008110033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/p2pix.sol b/contracts/p2pix.sol index f3383ca..ccc3b4b 100644 --- a/contracts/p2pix.sol +++ b/contracts/p2pix.sol @@ -5,6 +5,7 @@ contract P2PIX { event DepositAdded(address indexed seller, bytes32 depositID, address token, uint256 amount); event DepositClosed(address indexed seller, bytes32 depositID); + event DepositWithdrawn(address indexed seller, bytes32 depositID, uint256 amount); event LockAdded(address indexed buyer, bytes32 lockID, uint256 amount); event LockReleased(address indexed buyer, bytes32 lockId); @@ -58,15 +59,16 @@ contract P2PIX { uint256 amount, string calldata pixTarget ) public returns (bytes32 depositID){ + depositID = keccak256(abi.encodePacked(pixTarget, amount)); + require(!mapDeposits[depositID].valid, 'P2PIX: Deposit already exist and it is still valid'); // TODO Prevent seller to use same depositID // TODO Transfer tokens to this address Deposit memory d = Deposit(msg.sender, token, amount, true, pixTarget); - depositID = keccak256(abi.encodePacked(pixTarget, amount)); mapDeposits[depositID] = d; emit DepositAdded(msg.sender, depositID, token, amount); } - // Relayer interage adicionando um “lock” na ordem de venda. + // Relayer interaje adicionando um “lock” na ordem de venda. // O lock precisa incluir address do comprador + address do relayer + reembolso/premio relayer + valor. // **Só poder ter um lock em aberto para cada (ordem de venda, valor)**. // Só pode fazer lock de ordens que não estão invalidadas(Passo 5). @@ -151,7 +153,9 @@ contract P2PIX { unlockExpired(depositID); // TODO Transfer remaining tokens back to the seller // Withdraw remaining tokens from mapDeposit[depositID] + uint256 amount = mapDeposits[depositID].remaining; mapDeposits[depositID].remaining = 0; + emit DepositWithdrawn(msg.sender, depositID, amount); } } \ No newline at end of file diff --git a/test/1-deposit.test.js b/test/1-deposit.test.js index 0ee6eaf..f016378 100644 --- a/test/1-deposit.test.js +++ b/test/1-deposit.test.js @@ -4,18 +4,70 @@ const { ethers } = require("hardhat"); describe("P2PIX deposit test", function () { let owner, wallet2, wallet3, wallet4; + let p2pix; // Contract instance + let depositID; - it("Deploy contracts", async function () { + it("Will deploy contracts", async function () { [owner, wallet2, wallet3, wallet4] = await ethers.getSigners(); const P2PIX = await ethers.getContractFactory("P2PIX"); - const p2pix = await P2PIX.deploy(2, [owner.address, wallet2.address]); + p2pix = await P2PIX.deploy(2, [owner.address, wallet2.address]); await p2pix.deployed(); - // Verify values at deployment expect(await p2pix.validBacenSigners(owner.address)).to.equal(true); expect(await p2pix.validBacenSigners(wallet2.address)).to.equal(true); + }); + it("Should allow create a deposit", async function () { + const transaction = await p2pix.deposit(ethers.constants.AddressZero, 1000, 'SELLER PIX KEY'); + depositID = ethers.utils.solidityKeccak256(['string', 'uint256'], ['SELLER PIX KEY', 1000]) + await expect(transaction).to.emit(p2pix, 'DepositAdded').withArgs( + owner.address, + depositID, + ethers.constants.AddressZero, + 1000 + ) + }) + + it("Should prevent create same deposit", async function () { + await expect(p2pix.deposit(ethers.constants.AddressZero, 1000, 'SELLER PIX KEY')) + .to.be.revertedWith('P2PIX: Deposit already exist and it is still valid'); + }) + + it("Should allow cancel the deposit", async function () { + const transaction = await p2pix.cancelDeposit(depositID); + await expect(transaction).to.emit(p2pix, 'DepositClosed').withArgs( + owner.address, + depositID + ) + }) + + it("Should allow recreate the deposit", async function () { + const transaction = await p2pix.deposit(ethers.constants.AddressZero, 1000, 'SELLER PIX KEY'); + depositID = ethers.utils.solidityKeccak256(['string', 'uint256'], ['SELLER PIX KEY', 1000]) + await expect(transaction).to.emit(p2pix, 'DepositAdded').withArgs( + owner.address, + depositID, + ethers.constants.AddressZero, + 1000 + ) + }) + + it("Should allow cancel the deposit again", async function () { + const transaction = await p2pix.cancelDeposit(depositID); + await expect(transaction).to.emit(p2pix, 'DepositClosed').withArgs( + owner.address, + depositID + ) + }) + + it("Should allow withdraw the deposit", async function () { + const transaction = await p2pix.withdraw(depositID); + await expect(transaction).to.emit(p2pix, 'DepositWithdrawn').withArgs( + owner.address, + depositID, + 1000 + ) }) }) \ No newline at end of file