evm-booking

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

commit 69f397e7cae3780ff387c3f84503f844b0558622
parent eabc0b43ca23edeca46fc33168a5b3f5e6c96f95
Author: lash <dev@holbrook.no>
Date:   Fri,  2 Jun 2023 15:37:38 +0100

Add time based interface

Diffstat:
Mpython/evm_booking/booking.py | 16++++++++++++++++
Mpython/evm_booking/data/Booking.bin | 4++--
Mpython/evm_booking/data/Booking.metadata.json | 2+-
Apython/evm_booking/time.py | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apython/tests/test_time.py | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msolidity/Booking.sol | 22++++++++++++++++------
6 files changed, 171 insertions(+), 9 deletions(-)

diff --git a/python/evm_booking/booking.py b/python/evm_booking/booking.py @@ -139,6 +139,22 @@ class Booking(TxFactory): return o + def capacity(self, contract_address, sender_address=ZERO_ADDRESS, id_generator=None, height=BlockSpec.LATEST): + j = JSONRPCRequest(id_generator) + o = j.template() + o['method'] = 'eth_call' + enc = ABIContractEncoder() + enc.method('capacity') + data = add_0x(enc.get()) + tx = self.template(sender_address, contract_address) + tx = self.set_code(tx, data) + o['params'].append(self.normalize(tx)) + height = to_blockheight_param(height) + o['params'].append(height) + o = j.finalize(o) + return o + + @classmethod def parse_raw(self, v): v = strip_0x(v) diff --git a/python/evm_booking/data/Booking.bin b/python/evm_booking/data/Booking.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b50604051620026c1380380620026c18339818101604052810190620000379190620003c6565b60008111801562000058575070010000000000000000000000000000000081105b6200009a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000091906200046e565b60405180910390fd5b620000a4620002ff565b620000be8262000270640100000000026401000000009004565b9050600181600060028110620000d957620000d862000490565b5b6020020151620000ea9190620004ee565b67ffffffffffffffff81111562000106576200010562000529565b5b6040519080825280601f01601f191660200182016040528015620001395781602001600182028036833780820191505090505b50600290816200014a91906200079f565b5060018160006002811062000164576200016362000490565b5b6020020151620001759190620004ee565b67ffffffffffffffff81111562000191576200019062000529565b5b6040519080825280601f01601f191660200182016040528015620001c45781602001600182028036833780820191505090505b5060039081620001d591906200079f565b508160048190555060045460058190555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620009b5565b6200027a620002ff565b600062000286620002ff565b600860018562000297919062000890565b620002a3919062000909565b91508181600060028110620002bd57620002bc62000490565b5b602002018181525050600884620002d591906200097d565b81600160028110620002ec57620002eb62000490565b5b6020020181815250508092505050919050565b6040518060400160405280600290602082028036833780820191505090505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003538262000326565b9050919050565b620003658162000346565b81146200037157600080fd5b50565b60008151905062000385816200035a565b92915050565b6000819050919050565b620003a0816200038b565b8114620003ac57600080fd5b50565b600081519050620003c08162000395565b92915050565b60008060408385031215620003e057620003df62000321565b5b6000620003f08582860162000374565b92505060206200040385828601620003af565b9150509250929050565b600082825260208201905092915050565b7f4552525f4e4f4e53454e53450000000000000000000000000000000000000000600082015250565b600062000456600c836200040d565b915062000463826200041e565b602082019050919050565b60006020820190508181036000830152620004898162000447565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620004fb826200038b565b915062000508836200038b565b9250828201905080821115620005235762000522620004bf565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005ab57607f821691505b602082108103620005c157620005c062000563565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b6000600883026200062e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005ec565b6200063a8683620005ec565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200067d6200067762000671846200038b565b62000652565b6200038b565b9050919050565b6000819050919050565b62000699836200065c565b620006b1620006a88262000684565b848454620005fc565b825550505050565b600090565b620006c8620006b9565b620006d58184846200068e565b505050565b5b81811015620006fd57620006f1600082620006be565b600181019050620006db565b5050565b601f8211156200074c576200071681620005c7565b6200072184620005dc565b8101602085101562000731578190505b620007496200074085620005dc565b830182620006da565b50505b505050565b60008160020a8304905092915050565b6000620007746000198460080262000751565b1980831691505092915050565b60006200078f838362000761565b9150826002028217905092915050565b620007aa8262000558565b67ffffffffffffffff811115620007c657620007c562000529565b5b620007d2825462000592565b620007df82828562000701565b600060209050601f83116001811462000817576000841562000802578287015190505b6200080e858262000781565b8655506200087e565b601f1984166200082786620005c7565b60005b8281101562000851578489015182556001820191506020850194506020810190506200082a565b868310156200087157848901516200086d601f89168262000761565b8355505b6001600288020188555050505b505050505050565b6000819050919050565b60006200089d8262000886565b9150620008aa8362000886565b9250828203905081811260008412168282136000851215161715620008d457620008d3620004bf565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620009168262000886565b9150620009238362000886565b925082620009365762000935620008da565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615620009725762000971620004bf565b5b828205905092915050565b60006200098a826200038b565b915062000997836200038b565b925082620009aa57620009a9620008da565b5b828206905092915050565b611cfc80620009c56000396000f3fe608060405234801561001057600080fd5b50600436106100ec576000357c0100000000000000000000000000000000000000000000000000000000900480637f03864b116100a9578063d0e30db011610083578063d0e30db014610245578063da2824a814610263578063de34d54414610293578063fc0c546a146102af576100ec565b80637f03864b146101d95780638da5cb5b146101f7578063aa67c91914610215576100ec565b806304bc34e2146100f157806318160ddd146101215780632b29ba231461013f5780634eeea7ad1461016f5780635356dddc1461018b5780635cfc1a51146101bb575b600080fd5b61010b60048036038101906101069190611330565b6102cd565b6040516101189190611400565b60405180910390f35b6101296104c3565b6040516101369190611431565b60405180910390f35b610159600480360381019061015491906114aa565b6104c9565b60405161016691906114f2565b60405180910390f35b61018960048036038101906101849190611330565b610575565b005b6101a560048036038101906101a091906114aa565b610585565b6040516101b291906114f2565b60405180910390f35b6101c36106ad565b6040516101d09190611431565b60405180910390f35b6101e16106b3565b6040516101ee9190611431565b60405180910390f35b6101ff6106b9565b60405161020c919061151c565b60405180910390f35b61022f600480360381019061022a91906114aa565b6106dd565b60405161023c9190611550565b60405180910390f35b61024d6109d1565b60405161025a9190611550565b60405180910390f35b61027d600480360381019061027891906114aa565b6109e1565b60405161028a91906114f2565b60405180910390f35b6102ad60048036038101906102a89190611330565b610ad3565b005b6102b7610b2b565b6040516102c4919061151c565b60405180910390f35b606080600084036102de5760055493505b60055484846102ed919061159a565b111561032e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103259061162b565b60405180910390fd5b8367ffffffffffffffff8111156103485761034761164b565b5b6040519080825280601f01601f19166020018201604052801561037a5781602001600182028036833780820191505090505b50905060005b848110156104b85760038482610396919061159a565b81546103a1906116a9565b81106103b0576103af6116da565b5b8154600116156103cf5790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000260028583610403919061159a565b815461040e906116a9565b811061041d5761041c6116da565b5b81546001161561043c5790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000217828281518110610476576104756116da565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806104b090611709565b915050610380565b508091505092915050565b60055481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061056e575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b61058182826000610b51565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061060d57508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61064c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106439061179d565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60045481565b60065481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060606000806106f0610f45565b9550600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054860361074757600096505050505050506109cc565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548661079291906117bd565b9450600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548611156107e65787915030905061081b565b3091508790507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff856108189190611800565b94505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682828760405160240161086993929190611878565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516108f391906118eb565b6000604051808303816000865af19150503d8060008114610930576040519150601f19603f3d011682016040523d82523d6000602084013e610935565b606091505b5080945081955050508361097e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109759061194e565b60405180910390fd5b85600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508496505050505050505b919050565b60006109dc336106dd565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a699061179d565b60405180910390fd5b6001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b610adc336104c9565b610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b129061179d565b60405180910390fd5b610b2782826001610b51565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008211610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b906119ba565b60405180910390fd5b610b9c6112d3565b600080610ba886610fbe565b925082600060028110610bbe57610bbd6116da565b5b6020020151915082600160028110610bd957610bd86116da565b5b602002015160ff1660019060020a02905060005b85811015610f3c57600060045411610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190611a26565b60405180910390fd5b610c44838361103d565b610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90611a92565b60405180910390fd5b8415610dc357816003848154610c98906116a9565b8110610ca757610ca66116da565b5b815460011615610cc65790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004177f0100000000000000000000000000000000000000000000000000000000000000026003848154610d40906116a9565b8110610d4f57610d4e6116da565b5b815460011615610d6e5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555060066000815480929190610db990611709565b9190505550610ee1565b816002848154610dd2906116a9565b8110610de157610de06116da565b5b815460011615610e005790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004177f0100000000000000000000000000000000000000000000000000000000000000026002848154610e7a906116a9565b8110610e8957610e886116da565b5b815460011615610ea85790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b60808260ff1603610f03578280610ef790611709565b93505060019150610f11565b60018260ff169060020a0291505b60046000815480929190610f2490611ab2565b91905055508080610f3490611709565b915050610bed565b50505050505050565b6000806000610f52611159565b9150600554821015610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9090611b27565b60405180910390fd5b60055482610fa79190611b76565b905080600654610fb79190611ba7565b9250505090565b610fc66112d3565b6000610fd06112d3565b6008600185610fdf91906117bd565b610fe99190611be9565b9150818160006002811061100057610fff6116da565b5b6020020181815250506008846110169190611c53565b8160016002811061102a576110296116da565b5b6020020181815250508092505050919050565b60008082600385815461104f906116a9565b811061105e5761105d6116da565b5b81546001161561107d5790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900460028681546110d4906116a9565b81106110e3576110e26116da565b5b8154600116156111025790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004171660ff1614905092915050565b60008060606000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161122991906118eb565b6000604051808303816000865af19150503d8060008114611266576040519150601f19603f3d011682016040523d82523d6000602084013e61126b565b606091505b508093508194505050826112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab9061194e565b60405180910390fd5b818060200190518101906112c89190611c99565b905080935050505090565b6040518060400160405280600290602082028036833780820191505090505090565b600080fd5b6000819050919050565b61130d816112fa565b811461131857600080fd5b50565b60008135905061132a81611304565b92915050565b60008060408385031215611347576113466112f5565b5b60006113558582860161131b565b92505060206113668582860161131b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113aa57808201518184015260208101905061138f565b60008484015250505050565b6000601f19601f8301169050919050565b60006113d282611370565b6113dc818561137b565b93506113ec81856020860161138c565b6113f5816113b6565b840191505092915050565b6000602082019050818103600083015261141a81846113c7565b905092915050565b61142b816112fa565b82525050565b60006020820190506114466000830184611422565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114778261144c565b9050919050565b6114878161146c565b811461149257600080fd5b50565b6000813590506114a48161147e565b92915050565b6000602082840312156114c0576114bf6112f5565b5b60006114ce84828501611495565b91505092915050565b60008115159050919050565b6114ec816114d7565b82525050565b600060208201905061150760008301846114e3565b92915050565b6115168161146c565b82525050565b6000602082019050611531600083018461150d565b92915050565b6000819050919050565b61154a81611537565b82525050565b60006020820190506115656000830184611541565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115a5826112fa565b91506115b0836112fa565b92508282019050808211156115c8576115c761156b565b5b92915050565b600082825260208201905092915050565b7f4552525f52414e47450000000000000000000000000000000000000000000000600082015250565b60006116156009836115ce565b9150611620826115df565b602082019050919050565b6000602082019050818103600083015261164481611608565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806116c157607f821691505b6020821081036116d4576116d361167a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611714826112fa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117465761174561156b565b5b600182019050919050565b7f4552525f41585800000000000000000000000000000000000000000000000000600082015250565b60006117876007836115ce565b915061179282611751565b602082019050919050565b600060208201905081810360008301526117b68161177a565b9050919050565b60006117c882611537565b91506117d383611537565b92508282039050818112600084121682821360008512151617156117fa576117f961156b565b5b92915050565b600061180b82611537565b915061181683611537565b925082820261182481611537565b91507f8000000000000000000000000000000000000000000000000000000000000000841460008412161561185c5761185b61156b565b5b82820584148315176118715761187061156b565b5b5092915050565b600060608201905061188d600083018661150d565b61189a602083018561150d565b6118a76040830184611422565b949350505050565b600081905092915050565b60006118c582611370565b6118cf81856118af565b93506118df81856020860161138c565b80840191505092915050565b60006118f782846118ba565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b60006119386009836115ce565b915061194382611902565b602082019050919050565b600060208201905081810360008301526119678161192b565b9050919050565b7f4552525f5a45524f434f554e5400000000000000000000000000000000000000600082015250565b60006119a4600d836115ce565b91506119af8261196e565b602082019050919050565b600060208201905081810360008301526119d381611997565b9050919050565b7f4552525f43415041434954590000000000000000000000000000000000000000600082015250565b6000611a10600c836115ce565b9150611a1b826119da565b602082019050919050565b60006020820190508181036000830152611a3f81611a03565b9050919050565b7f4552525f434f4c4c4953494f4e00000000000000000000000000000000000000600082015250565b6000611a7c600d836115ce565b9150611a8782611a46565b602082019050919050565b60006020820190508181036000830152611aab81611a6f565b9050919050565b6000611abd826112fa565b915060008203611ad057611acf61156b565b5b600182039050919050565b7f4552525f535550504c595f554e444552464c4f57000000000000000000000000600082015250565b6000611b116014836115ce565b9150611b1c82611adb565b602082019050919050565b60006020820190508181036000830152611b4081611b04565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611b81826112fa565b9150611b8c836112fa565b925082611b9c57611b9b611b47565b5b828204905092915050565b6000611bb2826112fa565b9150611bbd836112fa565b9250828202611bcb816112fa565b91508282048414831517611be257611be161156b565b5b5092915050565b6000611bf482611537565b9150611bff83611537565b925082611c0f57611c0e611b47565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615611c4857611c4761156b565b5b828205905092915050565b6000611c5e826112fa565b9150611c69836112fa565b925082611c7957611c78611b47565b5b828206905092915050565b600081519050611c9381611304565b92915050565b600060208284031215611caf57611cae6112f5565b5b6000611cbd84828501611c84565b9150509291505056fea26469706673582212207c5f4547b4984299efeefd2d3af28d6189947db8074641fd9bd0162196c2269564736f6c63430008130033 -\ No newline at end of file +60806040523480156200001157600080fd5b50604051620026df380380620026df8339818101604052810190620000379190620003b8565b60008111801562000058575070010000000000000000000000000000000081105b6200009a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000919062000460565b60405180910390fd5b620000a4620002f1565b620000be8262000270640100000000026401000000009004565b9050600181600060028110620000d957620000d862000482565b5b6020020151620000ea9190620004e0565b67ffffffffffffffff8111156200010657620001056200051b565b5b6040519080825280601f01601f191660200182016040528015620001395781602001600182028036833780820191505090505b50600290816200014a919062000791565b5060018160006002811062000164576200016362000482565b5b6020020151620001759190620004e0565b67ffffffffffffffff8111156200019157620001906200051b565b5b6040519080825280601f01601f191660200182016040528015620001c45781602001600182028036833780820191505090505b5060039081620001d5919062000791565b508160048190555060045460058190555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200095d565b6200027a620002f1565b600062000286620002f1565b600884620002959190620008b1565b91508181600060028110620002af57620002ae62000482565b5b602002018181525050600884620002c7919062000925565b81600160028110620002de57620002dd62000482565b5b6020020181815250508092505050919050565b6040518060400160405280600290602082028036833780820191505090505090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003458262000318565b9050919050565b620003578162000338565b81146200036357600080fd5b50565b60008151905062000377816200034c565b92915050565b6000819050919050565b62000392816200037d565b81146200039e57600080fd5b50565b600081519050620003b28162000387565b92915050565b60008060408385031215620003d257620003d162000313565b5b6000620003e28582860162000366565b9250506020620003f585828601620003a1565b9150509250929050565b600082825260208201905092915050565b7f4552525f4e4f4e53454e53450000000000000000000000000000000000000000600082015250565b600062000448600c83620003ff565b9150620004558262000410565b602082019050919050565b600060208201905081810360008301526200047b8162000439565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620004ed826200037d565b9150620004fa836200037d565b9250828201905080821115620005155762000514620004b1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059d57607f821691505b602082108103620005b357620005b262000555565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620006207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005de565b6200062c8683620005de565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200066f6200066962000663846200037d565b62000644565b6200037d565b9050919050565b6000819050919050565b6200068b836200064e565b620006a36200069a8262000676565b848454620005ee565b825550505050565b600090565b620006ba620006ab565b620006c781848462000680565b505050565b5b81811015620006ef57620006e3600082620006b0565b600181019050620006cd565b5050565b601f8211156200073e576200070881620005b9565b6200071384620005ce565b8101602085101562000723578190505b6200073b6200073285620005ce565b830182620006cc565b50505b505050565b60008160020a8304905092915050565b6000620007666000198460080262000743565b1980831691505092915050565b600062000781838362000753565b9150826002028217905092915050565b6200079c826200054a565b67ffffffffffffffff811115620007b857620007b76200051b565b5b620007c4825462000584565b620007d1828285620006f3565b600060209050601f831160018114620008095760008415620007f4578287015190505b62000800858262000773565b86555062000870565b601f1984166200081986620005b9565b60005b8281101562000843578489015182556001820191506020850194506020810190506200081c565b868310156200086357848901516200085f601f89168262000753565b8355505b6001600288020188555050505b505050505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620008be8262000878565b9150620008cb8362000878565b925082620008de57620008dd62000882565b5b600160000383147f8000000000000000000000000000000000000000000000000000000000000000831416156200091a5762000919620004b1565b5b828205905092915050565b600062000932826200037d565b91506200093f836200037d565b92508262000952576200095162000882565b5b828206905092915050565b611d72806200096d6000396000f3fe608060405234801561001057600080fd5b50600436106100ec576000357c0100000000000000000000000000000000000000000000000000000000900480637f03864b116100a9578063d0e30db011610083578063d0e30db014610245578063da2824a814610263578063de34d54414610293578063fc0c546a146102af576100ec565b80637f03864b146101d95780638da5cb5b146101f7578063aa67c91914610215576100ec565b806304bc34e2146100f157806318160ddd146101215780632b29ba231461013f5780634eeea7ad1461016f5780635356dddc1461018b5780635cfc1a51146101bb575b600080fd5b61010b600480360381019061010691906113a6565b6102cd565b6040516101189190611476565b60405180910390f35b610129610545565b60405161013691906114a7565b60405180910390f35b61015960048036038101906101549190611520565b61054b565b6040516101669190611568565b60405180910390f35b610189600480360381019061018491906113a6565b6105f7565b005b6101a560048036038101906101a09190611520565b610607565b6040516101b29190611568565b60405180910390f35b6101c361072f565b6040516101d091906114a7565b60405180910390f35b6101e1610735565b6040516101ee91906114a7565b60405180910390f35b6101ff61073b565b60405161020c9190611592565b60405180910390f35b61022f600480360381019061022a9190611520565b61075f565b60405161023c91906115c6565b60405180910390f35b61024d610a53565b60405161025a91906115c6565b60405180910390f35b61027d60048036038101906102789190611520565b610a63565b60405161028a9190611568565b60405180910390f35b6102ad60048036038101906102a891906113a6565b610b55565b005b6102b7610bad565b6040516102c49190611592565b60405180910390f35b6060806102d8611349565b600080600087036102f55760086004546102f2919061163f565b96505b60006008876103049190611670565b14610344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033b906116fe565b60405180910390fd5b61034d86610bd3565b9250826000600281106103635761036261171e565b5b60200201519150600887610377919061163f565b905060018360016002811061038f5761038e61171e565b5b602002015160ff1611156103ad576001816103aa919061174d565b90505b8067ffffffffffffffff8111156103c7576103c6611781565b5b6040519080825280601f01601f1916602001820160405280156103f95781602001600182028036833780820191505090505b50935060005b818110156105375760038382610415919061174d565b8154610420906117df565b811061042f5761042e61171e565b5b81546001161561044e5790600052602060002090602091828204019190065b9054901a7f01000000000000000000000000000000000000000000000000000000000000000260028483610482919061174d565b815461048d906117df565b811061049c5761049b61171e565b5b8154600116156104bb5790600052602060002090602091828204019190065b9054901a7f010000000000000000000000000000000000000000000000000000000000000002178582815181106104f5576104f461171e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061052f90611810565b9150506103ff565b508394505050505092915050565b60055481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806105f0575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b61060382826000610c46565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061068f57508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6106ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c5906118a4565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60045481565b60065481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080606060008061077261103a565b9550600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486036107c95760009650505050505050610a4e565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548661081491906118c4565b9450600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548611156108685787915030905061089d565b3091508790507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8561089a9190611907565b94505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168282876040516024016108eb9392919061197f565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161097591906119f2565b6000604051808303816000865af19150503d80600081146109b2576040519150601f19603f3d011682016040523d82523d6000602084013e6109b7565b606091505b50809450819550505083610a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f790611a55565b60405180910390fd5b85600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508496505050505050505b919050565b6000610a5e3361075f565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aeb906118a4565b60405180910390fd5b6001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b610b5e3361054b565b610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b94906118a4565b60405180910390fd5b610ba982826001610c46565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bdb611349565b6000610be5611349565b600884610bf29190611a75565b91508181600060028110610c0957610c0861171e565b5b602002018181525050600884610c1f9190611670565b81600160028110610c3357610c3261171e565b5b6020020181815250508092505050919050565b60008211610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8090611b2b565b60405180910390fd5b610c91611349565b600080610c9d86610bd3565b925082600060028110610cb357610cb261171e565b5b6020020151915082600160028110610cce57610ccd61171e565b5b602002015160ff1660019060020a02905060005b8581101561103157600060045411610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2690611b97565b60405180910390fd5b610d3983836110b3565b610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f90611c03565b60405180910390fd5b8415610eb857816003848154610d8d906117df565b8110610d9c57610d9b61171e565b5b815460011615610dbb5790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004177f0100000000000000000000000000000000000000000000000000000000000000026003848154610e35906117df565b8110610e4457610e4361171e565b5b815460011615610e635790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555060066000815480929190610eae90611810565b9190505550610fd6565b816002848154610ec7906117df565b8110610ed657610ed561171e565b5b815460011615610ef55790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004177f0100000000000000000000000000000000000000000000000000000000000000026002848154610f6f906117df565b8110610f7e57610f7d61171e565b5b815460011615610f9d5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b60808260ff1603610ff8578280610fec90611810565b93505060019150611006565b60018260ff169060020a0291505b6004600081548092919061101990611c23565b9190505550808061102990611810565b915050610ce2565b50505050505050565b60008060006110476111cf565b915060055482101561108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590611c98565b60405180910390fd5b6005548261109c919061163f565b9050806006546110ac9190611cb8565b9250505090565b6000808260038581546110c5906117df565b81106110d4576110d361171e565b5b8154600116156110f35790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004600286815461114a906117df565b81106111595761115861171e565b5b8154600116156111785790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004171660ff1614905092915050565b60008060606000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161129f91906119f2565b6000604051808303816000865af19150503d80600081146112dc576040519150601f19603f3d011682016040523d82523d6000602084013e6112e1565b606091505b5080935081945050508261132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132190611a55565b60405180910390fd5b8180602001905181019061133e9190611d0f565b905080935050505090565b6040518060400160405280600290602082028036833780820191505090505090565b600080fd5b6000819050919050565b61138381611370565b811461138e57600080fd5b50565b6000813590506113a08161137a565b92915050565b600080604083850312156113bd576113bc61136b565b5b60006113cb85828601611391565b92505060206113dc85828601611391565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611420578082015181840152602081019050611405565b60008484015250505050565b6000601f19601f8301169050919050565b6000611448826113e6565b61145281856113f1565b9350611462818560208601611402565b61146b8161142c565b840191505092915050565b60006020820190508181036000830152611490818461143d565b905092915050565b6114a181611370565b82525050565b60006020820190506114bc6000830184611498565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114ed826114c2565b9050919050565b6114fd816114e2565b811461150857600080fd5b50565b60008135905061151a816114f4565b92915050565b6000602082840312156115365761153561136b565b5b60006115448482850161150b565b91505092915050565b60008115159050919050565b6115628161154d565b82525050565b600060208201905061157d6000830184611559565b92915050565b61158c816114e2565b82525050565b60006020820190506115a76000830184611583565b92915050565b6000819050919050565b6115c0816115ad565b82525050565b60006020820190506115db60008301846115b7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061164a82611370565b915061165583611370565b925082611665576116646115e1565b5b828204905092915050565b600061167b82611370565b915061168683611370565b925082611696576116956115e1565b5b828206905092915050565b600082825260208201905092915050565b7f4552525f424f554e444152590000000000000000000000000000000000000000600082015250565b60006116e8600c836116a1565b91506116f3826116b2565b602082019050919050565b60006020820190508181036000830152611717816116db565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061175882611370565b915061176383611370565b925082820190508082111561177b5761177a611610565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806117f757607f821691505b60208210810361180a576118096117b0565b5b50919050565b600061181b82611370565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361184d5761184c611610565b5b600182019050919050565b7f4552525f41585800000000000000000000000000000000000000000000000000600082015250565b600061188e6007836116a1565b915061189982611858565b602082019050919050565b600060208201905081810360008301526118bd81611881565b9050919050565b60006118cf826115ad565b91506118da836115ad565b925082820390508181126000841216828213600085121516171561190157611900611610565b5b92915050565b6000611912826115ad565b915061191d836115ad565b925082820261192b816115ad565b91507f8000000000000000000000000000000000000000000000000000000000000000841460008412161561196357611962611610565b5b828205841483151761197857611977611610565b5b5092915050565b60006060820190506119946000830186611583565b6119a16020830185611583565b6119ae6040830184611498565b949350505050565b600081905092915050565b60006119cc826113e6565b6119d681856119b6565b93506119e6818560208601611402565b80840191505092915050565b60006119fe82846119c1565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b6000611a3f6009836116a1565b9150611a4a82611a09565b602082019050919050565b60006020820190508181036000830152611a6e81611a32565b9050919050565b6000611a80826115ad565b9150611a8b836115ad565b925082611a9b57611a9a6115e1565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615611ad457611ad3611610565b5b828205905092915050565b7f4552525f5a45524f434f554e5400000000000000000000000000000000000000600082015250565b6000611b15600d836116a1565b9150611b2082611adf565b602082019050919050565b60006020820190508181036000830152611b4481611b08565b9050919050565b7f4552525f43415041434954590000000000000000000000000000000000000000600082015250565b6000611b81600c836116a1565b9150611b8c82611b4b565b602082019050919050565b60006020820190508181036000830152611bb081611b74565b9050919050565b7f4552525f434f4c4c4953494f4e00000000000000000000000000000000000000600082015250565b6000611bed600d836116a1565b9150611bf882611bb7565b602082019050919050565b60006020820190508181036000830152611c1c81611be0565b9050919050565b6000611c2e82611370565b915060008203611c4157611c40611610565b5b600182039050919050565b7f4552525f535550504c595f554e444552464c4f57000000000000000000000000600082015250565b6000611c826014836116a1565b9150611c8d82611c4c565b602082019050919050565b60006020820190508181036000830152611cb181611c75565b9050919050565b6000611cc382611370565b9150611cce83611370565b9250828202611cdc81611370565b91508282048414831517611cf357611cf2611610565b5b5092915050565b600081519050611d098161137a565b92915050565b600060208284031215611d2557611d2461136b565b5b6000611d3384828501611cfa565b9150509291505056fea26469706673582212205867de9509c148379719b86cf5a28d5b65ec718070cb4f00a6ccfe04f0797b5364736f6c63430008130033 +\ No newline at end of file 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":"0x0ff2ae46747d9d1d3eb62afeb19c4edf9af0300ec67859ed54c5172192b6d08f","license":"AGPL-3.0-or-later","urls":["bzz-raw://102f136fc3a8149600a4a24dac9d4089bc1ebc326107879781a0599fe1a9eaf0","dweb:/ipfs/QmdydWNRoWJnQkz1PdVwDDwwJubNFHo7nXM5hs8PZk14B9"]}},"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"},{"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} diff --git a/python/evm_booking/time.py b/python/evm_booking/time.py @@ -0,0 +1,61 @@ +# standard imports +import datetime +import logging + +# external imports +from chainlib.eth.tx import TxFormat + +# local imports +from evm_booking import Booking + +logg = logging.getLogger(__name__) + +PERIOD_HALFHOUR = 60*30 +PERIOD_HOUR = PERIOD_HALFHOUR * 2 +PERIOD_DAY = PERIOD_HOUR * 24 +PERIOD_YEAR = PERIOD_DAY * 365 +PERIOD_LEAPYEAR = PERIOD_YEAR + PERIOD_DAY + + +class TimeBooking(Booking): + + def __init__(self, chain_spec, period_seconds, resolution_seconds, start_seconds=None, signer=None, gas_oracle=None, nonce_oracle=None): + super(TimeBooking, self).__init__(chain_spec, signer=signer, gas_oracle=gas_oracle, nonce_oracle=nonce_oracle) + if period_seconds % resolution_seconds > 0: + raise ValueError("period must be evenly divided in resolution") + self.start = None + if start_seconds != None: + self.start = datetime.datetime.fromtimestamp(start_seconds) + self.unit = resolution_seconds + self.capacity_units = int(period_seconds / resolution_seconds) + + + def constructor(self, sender_address, token_address, tx_format=TxFormat.JSONRPC, version=None): + return super(TimeBooking, self).constructor(sender_address, token_address, self.capacity_units, tx_format=tx_format, version=version) + + + def share_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).share(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 + if ref_date == None: + raise AttributeError('no reference start date exists') + + duration = datetime.timedelta(seconds=count*self.unit) + end_seconds = self.capacity_units * self.unit + end_date = ref_date + datetime.timedelta(seconds=end_seconds) + target_date = start_date + duration + logg.debug("ref {} {}".format(end_seconds, ref_date)) + if target_date > end_date: + raise ValueError('duration results in {} which is beyond end date {}'.format(target_date, end_date)) + + delta = start_date - ref_date + if delta.seconds % self.unit > 0: + raise ValueError('start date must be evenly divide into unit of {} seconds'.format(self.unit)) + offset = (delta.days * 24*60*60) / self.unit + offset += int(delta.seconds / self.unit) + return offset diff --git a/python/tests/test_time.py b/python/tests/test_time.py @@ -0,0 +1,75 @@ +# standard imports +import unittest +import logging +import datetime + +# external imports +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 giftable_erc20_token.unittest import TestGiftableToken + +# local imports +from evm_booking.unittest import TestBooking +from evm_booking.time import * + +logging.basicConfig(level=logging.DEBUG) +logg = logging.getLogger() + + +class TestBookingTime(TestGiftableToken): + + def setUp(self): + super(TestBookingTime, self).setUp() + self.token_address = self.address + + d = datetime.datetime(year=1984, month=1, day=1) + d = int(d.timestamp()) + nonce_oracle = RPCNonceOracle(self.accounts[0], conn=self.rpc) + c = TimeBooking(self.chain_spec, PERIOD_LEAPYEAR, PERIOD_HALFHOUR, start_seconds=d, signer=self.signer, nonce_oracle=nonce_oracle) + (tx_hash, o) = c.constructor(self.accounts[0], self.token_address) + self.rpc.do(o) + o = receipt(tx_hash) + r = self.rpc.do(o) + self.assertEqual(r['status'], 1) + self.address = to_checksum_address(r['contract_address']) + self.booking_address = self.address + self.caller = TimeBooking(self.chain_spec, PERIOD_LEAPYEAR, PERIOD_HALFHOUR, start_seconds=d) + + + def test_uneven(self): + d = datetime.datetime(year=1984, month=1, day=1) + d = int(d.timestamp()) + with self.assertRaises(ValueError): + TimeBooking(self.chain_spec, PERIOD_LEAPYEAR, PERIOD_HALFHOUR - 1, start_seconds=d) + + + def test_check_capacity(self): + logg.debug('foo {}'.format(self.caller.capacity)) + o = self.caller.capacity(self.booking_address, sender_address=self.accounts[0]) + r = self.rpc.do(o) + capacity = int(r, 16) + self.assertEqual(capacity, int(PERIOD_LEAPYEAR / PERIOD_HALFHOUR)) + + + def test_by_date(self): + nonce_oracle = RPCNonceOracle(self.accounts[0], conn=self.rpc) + d = datetime.datetime(year=1984, month=1, day=1) + c = TimeBooking(self.chain_spec, PERIOD_LEAPYEAR, PERIOD_HALFHOUR, start_seconds=d.timestamp(), signer=self.signer, nonce_oracle=nonce_oracle) + start_date = datetime.datetime(year=1984, month=3, day=8, hour=12, minute=30) + count = int(PERIOD_DAY / PERIOD_HALFHOUR) + (tx_hash, o) = c.share_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 @@ -152,7 +152,7 @@ contract ERC20Book { int256 c; uint256[2] memory r; - c = (int256(bit) - 1) / 8; + c = int256(bit) / 8; r[0] = uint256(c); r[1] = bit % 8; @@ -161,15 +161,25 @@ contract ERC20Book { function raw(uint256 _count, uint256 _offset) public view returns (bytes memory) { bytes memory r; + uint256[2] memory c; + uint256 l_offset; + uint256 l_count; if (_count == 0) { - _count = totalSupply; + _count = capacity / 8; } - require(_offset + _count <= totalSupply, "ERR_RANGE"); + require(_offset % 8 == 0, "ERR_BOUNDARY"); - r = new bytes(_count); - for (uint256 i = 0; i < _count; i++) { - r[i] = slots[i + _offset] | sharedSlots[i + _offset]; + c = getPos(_offset); + l_offset = uint256(c[0]); + + l_count = _count / 8; + if (uint8(c[1]) > 1) { + l_count += 1; + } + r = new bytes(l_count); + for (uint256 i = 0; i < l_count; i++) { + r[i] = slots[i + l_offset] | sharedSlots[i + l_offset]; } return r; }