evm-tokenvote

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

commit dce94752f6634fd5bc1d4ba5f4b45b06312d99aa
parent cf01cc4568e2ec89996858a4128e697c6d8d0d2a
Author: lash <dev@holbrook.no>
Date:   Mon, 24 Jul 2023 08:48:53 +0100

Set supply sample on correct proposal index

Diffstat:
Mpython/evm_tokenvote/data/Voter.bin | 4++--
Mpython/evm_tokenvote/data/Voter.json | 2+-
Mpython/evm_tokenvote/data/Voter.metadata.json | 2+-
Msolidity/Voter.sol | 24++++++++++++------------
4 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/python/evm_tokenvote/data/Voter.bin b/python/evm_tokenvote/data/Voter.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b5060405162003bdd38038062003bdd8339818101604052810190620000379190620004b3565b62000041620002a2565b846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001819080600181540180825580915050600190039060005260206000209060080201600090919091909150600082015181600001556020820151816001019080519060200190620001579291906200032a565b506040820151816002019080519060200190620001769291906200037c565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548162ffffff021916908362ffffff1602179055506101008201518160070160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160070160176101000a81548161ffff021916908361ffff1602179055506101408201518160070160196101000a81548160ff021916908360ff16021790555061016082015181600701601a6101000a81548160ff0219169083151502179055505050600160048190555083600560006101000a81548160ff021916908315150217905550505050505062000525565b60405180610180016040528060008019168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600061ffff168152602001600060ff1681526020016000151581525090565b82805482825590600052602060002090810192821562000369579160200282015b82811115620003685782518255916020019190600101906200034b565b5b509050620003789190620003ce565b5090565b828054828255906000526020600020908101928215620003bb579160200282015b82811115620003ba5782518255916020019190600101906200039d565b5b509050620003ca9190620003ed565b5090565b5b80821115620003e9576000816000905550600101620003cf565b5090565b5b8082111562000408576000816000905550600101620003ee565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200043e8262000411565b9050919050565b620004508162000431565b81146200045c57600080fd5b50565b600081519050620004708162000445565b92915050565b60008115159050919050565b6200048d8162000476565b81146200049957600080fd5b50565b600081519050620004ad8162000482565b92915050565b60008060008060808587031215620004d057620004cf6200040c565b5b6000620004e0878288016200045f565b9450506020620004f3878288016200049c565b935050604062000506878288016200045f565b925050606062000519878288016200045f565b91505092959194509250565b6136a880620005356000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c010000000000000000000000000000000000000000000000000000000090048063826d9873116100bf578063ad35e2831161008e578063ad35e2831461035e578063ba3294141461037c578063c7f758a8146103ac578063e99a943e146103dc578063fc0c546a1461040c57610133565b8063826d9873146102b257806384385191146102e257806386d39cbc146103125780638bb522131461032e57610133565b80633ccfd60b116101065780633ccfd60b146101f857806341ec6870146102165780634bb278f314610234578063509bd3371461025257806370a082311461028257610133565b80630121b93f146101385780631ce309271461016857806328e7a520146101985780632e1a7d4d146101c8575b600080fd5b610152600480360381019061014d9190612532565b61042a565b60405161015f919061257a565b60405180910390f35b610182600480360381019061017d9190612595565b6104a6565b60405161018f91906125ee565b60405180910390f35b6101b260048036038101906101ad9190612670565b610502565b6040516101bf91906126e6565b60405180910390f35b6101e260048036038101906101dd9190612532565b61059c565b6040516101ef91906126e6565b60405180910390f35b61020061062e565b60405161020d91906126e6565b60405180910390f35b61021e61098d565b60405161022b9190612a20565b60405180910390f35b61023c610bdf565b604051610249919061257a565b60405180910390f35b61026c60048036038101906102679190612595565b610e3e565b604051610279919061257a565b60405180910390f35b61029c60048036038101906102979190612a6e565b610f62565b6040516102a991906126e6565b60405180910390f35b6102cc60048036038101906102c79190612532565b610f7a565b6040516102d9919061257a565b60405180910390f35b6102fc60048036038101906102f79190612532565b611016565b60405161030991906126e6565b60405180910390f35b61032c60048036038101906103279190612a9b565b611058565b005b61034860048036038101906103439190612b07565b6110e5565b604051610355919061257a565b60405180910390f35b6103666113c9565b60405161037391906126e6565b60405180910390f35b61039660048036038101906103919190612595565b6113cf565b6040516103a391906126e6565b60405180910390f35b6103c660048036038101906103c19190612532565b61148b565b6040516103d39190612a20565b60405180910390f35b6103f660048036038101906103f19190612b47565b611686565b60405161040391906126e6565b60405180910390f35b61041461169e565b6040516104219190612ba9565b60405180910390f35b60008061045933600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166116c2565b60016004548154811061046f5761046e612bc4565b5b90600052602060002090600802019050600281600101805490501061049357600080fd5b61049e600084610e3e565b915050919050565b600080600180856104b79190612c22565b815481106104c8576104c7612bc4565b5b906000526020600020906008020190508060010183815481106104ee576104ed612bc4565b5b906000526020600020015491505092915050565b60008060007f67ca084db32598c571e2ad2dc8b95679c3fa14c63213935dfd8f0a158ff65c57600102870361053657600191505b81610576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056d90612cb3565b60405180910390fd5b610583878686600161189b565b905061058f8187611058565b8092505050949350505050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821461061f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061690612d1f565b60405180910390fd5b61062761062e565b9050919050565b600080600060606000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600454600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403610744576001600454815481106106d7576106d6612bc4565b5b90600052602060002090600802019350600060028560070160179054906101000a900461ffff161661ffff1611610743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073a90612d8b565b60405180910390fd5b5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163382604051602401610818929190612dab565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516108a29190612e45565b6000604051808303816000865af19150503d80600081146108df576040519150601f19603f3d011682016040523d82523d6000602084013e6108e4565b606091505b5080935081945050508261092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092490612ea8565b60405180910390fd5b818060200190518101906109419190612ef4565b925082610983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097a90612f6d565b60405180910390fd5b8094505050505090565b61099561239b565b60006001600454815481106109ad576109ac612bc4565b5b90600052602060002090600802019050600060018260070160179054906101000a900461ffff161661ffff1611610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1090612fd9565b60405180910390fd5b80604051806101800160405290816000820154815260200160018201805480602002602001604051908101604052809291908181526020018280548015610a7f57602002820191906000526020600020905b815481526020019060010190808311610a6b575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610ad757602002820191906000526020600020905b815481526020019060010190808311610ac3575b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016007820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160179054906101000a900461ffff1661ffff1661ffff1681526020016007820160199054906101000a900460ff1660ff1660ff16815260200160078201601a9054906101000a900460ff16151515158152505091505090565b6000806000600160045481548110610bfa57610bf9612bc4565b5b90600052602060002090600802019150600060028360070160179054906101000a900461ffff161661ffff1614610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90613045565b60405180910390fd5b6000610c7183611bb3565b03610c8157600092505050610e3b565b8160060154431115610cea57600060808360070160179054906101000a900461ffff161661ffff1614610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce090612d8b565b60405180910390fd5b5b610cf8828360050154611e6d565b610d345760088260070160178282829054906101000a900461ffff161792506101000a81548161ffff021916908361ffff160217905550600190505b60028260070160178282829054906101000a900461ffff161792506101000a81548161ffff021916908361ffff16021790555081600701601a9054906101000a900460ff1615610dae57610dad826000015483600101600081548110610d9d57610d9c612bc4565b5b9060005260206000200154611eb5565b5b801515600060808460070160179054906101000a900461ffff161661ffff161115156001600454610ddf9190613065565b7f2d899e808be4b1d81a259d3f56d6d5c829a7cc913a35373a29f6363ebbb2c6c38560050154604051610e1291906126e6565b60405180910390a4600160046000828254610e2d9190612c22565b925050819055508015925050505b90565b600080610e6d33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166116c2565b600160045481548110610e8357610e82612bc4565b5b90600052602060002090600802019050610e9c81611eef565b610eaa576000915050610f5c565b600081600101805490501115610f045780600101805490508410610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa906130e5565b60405180910390fd5b5b610f0e8184612081565b600081600101805490501115610f565782816002018581548110610f3557610f34612bc4565b5b906000526020600020016000828254610f4e9190612c22565b925050819055505b60019150505b92915050565b60086020528060005260406000206000915090505481565b600080610fa933600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166116c2565b600160045481548110610fbf57610fbe612bc4565b5b90600052602060002090600802019050610fd881611eef565b610fe6576000915050611011565b82816003016000828254610ffa9190612c22565b9250508190555061100b8184612081565b60019150505b919050565b600080600180846110279190612c22565b8154811061103857611037612bc4565b5b906000526020600020906008020190508060010180549050915050919050565b6000600180846110689190612c22565b8154811061107957611078612bc4565b5b90600052602060002090600802019050806001018290806001815401808255809150506001900390600052602060002001600090919091909150558060020160009080600181540180825580915050600190039060005260206000200160009091909190915055505050565b6000806000806000806000806001808b6110ff9190612c22565b815481106111105761110f612bc4565b5b90600052602060002090600802019650600060408860070160179054906101000a900461ffff161661ffff1603611189574387600601541115611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90612d8b565b60405180910390fd5b5b600060048860070160179054906101000a900461ffff161661ffff1611156111bb5760009750505050505050506113c3565b600087600101805490500361120d5760048760070160178282829054906101000a900461ffff161792506101000a81548161ffff021916908361ffff16021790555060019750505050505050506113c3565b8660070160199054906101000a900460ff169150866001018054905089836112359190613105565b60ff16111561125457818760010180549050611251919061313a565b98505b81896112609190613105565b98508660070160179054906101000a900461ffff1690508195505b8860ff168660ff16101561130a57866002018660ff16815481106112a2576112a1612bc4565b5b906000526020600020015492506000831180156112be57508383145b156112ce576010811790506112e8565b838311156112e7578293508560ff169450601019811690505b5b6001826112f59190613105565b915085806113029061316f565b96505061127b565b818760070160196101000a81548160ff021916908360ff160217905550808760070160176101000a81548161ffff021916908361ffff16021790555086600101805490508760070160199054906101000a900460ff1660ff161061139c5760048760070160178282829054906101000a900461ffff161792506101000a81548161ffff021916908361ffff1602179055505b600060048860070160179054906101000a900461ffff161661ffff16119750505050505050505b92915050565b60065481565b600080600180856113e09190612c22565b815481106113f1576113f0612bc4565b5b9060005260206000209060080201905060008160010180549050036114605760008314611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906131e4565b60405180910390fd5b8060050154915050611485565b80600201838154811061147657611475612bc4565b5b90600052602060002001549150505b92915050565b61149361239b565b600180836114a19190612c22565b815481106114b2576114b1612bc4565b5b906000526020600020906008020160405180610180016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561152557602002820191906000526020600020905b815481526020019060010190808311611511575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561157d57602002820191906000526020600020905b815481526020019060010190808311611569575b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016007820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160179054906101000a900461ffff1661ffff1661ffff1681526020016007820160199054906101000a900460ff1660ff1660ff16815260200160078201601a9054906101000a900460ff1615151515815250509050919050565b6000611695848484600061189b565b90509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611701575050611897565b8273ffffffffffffffffffffffffffffffffffffffff16846040516024016117299190612ba9565b6040516020818303038152906040527f3ef25013000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516117b39190612e45565b6000604051808303816000865af19150503d80600081146117f0576040519150601f19603f3d011682016040523d82523d6000602084013e6117f5565b606091505b5080925081935050508161183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590613250565b60405180910390fd5b808060200190518101906118529190612ef4565b915081611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b906132bc565b60405180910390fd5b50505b5050565b60006118a561239b565b600080600060065411156118f9576006548711156118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef90613328565b60405180910390fd5b5b61192533600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166116c2565b600180805490506119369190613065565b91503383610100019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505087836000018181525050858360e0019062ffffff16908162ffffff1681525050864361199d9190612c22565b9050808360c0018181525050600183610120019061ffff16908161ffff168152505084836101600190151590811515815250506001839080600181540180825580915050600190039060005260206000209060080201600090919091909150600082015181600001556020820151816001019080519060200190611a22929190612423565b506040820151816002019080519060200190611a3f929190612470565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548162ffffff021916908362ffffff1602179055506101008201518160070160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160070160176101000a81548161ffff021916908361ffff1602179055506101408201518160070160196101000a81548160ff021916908360ff16021790555061016082015181600701601a6101000a81548160ff0219169083151502179055505050611b6860018381548110611b5557611b54612bc4565b5b9060005260206000209060080201611bb3565b836080018181525050818662ffffff16827f5a41400aa51d78e9e5ca645b0d045817eaa7d90e4344d773fdbe24ffb183d3ce60405160405180910390a4819350505050949350505050565b600080606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611c829190612e45565b6000604051808303816000865af19150503d8060008114611cbf576040519150601f19603f3d011682016040523d82523d6000602084013e611cc4565b606091505b50809350819450505082611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490612ea8565b60405180910390fd5b81806020019051810190611d21919061335d565b905060008111611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d906133d6565b60405180910390fd5b6000856004015403611d8057808560040181905550611e61565b84600401548114611e605760208560070160178282829054906101000a900461ffff161792506101000a81548161ffff021916908361ffff16021790555060028560070160178282829054906101000a900461ffff161792506101000a81548161ffff021916908361ffff160217905550600560009054906101000a900460ff1615611e5f57600160046000828254611e199190612c22565b9250508190555060808560070160178282829054906101000a900461ffff161792506101000a81548161ffff021916908361ffff16021790555060009350505050611e68565b5b5b8093505050505b919050565b600080620f424083611e7f91906133f6565b90508360070160009054906101000a900462ffffff1662ffffff16846004015482611eaa9190613467565b101591505092915050565b7f67ca084db32598c571e2ad2dc8b95679c3fa14c63213935dfd8f0a158ff65c576001028203611eeb5780600190046006819055505b5050565b60008060018360070160179054906101000a900461ffff161661ffff1611611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f43906134e4565b60405180910390fd5b6000611f5783611bb3565b03611f65576000905061207c565b43826006015411611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290613550565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561207757600454600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d906135bc565b60405180910390fd5b5b600190505b919050565b6000606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163330856040516024016120d19392919061363b565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161215b9190612e45565b6000604051808303816000865af19150503d8060008114612198576040519150601f19603f3d011682016040523d82523d6000602084013e61219d565b606091505b508092508193505050816121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90612ea8565b60405180910390fd5b808060200190518101906121fa9190612ef4565b91508161223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223390612f6d565b60405180910390fd5b600454600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d19190612c22565b92505081905550828460050160008282546122ec9190612c22565b92505081905550612301848560050154611e6d565b1561239557612314848560030154611e6d565b156123505760406080178460070160178282829054906101000a900461ffff161792506101000a81548161ffff021916908361ffff1602179055505b6002846001018054905010156123945760408460070160178282829054906101000a900461ffff161792506101000a81548161ffff021916908361ffff1602179055505b5b50505050565b60405180610180016040528060008019168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600061ffff168152602001600060ff1681526020016000151581525090565b82805482825590600052602060002090810192821561245f579160200282015b8281111561245e578251825591602001919060010190612443565b5b50905061246c91906124bd565b5090565b8280548282559060005260206000209081019282156124ac579160200282015b828111156124ab578251825591602001919060010190612490565b5b5090506124b991906124da565b5090565b5b808211156124d65760008160009055506001016124be565b5090565b5b808211156124f35760008160009055506001016124db565b5090565b600080fd5b6000819050919050565b61250f816124fc565b811461251a57600080fd5b50565b60008135905061252c81612506565b92915050565b600060208284031215612548576125476124f7565b5b60006125568482850161251d565b91505092915050565b60008115159050919050565b6125748161255f565b82525050565b600060208201905061258f600083018461256b565b92915050565b600080604083850312156125ac576125ab6124f7565b5b60006125ba8582860161251d565b92505060206125cb8582860161251d565b9150509250929050565b6000819050919050565b6125e8816125d5565b82525050565b600060208201905061260360008301846125df565b92915050565b612612816125d5565b811461261d57600080fd5b50565b60008135905061262f81612609565b92915050565b600062ffffff82169050919050565b61264d81612635565b811461265857600080fd5b50565b60008135905061266a81612644565b92915050565b6000806000806080858703121561268a576126896124f7565b5b600061269887828801612620565b94505060206126a987828801612620565b93505060406126ba8782880161251d565b92505060606126cb8782880161265b565b91505092959194509250565b6126e0816124fc565b82525050565b60006020820190506126fb60008301846126d7565b92915050565b61270a816125d5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006127488383612701565b60208301905092915050565b6000602082019050919050565b600061276c82612710565b612776818561271b565b93506127818361272c565b8060005b838110156127b2578151612799888261273c565b97506127a483612754565b925050600181019050612785565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6127f4816124fc565b82525050565b600061280683836127eb565b60208301905092915050565b6000602082019050919050565b600061282a826127bf565b61283481856127ca565b935061283f836127db565b8060005b8381101561287057815161285788826127fa565b975061286283612812565b925050600181019050612843565b5085935050505092915050565b61288681612635565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128b78261288c565b9050919050565b6128c7816128ac565b82525050565b600061ffff82169050919050565b6128e4816128cd565b82525050565b600060ff82169050919050565b612900816128ea565b82525050565b61290f8161255f565b82525050565b60006101808301600083015161292e6000860182612701565b50602083015184820360208601526129468282612761565b91505060408301518482036040860152612960828261281f565b915050606083015161297560608601826127eb565b50608083015161298860808601826127eb565b5060a083015161299b60a08601826127eb565b5060c08301516129ae60c08601826127eb565b5060e08301516129c160e086018261287d565b506101008301516129d66101008601826128be565b506101208301516129eb6101208601826128db565b50610140830151612a006101408601826128f7565b50610160830151612a15610160860182612906565b508091505092915050565b60006020820190508181036000830152612a3a8184612915565b905092915050565b612a4b816128ac565b8114612a5657600080fd5b50565b600081359050612a6881612a42565b92915050565b600060208284031215612a8457612a836124f7565b5b6000612a9284828501612a59565b91505092915050565b60008060408385031215612ab257612ab16124f7565b5b6000612ac08582860161251d565b9250506020612ad185828601612620565b9150509250929050565b612ae4816128ea565b8114612aef57600080fd5b50565b600081359050612b0181612adb565b92915050565b60008060408385031215612b1e57612b1d6124f7565b5b6000612b2c8582860161251d565b9250506020612b3d85828601612af2565b9150509250929050565b600080600060608486031215612b6057612b5f6124f7565b5b6000612b6e86828701612620565b9350506020612b7f8682870161251d565b9250506040612b908682870161265b565b9150509250925092565b612ba3816128ac565b82525050565b6000602082019050612bbe6000830184612b9a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c2d826124fc565b9150612c38836124fc565b9250828201905080821115612c5057612c4f612bf3565b5b92915050565b600082825260208201905092915050565b7f4552525f494e56414c49445f494e5445524e414c000000000000000000000000600082015250565b6000612c9d601483612c56565b9150612ca882612c67565b602082019050919050565b60006020820190508181036000830152612ccc81612c90565b9050919050565b7f4552525f4d5553545f57495448445241575f414c4c0000000000000000000000600082015250565b6000612d09601583612c56565b9150612d1482612cd3565b602082019050919050565b60006020820190508181036000830152612d3881612cfc565b9050919050565b7f4552525f5052454d415455524500000000000000000000000000000000000000600082015250565b6000612d75600d83612c56565b9150612d8082612d3f565b602082019050919050565b60006020820190508181036000830152612da481612d68565b9050919050565b6000604082019050612dc06000830185612b9a565b612dcd60208301846126d7565b9392505050565b600081519050919050565b600081905092915050565b60005b83811015612e08578082015181840152602081019050612ded565b60008484015250505050565b6000612e1f82612dd4565b612e298185612ddf565b9350612e39818560208601612dea565b80840191505092915050565b6000612e518284612e14565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b6000612e92600983612c56565b9150612e9d82612e5c565b602082019050919050565b60006020820190508181036000830152612ec181612e85565b9050919050565b612ed18161255f565b8114612edc57600080fd5b50565b600081519050612eee81612ec8565b92915050565b600060208284031215612f0a57612f096124f7565b5b6000612f1884828501612edf565b91505092915050565b7f4552525f5452414e534645520000000000000000000000000000000000000000600082015250565b6000612f57600c83612c56565b9150612f6282612f21565b602082019050919050565b60006020820190508181036000830152612f8681612f4a565b9050919050565b7f4552525f4e4f5f43555252454e545f50524f504f53414c000000000000000000600082015250565b6000612fc3601783612c56565b9150612fce82612f8d565b602082019050919050565b60006020820190508181036000830152612ff281612fb6565b9050919050565b7f4552525f414c52454144595f53544154455f46494e414c000000000000000000600082015250565b600061302f601783612c56565b915061303a82612ff9565b602082019050919050565b6000602082019050818103600083015261305e81613022565b9050919050565b6000613070826124fc565b915061307b836124fc565b925082820390508181111561309357613092612bf3565b5b92915050565b7f4552525f4f5054494f4e5f494e56414c49440000000000000000000000000000600082015250565b60006130cf601283612c56565b91506130da82613099565b602082019050919050565b600060208201905081810360008301526130fe816130c2565b9050919050565b6000613110826128ea565b915061311b836128ea565b9250828201905060ff81111561313457613133612bf3565b5b92915050565b6000613145826128ea565b9150613150836128ea565b9250828203905060ff81111561316957613168612bf3565b5b92915050565b600061317a826128ea565b915060ff820361318d5761318c612bf3565b5b600182019050919050565b7f4552525f4e4f5f4f5054494f4e53000000000000000000000000000000000000600082015250565b60006131ce600e83612c56565b91506131d982613198565b602082019050919050565b600060208201905081810360008301526131fd816131c1565b9050919050565b7f4552525f52454749535452590000000000000000000000000000000000000000600082015250565b600061323a600c83612c56565b915061324582613204565b602082019050919050565b600060208201905081810360008301526132698161322d565b9050919050565b7f4552525f554e415554485f4143434f554e540000000000000000000000000000600082015250565b60006132a6601283612c56565b91506132b182613270565b602082019050919050565b600060208201905081810360008301526132d581613299565b9050919050565b7f4552525f57414954000000000000000000000000000000000000000000000000600082015250565b6000613312600883612c56565b915061331d826132dc565b602082019050919050565b6000602082019050818103600083015261334181613305565b9050919050565b60008151905061335781612506565b92915050565b600060208284031215613373576133726124f7565b5b600061338184828501613348565b91505092915050565b7f4552525f5a45524f5f535550504c590000000000000000000000000000000000600082015250565b60006133c0600f83612c56565b91506133cb8261338a565b602082019050919050565b600060208201905081810360008301526133ef816133b3565b9050919050565b6000613401826124fc565b915061340c836124fc565b925082820261341a816124fc565b9150828204841483151761343157613430612bf3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613472826124fc565b915061347d836124fc565b92508261348d5761348c613438565b5b828204905092915050565b7f4552525f50524f504f53414c5f494e4143544956450000000000000000000000600082015250565b60006134ce601583612c56565b91506134d982613498565b602082019050919050565b600060208201905081810360008301526134fd816134c1565b9050919050565b7f4552525f444541444c494e450000000000000000000000000000000000000000600082015250565b600061353a600c83612c56565b915061354582613504565b602082019050919050565b600060208201905081810360008301526135698161352d565b9050919050565b7f4552525f57495448445241575f46495253540000000000000000000000000000600082015250565b60006135a6601283612c56565b91506135b182613570565b602082019050919050565b600060208201905081810360008301526135d581613599565b9050919050565b6000819050919050565b60006136016135fc6135f78461288c565b6135dc565b61288c565b9050919050565b6000613613826135e6565b9050919050565b600061362582613608565b9050919050565b6136358161361a565b82525050565b60006060820190506136506000830186612b9a565b61365d602083018561362c565b61366a60408301846126d7565b94935050505056fea2646970667358221220d5fa25e50c5241435b72b74c0a406160968750ce1807222162b33247ab8c3daf64736f6c63430008130033 -\ No newline at end of file +60806040523480156200001157600080fd5b5060405162003b8d38038062003b8d8339818101604052810190620000379190620004b0565b62000041620002a0565b846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018190806001815401808255809150506001900390600052602060002090600802016000909190919091506000820151816000015560208201518160010190805190602001906200015792919062000327565b5060408201518160020190805190602001906200017692919062000379565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548162ffffff021916908362ffffff1602179055506101008201518160070160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160070160176101000a81548160ff021916908360ff1602179055506101408201518160070160186101000a81548160ff021916908360ff1602179055506101608201518160070160196101000a81548160ff0219169083151502179055505050600160048190555083600560006101000a81548160ff021916908315150217905550505050505062000522565b60405180610180016040528060008019168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681526020016000151581525090565b82805482825590600052602060002090810192821562000366579160200282015b828111156200036557825182559160200191906001019062000348565b5b509050620003759190620003cb565b5090565b828054828255906000526020600020908101928215620003b8579160200282015b82811115620003b75782518255916020019190600101906200039a565b5b509050620003c79190620003ea565b5090565b5b80821115620003e6576000816000905550600101620003cc565b5090565b5b8082111562000405576000816000905550600101620003eb565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200043b826200040e565b9050919050565b6200044d816200042e565b81146200045957600080fd5b50565b6000815190506200046d8162000442565b92915050565b60008115159050919050565b6200048a8162000473565b81146200049657600080fd5b50565b600081519050620004aa816200047f565b92915050565b60008060008060808587031215620004cd57620004cc62000409565b5b6000620004dd878288016200045c565b9450506020620004f08782880162000499565b935050604062000503878288016200045c565b925050606062000516878288016200045c565b91505092959194509250565b61365b80620005326000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c010000000000000000000000000000000000000000000000000000000090048063826d9873116100bf578063ad35e2831161008e578063ad35e2831461035e578063ba3294141461037c578063c7f758a8146103ac578063e99a943e146103dc578063fc0c546a1461040c57610133565b8063826d9873146102b257806384385191146102e257806386d39cbc146103125780638bb522131461032e57610133565b80633ccfd60b116101065780633ccfd60b146101f857806341ec6870146102165780634bb278f314610234578063509bd3371461025257806370a082311461028257610133565b80630121b93f146101385780631ce309271461016857806328e7a520146101985780632e1a7d4d146101c8575b600080fd5b610152600480360381019061014d9190612502565b61042a565b60405161015f919061254a565b60405180910390f35b610182600480360381019061017d9190612565565b6104a6565b60405161018f91906125be565b60405180910390f35b6101b260048036038101906101ad9190612640565b610502565b6040516101bf91906126b6565b60405180910390f35b6101e260048036038101906101dd9190612502565b61059c565b6040516101ef91906126b6565b60405180910390f35b61020061062e565b60405161020d91906126b6565b60405180910390f35b61021e61098b565b60405161022b91906129d3565b60405180910390f35b61023c610bd8565b604051610249919061254a565b60405180910390f35b61026c60048036038101906102679190612565565b610e2b565b604051610279919061254a565b60405180910390f35b61029c60048036038101906102979190612a21565b610f4f565b6040516102a991906126b6565b60405180910390f35b6102cc60048036038101906102c79190612502565b610f67565b6040516102d9919061254a565b60405180910390f35b6102fc60048036038101906102f79190612502565b611003565b60405161030991906126b6565b60405180910390f35b61032c60048036038101906103279190612a4e565b611045565b005b61034860048036038101906103439190612aba565b6110d2565b604051610355919061254a565b60405180910390f35b6103666113a7565b60405161037391906126b6565b60405180910390f35b61039660048036038101906103919190612565565b6113ad565b6040516103a391906126b6565b60405180910390f35b6103c660048036038101906103c19190612502565b611469565b6040516103d391906129d3565b60405180910390f35b6103f660048036038101906103f19190612afa565b611661565b60405161040391906126b6565b60405180910390f35b610414611679565b6040516104219190612b5c565b60405180910390f35b60008061045933600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661169d565b60016004548154811061046f5761046e612b77565b5b90600052602060002090600802019050600281600101805490501061049357600080fd5b61049e600084610e2b565b915050919050565b600080600180856104b79190612bd5565b815481106104c8576104c7612b77565b5b906000526020600020906008020190508060010183815481106104ee576104ed612b77565b5b906000526020600020015491505092915050565b60008060007f67ca084db32598c571e2ad2dc8b95679c3fa14c63213935dfd8f0a158ff65c57600102870361053657600191505b81610576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056d90612c66565b60405180910390fd5b6105838786866001611876565b905061058f8187611045565b8092505050949350505050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821461061f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061690612cd2565b60405180910390fd5b61062761062e565b9050919050565b600080600060606000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600454600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403610742576001600454815481106106d7576106d6612b77565b5b90600052602060002090600802019350600060028560070160179054906101000a900460ff161660ff1611610741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073890612d3e565b60405180910390fd5b5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163382604051602401610816929190612d5e565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516108a09190612df8565b6000604051808303816000865af19150503d80600081146108dd576040519150601f19603f3d011682016040523d82523d6000602084013e6108e2565b606091505b5080935081945050508261092b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092290612e5b565b60405180910390fd5b8180602001905181019061093f9190612ea7565b925082610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097890612f20565b60405180910390fd5b8094505050505090565b61099361236c565b60006001600454815481106109ab576109aa612b77565b5b90600052602060002090600802019050600060018260070160179054906101000a900460ff161660ff1611610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c90612f8c565b60405180910390fd5b80604051806101800160405290816000820154815260200160018201805480602002602001604051908101604052809291908181526020018280548015610a7b57602002820191906000526020600020905b815481526020019060010190808311610a67575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610ad357602002820191906000526020600020905b815481526020019060010190808311610abf575b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016007820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160179054906101000a900460ff1660ff1660ff1681526020016007820160189054906101000a900460ff1660ff1660ff1681526020016007820160199054906101000a900460ff16151515158152505091505090565b6000806000600160045481548110610bf357610bf2612b77565b5b90600052602060002090600802019150600060028360070160179054906101000a900460ff161660ff1614610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490612ff8565b60405180910390fd5b6000610c6883611b95565b03610c7857600092505050610e28565b8160060154431115610cdf57600060808360070160179054906101000a900460ff161660ff1614610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd590612d3e565b60405180910390fd5b5b610ced828360050154611e46565b610d265760088260070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600190505b60028260070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055508160070160199054906101000a900460ff1615610d9d57610d9c826000015483600101600081548110610d8c57610d8b612b77565b5b9060005260206000200154611e8e565b5b801515600060808460070160179054906101000a900460ff161660ff161115156001600454610dcc9190613018565b7f2d899e808be4b1d81a259d3f56d6d5c829a7cc913a35373a29f6363ebbb2c6c38560050154604051610dff91906126b6565b60405180910390a4600160046000828254610e1a9190612bd5565b925050819055508015925050505b90565b600080610e5a33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661169d565b600160045481548110610e7057610e6f612b77565b5b90600052602060002090600802019050610e8981611ec8565b610e97576000915050610f49565b600081600101805490501115610ef15780600101805490508410610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790613098565b60405180910390fd5b5b610efb8184612058565b600081600101805490501115610f435782816002018581548110610f2257610f21612b77565b5b906000526020600020016000828254610f3b9190612bd5565b925050819055505b60019150505b92915050565b60086020528060005260406000206000915090505481565b600080610f9633600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661169d565b600160045481548110610fac57610fab612b77565b5b90600052602060002090600802019050610fc581611ec8565b610fd3576000915050610ffe565b82816003016000828254610fe79190612bd5565b92505081905550610ff88184612058565b60019150505b919050565b600080600180846110149190612bd5565b8154811061102557611024612b77565b5b906000526020600020906008020190508060010180549050915050919050565b6000600180846110559190612bd5565b8154811061106657611065612b77565b5b90600052602060002090600802019050806001018290806001815401808255809150506001900390600052602060002001600090919091909150558060020160009080600181540180825580915050600190039060005260206000200160009091909190915055505050565b6000806000806000806000806001808b6110ec9190612bd5565b815481106110fd576110fc612b77565b5b90600052602060002090600802019650600060408860070160179054906101000a900460ff161660ff1603611174574387600601541115611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90612d3e565b60405180910390fd5b5b600060048860070160179054906101000a900460ff161660ff1611156111a45760009750505050505050506113a1565b60008760010180549050036111f35760048760070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060019750505050505050506113a1565b8660070160189054906101000a900460ff1691508660010180549050898361121b91906130b8565b60ff16111561123a5781876001018054905061123791906130ed565b98505b818961124691906130b8565b98508660070160179054906101000a900460ff1690508195505b8860ff168660ff1610156112ef57866002018660ff168154811061128757611286612b77565b5b906000526020600020015492506000831180156112a357508383145b156112b3576010811790506112cd565b838311156112cc578293508560ff169450601019811690505b5b6001826112da91906130b8565b915085806112e790613122565b965050611260565b818760070160186101000a81548160ff021916908360ff160217905550808760070160176101000a81548160ff021916908360ff16021790555086600101805490508760070160189054906101000a900460ff1660ff161061137c5760048760070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b600060048860070160179054906101000a900460ff161660ff16119750505050505050505b92915050565b60065481565b600080600180856113be9190612bd5565b815481106113cf576113ce612b77565b5b90600052602060002090600802019050600081600101805490500361143e5760008314611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142890613197565b60405180910390fd5b8060050154915050611463565b80600201838154811061145457611453612b77565b5b90600052602060002001549150505b92915050565b61147161236c565b6001808361147f9190612bd5565b815481106114905761148f612b77565b5b906000526020600020906008020160405180610180016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561150357602002820191906000526020600020905b8154815260200190600101908083116114ef575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561155b57602002820191906000526020600020905b815481526020019060010190808311611547575b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016007820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160179054906101000a900460ff1660ff1660ff1681526020016007820160189054906101000a900460ff1660ff1660ff1681526020016007820160199054906101000a900460ff1615151515815250509050919050565b60006116708484846000611876565b90509392505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116dc575050611872565b8273ffffffffffffffffffffffffffffffffffffffff16846040516024016117049190612b5c565b6040516020818303038152906040527f3ef25013000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161178e9190612df8565b6000604051808303816000865af19150503d80600081146117cb576040519150601f19603f3d011682016040523d82523d6000602084013e6117d0565b606091505b50809250819350505081611819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181090613203565b60405180910390fd5b8080602001905181019061182d9190612ea7565b91508161186f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118669061326f565b60405180910390fd5b50505b5050565b600061188061236c565b600080600060065411156118d4576006548711156118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca906132db565b60405180910390fd5b5b61190033600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661169d565b600180805490506119119190613018565b91503383610100019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505087836000018181525050858360e0019062ffffff16908162ffffff168152505086436119789190612bd5565b9050808360c0018181525050600183610120019060ff16908160ff1681525050848361016001901515908115158152505060018390806001815401808255809150506001900390600052602060002090600802016000909190919091506000820151816000015560208201518160010190805190602001906119fb9291906123f3565b506040820151816002019080519060200190611a18929190612440565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548162ffffff021916908362ffffff1602179055506101008201518160070160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160070160176101000a81548160ff021916908360ff1602179055506101408201518160070160186101000a81548160ff021916908360ff1602179055506101608201518160070160196101000a81548160ff0219169083151502179055505050611b4a60018084611b269190612bd5565b81548110611b3757611b36612b77565b5b9060005260206000209060080201611b95565b836080018181525050818662ffffff16827f5a41400aa51d78e9e5ca645b0d045817eaa7d90e4344d773fdbe24ffb183d3ce60405160405180910390a4819350505050949350505050565b600080606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f18160ddd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611c649190612df8565b6000604051808303816000865af19150503d8060008114611ca1576040519150601f19603f3d011682016040523d82523d6000602084013e611ca6565b606091505b50809350819450505082611cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce690612e5b565b60405180910390fd5b81806020019051810190611d039190613310565b905060008111611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613389565b60405180910390fd5b6000856004015403611d6257808560040181905550611e3a565b84600401548114611e395760208560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060028560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550600560009054906101000a900460ff1615611e3857600160046000828254611df59190612bd5565b9250508190555060808560070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555060009350505050611e41565b5b5b8093505050505b919050565b600080620f424083611e5891906133a9565b90508360070160009054906101000a900462ffffff1662ffffff16846004015482611e83919061341a565b101591505092915050565b7f67ca084db32598c571e2ad2dc8b95679c3fa14c63213935dfd8f0a158ff65c576001028203611ec45780600190046006819055505b5050565b60008060018360070160179054906101000a900460ff161660ff1611611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90613497565b60405180910390fd5b6000611f2e83611b95565b03611f3c5760009050612053565b43826006015411611f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7990613503565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561204e57600454600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461204d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120449061356f565b60405180910390fd5b5b600190505b919050565b6000606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163330856040516024016120a8939291906135ee565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516121329190612df8565b6000604051808303816000865af19150503d806000811461216f576040519150601f19603f3d011682016040523d82523d6000602084013e612174565b606091505b508092508193505050816121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b490612e5b565b60405180910390fd5b808060200190518101906121d19190612ea7565b915081612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90612f20565b60405180910390fd5b600454600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a89190612bd5565b92505081905550828460050160008282546122c39190612bd5565b925050819055506122d8848560050154611e46565b15612366576122eb848560030154611e46565b156123245760406080178460070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b6002846001018054905010156123655760408460070160178282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055505b5b50505050565b60405180610180016040528060008019168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681526020016000151581525090565b82805482825590600052602060002090810192821561242f579160200282015b8281111561242e578251825591602001919060010190612413565b5b50905061243c919061248d565b5090565b82805482825590600052602060002090810192821561247c579160200282015b8281111561247b578251825591602001919060010190612460565b5b50905061248991906124aa565b5090565b5b808211156124a657600081600090555060010161248e565b5090565b5b808211156124c35760008160009055506001016124ab565b5090565b600080fd5b6000819050919050565b6124df816124cc565b81146124ea57600080fd5b50565b6000813590506124fc816124d6565b92915050565b600060208284031215612518576125176124c7565b5b6000612526848285016124ed565b91505092915050565b60008115159050919050565b6125448161252f565b82525050565b600060208201905061255f600083018461253b565b92915050565b6000806040838503121561257c5761257b6124c7565b5b600061258a858286016124ed565b925050602061259b858286016124ed565b9150509250929050565b6000819050919050565b6125b8816125a5565b82525050565b60006020820190506125d360008301846125af565b92915050565b6125e2816125a5565b81146125ed57600080fd5b50565b6000813590506125ff816125d9565b92915050565b600062ffffff82169050919050565b61261d81612605565b811461262857600080fd5b50565b60008135905061263a81612614565b92915050565b6000806000806080858703121561265a576126596124c7565b5b6000612668878288016125f0565b9450506020612679878288016125f0565b935050604061268a878288016124ed565b925050606061269b8782880161262b565b91505092959194509250565b6126b0816124cc565b82525050565b60006020820190506126cb60008301846126a7565b92915050565b6126da816125a5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061271883836126d1565b60208301905092915050565b6000602082019050919050565b600061273c826126e0565b61274681856126eb565b9350612751836126fc565b8060005b83811015612782578151612769888261270c565b975061277483612724565b925050600181019050612755565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6127c4816124cc565b82525050565b60006127d683836127bb565b60208301905092915050565b6000602082019050919050565b60006127fa8261278f565b612804818561279a565b935061280f836127ab565b8060005b8381101561284057815161282788826127ca565b9750612832836127e2565b925050600181019050612813565b5085935050505092915050565b61285681612605565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128878261285c565b9050919050565b6128978161287c565b82525050565b600060ff82169050919050565b6128b38161289d565b82525050565b6128c28161252f565b82525050565b6000610180830160008301516128e160008601826126d1565b50602083015184820360208601526128f98282612731565b9150506040830151848203604086015261291382826127ef565b915050606083015161292860608601826127bb565b50608083015161293b60808601826127bb565b5060a083015161294e60a08601826127bb565b5060c083015161296160c08601826127bb565b5060e083015161297460e086018261284d565b5061010083015161298961010086018261288e565b5061012083015161299e6101208601826128aa565b506101408301516129b36101408601826128aa565b506101608301516129c86101608601826128b9565b508091505092915050565b600060208201905081810360008301526129ed81846128c8565b905092915050565b6129fe8161287c565b8114612a0957600080fd5b50565b600081359050612a1b816129f5565b92915050565b600060208284031215612a3757612a366124c7565b5b6000612a4584828501612a0c565b91505092915050565b60008060408385031215612a6557612a646124c7565b5b6000612a73858286016124ed565b9250506020612a84858286016125f0565b9150509250929050565b612a978161289d565b8114612aa257600080fd5b50565b600081359050612ab481612a8e565b92915050565b60008060408385031215612ad157612ad06124c7565b5b6000612adf858286016124ed565b9250506020612af085828601612aa5565b9150509250929050565b600080600060608486031215612b1357612b126124c7565b5b6000612b21868287016125f0565b9350506020612b32868287016124ed565b9250506040612b438682870161262b565b9150509250925092565b612b568161287c565b82525050565b6000602082019050612b716000830184612b4d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612be0826124cc565b9150612beb836124cc565b9250828201905080821115612c0357612c02612ba6565b5b92915050565b600082825260208201905092915050565b7f4552525f494e56414c49445f494e5445524e414c000000000000000000000000600082015250565b6000612c50601483612c09565b9150612c5b82612c1a565b602082019050919050565b60006020820190508181036000830152612c7f81612c43565b9050919050565b7f4552525f4d5553545f57495448445241575f414c4c0000000000000000000000600082015250565b6000612cbc601583612c09565b9150612cc782612c86565b602082019050919050565b60006020820190508181036000830152612ceb81612caf565b9050919050565b7f4552525f5052454d415455524500000000000000000000000000000000000000600082015250565b6000612d28600d83612c09565b9150612d3382612cf2565b602082019050919050565b60006020820190508181036000830152612d5781612d1b565b9050919050565b6000604082019050612d736000830185612b4d565b612d8060208301846126a7565b9392505050565b600081519050919050565b600081905092915050565b60005b83811015612dbb578082015181840152602081019050612da0565b60008484015250505050565b6000612dd282612d87565b612ddc8185612d92565b9350612dec818560208601612d9d565b80840191505092915050565b6000612e048284612dc7565b915081905092915050565b7f4552525f544f4b454e0000000000000000000000000000000000000000000000600082015250565b6000612e45600983612c09565b9150612e5082612e0f565b602082019050919050565b60006020820190508181036000830152612e7481612e38565b9050919050565b612e848161252f565b8114612e8f57600080fd5b50565b600081519050612ea181612e7b565b92915050565b600060208284031215612ebd57612ebc6124c7565b5b6000612ecb84828501612e92565b91505092915050565b7f4552525f5452414e534645520000000000000000000000000000000000000000600082015250565b6000612f0a600c83612c09565b9150612f1582612ed4565b602082019050919050565b60006020820190508181036000830152612f3981612efd565b9050919050565b7f4552525f4e4f5f43555252454e545f50524f504f53414c000000000000000000600082015250565b6000612f76601783612c09565b9150612f8182612f40565b602082019050919050565b60006020820190508181036000830152612fa581612f69565b9050919050565b7f4552525f414c52454144595f53544154455f46494e414c000000000000000000600082015250565b6000612fe2601783612c09565b9150612fed82612fac565b602082019050919050565b6000602082019050818103600083015261301181612fd5565b9050919050565b6000613023826124cc565b915061302e836124cc565b925082820390508181111561304657613045612ba6565b5b92915050565b7f4552525f4f5054494f4e5f494e56414c49440000000000000000000000000000600082015250565b6000613082601283612c09565b915061308d8261304c565b602082019050919050565b600060208201905081810360008301526130b181613075565b9050919050565b60006130c38261289d565b91506130ce8361289d565b9250828201905060ff8111156130e7576130e6612ba6565b5b92915050565b60006130f88261289d565b91506131038361289d565b9250828203905060ff81111561311c5761311b612ba6565b5b92915050565b600061312d8261289d565b915060ff82036131405761313f612ba6565b5b600182019050919050565b7f4552525f4e4f5f4f5054494f4e53000000000000000000000000000000000000600082015250565b6000613181600e83612c09565b915061318c8261314b565b602082019050919050565b600060208201905081810360008301526131b081613174565b9050919050565b7f4552525f52454749535452590000000000000000000000000000000000000000600082015250565b60006131ed600c83612c09565b91506131f8826131b7565b602082019050919050565b6000602082019050818103600083015261321c816131e0565b9050919050565b7f4552525f554e415554485f4143434f554e540000000000000000000000000000600082015250565b6000613259601283612c09565b915061326482613223565b602082019050919050565b600060208201905081810360008301526132888161324c565b9050919050565b7f4552525f57414954000000000000000000000000000000000000000000000000600082015250565b60006132c5600883612c09565b91506132d08261328f565b602082019050919050565b600060208201905081810360008301526132f4816132b8565b9050919050565b60008151905061330a816124d6565b92915050565b600060208284031215613326576133256124c7565b5b6000613334848285016132fb565b91505092915050565b7f4552525f5a45524f5f535550504c590000000000000000000000000000000000600082015250565b6000613373600f83612c09565b915061337e8261333d565b602082019050919050565b600060208201905081810360008301526133a281613366565b9050919050565b60006133b4826124cc565b91506133bf836124cc565b92508282026133cd816124cc565b915082820484148315176133e4576133e3612ba6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613425826124cc565b9150613430836124cc565b9250826134405761343f6133eb565b5b828204905092915050565b7f4552525f50524f504f53414c5f494e4143544956450000000000000000000000600082015250565b6000613481601583612c09565b915061348c8261344b565b602082019050919050565b600060208201905081810360008301526134b081613474565b9050919050565b7f4552525f444541444c494e450000000000000000000000000000000000000000600082015250565b60006134ed600c83612c09565b91506134f8826134b7565b602082019050919050565b6000602082019050818103600083015261351c816134e0565b9050919050565b7f4552525f57495448445241575f46495253540000000000000000000000000000600082015250565b6000613559601283612c09565b915061356482613523565b602082019050919050565b600060208201905081810360008301526135888161354c565b9050919050565b6000819050919050565b60006135b46135af6135aa8461285c565b61358f565b61285c565b9050919050565b60006135c682613599565b9050919050565b60006135d8826135bb565b9050919050565b6135e8816135cd565b82525050565b60006060820190506136036000830186612b4d565b61361060208301856135df565b61361d60408301846126a7565b94935050505056fea2646970667358221220b178f2d4d0f9963bd93cbf60cdbf53558f1d675cf8cb87d5c45b01f942d3cbd564736f6c63430008130033 +\ 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":"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":"blockWaitLimit","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":"uint16","name":"state","type":"uint16"},{"internalType":"uint8","name":"scanCursor","type":"uint8"},{"internalType":"bool","name":"internals","type":"bool"}],"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":"uint16","name":"state","type":"uint16"},{"internalType":"uint8","name":"scanCursor","type":"uint8"},{"internalType":"bool","name":"internals","type":"bool"}],"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":"_option","type":"bytes32"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"proposeInternal","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":"blockWaitLimit","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":"bool","name":"internals","type":"bool"}],"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":"bool","name":"internals","type":"bool"}],"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":"_option","type":"bytes32"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"proposeInternal","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":"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":"blockWaitLimit","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":"uint16","name":"state","type":"uint16"},{"internalType":"uint8","name":"scanCursor","type":"uint8"},{"internalType":"bool","name":"internals","type":"bool"}],"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":"uint16","name":"state","type":"uint16"},{"internalType":"uint8","name":"scanCursor","type":"uint8"},{"internalType":"bool","name":"internals","type":"bool"}],"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":"_option","type":"bytes32"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"proposeInternal","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":"0x1973b7b1f4fd3cdf667c2f6362e4b5cb1a5f38346e66728382bcff752f54a354","license":"AGPL-3.0-or-later","urls":["bzz-raw://88c9dbc2a0e8405ecc2e753b2f4c1c8faeacd1dfe3339e3a2df7e03500e46f54","dweb:/ipfs/QmZHpYkics6CUCgFso1YEBbmVq1cM6n53ft95Y2Kfka74z"]}},"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":"blockWaitLimit","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":"bool","name":"internals","type":"bool"}],"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":"bool","name":"internals","type":"bool"}],"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":"_option","type":"bytes32"},{"internalType":"uint256","name":"_blockWait","type":"uint256"},{"internalType":"uint24","name":"_targetVotePpm","type":"uint24"}],"name":"proposeInternal","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":"0xd91f73aefbc8460faea64e86d7dace759c647a5220f5a2fdf081041bb71805da","license":"AGPL-3.0-or-later","urls":["bzz-raw://a9303ee3b44626a8b282d802a3f808b2daab15894ca9dcf20c488a04968e48ef","dweb:/ipfs/QmZ5Beg5aS3mgGdatgDB6WA9iXs1R4pvdHbZJNsz4Fzipv"]}},"version":1} diff --git a/solidity/Voter.sol b/solidity/Voter.sol @@ -6,15 +6,15 @@ pragma solidity ^0.8.0; // Description: Voting contract using ERC20 tokens as shares contract ERC20Vote { - uint16 constant STATE_INIT = 1; // proposal has been initiated. - uint16 constant STATE_FINAL = 2; // proposal has been finalized. - uint16 constant STATE_SCANNED = 4; // proposal votes have been scanned (this can be done after finalization). - uint16 constant STATE_INSUFFICIENT = 8; // proposal did not attract minimum participation before deadline. - uint16 constant STATE_TIED = 16; // two or more proposal options have the same amount of votes. - uint16 constant STATE_SUPPLYCHANGE = 32; // supply changed while voting was underway. - uint16 constant STATE_IMMEDIATE = 64; // minimum participation was attained before deadline. - uint16 constant STATE_CANCELLED = 128; // vote to cancel the proposal has the majority. - uint16 constant STATE_DUE = 256; // votes are ready to be tallied. + uint8 constant STATE_INIT = 1; // proposal has been initiated. + uint8 constant STATE_FINAL = 2; // proposal has been finalized. + uint8 constant STATE_SCANNED = 4; // proposal votes have been scanned (this can be done after finalization). + uint8 constant STATE_INSUFFICIENT = 8; // proposal did not attract minimum participation before deadline. + uint8 constant STATE_TIED = 16; // two or more proposal options have the same amount of votes. + uint8 constant STATE_SUPPLYCHANGE = 32; // supply changed while voting was underway. + uint8 constant STATE_IMMEDIATE = 64; // minimum participation was attained before deadline. + uint8 constant STATE_CANCELLED = 128; // vote to cancel the proposal has the majority. + //uint16 constant STATE_DUE = 256; // votes are ready to be tallied. bytes32 constant INTERNALS_BLOCK_WAIT_LIMIT = 0x67ca084db32598c571e2ad2dc8b95679c3fa14c63213935dfd8f0a158ff65c57; @@ -30,7 +30,7 @@ contract ERC20Vote { uint256 blockDeadline; uint24 targetVotePpm; address proposer; - uint16 state; + uint8 state; uint8 scanCursor; bool internals; // vote to govern internal mechanics of the contract. May not contain options. } @@ -120,7 +120,7 @@ contract ERC20Vote { l_proposal.state = STATE_INIT; l_proposal.internals = _internals; proposals.push(l_proposal); - l_proposal.supply = checkSupply(proposals[l_proposalIndex]); + l_proposal.supply = checkSupply(proposals[l_proposalIndex + 1]); emit ProposalAdded(l_blockDeadline, _targetVotePpm, l_proposalIndex); return l_proposalIndex; @@ -292,7 +292,7 @@ contract ERC20Vote { uint256 hi; uint256 score; uint8 c; - uint16 state; + uint8 state; proposal = proposals[_proposalIndex + 1]; if (proposal.state & STATE_IMMEDIATE == 0) {