evm-booking

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit d9024fcf2ccdea199fa84a1b2b3d7092c48c73e7
parent 69f397e7cae3780ff387c3f84503f844b0558622
Author: lash <dev@holbrook.no>
Date:   Fri,  2 Jun 2023 16:13:57 +0100

Add token transfer on consume

Diffstat:
Mpython/evm_booking/data/Booking.bin | 4++--
Mpython/evm_booking/data/Booking.json | 2+-
Mpython/evm_booking/data/Booking.metadata.json | 2+-
Mpython/evm_booking/time.py | 5+++++
Apython/run_tests.sh | 14++++++++++++++
Mpython/tests/test_base.py | 16+++++++++++++---
Mpython/tests/test_time.py | 30++++++++++++++++++++++++++++++
Msolidity/Booking.sol | 49++++++++++++++++++++++++++++++++++++++++++++++---
8 files changed, 112 insertions(+), 10 deletions(-)

diff --git a/python/evm_booking/data/Booking.bin b/python/evm_booking/data/Booking.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b50604051620026df380380620026df8339818101604052810190620000379190620003b8565b60008111801562000058575070010000000000000000000000000000000081105b6200009a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000919062000460565b60405180910390fd5b620000a4620002f1565b620000be8262000270640100000000026401000000009004565b9050600181600060028110620000d957620000d862000482565b5b6020020151620000ea9190620004e0565b67ffffffffffffffff8111156200010657620001056200051b565b5b6040519080825280601f01601f191660200182016040528015620001395781602001600182028036833780820191505090505b50600290816200014a919062000791565b5060018160006002811062000164576200016362000482565b5b6020020151620001759190620004e0565b67ffffffffffffffff8111156200019157620001906200051b565b5b6040519080825280601f01601f191660200182016040528015620001c45781602001600182028036833780820191505090505b5060039081620001d5919062000791565b508160048190555060045460058190555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200095d565b6200027a620002f1565b600062000286620002f1565b600884620002959190620008b1565b91508181600060028110620002af57620002ae62000482565b5b602002018181525050600884620002c7919062000925565b81600160028110620002de57620002dd62000482565b5b6020020181815250508092505050919050565b6040518060400160405280600290602082028036833780820191505090505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003458262000318565b9050919050565b620003578162000338565b81146200036357600080fd5b50565b60008151905062000377816200034c565b92915050565b6000819050919050565b62000392816200037d565b81146200039e57600080fd5b50565b600081519050620003b28162000387565b92915050565b60008060408385031215620003d257620003d162000313565b5b6000620003e28582860162000366565b9250506020620003f585828601620003a1565b9150509250929050565b600082825260208201905092915050565b7f4552525f4e4f4e53454e53450000000000000000000000000000000000000000600082015250565b600062000448600c83620003ff565b9150620004558262000410565b602082019050919050565b600060208201905081810360008301526200047b8162000439565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620004ed826200037d565b9150620004fa836200037d565b9250828201905080821115620005155762000514620004b1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059d57607f821691505b602082108103620005b357620005b262000555565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620006207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005de565b6200062c8683620005de565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200066f6200066962000663846200037d565b62000644565b6200037d565b9050919050565b6000819050919050565b6200068b836200064e565b620006a36200069a8262000676565b848454620005ee565b825550505050565b600090565b620006ba620006ab565b620006c781848462000680565b505050565b5b81811015620006ef57620006e3600082620006b0565b600181019050620006cd565b5050565b601f8211156200073e576200070881620005b9565b6200071384620005ce565b8101602085101562000723578190505b6200073b6200073285620005ce565b830182620006cc565b50505b505050565b60008160020a8304905092915050565b6000620007666000198460080262000743565b1980831691505092915050565b600062000781838362000753565b9150826002028217905092915050565b6200079c826200054a565b67ffffffffffffffff811115620007b857620007b76200051b565b5b620007c4825462000584565b620007d1828285620006f3565b600060209050601f831160018114620008095760008415620007f4578287015190505b62000800858262000773565b86555062000870565b601f1984166200081986620005b9565b60005b8281101562000843578489015182556001820191506020850194506020810190506200081c565b868310156200086357848901516200085f601f89168262000753565b8355505b6001600288020188555050505b505050505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620008be8262000878565b9150620008cb8362000878565b925082620008de57620008dd62000882565b5b600160000383147f8000000000000000000000000000000000000000000000000000000000000000831416156200091a5762000919620004b1565b5b828205905092915050565b600062000932826200037d565b91506200093f836200037d565b92508262000952576200095162000882565b5b828206905092915050565b611d72806200096d6000396000f3fe608060405234801561001057600080fd5b50600436106100ec576000357c0100000000000000000000000000000000000000000000000000000000900480637f03864b116100a9578063d0e30db011610083578063d0e30db014610245578063da2824a814610263578063de34d54414610293578063fc0c546a146102af576100ec565b80637f03864b146101d95780638da5cb5b146101f7578063aa67c91914610215576100ec565b806304bc34e2146100f157806318160ddd146101215780632b29ba231461013f5780634eeea7ad1461016f5780635356dddc1461018b5780635cfc1a51146101bb575b600080fd5b61010b600480360381019061010691906113a6565b6102cd565b6040516101189190611476565b60405180910390f35b610129610545565b60405161013691906114a7565b60405180910390f35b61015960048036038101906101549190611520565b61054b565b6040516101669190611568565b60405180910390f35b610189600480360381019061018491906113a6565b6105f7565b005b6101a560048036038101906101a09190611520565b610607565b6040516101b29190611568565b60405180910390f35b6101c361072f565b6040516101d091906114a7565b60405180910390f35b6101e1610735565b6040516101ee91906114a7565b60405180910390f35b6101ff61073b565b60405161020c9190611592565b60405180910390f35b61022f600480360381019061022a9190611520565b61075f565b60405161023c91906115c6565b60405180910390f35b61024d610a53565b60405161025a91906115c6565b60405180910390f35b61027d60048036038101906102789190611520565b610a63565b60405161028a9190611568565b60405180910390f35b6102ad60048036038101906102a891906113a6565b610b55565b005b6102b7610bad565b6040516102c49190611592565b60405180910390f35b6060806102d8611349565b600080600087036102f55760086004546102f2919061163f565b96505b60006008876103049190611670565b14610344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033b906116fe565b60405180910390fd5b61034d86610bd3565b9250826000600281106103635761036261171e565b5b60200201519150600887610377919061163f565b905060018360016002811061038f5761038e61171e565b5b602002015160ff1611156103ad576001816103aa919061174d565b90505b8067ffffffffffffffff8111156103c7576103c6611781565b5b6040519080825280601f01601f1916602001820160405280156103f95781602001600182028036833780820191505090505b50935060005b818110156105375760038382610415919061174d565b8154610420906117df565b811061042f5761042e61171e565b5b81546001161561044e5790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000260028483610482919061174d565b815461048d906117df565b811061049c5761049b61171e565b5b8154600116156104bb5790600052602060002090602091828204019190065b9054901a7f010000000000000000000000000000000000000000000000000000000000000002178582815181106104f5576104f461171e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061052f90611810565b9150506103ff565b508394505050505092915050565b60055481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806105f0575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b61060382826000610c46565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061068f57508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6106ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c5906118a4565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60045481565b60065481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080606060008061077261103a565b9550600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486036107c95760009650505050505050610a4e565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548661081491906118c4565b9450600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548611156108685787915030905061089d565b3091508790507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8561089a9190611907565b94505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168282876040516024016108eb9392919061197f565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161097591906119f2565b6000604051808303816000865af19150503d80600081146109b2576040519150601f19603f3d011682016040523d82523d6000602084013e6109b7565b606091505b50809450819550505083610a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f790611a55565b60405180910390fd5b85600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508496505050505050505b919050565b6000610a5e3361075f565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aeb906118a4565b60405180910390fd5b6001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b610b5e3361054b565b610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b94906118a4565b60405180910390fd5b610ba982826001610c46565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bdb611349565b6000610be5611349565b600884610bf29190611a75565b91508181600060028110610c0957610c0861171e565b5b602002018181525050600884610c1f9190611670565b81600160028110610c3357610c3261171e565b5b6020020181815250508092505050919050565b60008211610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8090611b2b565b60405180910390fd5b610c91611349565b600080610c9d86610bd3565b925082600060028110610cb357610cb261171e565b5b6020020151915082600160028110610cce57610ccd61171e565b5b602002015160ff1660019060020a02905060005b8581101561103157600060045411610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2690611b97565b60405180910390fd5b610d3983836110b3565b610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f90611c03565b60405180910390fd5b8415610eb857816003848154610d8d906117df565b8110610d9c57610d9b61171e565b5b815460011615610dbb5790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004177f0100000000000000000000000000000000000000000000000000000000000000026003848154610e35906117df565b8110610e4457610e4361171e565b5b815460011615610e635790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555060066000815480929190610eae90611810565b9190505550610fd6565b816002848154610ec7906117df565b8110610ed657610ed561171e565b5b815460011615610ef55790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004177f0100000000000000000000000000000000000000000000000000000000000000026002848154610f6f906117df565b8110610f7e57610f7d61171e565b5b815460011615610f9d5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b60808260ff1603610ff8578280610fec90611810565b93505060019150611006565b60018260ff169060020a0291505b6004600081548092919061101990611c23565b9190505550808061102990611810565b915050610ce2565b50505050505050565b60008060006110476111cf565b915060055482101561108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590611c98565b60405180910390fd5b6005548261109c919061163f565b9050806006546110ac9190611cb8565b9250505090565b6000808260038581546110c5906117df565b81106110d4576110d361171e565b5b8154600116156110f35790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004600286815461114a906117df565b81106111595761115861171e565b5b8154600116156111785790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004171660ff1614905092915050565b60008060606000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161129f91906119f2565b6000604051808303816000865af19150503d80600081146112dc576040519150601f19603f3d011682016040523d82523d6000602084013e6112e1565b606091505b5080935081945050508261132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132190611a55565b60405180910390fd5b8180602001905181019061133e9190611d0f565b905080935050505090565b6040518060400160405280600290602082028036833780820191505090505090565b600080fd5b6000819050919050565b61138381611370565b811461138e57600080fd5b50565b6000813590506113a08161137a565b92915050565b600080604083850312156113bd576113bc61136b565b5b60006113cb85828601611391565b92505060206113dc85828601611391565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611420578082015181840152602081019050611405565b60008484015250505050565b6000601f19601f8301169050919050565b6000611448826113e6565b61145281856113f1565b9350611462818560208601611402565b61146b8161142c565b840191505092915050565b60006020820190508181036000830152611490818461143d565b905092915050565b6114a181611370565b82525050565b60006020820190506114bc6000830184611498565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114ed826114c2565b9050919050565b6114fd816114e2565b811461150857600080fd5b50565b60008135905061151a816114f4565b92915050565b6000602082840312156115365761153561136b565b5b60006115448482850161150b565b91505092915050565b60008115159050919050565b6115628161154d565b82525050565b600060208201905061157d6000830184611559565b92915050565b61158c816114e2565b82525050565b60006020820190506115a76000830184611583565b92915050565b6000819050919050565b6115c0816115ad565b82525050565b60006020820190506115db60008301846115b7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061164a82611370565b915061165583611370565b925082611665576116646115e1565b5b828204905092915050565b600061167b82611370565b915061168683611370565b925082611696576116956115e1565b5b828206905092915050565b600082825260208201905092915050565b7f4552525f424f554e444152590000000000000000000000000000000000000000600082015250565b60006116e8600c836116a1565b91506116f3826116b2565b602082019050919050565b60006020820190508181036000830152611717816116db565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061175882611370565b915061176383611370565b925082820190508082111561177b5761177a611610565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806117f757607f821691505b60208210810361180a576118096117b0565b5b50919050565b600061181b82611370565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361184d5761184c611610565b5b600182019050919050565b7f4552525f41585800000000000000000000000000000000000000000000000000600082015250565b600061188e6007836116a1565b915061189982611858565b602082019050919050565b600060208201905081810360008301526118bd81611881565b9050919050565b60006118cf826115ad565b91506118da836115ad565b925082820390508181126000841216828213600085121516171561190157611900611610565b5b92915050565b6000611912826115ad565b915061191d836115ad565b925082820261192b816115ad565b91507f8000000000000000000000000000000000000000000000000000000000000000841460008412161561196357611962611610565b5b828205841483151761197857611977611610565b5b5092915050565b60006060820190506119946000830186611583565b6119a16020830185611583565b6119ae6040830184611498565b949350505050565b600081905092915050565b60006119cc826113e6565b6119d681856119b6565b93506119e6818560208601611402565b80840191505092915050565b60006119fe82846119c1565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b6000611a3f6009836116a1565b9150611a4a82611a09565b602082019050919050565b60006020820190508181036000830152611a6e81611a32565b9050919050565b6000611a80826115ad565b9150611a8b836115ad565b925082611a9b57611a9a6115e1565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615611ad457611ad3611610565b5b828205905092915050565b7f4552525f5a45524f434f554e5400000000000000000000000000000000000000600082015250565b6000611b15600d836116a1565b9150611b2082611adf565b602082019050919050565b60006020820190508181036000830152611b4481611b08565b9050919050565b7f4552525f43415041434954590000000000000000000000000000000000000000600082015250565b6000611b81600c836116a1565b9150611b8c82611b4b565b602082019050919050565b60006020820190508181036000830152611bb081611b74565b9050919050565b7f4552525f434f4c4c4953494f4e00000000000000000000000000000000000000600082015250565b6000611bed600d836116a1565b9150611bf882611bb7565b602082019050919050565b60006020820190508181036000830152611c1c81611be0565b9050919050565b6000611c2e82611370565b915060008203611c4157611c40611610565b5b600182039050919050565b7f4552525f535550504c595f554e444552464c4f57000000000000000000000000600082015250565b6000611c826014836116a1565b9150611c8d82611c4c565b602082019050919050565b60006020820190508181036000830152611cb181611c75565b9050919050565b6000611cc382611370565b9150611cce83611370565b9250828202611cdc81611370565b91508282048414831517611cf357611cf2611610565b5b5092915050565b600081519050611d098161137a565b92915050565b600060208284031215611d2557611d2461136b565b5b6000611d3384828501611cfa565b9150509291505056fea26469706673582212205867de9509c148379719b86cf5a28d5b65ec718070cb4f00a6ccfe04f0797b5364736f6c63430008130033 -\ No newline at end of file +60806040523480156200001157600080fd5b506040516200322b3803806200322b83398181016040528101906200003791906200055a565b60008111801562000058575070010000000000000000000000000000000081105b6200009a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000919062000602565b60405180910390fd5b620000a462000493565b620000be826200028f640100000000026401000000009004565b9050600181600060028110620000d957620000d862000624565b5b6020020151620000ea919062000682565b67ffffffffffffffff811115620001065762000105620006bd565b5b6040519080825280601f01601f191660200182016040528015620001395781602001600182028036833780820191505090505b50600290816200014a919062000933565b5060018160006002811062000164576200016362000624565b5b602002015162000175919062000682565b67ffffffffffffffff811115620001915762000190620006bd565b5b6040519080825280601f01601f191660200182016040528015620001c45781602001600182028036833780820191505090505b5060039081620001d5919062000933565b508160048190555060045460058190555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200024062000310640100000000026401000000009004565b600681905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000c2a565b6200029962000493565b6000620002a562000493565b600884620002b4919062000a53565b91508181600060028110620002ce57620002cd62000624565b5b602002018181525050600884620002e6919062000ac7565b81600160028110620002fd57620002fc62000624565b5b6020020181815250508092505050919050565b60008060606000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620003e2919062000b6d565b6000604051808303816000865af19150503d806000811462000421576040519150601f19603f3d011682016040523d82523d6000602084013e62000426565b606091505b5080935081945050508262000472576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004699062000bd6565b60405180910390fd5b8180602001905181019062000488919062000bf8565b905080935050505090565b6040518060400160405280600290602082028036833780820191505090505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004e782620004ba565b9050919050565b620004f981620004da565b81146200050557600080fd5b50565b6000815190506200051981620004ee565b92915050565b6000819050919050565b62000534816200051f565b81146200054057600080fd5b50565b600081519050620005548162000529565b92915050565b60008060408385031215620005745762000573620004b5565b5b6000620005848582860162000508565b9250506020620005978582860162000543565b9150509250929050565b600082825260208201905092915050565b7f4552525f4e4f4e53454e53450000000000000000000000000000000000000000600082015250565b6000620005ea600c83620005a1565b9150620005f782620005b2565b602082019050919050565b600060208201905081810360008301526200061d81620005db565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200068f826200051f565b91506200069c836200051f565b9250828201905080821115620006b757620006b662000653565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200073f57607f821691505b602082108103620007555762000754620006f7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620007c27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000780565b620007ce868362000780565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008116200080b62000805846200051f565b620007e6565b6200051f565b9050919050565b6000819050919050565b6200082d83620007f0565b620008456200083c8262000818565b84845462000790565b825550505050565b600090565b6200085c6200084d565b6200086981848462000822565b505050565b5b8181101562000891576200088560008262000852565b6001810190506200086f565b5050565b601f821115620008e057620008aa816200075b565b620008b58462000770565b81016020851015620008c5578190505b620008dd620008d48562000770565b8301826200086e565b50505b505050565b60008160020a8304905092915050565b60006200090860001984600802620008e5565b1980831691505092915050565b6000620009238383620008f5565b9150826002028217905092915050565b6200093e82620006ec565b67ffffffffffffffff8111156200095a5762000959620006bd565b5b62000966825462000726565b6200097382828562000895565b600060209050601f831160018114620009ab576000841562000996578287015190505b620009a2858262000915565b86555062000a12565b601f198416620009bb866200075b565b60005b82811015620009e557848901518255600182019150602085019450602081019050620009be565b8683101562000a05578489015162000a01601f891682620008f5565b8355505b6001600288020188555050505b505050505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a608262000a1a565b915062000a6d8362000a1a565b92508262000a805762000a7f62000a24565b5b600160000383147f80000000000000000000000000000000000000000000000000000000000000008314161562000abc5762000abb62000653565b5b828205905092915050565b600062000ad4826200051f565b915062000ae1836200051f565b92508262000af45762000af362000a24565b5b828206905092915050565b600081905092915050565b60005b8381101562000b2a57808201518184015260208101905062000b0d565b60008484015250505050565b600062000b4382620006ec565b62000b4f818562000aff565b935062000b6181856020860162000b0a565b80840191505092915050565b600062000b7b828462000b36565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b600062000bbe600983620005a1565b915062000bcb8262000b86565b602082019050919050565b6000602082019050818103600083015262000bf18162000baf565b9050919050565b60006020828403121562000c115762000c10620004b5565b5b600062000c218482850162000543565b91505092915050565b6125f18062000c3a6000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c0100000000000000000000000000000000000000000000000000000000900480635cfc1a51116100bf578063aa67c9191161008e578063aa67c91914610316578063d0e30db014610346578063da2824a814610364578063de34d54414610394578063fc0c546a146103b057610133565b80635cfc1a511461028c5780637f03864b146102aa57806386fe212d146102c85780638da5cb5b146102f857610133565b80632c1758c1116101065780632c1758c1146101d45780632d1a72671461020457806331a5995d146102225780634eeea7ad146102405780635356dddc1461025c57610133565b806304bc34e21461013857806318160ddd1461016857806318cbbcfc146101865780632b29ba23146101a4575b600080fd5b610152600480360381019061014d91906118ed565b6103ce565b60405161015f91906119bd565b60405180910390f35b610170610646565b60405161017d91906119ee565b60405180910390f35b61018e61064c565b60405161019b91906119ee565b60405180910390f35b6101be60048036038101906101b99190611a67565b610651565b6040516101cb9190611aaf565b60405180910390f35b6101ee60048036038101906101e99190611aca565b6106fd565b6040516101fb9190611aaf565b60405180910390f35b61020c610730565b60405161021991906119ee565b60405180910390f35b61022a610736565b60405161023791906119ee565b60405180910390f35b61025a600480360381019061025591906118ed565b61073c565b005b61027660048036038101906102719190611a67565b610923565b6040516102839190611aaf565b60405180910390f35b610294610a97565b6040516102a191906119ee565b60405180910390f35b6102b2610a9d565b6040516102bf91906119ee565b60405180910390f35b6102e260048036038101906102dd9190611aca565b610aa3565b6040516102ef91906119ee565b60405180910390f35b610300610b95565b60405161030d9190611b06565b60405180910390f35b610330600480360381019061032b9190611a67565b610bb9565b60405161033d9190611b3a565b60405180910390f35b61034e610f17565b60405161035b9190611b3a565b60405180910390f35b61037e60048036038101906103799190611a67565b610f27565b60405161038b9190611aaf565b60405180910390f35b6103ae60048036038101906103a991906118ed565b611065565b005b6103b86110bd565b6040516103c59190611b06565b60405180910390f35b6060806103d9611890565b600080600087036103f65760086004546103f39190611bb3565b96505b60006008876104059190611be4565b14610445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043c90611c72565b60405180910390fd5b61044e866110e3565b92508260006002811061046457610463611c92565b5b602002015191506008876104789190611bb3565b90506001836001600281106104905761048f611c92565b5b602002015160ff1611156104ae576001816104ab9190611cc1565b90505b8067ffffffffffffffff8111156104c8576104c7611cf5565b5b6040519080825280601f01601f1916602001820160405280156104fa5781602001600182028036833780820191505090505b50935060005b8181101561063857600383826105169190611cc1565b815461052190611d53565b81106105305761052f611c92565b5b81546001161561054f5790600052602060002090602091828204019190065b9054901a7f010000000000000000000000000000000000000000000000000000000000000002600284836105839190611cc1565b815461058e90611d53565b811061059d5761059c611c92565b5b8154600116156105bc5790600052602060002090602091828204019190065b9054901a7f010000000000000000000000000000000000000000000000000000000000000002178582815181106105f6576105f5611c92565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061063090611d84565b915050610500565b508394505050505092915050565b60055481565b600181565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806106f6575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b60006001821061070c57600080fd5b60008203610721576001600a5414905061072b565b81600a5483161490505b919050565b60065481565b600a5481565b6000606060008361074b611156565b6107559190611dcc565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163330836040516024016107a593929190611e6d565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161082f9190611ee0565b6000604051808303816000865af19150503d806000811461086c576040519150601f19603f3d011682016040523d82523d6000602084013e610871565b606091505b508093508194505050826108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b190611f43565b60405180910390fd5b818060200190518101906108ce9190611f8f565b925082610910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090790612008565b60405180910390fd5b61091c85856000611206565b5050505050565b6000610932600160ff166106fd565b15610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096990612074565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109f757508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2d906120e0565b60405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60045481565b60075481565b6000600180610ab29190611cc1565b8210610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea9061214c565b60405180910390fd5b6000600a54831614610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b31906121b8565b60405180910390fd5b81600a600082825417925050819055506001600a541415157f6b7e2e653f93b645d4ed7292d6429f96637084363e477c8aaea1a43ed13c284e600a54604051610b8391906119ee565b60405180910390a2600a549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060006060600080610bce611156565b955085600754610bde9190611dcc565b9650600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548703610c36576000975050505050505050610f12565b600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205487610c8191906121d8565b9450600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054871115610cd557889150309050610d0a565b3091508890507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85610d07919061221b565b94505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828287604051602401610d5893929190612293565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610de29190611ee0565b6000604051808303816000865af19150503d8060008114610e1f576040519150601f19603f3d011682016040523d82523d6000602084013e610e24565b606091505b50809450819550505083610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6490611f43565b60405180910390fd5b82806020019051810190610e819190611f8f565b935083610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba90612008565b60405180910390fd5b86600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550849750505050505050505b919050565b6000610f2233610bb9565b905090565b6000610f36600160ff166106fd565b15610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90612074565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb906120e0565b60405180910390fd5b6001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b61106e33610651565b6110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a4906120e0565b60405180910390fd5b6110b982826001611206565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110eb611890565b60006110f5611890565b60088461110291906122ca565b9150818160006002811061111957611118611c92565b5b60200201818152505060088461112f9190611be4565b8160016002811061114357611142611c92565b5b6020020181815250508092505050919050565b60008060006111636115fa565b915060065482146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090612380565b60405180910390fd5b6005548210156111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e5906123ec565b60405180910390fd5b600554826111fc9190611bb3565b9050809250505090565b60008211611249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124090612458565b60405180910390fd5b611251611890565b60008061125d866110e3565b92508260006002811061127357611272611c92565b5b602002015191508260016002811061128e5761128d611c92565b5b602002015160ff1660019060020a02905060005b858110156115f1576000600454116112ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e6906124c4565b60405180910390fd5b6112f98383611774565b611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90612530565b60405180910390fd5b84156114785781600384815461134d90611d53565b811061135c5761135b611c92565b5b81546001161561137b5790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004177f01000000000000000000000000000000000000000000000000000000000000000260038481546113f590611d53565b811061140457611403611c92565b5b8154600116156114235790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055506007600081548092919061146e90611d84565b9190505550611596565b81600284815461148790611d53565b811061149657611495611c92565b5b8154600116156114b55790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004177f010000000000000000000000000000000000000000000000000000000000000002600284815461152f90611d53565b811061153e5761153d611c92565b5b81546001161561155d5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b60808260ff16036115b85782806115ac90611d84565b935050600191506115c6565b60018260ff169060020a0291505b600460008154809291906115d990612550565b919050555080806115e990611d84565b9150506112a2565b50505050505050565b60008060606000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516116ca9190611ee0565b6000604051808303816000865af19150503d8060008114611707576040519150601f19603f3d011682016040523d82523d6000602084013e61170c565b606091505b50809350819450505082611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c90611f43565b60405180910390fd5b81806020019051810190611769919061258e565b905080935050505090565b60008082600385815461178690611d53565b811061179557611794611c92565b5b8154600116156117b45790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004600286815461180b90611d53565b811061181a57611819611c92565b5b8154600116156118395790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004171660ff1614905092915050565b6040518060400160405280600290602082028036833780820191505090505090565b600080fd5b6000819050919050565b6118ca816118b7565b81146118d557600080fd5b50565b6000813590506118e7816118c1565b92915050565b60008060408385031215611904576119036118b2565b5b6000611912858286016118d8565b9250506020611923858286016118d8565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561196757808201518184015260208101905061194c565b60008484015250505050565b6000601f19601f8301169050919050565b600061198f8261192d565b6119998185611938565b93506119a9818560208601611949565b6119b281611973565b840191505092915050565b600060208201905081810360008301526119d78184611984565b905092915050565b6119e8816118b7565b82525050565b6000602082019050611a0360008301846119df565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a3482611a09565b9050919050565b611a4481611a29565b8114611a4f57600080fd5b50565b600081359050611a6181611a3b565b92915050565b600060208284031215611a7d57611a7c6118b2565b5b6000611a8b84828501611a52565b91505092915050565b60008115159050919050565b611aa981611a94565b82525050565b6000602082019050611ac46000830184611aa0565b92915050565b600060208284031215611ae057611adf6118b2565b5b6000611aee848285016118d8565b91505092915050565b611b0081611a29565b82525050565b6000602082019050611b1b6000830184611af7565b92915050565b6000819050919050565b611b3481611b21565b82525050565b6000602082019050611b4f6000830184611b2b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bbe826118b7565b9150611bc9836118b7565b925082611bd957611bd8611b55565b5b828204905092915050565b6000611bef826118b7565b9150611bfa836118b7565b925082611c0a57611c09611b55565b5b828206905092915050565b600082825260208201905092915050565b7f4552525f424f554e444152590000000000000000000000000000000000000000600082015250565b6000611c5c600c83611c15565b9150611c6782611c26565b602082019050919050565b60006020820190508181036000830152611c8b81611c4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611ccc826118b7565b9150611cd7836118b7565b9250828201905080821115611cef57611cee611b84565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d6b57607f821691505b602082108103611d7e57611d7d611d24565b5b50919050565b6000611d8f826118b7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611dc157611dc0611b84565b5b600182019050919050565b6000611dd7826118b7565b9150611de2836118b7565b9250828202611df0816118b7565b91508282048414831517611e0757611e06611b84565b5b5092915050565b6000819050919050565b6000611e33611e2e611e2984611a09565b611e0e565b611a09565b9050919050565b6000611e4582611e18565b9050919050565b6000611e5782611e3a565b9050919050565b611e6781611e4c565b82525050565b6000606082019050611e826000830186611af7565b611e8f6020830185611e5e565b611e9c60408301846119df565b949350505050565b600081905092915050565b6000611eba8261192d565b611ec48185611ea4565b9350611ed4818560208601611949565b80840191505092915050565b6000611eec8284611eaf565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b6000611f2d600983611c15565b9150611f3882611ef7565b602082019050919050565b60006020820190508181036000830152611f5c81611f20565b9050919050565b611f6c81611a94565b8114611f7757600080fd5b50565b600081519050611f8981611f63565b92915050565b600060208284031215611fa557611fa46118b2565b5b6000611fb384828501611f7a565b91505092915050565b7f4552525f5452414e534645520000000000000000000000000000000000000000600082015250565b6000611ff2600c83611c15565b9150611ffd82611fbc565b602082019050919050565b6000602082019050818103600083015261202181611fe5565b9050919050565b7f4552525f5345414c454400000000000000000000000000000000000000000000600082015250565b600061205e600a83611c15565b915061206982612028565b602082019050919050565b6000602082019050818103600083015261208d81612051565b9050919050565b7f4552525f41585800000000000000000000000000000000000000000000000000600082015250565b60006120ca600783611c15565b91506120d582612094565b602082019050919050565b600060208201905081810360008301526120f9816120bd565b9050919050565b7f4552525f494e56414c49445f5354415445000000000000000000000000000000600082015250565b6000612136601183611c15565b915061214182612100565b602082019050919050565b6000602082019050818103600083015261216581612129565b9050919050565b7f4552525f414c52454144595f4c4f434b45440000000000000000000000000000600082015250565b60006121a2601283611c15565b91506121ad8261216c565b602082019050919050565b600060208201905081810360008301526121d181612195565b9050919050565b60006121e382611b21565b91506121ee83611b21565b925082820390508181126000841216828213600085121516171561221557612214611b84565b5b92915050565b600061222682611b21565b915061223183611b21565b925082820261223f81611b21565b91507f8000000000000000000000000000000000000000000000000000000000000000841460008412161561227757612276611b84565b5b828205841483151761228c5761228b611b84565b5b5092915050565b60006060820190506122a86000830186611af7565b6122b56020830185611af7565b6122c260408301846119df565b949350505050565b60006122d582611b21565b91506122e083611b21565b9250826122f0576122ef611b55565b5b600160000383147f80000000000000000000000000000000000000000000000000000000000000008314161561232957612328611b84565b5b828205905092915050565b7f4552525f535550504c595f4348414e4745440000000000000000000000000000600082015250565b600061236a601283611c15565b915061237582612334565b602082019050919050565b600060208201905081810360008301526123998161235d565b9050919050565b7f4552525f535550504c595f554e444552464c4f57000000000000000000000000600082015250565b60006123d6601483611c15565b91506123e1826123a0565b602082019050919050565b60006020820190508181036000830152612405816123c9565b9050919050565b7f4552525f5a45524f434f554e5400000000000000000000000000000000000000600082015250565b6000612442600d83611c15565b915061244d8261240c565b602082019050919050565b6000602082019050818103600083015261247181612435565b9050919050565b7f4552525f43415041434954590000000000000000000000000000000000000000600082015250565b60006124ae600c83611c15565b91506124b982612478565b602082019050919050565b600060208201905081810360008301526124dd816124a1565b9050919050565b7f4552525f434f4c4c4953494f4e00000000000000000000000000000000000000600082015250565b600061251a600d83611c15565b9150612525826124e4565b602082019050919050565b600060208201905081810360008301526125498161250d565b9050919050565b600061255b826118b7565b91506000820361256e5761256d611b84565b5b600182039050919050565b600081519050612588816118c1565b92915050565b6000602082840312156125a4576125a36118b2565b5b60006125b284828501612579565b9150509291505056fea2646970667358221220bd405c0b2b5eff8590557aad6ec87669506ab6c13e5cb5c4adfcab2e79f6a0e964736f6c63430008130033 +\ No newline at end of file diff --git a/python/evm_booking/data/Booking.json b/python/evm_booking/data/Booking.json @@ -1 +1 @@ -[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_resolution","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"capacity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"consume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"}],"name":"depositFor","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"uint256","name":"_offset","type":"uint256"}],"name":"raw","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"removeWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"share","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shareCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}] +[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_resolution","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_final","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_sealState","type":"uint256"}],"name":"SealStateChange","type":"event"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"capacity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"consume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"}],"name":"depositFor","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"isSealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalTokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"uint256","name":"_offset","type":"uint256"}],"name":"raw","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"removeWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"seal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"share","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shareCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}] diff --git a/python/evm_booking/data/Booking.metadata.json b/python/evm_booking/data/Booking.metadata.json @@ -1 +1 @@ -{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_resolution","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"capacity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"consume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"}],"name":"depositFor","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"uint256","name":"_offset","type":"uint256"}],"name":"raw","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"removeWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"share","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shareCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"Booking.sol":"ERC20Book"},"evmVersion":"byzantium","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"Booking.sol":{"keccak256":"0x3ac55d0fd108943eb59ed15cffd489e0e41cd59455ea3c56ea1f7dcd20606818","license":"AGPL-3.0-or-later","urls":["bzz-raw://07b156c9125740273010cdc4af30eb6a25ded04545e50d1316bd7712ff84e924","dweb:/ipfs/QmX1SjpdDZQUxBBnmVJEvQ7Mf5Dmu8XRZGttuAwQwwotka"]}},"version":1} +{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_resolution","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_final","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_sealState","type":"uint256"}],"name":"SealStateChange","type":"event"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"capacity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"consume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"}],"name":"depositFor","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"isSealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"isWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalTokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"uint256","name":"_offset","type":"uint256"}],"name":"raw","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_writer","type":"address"}],"name":"removeWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"seal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"share","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shareCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"Booking.sol":"ERC20Book"},"evmVersion":"byzantium","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"Booking.sol":{"keccak256":"0x95ed049d3f54ace51ec755975c56f73b0e7853e68e80624a75a31fd805cff244","license":"AGPL-3.0-or-later","urls":["bzz-raw://5fabc412a0abd58c5a7af1c83bf3b76142853e6f49bf5250a75fd2c04ca2d762","dweb:/ipfs/QmNx6mc3FrvvvTS1QKghU7Y9htVvL9FpqJkzdDTNWMoSpo"]}},"version":1} diff --git a/python/evm_booking/time.py b/python/evm_booking/time.py @@ -39,6 +39,11 @@ class TimeBooking(Booking): return super(TimeBooking, self).share(contract_address, sender_address, offset, count) + def consume_date(self, contract_address, sender_address, start_date, count, ref_date=None, tx_format=TxFormat.JSONRPC, id_generator=None): + offset = self.offset_from_date(start_date, count, ref_date=ref_date) + return super(TimeBooking, self).consume(contract_address, sender_address, offset, count) + + def offset_from_date(self, start_date, count, ref_date=None): if ref_date == None: ref_date = self.start diff --git a/python/run_tests.sh b/python/run_tests.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set -a +set -e +set -x +default_pythonpath=$PYTHONPATH:. +export PYTHONPATH=${default_pythonpath:-.} +>&2 echo using pythonpath $PYTHONPATH +for f in `ls tests/*.py`; do + python $f +done +set +x +set +e +set +a diff --git a/python/tests/test_base.py b/python/tests/test_base.py @@ -30,6 +30,17 @@ class TestBookingBase(TestBooking): self.rpc.do(o) o = receipt(tx_hash_hex) r = self.rpc.do(o) + self.assertEqual(r['status'], 0) + + c = ERC20(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) + (tx_hash_hex, o) = c.approve(self.token_address, self.accounts[0], self.address, self.initial_supply) + self.rpc.do(o) + + c = Booking(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) + (tx_hash_hex, o) = c.consume(self.address, self.accounts[0], 42, 13) + self.rpc.do(o) + o = receipt(tx_hash_hex) + r = self.rpc.do(o) self.assertEqual(r['status'], 1) (tx_hash_hex, o) = c.consume(self.address, self.accounts[0], 42, 1) @@ -154,11 +165,10 @@ class TestBookingBase(TestBooking): r = self.rpc.do(o) self.assertEqual(r['status'], 1) - o = c.raw(self.address, sender_address=self.accounts[0], count=150) + o = c.raw(self.address, sender_address=self.accounts[0], count=160) r = self.rpc.do(o) field = c.parse_raw(r) - self.assertEqual(len(field), 150 * 2) - self.assertEqual("0000000000fc7f000000000000000000e00f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", field) + self.assertEqual("0000000000fc7f000000000000000000e00f0000", field) if __name__ == '__main__': diff --git a/python/tests/test_time.py b/python/tests/test_time.py @@ -8,6 +8,7 @@ from chainlib.eth.nonce import RPCNonceOracle from chainlib.eth.tx import TxFactory from chainlib.eth.tx import receipt from chainlib.eth.address import to_checksum_address +from eth_erc20 import ERC20 from giftable_erc20_token.unittest import TestGiftableToken # local imports @@ -71,5 +72,34 @@ class TestBookingTime(TestGiftableToken): self.assertEqual("000000feffffffffff01", raw) + def test_consume_by_date(self): + nonce_oracle = RPCNonceOracle(self.accounts[0], conn=self.rpc) + d = datetime.datetime(year=1984, month=1, day=1) + start_date = datetime.datetime(year=1984, month=3, day=8, hour=12, minute=30) + count = int(PERIOD_DAY / PERIOD_HALFHOUR) + c = TimeBooking(self.chain_spec, PERIOD_LEAPYEAR, PERIOD_HALFHOUR, start_seconds=d.timestamp(), signer=self.signer, nonce_oracle=nonce_oracle) + (tx_hash, o) = c.consume_date(self.booking_address, self.accounts[0], start_date, count) + self.rpc.do(o) + o = receipt(tx_hash) + r = self.rpc.do(o) + self.assertEqual(r['status'], 0) + + c = ERC20(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) + (tx_hash_hex, o) = c.approve(self.token_address, self.accounts[0], self.address, self.initial_supply) + self.rpc.do(o) + + c = TimeBooking(self.chain_spec, PERIOD_LEAPYEAR, PERIOD_HALFHOUR, start_seconds=d.timestamp(), signer=self.signer, nonce_oracle=nonce_oracle) + (tx_hash, o) = c.consume_date(self.booking_address, self.accounts[0], start_date, count) + self.rpc.do(o) + o = receipt(tx_hash) + r = self.rpc.do(o) + self.assertEqual(r['status'], 1) + + o = c.raw(self.booking_address, count=80, offset=3216, sender_address=self.accounts[0]) + r = self.rpc.do(o) + raw = c.parse_raw(r) + self.assertEqual("000000feffffffffff01", raw) + + if __name__ == '__main__': unittest.main() diff --git a/solidity/Booking.sol b/solidity/Booking.sol @@ -14,10 +14,18 @@ contract ERC20Book { bytes sharedSlots; uint256 public capacity; uint256 public totalSupply; + uint256 public originalTokenSupply; uint256 public shareCount; mapping ( address => uint256 ) shares; mapping ( address => bool ) writers; + // Implements Seal + event SealStateChange(bool indexed _final, uint256 _sealState); + + uint256 public sealState; + uint8 constant WRITER_STATE = 1; + uint256 constant public maxSealState = 1; + constructor (address _token, uint256 _resolution) { require(_resolution > 0 && _resolution < (1 << 128), "ERR_NONSENSE"); uint256[2] memory r; @@ -28,11 +36,29 @@ contract ERC20Book { capacity = _resolution; totalSupply = capacity; token = _token; + originalTokenSupply = tokenSupply(); owner = msg.sender; } + function seal(uint256 _state) public returns(uint256) { + require(_state < maxSealState + 1, 'ERR_INVALID_STATE'); + require(_state & sealState == 0, 'ERR_ALREADY_LOCKED'); + sealState |= _state; + emit SealStateChange(sealState == maxSealState, sealState); + return uint256(sealState); + } + + function isSealed(uint256 _state) public view returns(bool) { + require(_state < maxSealState); + if (_state == 0) { + return sealState == maxSealState; + } + return _state & sealState == _state; + } + // Implements Writer function addWriter(address _writer) public returns (bool) { + require(!isSealed(WRITER_STATE), "ERR_SEALED"); require(msg.sender == owner, "ERR_AXX"); writers[_writer] = true; return true; @@ -40,6 +66,7 @@ contract ERC20Book { // Implements Writer function removeWriter(address _writer) public returns (bool) { + require(!isSealed(WRITER_STATE), "ERR_SEALED"); require(msg.sender == owner || msg.sender == _writer, "ERR_AXX"); writers[_writer] = false; return true; @@ -52,13 +79,16 @@ contract ERC20Book { function depositFor(address _spender) public returns (int256) { uint256 l_limit; + uint256 l_unit; int256 l_value; bool r; bytes memory v; address l_sender; address l_receiver; - l_limit = shareLimit(); + l_unit = unitValue(); + //return shareCount * l_unit; + l_limit = shareCount * l_unit; if (l_limit == shares[_spender]) { return 0; } @@ -75,6 +105,8 @@ contract ERC20Book { (r, v) = token.call(abi.encodeWithSignature('transferFrom(address,address,uint256)', l_sender, l_receiver, uint256(l_value))); require(r, "ERR_TOKEN"); + r = abi.decode(v, (bool)); + require(r, "ERR_TRANSFER"); shares[_spender] = l_limit; return l_value; @@ -84,14 +116,15 @@ contract ERC20Book { return depositFor(msg.sender); } - function shareLimit() internal returns(uint256) { + function unitValue() internal returns(uint256) { uint256 l_supply; uint256 l_unit; l_supply = tokenSupply(); + require(l_supply == originalTokenSupply, "ERR_SUPPLY_CHANGED"); require(l_supply >= totalSupply, "ERR_SUPPLY_UNDERFLOW"); l_unit = l_supply / totalSupply; - return shareCount * l_unit; + return l_unit; } function tokenSupply() internal returns (uint256) { @@ -107,6 +140,16 @@ contract ERC20Book { } function consume(uint256 _offset, uint256 _count) public { + bool r; + bytes memory v; + uint256 l_value; + + l_value = unitValue() * _count; + (r, v) = token.call(abi.encodeWithSignature('transferFrom(address,address,uint256)', msg.sender, this, l_value)); + require(r, "ERR_TOKEN"); + r = abi.decode(v, (bool)); + require(r, "ERR_TRANSFER"); + reserve(_offset, _count, false); }