evm-tokenvote

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

commit 96f44662a59f0e50efb792fd8f2040cfa49bbe2a
parent db2a765ca99570237283e82fc098fe6ee9714858
Author: lash <dev@holbrook.no>
Date:   Wed, 28 Jun 2023 12:55:15 +0100

Separate vote option addition from proposal creation

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/unittest/base.py | 1-
Mpython/evm_tokenvote/voter.py | 57+++++++++++++++++++++++++++++++++++++++++++--------------
Mpython/setup.cfg | 4++--
Mpython/tests/test_option.py | 38++++++++++++++++++++++++++++++++++----
Msolidity/Voter.sol | 21++++++++++++---------
8 files changed, 95 insertions(+), 34 deletions(-)

diff --git a/python/evm_tokenvote/data/Voter.bin b/python/evm_tokenvote/data/Voter.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b50604051620039ef380380620039ef833981810160405281019062000037919062000486565b620000416200027f565b846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600181908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000155602082015181600101908051906020019062000157929190620002fd565b506040820151816002019080519060200190620001769291906200034f565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548162ffffff021916908362ffffff1602179055506101008201518160070160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160070160176101000a81548160ff021916908360ff1602179055506101408201518160070160186101000a81548160ff021916908360ff1602179055505050600160048190555083600560006101000a81548160ff0219169083151502179055505050505050620004f8565b60405180610160016040528060008019168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b8280548282559060005260206000209081019282156200033c579160200282015b828111156200033b5782518255916020019190600101906200031e565b5b5090506200034b9190620003a1565b5090565b8280548282559060005260206000209081019282156200038e579160200282015b828111156200038d57825182559160200191906001019062000370565b5b5090506200039d9190620003c0565b5090565b5b80821115620003bc576000816000905550600101620003a2565b5090565b5b80821115620003db576000816000905550600101620003c1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200041182620003e4565b9050919050565b620004238162000404565b81146200042f57600080fd5b50565b600081519050620004438162000418565b92915050565b60008115159050919050565b620004608162000449565b81146200046c57600080fd5b50565b600081519050620004808162000455565b92915050565b60008060008060808587031215620004a357620004a2620003df565b5b6000620004b38782880162000432565b9450506020620004c6878288016200046f565b9350506040620004d98782880162000432565b9250506060620004ec8782880162000432565b91505092959194509250565b6134e780620005086000396000f3fe608060405234801561001057600080fd5b506004361061011d576000357c010000000000000000000000000000000000000000000000000000000090048063826d9873116100b4578063ba32941411610083578063ba3294141461032c578063c7f758a81461035c578063e99a943e1461038c578063fc0c546a146103bc5761011d565b8063826d98731461026c578063843851911461029c5780638bb52213146102cc578063b05c65ba146102fc5761011d565b806341ec6870116100f057806341ec6870146101d05780634bb278f3146101ee578063509bd3371461020c57806370a082311461023c5761011d565b80630121b93f146101225780631ce30927146101525780632e1a7d4d146101825780633ccfd60b146101b2575b600080fd5b61013c600480360381019061013791906122e9565b6103da565b6040516101499190612331565b60405180910390f35b61016c6004803603810190610167919061234c565b610456565b60405161017991906123a5565b60405180910390f35b61019c600480360381019061019791906122e9565b6104b2565b6040516101a991906123cf565b60405180910390f35b6101ba610544565b6040516101c791906123cf565b60405180910390f35b6101d86108a1565b6040516101e591906126d7565b60405180910390f35b6101f6610ad3565b6040516102039190612331565b60405180910390f35b6102266004803603810190610221919061234c565b610cdf565b6040516102339190612331565b60405180910390f35b61025660048036038101906102519190612725565b610e03565b60405161026391906123cf565b60405180910390f35b610286600480360381019061028191906122e9565b610e1b565b6040516102939190612331565b60405180910390f35b6102b660048036038101906102b191906122e9565b610eb7565b6040516102c391906123cf565b60405180910390f35b6102e660048036038101906102e1919061277e565b610ef9565b6040516102f39190612331565b60405180910390f35b6103166004803603810190610311919061296f565b6111ce565b60405161032391906123cf565b60405180910390f35b6103466004803603810190610341919061234c565b611500565b60405161035391906123cf565b60405180910390f35b610376600480360381019061037191906122e9565b6115bc565b60405161038391906126d7565b60405180910390f35b6103a660048036038101906103a191906129f2565b611799565b6040516103b391906123cf565b60405180910390f35b6103c46117b3565b6040516103d19190612a54565b60405180910390f35b60008061040933600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117d7565b60016004548154811061041f5761041e612a6f565b5b90600052602060002090600802019050600281600101805490501061044357600080fd5b61044e600084610cdf565b915050919050565b600080600180856104679190612acd565b8154811061047857610477612a6f565b5b9060005260206000209060080201905080600101838154811061049e5761049d612a6f565b5b906000526020600020015491505092915050565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548214610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90612b5e565b60405180910390fd5b61053d610544565b9050919050565b600080600060606000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403610658576001600454815481106105ed576105ec612a6f565b5b90600052602060002090600802019350600060028560070160179054906101000a900460ff161660ff1611610657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e90612bca565b60405180910390fd5b5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16338260405160240161072c929190612bea565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516107b69190612c84565b6000604051808303816000865af19150503d80600081146107f3576040519150601f19603f3d011682016040523d82523d6000602084013e6107f8565b606091505b50809350819450505082610841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083890612ce7565b60405180910390fd5b818060200190518101906108559190612d33565b925082610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90612dac565b60405180910390fd5b8094505050505090565b6108a961214d565b60006001600454815481106108c1576108c0612a6f565b5b90600052602060002090600802019050600060018260070160179054906101000a900460ff161660ff161161092b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092290612e18565b60405180910390fd5b8060405180610160016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561099157602002820191906000526020600020905b81548152602001906001019080831161097d575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109e957602002820191906000526020600020905b8154815260200190600101908083116109d5575b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016007820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160179054906101000a900460ff1660ff1660ff1681526020016007820160189054906101000a900460ff1660ff1660ff168152505091505090565b6000806000600160045481548110610aee57610aed612a6f565b5b90600052602060002090600802019150600060028360070160179054906101000a900460ff161660ff1614610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f90612e84565b60405180910390fd5b6000610b63836119b0565b03610b7357600092505050610cdc565b8160060154431115610bda57600060808360070160179054906101000a900460ff161660ff1614610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090612bca565b60405180910390fd5b5b610be8828360050154611c61565b610c215760088260070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600190505b60028260070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550801515600060808460070160179054906101000a900460ff161660ff161115156001600454610c809190612ea4565b7f2d899e808be4b1d81a259d3f56d6d5c829a7cc913a35373a29f6363ebbb2c6c38560050154604051610cb391906123cf565b60405180910390a4600160046000828254610cce9190612acd565b925050819055508015925050505b90565b600080610d0e33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117d7565b600160045481548110610d2457610d23612a6f565b5b90600052602060002090600802019050610d3d81611ca9565b610d4b576000915050610dfd565b600081600101805490501115610da55780600101805490508410610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90612f24565b60405180910390fd5b5b610daf8184611e39565b600081600101805490501115610df75782816002018581548110610dd657610dd5612a6f565b5b906000526020600020016000828254610def9190612acd565b925050819055505b60019150505b92915050565b60066020528060005260406000206000915090505481565b600080610e4a33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117d7565b600160045481548110610e6057610e5f612a6f565b5b90600052602060002090600802019050610e7981611ca9565b610e87576000915050610eb2565b82816003016000828254610e9b9190612acd565b92505081905550610eac8184611e39565b60019150505b919050565b60008060018084610ec89190612acd565b81548110610ed957610ed8612a6f565b5b906000526020600020906008020190508060010180549050915050919050565b6000806000806000806000806001808b610f139190612acd565b81548110610f2457610f23612a6f565b5b90600052602060002090600802019650600060408860070160179054906101000a900460ff161660ff1603610f9b574387600601541115610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190612bca565b60405180910390fd5b5b600060048860070160179054906101000a900460ff161660ff161115610fcb5760009750505050505050506111c8565b600087600101805490500361101a5760048760070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060019750505050505050506111c8565b8660070160189054906101000a900460ff169150866001018054905089836110429190612f44565b60ff1611156110615781876001018054905061105e9190612f79565b98505b818961106d9190612f44565b98508660070160179054906101000a900460ff1690508195505b8860ff168660ff16101561111657866002018660ff16815481106110ae576110ad612a6f565b5b906000526020600020015492506000831180156110ca57508383145b156110da576010811790506110f4565b838311156110f3578293508560ff169450601019811690505b5b6001826111019190612f44565b9150858061110e90612fae565b965050611087565b818760070160186101000a81548160ff021916908360ff160217905550808760070160176101000a81548160ff021916908360ff16021790555086600101805490508760070160189054906101000a900460ff1660ff16106111a35760048760070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b600060048860070160179054906101000a900460ff161660ff16119750505050505050505b92915050565b60006111d861214d565b60008061120733600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117d7565b61010087511061124c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124390613023565b60405180910390fd5b3383610100019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505087836000018181525050868360200181905250865167ffffffffffffffff8111156112b3576112b2612800565b5b6040519080825280602002602001820160405280156112e15781602001602082028036833780820191505090505b508360400181905250848360e0019062ffffff16908162ffffff1681525050854361130c9190612acd565b9050808360c00181815250506001805490509150600183610120019060ff16908160ff168152505060018390806001815401808255809150506001900390600052602060002090600802016000909190919091506000820151816000015560208201518160010190805190602001906113869291906121cb565b5060408201518160020190805190602001906113a3929190612218565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548162ffffff021916908362ffffff1602179055506101008201518160070160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160070160176101000a81548160ff021916908360ff1602179055506101408201518160070160186101000a81548160ff021916908360ff16021790555050506114a96001838154811061149657611495612a6f565b5b90600052602060002090600802016119b0565b8360800181815250506001826114bf9190612ea4565b8562ffffff16827f5a41400aa51d78e9e5ca645b0d045817eaa7d90e4344d773fdbe24ffb183d3ce60405160405180910390a4819350505050949350505050565b600080600180856115119190612acd565b8154811061152257611521612a6f565b5b9060005260206000209060080201905060008160010180549050036115915760008314611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b9061308f565b60405180910390fd5b80600501549150506115b6565b8060020183815481106115a7576115a6612a6f565b5b90600052602060002001549150505b92915050565b6115c461214d565b600180836115d29190612acd565b815481106115e3576115e2612a6f565b5b906000526020600020906008020160405180610160016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561165657602002820191906000526020600020905b815481526020019060010190808311611642575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156116ae57602002820191906000526020600020905b81548152602001906001019080831161169a575b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016007820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160179054906101000a900460ff1660ff1660ff1681526020016007820160189054906101000a900460ff1660ff1660ff16815250509050919050565b600060606117a9858286866111ce565b9150509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118165750506119ac565b8273ffffffffffffffffffffffffffffffffffffffff168460405160240161183e9190612a54565b6040516020818303038152906040527f3ef25013000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516118c89190612c84565b6000604051808303816000865af19150503d8060008114611905576040519150601f19603f3d011682016040523d82523d6000602084013e61190a565b606091505b50809250819350505081611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a906130fb565b60405180910390fd5b808060200190518101906119679190612d33565b9150816119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a090613167565b60405180910390fd5b50505b5050565b600080606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611a7f9190612c84565b6000604051808303816000865af19150503d8060008114611abc576040519150601f19603f3d011682016040523d82523d6000602084013e611ac1565b606091505b50809350819450505082611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0190612ce7565b60405180910390fd5b81806020019051810190611b1e919061319c565b905060008111611b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5a90613215565b60405180910390fd5b6000856004015403611b7d57808560040181905550611c55565b84600401548114611c545760208560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060028560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600560009054906101000a900460ff1615611c5357600160046000828254611c109190612acd565b9250508190555060808560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060009350505050611c5c565b5b5b8093505050505b919050565b600080620f424083611c739190613235565b90508360070160009054906101000a900462ffffff1662ffffff16846004015482611c9e91906132a6565b101591505092915050565b60008060018360070160179054906101000a900460ff161660ff1611611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90613323565b60405180910390fd5b6000611d0f836119b0565b03611d1d5760009050611e34565b43826006015411611d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5a9061338f565b60405180910390fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611e2f57600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e25906133fb565b60405180910390fd5b5b600190505b919050565b6000606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16333085604051602401611e899392919061347a565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611f139190612c84565b6000604051808303816000865af19150503d8060008114611f50576040519150601f19603f3d011682016040523d82523d6000602084013e611f55565b606091505b50809250819350505081611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9590612ce7565b60405180910390fd5b80806020019051810190611fb29190612d33565b915081611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb90612dac565b60405180910390fd5b600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120899190612acd565b92505081905550828460050160008282546120a49190612acd565b925050819055506120b9848560050154611c61565b15612147576120cc848560030154611c61565b156121055760406080178460070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b6002846001018054905010156121465760408460070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b5b50505050565b60405180610160016040528060008019168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b828054828255906000526020600020908101928215612207579160200282015b828111156122065782518255916020019190600101906121eb565b5b5090506122149190612265565b5090565b828054828255906000526020600020908101928215612254579160200282015b82811115612253578251825591602001919060010190612238565b5b5090506122619190612282565b5090565b5b8082111561227e576000816000905550600101612266565b5090565b5b8082111561229b576000816000905550600101612283565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6122c6816122b3565b81146122d157600080fd5b50565b6000813590506122e3816122bd565b92915050565b6000602082840312156122ff576122fe6122a9565b5b600061230d848285016122d4565b91505092915050565b60008115159050919050565b61232b81612316565b82525050565b60006020820190506123466000830184612322565b92915050565b60008060408385031215612363576123626122a9565b5b6000612371858286016122d4565b9250506020612382858286016122d4565b9150509250929050565b6000819050919050565b61239f8161238c565b82525050565b60006020820190506123ba6000830184612396565b92915050565b6123c9816122b3565b82525050565b60006020820190506123e460008301846123c0565b92915050565b6123f38161238c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061243183836123ea565b60208301905092915050565b6000602082019050919050565b6000612455826123f9565b61245f8185612404565b935061246a83612415565b8060005b8381101561249b5781516124828882612425565b975061248d8361243d565b92505060018101905061246e565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6124dd816122b3565b82525050565b60006124ef83836124d4565b60208301905092915050565b6000602082019050919050565b6000612513826124a8565b61251d81856124b3565b9350612528836124c4565b8060005b8381101561255957815161254088826124e3565b975061254b836124fb565b92505060018101905061252c565b5085935050505092915050565b600062ffffff82169050919050565b61257e81612566565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125af82612584565b9050919050565b6125bf816125a4565b82525050565b600060ff82169050919050565b6125db816125c5565b82525050565b6000610160830160008301516125fa60008601826123ea565b5060208301518482036020860152612612828261244a565b9150506040830151848203604086015261262c8282612508565b915050606083015161264160608601826124d4565b50608083015161265460808601826124d4565b5060a083015161266760a08601826124d4565b5060c083015161267a60c08601826124d4565b5060e083015161268d60e0860182612575565b506101008301516126a26101008601826125b6565b506101208301516126b76101208601826125d2565b506101408301516126cc6101408601826125d2565b508091505092915050565b600060208201905081810360008301526126f181846125e1565b905092915050565b612702816125a4565b811461270d57600080fd5b50565b60008135905061271f816126f9565b92915050565b60006020828403121561273b5761273a6122a9565b5b600061274984828501612710565b91505092915050565b61275b816125c5565b811461276657600080fd5b50565b60008135905061277881612752565b92915050565b60008060408385031215612795576127946122a9565b5b60006127a3858286016122d4565b92505060206127b485828601612769565b9150509250929050565b6127c78161238c565b81146127d257600080fd5b50565b6000813590506127e4816127be565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612838826127ef565b810181811067ffffffffffffffff8211171561285757612856612800565b5b80604052505050565b600061286a61229f565b9050612876828261282f565b919050565b600067ffffffffffffffff82111561289657612895612800565b5b602082029050602081019050919050565b600080fd5b60006128bf6128ba8461287b565b612860565b905080838252602082019050602084028301858111156128e2576128e16128a7565b5b835b8181101561290b57806128f788826127d5565b8452602084019350506020810190506128e4565b5050509392505050565b600082601f83011261292a576129296127ea565b5b813561293a8482602086016128ac565b91505092915050565b61294c81612566565b811461295757600080fd5b50565b60008135905061296981612943565b92915050565b60008060008060808587031215612989576129886122a9565b5b6000612997878288016127d5565b945050602085013567ffffffffffffffff8111156129b8576129b76122ae565b5b6129c487828801612915565b93505060406129d5878288016122d4565b92505060606129e68782880161295a565b91505092959194509250565b600080600060608486031215612a0b57612a0a6122a9565b5b6000612a19868287016127d5565b9350506020612a2a868287016122d4565b9250506040612a3b8682870161295a565b9150509250925092565b612a4e816125a4565b82525050565b6000602082019050612a696000830184612a45565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ad8826122b3565b9150612ae3836122b3565b9250828201905080821115612afb57612afa612a9e565b5b92915050565b600082825260208201905092915050565b7f4552525f4d5553545f57495448445241575f414c4c0000000000000000000000600082015250565b6000612b48601583612b01565b9150612b5382612b12565b602082019050919050565b60006020820190508181036000830152612b7781612b3b565b9050919050565b7f4552525f5052454d415455524500000000000000000000000000000000000000600082015250565b6000612bb4600d83612b01565b9150612bbf82612b7e565b602082019050919050565b60006020820190508181036000830152612be381612ba7565b9050919050565b6000604082019050612bff6000830185612a45565b612c0c60208301846123c0565b9392505050565b600081519050919050565b600081905092915050565b60005b83811015612c47578082015181840152602081019050612c2c565b60008484015250505050565b6000612c5e82612c13565b612c688185612c1e565b9350612c78818560208601612c29565b80840191505092915050565b6000612c908284612c53565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b6000612cd1600983612b01565b9150612cdc82612c9b565b602082019050919050565b60006020820190508181036000830152612d0081612cc4565b9050919050565b612d1081612316565b8114612d1b57600080fd5b50565b600081519050612d2d81612d07565b92915050565b600060208284031215612d4957612d486122a9565b5b6000612d5784828501612d1e565b91505092915050565b7f4552525f5452414e534645520000000000000000000000000000000000000000600082015250565b6000612d96600c83612b01565b9150612da182612d60565b602082019050919050565b60006020820190508181036000830152612dc581612d89565b9050919050565b7f4552525f4e4f5f43555252454e545f50524f504f53414c000000000000000000600082015250565b6000612e02601783612b01565b9150612e0d82612dcc565b602082019050919050565b60006020820190508181036000830152612e3181612df5565b9050919050565b7f4552525f414c52454144595f53544154455f46494e414c000000000000000000600082015250565b6000612e6e601783612b01565b9150612e7982612e38565b602082019050919050565b60006020820190508181036000830152612e9d81612e61565b9050919050565b6000612eaf826122b3565b9150612eba836122b3565b9250828203905081811115612ed257612ed1612a9e565b5b92915050565b7f4552525f4f5054494f4e5f494e56414c49440000000000000000000000000000600082015250565b6000612f0e601283612b01565b9150612f1982612ed8565b602082019050919050565b60006020820190508181036000830152612f3d81612f01565b9050919050565b6000612f4f826125c5565b9150612f5a836125c5565b9250828201905060ff811115612f7357612f72612a9e565b5b92915050565b6000612f84826125c5565b9150612f8f836125c5565b9250828203905060ff811115612fa857612fa7612a9e565b5b92915050565b6000612fb9826125c5565b915060ff8203612fcc57612fcb612a9e565b5b600182019050919050565b7f4552525f544f4f5f4d414e595f4f5054494f4e53000000000000000000000000600082015250565b600061300d601483612b01565b915061301882612fd7565b602082019050919050565b6000602082019050818103600083015261303c81613000565b9050919050565b7f4552525f4e4f5f4f5054494f4e53000000000000000000000000000000000000600082015250565b6000613079600e83612b01565b915061308482613043565b602082019050919050565b600060208201905081810360008301526130a88161306c565b9050919050565b7f4552525f52454749535452590000000000000000000000000000000000000000600082015250565b60006130e5600c83612b01565b91506130f0826130af565b602082019050919050565b60006020820190508181036000830152613114816130d8565b9050919050565b7f4552525f554e415554485f4143434f554e540000000000000000000000000000600082015250565b6000613151601283612b01565b915061315c8261311b565b602082019050919050565b6000602082019050818103600083015261318081613144565b9050919050565b600081519050613196816122bd565b92915050565b6000602082840312156131b2576131b16122a9565b5b60006131c084828501613187565b91505092915050565b7f4552525f5a45524f5f535550504c590000000000000000000000000000000000600082015250565b60006131ff600f83612b01565b915061320a826131c9565b602082019050919050565b6000602082019050818103600083015261322e816131f2565b9050919050565b6000613240826122b3565b915061324b836122b3565b9250828202613259816122b3565b915082820484148315176132705761326f612a9e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006132b1826122b3565b91506132bc836122b3565b9250826132cc576132cb613277565b5b828204905092915050565b7f4552525f50524f504f53414c5f494e4143544956450000000000000000000000600082015250565b600061330d601583612b01565b9150613318826132d7565b602082019050919050565b6000602082019050818103600083015261333c81613300565b9050919050565b7f4552525f444541444c494e450000000000000000000000000000000000000000600082015250565b6000613379600c83612b01565b915061338482613343565b602082019050919050565b600060208201905081810360008301526133a88161336c565b9050919050565b7f4552525f57495448445241575f46495253540000000000000000000000000000600082015250565b60006133e5601283612b01565b91506133f0826133af565b602082019050919050565b60006020820190508181036000830152613414816133d8565b9050919050565b6000819050919050565b600061344061343b61343684612584565b61341b565b612584565b9050919050565b600061345282613425565b9050919050565b600061346482613447565b9050919050565b61347481613459565b82525050565b600060608201905061348f6000830186612a45565b61349c602083018561346b565b6134a960408301846123c0565b94935050505056fea2646970667358221220fc30bb4f18b8e599c842be6c0141bfe006fac3b7231be11f1a3d6574bab563ae64736f6c63430008130033 -\ No newline at end of file +60806040523480156200001157600080fd5b506040516200379638038062003796833981810160405281019062000037919062000486565b620000416200027f565b846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600181908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000155602082015181600101908051906020019062000157929190620002fd565b506040820151816002019080519060200190620001769291906200034f565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548162ffffff021916908362ffffff1602179055506101008201518160070160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160070160176101000a81548160ff021916908360ff1602179055506101408201518160070160186101000a81548160ff021916908360ff1602179055505050600160048190555083600560006101000a81548160ff0219169083151502179055505050505050620004f8565b60405180610160016040528060008019168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b8280548282559060005260206000209081019282156200033c579160200282015b828111156200033b5782518255916020019190600101906200031e565b5b5090506200034b9190620003a1565b5090565b8280548282559060005260206000209081019282156200038e579160200282015b828111156200038d57825182559160200191906001019062000370565b5b5090506200039d9190620003c0565b5090565b5b80821115620003bc576000816000905550600101620003a2565b5090565b5b80821115620003db576000816000905550600101620003c1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200041182620003e4565b9050919050565b620004238162000404565b81146200042f57600080fd5b50565b600081519050620004438162000418565b92915050565b60008115159050919050565b620004608162000449565b81146200046c57600080fd5b50565b600081519050620004808162000455565b92915050565b60008060008060808587031215620004a357620004a2620003df565b5b6000620004b38782880162000432565b9450506020620004c6878288016200046f565b9350506040620004d98782880162000432565b9250506060620004ec8782880162000432565b91505092959194509250565b61328e80620005086000396000f3fe608060405234801561001057600080fd5b506004361061011d576000357c010000000000000000000000000000000000000000000000000000000090048063826d9873116100b4578063ba32941411610083578063ba32941414610318578063c7f758a814610348578063e99a943e14610378578063fc0c546a146103a85761011d565b8063826d98731461026c578063843851911461029c57806386d39cbc146102cc5780638bb52213146102e85761011d565b806341ec6870116100f057806341ec6870146101d05780634bb278f3146101ee578063509bd3371461020c57806370a082311461023c5761011d565b80630121b93f146101225780631ce30927146101525780632e1a7d4d146101825780633ccfd60b146101b2575b600080fd5b61013c60048036038101906101379190612298565b6103c6565b60405161014991906122e0565b60405180910390f35b61016c600480360381019061016791906122fb565b610442565b6040516101799190612354565b60405180910390f35b61019c60048036038101906101979190612298565b61049e565b6040516101a9919061237e565b60405180910390f35b6101ba610530565b6040516101c7919061237e565b60405180910390f35b6101d861088d565b6040516101e59190612686565b60405180910390f35b6101f6610abf565b60405161020391906122e0565b60405180910390f35b610226600480360381019061022191906122fb565b610ccb565b60405161023391906122e0565b60405180910390f35b610256600480360381019061025191906126d4565b610def565b604051610263919061237e565b60405180910390f35b61028660048036038101906102819190612298565b610e07565b60405161029391906122e0565b60405180910390f35b6102b660048036038101906102b19190612298565b610ea3565b6040516102c3919061237e565b60405180910390f35b6102e660048036038101906102e1919061272d565b610ee5565b005b61030260048036038101906102fd9190612799565b610f72565b60405161030f91906122e0565b60405180910390f35b610332600480360381019061032d91906122fb565b611247565b60405161033f919061237e565b60405180910390f35b610362600480360381019061035d9190612298565b611303565b60405161036f9190612686565b60405180910390f35b610392600480360381019061038d9190612805565b6114e0565b60405161039f919061237e565b60405180910390f35b6103b0611771565b6040516103bd9190612867565b60405180910390f35b6000806103f533600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611795565b60016004548154811061040b5761040a612882565b5b90600052602060002090600802019050600281600101805490501061042f57600080fd5b61043a600084610ccb565b915050919050565b6000806001808561045391906128e0565b8154811061046457610463612882565b5b9060005260206000209060080201905080600101838154811061048a57610489612882565b5b906000526020600020015491505092915050565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548214610521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051890612971565b60405180910390fd5b610529610530565b9050919050565b600080600060606000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403610644576001600454815481106105d9576105d8612882565b5b90600052602060002090600802019350600060028560070160179054906101000a900460ff161660ff1611610643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063a906129dd565b60405180910390fd5b5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1633826040516024016107189291906129fd565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516107a29190612a97565b6000604051808303816000865af19150503d80600081146107df576040519150601f19603f3d011682016040523d82523d6000602084013e6107e4565b606091505b5080935081945050508261082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490612afa565b60405180910390fd5b818060200190518101906108419190612b46565b925082610883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087a90612bbf565b60405180910390fd5b8094505050505090565b61089561210b565b60006001600454815481106108ad576108ac612882565b5b90600052602060002090600802019050600060018260070160179054906101000a900460ff161660ff1611610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e90612c2b565b60405180910390fd5b8060405180610160016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561097d57602002820191906000526020600020905b815481526020019060010190808311610969575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109d557602002820191906000526020600020905b8154815260200190600101908083116109c1575b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016007820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160179054906101000a900460ff1660ff1660ff1681526020016007820160189054906101000a900460ff1660ff1660ff168152505091505090565b6000806000600160045481548110610ada57610ad9612882565b5b90600052602060002090600802019150600060028360070160179054906101000a900460ff161660ff1614610b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3b90612c97565b60405180910390fd5b6000610b4f8361196e565b03610b5f57600092505050610cc8565b8160060154431115610bc657600060808360070160179054906101000a900460ff161660ff1614610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc906129dd565b60405180910390fd5b5b610bd4828360050154611c1f565b610c0d5760088260070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600190505b60028260070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550801515600060808460070160179054906101000a900460ff161660ff161115156001600454610c6c9190612cb7565b7f2d899e808be4b1d81a259d3f56d6d5c829a7cc913a35373a29f6363ebbb2c6c38560050154604051610c9f919061237e565b60405180910390a4600160046000828254610cba91906128e0565b925050819055508015925050505b90565b600080610cfa33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611795565b600160045481548110610d1057610d0f612882565b5b90600052602060002090600802019050610d2981611c67565b610d37576000915050610de9565b600081600101805490501115610d915780600101805490508410610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8790612d37565b60405180910390fd5b5b610d9b8184611df7565b600081600101805490501115610de35782816002018581548110610dc257610dc1612882565b5b906000526020600020016000828254610ddb91906128e0565b925050819055505b60019150505b92915050565b60066020528060005260406000206000915090505481565b600080610e3633600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611795565b600160045481548110610e4c57610e4b612882565b5b90600052602060002090600802019050610e6581611c67565b610e73576000915050610e9e565b82816003016000828254610e8791906128e0565b92505081905550610e988184611df7565b60019150505b919050565b60008060018084610eb491906128e0565b81548110610ec557610ec4612882565b5b906000526020600020906008020190508060010180549050915050919050565b600060018084610ef591906128e0565b81548110610f0657610f05612882565b5b90600052602060002090600802019050806001018290806001815401808255809150506001900390600052602060002001600090919091909150558060020160009080600181540180825580915050600190039060005260206000200160009091909190915055505050565b6000806000806000806000806001808b610f8c91906128e0565b81548110610f9d57610f9c612882565b5b90600052602060002090600802019650600060408860070160179054906101000a900460ff161660ff1603611014574387600601541115611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a906129dd565b60405180910390fd5b5b600060048860070160179054906101000a900460ff161660ff161115611044576000975050505050505050611241565b60008760010180549050036110935760048760070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055506001975050505050505050611241565b8660070160189054906101000a900460ff169150866001018054905089836110bb9190612d57565b60ff1611156110da578187600101805490506110d79190612d8c565b98505b81896110e69190612d57565b98508660070160179054906101000a900460ff1690508195505b8860ff168660ff16101561118f57866002018660ff168154811061112757611126612882565b5b9060005260206000200154925060008311801561114357508383145b156111535760108117905061116d565b8383111561116c578293508560ff169450601019811690505b5b60018261117a9190612d57565b9150858061118790612dc1565b965050611100565b818760070160186101000a81548160ff021916908360ff160217905550808760070160176101000a81548160ff021916908360ff16021790555086600101805490508760070160189054906101000a900460ff1660ff161061121c5760048760070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b600060048860070160179054906101000a900460ff161660ff16119750505050505050505b92915050565b6000806001808561125891906128e0565b8154811061126957611268612882565b5b9060005260206000209060080201905060008160010180549050036112d857600083146112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c290612e36565b60405180910390fd5b80600501549150506112fd565b8060020183815481106112ee576112ed612882565b5b90600052602060002001549150505b92915050565b61130b61210b565b6001808361131991906128e0565b8154811061132a57611329612882565b5b906000526020600020906008020160405180610160016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561139d57602002820191906000526020600020905b815481526020019060010190808311611389575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156113f557602002820191906000526020600020905b8154815260200190600101908083116113e1575b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016007820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160179054906101000a900460ff1660ff1660ff1681526020016007820160189054906101000a900460ff1660ff1660ff16815250509050919050565b60006114ea61210b565b60008061151933600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611795565b3383610100019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505086836000018181525050848360e0019062ffffff16908162ffffff1681525050854361157e91906128e0565b9050808360c00181815250506001805490509150600183610120019060ff16908160ff168152505060018390806001815401808255809150506001900390600052602060002090600802016000909190919091506000820151816000015560208201518160010190805190602001906115f8929190612189565b5060408201518160020190805190602001906116159291906121d6565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548162ffffff021916908362ffffff1602179055506101008201518160070160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160070160176101000a81548160ff021916908360ff1602179055506101408201518160070160186101000a81548160ff021916908360ff160217905550505061171b6001838154811061170857611707612882565b5b906000526020600020906008020161196e565b8360800181815250506001826117319190612cb7565b8562ffffff16827f5a41400aa51d78e9e5ca645b0d045817eaa7d90e4344d773fdbe24ffb183d3ce60405160405180910390a48193505050509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117d457505061196a565b8273ffffffffffffffffffffffffffffffffffffffff16846040516024016117fc9190612867565b6040516020818303038152906040527f3ef25013000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516118869190612a97565b6000604051808303816000865af19150503d80600081146118c3576040519150601f19603f3d011682016040523d82523d6000602084013e6118c8565b606091505b50809250819350505081611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890612ea2565b60405180910390fd5b808060200190518101906119259190612b46565b915081611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90612f0e565b60405180910390fd5b50505b5050565b600080606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611a3d9190612a97565b6000604051808303816000865af19150503d8060008114611a7a576040519150601f19603f3d011682016040523d82523d6000602084013e611a7f565b606091505b50809350819450505082611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90612afa565b60405180910390fd5b81806020019051810190611adc9190612f43565b905060008111611b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1890612fbc565b60405180910390fd5b6000856004015403611b3b57808560040181905550611c13565b84600401548114611c125760208560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060028560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600560009054906101000a900460ff1615611c1157600160046000828254611bce91906128e0565b9250508190555060808560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060009350505050611c1a565b5b5b8093505050505b919050565b600080620f424083611c319190612fdc565b90508360070160009054906101000a900462ffffff1662ffffff16846004015482611c5c919061304d565b101591505092915050565b60008060018360070160179054906101000a900460ff161660ff1611611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb9906130ca565b60405180910390fd5b6000611ccd8361196e565b03611cdb5760009050611df2565b43826006015411611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1890613136565b60405180910390fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611ded57600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de3906131a2565b60405180910390fd5b5b600190505b919050565b6000606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16333085604051602401611e4793929190613221565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611ed19190612a97565b6000604051808303816000865af19150503d8060008114611f0e576040519150601f19603f3d011682016040523d82523d6000602084013e611f13565b606091505b50809250819350505081611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390612afa565b60405180910390fd5b80806020019051810190611f709190612b46565b915081611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa990612bbf565b60405180910390fd5b600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461204791906128e0565b925050819055508284600501600082825461206291906128e0565b92505081905550612077848560050154611c1f565b156121055761208a848560030154611c1f565b156120c35760406080178460070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b6002846001018054905010156121045760408460070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b5b50505050565b60405180610160016040528060008019168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b8280548282559060005260206000209081019282156121c5579160200282015b828111156121c45782518255916020019190600101906121a9565b5b5090506121d29190612223565b5090565b828054828255906000526020600020908101928215612212579160200282015b828111156122115782518255916020019190600101906121f6565b5b50905061221f9190612240565b5090565b5b8082111561223c576000816000905550600101612224565b5090565b5b80821115612259576000816000905550600101612241565b5090565b600080fd5b6000819050919050565b61227581612262565b811461228057600080fd5b50565b6000813590506122928161226c565b92915050565b6000602082840312156122ae576122ad61225d565b5b60006122bc84828501612283565b91505092915050565b60008115159050919050565b6122da816122c5565b82525050565b60006020820190506122f560008301846122d1565b92915050565b600080604083850312156123125761231161225d565b5b600061232085828601612283565b925050602061233185828601612283565b9150509250929050565b6000819050919050565b61234e8161233b565b82525050565b60006020820190506123696000830184612345565b92915050565b61237881612262565b82525050565b6000602082019050612393600083018461236f565b92915050565b6123a28161233b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006123e08383612399565b60208301905092915050565b6000602082019050919050565b6000612404826123a8565b61240e81856123b3565b9350612419836123c4565b8060005b8381101561244a57815161243188826123d4565b975061243c836123ec565b92505060018101905061241d565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61248c81612262565b82525050565b600061249e8383612483565b60208301905092915050565b6000602082019050919050565b60006124c282612457565b6124cc8185612462565b93506124d783612473565b8060005b838110156125085781516124ef8882612492565b97506124fa836124aa565b9250506001810190506124db565b5085935050505092915050565b600062ffffff82169050919050565b61252d81612515565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061255e82612533565b9050919050565b61256e81612553565b82525050565b600060ff82169050919050565b61258a81612574565b82525050565b6000610160830160008301516125a96000860182612399565b50602083015184820360208601526125c182826123f9565b915050604083015184820360408601526125db82826124b7565b91505060608301516125f06060860182612483565b5060808301516126036080860182612483565b5060a083015161261660a0860182612483565b5060c083015161262960c0860182612483565b5060e083015161263c60e0860182612524565b50610100830151612651610100860182612565565b50610120830151612666610120860182612581565b5061014083015161267b610140860182612581565b508091505092915050565b600060208201905081810360008301526126a08184612590565b905092915050565b6126b181612553565b81146126bc57600080fd5b50565b6000813590506126ce816126a8565b92915050565b6000602082840312156126ea576126e961225d565b5b60006126f8848285016126bf565b91505092915050565b61270a8161233b565b811461271557600080fd5b50565b60008135905061272781612701565b92915050565b600080604083850312156127445761274361225d565b5b600061275285828601612283565b925050602061276385828601612718565b9150509250929050565b61277681612574565b811461278157600080fd5b50565b6000813590506127938161276d565b92915050565b600080604083850312156127b0576127af61225d565b5b60006127be85828601612283565b92505060206127cf85828601612784565b9150509250929050565b6127e281612515565b81146127ed57600080fd5b50565b6000813590506127ff816127d9565b92915050565b60008060006060848603121561281e5761281d61225d565b5b600061282c86828701612718565b935050602061283d86828701612283565b925050604061284e868287016127f0565b9150509250925092565b61286181612553565b82525050565b600060208201905061287c6000830184612858565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128eb82612262565b91506128f683612262565b925082820190508082111561290e5761290d6128b1565b5b92915050565b600082825260208201905092915050565b7f4552525f4d5553545f57495448445241575f414c4c0000000000000000000000600082015250565b600061295b601583612914565b915061296682612925565b602082019050919050565b6000602082019050818103600083015261298a8161294e565b9050919050565b7f4552525f5052454d415455524500000000000000000000000000000000000000600082015250565b60006129c7600d83612914565b91506129d282612991565b602082019050919050565b600060208201905081810360008301526129f6816129ba565b9050919050565b6000604082019050612a126000830185612858565b612a1f602083018461236f565b9392505050565b600081519050919050565b600081905092915050565b60005b83811015612a5a578082015181840152602081019050612a3f565b60008484015250505050565b6000612a7182612a26565b612a7b8185612a31565b9350612a8b818560208601612a3c565b80840191505092915050565b6000612aa38284612a66565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b6000612ae4600983612914565b9150612aef82612aae565b602082019050919050565b60006020820190508181036000830152612b1381612ad7565b9050919050565b612b23816122c5565b8114612b2e57600080fd5b50565b600081519050612b4081612b1a565b92915050565b600060208284031215612b5c57612b5b61225d565b5b6000612b6a84828501612b31565b91505092915050565b7f4552525f5452414e534645520000000000000000000000000000000000000000600082015250565b6000612ba9600c83612914565b9150612bb482612b73565b602082019050919050565b60006020820190508181036000830152612bd881612b9c565b9050919050565b7f4552525f4e4f5f43555252454e545f50524f504f53414c000000000000000000600082015250565b6000612c15601783612914565b9150612c2082612bdf565b602082019050919050565b60006020820190508181036000830152612c4481612c08565b9050919050565b7f4552525f414c52454144595f53544154455f46494e414c000000000000000000600082015250565b6000612c81601783612914565b9150612c8c82612c4b565b602082019050919050565b60006020820190508181036000830152612cb081612c74565b9050919050565b6000612cc282612262565b9150612ccd83612262565b9250828203905081811115612ce557612ce46128b1565b5b92915050565b7f4552525f4f5054494f4e5f494e56414c49440000000000000000000000000000600082015250565b6000612d21601283612914565b9150612d2c82612ceb565b602082019050919050565b60006020820190508181036000830152612d5081612d14565b9050919050565b6000612d6282612574565b9150612d6d83612574565b9250828201905060ff811115612d8657612d856128b1565b5b92915050565b6000612d9782612574565b9150612da283612574565b9250828203905060ff811115612dbb57612dba6128b1565b5b92915050565b6000612dcc82612574565b915060ff8203612ddf57612dde6128b1565b5b600182019050919050565b7f4552525f4e4f5f4f5054494f4e53000000000000000000000000000000000000600082015250565b6000612e20600e83612914565b9150612e2b82612dea565b602082019050919050565b60006020820190508181036000830152612e4f81612e13565b9050919050565b7f4552525f52454749535452590000000000000000000000000000000000000000600082015250565b6000612e8c600c83612914565b9150612e9782612e56565b602082019050919050565b60006020820190508181036000830152612ebb81612e7f565b9050919050565b7f4552525f554e415554485f4143434f554e540000000000000000000000000000600082015250565b6000612ef8601283612914565b9150612f0382612ec2565b602082019050919050565b60006020820190508181036000830152612f2781612eeb565b9050919050565b600081519050612f3d8161226c565b92915050565b600060208284031215612f5957612f5861225d565b5b6000612f6784828501612f2e565b91505092915050565b7f4552525f5a45524f5f535550504c590000000000000000000000000000000000600082015250565b6000612fa6600f83612914565b9150612fb182612f70565b602082019050919050565b60006020820190508181036000830152612fd581612f99565b9050919050565b6000612fe782612262565b9150612ff283612262565b925082820261300081612262565b91508282048414831517613017576130166128b1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061305882612262565b915061306383612262565b9250826130735761307261301e565b5b828204905092915050565b7f4552525f50524f504f53414c5f494e4143544956450000000000000000000000600082015250565b60006130b4601583612914565b91506130bf8261307e565b602082019050919050565b600060208201905081810360008301526130e3816130a7565b9050919050565b7f4552525f444541444c494e450000000000000000000000000000000000000000600082015250565b6000613120600c83612914565b915061312b826130ea565b602082019050919050565b6000602082019050818103600083015261314f81613113565b9050919050565b7f4552525f57495448445241575f46495253540000000000000000000000000000600082015250565b600061318c601283612914565b915061319782613156565b602082019050919050565b600060208201905081810360008301526131bb8161317f565b9050919050565b6000819050919050565b60006131e76131e26131dd84612533565b6131c2565b612533565b9050919050565b60006131f9826131cc565b9050919050565b600061320b826131ee565b9050919050565b61321b81613200565b82525050565b60006060820190506132366000830186612858565b6132436020830185613212565b613250604083018461236f565b94935050505056fea2646970667358221220e2f7f0ebc8e9775df8b3c4cfe737c1850126f915eeca18688bf9da6e7b63465e64736f6c63430008130033 +\ 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":"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"}] +[{"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":"uint256","name":"_proposalIdx","type":"uint256"},{"internalType":"bytes32","name":"_optionDescription","type":"bytes32"}],"name":"addOption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"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"}] 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":"0x33d7951567d5c2450edaf9a2d5cbb7524ed08155bb54cea186fa20a5dee7bf98","license":"AGPL-3.0-or-later","urls":["bzz-raw://b4d5b12203b64475d1b4d1edb8f09b64f1b7ecde55a9989224760f18221a292d","dweb:/ipfs/QmZAkh1BbXCsPkffyWrdiSRe5DM5e8UyL9cq9mjBALSSXa"]}},"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":"uint256","name":"_proposalIdx","type":"uint256"},{"internalType":"bytes32","name":"_optionDescription","type":"bytes32"}],"name":"addOption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"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":"0x2d5e8f6eee6bc6494bab98acebc286031945ac3e3ede3bf2bfcd2ac046c863a3","license":"AGPL-3.0-or-later","urls":["bzz-raw://9faf11bc4b75e068ce9b41db27133a75d1204943fb030c75aa38d7099ad3ff39","dweb:/ipfs/QmYF3fZpCWvjkRFKWijJtK9tN8GrXgXw77J9UQy9pD4PUF"]}},"version":1} diff --git a/python/evm_tokenvote/unittest/base.py b/python/evm_tokenvote/unittest/base.py @@ -83,7 +83,6 @@ class TestEvmVoteProposal(TestEvmVote): self.proposal_block_height = self.rpc.do(o) - class TestEvmVoteRegistry(TestEvmVoteAccounts): def setUp(self): diff --git a/python/evm_tokenvote/voter.py b/python/evm_tokenvote/voter.py @@ -115,27 +115,15 @@ class Voter(TxFactory): return Voter.__bytecode - - def propose(self, contract_address, sender_address, description, block_deadline, target_vote_ppm=500000, options=[], tx_format=TxFormat.JSONRPC, id_generator=None): + def propose(self, contract_address, sender_address, description, block_deadline, target_vote_ppm=500000, tx_format=TxFormat.JSONRPC, id_generator=None): enc = ABIContractEncoder() - if len(options) == 0: - enc.method('propose') - else: - enc.method('proposeMulti') + enc.method('propose') enc.typ(ABIContractType.BYTES32) - if len(options) > 0: - enc.typ_literal('bytes32[]') enc.typ(ABIContractType.UINT256) enc.typ_literal('uint24') enc.bytes32(description) - if len(options) > 0: - enc.uint256(32*4) enc.uint256(block_deadline) enc.uintn(target_vote_ppm, 24) - if len(options) > 0: - enc.uint256(len(options)) - for v in options: - enc.bytes32(v) data = add_0x(enc.get()) tx = self.template(sender_address, contract_address, use_nonce=True) tx = self.set_code(tx, data) @@ -143,6 +131,47 @@ class Voter(TxFactory): return tx + def add_option(self, contract_address, sender_address, proposal_idx, description, tx_format=TxFormat.JSONRPC, id_generator=None): + enc = ABIContractEncoder() + enc.method('addOption') + enc.typ(ABIContractType.UINT256) + enc.typ(ABIContractType.BYTES32) + enc.uint256(proposal_idx) + enc.bytes32(description) + 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 propose(self, contract_address, sender_address, description, block_deadline, target_vote_ppm=500000, options=[], tx_format=TxFormat.JSONRPC, id_generator=None): +# enc = ABIContractEncoder() +# if len(options) == 0: +# enc.method('propose') +# else: +# enc.method('proposeMulti') +# enc.typ(ABIContractType.BYTES32) +# if len(options) > 0: +# enc.typ_literal('bytes32[]') +# enc.typ(ABIContractType.UINT256) +# enc.typ_literal('uint24') +# enc.bytes32(description) +# if len(options) > 0: +# enc.uint256(32*4) +# enc.uint256(block_deadline) +# enc.uintn(target_vote_ppm, 24) +# if len(options) > 0: +# enc.uint256(len(options)) +# for v in options: +# enc.bytes32(v) +# 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 vote(self, contract_address, sender_address, value, option=None, tx_format=TxFormat.JSONRPC, id_generator=None): enc = ABIContractEncoder() if option == None: diff --git a/python/setup.cfg b/python/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = evm_tokenvote -version = 0.0.1 +version = 0.0.2 description = Voting machine using ERC20 tokens as votes. author = Louis Holbrook author_email = dev@holbrook.no @@ -26,7 +26,7 @@ licence_files = [options] include_package_data = True -python_requires = >= 3.7 +python_requires = >= 3.8 packages = evm_tokenvote evm_tokenvote.unittest diff --git a/python/tests/test_option.py b/python/tests/test_option.py @@ -28,7 +28,19 @@ class TestVoteBase(TestEvmVote): def test_propose_multi(self): nonce_oracle = RPCNonceOracle(self.accounts[0], conn=self.conn) c = Voter(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) - (tx_hash, o) = c.propose(self.voter_address, self.accounts[0], hash_of_foo, 100, options=[hash_of_bar, hash_of_baz]) + (tx_hash, o) = c.propose(self.voter_address, self.accounts[0], hash_of_foo, 100) + self.rpc.do(o) + o = receipt(tx_hash) + r = self.rpc.do(o) + self.assertEqual(r['status'], 1) + + (tx_hash, o) = c.add_option(self.voter_address, self.accounts[0], 0, hash_of_bar) + self.rpc.do(o) + o = receipt(tx_hash) + r = self.rpc.do(o) + self.assertEqual(r['status'], 1) + + (tx_hash, o) = c.add_option(self.voter_address, self.accounts[0], 0, hash_of_baz) self.rpc.do(o) o = receipt(tx_hash) r = self.rpc.do(o) @@ -94,12 +106,18 @@ class TestVoteBase(TestEvmVote): nonce_oracle = RPCNonceOracle(self.accounts[0], conn=self.conn) c = Voter(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) - (tx_hash, o) = c.propose(self.voter_address, self.accounts[0], hash_of_foo, 100, options=[hash_of_bar, hash_of_baz]) + (tx_hash, o) = c.propose(self.voter_address, self.accounts[0], hash_of_foo, 100) self.rpc.do(o) o = block_latest() proposal_block_height = self.rpc.do(o) + (tx_hash, o) = c.add_option(self.voter_address, self.accounts[0], 0, hash_of_bar) + self.rpc.do(o) + + (tx_hash, o) = c.add_option(self.voter_address, self.accounts[0], 0, hash_of_baz) + self.rpc.do(o) + nonce_oracle = RPCNonceOracle(self.alice, conn=self.conn) c = Voter(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) (tx_hash, o) = c.vote(self.voter_address, self.alice, third_of_supply, option=1) @@ -170,7 +188,13 @@ class TestVoteBase(TestEvmVote): nonce_oracle = RPCNonceOracle(self.accounts[0], conn=self.conn) c = Voter(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) - (tx_hash, o) = c.propose(self.voter_address, self.accounts[0], hash_of_foo, 100, target_vote_ppm=1000000, options=[hash_of_foo, hash_of_bar, hash_of_baz]) + (tx_hash, o) = c.propose(self.voter_address, self.accounts[0], hash_of_foo, 100, target_vote_ppm=1000000) + self.rpc.do(o) + + (tx_hash, o) = c.add_option(self.voter_address, self.accounts[0], 0, hash_of_bar) + self.rpc.do(o) + + (tx_hash, o) = c.add_option(self.voter_address, self.accounts[0], 0, hash_of_baz) self.rpc.do(o) nonce_oracle = RPCNonceOracle(self.alice, conn=self.conn) @@ -245,7 +269,13 @@ class TestVoteBase(TestEvmVote): nonce_oracle = RPCNonceOracle(self.accounts[0], conn=self.conn) c = Voter(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle) - (tx_hash, o) = c.propose(self.voter_address, self.accounts[0], hash_of_foo, 100, options=[hash_of_foo, hash_of_bar, hash_of_baz]) + (tx_hash, o) = c.propose(self.voter_address, self.accounts[0], hash_of_foo, 100) + self.rpc.do(o) + + (tx_hash, o) = c.add_option(self.voter_address, self.accounts[0], 0, hash_of_bar) + self.rpc.do(o) + + (tx_hash, o) = c.add_option(self.voter_address, self.accounts[0], 0, hash_of_baz) self.rpc.do(o) nonce_oracle = RPCNonceOracle(self.alice, conn=self.conn) diff --git a/solidity/Voter.sol b/solidity/Voter.sol @@ -71,19 +71,17 @@ contract ERC20Vote { protectSupply = _protectSupply; } - // Propose a vote on the subject described by digest. - function proposeMulti(bytes32 _description, bytes32[] memory _options, uint256 _blockWait, uint24 _targetVotePpm) public returns (uint256) { + // create new proposal + function propose(bytes32 _description, uint256 _blockWait, uint24 _targetVotePpm) public returns (uint256) { Proposal memory l_proposal; uint256 l_proposalIndex; uint256 l_blockDeadline; mustAccount(msg.sender, proposerRegistry); - require(_options.length < 256, "ERR_TOO_MANY_OPTIONS"); + //require(_options.length < 256, "ERR_TOO_MANY_OPTIONS"); l_proposal.proposer = msg.sender; l_proposal.description = _description; - l_proposal.options = _options; - l_proposal.optionVotes = new uint256[](_options.length); l_proposal.targetVotePpm = _targetVotePpm; l_blockDeadline = block.number + _blockWait; l_proposal.blockDeadline = l_blockDeadline; @@ -96,11 +94,14 @@ contract ERC20Vote { return l_proposalIndex; } - // create new proposal without options - function propose(bytes32 _description, uint256 _blockWait, uint24 _targetVotePpm) public returns (uint256) { - bytes32[] memory options; + // Add a voting option to proposal + function addOption(uint256 _proposalIdx, bytes32 _optionDescription) public { + Proposal storage l_proposal; - return proposeMulti(_description, options, _blockWait, _targetVotePpm); + l_proposal = proposals[_proposalIdx + 1]; + + l_proposal.options.push(_optionDescription); + l_proposal.optionVotes.push(0); } // get proposal by index @@ -391,4 +392,6 @@ contract ERC20Vote { return l_value; } + + // supportsInterface TokenVoter f2e0bfeb }