evm-tokenvote

Voting machine using ERC20 tokens as votes.
Log | Files | Refs | README

commit 64fc16a2a31ee063efc472cf82439aad4768bf85
parent 4aff061e1dd6cc6ba98ca7430539dc6ef7a3c2c0
Author: lash <dev@holbrook.no>
Date:   Sun,  7 May 2023 18:57:24 +0100

Prematurely end vote only on binary majority

Diffstat:
Mpython/evm_tokenvote/data/Voter.bin | 4++--
Mpython/evm_tokenvote/data/Voter.metadata.json | 2+-
Mpython/tests/test_base.py | 5+++--
Mpython/tests/test_events.py | 1-
Msolidity/Voter.sol | 33+++++++++++++++++----------------
5 files changed, 23 insertions(+), 22 deletions(-)

diff --git a/python/evm_tokenvote/data/Voter.bin b/python/evm_tokenvote/data/Voter.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b50604051620039a9380380620039a9833981810160405281019062000037919062000486565b620000416200027f565b846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600181908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000155602082015181600101908051906020019062000157929190620002fd565b506040820151816002019080519060200190620001769291906200034f565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548162ffffff021916908362ffffff1602179055506101008201518160070160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160070160176101000a81548160ff021916908360ff1602179055506101408201518160070160186101000a81548160ff021916908360ff1602179055505050600160048190555083600560006101000a81548160ff0219169083151502179055505050505050620004f8565b60405180610160016040528060008019168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b8280548282559060005260206000209081019282156200033c579160200282015b828111156200033b5782518255916020019190600101906200031e565b5b5090506200034b9190620003a1565b5090565b8280548282559060005260206000209081019282156200038e579160200282015b828111156200038d57825182559160200191906001019062000370565b5b5090506200039d9190620003c0565b5090565b5b80821115620003bc576000816000905550600101620003a2565b5090565b5b80821115620003db576000816000905550600101620003c1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200041182620003e4565b9050919050565b620004238162000404565b81146200042f57600080fd5b50565b600081519050620004438162000418565b92915050565b60008115159050919050565b620004608162000449565b81146200046c57600080fd5b50565b600081519050620004808162000455565b92915050565b60008060008060808587031215620004a357620004a2620003df565b5b6000620004b38782880162000432565b9450506020620004c6878288016200046f565b9350506040620004d98782880162000432565b9250506060620004ec8782880162000432565b91505092959194509250565b6134a180620005086000396000f3fe608060405234801561001057600080fd5b506004361061011d576000357c010000000000000000000000000000000000000000000000000000000090048063826d9873116100b4578063ba32941411610083578063ba3294141461032c578063c7f758a81461035c578063e99a943e1461038c578063fc0c546a146103bc5761011d565b8063826d98731461026c578063843851911461029c5780638bb52213146102cc578063b05c65ba146102fc5761011d565b806341ec6870116100f057806341ec6870146101d05780634bb278f3146101ee578063509bd3371461020c57806370a082311461023c5761011d565b80630121b93f146101225780631ce30927146101525780632e1a7d4d146101825780633ccfd60b146101b2575b600080fd5b61013c600480360381019061013791906122a3565b6103da565b60405161014991906122eb565b60405180910390f35b61016c60048036038101906101679190612306565b610456565b604051610179919061235f565b60405180910390f35b61019c600480360381019061019791906122a3565b6104b2565b6040516101a99190612389565b60405180910390f35b6101ba610544565b6040516101c79190612389565b60405180910390f35b6101d86108a1565b6040516101e59190612691565b60405180910390f35b6101f6610ad3565b60405161020391906122eb565b60405180910390f35b61022660048036038101906102219190612306565b610c78565b60405161023391906122eb565b60405180910390f35b610256600480360381019061025191906126df565b610d9c565b6040516102639190612389565b60405180910390f35b610286600480360381019061028191906122a3565b610db4565b60405161029391906122eb565b60405180910390f35b6102b660048036038101906102b191906122a3565b610ecb565b6040516102c39190612389565b60405180910390f35b6102e660048036038101906102e19190612738565b610f0d565b6040516102f391906122eb565b60405180910390f35b61031660048036038101906103119190612929565b6111e2565b6040516103239190612389565b60405180910390f35b61034660048036038101906103419190612306565b611514565b6040516103539190612389565b60405180910390f35b610376600480360381019061037191906122a3565b6115d0565b6040516103839190612691565b60405180910390f35b6103a660048036038101906103a191906129ac565b6117ad565b6040516103b39190612389565b60405180910390f35b6103c46117c7565b6040516103d19190612a0e565b60405180910390f35b60008061040933600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117eb565b60016004548154811061041f5761041e612a29565b5b90600052602060002090600802019050600281600101805490501061044357600080fd5b61044e600084610c78565b915050919050565b600080600180856104679190612a87565b8154811061047857610477612a29565b5b9060005260206000209060080201905080600101838154811061049e5761049d612a29565b5b906000526020600020015491505092915050565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548214610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90612b18565b60405180910390fd5b61053d610544565b9050919050565b600080600060606000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403610658576001600454815481106105ed576105ec612a29565b5b90600052602060002090600802019350600060028560070160179054906101000a900460ff161660ff1611610657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e90612b84565b60405180910390fd5b5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16338260405160240161072c929190612ba4565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516107b69190612c3e565b6000604051808303816000865af19150503d80600081146107f3576040519150601f19603f3d011682016040523d82523d6000602084013e6107f8565b606091505b50809350819450505082610841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083890612ca1565b60405180910390fd5b818060200190518101906108559190612ced565b925082610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90612d66565b60405180910390fd5b8094505050505090565b6108a9612107565b60006001600454815481106108c1576108c0612a29565b5b90600052602060002090600802019050600060018260070160179054906101000a900460ff161660ff161161092b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092290612dd2565b60405180910390fd5b8060405180610160016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561099157602002820191906000526020600020905b81548152602001906001019080831161097d575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109e957602002820191906000526020600020905b8154815260200190600101908083116109d5575b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016007820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160179054906101000a900460ff1660ff1660ff1681526020016007820160189054906101000a900460ff1660ff1660ff168152505091505090565b6000806000600160045481548110610aee57610aed612a29565b5b90600052602060002090600802019150600060028360070160179054906101000a900460ff161660ff1614610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f90612e3e565b60405180910390fd5b6000610b63836119c4565b03610b7357600092505050610c75565b60028260070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550610bac82611c75565b610be95760088260070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060019050610bea565b5b801515600060808460070160179054906101000a900460ff161660ff161115156001600454610c199190612e5e565b7f2d899e808be4b1d81a259d3f56d6d5c829a7cc913a35373a29f6363ebbb2c6c38560050154604051610c4c9190612389565b60405180910390a4600160046000828254610c679190612a87565b925050819055508015925050505b90565b600080610ca733600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117eb565b600160045481548110610cbd57610cbc612a29565b5b90600052602060002090600802019050610cd681611cc0565b610ce4576000915050610d96565b600081600101805490501115610d3e5780600101805490508410610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3490612ede565b60405180910390fd5b5b610d488184611e50565b600081600101805490501115610d905782816002018581548110610d6f57610d6e612a29565b5b906000526020600020016000828254610d889190612a87565b925050819055505b60019150505b92915050565b60066020528060005260406000206000915090505481565b6000806000610de533600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117eb565b600160045481548110610dfb57610dfa612a29565b5b90600052602060002090600802019150610e1482611cc0565b610e2357600092505050610ec6565b610e2d8285611e50565b83826003016000828254610e419190612a87565b92505081905550620f42408260030154610e5b9190612efe565b90508160070160009054906101000a900462ffffff1662ffffff16826004015482610e869190612f6f565b10610ebf5760406080178260070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b6001925050505b919050565b60008060018084610edc9190612a87565b81548110610eed57610eec612a29565b5b906000526020600020906008020190508060010180549050915050919050565b6000806000806000806000806001808b610f279190612a87565b81548110610f3857610f37612a29565b5b90600052602060002090600802019650600060408860070160179054906101000a900460ff161660ff1603610faf574387600601541115610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590612b84565b60405180910390fd5b5b600060048860070160179054906101000a900460ff161660ff161115610fdf5760009750505050505050506111dc565b600087600101805490500361102e5760048760070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060019750505050505050506111dc565b8660070160189054906101000a900460ff169150866001018054905089836110569190612fa0565b60ff161115611075578187600101805490506110729190612fd5565b98505b81896110819190612fa0565b98508660070160179054906101000a900460ff1690508195505b8860ff168660ff16101561112a57866002018660ff16815481106110c2576110c1612a29565b5b906000526020600020015492506000831180156110de57508383145b156110ee57601081179050611108565b83831115611107578293508560ff169450601019811690505b5b6001826111159190612fa0565b915085806111229061300a565b96505061109b565b818760070160186101000a81548160ff021916908360ff160217905550808760070160176101000a81548160ff021916908360ff16021790555086600101805490508760070160189054906101000a900460ff1660ff16106111b75760048760070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b600060048860070160179054906101000a900460ff161660ff16119750505050505050505b92915050565b60006111ec612107565b60008061121b33600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117eb565b610100875110611260576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112579061307f565b60405180910390fd5b3383610100019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505087836000018181525050868360200181905250865167ffffffffffffffff8111156112c7576112c66127ba565b5b6040519080825280602002602001820160405280156112f55781602001602082028036833780820191505090505b508360400181905250848360e0019062ffffff16908162ffffff168152505085436113209190612a87565b9050808360c00181815250506001805490509150600183610120019060ff16908160ff1681525050600183908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000155602082015181600101908051906020019061139a929190612185565b5060408201518160020190805190602001906113b79291906121d2565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548162ffffff021916908362ffffff1602179055506101008201518160070160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160070160176101000a81548160ff021916908360ff1602179055506101408201518160070160186101000a81548160ff021916908360ff16021790555050506114bd600183815481106114aa576114a9612a29565b5b90600052602060002090600802016119c4565b8360800181815250506001826114d39190612e5e565b8562ffffff16827f5a41400aa51d78e9e5ca645b0d045817eaa7d90e4344d773fdbe24ffb183d3ce60405160405180910390a4819350505050949350505050565b600080600180856115259190612a87565b8154811061153657611535612a29565b5b9060005260206000209060080201905060008160010180549050036115a55760008314611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f906130eb565b60405180910390fd5b80600501549150506115ca565b8060020183815481106115bb576115ba612a29565b5b90600052602060002001549150505b92915050565b6115d8612107565b600180836115e69190612a87565b815481106115f7576115f6612a29565b5b906000526020600020906008020160405180610160016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561166a57602002820191906000526020600020905b815481526020019060010190808311611656575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156116c257602002820191906000526020600020905b8154815260200190600101908083116116ae575b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016007820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160179054906101000a900460ff1660ff1660ff1681526020016007820160189054906101000a900460ff1660ff1660ff16815250509050919050565b600060606117bd858286866111e2565b9150509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361182a5750506119c0565b8273ffffffffffffffffffffffffffffffffffffffff16846040516024016118529190612a0e565b6040516020818303038152906040527f3ef25013000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516118dc9190612c3e565b6000604051808303816000865af19150503d8060008114611919576040519150601f19603f3d011682016040523d82523d6000602084013e61191e565b606091505b50809250819350505081611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613157565b60405180910390fd5b8080602001905181019061197b9190612ced565b9150816119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b4906131c3565b60405180910390fd5b50505b5050565b600080606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611a939190612c3e565b6000604051808303816000865af19150503d8060008114611ad0576040519150601f19603f3d011682016040523d82523d6000602084013e611ad5565b606091505b50809350819450505082611b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1590612ca1565b60405180910390fd5b81806020019051810190611b3291906131f8565b905060008111611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e90613271565b60405180910390fd5b6000856004015403611b9157808560040181905550611c69565b84600401548114611c685760208560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060028560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600560009054906101000a900460ff1615611c6757600160046000828254611c249190612a87565b9250508190555060808560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060009350505050611c70565b5b5b8093505050505b919050565b600080620f42408360050154611c8b9190612efe565b90508260070160009054906101000a900462ffffff1662ffffff16836004015482611cb69190612f6f565b1015915050919050565b60008060018360070160179054906101000a900460ff161660ff1611611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d12906132dd565b60405180910390fd5b6000611d26836119c4565b03611d345760009050611e4b565b43826006015411611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7190613349565b60405180910390fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611e4657600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c906133b5565b60405180910390fd5b5b600190505b919050565b6000606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16333085604051602401611ea093929190613434565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611f2a9190612c3e565b6000604051808303816000865af19150503d8060008114611f67576040519150601f19603f3d011682016040523d82523d6000602084013e611f6c565b606091505b50809250819350505081611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac90612ca1565b60405180910390fd5b80806020019051810190611fc99190612ced565b91508161200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200290612d66565b60405180910390fd5b600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120a09190612a87565b92505081905550828460050160008282546120bb9190612a87565b925050819055506120cb84611c75565b156121015760408460070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b50505050565b60405180610160016040528060008019168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b8280548282559060005260206000209081019282156121c1579160200282015b828111156121c05782518255916020019190600101906121a5565b5b5090506121ce919061221f565b5090565b82805482825590600052602060002090810192821561220e579160200282015b8281111561220d5782518255916020019190600101906121f2565b5b50905061221b919061223c565b5090565b5b80821115612238576000816000905550600101612220565b5090565b5b8082111561225557600081600090555060010161223d565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6122808161226d565b811461228b57600080fd5b50565b60008135905061229d81612277565b92915050565b6000602082840312156122b9576122b8612263565b5b60006122c78482850161228e565b91505092915050565b60008115159050919050565b6122e5816122d0565b82525050565b600060208201905061230060008301846122dc565b92915050565b6000806040838503121561231d5761231c612263565b5b600061232b8582860161228e565b925050602061233c8582860161228e565b9150509250929050565b6000819050919050565b61235981612346565b82525050565b60006020820190506123746000830184612350565b92915050565b6123838161226d565b82525050565b600060208201905061239e600083018461237a565b92915050565b6123ad81612346565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006123eb83836123a4565b60208301905092915050565b6000602082019050919050565b600061240f826123b3565b61241981856123be565b9350612424836123cf565b8060005b8381101561245557815161243c88826123df565b9750612447836123f7565b925050600181019050612428565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6124978161226d565b82525050565b60006124a9838361248e565b60208301905092915050565b6000602082019050919050565b60006124cd82612462565b6124d7818561246d565b93506124e28361247e565b8060005b838110156125135781516124fa888261249d565b9750612505836124b5565b9250506001810190506124e6565b5085935050505092915050565b600062ffffff82169050919050565b61253881612520565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125698261253e565b9050919050565b6125798161255e565b82525050565b600060ff82169050919050565b6125958161257f565b82525050565b6000610160830160008301516125b460008601826123a4565b50602083015184820360208601526125cc8282612404565b915050604083015184820360408601526125e682826124c2565b91505060608301516125fb606086018261248e565b50608083015161260e608086018261248e565b5060a083015161262160a086018261248e565b5060c083015161263460c086018261248e565b5060e083015161264760e086018261252f565b5061010083015161265c610100860182612570565b5061012083015161267161012086018261258c565b5061014083015161268661014086018261258c565b508091505092915050565b600060208201905081810360008301526126ab818461259b565b905092915050565b6126bc8161255e565b81146126c757600080fd5b50565b6000813590506126d9816126b3565b92915050565b6000602082840312156126f5576126f4612263565b5b6000612703848285016126ca565b91505092915050565b6127158161257f565b811461272057600080fd5b50565b6000813590506127328161270c565b92915050565b6000806040838503121561274f5761274e612263565b5b600061275d8582860161228e565b925050602061276e85828601612723565b9150509250929050565b61278181612346565b811461278c57600080fd5b50565b60008135905061279e81612778565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127f2826127a9565b810181811067ffffffffffffffff82111715612811576128106127ba565b5b80604052505050565b6000612824612259565b905061283082826127e9565b919050565b600067ffffffffffffffff8211156128505761284f6127ba565b5b602082029050602081019050919050565b600080fd5b600061287961287484612835565b61281a565b9050808382526020820190506020840283018581111561289c5761289b612861565b5b835b818110156128c557806128b1888261278f565b84526020840193505060208101905061289e565b5050509392505050565b600082601f8301126128e4576128e36127a4565b5b81356128f4848260208601612866565b91505092915050565b61290681612520565b811461291157600080fd5b50565b600081359050612923816128fd565b92915050565b6000806000806080858703121561294357612942612263565b5b60006129518782880161278f565b945050602085013567ffffffffffffffff81111561297257612971612268565b5b61297e878288016128cf565b935050604061298f8782880161228e565b92505060606129a087828801612914565b91505092959194509250565b6000806000606084860312156129c5576129c4612263565b5b60006129d38682870161278f565b93505060206129e48682870161228e565b92505060406129f586828701612914565b9150509250925092565b612a088161255e565b82525050565b6000602082019050612a2360008301846129ff565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a928261226d565b9150612a9d8361226d565b9250828201905080821115612ab557612ab4612a58565b5b92915050565b600082825260208201905092915050565b7f4552525f4d5553545f57495448445241575f414c4c0000000000000000000000600082015250565b6000612b02601583612abb565b9150612b0d82612acc565b602082019050919050565b60006020820190508181036000830152612b3181612af5565b9050919050565b7f4552525f5052454d415455524500000000000000000000000000000000000000600082015250565b6000612b6e600d83612abb565b9150612b7982612b38565b602082019050919050565b60006020820190508181036000830152612b9d81612b61565b9050919050565b6000604082019050612bb960008301856129ff565b612bc6602083018461237a565b9392505050565b600081519050919050565b600081905092915050565b60005b83811015612c01578082015181840152602081019050612be6565b60008484015250505050565b6000612c1882612bcd565b612c228185612bd8565b9350612c32818560208601612be3565b80840191505092915050565b6000612c4a8284612c0d565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b6000612c8b600983612abb565b9150612c9682612c55565b602082019050919050565b60006020820190508181036000830152612cba81612c7e565b9050919050565b612cca816122d0565b8114612cd557600080fd5b50565b600081519050612ce781612cc1565b92915050565b600060208284031215612d0357612d02612263565b5b6000612d1184828501612cd8565b91505092915050565b7f4552525f5452414e534645520000000000000000000000000000000000000000600082015250565b6000612d50600c83612abb565b9150612d5b82612d1a565b602082019050919050565b60006020820190508181036000830152612d7f81612d43565b9050919050565b7f4552525f4e4f5f43555252454e545f50524f504f53414c000000000000000000600082015250565b6000612dbc601783612abb565b9150612dc782612d86565b602082019050919050565b60006020820190508181036000830152612deb81612daf565b9050919050565b7f4552525f414c52454144595f53544154455f46494e414c000000000000000000600082015250565b6000612e28601783612abb565b9150612e3382612df2565b602082019050919050565b60006020820190508181036000830152612e5781612e1b565b9050919050565b6000612e698261226d565b9150612e748361226d565b9250828203905081811115612e8c57612e8b612a58565b5b92915050565b7f4552525f4f5054494f4e5f494e56414c49440000000000000000000000000000600082015250565b6000612ec8601283612abb565b9150612ed382612e92565b602082019050919050565b60006020820190508181036000830152612ef781612ebb565b9050919050565b6000612f098261226d565b9150612f148361226d565b9250828202612f228161226d565b91508282048414831517612f3957612f38612a58565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f7a8261226d565b9150612f858361226d565b925082612f9557612f94612f40565b5b828204905092915050565b6000612fab8261257f565b9150612fb68361257f565b9250828201905060ff811115612fcf57612fce612a58565b5b92915050565b6000612fe08261257f565b9150612feb8361257f565b9250828203905060ff81111561300457613003612a58565b5b92915050565b60006130158261257f565b915060ff820361302857613027612a58565b5b600182019050919050565b7f4552525f544f4f5f4d414e595f4f5054494f4e53000000000000000000000000600082015250565b6000613069601483612abb565b915061307482613033565b602082019050919050565b600060208201905081810360008301526130988161305c565b9050919050565b7f4552525f4e4f5f4f5054494f4e53000000000000000000000000000000000000600082015250565b60006130d5600e83612abb565b91506130e08261309f565b602082019050919050565b60006020820190508181036000830152613104816130c8565b9050919050565b7f4552525f52454749535452590000000000000000000000000000000000000000600082015250565b6000613141600c83612abb565b915061314c8261310b565b602082019050919050565b6000602082019050818103600083015261317081613134565b9050919050565b7f4552525f554e415554485f4143434f554e540000000000000000000000000000600082015250565b60006131ad601283612abb565b91506131b882613177565b602082019050919050565b600060208201905081810360008301526131dc816131a0565b9050919050565b6000815190506131f281612277565b92915050565b60006020828403121561320e5761320d612263565b5b600061321c848285016131e3565b91505092915050565b7f4552525f5a45524f5f535550504c590000000000000000000000000000000000600082015250565b600061325b600f83612abb565b915061326682613225565b602082019050919050565b6000602082019050818103600083015261328a8161324e565b9050919050565b7f4552525f50524f504f53414c5f494e4143544956450000000000000000000000600082015250565b60006132c7601583612abb565b91506132d282613291565b602082019050919050565b600060208201905081810360008301526132f6816132ba565b9050919050565b7f4552525f444541444c494e450000000000000000000000000000000000000000600082015250565b6000613333600c83612abb565b915061333e826132fd565b602082019050919050565b6000602082019050818103600083015261336281613326565b9050919050565b7f4552525f57495448445241575f46495253540000000000000000000000000000600082015250565b600061339f601283612abb565b91506133aa82613369565b602082019050919050565b600060208201905081810360008301526133ce81613392565b9050919050565b6000819050919050565b60006133fa6133f56133f08461253e565b6133d5565b61253e565b9050919050565b600061340c826133df565b9050919050565b600061341e82613401565b9050919050565b61342e81613413565b82525050565b600060608201905061344960008301866129ff565b6134566020830185613425565b613463604083018461237a565b94935050505056fea264697066735822122015ee45df49404113dd7998dcae6c2dc12a9920c9012d24eb5d467c6b0f08fef964736f6c63430008130033 -\ No newline at end of file +60806040523480156200001157600080fd5b50604051620039ef380380620039ef833981810160405281019062000037919062000486565b620000416200027f565b846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600181908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000155602082015181600101908051906020019062000157929190620002fd565b506040820151816002019080519060200190620001769291906200034f565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548162ffffff021916908362ffffff1602179055506101008201518160070160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160070160176101000a81548160ff021916908360ff1602179055506101408201518160070160186101000a81548160ff021916908360ff1602179055505050600160048190555083600560006101000a81548160ff0219169083151502179055505050505050620004f8565b60405180610160016040528060008019168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b8280548282559060005260206000209081019282156200033c579160200282015b828111156200033b5782518255916020019190600101906200031e565b5b5090506200034b9190620003a1565b5090565b8280548282559060005260206000209081019282156200038e579160200282015b828111156200038d57825182559160200191906001019062000370565b5b5090506200039d9190620003c0565b5090565b5b80821115620003bc576000816000905550600101620003a2565b5090565b5b80821115620003db576000816000905550600101620003c1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200041182620003e4565b9050919050565b620004238162000404565b81146200042f57600080fd5b50565b600081519050620004438162000418565b92915050565b60008115159050919050565b620004608162000449565b81146200046c57600080fd5b50565b600081519050620004808162000455565b92915050565b60008060008060808587031215620004a357620004a2620003df565b5b6000620004b38782880162000432565b9450506020620004c6878288016200046f565b9350506040620004d98782880162000432565b9250506060620004ec8782880162000432565b91505092959194509250565b6134e780620005086000396000f3fe608060405234801561001057600080fd5b506004361061011d576000357c010000000000000000000000000000000000000000000000000000000090048063826d9873116100b4578063ba32941411610083578063ba3294141461032c578063c7f758a81461035c578063e99a943e1461038c578063fc0c546a146103bc5761011d565b8063826d98731461026c578063843851911461029c5780638bb52213146102cc578063b05c65ba146102fc5761011d565b806341ec6870116100f057806341ec6870146101d05780634bb278f3146101ee578063509bd3371461020c57806370a082311461023c5761011d565b80630121b93f146101225780631ce30927146101525780632e1a7d4d146101825780633ccfd60b146101b2575b600080fd5b61013c600480360381019061013791906122e9565b6103da565b6040516101499190612331565b60405180910390f35b61016c6004803603810190610167919061234c565b610456565b60405161017991906123a5565b60405180910390f35b61019c600480360381019061019791906122e9565b6104b2565b6040516101a991906123cf565b60405180910390f35b6101ba610544565b6040516101c791906123cf565b60405180910390f35b6101d86108a1565b6040516101e591906126d7565b60405180910390f35b6101f6610ad3565b6040516102039190612331565b60405180910390f35b6102266004803603810190610221919061234c565b610cdf565b6040516102339190612331565b60405180910390f35b61025660048036038101906102519190612725565b610e03565b60405161026391906123cf565b60405180910390f35b610286600480360381019061028191906122e9565b610e1b565b6040516102939190612331565b60405180910390f35b6102b660048036038101906102b191906122e9565b610eb7565b6040516102c391906123cf565b60405180910390f35b6102e660048036038101906102e1919061277e565b610ef9565b6040516102f39190612331565b60405180910390f35b6103166004803603810190610311919061296f565b6111ce565b60405161032391906123cf565b60405180910390f35b6103466004803603810190610341919061234c565b611500565b60405161035391906123cf565b60405180910390f35b610376600480360381019061037191906122e9565b6115bc565b60405161038391906126d7565b60405180910390f35b6103a660048036038101906103a191906129f2565b611799565b6040516103b391906123cf565b60405180910390f35b6103c46117b3565b6040516103d19190612a54565b60405180910390f35b60008061040933600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117d7565b60016004548154811061041f5761041e612a6f565b5b90600052602060002090600802019050600281600101805490501061044357600080fd5b61044e600084610cdf565b915050919050565b600080600180856104679190612acd565b8154811061047857610477612a6f565b5b9060005260206000209060080201905080600101838154811061049e5761049d612a6f565b5b906000526020600020015491505092915050565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548214610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90612b5e565b60405180910390fd5b61053d610544565b9050919050565b600080600060606000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403610658576001600454815481106105ed576105ec612a6f565b5b90600052602060002090600802019350600060028560070160179054906101000a900460ff161660ff1611610657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e90612bca565b60405180910390fd5b5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16338260405160240161072c929190612bea565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516107b69190612c84565b6000604051808303816000865af19150503d80600081146107f3576040519150601f19603f3d011682016040523d82523d6000602084013e6107f8565b606091505b50809350819450505082610841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083890612ce7565b60405180910390fd5b818060200190518101906108559190612d33565b925082610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90612dac565b60405180910390fd5b8094505050505090565b6108a961214d565b60006001600454815481106108c1576108c0612a6f565b5b90600052602060002090600802019050600060018260070160179054906101000a900460ff161660ff161161092b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092290612e18565b60405180910390fd5b8060405180610160016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561099157602002820191906000526020600020905b81548152602001906001019080831161097d575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109e957602002820191906000526020600020905b8154815260200190600101908083116109d5575b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016007820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160179054906101000a900460ff1660ff1660ff1681526020016007820160189054906101000a900460ff1660ff1660ff168152505091505090565b6000806000600160045481548110610aee57610aed612a6f565b5b90600052602060002090600802019150600060028360070160179054906101000a900460ff161660ff1614610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f90612e84565b60405180910390fd5b6000610b63836119b0565b03610b7357600092505050610cdc565b8160060154431115610bda57600060808360070160179054906101000a900460ff161660ff1614610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090612bca565b60405180910390fd5b5b610be8828360050154611c61565b610c215760088260070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600190505b60028260070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550801515600060808460070160179054906101000a900460ff161660ff161115156001600454610c809190612ea4565b7f2d899e808be4b1d81a259d3f56d6d5c829a7cc913a35373a29f6363ebbb2c6c38560050154604051610cb391906123cf565b60405180910390a4600160046000828254610cce9190612acd565b925050819055508015925050505b90565b600080610d0e33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117d7565b600160045481548110610d2457610d23612a6f565b5b90600052602060002090600802019050610d3d81611ca9565b610d4b576000915050610dfd565b600081600101805490501115610da55780600101805490508410610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90612f24565b60405180910390fd5b5b610daf8184611e39565b600081600101805490501115610df75782816002018581548110610dd657610dd5612a6f565b5b906000526020600020016000828254610def9190612acd565b925050819055505b60019150505b92915050565b60066020528060005260406000206000915090505481565b600080610e4a33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117d7565b600160045481548110610e6057610e5f612a6f565b5b90600052602060002090600802019050610e7981611ca9565b610e87576000915050610eb2565b82816003016000828254610e9b9190612acd565b92505081905550610eac8184611e39565b60019150505b919050565b60008060018084610ec89190612acd565b81548110610ed957610ed8612a6f565b5b906000526020600020906008020190508060010180549050915050919050565b6000806000806000806000806001808b610f139190612acd565b81548110610f2457610f23612a6f565b5b90600052602060002090600802019650600060408860070160179054906101000a900460ff161660ff1603610f9b574387600601541115610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190612bca565b60405180910390fd5b5b600060048860070160179054906101000a900460ff161660ff161115610fcb5760009750505050505050506111c8565b600087600101805490500361101a5760048760070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060019750505050505050506111c8565b8660070160189054906101000a900460ff169150866001018054905089836110429190612f44565b60ff1611156110615781876001018054905061105e9190612f79565b98505b818961106d9190612f44565b98508660070160179054906101000a900460ff1690508195505b8860ff168660ff16101561111657866002018660ff16815481106110ae576110ad612a6f565b5b906000526020600020015492506000831180156110ca57508383145b156110da576010811790506110f4565b838311156110f3578293508560ff169450601019811690505b5b6001826111019190612f44565b9150858061110e90612fae565b965050611087565b818760070160186101000a81548160ff021916908360ff160217905550808760070160176101000a81548160ff021916908360ff16021790555086600101805490508760070160189054906101000a900460ff1660ff16106111a35760048760070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b600060048860070160179054906101000a900460ff161660ff16119750505050505050505b92915050565b60006111d861214d565b60008061120733600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117d7565b61010087511061124c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124390613023565b60405180910390fd5b3383610100019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505087836000018181525050868360200181905250865167ffffffffffffffff8111156112b3576112b2612800565b5b6040519080825280602002602001820160405280156112e15781602001602082028036833780820191505090505b508360400181905250848360e0019062ffffff16908162ffffff1681525050854361130c9190612acd565b9050808360c00181815250506001805490509150600183610120019060ff16908160ff168152505060018390806001815401808255809150506001900390600052602060002090600802016000909190919091506000820151816000015560208201518160010190805190602001906113869291906121cb565b5060408201518160020190805190602001906113a3929190612218565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548162ffffff021916908362ffffff1602179055506101008201518160070160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160070160176101000a81548160ff021916908360ff1602179055506101408201518160070160186101000a81548160ff021916908360ff16021790555050506114a96001838154811061149657611495612a6f565b5b90600052602060002090600802016119b0565b8360800181815250506001826114bf9190612ea4565b8562ffffff16827f5a41400aa51d78e9e5ca645b0d045817eaa7d90e4344d773fdbe24ffb183d3ce60405160405180910390a4819350505050949350505050565b600080600180856115119190612acd565b8154811061152257611521612a6f565b5b9060005260206000209060080201905060008160010180549050036115915760008314611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b9061308f565b60405180910390fd5b80600501549150506115b6565b8060020183815481106115a7576115a6612a6f565b5b90600052602060002001549150505b92915050565b6115c461214d565b600180836115d29190612acd565b815481106115e3576115e2612a6f565b5b906000526020600020906008020160405180610160016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561165657602002820191906000526020600020905b815481526020019060010190808311611642575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156116ae57602002820191906000526020600020905b81548152602001906001019080831161169a575b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016007820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160179054906101000a900460ff1660ff1660ff1681526020016007820160189054906101000a900460ff1660ff1660ff16815250509050919050565b600060606117a9858286866111ce565b9150509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118165750506119ac565b8273ffffffffffffffffffffffffffffffffffffffff168460405160240161183e9190612a54565b6040516020818303038152906040527f3ef25013000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516118c89190612c84565b6000604051808303816000865af19150503d8060008114611905576040519150601f19603f3d011682016040523d82523d6000602084013e61190a565b606091505b50809250819350505081611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a906130fb565b60405180910390fd5b808060200190518101906119679190612d33565b9150816119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a090613167565b60405180910390fd5b50505b5050565b600080606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611a7f9190612c84565b6000604051808303816000865af19150503d8060008114611abc576040519150601f19603f3d011682016040523d82523d6000602084013e611ac1565b606091505b50809350819450505082611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0190612ce7565b60405180910390fd5b81806020019051810190611b1e919061319c565b905060008111611b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5a90613215565b60405180910390fd5b6000856004015403611b7d57808560040181905550611c55565b84600401548114611c545760208560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060028560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600560009054906101000a900460ff1615611c5357600160046000828254611c109190612acd565b9250508190555060808560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060009350505050611c5c565b5b5b8093505050505b919050565b600080620f424083611c739190613235565b90508360070160009054906101000a900462ffffff1662ffffff16846004015482611c9e91906132a6565b101591505092915050565b60008060018360070160179054906101000a900460ff161660ff1611611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90613323565b60405180910390fd5b6000611d0f836119b0565b03611d1d5760009050611e34565b43826006015411611d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5a9061338f565b60405180910390fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611e2f57600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e25906133fb565b60405180910390fd5b5b600190505b919050565b6000606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16333085604051602401611e899392919061347a565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611f139190612c84565b6000604051808303816000865af19150503d8060008114611f50576040519150601f19603f3d011682016040523d82523d6000602084013e611f55565b606091505b50809250819350505081611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9590612ce7565b60405180910390fd5b80806020019051810190611fb29190612d33565b915081611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb90612dac565b60405180910390fd5b600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120899190612acd565b92505081905550828460050160008282546120a49190612acd565b925050819055506120b9848560050154611c61565b15612147576120cc848560030154611c61565b156121055760406080178460070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b6002846001018054905010156121465760408460070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b5b50505050565b60405180610160016040528060008019168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b828054828255906000526020600020908101928215612207579160200282015b828111156122065782518255916020019190600101906121eb565b5b5090506122149190612265565b5090565b828054828255906000526020600020908101928215612254579160200282015b82811115612253578251825591602001919060010190612238565b5b5090506122619190612282565b5090565b5b8082111561227e576000816000905550600101612266565b5090565b5b8082111561229b576000816000905550600101612283565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6122c6816122b3565b81146122d157600080fd5b50565b6000813590506122e3816122bd565b92915050565b6000602082840312156122ff576122fe6122a9565b5b600061230d848285016122d4565b91505092915050565b60008115159050919050565b61232b81612316565b82525050565b60006020820190506123466000830184612322565b92915050565b60008060408385031215612363576123626122a9565b5b6000612371858286016122d4565b9250506020612382858286016122d4565b9150509250929050565b6000819050919050565b61239f8161238c565b82525050565b60006020820190506123ba6000830184612396565b92915050565b6123c9816122b3565b82525050565b60006020820190506123e460008301846123c0565b92915050565b6123f38161238c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061243183836123ea565b60208301905092915050565b6000602082019050919050565b6000612455826123f9565b61245f8185612404565b935061246a83612415565b8060005b8381101561249b5781516124828882612425565b975061248d8361243d565b92505060018101905061246e565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6124dd816122b3565b82525050565b60006124ef83836124d4565b60208301905092915050565b6000602082019050919050565b6000612513826124a8565b61251d81856124b3565b9350612528836124c4565b8060005b8381101561255957815161254088826124e3565b975061254b836124fb565b92505060018101905061252c565b5085935050505092915050565b600062ffffff82169050919050565b61257e81612566565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125af82612584565b9050919050565b6125bf816125a4565b82525050565b600060ff82169050919050565b6125db816125c5565b82525050565b6000610160830160008301516125fa60008601826123ea565b5060208301518482036020860152612612828261244a565b9150506040830151848203604086015261262c8282612508565b915050606083015161264160608601826124d4565b50608083015161265460808601826124d4565b5060a083015161266760a08601826124d4565b5060c083015161267a60c08601826124d4565b5060e083015161268d60e0860182612575565b506101008301516126a26101008601826125b6565b506101208301516126b76101208601826125d2565b506101408301516126cc6101408601826125d2565b508091505092915050565b600060208201905081810360008301526126f181846125e1565b905092915050565b612702816125a4565b811461270d57600080fd5b50565b60008135905061271f816126f9565b92915050565b60006020828403121561273b5761273a6122a9565b5b600061274984828501612710565b91505092915050565b61275b816125c5565b811461276657600080fd5b50565b60008135905061277881612752565b92915050565b60008060408385031215612795576127946122a9565b5b60006127a3858286016122d4565b92505060206127b485828601612769565b9150509250929050565b6127c78161238c565b81146127d257600080fd5b50565b6000813590506127e4816127be565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612838826127ef565b810181811067ffffffffffffffff8211171561285757612856612800565b5b80604052505050565b600061286a61229f565b9050612876828261282f565b919050565b600067ffffffffffffffff82111561289657612895612800565b5b602082029050602081019050919050565b600080fd5b60006128bf6128ba8461287b565b612860565b905080838252602082019050602084028301858111156128e2576128e16128a7565b5b835b8181101561290b57806128f788826127d5565b8452602084019350506020810190506128e4565b5050509392505050565b600082601f83011261292a576129296127ea565b5b813561293a8482602086016128ac565b91505092915050565b61294c81612566565b811461295757600080fd5b50565b60008135905061296981612943565b92915050565b60008060008060808587031215612989576129886122a9565b5b6000612997878288016127d5565b945050602085013567ffffffffffffffff8111156129b8576129b76122ae565b5b6129c487828801612915565b93505060406129d5878288016122d4565b92505060606129e68782880161295a565b91505092959194509250565b600080600060608486031215612a0b57612a0a6122a9565b5b6000612a19868287016127d5565b9350506020612a2a868287016122d4565b9250506040612a3b8682870161295a565b9150509250925092565b612a4e816125a4565b82525050565b6000602082019050612a696000830184612a45565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ad8826122b3565b9150612ae3836122b3565b9250828201905080821115612afb57612afa612a9e565b5b92915050565b600082825260208201905092915050565b7f4552525f4d5553545f57495448445241575f414c4c0000000000000000000000600082015250565b6000612b48601583612b01565b9150612b5382612b12565b602082019050919050565b60006020820190508181036000830152612b7781612b3b565b9050919050565b7f4552525f5052454d415455524500000000000000000000000000000000000000600082015250565b6000612bb4600d83612b01565b9150612bbf82612b7e565b602082019050919050565b60006020820190508181036000830152612be381612ba7565b9050919050565b6000604082019050612bff6000830185612a45565b612c0c60208301846123c0565b9392505050565b600081519050919050565b600081905092915050565b60005b83811015612c47578082015181840152602081019050612c2c565b60008484015250505050565b6000612c5e82612c13565b612c688185612c1e565b9350612c78818560208601612c29565b80840191505092915050565b6000612c908284612c53565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b6000612cd1600983612b01565b9150612cdc82612c9b565b602082019050919050565b60006020820190508181036000830152612d0081612cc4565b9050919050565b612d1081612316565b8114612d1b57600080fd5b50565b600081519050612d2d81612d07565b92915050565b600060208284031215612d4957612d486122a9565b5b6000612d5784828501612d1e565b91505092915050565b7f4552525f5452414e534645520000000000000000000000000000000000000000600082015250565b6000612d96600c83612b01565b9150612da182612d60565b602082019050919050565b60006020820190508181036000830152612dc581612d89565b9050919050565b7f4552525f4e4f5f43555252454e545f50524f504f53414c000000000000000000600082015250565b6000612e02601783612b01565b9150612e0d82612dcc565b602082019050919050565b60006020820190508181036000830152612e3181612df5565b9050919050565b7f4552525f414c52454144595f53544154455f46494e414c000000000000000000600082015250565b6000612e6e601783612b01565b9150612e7982612e38565b602082019050919050565b60006020820190508181036000830152612e9d81612e61565b9050919050565b6000612eaf826122b3565b9150612eba836122b3565b9250828203905081811115612ed257612ed1612a9e565b5b92915050565b7f4552525f4f5054494f4e5f494e56414c49440000000000000000000000000000600082015250565b6000612f0e601283612b01565b9150612f1982612ed8565b602082019050919050565b60006020820190508181036000830152612f3d81612f01565b9050919050565b6000612f4f826125c5565b9150612f5a836125c5565b9250828201905060ff811115612f7357612f72612a9e565b5b92915050565b6000612f84826125c5565b9150612f8f836125c5565b9250828203905060ff811115612fa857612fa7612a9e565b5b92915050565b6000612fb9826125c5565b915060ff8203612fcc57612fcb612a9e565b5b600182019050919050565b7f4552525f544f4f5f4d414e595f4f5054494f4e53000000000000000000000000600082015250565b600061300d601483612b01565b915061301882612fd7565b602082019050919050565b6000602082019050818103600083015261303c81613000565b9050919050565b7f4552525f4e4f5f4f5054494f4e53000000000000000000000000000000000000600082015250565b6000613079600e83612b01565b915061308482613043565b602082019050919050565b600060208201905081810360008301526130a88161306c565b9050919050565b7f4552525f52454749535452590000000000000000000000000000000000000000600082015250565b60006130e5600c83612b01565b91506130f0826130af565b602082019050919050565b60006020820190508181036000830152613114816130d8565b9050919050565b7f4552525f554e415554485f4143434f554e540000000000000000000000000000600082015250565b6000613151601283612b01565b915061315c8261311b565b602082019050919050565b6000602082019050818103600083015261318081613144565b9050919050565b600081519050613196816122bd565b92915050565b6000602082840312156131b2576131b16122a9565b5b60006131c084828501613187565b91505092915050565b7f4552525f5a45524f5f535550504c590000000000000000000000000000000000600082015250565b60006131ff600f83612b01565b915061320a826131c9565b602082019050919050565b6000602082019050818103600083015261322e816131f2565b9050919050565b6000613240826122b3565b915061324b836122b3565b9250828202613259816122b3565b915082820484148315176132705761326f612a9e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006132b1826122b3565b91506132bc836122b3565b9250826132cc576132cb613277565b5b828204905092915050565b7f4552525f50524f504f53414c5f494e4143544956450000000000000000000000600082015250565b600061330d601583612b01565b9150613318826132d7565b602082019050919050565b6000602082019050818103600083015261333c81613300565b9050919050565b7f4552525f444541444c494e450000000000000000000000000000000000000000600082015250565b6000613379600c83612b01565b915061338482613343565b602082019050919050565b600060208201905081810360008301526133a88161336c565b9050919050565b7f4552525f57495448445241575f46495253540000000000000000000000000000600082015250565b60006133e5601283612b01565b91506133f0826133af565b602082019050919050565b60006020820190508181036000830152613414816133d8565b9050919050565b6000819050919050565b600061344061343b61343684612584565b61341b565b612584565b9050919050565b600061345282613425565b9050919050565b600061346482613447565b9050919050565b61347481613459565b82525050565b600060608201905061348f6000830186612a45565b61349c602083018561346b565b6134a960408301846123c0565b94935050505056fea2646970667358221220fc30bb4f18b8e599c842be6c0141bfe006fac3b7231be11f1a3d6574bab563ae64736f6c63430008130033 +\ No newline at end of file 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":"bool","name":"_protectSupply","type":"bool"},{"internalType":"address","name":"_voterRegistry","type":"address"},{"internalType":"address","name":"_proposerRegistry","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"indexed":true,"internalType":"bool","name":"_cancelled","type":"bool"},{"indexed":true,"internalType":"bool","name":"_insufficient","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_totalVote","type":"uint256"}],"name":"ProposalCompleted","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":"cancelVotes","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":"cancelVotes","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":"_value","type":"uint256"}],"name":"voteCancel","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":"uint256","name":"_value","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"0x1d8415b9f6f62a4660a460329cef3f2409fdfa86529878fc0f7638851b5090e9","license":"AGPL-3.0-or-later","urls":["bzz-raw://1ad07818783e3662d1a545ac92aa9f8c8842815d4737de1ead6bc10b5f1d6200","dweb:/ipfs/QmX6iWf8TBL1gwqQUYgG2DBoVwpmceZUaay5HNPCVkLUbE"]}},"version":1} +{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_protectSupply","type":"bool"},{"internalType":"address","name":"_voterRegistry","type":"address"},{"internalType":"address","name":"_proposerRegistry","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_proposalIdx","type":"uint256"},{"indexed":true,"internalType":"bool","name":"_cancelled","type":"bool"},{"indexed":true,"internalType":"bool","name":"_insufficient","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_totalVote","type":"uint256"}],"name":"ProposalCompleted","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":"cancelVotes","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":"cancelVotes","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":"_value","type":"uint256"}],"name":"voteCancel","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":"uint256","name":"_value","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"0x33d7951567d5c2450edaf9a2d5cbb7524ed08155bb54cea186fa20a5dee7bf98","license":"AGPL-3.0-or-later","urls":["bzz-raw://b4d5b12203b64475d1b4d1edb8f09b64f1b7ecde55a9989224760f18221a292d","dweb:/ipfs/QmZAkh1BbXCsPkffyWrdiSRe5DM5e8UyL9cq9mjBALSSXa"]}},"version":1} diff --git a/python/tests/test_base.py b/python/tests/test_base.py @@ -143,7 +143,9 @@ class TestVoteBase(TestEvmVoteProposal): (tx_hash, o) = c.vote(self.voter_address, self.alice, 1) self.rpc.do(o) - # majority, don't care about deadline + self.backend.mine_blocks(100) + + # majority, but not cancel, we care about deadline nonce_oracle = RPCNonceOracle(self.trent, conn=self.conn) c = Voter(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) (tx_hash, o) = c.scan(self.voter_address, self.trent, 0, 0) @@ -168,7 +170,6 @@ class TestVoteBase(TestEvmVoteProposal): r = self.rpc.do(o) proposal = c.parse_proposal(r) self.assertEqual(proposal.state & ProposalState.SCANNED, ProposalState.SCANNED) - self.assertEqual(proposal.state & ProposalState.IMMEDIATE, ProposalState.IMMEDIATE) (tx_hash, o) = c.finalize_vote(self.voter_address, self.trent) self.rpc.do(o) diff --git a/python/tests/test_events.py b/python/tests/test_events.py @@ -122,7 +122,6 @@ class TestVoteEvents(TestEvmVote): self.assertEqual(int(topic.contents[3], 16), 0) - def test_event_cancelled(self): half_supply = int(self.initial_supply / 2) description = hash_of_foo diff --git a/solidity/Voter.sol b/solidity/Voter.sol @@ -195,8 +195,14 @@ contract ERC20Vote { proposalIdxLock[msg.sender] = currentProposal; balanceOf[msg.sender] += _value; proposal.total += _value; - if (haveQuota(proposal)) { - proposal.state |= STATE_IMMEDIATE; + if (haveQuotaFor(proposal, proposal.total)) { + if (haveQuotaFor(proposal, proposal.cancelVotes)) { + proposal.state |= STATE_CANCELLED | STATE_IMMEDIATE; + } + if (proposal.options.length < 2) { + proposal.state |= STATE_IMMEDIATE; + } + } } @@ -216,20 +222,15 @@ contract ERC20Vote { // will set immediate termination and cancelled flag if has target vote majority function voteCancel(uint256 _value) public returns (bool) { Proposal storage proposal; - uint256 l_total_m; mustAccount(msg.sender, voterRegistry); proposal = proposals[currentProposal]; if (!voteable(proposal)) { return false; } - voteCore(proposal, _value); proposal.cancelVotes += _value; + voteCore(proposal, _value); - l_total_m = proposal.cancelVotes * 1000000; - if (l_total_m / proposal.supply >= proposal.targetVotePpm) { - proposal.state |= STATE_CANCELLED | STATE_IMMEDIATE; - } return true; } @@ -308,17 +309,18 @@ contract ERC20Vote { proposal = proposals[currentProposal]; require(proposal.state & STATE_FINAL == 0, "ERR_ALREADY_STATE_FINAL"); - //require(proposal.state & STATE_SCANNED > 0, "ERR_SCAN_FIRST"); if (checkSupply(proposal) == 0) { return false; } - proposal.state |= STATE_FINAL; - - if (!haveQuota(proposal)) { + if (block.number > proposal.blockDeadline) { + require(proposal.state & STATE_CANCELLED == 0, "ERR_PREMATURE"); + } + if (!haveQuotaFor(proposal, proposal.total)) { proposal.state |= STATE_INSUFFICIENT; r = true; - } else { } + proposal.state |= STATE_FINAL; + emit ProposalCompleted(currentProposal - 1, proposal.state & STATE_CANCELLED > 0, r, proposal.total); currentProposal += 1; @@ -326,13 +328,12 @@ contract ERC20Vote { } // check if target vote count has been met - function haveQuota(Proposal storage proposal) private view returns (bool) { + function haveQuotaFor(Proposal storage proposal, uint256 _value) private view returns (bool) { uint256 l_total_m; - l_total_m = proposal.total * 1000000; + l_total_m = _value * 1000000; return l_total_m / proposal.supply >= proposal.targetVotePpm; } - // should be checked for proposal creation, each recorded vote and finalization. function checkSupply(Proposal storage proposal) private returns (uint256) { bool r;