diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin index 355cffc..4eb7f79 100644 --- a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin +++ b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin @@ -1 +1 @@ -61010060405264e8d4a510006a52b7d2dcc80cd2e400000062000023919062000349565b6080908152503480156200003657600080fd5b5060405162003df438038062003df483398181016040528101906200005c919062000648565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550856006908162000128919062000969565b5084600790816200013a919062000969565b508360ff166008819055504260038190555060035460a08181525050603c8262000165919062000349565b60c0818152505060646a52b7d2dcc80cd2e400000062000186919062000a50565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550826fffffffffffffffffffffffffffffffff1660e0818152505060006200022a6000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1660006001620002a3640100000000026401000000009004565b9050600081908060018154018082558091505060019003906000526020600020016000909190919091505581600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000a96565b6000807affffffffffffffffffffffffffff00000000000000000000000000606860ff16869060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620003568262000310565b9150620003638362000310565b9250828202620003738162000310565b915082820484148315176200038d576200038c6200031a565b5b5092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003fd82620003b2565b810181811067ffffffffffffffff821117156200041f576200041e620003c3565b5b80604052505050565b60006200043462000394565b9050620004428282620003f2565b919050565b600067ffffffffffffffff821115620004655762000464620003c3565b5b6200047082620003b2565b9050602081019050919050565b60005b838110156200049d57808201518184015260208101905062000480565b60008484015250505050565b6000620004c0620004ba8462000447565b62000428565b905082815260208101848484011115620004df57620004de620003ad565b5b620004ec8482856200047d565b509392505050565b600082601f8301126200050c576200050b620003a8565b5b81516200051e848260208601620004a9565b91505092915050565b600060ff82169050919050565b6200053f8162000527565b81146200054b57600080fd5b50565b6000815190506200055f8162000534565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6200058c8162000565565b81146200059857600080fd5b50565b600081519050620005ac8162000581565b92915050565b620005bd8162000310565b8114620005c957600080fd5b50565b600081519050620005dd81620005b2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200061082620005e3565b9050919050565b620006228162000603565b81146200062e57600080fd5b50565b600081519050620006428162000617565b92915050565b60008060008060008060c087890312156200066857620006676200039e565b5b600087015167ffffffffffffffff811115620006895762000688620003a3565b5b6200069789828a01620004f4565b965050602087015167ffffffffffffffff811115620006bb57620006ba620003a3565b5b620006c989828a01620004f4565b9550506040620006dc89828a016200054e565b9450506060620006ef89828a016200059b565b93505060806200070289828a01620005cc565b92505060a06200071589828a0162000631565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200077557607f821691505b6020821081036200078b576200078a6200072d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620007f87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007b6565b620008048683620007b6565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000847620008416200083b8462000310565b6200081c565b62000310565b9050919050565b6000819050919050565b620008638362000826565b6200087b62000872826200084e565b848454620007c6565b825550505050565b600090565b6200089262000883565b6200089f81848462000858565b505050565b5b81811015620008c757620008bb60008262000888565b600181019050620008a5565b5050565b601f8211156200091657620008e08162000791565b620008eb84620007a6565b81016020851015620008fb578190505b620009136200090a85620007a6565b830182620008a4565b50505b505050565b60008160020a8304905092915050565b60006200093e600019846008026200091b565b1980831691505092915050565b60006200095983836200092b565b9150826002028217905092915050565b620009748262000722565b67ffffffffffffffff81111562000990576200098f620003c3565b5b6200099c82546200075c565b620009a9828285620008cb565b600060209050601f831160018114620009e15760008415620009cc578287015190505b620009d885826200094b565b86555062000a48565b601f198416620009f18662000791565b60005b8281101562000a1b57848901518255600182019150602085019450602081019050620009f4565b8683101562000a3b578489015162000a37601f8916826200092b565b8355505b6001600288020188555050505b505050505050565b600062000a5d8262000565565b915062000a6a8362000565565b925082820262000a7a8162000565565b915080821462000a8f5762000a8e6200031a565b5b5092915050565b60805160a05160c05160e0516132de62000b1660003960008181610eb70152818161119a015261235c0152600081816116ae01528181611caa015281816121c301526123fb0152600081816116da0152818161241c01526124610152600081816117470152818161177f015281816117f7015261219f01526132de6000f3fe608060405234801561001057600080fd5b50600436106102d8576000357c010000000000000000000000000000000000000000000000000000000090048063731f237c1161019f578063a457c2d711610106578063d89135cd116100bf578063e809529511610099578063e8095295146109cf578063eda4e6d6146109ed578063f2fde38b14610a0b578063f83da35d14610a3b576102d8565b8063d89135cd14610951578063e3ab207a1461096f578063e54d63f71461099f576102d8565b8063a457c2d714610867578063a9059cbb14610897578063ab28cea0146108c7578063b470aade146108e5578063c0ab707714610903578063d340ef8a14610933576102d8565b80638da5cb5b116101585780638da5cb5b146107915780638f0b2d5d146107af5780638f1df6bc146107cb57806395d89b41146107e9578063983b2d56146108075780639da7d8ba14610837576102d8565b8063731f237c146106cb57806373f42561146106e957806374bedb951461070757806379ba50971461072557806384dde4af146107435780638d34855a14610761576102d8565b806340452d911161024357806358b2833b116101fc57806358b2833b146105bd5780636721d4ef146105db5780636787a9be1461060b5780636a2d094e1461063b5780636ffa8a051461066b57806370a082311461069b576102d8565b806340452d91146104b157806342966c68146104e1578063449a52f8146104fd57806347a505171461052d5780634abfbba21461055d57806351b4541c1461058d576102d8565b8063229ba19711610295578063229ba197146103b557806323b872dd146103d35780633092afd5146104035780633133348714610433578063313ce567146104635780633950935114610481576102d8565b806301ffc9a7146102dd57806306fdde031461030d578063095ea7b31461032b57806309f28f3c1461035b57806318160ddd146103795780631989c6a814610397575b600080fd5b6102f760048036038101906102f29190612a04565b610a6b565b6040516103049190612a4c565b60405180910390f35b610315610c11565b6040516103229190612af7565b60405180910390f35b61034560048036038101906103409190612bad565b610c9f565b6040516103529190612a4c565b60405180910390f35b610363610e70565b6040516103709190612c18565b60405180910390f35b610381610e92565b60405161038e9190612c42565b60405180910390f35b61039f610ea9565b6040516103ac9190612c42565b60405180910390f35b6103bd610eb5565b6040516103ca9190612c42565b60405180910390f35b6103ed60048036038101906103e89190612c5d565b610ed9565b6040516103fa9190612a4c565b60405180910390f35b61041d60048036038101906104189190612cb0565b61108c565b60405161042a9190612a4c565b60405180910390f35b61044d60048036038101906104489190612cdd565b61117f565b60405161045a9190612c42565b60405180910390f35b61046b611233565b6040516104789190612c42565b60405180910390f35b61049b60048036038101906104969190612bad565b611239565b6040516104a89190612a4c565b60405180910390f35b6104cb60048036038101906104c69190612d1d565b6113cf565b6040516104d89190612d63565b60405180910390f35b6104fb60048036038101906104f69190612d1d565b6113f3565b005b61051760048036038101906105129190612bad565b611521565b6040516105249190612a4c565b60405180910390f35b61054760048036038101906105429190612cb0565b611661565b6040516105549190612c42565b60405180910390f35b61057760048036038101906105729190612d1d565b6116aa565b6040516105849190612c42565b60405180910390f35b6105a760048036038101906105a29190612d1d565b61170a565b6040516105b49190612c42565b60405180910390f35b6105c561172b565b6040516105d29190612c42565b60405180910390f35b6105f560048036038101906105f09190612cdd565b611731565b6040516106029190612c42565b60405180910390f35b61062560048036038101906106209190612d1d565b6117b2565b6040516106329190612c42565b60405180910390f35b61065560048036038101906106509190612d1d565b611832565b6040516106629190612c42565b60405180910390f35b61068560048036038101906106809190612daa565b611853565b6040516106929190612c42565b60405180910390f35b6106b560048036038101906106b09190612cb0565b61188d565b6040516106c29190612c42565b60405180910390f35b6106d3611945565b6040516106e09190612a4c565b60405180910390f35b6106f1611956565b6040516106fe9190612c42565b60405180910390f35b61070f61195c565b60405161071c9190612c42565b60405180910390f35b61072d611962565b60405161073a9190612a4c565b60405180910390f35b61074b611b09565b6040516107589190612de6565b60405180910390f35b61077b60048036038101906107769190612daa565b611b2f565b6040516107889190612c42565b60405180910390f35b610799611b5d565b6040516107a69190612de6565b60405180910390f35b6107c960048036038101906107c49190612cb0565b611b83565b005b6107d3611c21565b6040516107e09190612a4c565b60405180910390f35b6107f1611d71565b6040516107fe9190612af7565b60405180910390f35b610821600480360381019061081c9190612cb0565b611dff565b60405161082e9190612a4c565b60405180910390f35b610851600480360381019061084c9190612daa565b611ebc565b60405161085e9190612c42565b60405180910390f35b610881600480360381019061087c9190612bad565b611ee8565b60405161088e9190612a4c565b60405180910390f35b6108b160048036038101906108ac9190612bad565b612107565b6040516108be9190612a4c565b60405180910390f35b6108cf61219d565b6040516108dc9190612c42565b60405180910390f35b6108ed6121c1565b6040516108fa9190612c42565b60405180910390f35b61091d60048036038101906109189190612d1d565b6121e5565b60405161092a9190612a4c565b60405180910390f35b61093b61231d565b6040516109489190612c42565b60405180910390f35b610959612323565b6040516109669190612c42565b60405180910390f35b61098960048036038101906109849190612daa565b61232d565b6040516109969190612c42565b60405180910390f35b6109b960048036038101906109b49190612cdd565b612341565b6040516109c69190612c42565b60405180910390f35b6109d76123f5565b6040516109e49190612c18565b60405180910390f35b6109f561245f565b604051610a029190612c42565b60405180910390f35b610a256004803603810190610a209190612cb0565b612483565b604051610a329190612a4c565b60405180910390f35b610a556004803603810190610a509190612e01565b612525565b604051610a629190612d63565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610abf5760019050610c0c565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610b115760019050610c0c565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610b635760019050610c0c565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610bb55760019050610c0c565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c075760019050610c0c565b600090505b919050565b60068054610c1e90612e97565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4a90612e97565b8015610c975780601f10610c6c57610100808354040283529160200191610c97565b820191906000526020600020905b815481529060010190602001808311610c7a57829003601f168201915b505050505081565b6000806000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610d6b5760008314610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190612f14565b60405180910390fd5b5b610d73611c21565b50610d7d836117b2565b905080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610e5d9190612c42565b60405180910390a3600191505092915050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b6000600c54600954610ea49190612f63565b905090565b60008080549050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000610ee6611c21565b50610ef0846117b2565b915081600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610f7b57600080fd5b81600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110079190612f63565b92505081905550611019868684612592565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516110789190612c42565b60405180910390a380925050509392505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061111557503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61111e57600080fd5b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f00000000000000000000000000000000000000000000000000000000000000006111c39190612fc6565b905060005b8481101561120c5764e8d4a5100082846111e29190612ff7565b6111ec9190612fc6565b836111f79190612f63565b9250808061120490613039565b9150506111c8565b5064e8d4a51000858361121f9190612ff7565b6112299190612fc6565b9250505092915050565b60085481565b600080611244611c21565b5061124e836117b2565b905080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112dc9190613081565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516113bc9190612c42565b60405180910390a3600191505092915050565b600081815481106113df57600080fd5b906000526020600020016000915090505481565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661144957600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111561149557600080fd5b60006114a0826117b2565b90506114aa611945565b506114b533826125b7565b5081600c60008282546114c89190613081565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516115159190612c42565b60405180910390a25050565b600080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790613101565b60405180910390fd5b6115b8611c21565b506115c2836117b2565b905082600960008282546115d69190613081565b925050819055506115e784826126be565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8856040516116459190612c42565b60405180910390a3611655612782565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000826116d89190612ff7565b7f00000000000000000000000000000000000000000000000000000000000000006117039190613081565b9050919050565b6000603c824261171a9190612f63565b6117249190612fc6565b9050919050565b60035481565b6000806402540be400836117459190612ff7565b7f00000000000000000000000000000000000000000000000000000000000000006117709190612f63565b8461177b9190612ff7565b90507f0000000000000000000000000000000000000000000000000000000000000000816117a99190612fc6565b91505092915050565b60006402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff166117e39190613121565b6fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000836118219190612ff7565b61182b9190612fc6565b9050919050565b6000603c82426118429190612f63565b61184c9190612fc6565b9050919050565b6000606860ff167affffffffffffffffffffffffffff00000000000000000000000000836001900416908060020a82049150509050919050565b60008060008061189c85611661565b92506118a960035461170a565b90506118f56402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff166118dd9190613121565b6fffffffffffffffffffffffffffffffff168261117f565b6fffffffffffffffffffffffffffffffff16915064e8d4a510006a52b7d2dcc80cd2e40000006119259190612ff7565b82846119319190612ff7565b61193b9190612fc6565b9350505050919050565b600061195160006121e5565b905090565b600c5481565b600b5481565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119bf57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000611b3d84611ebc565b9150611b4884611853565b9050611b548282611731565b92505050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bdd57600080fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806000806000806000611c37611945565b50611c40612829565b975060006001028803611c5e57600098505050505050505050611d6e565b6000600a5481548110611c7457611c7361315e565b5b90600052602060002001549350611c8a8861232d565b9550600186611c999190613081565b9050611ca484611853565b9450603c7f0000000000000000000000000000000000000000000000000000000000000000611cd39190612fc6565b9150611cdf858361117f565b9250611cf5600084611cef610e92565b84612525565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915055611d2987612915565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d67581604051611d599190612c42565b60405180910390a16001985050505050505050505b90565b60078054611d7e90612e97565b80601f0160208091040260200160405190810160405280929190818152602001828054611daa90612e97565b8015611df75780601f10611dcc57610100808354040283529160200191611df7565b820191906000526020600020905b815481529060010190602001808311611dda57829003601f168201915b505050505081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e5b57600080fd5b6001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000602060ff166cffffffffffffffffff00000000836001900416908060020a82049150509050919050565b600080611ef4836117b2565b905080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611f7f57600080fd5b611f87611c21565b5080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120149190612f63565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516120f49190612c42565b60405180910390a3600191505092915050565b6000806000612114611c21565b5061211e846117b2565b915061212b338684612592565b90508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161218a9190612c42565b60405180910390a3809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060006121f560035461170a565b91506000820361220a57600092505050612318565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008411801561224c57508184105b15612255578391505b61225f818361117f565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550603c826122a49190612ff7565b6003546122b19190613081565b60038190555080826003547fa0717e54e02bd9829db5e6e998aec0ae9de796b8d150a3cc46a92ab869697755600260009054906101000a90046fffffffffffffffffffffffffffffffff1660405161230991906131c8565b60405180910390a46001925050505b919050565b600a5481565b6000600c54905090565b600063ffffffff8260019004169050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f00000000000000000000000000000000000000000000000000000000000000006123859190612fc6565b905060005b848110156123ce5764e8d4a5100082846123a49190612ff7565b6123ae9190612fc6565b836123b99190613081565b925080806123c690613039565b91505061238a565b5064e8d4a5100085836123e19190612ff7565b6123eb9190612fc6565b9250505092915050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000426124469190612f63565b6124509190612fc6565b61245a9190613081565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124df57600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000807affffffffffffffffffffffffffff00000000000000000000000000606860ff16869060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b60008061259f85846125b7565b506125aa84846126be565b5060019150509392505050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000850361261357600093505050506126b8565b61261c86611661565b925084831015612661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126589061322f565b60405180910390fd5b848361266d9190612f63565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000850361271a576000935050505061277c565b61272386611661565b925084836127319190613081565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600061278f610e92565b9050600060016000805490506127a59190612f63565b815481106127b6576127b561315e565b5b90600052602060002001546001900491506cffffffffffffffffff000000001982169150602060ff16819060020a028217915081600102600060016000805490506128019190612f63565b815481106128125761281161315e565b5b906000526020600020018190555060019250505090565b600080600080600a54815481106128435761284261315e565b5b906000526020600020015491503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa1580156128b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128db919061327b565b6fffffffffffffffffffffffffffffffff1690506128f88261232d565b811161290c57600060010292505050612912565b81925050505b90565b600080600061292384611b2f565b9150600b54612931836117b2565b61293b9190612f63565b9050612969600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826126be565b506001600a600082825461297d9190613081565b9250508190555080600b60008282546129969190613081565b925050819055508192505050919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129e1816129ac565b81146129ec57600080fd5b50565b6000813590506129fe816129d8565b92915050565b600060208284031215612a1a57612a196129a7565b5b6000612a28848285016129ef565b91505092915050565b60008115159050919050565b612a4681612a31565b82525050565b6000602082019050612a616000830184612a3d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aa1578082015181840152602081019050612a86565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ac982612a67565b612ad38185612a72565b9350612ae3818560208601612a83565b612aec81612aad565b840191505092915050565b60006020820190508181036000830152612b118184612abe565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b4482612b19565b9050919050565b612b5481612b39565b8114612b5f57600080fd5b50565b600081359050612b7181612b4b565b92915050565b6000819050919050565b612b8a81612b77565b8114612b9557600080fd5b50565b600081359050612ba781612b81565b92915050565b60008060408385031215612bc457612bc36129a7565b5b6000612bd285828601612b62565b9250506020612be385828601612b98565b9150509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b612c1281612bed565b82525050565b6000602082019050612c2d6000830184612c09565b92915050565b612c3c81612b77565b82525050565b6000602082019050612c576000830184612c33565b92915050565b600080600060608486031215612c7657612c756129a7565b5b6000612c8486828701612b62565b9350506020612c9586828701612b62565b9250506040612ca686828701612b98565b9150509250925092565b600060208284031215612cc657612cc56129a7565b5b6000612cd484828501612b62565b91505092915050565b60008060408385031215612cf457612cf36129a7565b5b6000612d0285828601612b98565b9250506020612d1385828601612b98565b9150509250929050565b600060208284031215612d3357612d326129a7565b5b6000612d4184828501612b98565b91505092915050565b6000819050919050565b612d5d81612d4a565b82525050565b6000602082019050612d786000830184612d54565b92915050565b612d8781612d4a565b8114612d9257600080fd5b50565b600081359050612da481612d7e565b92915050565b600060208284031215612dc057612dbf6129a7565b5b6000612dce84828501612d95565b91505092915050565b612de081612b39565b82525050565b6000602082019050612dfb6000830184612dd7565b92915050565b60008060008060808587031215612e1b57612e1a6129a7565b5b6000612e2987828801612b98565b9450506020612e3a87828801612b98565b9350506040612e4b87828801612b98565b9250506060612e5c87828801612b98565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612eaf57607f821691505b602082108103612ec257612ec1612e68565b5b50919050565b7f5a45524f5f464952535400000000000000000000000000000000000000000000600082015250565b6000612efe600a83612a72565b9150612f0982612ec8565b602082019050919050565b60006020820190508181036000830152612f2d81612ef1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f6e82612b77565b9150612f7983612b77565b9250828203905081811115612f9157612f90612f34565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612fd182612b77565b9150612fdc83612b77565b925082612fec57612feb612f97565b5b828204905092915050565b600061300282612b77565b915061300d83612b77565b925082820261301b81612b77565b9150828204841483151761303257613031612f34565b5b5092915050565b600061304482612b77565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361307657613075612f34565b5b600182019050919050565b600061308c82612b77565b915061309783612b77565b92508282019050808211156130af576130ae612f34565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b60006130eb600a83612a72565b91506130f6826130b5565b602082019050919050565b6000602082019050818103600083015261311a816130de565b9050919050565b600061312c82612bed565b915061313783612bed565b925082820261314581612bed565b915080821461315757613156612f34565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006131b26131ad6131a884612bed565b61318d565b612b77565b9050919050565b6131c281613197565b82525050565b60006020820190506131dd60008301846131b9565b92915050565b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b6000613219600d83612a72565b9150613224826131e3565b602082019050919050565b600060208201905081810360008301526132488161320c565b9050919050565b61325881612bed565b811461326357600080fd5b50565b6000815190506132758161324f565b92915050565b600060208284031215613291576132906129a7565b5b600061329f84828501613266565b9150509291505056fea2646970667358221220d498bcac54c9f0e4b63eea066f2ad30aea293661380ef849a31efc9b436e3eb064736f6c63430008110033 \ No newline at end of file +61010060405264e8d4a510006a52b7d2dcc80cd2e400000062000023919062000342565b6080908152503480156200003657600080fd5b506040516200424e3803806200424e83398181016040528101906200005c919062000641565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550856006908162000128919062000962565b5084600790816200013a919062000962565b508360ff166008819055504260038190555060035460a08181525050603c8262000165919062000342565b60c0818152505060646a52b7d2dcc80cd2e400000062000186919062000a49565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550826fffffffffffffffffffffffffffffffff1660e0818152505060006200022a6000600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1660006001620002a3640100000000026401000000009004565b9050600081908060018154018082558091505060019003906000526020600020016000909190919091505581600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000a8f565b60008073fffff00000000000000000000000000000000000608c60ff16869060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200034f8262000309565b91506200035c8362000309565b92508282026200036c8162000309565b9150828204841483151762000386576200038562000313565b5b5092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003f682620003ab565b810181811067ffffffffffffffff82111715620004185762000417620003bc565b5b80604052505050565b60006200042d6200038d565b90506200043b8282620003eb565b919050565b600067ffffffffffffffff8211156200045e576200045d620003bc565b5b6200046982620003ab565b9050602081019050919050565b60005b838110156200049657808201518184015260208101905062000479565b60008484015250505050565b6000620004b9620004b38462000440565b62000421565b905082815260208101848484011115620004d857620004d7620003a6565b5b620004e584828562000476565b509392505050565b600082601f830112620005055762000504620003a1565b5b815162000517848260208601620004a2565b91505092915050565b600060ff82169050919050565b620005388162000520565b81146200054457600080fd5b50565b60008151905062000558816200052d565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b62000585816200055e565b81146200059157600080fd5b50565b600081519050620005a5816200057a565b92915050565b620005b68162000309565b8114620005c257600080fd5b50565b600081519050620005d681620005ab565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200060982620005dc565b9050919050565b6200061b81620005fc565b81146200062757600080fd5b50565b6000815190506200063b8162000610565b92915050565b60008060008060008060c0878903121562000661576200066062000397565b5b600087015167ffffffffffffffff8111156200068257620006816200039c565b5b6200069089828a01620004ed565b965050602087015167ffffffffffffffff811115620006b457620006b36200039c565b5b620006c289828a01620004ed565b9550506040620006d589828a0162000547565b9450506060620006e889828a0162000594565b9350506080620006fb89828a01620005c5565b92505060a06200070e89828a016200062a565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200076e57607f821691505b60208210810362000784576200078362000726565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620007f17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007af565b620007fd8683620007af565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008406200083a620008348462000309565b62000815565b62000309565b9050919050565b6000819050919050565b6200085c836200081f565b620008746200086b8262000847565b848454620007bf565b825550505050565b600090565b6200088b6200087c565b6200089881848462000851565b505050565b5b81811015620008c057620008b460008262000881565b6001810190506200089e565b5050565b601f8211156200090f57620008d9816200078a565b620008e4846200079f565b81016020851015620008f4578190505b6200090c62000903856200079f565b8301826200089d565b50505b505050565b60008160020a8304905092915050565b6000620009376000198460080262000914565b1980831691505092915050565b600062000952838362000924565b9150826002028217905092915050565b6200096d826200071b565b67ffffffffffffffff811115620009895762000988620003bc565b5b62000995825462000755565b620009a2828285620008c4565b600060209050601f831160018114620009da5760008415620009c5578287015190505b620009d1858262000944565b86555062000a41565b601f198416620009ea866200078a565b60005b8281101562000a1457848901518255600182019150602085019450602081019050620009ed565b8683101562000a34578489015162000a30601f89168262000924565b8355505b6001600288020188555050505b505050505050565b600062000a56826200055e565b915062000a63836200055e565b925082820262000a73816200055e565b915080821462000a885762000a8762000313565b5b5092915050565b60805160a05160c05160e05161373f62000b0f60003960008181610f4d01528181611230015261244a01526000818161173801528181611d98015281816122b101526124e90152600081816117640152818161250a015261254f0152600081816117d10152818161180901528181611881015261228d015261373f6000f3fe608060405234801561001057600080fd5b506004361061030e576000357c01000000000000000000000000000000000000000000000000000000009004806370a08231116101ba578063a457c2d711610106578063d89135cd116100bf578063e809529511610099578063e809529514610a65578063eda4e6d614610a83578063f2fde38b14610aa1578063f83da35d14610ad15761030e565b8063d89135cd146109e7578063e3ab207a14610a05578063e54d63f714610a355761030e565b8063a457c2d7146108fd578063a9059cbb1461092d578063ab28cea01461095d578063b470aade1461097b578063c0ab707714610999578063d340ef8a146109c95761030e565b80638d34855a116101735780638f1df6bc1161014d5780638f1df6bc1461086157806395d89b411461087f578063983b2d561461089d5780639da7d8ba146108cd5761030e565b80638d34855a146107f75780638da5cb5b146108275780638f0b2d5d146108455761030e565b806370a0823114610731578063731f237c1461076157806373f425611461077f57806374bedb951461079d57806379ba5097146107bb57806384dde4af146107d95761030e565b806340452d911161027957806351b4541c116102325780636787a9be1161020c5780636787a9be146106715780636a2d094e146106a15780636d5055a6146106d15780636ffa8a05146107015761030e565b806351b4541c146105f357806358b2833b146106235780636721d4ef146106415761030e565b806340452d91146104e757806340fc89f51461051757806342966c6814610547578063449a52f81461056357806347a50517146105935780634abfbba2146105c35761030e565b8063229ba197116102cb578063229ba197146103eb57806323b872dd146104095780633092afd5146104395780633133348714610469578063313ce5671461049957806339509351146104b75761030e565b806301ffc9a71461031357806306fdde0314610343578063095ea7b31461036157806309f28f3c1461039157806318160ddd146103af5780631989c6a8146103cd575b600080fd5b61032d60048036038101906103289190612df9565b610b01565b60405161033a9190612e41565b60405180910390f35b61034b610ca7565b6040516103589190612eec565b60405180910390f35b61037b60048036038101906103769190612fa2565b610d35565b6040516103889190612e41565b60405180910390f35b610399610f06565b6040516103a6919061300d565b60405180910390f35b6103b7610f28565b6040516103c49190613037565b60405180910390f35b6103d5610f3f565b6040516103e29190613037565b60405180910390f35b6103f3610f4b565b6040516104009190613037565b60405180910390f35b610423600480360381019061041e9190613052565b610f6f565b6040516104309190612e41565b60405180910390f35b610453600480360381019061044e91906130a5565b611122565b6040516104609190612e41565b60405180910390f35b610483600480360381019061047e91906130d2565b611215565b6040516104909190613037565b60405180910390f35b6104a16112c9565b6040516104ae9190613037565b60405180910390f35b6104d160048036038101906104cc9190612fa2565b6112cf565b6040516104de9190612e41565b60405180910390f35b61050160048036038101906104fc9190613112565b611465565b60405161050e9190613158565b60405180910390f35b610531600480360381019061052c919061319f565b611489565b60405161053e9190613037565b60405180910390f35b610561600480360381019061055c9190613112565b6114ba565b005b61057d60048036038101906105789190612fa2565b61159c565b60405161058a9190612e41565b60405180910390f35b6105ad60048036038101906105a891906130a5565b6116dc565b6040516105ba9190613037565b60405180910390f35b6105dd60048036038101906105d89190613112565b611734565b6040516105ea9190613037565b60405180910390f35b61060d60048036038101906106089190613112565b611794565b60405161061a9190613037565b60405180910390f35b61062b6117b5565b6040516106389190613037565b60405180910390f35b61065b600480360381019061065691906130d2565b6117bb565b6040516106689190613037565b60405180910390f35b61068b60048036038101906106869190613112565b61183c565b6040516106989190613037565b60405180910390f35b6106bb60048036038101906106b69190613112565b6118bc565b6040516106c89190613037565b60405180910390f35b6106eb60048036038101906106e691906130a5565b6118dd565b6040516106f89190613037565b60405180910390f35b61071b6004803603810190610716919061319f565b611948565b6040516107289190613037565b60405180910390f35b61074b600480360381019061074691906130a5565b61197b565b6040516107589190613037565b60405180910390f35b610769611a33565b6040516107769190612e41565b60405180910390f35b610787611a44565b6040516107949190613037565b60405180910390f35b6107a5611a4a565b6040516107b29190613037565b60405180910390f35b6107c3611a50565b6040516107d09190612e41565b60405180910390f35b6107e1611bf7565b6040516107ee91906131db565b60405180910390f35b610811600480360381019061080c919061319f565b611c1d565b60405161081e9190613037565b60405180910390f35b61082f611c4b565b60405161083c91906131db565b60405180910390f35b61085f600480360381019061085a91906130a5565b611c71565b005b610869611d0f565b6040516108769190612e41565b60405180910390f35b610887611e5f565b6040516108949190612eec565b60405180910390f35b6108b760048036038101906108b291906130a5565b611eed565b6040516108c49190612e41565b60405180910390f35b6108e760048036038101906108e2919061319f565b611faa565b6040516108f49190613037565b60405180910390f35b61091760048036038101906109129190612fa2565b611fd6565b6040516109249190612e41565b60405180910390f35b61094760048036038101906109429190612fa2565b6121f5565b6040516109549190612e41565b60405180910390f35b61096561228b565b6040516109729190613037565b60405180910390f35b6109836122af565b6040516109909190613037565b60405180910390f35b6109b360048036038101906109ae9190613112565b6122d3565b6040516109c09190612e41565b60405180910390f35b6109d161240b565b6040516109de9190613037565b60405180910390f35b6109ef612411565b6040516109fc9190613037565b60405180910390f35b610a1f6004803603810190610a1a919061319f565b61241b565b604051610a2c9190613037565b60405180910390f35b610a4f6004803603810190610a4a91906130d2565b61242f565b604051610a5c9190613037565b60405180910390f35b610a6d6124e3565b604051610a7a919061300d565b60405180910390f35b610a8b61254d565b604051610a989190613037565b60405180910390f35b610abb6004803603810190610ab691906130a5565b612571565b604051610ac89190612e41565b60405180910390f35b610aeb6004803603810190610ae691906131f6565b612613565b604051610af89190613158565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610b555760019050610ca2565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610ba75760019050610ca2565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610bf95760019050610ca2565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c4b5760019050610ca2565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c9d5760019050610ca2565b600090505b919050565b60068054610cb49061328c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce09061328c565b8015610d2d5780601f10610d0257610100808354040283529160200191610d2d565b820191906000526020600020905b815481529060010190602001808311610d1057829003601f168201915b505050505081565b6000806000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610e015760008314610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790613309565b60405180910390fd5b5b610e09611d0f565b50610e138361183c565b905080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610ef39190613037565b60405180910390a3600191505092915050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b6000600c54600954610f3a9190613358565b905090565b60008080549050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000610f7c611d0f565b50610f868461183c565b915081600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561101157600080fd5b81600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461109d9190613358565b925050819055506110af868684612679565b90508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161110e9190613037565b60405180910390a380925050509392505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111ab57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6111b457600080fd5b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f000000000000000000000000000000000000000000000000000000000000000061125991906133bb565b905060005b848110156112a25764e8d4a51000828461127891906133ec565b61128291906133bb565b8361128d9190613358565b9250808061129a9061342e565b91505061125e565b5064e8d4a5100085836112b591906133ec565b6112bf91906133bb565b9250505092915050565b60085481565b6000806112da611d0f565b506112e48361183c565b905080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113729190613476565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516114529190613037565b60405180910390a3600191505092915050565b6000818154811061147557600080fd5b906000526020600020016000915090505481565b6000606860ff16710fffffffff00000000000000000000000000836001900416908060020a82049150509050919050565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661151057600080fd5b600061151b8261183c565b9050611525611a33565b50611530338261270f565b5081600c60008282546115439190613476565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516115909190613037565b60405180910390a25050565b600080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661162b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611622906134f6565b60405180910390fd5b611633611d0f565b5061163d8361183c565b905082600960008282546116519190613476565b92505081905550611662848261283f565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8856040516116c09190613037565b60405180910390a36116d061299a565b50600191505092915050565b600068ffffffffffffffffff600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460019004169050919050565b60007f00000000000000000000000000000000000000000000000000000000000000008261176291906133ec565b7f000000000000000000000000000000000000000000000000000000000000000061178d9190613476565b9050919050565b6000603c82426117a49190613358565b6117ae91906133bb565b9050919050565b60035481565b6000806402540be400836117cf91906133ec565b7f00000000000000000000000000000000000000000000000000000000000000006117fa9190613358565b8461180591906133ec565b90507f00000000000000000000000000000000000000000000000000000000000000008161183391906133bb565b91505092915050565b60006402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff1661186d9190613516565b6fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000836118ab91906133ec565b6118b591906133bb565b9050919050565b6000603c82426118cc9190613358565b6118d691906133bb565b9050919050565b6000604860ff166cffffffff000000000000000000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546001900416908060020a82049150509050919050565b6000608c60ff1673fffff00000000000000000000000000000000000836001900416908060020a82049150509050919050565b60008060008061198a856116dc565b9250611997600354611794565b90506119e36402540be400600260009054906101000a90046fffffffffffffffffffffffffffffffff166119cb9190613516565b6fffffffffffffffffffffffffffffffff1682611215565b6fffffffffffffffffffffffffffffffff16915064e8d4a510006a52b7d2dcc80cd2e4000000611a1391906133ec565b8284611a1f91906133ec565b611a2991906133bb565b9350505050919050565b6000611a3f60006122d3565b905090565b600c5481565b600b5481565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611aad57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000611c2b84611faa565b9150611c3684611948565b9050611c4282826117bb565b92505050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ccb57600080fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806000806000806000611d25611a33565b50611d2e612a41565b975060006001028803611d4c57600098505050505050505050611e5c565b6000600a5481548110611d6257611d61613553565b5b90600052602060002001549350611d788861241b565b9550600186611d879190613476565b9050611d9284611948565b9450603c7f0000000000000000000000000000000000000000000000000000000000000000611dc191906133bb565b9150611dcd8583611215565b9250611de3600084611ddd610f28565b84612613565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915055611e1787612b2d565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d67581604051611e479190613037565b60405180910390a16001985050505050505050505b90565b60078054611e6c9061328c565b80601f0160208091040260200160405190810160405280929190818152602001828054611e989061328c565b8015611ee55780601f10611eba57610100808354040283529160200191611ee5565b820191906000526020600020905b815481529060010190602001808311611ec857829003601f168201915b505050505081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f4957600080fd5b6001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000602060ff166cffffffffffffffffff00000000836001900416908060020a82049150509050919050565b600080611fe28361183c565b905080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561206d57600080fd5b612075611d0f565b5080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121029190613358565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516121e29190613037565b60405180910390a3600191505092915050565b6000806000612202611d0f565b5061220c8461183c565b9150612219338684612679565b90508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516122789190613037565b60405180910390a3809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060006122e3600354611794565b9150600082036122f857600092505050612406565b600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008411801561233a57508184105b15612343578391505b61234d8183611215565b600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550603c8261239291906133ec565b60035461239f9190613476565b60038190555080826003547fa0717e54e02bd9829db5e6e998aec0ae9de796b8d150a3cc46a92ab869697755600260009054906101000a90046fffffffffffffffffffffffffffffffff166040516123f791906135bd565b60405180910390a46001925050505b919050565b600a5481565b6000600c54905090565b600063ffffffff8260019004169050919050565b600080600064e8d4a5100091506a52b7d2dcc80cd2e40000007f000000000000000000000000000000000000000000000000000000000000000061247391906133bb565b905060005b848110156124bc5764e8d4a51000828461249291906133ec565b61249c91906133bb565b836124a79190613476565b925080806124b49061342e565b915050612478565b5064e8d4a5100085836124cf91906133ec565b6124d991906133bb565b9250505092915050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000426125349190613358565b61253e91906133bb565b6125489190613476565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125cd57600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b60008073fffff00000000000000000000000000000000000608c60ff16869060020a0216600102811790506cffffffffffffffffff00000000602060ff16859060020a02166001028117905063ffffffff83166001028117905080915050949350505050565b600080612686858461270f565b50612691848461283f565b5061269a6124e3565b6fffffffffffffffffffffffffffffffff169050806126b8866118dd565b141580156126f257508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612703576127018582612bee565b505b60019150509392505050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546001900490506000850361276f5760009350505050612839565b612778866116dc565b9250848310156127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b490613624565b60405180910390fd5b84836127c99190613358565b915068ffffffffffffffffff198116905068ffffffffffffffffff82168117905080600102600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546001900490506000850361289f5760009350505050612994565b6128a8866116dc565b925084836128b69190613476565b91508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611612926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291d90613690565b60405180910390fd5b68ffffffffffffffffff198116905068ffffffffffffffffff82168117905080600102600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b60008060006129a7610f28565b9050600060016000805490506129bd9190613358565b815481106129ce576129cd613553565b5b90600052602060002001546001900491506cffffffffffffffffff000000001982169150602060ff16819060020a02821791508160010260006001600080549050612a199190613358565b81548110612a2a57612a29613553565b5b906000526020600020018190555060019250505090565b600080600080600a5481548110612a5b57612a5a613553565b5b906000526020600020015491503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015612acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af391906136dc565b6fffffffffffffffffffffffffffffffff169050612b108261241b565b8111612b2457600060010292505050612b2a565b81925050505b90565b6000806000612b3b84611c1d565b9150600b54612b498361183c565b612b539190613358565b9050612b81600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261283f565b506001600a6000828254612b959190613476565b9250508190555080600b6000828254612bae9190613476565b92505081905550612be3600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a54612bee565b508192505050919050565b60006cffffffff00000000000000000019600102600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825416925050819055506cffffffff000000000000000000604860ff16839060020a0216600102600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282541792505081905550612cbf612cca565b506001905092915050565b60008060008060006001600080549050612ce49190613358565b81548110612cf557612cf4613553565b5b906000526020600020015492506001612d0d84611489565b612d179190613476565b905082600190049150710fffffffff000000000000000000000000001982169150710fffffffff00000000000000000000000000606860ff16829060020a0216821791508160010260006001600080549050612d739190613358565b81548110612d8457612d83613553565b5b90600052602060002001819055506001935050505090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612dd681612da1565b8114612de157600080fd5b50565b600081359050612df381612dcd565b92915050565b600060208284031215612e0f57612e0e612d9c565b5b6000612e1d84828501612de4565b91505092915050565b60008115159050919050565b612e3b81612e26565b82525050565b6000602082019050612e566000830184612e32565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e96578082015181840152602081019050612e7b565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ebe82612e5c565b612ec88185612e67565b9350612ed8818560208601612e78565b612ee181612ea2565b840191505092915050565b60006020820190508181036000830152612f068184612eb3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f3982612f0e565b9050919050565b612f4981612f2e565b8114612f5457600080fd5b50565b600081359050612f6681612f40565b92915050565b6000819050919050565b612f7f81612f6c565b8114612f8a57600080fd5b50565b600081359050612f9c81612f76565b92915050565b60008060408385031215612fb957612fb8612d9c565b5b6000612fc785828601612f57565b9250506020612fd885828601612f8d565b9150509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61300781612fe2565b82525050565b60006020820190506130226000830184612ffe565b92915050565b61303181612f6c565b82525050565b600060208201905061304c6000830184613028565b92915050565b60008060006060848603121561306b5761306a612d9c565b5b600061307986828701612f57565b935050602061308a86828701612f57565b925050604061309b86828701612f8d565b9150509250925092565b6000602082840312156130bb576130ba612d9c565b5b60006130c984828501612f57565b91505092915050565b600080604083850312156130e9576130e8612d9c565b5b60006130f785828601612f8d565b925050602061310885828601612f8d565b9150509250929050565b60006020828403121561312857613127612d9c565b5b600061313684828501612f8d565b91505092915050565b6000819050919050565b6131528161313f565b82525050565b600060208201905061316d6000830184613149565b92915050565b61317c8161313f565b811461318757600080fd5b50565b60008135905061319981613173565b92915050565b6000602082840312156131b5576131b4612d9c565b5b60006131c38482850161318a565b91505092915050565b6131d581612f2e565b82525050565b60006020820190506131f060008301846131cc565b92915050565b600080600080608085870312156132105761320f612d9c565b5b600061321e87828801612f8d565b945050602061322f87828801612f8d565b935050604061324087828801612f8d565b925050606061325187828801612f8d565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132a457607f821691505b6020821081036132b7576132b661325d565b5b50919050565b7f5a45524f5f464952535400000000000000000000000000000000000000000000600082015250565b60006132f3600a83612e67565b91506132fe826132bd565b602082019050919050565b60006020820190508181036000830152613322816132e6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061336382612f6c565b915061336e83612f6c565b925082820390508181111561338657613385613329565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133c682612f6c565b91506133d183612f6c565b9250826133e1576133e061338c565b5b828204905092915050565b60006133f782612f6c565b915061340283612f6c565b925082820261341081612f6c565b9150828204841483151761342757613426613329565b5b5092915050565b600061343982612f6c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361346b5761346a613329565b5b600182019050919050565b600061348182612f6c565b915061348c83612f6c565b92508282019050808211156134a4576134a3613329565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b60006134e0600a83612e67565b91506134eb826134aa565b602082019050919050565b6000602082019050818103600083015261350f816134d3565b9050919050565b600061352182612fe2565b915061352c83612fe2565b925082820261353a81612fe2565b915080821461354c5761354b613329565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006135a76135a261359d84612fe2565b613582565b612f6c565b9050919050565b6135b78161358c565b82525050565b60006020820190506135d260008301846135ae565b92915050565b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b600061360e600d83612e67565b9150613619826135d8565b602082019050919050565b6000602082019050818103600083015261363d81613601565b9050919050565b7f4552525f574f554c445752415000000000000000000000000000000000000000600082015250565b600061367a600d83612e67565b915061368582613644565b602082019050919050565b600060208201905081810360008301526136a98161366d565b9050919050565b6136b981612fe2565b81146136c457600080fd5b50565b6000815190506136d6816136b0565b92915050565b6000602082840312156136f2576136f1612d9c565b5b6000613700848285016136c7565b9150509291505056fea26469706673582212207401ff4053a77f1bd7cedd9dfa23bba896e4b4f6ca269c8809cf8a4fadfa4ead64736f6c63430008110033 \ No newline at end of file diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.json b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.json index 654f397..d91e5e8 100644 --- a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.json +++ b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.json @@ -1 +1 @@ -[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"uint128","name":"_taxLevelMinute","type":"uint128"},{"internalType":"uint256","name":"_periodMinutes","type":"uint256"},{"internalType":"address","name":"_defaultSinkAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_foo","type":"bytes32"}],"name":"Debug","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_periodCount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_oldAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"Decayed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_period","type":"uint256"}],"name":"Period","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_account","type":"address"},{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Redistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"actualPeriod","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyDemurrage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rounds","type":"uint256"}],"name":"applyDemurrageLimited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"baseBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changePeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"decayBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"demurrageAmount","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"}],"name":"demurrageCycles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"demurrageTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"uint256","name":"_demurrageAmount","type":"uint256"}],"name":"getDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_redistribution","type":"bytes32"}],"name":"getDistributionFromRedistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastTimestamp","type":"uint256"}],"name":"getMinutesDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_periodCount","type":"uint256"}],"name":"getPeriodTimeDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"growBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redistributionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"redistributions","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"removeMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resolutionFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sinkAddress","type":"address"}],"name":"setSinkAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sinkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"toBaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_participants","type":"uint256"},{"internalType":"uint256","name":"_demurrageModifierPpm","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"toRedistribution","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionDemurrageModifier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSink","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] +[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"uint128","name":"_taxLevelMinute","type":"uint128"},{"internalType":"uint256","name":"_periodMinutes","type":"uint256"},{"internalType":"address","name":"_defaultSinkAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_foo","type":"bytes32"}],"name":"Debug","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_periodCount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_oldAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"Decayed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_period","type":"uint256"}],"name":"Period","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_account","type":"address"},{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Redistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"accountPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"actualPeriod","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyDemurrage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rounds","type":"uint256"}],"name":"applyDemurrageLimited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"baseBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changePeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"decayBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"demurrageAmount","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"}],"name":"demurrageCycles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"demurrageTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"uint256","name":"_demurrageAmount","type":"uint256"}],"name":"getDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_redistribution","type":"bytes32"}],"name":"getDistributionFromRedistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastTimestamp","type":"uint256"}],"name":"getMinutesDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_periodCount","type":"uint256"}],"name":"getPeriodTimeDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"growBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redistributionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"redistributions","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"removeMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resolutionFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sinkAddress","type":"address"}],"name":"setSinkAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sinkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"toBaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_participants","type":"uint256"},{"internalType":"uint256","name":"_demurrageModifierPpm","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"toRedistribution","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionDemurrageModifier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionParticipants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"redistribution","type":"bytes32"}],"name":"toRedistributionSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSink","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] diff --git a/python/tests/test_single.py b/python/tests/test_single.py index b1250e4..0eb6423 100644 --- a/python/tests/test_single.py +++ b/python/tests/test_single.py @@ -90,6 +90,7 @@ class TestRedistributionSingle(TestDemurrageSingle): r = self.rpc.do(o) balance = c.parse_balance(r) expected_balance = new_supply - (new_supply * tax_modifier) + logg.debug('expected balance {}'.format(expected_balance)) self.assert_within_lower(balance, expected_balance, 1) diff --git a/solidity/DemurrageTokenSingleNocap.sol b/solidity/DemurrageTokenSingleNocap.sol index 95eb7da..2fabe6a 100644 --- a/solidity/DemurrageTokenSingleNocap.sol +++ b/solidity/DemurrageTokenSingleNocap.sol @@ -10,11 +10,24 @@ contract DemurrageTokenSingleCap { uint256 constant maskRedistributionPeriod = 0x00000000000000000000000000000000000000000000000000000000ffffffff; // (1 << 32) - 1 uint8 constant shiftRedistributionValue = 32; uint256 constant maskRedistributionValue = 0x00000000000000000000000000000000000000ffffffffffffffffff00000000; // ((1 << 72) - 1) << 32 - uint8 constant shiftRedistributionDemurrage = 104; - uint256 constant maskRedistributionDemurrage = 0x0000000000ffffffffffffffffffffffffffff00000000000000000000000000; // ((1 << 36) - 1) << 140 + uint8 constant shiftRedistributionParticipants = 104; + uint256 constant maskRedistributionParticipants = 0x00000000000000000000000000000fffffffff00000000000000000000000000; // ((1 << 36) - 1) << 104 + uint8 constant shiftRedistributionDemurrage = 140; + uint256 constant maskRedistributionDemurrage = 0x000000000000000000000000fffff00000000000000000000000000000000000; // ((1 << 20) - 1) << 140 + + //uint8 constant shiftRedistributionDemurrage = 104; + //uint256 constant maskRedistributionDemurrage = 0x0000000000ffffffffffffffffffffffffffff00000000000000000000000000; // ((1 << 36) - 1) << 140 + + // Account bit field, with associated shifts and masks + // Mirrors structure of redistributions for consistency + mapping (address => bytes32) account; // uint152(unused) | uint32(period) | uint72(value) + uint8 constant shiftAccountValue = 0; + uint256 constant maskAccountValue = 0x0000000000000000000000000000000000000000000000ffffffffffffffffff; // (1 << 72) - 1 + uint8 constant shiftAccountPeriod = 72; + uint256 constant maskAccountPeriod = 0x00000000000000000000000000000000000000ffffffff000000000000000000; // ((1 << 32) - 1) << 72 // Account balances - mapping (address => uint256) account; + //mapping (address => uint256) account; // Cached demurrage amount, ppm with 38 digit resolution uint128 public demurrageAmount; @@ -148,6 +161,36 @@ contract DemurrageTokenSingleCap { return true; } + // Deserialize the pemurrage period for the given account is participating in + function accountPeriod(address _account) public view returns (uint256) { + return (uint256(account[_account]) & maskAccountPeriod) >> shiftAccountPeriod; + } + + // Add number of participants for the current redistribution period by one + function incrementRedistributionParticipants() private returns (bool) { + bytes32 currentRedistribution; + uint256 tmpRedistribution; + uint256 participants; + + currentRedistribution = redistributions[redistributions.length-1]; + participants = toRedistributionParticipants(currentRedistribution) + 1; + tmpRedistribution = uint256(currentRedistribution); + tmpRedistribution &= (~maskRedistributionParticipants); + tmpRedistribution |= ((participants << shiftRedistributionParticipants) & maskRedistributionParticipants); + + redistributions[redistributions.length-1] = bytes32(tmpRedistribution); + + return true; + } + + // Save the given demurrage period as the currently participation period for the given address + function registerAccountPeriod(address _account, uint256 _period) private returns (bool) { + account[_account] &= bytes32(~maskAccountPeriod); + account[_account] |= bytes32((_period << shiftAccountPeriod) & maskAccountPeriod); + incrementRedistributionParticipants(); + return true; + } + /// Implements ERC20 function balanceOf(address _account) public view returns (uint256) { uint256 baseBalance; @@ -165,7 +208,7 @@ contract DemurrageTokenSingleCap { /// Balance unmodified by demurrage function baseBalanceOf(address _account) public view returns (uint256) { - return account[_account]; + return uint256(account[_account]) & maskAccountValue; } /// Increases base balance for a single account @@ -181,7 +224,11 @@ contract DemurrageTokenSingleCap { } oldBalance = baseBalanceOf(_account); - account[_account] = oldBalance + _delta; + newBalance = oldBalance + _delta; + require(uint160(newBalance) > uint160(oldBalance), 'ERR_WOULDWRAP'); // revert if increase would result in a wrapped value + workAccount &= (~maskAccountValue); + workAccount |= (newBalance & maskAccountValue); + account[_account] = bytes32(workAccount); return true; } @@ -199,10 +246,54 @@ contract DemurrageTokenSingleCap { oldBalance = baseBalanceOf(_account); require(oldBalance >= _delta, 'ERR_OVERSPEND'); // overspend guard - account[_account] = oldBalance - _delta; + newBalance = oldBalance - _delta; + workAccount &= (~maskAccountValue); + workAccount |= (newBalance & maskAccountValue); + account[_account] = bytes32(workAccount); return true; } + +// /// Balance unmodified by demurrage +// function baseBalanceOf(address _account) public view returns (uint256) { +// return account[_account]; +// } +// +// /// Increases base balance for a single account +// function increaseBaseBalance(address _account, uint256 _delta) private returns (bool) { +// uint256 oldBalance; +// uint256 newBalance; +// uint256 workAccount; +// +// workAccount = uint256(account[_account]); +// +// if (_delta == 0) { +// return false; +// } +// +// oldBalance = baseBalanceOf(_account); +// account[_account] = oldBalance + _delta; +// return true; +// } +// +// /// Decreases base balance for a single account +// function decreaseBaseBalance(address _account, uint256 _delta) private returns (bool) { +// uint256 oldBalance; +// uint256 newBalance; +// uint256 workAccount; +// +// workAccount = uint256(account[_account]); +// +// if (_delta == 0) { +// return false; +// } +// +// oldBalance = baseBalanceOf(_account); +// require(oldBalance >= _delta, 'ERR_OVERSPEND'); // overspend guard +// account[_account] = oldBalance - _delta; +// return true; +// } + // Creates new tokens out of thin air, and allocates them to the given address // Triggers tax function mintTo(address _beneficiary, uint256 _amount) external returns (bool) { @@ -245,6 +336,11 @@ contract DemurrageTokenSingleCap { return (uint256(redistribution) & maskRedistributionDemurrage) >> shiftRedistributionDemurrage; } + // Serializes the number of participants part of the redistribution word + function toRedistributionParticipants(bytes32 redistribution) public pure returns (uint256) { + return (uint256(redistribution) & maskRedistributionParticipants) >> shiftRedistributionParticipants; + } + // Client accessor to the redistributions array length function redistributionCount() public view returns (uint256) { return redistributions.length; @@ -308,6 +404,7 @@ contract DemurrageTokenSingleCap { increaseBaseBalance(sinkAddress, baseUnit); lastPeriod += 1; totalSink += baseUnit; + registerAccountPeriod(sinkAddress, lastPeriod); return unit; } @@ -500,6 +597,10 @@ contract DemurrageTokenSingleCap { decreaseBaseBalance(_from, _value); increaseBaseBalance(_to, _value); + period = actualPeriod(); + if (accountPeriod(_from) != period && _from != _to) { + registerAccountPeriod(_from, period); + } return true; } @@ -525,7 +626,7 @@ contract DemurrageTokenSingleCap { // Only token minters can burn tokens function burn(uint256 _value) public { require(minter[msg.sender]); - require(_value <= account[msg.sender]); + //require(_value <= account[msg.sender]); uint256 _delta = toBaseAmount(_value); applyDemurrage();