erc20-transfer-authorization

Simple approval escrow for ERC20 spending
Log | Files | Refs

commit 7cda7d09a91e173d2210b1a9a86bc54b0a66513c
parent d2cf56acc10eb2a9aefcd4d780eae5e40695189c
Author: lash <dev@holbrook.no>
Date:   Thu,  8 Dec 2022 14:39:27 +0000

reduce counts resolution

Diffstat:
Mpython/erc20_transfer_authorization/data/ERC20TransferAuthorization.bin | 4++--
Mpython/erc20_transfer_authorization/data/ERC20TransferAuthorization.json | 2+-
Mpython/requirements.txt | 7++++---
Mpython/setup.cfg | 2+-
Mpython/test_requirements.txt | 2+-
Msolidity/ERC20TransferAuthorization.sol | 114++++++++++++++++++++++++++++++++++++++++++-------------------------------------
6 files changed, 69 insertions(+), 62 deletions(-)

diff --git a/python/erc20_transfer_authorization/data/ERC20TransferAuthorization.bin b/python/erc20_transfer_authorization/data/ERC20TransferAuthorization.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b5033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160068190555060016007819055506200007d33620000a2640100000000026401000000009004565b506200009b6001600062000282640100000000026401000000009004565b5062000539565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000137576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012e906200039a565b60405180910390fd5b60001515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514620001cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c490620003bc565b60405180910390fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b60008154809291906200023a906200046a565b91905055507f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24826040516200027091906200037d565b60405180910390a1600b549050919050565b6000600b548311156200029457600080fd5b60008311620002a257600080fd5b600b54821115620002b257600080fd5b8260098190555081600a819055507f9f40cfd22fe91777c78f252bd21a710f3fb007dc2f321876891e7644ba0ae175600954600a54600b54604051620002fb93929190620003de565b60405180910390a16001905092915050565b62000318816200042c565b82525050565b60006200032d600a836200041b565b91506200033a82620004e7565b602082019050919050565b600062000354600c836200041b565b9150620003618262000510565b602082019050919050565b620003778162000460565b82525050565b60006020820190506200039460008301846200030d565b92915050565b60006020820190508181036000830152620003b5816200031e565b9050919050565b60006020820190508181036000830152620003d78162000345565b9050919050565b6000606082019050620003f560008301866200036c565b6200040460208301856200036c565b6200041360408301846200036c565b949350505050565b600082825260208201905092915050565b6000620004398262000440565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620004778262000460565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620004ad57620004ac620004b8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b7f4552525f4e4f54464f554e440000000000000000000000000000000000000000600082015250565b61239380620005496000396000f3fe608060405234801561001057600080fd5b506004361061015f576000357c010000000000000000000000000000000000000000000000000000000090048063736c0d5b116100d5578063bac911ac11610099578063bac911ac146103ee578063e3064a771461041e578063e9f9d28b1461044e578063eb12d61e1461047e578063ed71262a146104ae578063fba00cbd146104de5761015f565b8063736c0d5b1461031a578063755fd58f1461034a5780637ca548c61461037a57806381d12c58146103985780638da5cb5b146103d05761015f565b80633a9ddc80116101275780633a9ddc801461021e5780634797569a1461024e57806357ec347a1461027e57806358d71f821461029c578063614f427f146102cc5780636e417c69146102ea5761015f565b806302d947ef1461016457806306661abd1461019457806308ae6377146101b25780630e316ab7146101d05780631703a01814610200575b600080fd5b61017e60048036038101906101799190611bd0565b61050e565b60405161018b9190611e35565b60405180910390f35b61019c61053d565b6040516101a99190611e1a565b60405180910390f35b6101ba610543565b6040516101c79190611f10565b60405180910390f35b6101ea60048036038101906101e59190611adf565b61056e565b6040516101f79190611f10565b60405180910390f35b6102086107cf565b6040516102159190611f10565b60405180910390f35b61023860048036038101906102339190611b6b565b6107d5565b6040516102459190611f10565b60405180910390f35b61026860048036038101906102639190611ba7565b610806565b6040516102759190611f10565b60405180910390f35b610286610aaa565b6040516102939190611f10565b60405180910390f35b6102b660048036038101906102b19190611ba7565b610ac0565b6040516102c39190611f10565b60405180910390f35b6102d4610d45565b6040516102e19190611f10565b60405180910390f35b61030460048036038101906102ff9190611ba7565b610d4b565b6040516103119190611dff565b60405180910390f35b610334600480360381019061032f9190611adf565b61114a565b6040516103419190611dff565b60405180910390f35b610364600480360381019061035f9190611b6b565b61116a565b6040516103719190611f10565b60405180910390f35b61038261119b565b60405161038f9190611f10565b60405180910390f35b6103b260048036038101906103ad9190611ba7565b6111a1565b6040516103c799989796959493929190611f2b565b60405180910390f35b6103d861125c565b6040516103e59190611dad565b60405180910390f35b61040860048036038101906104039190611ba7565b611282565b6040516104159190611f10565b60405180910390f35b61043860048036038101906104339190611c0c565b611311565b6040516104459190611dff565b60405180910390f35b61046860048036038101906104639190611ba7565b611397565b6040516104759190611dff565b60405180910390f35b61049860048036038101906104939190611adf565b6115d0565b6040516104a59190611f10565b60405180910390f35b6104c860048036038101906104c39190611b08565b6117a6565b6040516104d59190611f10565b60405180910390f35b6104f860048036038101906104f39190611c0c565b6119f0565b6040516105059190611dad565b60405180910390f35b60006020528160005260406000206020528060005260406000206000915091509054906101000a900460000b81565b60085481565b600080600754600654610556919061203f565b1415610565576000905061056b565b60075490505b90565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806105f757508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d90611e70565b60405180910390fd5b60011515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146106c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c090611e90565b60405180910390fd5b600954600b541180156106df5750600a54600b54115b61071e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071590611e50565b60405180910390fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b60008154809291906107899061214e565b91905055507f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b826040516107bd9190611dad565b60405180910390a1600b549050919050565b60095481565b600560205281600052604060002081815481106107f157600080fd5b90600052602060002001600091509150505481565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b90611e70565b60405180910390fd5b600080600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460000b60000b14610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092d90611eb0565b60405180910390fd5b600060036000848152602001908152602001600020905060018160080160009054906101000a900460000b60000b1461096e57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000808360000154815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360000b60ff1602179055506001600082600001548152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806006016000815480929190610a8a906121c1565b9190505550610a9c8160000154611397565b508060060154915050919050565b60006001600654610abb919061203f565b905090565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590611e70565b60405180910390fd5b600080600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460000b60000b14610bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be790611eb0565b60405180910390fd5b600060036000848152602001908152602001600020905060018160080160009054906101000a900460000b60000b14610c2857600080fd5b60016000808360000154815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360000b60ff1602179055506001600082600001548152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806005016000815480929190610d25906121c1565b9190505550610d378160000154611397565b508060050154915050919050565b600a5481565b6000806003600084815260200190815260200160002090506000816000015411610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da190611ed0565b60405180910390fd5b60028160080160009054906101000a900460000b60000b14610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890611ef0565b60405180910390fd5b60008160080160006101000a81548160ff021916908360000b60ff1602179055506000808260030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560040154604051602401610ec193929190611dc8565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610f4b9190611d96565b6000604051808303816000865af19150503d8060008114610f88576040519150601f19603f3d011682016040523d82523d6000602084013e610f8d565b606091505b5091509150610f9f8360000154611a3e565b50438360070181905550600460008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600001549080600181540180825580915050600190039060005260206000200160009091909190915055600560008460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836000015490806001815401808255809150506001900390600052602060002001600090919091909150558115611107577fbcf6a68a2f901be4a23a41b53acd7697893a7e34def4e28acba584da75283b67856040516110fa9190611f10565b60405180910390a161113f565b7fdab20a0fcd702cf875c2d715d5c3fc99af66a716c94b3405408c94b7311c99eb856040516111369190611f10565b60405180910390a15b819350505050919050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6004602052816000526040600020818154811061118657600080fd5b90600052602060002001600091509150505481565b600b5481565b60036020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154908060050154908060060154908060070154908060080160009054906101000a900460000b905089565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600060075490505b60065481101561130557600060036000838152602001908152602001600020905060008160080160009054906101000a900460000b60000b13156112f157848314156112e2578060000154935050505061130c565b82806112ed906121c1565b9350505b5080806112fd906121c1565b91505061128d565b5060009150505b919050565b6000600b5483111561132257600080fd5b6000831161132f57600080fd5b600b5482111561133e57600080fd5b8260098190555081600a819055507f9f40cfd22fe91777c78f252bd21a710f3fb007dc2f321876891e7644ba0ae175600954600a54600b5460405161138593929190611fe1565b60405180910390a16001905092915050565b600080600060036000858152602001908152602001600020905060018160080160009054906101000a900460000b60000b12156113d85781925050506115cb565b6009548160050154106114555760028160080160006101000a81548160ff021916908360000b60ff16021790555080600001547f36ea04725f8aa40ee603224671681b753f9cba3cb5f67c5a0e24a3b39900c06582600501548360060154604051611444929190611fb8565b60405180910390a2600191506115c5565b6000600a5411801561146d5750600a54816006015410155b1561150f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160080160006101000a81548160ff021916908360000b60ff1602179055506114bf8160000154611a3e565b5080600001547f1ad80b2541a1f52bdc838332d7c23606116a1188a8cbbc4c0948b4b56ce51d14826005015483600601546040516114fe929190611fb8565b60405180910390a2600191506115c4565b6009548160060154600b54611524919061203f565b10156115c3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160080160006101000a81548160ff021916908360000b60ff1602179055506115778160000154611a3e565b5080600001547f3d61d434b895790b08f040c45261fce3b3bec596278b3a0f25dd9f741d0ba469826005015483600601546040516115b6929190611fb8565b60405180910390a2600191505b5b5b81925050505b919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990611e70565b60405180910390fd5b60001515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90611e90565b60405180910390fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b6000815480929190611760906121c1565b91905055507f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24826040516117949190611dad565b60405180910390a1600b549050919050565b60008060036000600654815260200190815260200160002090506006548160000181905550848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082816004018190555060018160080160006101000a81548160ff021916908360000b60ff160217905550600860008154809291906118d190612178565b9190505550600660008154809291906118e9906121c1565b91905055508060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb609ae609609ee99268d05bc1371102cafe8d6b964bf082439ab16be2a01c87c846004015485600001546040516119d8929190611fb8565b60405180910390a48060000154915050949350505050565b60016020528160005260406000208181548110611a0c57600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060086000815480929190611a5390612105565b919050555060006008541315611aa157600754821415611a9c576000611a796000611282565b90506000811415611a9257600654600781905550611a9a565b806007819055505b505b611aab565b6006546007819055505b6007549050919050565b600081359050611ac48161232f565b92915050565b600081359050611ad981612346565b92915050565b600060208284031215611af157600080fd5b6000611aff84828501611ab5565b91505092915050565b60008060008060808587031215611b1e57600080fd5b6000611b2c87828801611ab5565b9450506020611b3d87828801611ab5565b9350506040611b4e87828801611ab5565b9250506060611b5f87828801611aca565b91505092959194509250565b60008060408385031215611b7e57600080fd5b6000611b8c85828601611ab5565b9250506020611b9d85828601611aca565b9150509250929050565b600060208284031215611bb957600080fd5b6000611bc784828501611aca565b91505092915050565b60008060408385031215611be357600080fd5b6000611bf185828601611aca565b9250506020611c0285828601611ab5565b9150509250929050565b60008060408385031215611c1f57600080fd5b6000611c2d85828601611aca565b9250506020611c3e85828601611aca565b9150509250929050565b611c5181612073565b82525050565b611c6081612085565b82525050565b6000611c7182612018565b611c7b8185612023565b9350611c8b8185602086016120d2565b80840191505092915050565b611ca081612091565b82525050565b611caf8161209b565b82525050565b6000611cc2601a8361202e565b9150611ccd82612239565b602082019050919050565b6000611ce5600a8361202e565b9150611cf082612262565b602082019050919050565b6000611d08600c8361202e565b9150611d138261228b565b602082019050919050565b6000611d2b60108361202e565b9150611d36826122b4565b602082019050919050565b6000611d4e60138361202e565b9150611d59826122dd565b602082019050919050565b6000611d7160108361202e565b9150611d7c82612306565b602082019050919050565b611d90816120c8565b82525050565b6000611da28284611c66565b915081905092915050565b6000602082019050611dc26000830184611c48565b92915050565b6000606082019050611ddd6000830186611c48565b611dea6020830185611c48565b611df76040830184611d87565b949350505050565b6000602082019050611e146000830184611c57565b92915050565b6000602082019050611e2f6000830184611c97565b92915050565b6000602082019050611e4a6000830184611ca6565b92915050565b60006020820190508181036000830152611e6981611cb5565b9050919050565b60006020820190508181036000830152611e8981611cd8565b9050919050565b60006020820190508181036000830152611ea981611cfb565b9050919050565b60006020820190508181036000830152611ec981611d1e565b9050919050565b60006020820190508181036000830152611ee981611d41565b9050919050565b60006020820190508181036000830152611f0981611d64565b9050919050565b6000602082019050611f256000830184611d87565b92915050565b600061012082019050611f41600083018c611d87565b611f4e602083018b611c48565b611f5b604083018a611c48565b611f686060830189611c48565b611f756080830188611d87565b611f8260a0830187611d87565b611f8f60c0830186611d87565b611f9c60e0830185611d87565b611faa610100830184611ca6565b9a9950505050505050505050565b6000604082019050611fcd6000830185611d87565b611fda6020830184611d87565b9392505050565b6000606082019050611ff66000830186611d87565b6120036020830185611d87565b6120106040830184611d87565b949350505050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600061204a826120c8565b9150612055836120c8565b9250828210156120685761206761220a565b5b828203905092915050565b600061207e826120a8565b9050919050565b60008115159050919050565b6000819050919050565b60008160000b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156120f05780820151818401526020810190506120d5565b838111156120ff576000848401525b50505050565b600061211082612091565b91507f80000000000000000000000000000000000000000000000000000000000000008214156121435761214261220a565b5b600182039050919050565b6000612159826120c8565b9150600082141561216d5761216c61220a565b5b600182039050919050565b600061218382612091565b91507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b6576121b561220a565b5b600182019050919050565b60006121cc826120c8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121ff576121fe61220a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4552525f5245445543455f5448524553484f4c445f4649525354000000000000600082015250565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b7f4552525f4e4f54464f554e440000000000000000000000000000000000000000600082015250565b7f4552525f414c5245414459564f54454400000000000000000000000000000000600082015250565b7f4552525f494e56414c49445f5245515545535400000000000000000000000000600082015250565b7f4552525f4e4f545f454e444f5253454400000000000000000000000000000000600082015250565b61233881612073565b811461234357600080fd5b50565b61234f816120c8565b811461235a57600080fd5b5056fea2646970667358221220db3bb04d4609a28abcde3217e8cc5e6a6573c3ee648d8e7f88e10daa0a5f7ec264736f6c63430008020033 -\ No newline at end of file +60806040523480156200001157600080fd5b5033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260146101000a81548163ffffffff021916908363ffffffff1602179055506001600260186101000a81548163ffffffff021916908363ffffffff160217905550620000b133620000d6640100000000026401000000009004565b50620000cf60016000620002ef640100000000026401000000009004565b50620005e7565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200016b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001629062000481565b60405180910390fd5b60001515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151462000201576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001f890620004f3565b60405180910390fd5b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506003600881819054906101000a900463ffffffff16809291906200027d9062000554565b91906101000a81548163ffffffff021916908363ffffffff160217905550507f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f2482604051620002cd9190620005ca565b60405180910390a1600360089054906101000a900463ffffffff169050919050565b6000600360089054906101000a900463ffffffff1663ffffffff168363ffffffff1611156200031d57600080fd5b60008363ffffffff16116200033157600080fd5b600360089054906101000a900463ffffffff1663ffffffff168263ffffffff1611156200035d57600080fd5b82600360006101000a81548163ffffffff021916908363ffffffff16021790555081600360046101000a81548163ffffffff021916908363ffffffff160217905550600360089054906101000a900463ffffffff1663ffffffff16600360049054906101000a900463ffffffff1663ffffffff16600360009054906101000a900463ffffffff1663ffffffff167fe77378573ac0f86c7fa8dd116b1fa17cf9c328a09a0c56a2c42d786103ac5bc360405160405180910390a46001905092915050565b600082825260208201905092915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b600062000469600a8362000420565b9150620004768262000431565b602082019050919050565b600060208201905081810360008301526200049c816200045a565b9050919050565b7f4552525f4e4f54464f554e440000000000000000000000000000000000000000600082015250565b6000620004db600c8362000420565b9150620004e882620004a3565b602082019050919050565b600060208201905081810360008301526200050e81620004cc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff82169050919050565b6000620005618262000544565b915063ffffffff82036200057a576200057962000515565b5b600182019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005b28262000585565b9050919050565b620005c481620005a5565b82525050565b6000602082019050620005e16000830184620005b9565b92915050565b6125d680620005f76000396000f3fe608060405234801561001057600080fd5b506004361061013e576000357c010000000000000000000000000000000000000000000000000000000090048063614f427f116100ca5780637f4dbec11161008e5780637f4dbec11461037e5780638da5cb5b146103ae578063eb12d61e146103cc578063ed71262a146103fc578063fdd33d681461042c5761013e565b8063614f427f146102b2578063655c0131146102d0578063669cd53b14610300578063736c0d5b146103305780637ca548c6146103605761013e565b80630e316ab7116101115780630e316ab7146101e657806310858c67146102165780631703a01814610246578063476ce3ad1461026457806357ec347a146102945761013e565b806306661abd1461014357806308ae6377146101615780630ab469b01461017f5780630ac94000146101b6575b600080fd5b61014b61045c565b6040516101589190611e02565b60405180910390f35b610169610472565b6040516101769190611e02565b60405180910390f35b61019960048036038101906101949190611e4e565b6104d2565b6040516101ad989796959493929190611ef1565b60405180910390f35b6101d060048036038101906101cb9190611e4e565b6105b7565b6040516101dd9190611f8a565b60405180910390f35b61020060048036038101906101fb9190611fd1565b610902565b60405161020d9190611e02565b60405180910390f35b610230600480360381019061022b9190611e4e565b610bbe565b60405161023d9190611e02565b60405180910390f35b61024e610ca0565b60405161025b9190611e02565b60405180910390f35b61027e60048036038101906102799190611e4e565b610cb6565b60405161028b9190611e02565b60405180910390f35b61029c610f40565b6040516102a99190611e02565b60405180910390f35b6102ba610f66565b6040516102c79190611e02565b60405180910390f35b6102ea60048036038101906102e59190611ffe565b610f7c565b6040516102f7919061205a565b60405180910390f35b61031a60048036038101906103159190612075565b610fab565b6040516103279190611f8a565b60405180910390f35b61034a60048036038101906103459190611fd1565b6110d9565b6040516103579190611f8a565b60405180910390f35b6103686110f9565b6040516103759190611e02565b60405180910390f35b61039860048036038101906103939190611e4e565b61110f565b6040516103a59190611e02565b60405180910390f35b6103b66113b8565b6040516103c391906120b5565b60405180910390f35b6103e660048036038101906103e19190611fd1565b6113de565b6040516103f39190611e02565b60405180910390f35b610416600480360381019061041191906120fc565b6115ed565b6040516104239190611e02565b60405180910390f35b61044660048036038101906104419190611e4e565b6118ec565b6040516104539190611f8a565b60405180910390f35b6002601c9054906101000a900463ffffffff1681565b600080600260189054906101000a900463ffffffff16600260149054906101000a900463ffffffff166104a59190612192565b63ffffffff16036104b957600090506104cf565b600260189054906101000a900463ffffffff1690505b90565b60016020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160149054906101000a900463ffffffff16908060030160189054906101000a900463ffffffff169080600301601c9054906101000a900463ffffffff16908060040160009054906101000a900460ff16905088565b600080600160008463ffffffff1663ffffffff168152602001908152602001600020905060008160030160149054906101000a900463ffffffff1663ffffffff1611610638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062f90612227565b60405180910390fd5b60038160040160009054906101000a900460ff1660ff161461068f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068690612293565b60405180910390fd5b6106ac8160030160149054906101000a900463ffffffff16611c8f565b5060088160040160008282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055506000808260030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856000015460405160240161077c939291906122b3565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610806919061235b565b6000604051808303816000865af19150503d8060008114610843576040519150601f19603f3d011682016040523d82523d6000602084013e610848565b606091505b5091509150811561088f577fa80d5e3445b11533e6c584c506299aa14168f2ad1fe65b0266e7d622c5461c30856040516108829190611e02565b60405180910390a16108f7565b60108360040160008282829054906101000a900460ff161792506101000a81548160ff021916908360ff1602179055507f8f15e24c8a8ecaa6b067f0cd2c220532e6496f53b2ac3263129d1496cb6f192e856040516108ee9190611e02565b60405180910390a15b819350505050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098b906123be565b60405180910390fd5b60011515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1e9061242a565b60405180910390fd5b600360009054906101000a900463ffffffff1663ffffffff16600360089054906101000a900463ffffffff1663ffffffff16118015610a955750600360049054906101000a900463ffffffff1663ffffffff16600360089054906101000a900463ffffffff1663ffffffff16115b610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90612496565b60405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506003600881819054906101000a900463ffffffff1680929190610b4e906124b6565b91906101000a81548163ffffffff021916908363ffffffff160217905550507f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b82604051610b9c91906120b5565b60405180910390a1600360089054906101000a900463ffffffff169050919050565b6000806000600260189054906101000a900463ffffffff1690505b600260149054906101000a900463ffffffff1663ffffffff168163ffffffff161015610c94576000600160008363ffffffff1663ffffffff168152602001908152602001600020905060008160040160009054906101000a900460ff1660ff161115610c80578463ffffffff168363ffffffff1603610c71578060030160149054906101000a900463ffffffff169350505050610c9b565b8280610c7c906124df565b9350505b508080610c8c906124df565b915050610bd9565b5060009150505b919050565b600360009054906101000a900463ffffffff1681565b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b906123be565b60405180910390fd5b60008060008463ffffffff1663ffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460000b60000b14610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de990612557565b60405180910390fd5b6000600160008463ffffffff1663ffffffff168152602001908152602001600020905060018160040160009054906101000a900460ff1660ff1614610e3657600080fd5b60016000808360030160149054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360000b60ff16021790555080600301601881819054906101000a900463ffffffff1680929190610ee6906124df565b91906101000a81548163ffffffff021916908363ffffffff16021790555050610f228160030160149054906101000a900463ffffffff166118ec565b508060030160189054906101000a900463ffffffff16915050919050565b60006001600260149054906101000a900463ffffffff16610f619190612192565b905090565b600360049054906101000a900463ffffffff1681565b60006020528160005260406000206020528060005260406000206000915091509054906101000a900460000b81565b6000600360089054906101000a900463ffffffff1663ffffffff168363ffffffff161115610fd857600080fd5b60008363ffffffff1611610feb57600080fd5b600360089054906101000a900463ffffffff1663ffffffff168263ffffffff16111561101657600080fd5b82600360006101000a81548163ffffffff021916908363ffffffff16021790555081600360046101000a81548163ffffffff021916908363ffffffff160217905550600360089054906101000a900463ffffffff1663ffffffff16600360049054906101000a900463ffffffff1663ffffffff16600360009054906101000a900463ffffffff1663ffffffff167fe77378573ac0f86c7fa8dd116b1fa17cf9c328a09a0c56a2c42d786103ac5bc360405160405180910390a46001905092915050565b60046020528060005260406000206000915054906101000a900460ff1681565b600360089054906101000a900463ffffffff1681565b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661119d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611194906123be565b60405180910390fd5b60008060008463ffffffff1663ffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460000b60000b1461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290612557565b60405180910390fd5b6000600160008463ffffffff1663ffffffff168152602001908152602001600020905060018160040160009054906101000a900460ff1660ff161461128f57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000808360030160149054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360000b60ff16021790555080600301601c81819054906101000a900463ffffffff168092919061135e906124df565b91906101000a81548163ffffffff021916908363ffffffff1602179055505061139a8160030160149054906101000a900463ffffffff166118ec565b5080600301601c9054906101000a900463ffffffff16915050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611467906123be565b60405180910390fd5b60001515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa9061242a565b60405180910390fd5b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506003600881819054906101000a900463ffffffff168092919061157d906124df565b91906101000a81548163ffffffff021916908363ffffffff160217905550507f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24826040516115cb91906120b5565b60405180910390a1600360089054906101000a900463ffffffff169050919050565b60008060016000600260149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020019081526020016000209050600260149054906101000a900463ffffffff168160030160146101000a81548163ffffffff021916908363ffffffff160217905550848160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082816000018190555060018160040160006101000a81548160ff021916908360ff1602179055506002601c81819054906101000a900463ffffffff168092919061176a906124df565b91906101000a81548163ffffffff021916908363ffffffff160217905550506002601481819054906101000a900463ffffffff16809291906117ab906124df565b91906101000a81548163ffffffff021916908363ffffffff160217905550508060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3ba7a259b57ae3d653287762394374c856528591f691ecd6494021fdcea00f2484600001548560030160149054906101000a900463ffffffff166040516118c4929190612577565b60405180910390a48060030160149054906101000a900463ffffffff16915050949350505050565b6000806000600160008563ffffffff1663ffffffff168152602001908152602001600020905060018160040160009054906101000a900460ff1660ff161015611939578192505050611c8a565b600360009054906101000a900463ffffffff1663ffffffff168160030160189054906101000a900463ffffffff1663ffffffff1610611a285760028160040160008282829054906101000a900460ff161792506101000a81548160ff021916908360ff16021790555080600301601c9054906101000a900463ffffffff1663ffffffff168160030160189054906101000a900463ffffffff1663ffffffff168260030160149054906101000a900463ffffffff1663ffffffff167f7a17acca3819c1012204b2d019c0ee13bb7e5cf151111030329219582ba83f3160405160405180910390a460019150611c84565b6000600360049054906101000a900463ffffffff1663ffffffff16118015611a825750600360049054906101000a900463ffffffff1663ffffffff1681600301601c9054906101000a900463ffffffff1663ffffffff1610155b15611b5b5760048160040160008282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550611ad48160030160149054906101000a900463ffffffff16611c8f565b5080600301601c9054906101000a900463ffffffff1663ffffffff168160030160189054906101000a900463ffffffff1663ffffffff168260030160149054906101000a900463ffffffff1663ffffffff167f4bdd2d0e6caefafbf833eda0d32f2dcb0e7a621e3e7b87b2a17c12090edbc0d660405160405180910390a460019150611c83565b600360009054906101000a900463ffffffff1663ffffffff1681600301601c9054906101000a900463ffffffff16600360089054906101000a900463ffffffff16611ba69190612192565b63ffffffff161015611c825760048160040160008282829054906101000a900460ff161792506101000a81548160ff021916908360ff160217905550611bff8160030160149054906101000a900463ffffffff16611c8f565b5080600301601c9054906101000a900463ffffffff1663ffffffff168160030160189054906101000a900463ffffffff1663ffffffff168260030160149054906101000a900463ffffffff1663ffffffff167f3c478de516aa199022ddcd594a6e3b7f03a3e23bfcafd6143adceb687a8e38ea60405160405180910390a4600191505b5b5b81925050505b919050565b60006002601c81819054906101000a900463ffffffff1680929190611cb3906124b6565b91906101000a81548163ffffffff021916908363ffffffff1602179055505060006002601c9054906101000a900463ffffffff1663ffffffff161115611d9557600260189054906101000a900463ffffffff1663ffffffff168263ffffffff1603611d90576000611d246000610bbe565b905060008163ffffffff1603611d6c57600260149054906101000a900463ffffffff16600260186101000a81548163ffffffff021916908363ffffffff160217905550611d8e565b80600260186101000a81548163ffffffff021916908363ffffffff1602179055505b505b611dc9565b600260149054906101000a900463ffffffff16600260186101000a81548163ffffffff021916908363ffffffff1602179055505b600260189054906101000a900463ffffffff169050919050565b600063ffffffff82169050919050565b611dfc81611de3565b82525050565b6000602082019050611e176000830184611df3565b92915050565b600080fd5b611e2b81611de3565b8114611e3657600080fd5b50565b600081359050611e4881611e22565b92915050565b600060208284031215611e6457611e63611e1d565b5b6000611e7284828501611e39565b91505092915050565b6000819050919050565b611e8e81611e7b565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ebf82611e94565b9050919050565b611ecf81611eb4565b82525050565b600060ff82169050919050565b611eeb81611ed5565b82525050565b600061010082019050611f07600083018b611e85565b611f14602083018a611ec6565b611f216040830189611ec6565b611f2e6060830188611ec6565b611f3b6080830187611df3565b611f4860a0830186611df3565b611f5560c0830185611df3565b611f6260e0830184611ee2565b9998505050505050505050565b60008115159050919050565b611f8481611f6f565b82525050565b6000602082019050611f9f6000830184611f7b565b92915050565b611fae81611eb4565b8114611fb957600080fd5b50565b600081359050611fcb81611fa5565b92915050565b600060208284031215611fe757611fe6611e1d565b5b6000611ff584828501611fbc565b91505092915050565b6000806040838503121561201557612014611e1d565b5b600061202385828601611e39565b925050602061203485828601611fbc565b9150509250929050565b60008160000b9050919050565b6120548161203e565b82525050565b600060208201905061206f600083018461204b565b92915050565b6000806040838503121561208c5761208b611e1d565b5b600061209a85828601611e39565b92505060206120ab85828601611e39565b9150509250929050565b60006020820190506120ca6000830184611ec6565b92915050565b6120d981611e7b565b81146120e457600080fd5b50565b6000813590506120f6816120d0565b92915050565b6000806000806080858703121561211657612115611e1d565b5b600061212487828801611fbc565b945050602061213587828801611fbc565b935050604061214687828801611fbc565b9250506060612157878288016120e7565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061219d82611de3565b91506121a883611de3565b9250828203905063ffffffff8111156121c4576121c3612163565b5b92915050565b600082825260208201905092915050565b7f4552525f494e56414c49445f5245515545535400000000000000000000000000600082015250565b60006122116013836121ca565b915061221c826121db565b602082019050919050565b6000602082019050818103600083015261224081612204565b9050919050565b7f4552525f4e4f545f454e444f5253454400000000000000000000000000000000600082015250565b600061227d6010836121ca565b915061228882612247565b602082019050919050565b600060208201905081810360008301526122ac81612270565b9050919050565b60006060820190506122c86000830186611ec6565b6122d56020830185611ec6565b6122e26040830184611e85565b949350505050565b600081519050919050565b600081905092915050565b60005b8381101561231e578082015181840152602081019050612303565b60008484015250505050565b6000612335826122ea565b61233f81856122f5565b935061234f818560208601612300565b80840191505092915050565b6000612367828461232a565b915081905092915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b60006123a8600a836121ca565b91506123b382612372565b602082019050919050565b600060208201905081810360008301526123d78161239b565b9050919050565b7f4552525f4e4f54464f554e440000000000000000000000000000000000000000600082015250565b6000612414600c836121ca565b915061241f826123de565b602082019050919050565b6000602082019050818103600083015261244381612407565b9050919050565b7f4552525f5245445543455f5448524553484f4c445f4649525354000000000000600082015250565b6000612480601a836121ca565b915061248b8261244a565b602082019050919050565b600060208201905081810360008301526124af81612473565b9050919050565b60006124c182611de3565b9150600082036124d4576124d3612163565b5b600182039050919050565b60006124ea82611de3565b915063ffffffff8203612500576124ff612163565b5b600182019050919050565b7f4552525f414c5245414459564f54454400000000000000000000000000000000600082015250565b60006125416010836121ca565b915061254c8261250b565b602082019050919050565b6000602082019050818103600083015261257081612534565b9050919050565b600060408201905061258c6000830185611e85565b6125996020830184611df3565b939250505056fea2646970667358221220c7f87a03c6ca3c1220eb00c3d0852eaa8b387cd2ef01e44bdaa8ea969e9fb9c464736f6c63430008110033 +\ No newline at end of file diff --git a/python/erc20_transfer_authorization/data/ERC20TransferAuthorization.json b/python/erc20_transfer_authorization/data/ERC20TransferAuthorization.json @@ -1 +1 @@ -[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_serial","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_yays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_nays","type":"uint256"}],"name":"Approved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_serial","type":"uint256"}],"name":"Executed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_sender","type":"address"},{"indexed":true,"internalType":"address","name":"_recipient","type":"address"},{"indexed":true,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_serial","type":"uint256"}],"name":"NewRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_quorum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_vetoThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_signerCount","type":"uint256"}],"name":"QuorumSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_serial","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_yays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_nays","type":"uint256"}],"name":"Rejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_signer","type":"address"}],"name":"SignerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_signer","type":"address"}],"name":"SignerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_serial","type":"uint256"}],"name":"TransferFail","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_serial","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_yays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_nays","type":"uint256"}],"name":"Vetoed","type":"event"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"addSigner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_serial","type":"uint256"}],"name":"checkResult","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"count","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"createRequest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_serial","type":"uint256"}],"name":"executeRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"getSerialAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSerial","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_serial","type":"uint256"}],"name":"nay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nextSerial","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quorum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"removeSigner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestRecipientIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestSenderIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requests","outputs":[{"internalType":"uint256","name":"serial","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"yay","type":"uint256"},{"internalType":"uint256","name":"nay","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"int8","name":"result","type":"int8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quorum","type":"uint256"},{"internalType":"uint256","name":"_vetoThreshold","type":"uint256"}],"name":"setThresholds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"signers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vetoThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"vote","outputs":[{"internalType":"int8","name":"","type":"int8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"voters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_serial","type":"uint256"}],"name":"yay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}] +[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"_serial","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"_yays","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"_nays","type":"uint32"}],"name":"Approved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_serial","type":"uint32"}],"name":"Executed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_sender","type":"address"},{"indexed":true,"internalType":"address","name":"_recipient","type":"address"},{"indexed":true,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"_serial","type":"uint32"}],"name":"NewRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"_quorum","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"_vetoThreshold","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"_signerCount","type":"uint32"}],"name":"QuorumSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"_serial","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"_yays","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"_nays","type":"uint32"}],"name":"Rejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_signer","type":"address"}],"name":"SignerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_signer","type":"address"}],"name":"SignerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_serial","type":"uint32"}],"name":"TransferFail","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"_serial","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"_yays","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"_nays","type":"uint32"}],"name":"Vetoed","type":"event"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"addSigner","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_serial","type":"uint32"}],"name":"checkResult","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"createRequest","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_serial","type":"uint32"}],"name":"executeRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_idx","type":"uint32"}],"name":"getSerialAt","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSerial","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_serial","type":"uint32"}],"name":"nay","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nextSerial","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quorum","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"removeSigner","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"requests","outputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint32","name":"serial","type":"uint32"},{"internalType":"uint32","name":"yay","type":"uint32"},{"internalType":"uint32","name":"nay","type":"uint32"},{"internalType":"uint8","name":"result","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_quorum","type":"uint32"},{"internalType":"uint32","name":"_vetoThreshold","type":"uint32"}],"name":"setThresholds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"signers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vetoThreshold","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"address","name":"","type":"address"}],"name":"vote","outputs":[{"internalType":"int8","name":"","type":"int8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_serial","type":"uint32"}],"name":"yay","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"nonpayable","type":"function"}] diff --git a/python/requirements.txt b/python/requirements.txt @@ -1,3 +1,4 @@ -confini~=0.5.2 -chainlib-eth~=0.0.14 -potaahto~=0.1.0 +confini>=0.5.2,<0.7.0 +#chainlib-eth>=0.1.0b1,<0.2.0 +chainlib-eth~=0.4.6 +potaahto~=0.1.1 diff --git a/python/setup.cfg b/python/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = erc20-transfer-authorization -version = 0.3.7 +version = 0.4.0 description = Simple approval escrow for ERC20 spend approval author = Louis Holbrook author_email = dev@holbrook.no diff --git a/python/test_requirements.txt b/python/test_requirements.txt @@ -1,3 +1,3 @@ eth-tester==0.5.0b3 py-evm==0.3.0a20 -eth-erc20~=0.1.4 +eth-erc20~=0.5.2 diff --git a/solidity/ERC20TransferAuthorization.sol b/solidity/ERC20TransferAuthorization.sol @@ -1,44 +1,49 @@ -pragma solidity >0.6.11; +pragma solidity >0.8.0; // SPDX-License-Identifier: GPL-3.0-or-later contract ERC20TransferAuthorization { struct Transaction { - uint256 serial; + uint256 value; address sender; address recipient; address token; - uint256 value; - uint256 yay; - uint256 nay; - uint256 blockNumber; - int8 result; // -1 rejected/vetoed, 0 = completed, 1 = voting, 2 = approved + uint32 serial; + uint32 yay; + uint32 nay; + //uint256 blockNumber; + // bit 1: started + // bit 2: approved + // bit 3: rejected + // bit 4: finalized + // bit 5: transfererror + uint8 result; } - mapping ( uint256 => mapping ( address => int8 )) public vote; - mapping ( uint256 => address[] ) public voters; + mapping ( uint32 => mapping ( address => int8 )) public vote; + //mapping ( uint256 => address[] ) public voters; + mapping( uint32 => Transaction ) public requests; + //mapping(address => uint256[]) public requestSenderIndex; + //mapping(address => uint256[]) public requestRecipientIndex; address public owner; - mapping(uint256 => Transaction) public requests; - mapping(address => uint256[]) public requestSenderIndex; - mapping(address => uint256[]) public requestRecipientIndex; - uint256 hi; - uint256 lo; - int256 public count; - uint256 public quorum; - uint256 public vetoThreshold; - uint256 public signerCount; + uint32 hi; + uint32 lo; + uint32 public count; + uint32 public quorum; + uint32 public vetoThreshold; + uint32 public signerCount; mapping(address => bool) public signers; - event NewRequest(address indexed _sender, address indexed _recipient, address indexed _token, uint256 _value, uint256 _serial); - event Executed(uint256 _serial); - event TransferFail(uint256 _serial); - event QuorumSet(uint256 _quorum, uint256 _vetoThreshold, uint256 _signerCount); + event NewRequest(address indexed _sender, address indexed _recipient, address indexed _token, uint256 _value, uint32 _serial); + event Executed(uint32 _serial); + event TransferFail(uint32 _serial); + event QuorumSet(uint32 indexed _quorum, uint32 indexed _vetoThreshold, uint32 indexed _signerCount); event SignerAdded(address _signer); event SignerRemoved(address _signer); - event Vetoed(uint256 indexed _serial, uint256 _yays, uint256 _nays); - event Approved(uint256 indexed _serial, uint256 _yays, uint256 _nays); - event Rejected(uint256 indexed _serial, uint256 _yays, uint256 _nays); + event Vetoed(uint32 indexed _serial, uint32 indexed _yays, uint32 indexed _nays); + event Approved(uint32 indexed _serial, uint32 indexed _yays, uint32 indexed _nays); + event Rejected(uint32 indexed _serial, uint32 indexed _yays, uint32 indexed _nays); constructor() public { owner = msg.sender; @@ -48,7 +53,7 @@ contract ERC20TransferAuthorization { setThresholds(1, 0); } - function addSigner(address _signer) public returns (uint256) { + function addSigner(address _signer) public returns (uint32) { require(msg.sender == owner, 'ERR_ACCESS'); require(signers[_signer] == false, 'ERR_NOTFOUND'); @@ -58,8 +63,9 @@ contract ERC20TransferAuthorization { return signerCount; } - function removeSigner(address _signer) public returns (uint256) { - require(msg.sender == owner || msg.sender == _signer, 'ERR_ACCESS'); + function removeSigner(address _signer) public returns (uint32) { + //require(msg.sender == owner || msg.sender == _signer, 'ERR_ACCESS'); + require(msg.sender == owner, 'ERR_ACCESS'); require(signers[_signer] == true, 'ERR_NOTFOUND'); require(signerCount > quorum && signerCount > vetoThreshold, 'ERR_REDUCE_THRESHOLD_FIRST'); @@ -69,7 +75,7 @@ contract ERC20TransferAuthorization { return signerCount; } - function setThresholds(uint256 _quorum, uint256 _vetoThreshold) public returns (bool) { + function setThresholds(uint32 _quorum, uint32 _vetoThreshold) public returns (bool) { require(_quorum <= signerCount); require(_quorum > 0); require(_vetoThreshold <= signerCount); @@ -81,7 +87,7 @@ contract ERC20TransferAuthorization { } // create new request - function createRequest(address _sender, address _recipient, address _token, uint256 _value) public returns (uint256) { + function createRequest(address _sender, address _recipient, address _token, uint256 _value) public returns (uint32) { Transaction storage txx = requests[hi]; txx.serial = hi; @@ -91,7 +97,7 @@ contract ERC20TransferAuthorization { txx.value = _value; txx.result = 1; - count++; + count++; hi++; emit NewRequest(txx.sender, txx.recipient, txx.token, txx.value, txx.serial); @@ -101,12 +107,12 @@ contract ERC20TransferAuthorization { // if request was oldest in index, move the pointer to oldest request to next oldest unfinished request. // if no unfinished requests exits, it will point to newest request - function removeItem(uint256 _serialToRemove) private returns (uint256) { + function removeItem(uint32 _serialToRemove) private returns (uint32) { count--; if (count > 0) { if (_serialToRemove == lo) { - uint256 i; + uint32 i; i = getSerialAt(0); if (i == 0) { lo = hi; @@ -122,12 +128,12 @@ contract ERC20TransferAuthorization { } // index of newest vote - function lastSerial() public view returns ( uint256 ) { + function lastSerial() public view returns ( uint32 ) { return hi - 1; } // index of oldest unfinished vote - function nextSerial() public view returns ( uint256 ) { + function nextSerial() public view returns ( uint32 ) { if (hi - lo == 0) { return 0; } @@ -135,9 +141,9 @@ contract ERC20TransferAuthorization { } // get the unfinished vote at the given index - function getSerialAt(uint256 _idx) public view returns ( uint256 ) { - uint256 i; - for (uint256 j = lo; j < hi; j++) { + function getSerialAt(uint32 _idx) public view returns ( uint32 ) { + uint32 i; + for (uint32 j = lo; j < hi; j++) { Transaction storage txx = requests[j]; if (txx.result > 0) { if (i == _idx) { @@ -150,7 +156,7 @@ contract ERC20TransferAuthorization { } // vote yay, one per signer - function yay(uint256 _serial) public returns (uint256) { + function yay(uint32 _serial) public returns (uint32) { require(signers[msg.sender], 'ERR_ACCESS'); require(vote[_serial][msg.sender] == 0, 'ERR_ALREADYVOTED'); @@ -158,7 +164,7 @@ contract ERC20TransferAuthorization { require(txx.result == 1); vote[txx.serial][msg.sender] = 1; - voters[txx.serial].push(msg.sender); + //voters[txx.serial].push(msg.sender); txx.yay++; checkResult(txx.serial); @@ -167,7 +173,7 @@ contract ERC20TransferAuthorization { } // vote nay, one per signer - function nay(uint256 _serial) public returns (uint256) { + function nay(uint32 _serial) public returns (uint32) { require(signers[msg.sender], 'ERR_ACCESS'); require(vote[_serial][msg.sender] == 0, 'ERR_ALREADYVOTED'); @@ -175,7 +181,7 @@ contract ERC20TransferAuthorization { require(txx.result == 1); vote[txx.serial][msg.sender] = -1; - voters[txx.serial].push(msg.sender); + //voters[txx.serial].push(msg.sender); txx.nay++; checkResult(txx.serial); @@ -185,7 +191,7 @@ contract ERC20TransferAuthorization { // locks the state of the vote if quorum or veto is reached // returns true if state changes - function checkResult(uint256 _serial) public returns (bool) { + function checkResult(uint32 _serial) public returns (bool) { bool result; Transaction storage txx = requests[_serial]; @@ -194,16 +200,16 @@ contract ERC20TransferAuthorization { } if (txx.yay >= quorum) { - txx.result = 2; + txx.result |= 2; emit Approved(txx.serial, txx.yay, txx.nay); result = true; } else if (vetoThreshold > 0 && txx.nay >= vetoThreshold) { - txx.result = -1; + txx.result |= 4; removeItem(txx.serial); emit Vetoed(txx.serial, txx.yay, txx.nay); result = true; } else if (signerCount - txx.nay < quorum) { - txx.result = -1; + txx.result |= 4; removeItem(txx.serial); emit Rejected(txx.serial, txx.yay, txx.nay); result = true; @@ -213,24 +219,24 @@ contract ERC20TransferAuthorization { } // execute transfer. needs positive vote result - function executeRequest(uint256 _serial) public returns (bool) { + function executeRequest(uint32 _serial) public returns (bool) { Transaction storage txx = requests[_serial]; require(txx.serial > 0, 'ERR_INVALID_REQUEST'); - require(txx.result == 2, 'ERR_NOT_ENDORSED'); + require(txx.result == 3, 'ERR_NOT_ENDORSED'); - txx.result = 0; + removeItem(txx.serial); + txx.result |= 8; (bool success, bytes memory _r) = txx.token.call(abi.encodeWithSignature("transferFrom(address,address,uint256)", txx.sender, txx.recipient, txx.value)); - removeItem(txx.serial); - - txx.blockNumber = block.number; - requestSenderIndex[txx.sender].push(txx.serial); - requestRecipientIndex[txx.recipient].push(txx.serial); + //txx.blockNumber = block.number; + //requestSenderIndex[txx.sender].push(txx.serial); + //requestRecipientIndex[txx.recipient].push(txx.serial); if (success) { emit Executed(_serial); } else { + txx.result |= 16; // this edit is for convenience only. since bit 4 is already set, it is not re-entrant. emit TransferFail(_serial); }