evm-booking

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

commit bd15c0d6c982c2ed58201914c6633a3c70761959
parent 40934a4882281802fb7b9bc5457eadbb3b4c5bfb
Author: lash <dev@holbrook.no>
Date:   Tue, 30 May 2023 09:27:35 +0100

Reserve test

Diffstat:
Mpython/evm_booking/booking.py | 6++++--
Mpython/evm_booking/data/Booking.bin | 4++--
Mpython/evm_booking/data/Booking.metadata.json | 2+-
Mpython/evm_booking/unittest/base.py | 14++++++--------
Mpython/tests/test_base.py | 36+++++++++++++++++++++++++++++++++++-
Msolidity/Booking.sol | 16++++++++--------
6 files changed, 56 insertions(+), 22 deletions(-)

diff --git a/python/evm_booking/booking.py b/python/evm_booking/booking.py @@ -79,10 +79,12 @@ class Booking(TxFactory): return Booking.__bytecode - def reserve(self, contract_address, sender_address, count, tx_format=TxFormat.JSONRPC, id_generator=None): + def reserve(self, contract_address, sender_address, offset, count, tx_format=TxFormat.JSONRPC, id_generator=None): enc = ABIContractEncoder() - enc.method('create') + enc.method('reserve') enc.typ(ABIContractType.UINT256) + enc.typ(ABIContractType.UINT256) + enc.uint256(offset) enc.uint256(count) data = add_0x(enc.get()) tx = self.template(sender_address, contract_address, use_nonce=True) diff --git a/python/evm_booking/data/Booking.bin b/python/evm_booking/data/Booking.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b506040516200111b3803806200111b833981810160405281019062000037919062000274565b60008111801562000058575070010000000000000000000000000000000081105b6200009a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000919062000307565b60405180910390fd5b620000a462000212565b620000be826200015a640100000000026401000000009004565b9050600181600060028110620000d957620000d862000329565b5b6020020151620000ea919062000387565b67ffffffffffffffff811115620001065762000105620003c2565b5b6040519080825280601f01601f191660200182016040528015620001395781602001600182028036833780820191505090505b50600090816200014a919062000638565b5081600181905550505062000899565b6200016462000212565b60006200017062000212565b6001600860018662000183919062000729565b6200018f9190620007a2565b6200019b919062000816565b91508181600060028110620001b557620001b462000329565b5b602002018181525050600881600060028110620001d757620001d662000329565b5b6020020151620001e8919062000861565b81600160028110620001ff57620001fe62000329565b5b6020020181815250508092505050919050565b6040518060400160405280600290602082028036833780820191505090505090565b600080fd5b6000819050919050565b6200024e8162000239565b81146200025a57600080fd5b50565b6000815190506200026e8162000243565b92915050565b6000602082840312156200028d576200028c62000234565b5b60006200029d848285016200025d565b91505092915050565b600082825260208201905092915050565b7f4552525f4e4f4e53454e53450000000000000000000000000000000000000000600082015250565b6000620002ef600c83620002a6565b9150620002fc82620002b7565b602082019050919050565b600060208201905081810360008301526200032281620002e0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003948262000239565b9150620003a18362000239565b9250828201905080821115620003bc57620003bb62000358565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200044457607f821691505b6020821081036200045a5762000459620003fc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620004c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000485565b620004d3868362000485565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000516620005106200050a8462000239565b620004eb565b62000239565b9050919050565b6000819050919050565b6200053283620004f5565b6200054a62000541826200051d565b84845462000495565b825550505050565b600090565b6200056162000552565b6200056e81848462000527565b505050565b5b8181101562000596576200058a60008262000557565b60018101905062000574565b5050565b601f821115620005e557620005af8162000460565b620005ba8462000475565b81016020851015620005ca578190505b620005e2620005d98562000475565b83018262000573565b50505b505050565b60008160020a8304905092915050565b60006200060d60001984600802620005ea565b1980831691505092915050565b6000620006288383620005fa565b9150826002028217905092915050565b6200064382620003f1565b67ffffffffffffffff8111156200065f576200065e620003c2565b5b6200066b82546200042b565b620006788282856200059a565b600060209050601f831160018114620006b057600084156200069b578287015190505b620006a785826200061a565b86555062000717565b601f198416620006c08662000460565b60005b82811015620006ea57848901518255600182019150602085019450602081019050620006c3565b868310156200070a578489015162000706601f891682620005fa565b8355505b6001600288020188555050505b505050505050565b6000819050919050565b600062000736826200071f565b915062000743836200071f565b92508282039050818112600084121682821360008512151617156200076d576200076c62000358565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620007af826200071f565b9150620007bc836200071f565b925082620007cf57620007ce62000773565b5b600160000383147f8000000000000000000000000000000000000000000000000000000000000000831416156200080b576200080a62000358565b5b828205905092915050565b600062000823826200071f565b915062000830836200071f565b9250828201905082811215600083121683821260008412151617156200085b576200085a62000358565b5b92915050565b60006200086e8262000239565b91506200087b8362000239565b9250826200088e576200088d62000773565b5b828206905092915050565b61087280620008a96000396000f3fe608060405234801561001057600080fd5b5060043610610048576000357c010000000000000000000000000000000000000000000000000000000090048063244282211461004d575b600080fd5b61006760048036038101906100629190610453565b610069565b005b6100716103f6565b60008061007d85610353565b92508260006002811061009357610092610493565b5b60200201519150826001600281106100ae576100ad610493565b5b6020020151905060005b8481101561034b57600060015411610105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100fc9061051f565b60405180910390fd5b60008260008581546101169061056e565b811061012557610124610493565b5b8154600116156101445790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff1611156101d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c9906105eb565b60405180910390fd5b8160008481546101e19061056e565b81106101f0576101ef610493565b5b81546001161561020f5790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004177f01000000000000000000000000000000000000000000000000000000000000000260008481546102899061056e565b811061029857610297610493565b5b8154600116156102b75790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555060078260ff16036103115782806103059061063a565b93505060009150610320565b818061031c9061068f565b9250505b60016000815480929190610333906106b8565b919050555080806103439061063a565b9150506100b8565b505050505050565b61035b6103f6565b60006103656103f6565b6001600860018661037691906106eb565b610380919061075d565b61038a91906107c7565b915081816000600281106103a1576103a0610493565b5b6020020181815250506008816000600281106103c0576103bf610493565b5b60200201516103cf919061080b565b816001600281106103e3576103e2610493565b5b6020020181815250508092505050919050565b6040518060400160405280600290602082028036833780820191505090505090565b600080fd5b6000819050919050565b6104308161041d565b811461043b57600080fd5b50565b60008135905061044d81610427565b92915050565b6000806040838503121561046a57610469610418565b5b60006104788582860161043e565b92505060206104898582860161043e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4552525f43415041434954590000000000000000000000000000000000000000600082015250565b6000610509600c836104c2565b9150610514826104d3565b602082019050919050565b60006020820190508181036000830152610538816104fc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061058657607f821691505b6020821081036105995761059861053f565b5b50919050565b7f4552525f434f4c4c4953494f4e00000000000000000000000000000000000000600082015250565b60006105d5600d836104c2565b91506105e08261059f565b602082019050919050565b60006020820190508181036000830152610604816105c8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006106458261041d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036106775761067661060b565b5b600182019050919050565b600060ff82169050919050565b600061069a82610682565b915060ff82036106ad576106ac61060b565b5b600182019050919050565b60006106c38261041d565b9150600082036106d6576106d561060b565b5b600182039050919050565b6000819050919050565b60006106f6826106e1565b9150610701836106e1565b92508282039050818112600084121682821360008512151617156107285761072761060b565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000610768826106e1565b9150610773836106e1565b9250826107835761078261072e565b5b600160000383147f8000000000000000000000000000000000000000000000000000000000000000831416156107bc576107bb61060b565b5b828205905092915050565b60006107d2826106e1565b91506107dd836106e1565b9250828201905082811215600083121683821260008412151617156108055761080461060b565b5b92915050565b60006108168261041d565b91506108218361041d565b9250826108315761083061072e565b5b82820690509291505056fea2646970667358221220e800a843f45ef5b02b21f439b707a28d9e7decfda2a4e54714063c93321d03bc64736f6c63430008130033 -\ No newline at end of file +60806040523480156200001157600080fd5b506040516200116a3803806200116a833981810160405281019062000037919062000259565b60008111801562000058575070010000000000000000000000000000000081105b6200009a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200009190620002ec565b60405180910390fd5b620000a4620001f7565b620000be826200015a640100000000026401000000009004565b9050600181600060028110620000d957620000d86200030e565b5b6020020151620000ea91906200036c565b67ffffffffffffffff811115620001065762000105620003a7565b5b6040519080825280601f01601f191660200182016040528015620001395781602001600182028036833780820191505090505b50600090816200014a91906200061d565b508160018190555050506200087e565b62000164620001f7565b600062000170620001f7565b600160086001866200018391906200070e565b6200018f919062000787565b6200019b9190620007fb565b91508181600060028110620001b557620001b46200030e565b5b602002018181525050600884620001cd919062000846565b81600160028110620001e457620001e36200030e565b5b6020020181815250508092505050919050565b6040518060400160405280600290602082028036833780820191505090505090565b600080fd5b6000819050919050565b62000233816200021e565b81146200023f57600080fd5b50565b600081519050620002538162000228565b92915050565b60006020828403121562000272576200027162000219565b5b6000620002828482850162000242565b91505092915050565b600082825260208201905092915050565b7f4552525f4e4f4e53454e53450000000000000000000000000000000000000000600082015250565b6000620002d4600c836200028b565b9150620002e1826200029c565b602082019050919050565b600060208201905081810360008301526200030781620002c5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000379826200021e565b915062000386836200021e565b9250828201905080821115620003a157620003a06200033d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200042957607f821691505b6020821081036200043f576200043e620003e1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620004ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200046a565b620004b886836200046a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620004fb620004f5620004ef846200021e565b620004d0565b6200021e565b9050919050565b6000819050919050565b6200051783620004da565b6200052f620005268262000502565b8484546200047a565b825550505050565b600090565b6200054662000537565b620005538184846200050c565b505050565b5b818110156200057b576200056f6000826200053c565b60018101905062000559565b5050565b601f821115620005ca57620005948162000445565b6200059f846200045a565b81016020851015620005af578190505b620005c7620005be856200045a565b83018262000558565b50505b505050565b60008160020a8304905092915050565b6000620005f260001984600802620005cf565b1980831691505092915050565b60006200060d8383620005df565b9150826002028217905092915050565b6200062882620003d6565b67ffffffffffffffff811115620006445762000643620003a7565b5b62000650825462000410565b6200065d8282856200057f565b600060209050601f83116001811462000695576000841562000680578287015190505b6200068c8582620005ff565b865550620006fc565b601f198416620006a58662000445565b60005b82811015620006cf57848901518255600182019150602085019450602081019050620006a8565b86831015620006ef5784890151620006eb601f891682620005df565b8355505b6001600288020188555050505b505050505050565b6000819050919050565b60006200071b8262000704565b9150620007288362000704565b92508282039050818112600084121682821360008512151617156200075257620007516200033d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620007948262000704565b9150620007a18362000704565b925082620007b457620007b362000758565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615620007f057620007ef6200033d565b5b828205905092915050565b6000620008088262000704565b9150620008158362000704565b92508282019050828112156000831216838212600084121516171562000840576200083f6200033d565b5b92915050565b600062000853826200021e565b915062000860836200021e565b92508262000873576200087262000758565b5b828206905092915050565b6108dc806200088e6000396000f3fe608060405234801561001057600080fd5b5060043610610048576000357c010000000000000000000000000000000000000000000000000000000090048063244282211461004d575b600080fd5b61006760048036038101906100629190610487565b610069565b005b600081116100ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100a390610524565b60405180910390fd5b6100b461042a565b6000806100c08561039f565b9250826000600281106100d6576100d5610544565b5b60200201519150826001600281106100f1576100f0610544565b5b602002015160ff1660019060020a02905060005b8481101561039757600060015411610152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610149906105bf565b60405180910390fd5b60008260008581546101639061060e565b811061017257610171610544565b5b8154600116156101915790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16111561021f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102169061068b565b60405180910390fd5b81600084815461022e9061060e565b811061023d5761023c610544565b5b81546001161561025c5790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004177f01000000000000000000000000000000000000000000000000000000000000000260008481546102d69061060e565b81106102e5576102e4610544565b5b8154600116156103045790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f01000000000000000000000000000000000000000000000000000000000000008404021790555060808260ff160361035e578280610352906106da565b9350506001915061036c565b60018260ff169060020a0291505b6001600081548092919061037f90610722565b9190505550808061038f906106da565b915050610105565b505050505050565b6103a761042a565b60006103b161042a565b600160086001866103c29190610755565b6103cc91906107c7565b6103d69190610831565b915081816000600281106103ed576103ec610544565b5b6020020181815250506008846104039190610875565b8160016002811061041757610416610544565b5b6020020181815250508092505050919050565b6040518060400160405280600290602082028036833780820191505090505090565b600080fd5b6000819050919050565b61046481610451565b811461046f57600080fd5b50565b6000813590506104818161045b565b92915050565b6000806040838503121561049e5761049d61044c565b5b60006104ac85828601610472565b92505060206104bd85828601610472565b9150509250929050565b600082825260208201905092915050565b7f4552525f5a45524f434f554e5400000000000000000000000000000000000000600082015250565b600061050e600d836104c7565b9150610519826104d8565b602082019050919050565b6000602082019050818103600083015261053d81610501565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552525f43415041434954590000000000000000000000000000000000000000600082015250565b60006105a9600c836104c7565b91506105b482610573565b602082019050919050565b600060208201905081810360008301526105d88161059c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061062657607f821691505b602082108103610639576106386105df565b5b50919050565b7f4552525f434f4c4c4953494f4e00000000000000000000000000000000000000600082015250565b6000610675600d836104c7565b91506106808261063f565b602082019050919050565b600060208201905081810360008301526106a481610668565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006106e582610451565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610717576107166106ab565b5b600182019050919050565b600061072d82610451565b9150600082036107405761073f6106ab565b5b600182039050919050565b6000819050919050565b60006107608261074b565b915061076b8361074b565b9250828203905081811260008412168282136000851215161715610792576107916106ab565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006107d28261074b565b91506107dd8361074b565b9250826107ed576107ec610798565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615610826576108256106ab565b5b828205905092915050565b600061083c8261074b565b91506108478361074b565b92508282019050828112156000831216838212600084121516171561086f5761086e6106ab565b5b92915050565b600061088082610451565b915061088b83610451565b92508261089b5761089a610798565b5b82820690509291505056fea2646970667358221220359410e459b8be04e8579c7c62d12662b09c2f67446fdeecf9a6944ff0ea473764736f6c63430008130033 +\ 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":"uint256","name":"_resolution","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","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":"0xbaa486209a1cd02dd0930156a575dfc6cb2f7fec90b59b5890eaa72aa4a02b32","license":"AGPL-3.0-or-later","urls":["bzz-raw://bc0d5001d4c0b53479cc7e0d8d42e2ed0ebf4ca9bf5007042dd28a7d2be957bb","dweb:/ipfs/QmWEpzsFZtUYxS4y4oXwQjQEk8j511CtFh15WgvamYWBvT"]}},"version":1} +{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"_resolution","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","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":"0xeb37d64a92c5cfc7acaab0b36a4781ebed832704d407668ba44e1c7331c0a74e","license":"AGPL-3.0-or-later","urls":["bzz-raw://fc29464854aed51c75df587492be66e1bc8e59169ff8af6dc3c4c4f68863fe1b","dweb:/ipfs/QmagaVgTZPZWD9KvKUwQCoFbfSQeqhxM52ApvRCVKxDfDu"]}},"version":1} diff --git a/python/evm_booking/unittest/base.py b/python/evm_booking/unittest/base.py @@ -18,7 +18,7 @@ from evm_booking import Booking logg = logging.getLogger(__name__) -class TestBooking(TestGiftableToken): +class TestBooking(EthTesterCase): #TestGiftableToken): expire = 0 @@ -28,16 +28,14 @@ class TestBooking(TestGiftableToken): self.alice = self.accounts[1] self.bob = self.accounts[2] - self.token_address = self.address - - def publish(self, mint=False, decimals=0): - nonce_oracle = RPCNonceOracle(self.accounts[0], conn=self.conn) + def publish(self, resolution=366*24): + nonce_oracle = RPCNonceOracle(self.accounts[0], conn=self.rpc) c = Booking(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) - (tx_hash, o) = c.constructor(self.accounts[0], 366 * 24) + (tx_hash, o) = c.constructor(self.accounts[0], resolution) self.rpc.do(o) o = receipt(tx_hash) r = self.rpc.do(o) self.assertEqual(r['status'], 1) - self.vend_address = to_checksum_address(r['contract_address']) - logg.debug('published booker on address {} with hash {}'.format(self.vend_address, tx_hash)) + self.address = to_checksum_address(r['contract_address']) + logg.debug('published booker on address {} with hash {}'.format(self.address, tx_hash)) diff --git a/python/tests/test_base.py b/python/tests/test_base.py @@ -18,8 +18,42 @@ logg = logging.getLogger() class TestBookingBase(TestBooking): + def setUp(self): + super(TestBookingBase, self).setUp() + self.publish() + def test_base(self): - pass + nonce_oracle = RPCNonceOracle(self.accounts[0], conn=self.rpc) + c = Booking(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) + (tx_hash_hex, o) = c.reserve(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.reserve(self.address, self.accounts[0], 42, 1) + self.rpc.do(o) + o = receipt(tx_hash_hex) + r = self.rpc.do(o) + self.assertEqual(r['status'], 0) + + (tx_hash_hex, o) = c.reserve(self.address, self.accounts[0], 42+13-1, 1) + self.rpc.do(o) + o = receipt(tx_hash_hex) + r = self.rpc.do(o) + self.assertEqual(r['status'], 0) + + (tx_hash_hex, o) = c.reserve(self.address, self.accounts[0], 41, 1) + self.rpc.do(o) + o = receipt(tx_hash_hex) + r = self.rpc.do(o) + self.assertEqual(r['status'], 1) + + (tx_hash_hex, o) = c.reserve(self.address, self.accounts[0], 42+13, 1) + self.rpc.do(o) + o = receipt(tx_hash_hex) + r = self.rpc.do(o) + self.assertEqual(r['status'], 1) if __name__ == '__main__': diff --git a/solidity/Booking.sol b/solidity/Booking.sol @@ -21,38 +21,38 @@ contract ERC20Book { // improve by comparing word by word function reserve(uint256 _offset, uint256 _count) public { + require(_count > 0, "ERR_ZEROCOUNT"); uint256[2] memory c; uint256 cy; uint8 ci; c = getPos(_offset); cy = c[0]; - ci = uint8(c[1]); - + ci = uint8(1 << (uint8(c[1]))); for (uint256 i = 0; i < _count; i++) { require(cap > 0, "ERR_CAPACITY"); - if (uint8(slots[cy]) & ci > 0) { + if (uint8(slots[cy]) & ci > 0) { revert("ERR_COLLISION"); } slots[cy] = bytes1(uint8(slots[cy]) | ci); - if (ci == 7) { + if (ci == 128) { cy++; - ci = 0; + ci = 1; } else { - ci++; + ci <<= 1; } cap--; } } - function getPos(uint256 bit) internal returns (uint256[2] memory) { + function getPos(uint256 bit) internal pure returns (uint256[2] memory) { int256 c; uint256[2] memory r; c = (int256(bit) - 1) / 8 + 1 ; r[0] = uint256(c); - r[1] = r[0] % 8; + r[1] = bit % 8; return r; } }