evm-tokenvote

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

commit b0bb819b2100c5444e49b81f510a2d48064e932e
parent bb565a7ec05ca77b6f45a82fa27679b00fc2b52a
Author: lash <dev@holbrook.no>
Date:   Sat,  6 May 2023 22:16:11 +0100

Fix and test withdrawals

Diffstat:
Mpython/evm_tokenvote/data/Voter.bin | 4++--
Mpython/evm_tokenvote/data/Voter.json | 2+-
Mpython/evm_tokenvote/data/Voter.metadata.json | 2+-
Mpython/evm_tokenvote/voter.py | 22++++++++++++++++------
Mpython/tests/test_base.py | 13++++++++++---
Msolidity/Voter.sol | 32+++++++++++++++++++++-----------
6 files changed, 51 insertions(+), 24 deletions(-)

diff --git a/python/evm_tokenvote/data/Voter.bin b/python/evm_tokenvote/data/Voter.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b5060405162002c8938038062002c8983398181016040528101906200003791906200012a565b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000171565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f282620000c5565b9050919050565b6200010481620000e5565b81146200011057600080fd5b50565b6000815190506200012481620000f9565b92915050565b60008060408385031215620001445762000143620000c0565b5b6000620001548582860162000113565b9250506020620001678582860162000113565b9150509250929050565b612b0880620001816000396000f3fe608060405234801561001057600080fd5b5060043610610107576000357c01000000000000000000000000000000000000000000000000000000009004806384385191116100a9578063ba32941411610083578063ba329414146102cf578063ce746024146102ff578063e99a943e1461031d578063fc0c546a1461034d57610107565b8063843851911461023f5780638bb522131461026f578063b05c65ba1461029f57610107565b80632b49d425116100e55780632b49d425146101a35780634bb278f3146101c1578063509bd337146101df57806370a082311461020f57610107565b80630121b93f1461010c578063013cf08b1461013c5780631ce3092714610173575b600080fd5b61012660048036038101906101219190611b9b565b61036b565b6040516101339190611be3565b60405180910390f35b61015660048036038101906101519190611b9b565b61037f565b60405161016a989796959493929190611ca1565b60405180910390f35b61018d60048036038101906101889190611d1f565b610420565b60405161019a9190611d5f565b60405180910390f35b6101ab610471565b6040516101b89190611d7a565b60405180910390f35b6101c9610477565b6040516101d69190611be3565b60405180910390f35b6101f960048036038101906101f49190611d1f565b610644565b6040516102069190611be3565b60405180910390f35b61022960048036038101906102249190611dc1565b610b20565b6040516102369190611d7a565b60405180910390f35b61025960048036038101906102549190611b9b565b610b38565b6040516102669190611d7a565b60405180910390f35b61028960048036038101906102849190611e1a565b610b6f565b6040516102969190611be3565b60405180910390f35b6102b960048036038101906102b4919061200b565b610e19565b6040516102c69190611d7a565b60405180910390f35b6102e960048036038101906102e49190611d1f565b611107565b6040516102f69190611d7a565b60405180910390f35b6103076111b8565b6040516103149190611d7a565b60405180910390f35b6103376004803603810190610332919061208e565b611541565b6040516103449190611d7a565b60405180910390f35b61035561155b565b60405161036291906120e1565b60405180910390f35b6000610378600083610644565b9050919050565b6001818154811061038f57600080fd5b90600052602060002090600702016000915090508060000154908060030154908060040154908060050154908060060160009054906101000a900462ffffff16908060060160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060060160179054906101000a900460ff16908060060160189054906101000a900460ff16905088565b60008060018481548110610437576104366120fc565b5b9060005260206000209060070201905080600101838154811061045d5761045c6120fc565b5b906000526020600020015491505092915050565b60035481565b6000806000600160035481548110610492576104916120fc565b5b90600052602060002090600702019150600060028360060160179054906101000a900460ff161660ff16146104fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f390612188565b60405180910390fd5b600060048360060160179054906101000a900460ff161660ff1611610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054d906121f4565b60405180910390fd5b60006105618361157f565b0361057157600092505050610641565b60028260060160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055506001600360008282546105b49190612243565b92505081905550620f424082600401546105ce9190612277565b90508160060160009054906101000a900462ffffff1662ffffff168260030154826105f991906122e8565b101561063a5760088260060160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600092505050610641565b6001925050505b90565b60008060006060610654336117ea565b60016003548154811061066a576106696120fc565b5b90600052602060002090600702019250600060018460060160179054906101000a900460ff161660ff16116106d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cb90612365565b60405180910390fd5b60006106df8461157f565b036106f05760009350505050610b1a565b43836005015411610736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072d906123d1565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561080257600354600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f89061243d565b60405180910390fd5b5b60008360010180549050111561085c578260010180549050861061085b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610852906124a9565b60405180910390fd5b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163330876040516024016108a893929190612528565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161093291906125d0565b6000604051808303816000865af19150503d806000811461096f576040519150601f19603f3d011682016040523d82523d6000602084013e610974565b606091505b508092508193505050816109bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b490612633565b60405180910390fd5b808060200190518101906109d1919061267f565b915081610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a906126f8565b60405180910390fd5b600354600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610aa89190612243565b9250508190555084836004016000828254610ac39190612243565b92505081905550600083600101805490501115610b125784836002018781548110610af157610af06120fc565b5b906000526020600020016000828254610b0a9190612243565b925050819055505b600193505050505b92915050565b60046020528060005260406000206000915090505481565b60008060018381548110610b4f57610b4e6120fc565b5b906000526020600020906007020190508060010180549050915050919050565b60008060008060008060008060018a81548110610b8f57610b8e6120fc565b5b906000526020600020906007020196504387600501541115610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90612764565b60405180910390fd5b600060048860060160179054906101000a900460ff161660ff161115610c16576000975050505050505050610e13565b6000876001018054905003610c655760048760060160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055506001975050505050505050610e13565b8660060160189054906101000a900460ff16915086600101805490508983610c8d9190612784565b60ff161115610cac57818760010180549050610ca991906127b9565b98505b8189610cb89190612784565b98508660060160179054906101000a900460ff1690508195505b8860ff168660ff161015610d6157866002018660ff1681548110610cf957610cf86120fc565b5b90600052602060002001549250600083118015610d1557508383145b15610d2557601081179050610d3f565b83831115610d3e578293508560ff169450601019811690505b5b600182610d4c9190612784565b91508580610d59906127ee565b965050610cd2565b818760060160186101000a81548160ff021916908360ff160217905550808760060160176101000a81548160ff021916908360ff16021790555086600101805490508760060160189054906101000a900460ff1660ff1610610dee5760048760060160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b600060048860060160179054906101000a900460ff161660ff16119750505050505050505b92915050565b6000610e23611a06565b600080610100875110610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6290612863565b60405180910390fd5b338360e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505087836000018181525050868360200181905250865167ffffffffffffffff811115610ed157610ed0611e9c565b5b604051908082528060200260200182016040528015610eff5781602001602082028036833780820191505090505b508360400181905250848360c0019062ffffff16908162ffffff16815250508543610f2a9190612243565b9050808360a00181815250506001805490509150600183610100019060ff16908160ff16815250506001839080600181540180825580915050600190039060005260206000209060070201600090919091909150600082015181600001556020820151816001019080519060200190610fa4929190611a7d565b506040820151816002019080519060200190610fc1929190611aca565b50606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548162ffffff021916908362ffffff16021790555060e08201518160060160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160060160176101000a81548160ff021916908360ff1602179055506101208201518160060160186101000a81548160ff021916908360ff16021790555050506110bc600183815481106110a9576110a86120fc565b5b906000526020600020906007020161157f565b836060018181525050818562ffffff16827f5a41400aa51d78e9e5ca645b0d045817eaa7d90e4344d773fdbe24ffb183d3ce60405160405180910390a4819350505050949350505050565b6000806001848154811061111e5761111d6120fc565b5b90600052602060002090600702019050600081600101805490500361118d5760008314611180576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611177906128cf565b60405180910390fd5b80600401549150506111b2565b8060020183815481106111a3576111a26120fc565b5b90600052602060002001549150505b92915050565b6000806000606060006001600354815481106111d7576111d66120fc565b5b90600052602060002090600702019350600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600354600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036112f857438460050154116112db57600060028560060160179054906101000a900460ff161660ff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90612764565b60405180910390fd5b6112f7565b808460040160008282546112ef91906128ef565b925050819055505b5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1633826040516024016113cc929190612923565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161145691906125d0565b6000604051808303816000865af19150503d8060008114611493576040519150601f19603f3d011682016040523d82523d6000602084013e611498565b606091505b508093508194505050826114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890612633565b60405180910390fd5b818060200190518101906114f5919061267f565b925082611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e906126f8565b60405180910390fd5b8094505050505090565b6000606061155185828686610e19565b9150509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161164e91906125d0565b6000604051808303816000865af19150503d806000811461168b576040519150601f19603f3d011682016040523d82523d6000602084013e611690565b606091505b508093508194505050826116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090612633565b60405180910390fd5b818060200190518101906116ed9190612961565b905060008111611732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611729906129da565b60405180910390fd5b600085600301540361174c578085600301819055506117de565b846003015481146117dd5760208560060160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060028560060160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055506001600360008282546117ca9190612243565b92505081905550600093505050506117e5565b5b8093505050505b919050565b60006060600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361184b575050611a03565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405160240161189591906120e1565b6040516020818303038152906040527f3ef25013000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161191f91906125d0565b6000604051808303816000865af19150503d806000811461195c576040519150601f19603f3d011682016040523d82523d6000602084013e611961565b606091505b508092508193505050816119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190612a46565b60405180910390fd5b808060200190518101906119be919061267f565b915081611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790612ab2565b60405180910390fd5b50505b50565b604051806101400160405280600080191681526020016060815260200160608152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b828054828255906000526020600020908101928215611ab9579160200282015b82811115611ab8578251825591602001919060010190611a9d565b5b509050611ac69190611b17565b5090565b828054828255906000526020600020908101928215611b06579160200282015b82811115611b05578251825591602001919060010190611aea565b5b509050611b139190611b34565b5090565b5b80821115611b30576000816000905550600101611b18565b5090565b5b80821115611b4d576000816000905550600101611b35565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b611b7881611b65565b8114611b8357600080fd5b50565b600081359050611b9581611b6f565b92915050565b600060208284031215611bb157611bb0611b5b565b5b6000611bbf84828501611b86565b91505092915050565b60008115159050919050565b611bdd81611bc8565b82525050565b6000602082019050611bf86000830184611bd4565b92915050565b6000819050919050565b611c1181611bfe565b82525050565b611c2081611b65565b82525050565b600062ffffff82169050919050565b611c3e81611c26565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c6f82611c44565b9050919050565b611c7f81611c64565b82525050565b600060ff82169050919050565b611c9b81611c85565b82525050565b600061010082019050611cb7600083018b611c08565b611cc4602083018a611c17565b611cd16040830189611c17565b611cde6060830188611c17565b611ceb6080830187611c35565b611cf860a0830186611c76565b611d0560c0830185611c92565b611d1260e0830184611c92565b9998505050505050505050565b60008060408385031215611d3657611d35611b5b565b5b6000611d4485828601611b86565b9250506020611d5585828601611b86565b9150509250929050565b6000602082019050611d746000830184611c08565b92915050565b6000602082019050611d8f6000830184611c17565b92915050565b611d9e81611c64565b8114611da957600080fd5b50565b600081359050611dbb81611d95565b92915050565b600060208284031215611dd757611dd6611b5b565b5b6000611de584828501611dac565b91505092915050565b611df781611c85565b8114611e0257600080fd5b50565b600081359050611e1481611dee565b92915050565b60008060408385031215611e3157611e30611b5b565b5b6000611e3f85828601611b86565b9250506020611e5085828601611e05565b9150509250929050565b611e6381611bfe565b8114611e6e57600080fd5b50565b600081359050611e8081611e5a565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ed482611e8b565b810181811067ffffffffffffffff82111715611ef357611ef2611e9c565b5b80604052505050565b6000611f06611b51565b9050611f128282611ecb565b919050565b600067ffffffffffffffff821115611f3257611f31611e9c565b5b602082029050602081019050919050565b600080fd5b6000611f5b611f5684611f17565b611efc565b90508083825260208201905060208402830185811115611f7e57611f7d611f43565b5b835b81811015611fa75780611f938882611e71565b845260208401935050602081019050611f80565b5050509392505050565b600082601f830112611fc657611fc5611e86565b5b8135611fd6848260208601611f48565b91505092915050565b611fe881611c26565b8114611ff357600080fd5b50565b60008135905061200581611fdf565b92915050565b6000806000806080858703121561202557612024611b5b565b5b600061203387828801611e71565b945050602085013567ffffffffffffffff81111561205457612053611b60565b5b61206087828801611fb1565b935050604061207187828801611b86565b925050606061208287828801611ff6565b91505092959194509250565b6000806000606084860312156120a7576120a6611b5b565b5b60006120b586828701611e71565b93505060206120c686828701611b86565b92505060406120d786828701611ff6565b9150509250925092565b60006020820190506120f66000830184611c76565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4552525f414c52454144595f53544154455f46494e414c000000000000000000600082015250565b600061217260178361212b565b915061217d8261213c565b602082019050919050565b600060208201905081810360008301526121a181612165565b9050919050565b7f4552525f5343414e5f4649525354000000000000000000000000000000000000600082015250565b60006121de600e8361212b565b91506121e9826121a8565b602082019050919050565b6000602082019050818103600083015261220d816121d1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061224e82611b65565b915061225983611b65565b925082820190508082111561227157612270612214565b5b92915050565b600061228282611b65565b915061228d83611b65565b925082820261229b81611b65565b915082820484148315176122b2576122b1612214565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122f382611b65565b91506122fe83611b65565b92508261230e5761230d6122b9565b5b828204905092915050565b7f4552525f50524f504f53414c5f494e4143544956450000000000000000000000600082015250565b600061234f60158361212b565b915061235a82612319565b602082019050919050565b6000602082019050818103600083015261237e81612342565b9050919050565b7f4552525f444541444c494e450000000000000000000000000000000000000000600082015250565b60006123bb600c8361212b565b91506123c682612385565b602082019050919050565b600060208201905081810360008301526123ea816123ae565b9050919050565b7f4552525f5245434f5645525f4649525354000000000000000000000000000000600082015250565b600061242760118361212b565b9150612432826123f1565b602082019050919050565b600060208201905081810360008301526124568161241a565b9050919050565b7f4552525f4f5054494f4e5f494e56414c49440000000000000000000000000000600082015250565b600061249360128361212b565b915061249e8261245d565b602082019050919050565b600060208201905081810360008301526124c281612486565b9050919050565b6000819050919050565b60006124ee6124e96124e484611c44565b6124c9565b611c44565b9050919050565b6000612500826124d3565b9050919050565b6000612512826124f5565b9050919050565b61252281612507565b82525050565b600060608201905061253d6000830186611c76565b61254a6020830185612519565b6125576040830184611c17565b949350505050565b600081519050919050565b600081905092915050565b60005b83811015612593578082015181840152602081019050612578565b60008484015250505050565b60006125aa8261255f565b6125b4818561256a565b93506125c4818560208601612575565b80840191505092915050565b60006125dc828461259f565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b600061261d60098361212b565b9150612628826125e7565b602082019050919050565b6000602082019050818103600083015261264c81612610565b9050919050565b61265c81611bc8565b811461266757600080fd5b50565b60008151905061267981612653565b92915050565b60006020828403121561269557612694611b5b565b5b60006126a38482850161266a565b91505092915050565b7f4552525f5452414e534645520000000000000000000000000000000000000000600082015250565b60006126e2600c8361212b565b91506126ed826126ac565b602082019050919050565b60006020820190508181036000830152612711816126d5565b9050919050565b7f4552525f5052454d415455524500000000000000000000000000000000000000600082015250565b600061274e600d8361212b565b915061275982612718565b602082019050919050565b6000602082019050818103600083015261277d81612741565b9050919050565b600061278f82611c85565b915061279a83611c85565b9250828201905060ff8111156127b3576127b2612214565b5b92915050565b60006127c482611c85565b91506127cf83611c85565b9250828203905060ff8111156127e8576127e7612214565b5b92915050565b60006127f982611c85565b915060ff820361280c5761280b612214565b5b600182019050919050565b7f4552525f544f4f5f4d414e595f4f5054494f4e53000000000000000000000000600082015250565b600061284d60148361212b565b915061285882612817565b602082019050919050565b6000602082019050818103600083015261287c81612840565b9050919050565b7f4552525f4e4f5f4f5054494f4e53000000000000000000000000000000000000600082015250565b60006128b9600e8361212b565b91506128c482612883565b602082019050919050565b600060208201905081810360008301526128e8816128ac565b9050919050565b60006128fa82611b65565b915061290583611b65565b925082820390508181111561291d5761291c612214565b5b92915050565b60006040820190506129386000830185611c76565b6129456020830184611c17565b9392505050565b60008151905061295b81611b6f565b92915050565b60006020828403121561297757612976611b5b565b5b60006129858482850161294c565b91505092915050565b7f4552525f5a45524f5f535550504c590000000000000000000000000000000000600082015250565b60006129c4600f8361212b565b91506129cf8261298e565b602082019050919050565b600060208201905081810360008301526129f3816129b7565b9050919050565b7f4552525f52454749535452590000000000000000000000000000000000000000600082015250565b6000612a30600c8361212b565b9150612a3b826129fa565b602082019050919050565b60006020820190508181036000830152612a5f81612a23565b9050919050565b7f4552525f554e415554485f4143434f554e540000000000000000000000000000600082015250565b6000612a9c60128361212b565b9150612aa782612a66565b602082019050919050565b60006020820190508181036000830152612acb81612a8f565b905091905056fea26469706673582212203e1bc16f45e04992541388f0e29983fc59f20f2962287a771d4094787411710264736f6c63430008130033 -\ No newline at end of file +60806040523480156200001157600080fd5b5060405162003462380380620034628339818101604052810190620000379190620003da565b6200004162000217565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001819080600181540180825580915050600190039060005260206000209060070201600090919091909150600082015181600001556020820151816001019080519060200190620001169291906200028e565b50604082015181600201908051906020019062000135929190620002e0565b50606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548162ffffff021916908362ffffff16021790555060e08201518160060160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160060160176101000a81548160ff021916908360ff1602179055506101208201518160060160186101000a81548160ff021916908360ff1602179055505050600160038190555050505062000421565b604051806101400160405280600080191681526020016060815260200160608152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b828054828255906000526020600020908101928215620002cd579160200282015b82811115620002cc578251825591602001919060010190620002af565b5b509050620002dc919062000332565b5090565b8280548282559060005260206000209081019282156200031f579160200282015b828111156200031e57825182559160200191906001019062000301565b5b5090506200032e919062000351565b5090565b5b808211156200034d57600081600090555060010162000333565b5090565b5b808211156200036c57600081600090555060010162000352565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003a28262000375565b9050919050565b620003b48162000395565b8114620003c057600080fd5b50565b600081519050620003d481620003a9565b92915050565b60008060408385031215620003f457620003f362000370565b5b60006200040485828601620003c3565b92505060206200041785828601620003c3565b9150509250929050565b61303180620004316000396000f3fe608060405234801561001057600080fd5b5060043610610107576000357c01000000000000000000000000000000000000000000000000000000009004806384385191116100a9578063ba32941411610083578063ba329414146102b6578063c7f758a8146102e6578063e99a943e14610316578063fc0c546a1461034657610107565b806384385191146102265780638bb5221314610256578063b05c65ba1461028657610107565b806341ec6870116100e557806341ec68701461018a5780634bb278f3146101a8578063509bd337146101c657806370a08231146101f657610107565b80630121b93f1461010c5780631ce309271461013c5780633ccfd60b1461016c575b600080fd5b61012660048036038101906101219190611eb4565b610364565b6040516101339190611efc565b60405180910390f35b61015660048036038101906101519190611f17565b610378565b6040516101639190611f70565b60405180910390f35b6101746103d4565b6040516101819190611f9a565b60405180910390f35b61019261075d565b60405161019f919061228d565b60405180910390f35b6101b0610925565b6040516101bd9190611efc565b60405180910390f35b6101e060048036038101906101db9190611f17565b610af2565b6040516101ed9190611efc565b60405180910390f35b610210600480360381019061020b91906122db565b610fce565b60405161021d9190611f9a565b60405180910390f35b610240600480360381019061023b9190611eb4565b610fe6565b60405161024d9190611f9a565b60405180910390f35b610270600480360381019061026b9190612334565b611028565b60405161027d9190611efc565b60405180910390f35b6102a0600480360381019061029b9190612525565b6112dd565b6040516102ad9190611f9a565b60405180910390f35b6102d060048036038101906102cb9190611f17565b6115cb565b6040516102dd9190611f9a565b60405180910390f35b61030060048036038101906102fb9190611eb4565b611687565b60405161030d919061228d565b60405180910390f35b610330600480360381019061032b91906125a8565b61185a565b60405161033d9190611f9a565b60405180910390f35b61034e611874565b60405161035b919061260a565b60405180910390f35b6000610371600083610af2565b9050919050565b600080600180856103899190612654565b8154811061039a57610399612688565b5b906000526020600020906007020190508060010183815481106103c0576103bf612688565b5b906000526020600020015491505092915050565b600080600060606000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600354600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036105145760016003548154811061047d5761047c612688565b5b90600052602060002090600702019350438460050154116104f757600060028560060160179054906101000a900460ff161660ff16116104f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e990612714565b60405180910390fd5b610513565b8084600401600082825461050b9190612734565b925050819055505b5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1633826040516024016105e8929190612768565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516106729190612802565b6000604051808303816000865af19150503d80600081146106af576040519150601f19603f3d011682016040523d82523d6000602084013e6106b4565b606091505b508093508194505050826106fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f490612865565b60405180910390fd5b8180602001905181019061071191906128b1565b925082610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a9061292a565b60405180910390fd5b8094505050505090565b610765611d1f565b60016003548154811061077b5761077a612688565b5b90600052602060002090600702016040518061014001604052908160008201548152602001600182018054806020026020016040519081016040528092919081815260200182805480156107ee57602002820191906000526020600020905b8154815260200190600101908083116107da575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561084657602002820191906000526020600020905b815481526020019060010190808311610832575b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016006820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160179054906101000a900460ff1660ff1660ff1681526020016006820160189054906101000a900460ff1660ff1660ff1681525050905090565b60008060006001600354815481106109405761093f612688565b5b90600052602060002090600702019150600060028360060160179054906101000a900460ff161660ff16146109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a190612996565b60405180910390fd5b600060048360060160179054906101000a900460ff161660ff1611610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb90612a02565b60405180910390fd5b6000610a0f83611898565b03610a1f57600092505050610aef565b60028260060160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600160036000828254610a629190612654565b92505081905550620f42408260040154610a7c9190612a22565b90508160060160009054906101000a900462ffffff1662ffffff16826003015482610aa79190612a93565b1015610ae85760088260060160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600092505050610aef565b6001925050505b90565b60008060006060610b0233611b03565b600160035481548110610b1857610b17612688565b5b90600052602060002090600702019250600060018460060160179054906101000a900460ff161660ff1611610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990612b10565b60405180910390fd5b6000610b8d84611898565b03610b9e5760009350505050610fc8565b43836005015411610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90612b7c565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610cb057600354600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690612be8565b60405180910390fd5b5b600083600101805490501115610d0a5782600101805490508610610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090612c54565b60405180910390fd5b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16333087604051602401610d5693929190612cd3565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610de09190612802565b6000604051808303816000865af19150503d8060008114610e1d576040519150601f19603f3d011682016040523d82523d6000602084013e610e22565b606091505b50809250819350505081610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6290612865565b60405180910390fd5b80806020019051810190610e7f91906128b1565b915081610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb89061292a565b60405180910390fd5b600354600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f569190612654565b9250508190555084836004016000828254610f719190612654565b92505081905550600083600101805490501115610fc05784836002018781548110610f9f57610f9e612688565b5b906000526020600020016000828254610fb89190612654565b925050819055505b600193505050505b92915050565b60046020528060005260406000206000915090505481565b60008060018084610ff79190612654565b8154811061100857611007612688565b5b906000526020600020906007020190508060010180549050915050919050565b6000806000806000806000806001808b6110429190612654565b8154811061105357611052612688565b5b9060005260206000209060070201965043876005015411156110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a190612714565b60405180910390fd5b600060048860060160179054906101000a900460ff161660ff1611156110da5760009750505050505050506112d7565b60008760010180549050036111295760048760060160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060019750505050505050506112d7565b8660060160189054906101000a900460ff169150866001018054905089836111519190612d0a565b60ff1611156111705781876001018054905061116d9190612d3f565b98505b818961117c9190612d0a565b98508660060160179054906101000a900460ff1690508195505b8860ff168660ff16101561122557866002018660ff16815481106111bd576111bc612688565b5b906000526020600020015492506000831180156111d957508383145b156111e957601081179050611203565b83831115611202578293508560ff169450601019811690505b5b6001826112109190612d0a565b9150858061121d90612d74565b965050611196565b818760060160186101000a81548160ff021916908360ff160217905550808760060160176101000a81548160ff021916908360ff16021790555086600101805490508760060160189054906101000a900460ff1660ff16106112b25760048760060160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b600060048860060160179054906101000a900460ff161660ff16119750505050505050505b92915050565b60006112e7611d1f565b60008061010087511061132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690612de9565b60405180910390fd5b338360e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505087836000018181525050868360200181905250865167ffffffffffffffff811115611395576113946123b6565b5b6040519080825280602002602001820160405280156113c35781602001602082028036833780820191505090505b508360400181905250848360c0019062ffffff16908162ffffff168152505085436113ee9190612654565b9050808360a00181815250506001805490509150600183610100019060ff16908160ff16815250506001839080600181540180825580915050600190039060005260206000209060070201600090919091909150600082015181600001556020820151816001019080519060200190611468929190611d96565b506040820151816002019080519060200190611485929190611de3565b50606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548162ffffff021916908362ffffff16021790555060e08201518160060160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160060160176101000a81548160ff021916908360ff1602179055506101208201518160060160186101000a81548160ff021916908360ff16021790555050506115806001838154811061156d5761156c612688565b5b9060005260206000209060070201611898565b836060018181525050818562ffffff16827f5a41400aa51d78e9e5ca645b0d045817eaa7d90e4344d773fdbe24ffb183d3ce60405160405180910390a4819350505050949350505050565b600080600180856115dc9190612654565b815481106115ed576115ec612688565b5b90600052602060002090600702019050600081600101805490500361165c576000831461164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164690612e55565b60405180910390fd5b8060040154915050611681565b80600201838154811061167257611671612688565b5b90600052602060002001549150505b92915050565b61168f611d1f565b6001808361169d9190612654565b815481106116ae576116ad612688565b5b906000526020600020906007020160405180610140016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561172157602002820191906000526020600020905b81548152602001906001019080831161170d575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561177957602002820191906000526020600020905b815481526020019060010190808311611765575b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016006820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160179054906101000a900460ff1660ff1660ff1681526020016006820160189054906101000a900460ff1660ff1660ff16815250509050919050565b6000606061186a858286866112dd565b9150509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516119679190612802565b6000604051808303816000865af19150503d80600081146119a4576040519150601f19603f3d011682016040523d82523d6000602084013e6119a9565b606091505b508093508194505050826119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990612865565b60405180910390fd5b81806020019051810190611a069190612e8a565b905060008111611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290612f03565b60405180910390fd5b6000856003015403611a6557808560030181905550611af7565b84600301548114611af65760208560060160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060028560060160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600160036000828254611ae39190612654565b9250508190555060009350505050611afe565b5b8093505050505b919050565b60006060600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611b64575050611d1c565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051602401611bae919061260a565b6040516020818303038152906040527f3ef25013000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611c389190612802565b6000604051808303816000865af19150503d8060008114611c75576040519150601f19603f3d011682016040523d82523d6000602084013e611c7a565b606091505b50809250819350505081611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba90612f6f565b60405180910390fd5b80806020019051810190611cd791906128b1565b915081611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1090612fdb565b60405180910390fd5b50505b50565b604051806101400160405280600080191681526020016060815260200160608152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b828054828255906000526020600020908101928215611dd2579160200282015b82811115611dd1578251825591602001919060010190611db6565b5b509050611ddf9190611e30565b5090565b828054828255906000526020600020908101928215611e1f579160200282015b82811115611e1e578251825591602001919060010190611e03565b5b509050611e2c9190611e4d565b5090565b5b80821115611e49576000816000905550600101611e31565b5090565b5b80821115611e66576000816000905550600101611e4e565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b611e9181611e7e565b8114611e9c57600080fd5b50565b600081359050611eae81611e88565b92915050565b600060208284031215611eca57611ec9611e74565b5b6000611ed884828501611e9f565b91505092915050565b60008115159050919050565b611ef681611ee1565b82525050565b6000602082019050611f116000830184611eed565b92915050565b60008060408385031215611f2e57611f2d611e74565b5b6000611f3c85828601611e9f565b9250506020611f4d85828601611e9f565b9150509250929050565b6000819050919050565b611f6a81611f57565b82525050565b6000602082019050611f856000830184611f61565b92915050565b611f9481611e7e565b82525050565b6000602082019050611faf6000830184611f8b565b92915050565b611fbe81611f57565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611ffc8383611fb5565b60208301905092915050565b6000602082019050919050565b600061202082611fc4565b61202a8185611fcf565b935061203583611fe0565b8060005b8381101561206657815161204d8882611ff0565b975061205883612008565b925050600181019050612039565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120a881611e7e565b82525050565b60006120ba838361209f565b60208301905092915050565b6000602082019050919050565b60006120de82612073565b6120e8818561207e565b93506120f38361208f565b8060005b8381101561212457815161210b88826120ae565b9750612116836120c6565b9250506001810190506120f7565b5085935050505092915050565b600062ffffff82169050919050565b61214981612131565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061217a8261214f565b9050919050565b61218a8161216f565b82525050565b600060ff82169050919050565b6121a681612190565b82525050565b6000610140830160008301516121c56000860182611fb5565b50602083015184820360208601526121dd8282612015565b915050604083015184820360408601526121f782826120d3565b915050606083015161220c606086018261209f565b50608083015161221f608086018261209f565b5060a083015161223260a086018261209f565b5060c083015161224560c0860182612140565b5060e083015161225860e0860182612181565b5061010083015161226d61010086018261219d565b5061012083015161228261012086018261219d565b508091505092915050565b600060208201905081810360008301526122a781846121ac565b905092915050565b6122b88161216f565b81146122c357600080fd5b50565b6000813590506122d5816122af565b92915050565b6000602082840312156122f1576122f0611e74565b5b60006122ff848285016122c6565b91505092915050565b61231181612190565b811461231c57600080fd5b50565b60008135905061232e81612308565b92915050565b6000806040838503121561234b5761234a611e74565b5b600061235985828601611e9f565b925050602061236a8582860161231f565b9150509250929050565b61237d81611f57565b811461238857600080fd5b50565b60008135905061239a81612374565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6123ee826123a5565b810181811067ffffffffffffffff8211171561240d5761240c6123b6565b5b80604052505050565b6000612420611e6a565b905061242c82826123e5565b919050565b600067ffffffffffffffff82111561244c5761244b6123b6565b5b602082029050602081019050919050565b600080fd5b600061247561247084612431565b612416565b905080838252602082019050602084028301858111156124985761249761245d565b5b835b818110156124c157806124ad888261238b565b84526020840193505060208101905061249a565b5050509392505050565b600082601f8301126124e0576124df6123a0565b5b81356124f0848260208601612462565b91505092915050565b61250281612131565b811461250d57600080fd5b50565b60008135905061251f816124f9565b92915050565b6000806000806080858703121561253f5761253e611e74565b5b600061254d8782880161238b565b945050602085013567ffffffffffffffff81111561256e5761256d611e79565b5b61257a878288016124cb565b935050604061258b87828801611e9f565b925050606061259c87828801612510565b91505092959194509250565b6000806000606084860312156125c1576125c0611e74565b5b60006125cf8682870161238b565b93505060206125e086828701611e9f565b92505060406125f186828701612510565b9150509250925092565b6126048161216f565b82525050565b600060208201905061261f60008301846125fb565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061265f82611e7e565b915061266a83611e7e565b925082820190508082111561268257612681612625565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4552525f5052454d415455524500000000000000000000000000000000000000600082015250565b60006126fe600d836126b7565b9150612709826126c8565b602082019050919050565b6000602082019050818103600083015261272d816126f1565b9050919050565b600061273f82611e7e565b915061274a83611e7e565b925082820390508181111561276257612761612625565b5b92915050565b600060408201905061277d60008301856125fb565b61278a6020830184611f8b565b9392505050565b600081519050919050565b600081905092915050565b60005b838110156127c55780820151818401526020810190506127aa565b60008484015250505050565b60006127dc82612791565b6127e6818561279c565b93506127f68185602086016127a7565b80840191505092915050565b600061280e82846127d1565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b600061284f6009836126b7565b915061285a82612819565b602082019050919050565b6000602082019050818103600083015261287e81612842565b9050919050565b61288e81611ee1565b811461289957600080fd5b50565b6000815190506128ab81612885565b92915050565b6000602082840312156128c7576128c6611e74565b5b60006128d58482850161289c565b91505092915050565b7f4552525f5452414e534645520000000000000000000000000000000000000000600082015250565b6000612914600c836126b7565b915061291f826128de565b602082019050919050565b6000602082019050818103600083015261294381612907565b9050919050565b7f4552525f414c52454144595f53544154455f46494e414c000000000000000000600082015250565b60006129806017836126b7565b915061298b8261294a565b602082019050919050565b600060208201905081810360008301526129af81612973565b9050919050565b7f4552525f5343414e5f4649525354000000000000000000000000000000000000600082015250565b60006129ec600e836126b7565b91506129f7826129b6565b602082019050919050565b60006020820190508181036000830152612a1b816129df565b9050919050565b6000612a2d82611e7e565b9150612a3883611e7e565b9250828202612a4681611e7e565b91508282048414831517612a5d57612a5c612625565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a9e82611e7e565b9150612aa983611e7e565b925082612ab957612ab8612a64565b5b828204905092915050565b7f4552525f50524f504f53414c5f494e4143544956450000000000000000000000600082015250565b6000612afa6015836126b7565b9150612b0582612ac4565b602082019050919050565b60006020820190508181036000830152612b2981612aed565b9050919050565b7f4552525f444541444c494e450000000000000000000000000000000000000000600082015250565b6000612b66600c836126b7565b9150612b7182612b30565b602082019050919050565b60006020820190508181036000830152612b9581612b59565b9050919050565b7f4552525f57495448445241575f46495253540000000000000000000000000000600082015250565b6000612bd26012836126b7565b9150612bdd82612b9c565b602082019050919050565b60006020820190508181036000830152612c0181612bc5565b9050919050565b7f4552525f4f5054494f4e5f494e56414c49440000000000000000000000000000600082015250565b6000612c3e6012836126b7565b9150612c4982612c08565b602082019050919050565b60006020820190508181036000830152612c6d81612c31565b9050919050565b6000819050919050565b6000612c99612c94612c8f8461214f565b612c74565b61214f565b9050919050565b6000612cab82612c7e565b9050919050565b6000612cbd82612ca0565b9050919050565b612ccd81612cb2565b82525050565b6000606082019050612ce860008301866125fb565b612cf56020830185612cc4565b612d026040830184611f8b565b949350505050565b6000612d1582612190565b9150612d2083612190565b9250828201905060ff811115612d3957612d38612625565b5b92915050565b6000612d4a82612190565b9150612d5583612190565b9250828203905060ff811115612d6e57612d6d612625565b5b92915050565b6000612d7f82612190565b915060ff8203612d9257612d91612625565b5b600182019050919050565b7f4552525f544f4f5f4d414e595f4f5054494f4e53000000000000000000000000600082015250565b6000612dd36014836126b7565b9150612dde82612d9d565b602082019050919050565b60006020820190508181036000830152612e0281612dc6565b9050919050565b7f4552525f4e4f5f4f5054494f4e53000000000000000000000000000000000000600082015250565b6000612e3f600e836126b7565b9150612e4a82612e09565b602082019050919050565b60006020820190508181036000830152612e6e81612e32565b9050919050565b600081519050612e8481611e88565b92915050565b600060208284031215612ea057612e9f611e74565b5b6000612eae84828501612e75565b91505092915050565b7f4552525f5a45524f5f535550504c590000000000000000000000000000000000600082015250565b6000612eed600f836126b7565b9150612ef882612eb7565b602082019050919050565b60006020820190508181036000830152612f1c81612ee0565b9050919050565b7f4552525f52454749535452590000000000000000000000000000000000000000600082015250565b6000612f59600c836126b7565b9150612f6482612f23565b602082019050919050565b60006020820190508181036000830152612f8881612f4c565b9050919050565b7f4552525f554e415554485f4143434f554e540000000000000000000000000000600082015250565b6000612fc56012836126b7565b9150612fd082612f8f565b602082019050919050565b60006020820190508181036000830152612ff481612fb8565b905091905056fea2646970667358221220e0ac8b8530e66cb0154ad0c08cea9c35cbca0f543a8c43077c2421988beaeb9a64736f6c63430008130033 +\ No newline at end of file diff --git a/python/evm_tokenvote/data/Voter.json b/python/evm_tokenvote/data/Voter.json @@ -1 +1 @@ -[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_accountsRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_blockDeadline","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"voteTargetPpm","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_proposalIdx","type":"uint256"}],"name":"ProposalAdded","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentProposal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"internalType":"uint256","name":"_optionIdx","type":"uint256"}],"name":"getOption","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"}],"name":"optionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"bytes32","name":"description","type":"bytes32"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"blockDeadline","type":"uint256"},{"internalType":"uint24","name":"targetVotePpm","type":"uint24"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint8","name":"state","type":"uint8"},{"internalType":"uint8","name":"scanCursor","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_description","type":"bytes32"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_description","type":"bytes32"},{"internalType":"bytes32[]","name":"_options","type":"bytes32[]"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"proposeMulti","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recover","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIndex","type":"uint256"},{"internalType":"uint8","name":"_count","type":"uint8"}],"name":"scan","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"vote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"internalType":"uint256","name":"_optionIdx","type":"uint256"}],"name":"voteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_optionIndex","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"voteOption","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] +[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_accountsRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_blockDeadline","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"voteTargetPpm","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_proposalIdx","type":"uint256"}],"name":"ProposalAdded","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentProposal","outputs":[{"components":[{"internalType":"bytes32","name":"description","type":"bytes32"},{"internalType":"bytes32[]","name":"options","type":"bytes32[]"},{"internalType":"uint256[]","name":"optionVotes","type":"uint256[]"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"blockDeadline","type":"uint256"},{"internalType":"uint24","name":"targetVotePpm","type":"uint24"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint8","name":"state","type":"uint8"},{"internalType":"uint8","name":"scanCursor","type":"uint8"}],"internalType":"struct ERC20Vote.Proposal","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"internalType":"uint256","name":"_optionIdx","type":"uint256"}],"name":"getOption","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"}],"name":"getProposal","outputs":[{"components":[{"internalType":"bytes32","name":"description","type":"bytes32"},{"internalType":"bytes32[]","name":"options","type":"bytes32[]"},{"internalType":"uint256[]","name":"optionVotes","type":"uint256[]"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"blockDeadline","type":"uint256"},{"internalType":"uint24","name":"targetVotePpm","type":"uint24"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint8","name":"state","type":"uint8"},{"internalType":"uint8","name":"scanCursor","type":"uint8"}],"internalType":"struct ERC20Vote.Proposal","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"}],"name":"optionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_description","type":"bytes32"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_description","type":"bytes32"},{"internalType":"bytes32[]","name":"_options","type":"bytes32[]"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"proposeMulti","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIndex","type":"uint256"},{"internalType":"uint8","name":"_count","type":"uint8"}],"name":"scan","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"vote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"internalType":"uint256","name":"_optionIdx","type":"uint256"}],"name":"voteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_optionIndex","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"voteOption","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}] diff --git a/python/evm_tokenvote/data/Voter.metadata.json b/python/evm_tokenvote/data/Voter.metadata.json @@ -1 +1 @@ -{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_accountsRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_blockDeadline","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"voteTargetPpm","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_proposalIdx","type":"uint256"}],"name":"ProposalAdded","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentProposal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"internalType":"uint256","name":"_optionIdx","type":"uint256"}],"name":"getOption","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"}],"name":"optionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"bytes32","name":"description","type":"bytes32"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"blockDeadline","type":"uint256"},{"internalType":"uint24","name":"targetVotePpm","type":"uint24"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint8","name":"state","type":"uint8"},{"internalType":"uint8","name":"scanCursor","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_description","type":"bytes32"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_description","type":"bytes32"},{"internalType":"bytes32[]","name":"_options","type":"bytes32[]"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"proposeMulti","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recover","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIndex","type":"uint256"},{"internalType":"uint8","name":"_count","type":"uint8"}],"name":"scan","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"vote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"internalType":"uint256","name":"_optionIdx","type":"uint256"}],"name":"voteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_optionIndex","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"voteOption","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"Voter.sol":"ERC20Vote"},"evmVersion":"byzantium","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"Voter.sol":{"keccak256":"0xd414694762f43a1bec7c1447e58252c6da02596661c5c748dd582f4b524a20f6","license":"AGPL-3.0-or-later","urls":["bzz-raw://fddab59dd28ec803fa875b3cd01cb42a1985ef37b9daa3573110b683fc695eae","dweb:/ipfs/QmQeTRwAo7XTYq11AmwCkfW3JSvQ3N5uepTPEPW5bARNQ2"]}},"version":1} +{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_accountsRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_blockDeadline","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"voteTargetPpm","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_proposalIdx","type":"uint256"}],"name":"ProposalAdded","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentProposal","outputs":[{"components":[{"internalType":"bytes32","name":"description","type":"bytes32"},{"internalType":"bytes32[]","name":"options","type":"bytes32[]"},{"internalType":"uint256[]","name":"optionVotes","type":"uint256[]"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"blockDeadline","type":"uint256"},{"internalType":"uint24","name":"targetVotePpm","type":"uint24"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint8","name":"state","type":"uint8"},{"internalType":"uint8","name":"scanCursor","type":"uint8"}],"internalType":"struct ERC20Vote.Proposal","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"internalType":"uint256","name":"_optionIdx","type":"uint256"}],"name":"getOption","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"}],"name":"getProposal","outputs":[{"components":[{"internalType":"bytes32","name":"description","type":"bytes32"},{"internalType":"bytes32[]","name":"options","type":"bytes32[]"},{"internalType":"uint256[]","name":"optionVotes","type":"uint256[]"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"blockDeadline","type":"uint256"},{"internalType":"uint24","name":"targetVotePpm","type":"uint24"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint8","name":"state","type":"uint8"},{"internalType":"uint8","name":"scanCursor","type":"uint8"}],"internalType":"struct ERC20Vote.Proposal","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"}],"name":"optionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_description","type":"bytes32"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_description","type":"bytes32"},{"internalType":"bytes32[]","name":"_options","type":"bytes32[]"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"proposeMulti","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIndex","type":"uint256"},{"internalType":"uint8","name":"_count","type":"uint8"}],"name":"scan","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"vote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"internalType":"uint256","name":"_optionIdx","type":"uint256"}],"name":"voteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_optionIndex","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"voteOption","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"Voter.sol":"ERC20Vote"},"evmVersion":"byzantium","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"Voter.sol":{"keccak256":"0x2486775bc9c84d2ebdef107cd36ca0a851609d7d312feb5a240f95006fe6199e","license":"AGPL-3.0-or-later","urls":["bzz-raw://3ce2c237dc2374a2bde9367b3f74bed26125ecb8d75362e7f255fe7a244ce89d","dweb:/ipfs/Qmc8E3D15f2cFnDM3BfMB3SK2qKUfQp932hDU41Y9C35GF"]}},"version":1} diff --git a/python/evm_tokenvote/voter.py b/python/evm_tokenvote/voter.py @@ -179,12 +179,22 @@ class Voter(TxFactory): return tx + def withdraw(self, contract_address, sender_address, tx_format=TxFormat.JSONRPC, id_generator=None): + enc = ABIContractEncoder() + enc.method('withdraw') + data = add_0x(enc.get()) + tx = self.template(sender_address, contract_address, use_nonce=True) + tx = self.set_code(tx, data) + tx = self.finalize(tx, tx_format, id_generator=id_generator) + return tx + + def get_proposal(self, contract_address, proposal_idx, sender_address=ZERO_ADDRESS, id_generator=None): j = JSONRPCRequest(id_generator) o = j.template() o['method'] = 'eth_call' enc = ABIContractEncoder() - enc.method('proposals') + enc.method('getProposal') enc.typ(ABIContractType.UINT256) enc.uint256(proposal_idx) data = add_0x(enc.get()) @@ -252,12 +262,12 @@ class Voter(TxFactory): - def current_proposal_idx(self, contract_address, sender_address=ZERO_ADDRESS, id_generator=None): + def current_proposal(self, contract_address, sender_address=ZERO_ADDRESS, id_generator=None): j = JSONRPCRequest(id_generator) o = j.template() o['method'] = 'eth_call' enc = ABIContractEncoder() - enc.method('currentProposal') + enc.method('getCurrentProposal') data = add_0x(enc.get()) tx = self.template(sender_address, contract_address) tx = self.set_code(tx, data) @@ -273,7 +283,7 @@ class Voter(TxFactory): v = strip_0x(v) logg.debug("proposal {}".format(v)) - cursor = 0 + cursor = 64 dec = ABIContractDecoder() dec.typ(ABIContractType.BYTES32) dec.typ(ABIContractType.UINT256) @@ -284,8 +294,8 @@ class Voter(TxFactory): dec.typ(ABIContractType.UINT8) dec.val(v[cursor:cursor+64]) # description - #cursor += 64 # options pos - #cursor += 64 # optionsvotes pos + cursor += 64 # options pos + cursor += 64 # optionsvotes pos cursor += 64 dec.val(v[cursor:cursor+64]) cursor += 64 diff --git a/python/tests/test_base.py b/python/tests/test_base.py @@ -34,10 +34,17 @@ class TestVoteBase(TestEvmVoteProposal): self.assertTrue(same_hex(proposal.proposer, self.ivan)) self.assertEqual(proposal.state, ProposalState.INIT) - o = c.current_proposal_idx(self.voter_address, sender_address=self.accounts[0]) + o = c.current_proposal(self.voter_address, sender_address=self.accounts[0]) r = self.rpc.do(o) - idx = int(r, 16) - self.assertEqual(idx, 0) + proposal = c.parse_proposal(r) + self.assertTrue(same_hex(proposal.description_digest, hash_of_foo)) + self.assertEqual(proposal.supply, self.supply) + self.assertEqual(proposal.total, 0) + self.assertEqual(proposal.block_deadline, self.proposal_block_height + 100) + self.assertEqual(proposal.target_vote_ppm, 500000) + self.assertTrue(same_hex(proposal.proposer, self.ivan)) + self.assertEqual(proposal.state, ProposalState.INIT) + def test_vote(self): diff --git a/solidity/Voter.sol b/solidity/Voter.sol @@ -31,10 +31,10 @@ contract ERC20Vote { uint8 scanCursor; } - Proposal[] public proposals; + Proposal[] proposals; address accountsRegistry; - uint256 public currentProposal; + uint256 currentProposal; mapping ( address => uint256 ) public balanceOf; mapping ( address => uint256 ) proposalIdxLock; @@ -42,8 +42,11 @@ contract ERC20Vote { event ProposalAdded(uint256 indexed _blockDeadline, uint256 indexed voteTargetPpm, uint256 indexed _proposalIdx); constructor(address _token, address _accountsRegistry) { + Proposal memory l_proposal; token = _token; accountsRegistry = _accountsRegistry; + proposals.push(l_proposal); + currentProposal = 1; } // Propose a vote on the subject described by digest. @@ -69,6 +72,14 @@ contract ERC20Vote { return l_proposalIndex; } + function getProposal(uint256 _proposalIdx) public view returns(Proposal memory) { + return proposals[_proposalIdx + 1]; + } + + function getCurrentProposal() public view returns(Proposal memory) { + return proposals[currentProposal]; + } + function propose(bytes32 _description, uint256 _blockWait, uint24 _targetVotePpm) public returns (uint256) { bytes32[] memory options; @@ -78,21 +89,21 @@ contract ERC20Vote { function getOption(uint256 _proposalIdx, uint256 _optionIdx) public view returns (bytes32) { Proposal storage proposal; - proposal = proposals[_proposalIdx]; + proposal = proposals[_proposalIdx + 1]; return proposal.options[_optionIdx]; } function optionCount(uint256 _proposalIdx) public view returns(uint256) { Proposal storage proposal; - proposal = proposals[_proposalIdx]; + proposal = proposals[_proposalIdx + 1]; return proposal.options.length; } function voteCount(uint256 _proposalIdx, uint256 _optionIdx) public view returns(uint256) { Proposal storage proposal; - proposal = proposals[_proposalIdx]; + proposal = proposals[_proposalIdx + 1]; if (proposal.options.length == 0) { require(_optionIdx == 0, "ERR_NO_OPTIONS"); return proposal.total; @@ -131,7 +142,7 @@ contract ERC20Vote { } require(proposal.blockDeadline > block.number, "ERR_DEADLINE"); if (proposalIdxLock[msg.sender] > 0) { - require(proposalIdxLock[msg.sender] == currentProposal, "ERR_RECOVER_FIRST"); + require(proposalIdxLock[msg.sender] == currentProposal, "ERR_WITHDRAW_FIRST"); } if (proposal.options.length > 0) { require(_optionIndex < proposal.options.length, "ERR_OPTION_INVALID"); @@ -169,7 +180,7 @@ contract ERC20Vote { uint8 c; uint8 state; - proposal = proposals[_proposalIndex]; + proposal = proposals[_proposalIndex + 1]; require(proposal.blockDeadline <= block.number, "ERR_PREMATURE"); if (proposal.state & STATE_SCANNED > 0) { return false; @@ -255,18 +266,17 @@ contract ERC20Vote { } // Recover tokens from a finished vote or from an active vote before deadline. - function recover() public returns (uint256) { + function withdraw() public returns (uint256) { Proposal storage proposal; bool r; bytes memory v; uint256 l_value; - proposal = proposals[currentProposal]; - l_value = balanceOf[msg.sender]; if (proposalIdxLock[msg.sender] == currentProposal) { + proposal = proposals[currentProposal]; if (proposal.blockDeadline <= block.number) { - require(proposal.state & STATE_FINAL == 0, "ERR_PREMATURE"); + require(proposal.state & STATE_FINAL > 0, "ERR_PREMATURE"); } else { proposal.total -= l_value; }