eth-offline

EVM token minter frontend for offline issuance using ERC712 structured signatures.
Log | Files | Refs

commit 0d7f38bda80c3b64f6808f9b58d5895965ab9776
parent 26f32f53908327893a11c33b13cb9c8f5c7ff9f7
Author: lash <dev@holbrook.no>
Date:   Mon, 27 Mar 2023 18:10:30 +0100

Make unnecessary contract methods private

Diffstat:
Mpython/eth_offline/data/Offline.bin | 4++--
Mpython/eth_offline/data/Offline.json | 2+-
Mpython/tests/test_basic.py | 105++-----------------------------------------------------------------------------
Msolidity/OfflineBase.sol | 28++++++++++------------------
4 files changed, 15 insertions(+), 124 deletions(-)

diff --git a/python/eth_offline/data/Offline.bin b/python/eth_offline/data/Offline.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611664806100606000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063aa1d23a011610078578063aa1d23a01461015a578063aeb024921461018a578063ca9bc523146101ba578063e9395679146101ea576100a5565b8063772295f6146100aa5780638da5cb5b146100da57806397aba7f9146100f8578063a7bb580314610128575b600080fd5b6100c460048036038101906100bf9190610de2565b61021a565b6040516100d19190610ee0565b60405180910390f35b6100e2610633565b6040516100ef9190610f0a565b60405180910390f35b610112600480360381019061010d9190610f51565b61065c565b60405161011f9190610f0a565b60405180910390f35b610142600480360381019061013d9190610de2565b6106cb565b60405161015193929190610fd8565b60405180910390f35b610174600480360381019061016f919061100f565b610733565b6040516101819190610f0a565b60405180910390f35b6101a4600480360381019061019f919061100f565b610761565b6040516101b191906110a2565b60405180910390f35b6101d460048036038101906101cf9190610de2565b6107af565b6040516101e1919061113c565b60405180910390f35b61020460048036038101906101ff919061118a565b610a15565b604051610211919061120c565b60405180910390f35b610222610c4e565b6060806060605485511461026b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102629061127a565b60405180910390fd5b601467ffffffffffffffff81111561028657610285610cb7565b5b6040519080825280601f01601f1916602001820160405280156102b85781602001600182028036833780820191505090505b509250602067ffffffffffffffff8111156102d6576102d5610cb7565b5b6040519080825280601f01601f1916602001820160405280156103085781602001600182028036833780820191505090505b509050602067ffffffffffffffff81111561032657610325610cb7565b5b6040519080825280601f01601f1916602001820160405280156103585781602001600182028036833780820191505090505b50915060005b83518110156104195785818151811061037a5761037961129a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028482815181106103d7576103d661129a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080610411906112f8565b91505061035e565b5060005b60208110156104e457856014826104349190611340565b815181106104455761044461129a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028382815181106104a2576104a161129a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806104dc906112f8565b91505061041d565b5060005b60208110156105af57856034826104ff9190611340565b815181106105105761050f61129a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000282828151811061056d5761056c61129a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806105a7906112f8565b9150506104e8565b50826105ba906113d5565b6c010000000000000000000000009004846000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161060b90611451565b8460200181815250508061061e90611451565b60019004846040018181525050505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060008061066b856106cb565b9250925092506001868285856040516000815260200160405260405161069494939291906114b8565b6020604051602081039080840390855afa1580156106b6573d6000803e3d6000fd5b50505060206040510351935050505092915050565b60008060006041845114610714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070b90611549565b60405180910390fd5b6020840151925060408401519150606084015160001a90509193909250565b6000806060610741856107af565b905080805190602001209150610757828561065c565b9250505092915050565b60008061076c610633565b90506107788484610733565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161491505092915050565b606080600080845160166107c39190611340565b67ffffffffffffffff8111156107dc576107db610cb7565b5b6040519080825280601f01601f19166020018201604052801561080e5781602001600182028036833780820191505090505b50925060197f010000000000000000000000000000000000000000000000000000000000000002836000815181106108495761084861129a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060029150306c0100000000000000000000000002905060005b6014811015610930578181601481106108ad576108ac61129a565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000028484836108dd9190611340565b815181106108ee576108ed61129a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080610928906112f8565b915050610891565b5060148261093e9190611340565b915060005b8551811015610a095785818151811061095f5761095e61129a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028484836109b69190611340565b815181106109c7576109c661129a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080610a01906112f8565b915050610943565b50829350505050919050565b606060006064905060008167ffffffffffffffff811115610a3957610a38610cb7565b5b6040519080825280601f01601f191660200182016040528015610a6b5781602001600182028036833780820191505090505b50905060005b60008514610b1c576000600a86610a889190611598565b9050600a86610a9791906115c9565b9550806030610aa69190611340565b7f010000000000000000000000000000000000000000000000000000000000000002838380610ad4906112f8565b945081518110610ae757610ae661129a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050610a71565b60008167ffffffffffffffff811115610b3857610b37610cb7565b5b6040519080825280601f01601f191660200182016040528015610b6a5781602001600182028036833780820191505090505b50905060005b82811015610c41578381600185610b8791906115fa565b610b9191906115fa565b81518110610ba257610ba161129a565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002828281518110610bff57610bfe61129a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080610c39906112f8565b915050610b70565b5080945050505050919050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008019168152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610cef82610ca6565b810181811067ffffffffffffffff82111715610d0e57610d0d610cb7565b5b80604052505050565b6000610d21610c88565b9050610d2d8282610ce6565b919050565b600067ffffffffffffffff821115610d4d57610d4c610cb7565b5b610d5682610ca6565b9050602081019050919050565b82818337600083830152505050565b6000610d85610d8084610d32565b610d17565b905082815260208101848484011115610da157610da0610ca1565b5b610dac848285610d63565b509392505050565b600082601f830112610dc957610dc8610c9c565b5b8135610dd9848260208601610d72565b91505092915050565b600060208284031215610df857610df7610c92565b5b600082013567ffffffffffffffff811115610e1657610e15610c97565b5b610e2284828501610db4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610e5682610e2b565b9050919050565b610e6681610e4b565b82525050565b6000819050919050565b610e7f81610e6c565b82525050565b6000819050919050565b610e9881610e85565b82525050565b606082016000820151610eb46000850182610e5d565b506020820151610ec76020850182610e76565b506040820151610eda6040850182610e8f565b50505050565b6000606082019050610ef56000830184610e9e565b92915050565b610f0481610e4b565b82525050565b6000602082019050610f1f6000830184610efb565b92915050565b610f2e81610e6c565b8114610f3957600080fd5b50565b600081359050610f4b81610f25565b92915050565b60008060408385031215610f6857610f67610c92565b5b6000610f7685828601610f3c565b925050602083013567ffffffffffffffff811115610f9757610f96610c97565b5b610fa385828601610db4565b9150509250929050565b610fb681610e6c565b82525050565b600060ff82169050919050565b610fd281610fbc565b82525050565b6000606082019050610fed6000830186610fad565b610ffa6020830185610fad565b6110076040830184610fc9565b949350505050565b6000806040838503121561102657611025610c92565b5b600083013567ffffffffffffffff81111561104457611043610c97565b5b61105085828601610db4565b925050602083013567ffffffffffffffff81111561107157611070610c97565b5b61107d85828601610db4565b9150509250929050565b60008115159050919050565b61109c81611087565b82525050565b60006020820190506110b76000830184611093565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156110f75780820151818401526020810190506110dc565b60008484015250505050565b600061110e826110bd565b61111881856110c8565b93506111288185602086016110d9565b61113181610ca6565b840191505092915050565b600060208201905081810360008301526111568184611103565b905092915050565b61116781610e85565b811461117257600080fd5b50565b6000813590506111848161115e565b92915050565b6000602082840312156111a05761119f610c92565b5b60006111ae84828501611175565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60006111de826111b7565b6111e881856111c2565b93506111f88185602086016110d9565b61120181610ca6565b840191505092915050565b6000602082019050818103600083015261122681846111d3565b905092915050565b7f4552525f434f4e54454e545f4c454e4754480000000000000000000000000000600082015250565b60006112646012836111c2565b915061126f8261122e565b602082019050919050565b6000602082019050818103600083015261129381611257565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061130382610e85565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611335576113346112c9565b5b600182019050919050565b600061134b82610e85565b915061135683610e85565b925082820190508082111561136e5761136d6112c9565b5b92915050565b6000819050602082019050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b60006113bc8251611384565b80915050919050565b60008160020a8302905092915050565b60006113e0826110bd565b826113ea84611374565b90506113f5816113b0565b92506014821015611435576114307fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026113c5565b831692505b5050919050565b60006114488251610e6c565b80915050919050565b600061145c826110bd565b8261146684611374565b90506114718161143c565b925060208210156114b1576114ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026113c5565b831692505b5050919050565b60006080820190506114cd6000830187610fad565b6114da6020830186610fc9565b6114e76040830185610fad565b6114f46060830184610fad565b95945050505050565b7f696e76616c6964207369676e6174757265206c656e6774680000000000000000600082015250565b60006115336018836111c2565b915061153e826114fd565b602082019050919050565b6000602082019050818103600083015261156281611526565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006115a382610e85565b91506115ae83610e85565b9250826115be576115bd611569565b5b828206905092915050565b60006115d482610e85565b91506115df83610e85565b9250826115ef576115ee611569565b5b828204905092915050565b600061160582610e85565b915061161083610e85565b9250828203905081811115611628576116276112c9565b5b9291505056fea2646970667358221220f913235d5218751b2e092cb2f9089491bc9b093946f2067c0854d2ad0ae6dd6f64736f6c63430008120033 -\ No newline at end of file +608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611006806100606000396000f3fe608060405234801561001057600080fd5b506004361061005e576000357c0100000000000000000000000000000000000000000000000000000000900480631ecc95c814610063578063772295f6146100935780638da5cb5b146100c3575b600080fd5b61007d60048036038101906100789190610a5d565b6100e1565b60405161008a9190610af0565b60405180910390f35b6100ad60048036038101906100a89190610b0b565b61014a565b6040516100ba9190610c09565b60405180910390f35b6100cb610563565b6040516100d89190610c33565b60405180910390f35b600060606000806100f0610563565b90506100fb8661058c565b92508280519060200120915061011182866107f2565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614935050505092915050565b6101526108c9565b6060806060605485511461019b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019290610cab565b60405180910390fd5b601467ffffffffffffffff8111156101b6576101b5610932565b5b6040519080825280601f01601f1916602001820160405280156101e85781602001600182028036833780820191505090505b509250602067ffffffffffffffff81111561020657610205610932565b5b6040519080825280601f01601f1916602001820160405280156102385781602001600182028036833780820191505090505b509050602067ffffffffffffffff81111561025657610255610932565b5b6040519080825280601f01601f1916602001820160405280156102885781602001600182028036833780820191505090505b50915060005b8351811015610349578581815181106102aa576102a9610ccb565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284828151811061030757610306610ccb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061034190610d29565b91505061028e565b5060005b602081101561041457856014826103649190610d71565b8151811061037557610374610ccb565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028382815181106103d2576103d1610ccb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061040c90610d29565b91505061034d565b5060005b60208110156104df578560348261042f9190610d71565b815181106104405761043f610ccb565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000282828151811061049d5761049c610ccb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806104d790610d29565b915050610418565b50826104ea90610e11565b6c010000000000000000000000009004846000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161053b90610e8d565b8460200181815250508061054e90610e8d565b60019004846040018181525050505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606080600080845160166105a09190610d71565b67ffffffffffffffff8111156105b9576105b8610932565b5b6040519080825280601f01601f1916602001820160405280156105eb5781602001600182028036833780820191505090505b50925060197f0100000000000000000000000000000000000000000000000000000000000000028360008151811061062657610625610ccb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060029150306c0100000000000000000000000002905060005b601481101561070d5781816014811061068a57610689610ccb565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000028484836106ba9190610d71565b815181106106cb576106ca610ccb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061070590610d29565b91505061066e565b5060148261071b9190610d71565b915060005b85518110156107e65785818151811061073c5761073b610ccb565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028484836107939190610d71565b815181106107a4576107a3610ccb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806107de90610d29565b915050610720565b50829350505050919050565b60008060008061080185610861565b9250925092506001868285856040516000815260200160405260405161082a9493929190610f1f565b6020604051602081039080840390855afa15801561084c573d6000803e3d6000fd5b50505060206040510351935050505092915050565b600080600060418451146108aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a190610fb0565b60405180910390fd5b6020840151925060408401519150606084015160001a90509193909250565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008019168152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61096a82610921565b810181811067ffffffffffffffff8211171561098957610988610932565b5b80604052505050565b600061099c610903565b90506109a88282610961565b919050565b600067ffffffffffffffff8211156109c8576109c7610932565b5b6109d182610921565b9050602081019050919050565b82818337600083830152505050565b6000610a006109fb846109ad565b610992565b905082815260208101848484011115610a1c57610a1b61091c565b5b610a278482856109de565b509392505050565b600082601f830112610a4457610a43610917565b5b8135610a548482602086016109ed565b91505092915050565b60008060408385031215610a7457610a7361090d565b5b600083013567ffffffffffffffff811115610a9257610a91610912565b5b610a9e85828601610a2f565b925050602083013567ffffffffffffffff811115610abf57610abe610912565b5b610acb85828601610a2f565b9150509250929050565b60008115159050919050565b610aea81610ad5565b82525050565b6000602082019050610b056000830184610ae1565b92915050565b600060208284031215610b2157610b2061090d565b5b600082013567ffffffffffffffff811115610b3f57610b3e610912565b5b610b4b84828501610a2f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b7f82610b54565b9050919050565b610b8f81610b74565b82525050565b6000819050919050565b610ba881610b95565b82525050565b6000819050919050565b610bc181610bae565b82525050565b606082016000820151610bdd6000850182610b86565b506020820151610bf06020850182610b9f565b506040820151610c036040850182610bb8565b50505050565b6000606082019050610c1e6000830184610bc7565b92915050565b610c2d81610b74565b82525050565b6000602082019050610c486000830184610c24565b92915050565b600082825260208201905092915050565b7f4552525f434f4e54454e545f4c454e4754480000000000000000000000000000600082015250565b6000610c95601283610c4e565b9150610ca082610c5f565b602082019050919050565b60006020820190508181036000830152610cc481610c88565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610d3482610bae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d6657610d65610cfa565b5b600182019050919050565b6000610d7c82610bae565b9150610d8783610bae565b9250828201905080821115610d9f57610d9e610cfa565b5b92915050565b600081519050919050565b6000819050602082019050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b6000610df88251610dc0565b80915050919050565b60008160020a8302905092915050565b6000610e1c82610da5565b82610e2684610db0565b9050610e3181610dec565b92506014821015610e7157610e6c7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802610e01565b831692505b5050919050565b6000610e848251610b95565b80915050919050565b6000610e9882610da5565b82610ea284610db0565b9050610ead81610e78565b92506020821015610eed57610ee87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802610e01565b831692505b5050919050565b610efd81610b95565b82525050565b600060ff82169050919050565b610f1981610f03565b82525050565b6000608082019050610f346000830187610ef4565b610f416020830186610f10565b610f4e6040830185610ef4565b610f5b6060830184610ef4565b95945050505050565b7f696e76616c6964207369676e6174757265206c656e6774680000000000000000600082015250565b6000610f9a601883610c4e565b9150610fa582610f64565b602082019050919050565b60006020820190508181036000830152610fc981610f8d565b905091905056fea264697066735822122002c8390b5ff45e86ce27de443185447f0eba191ffb863ee2a0f6a649827aaf6364736f6c63430008130033 +\ No newline at end of file diff --git a/python/eth_offline/data/Offline.json b/python/eth_offline/data/Offline.json @@ -1 +1 @@ -[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"fromRequest","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_ethSignedMessageHash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"splitData","outputs":[{"components":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"bytes32","name":"domain","type":"bytes32"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct OfflineRubber.Instruction","name":"instruction","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"splitSignature","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"toRequest","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"v","type":"uint256"}],"name":"uintToString","outputs":[{"internalType":"string","name":"str","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"verifyRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}] +[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"splitData","outputs":[{"components":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"bytes32","name":"domain","type":"bytes32"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct OfflineRubber.Instruction","name":"instruction","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"verifyOfflineRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}] diff --git a/python/tests/test_basic.py b/python/tests/test_basic.py @@ -95,107 +95,6 @@ class TestOfflineEth(EthTesterCase): self.assertTrue(same_hex(r[128:192], v[32:].hex())) - def test_sign_match(self): - #contract_bin = bytes.fromhex(strip_0x(self.address)) - beneficiary_bin = bytes.fromhex(strip_0x(self.accounts[2])) - msg_bin = b'foo' - msg_data = beneficiary_bin + msg_bin - msg_digest = to_validator_message(msg_data, self.address, digest=True) - - sig = self.signer.sign_validator_message(self.accounts[1], self.address, msg_data) - sig = sig[:64] + (sig[64] + 27).to_bytes(1, byteorder='big') - logg.debug('message is signed by {}'.format(self.accounts[1])) - - c = TxFactory(self.chain_spec) - j = JSONRPCRequest() - o = j.template() - o['method'] = 'eth_call' - enc = ABIContractEncoder() - enc.method('recoverSigner') - enc.typ(ABIContractType.BYTES32) - enc.typ(ABIContractType.BYTES) - enc.bytes32(msg_digest.hex()) - enc.bytes(sig.hex()) - data = add_0x(enc.get()) - tx = c.template(self.accounts[0], self.address) - tx = c.set_code(tx, data) - o['params'].append(c.normalize(tx)) - o['params'].append('latest') - o = j.finalize(o) - - r = self.rpc.do(o) - r = strip_0x(r) - - self.assertTrue(same_hex(r[24:64], self.accounts[1])) - - - def test_message(self): - #contract_bin = bytes.fromhex(strip_0x(self.address)) - beneficiary_bin = bytes.fromhex(strip_0x(self.accounts[2])) - msg_bin = b'bar' - msg_data = beneficiary_bin + msg_bin - - sig = self.signer.sign_validator_message(self.accounts[1], self.address, msg_data) - sig = sig[:64] + (sig[64] + 27).to_bytes(1, byteorder='big') - logg.debug('message is account {} {} signed by {}'.format(self.accounts[2], msg_data.hex(), self.accounts[1])) - - c = TxFactory(self.chain_spec) - j = JSONRPCRequest() - o = j.template() - o['method'] = 'eth_call' - enc = ABIContractEncoder() - enc.method('toRequest') - enc.typ(ABIContractType.BYTES) - enc.bytes(msg_data.hex()) - data = add_0x(enc.get()) - tx = c.template(self.accounts[0], self.address) - tx = c.set_code(tx, data) - o['params'].append(c.normalize(tx)) - o['params'].append('latest') - o = j.finalize(o) - - r = self.rpc.do(o) - r = strip_0x(r) - rb = r[-128:] - rb = rb[4:] - - self.assertTrue(same_hex(rb[:40], self.address)) - self.assertTrue(same_hex(rb[40:80], self.accounts[2])) - self.assertTrue(same_hex(rb[80:86], b'bar'.hex())) - - - def test_magic_request(self): - beneficiary_bin = bytes.fromhex(strip_0x(self.accounts[2])) - msg_bin = b'bar' - msg_data = beneficiary_bin + msg_bin - - sig = self.signer.sign_validator_message(self.accounts[1], self.address, msg_data) - sig = sig[:64] + (sig[64] + 27).to_bytes(1, byteorder='big') - logg.debug('message is {} signed by {}'.format(msg_data.hex(), self.accounts[1])) - - c = TxFactory(self.chain_spec) - j = JSONRPCRequest() - o = j.template() - o['method'] = 'eth_call' - enc = ABIContractEncoder() - enc.method('fromRequest') - enc.typ(ABIContractType.BYTES) - enc.typ(ABIContractType.BYTES) - enc.bytes(msg_data.hex()) - enc.bytes(sig.hex()) - data = add_0x(enc.get()) - tx = c.template(self.accounts[0], self.address) - tx = c.set_code(tx, data) - o['params'].append(c.normalize(tx)) - o['params'].append('latest') - o = j.finalize(o) - - r = self.rpc.do(o) - r = strip_0x(r) - - self.assertTrue(same_hex(r[24:64], self.accounts[1])) - - def test_verify(self): beneficiary_bin = bytes.fromhex(strip_0x(self.accounts[2])) msg_bin = b'bar' @@ -210,7 +109,7 @@ class TestOfflineEth(EthTesterCase): o = j.template() o['method'] = 'eth_call' enc = ABIContractEncoder() - enc.method('verifyRequest') + enc.method('verifyOfflineRequest') enc.typ(ABIContractType.BYTES) enc.typ(ABIContractType.BYTES) enc.bytes(msg_data.hex()) @@ -244,7 +143,7 @@ class TestOfflineEth(EthTesterCase): o = j.template() o['method'] = 'eth_call' enc = ABIContractEncoder() - enc.method('verifyRequest') + enc.method('verifyOfflineRequest') enc.typ(ABIContractType.BYTES) enc.typ(ABIContractType.BYTES) enc.bytes(msg_data.hex()) diff --git a/solidity/OfflineBase.sol b/solidity/OfflineBase.sol @@ -4,24 +4,18 @@ pragma solidity ^0.8.0; // Some methods are copied under other licenses, please see code comments for details abstract contract Offline { - function fromRequest(bytes memory _data, bytes memory _signature) public view returns(address) { - bytes32 messageDigest; + function verifyOfflineRequest(bytes memory _data, bytes memory _signature) public view returns(bool) { bytes memory message; - - message = toRequest(_data); - - messageDigest = keccak256(message); - - return recoverSigner(messageDigest, _signature); - } - - function verifyRequest(bytes memory _data, bytes memory _signature) public view returns(bool) { + bytes32 messageDigest; address _owner = owner(); + + message = toValidatorMessage(_data); + messageDigest = keccak256(message); - return _owner == fromRequest(_data, _signature); + return _owner == recoverSigner(messageDigest, _signature); } - function toRequest(bytes memory _data) public view returns(bytes memory) { + function toValidatorMessage(bytes memory _data) private view returns(bytes memory) { bytes memory message; uint256 c; bytes20 contractBytes; @@ -42,19 +36,17 @@ abstract contract Offline { return message; } - //function verifyExtraData(bytes memory _data) public virtual pure; - function owner() public virtual view returns(address); // from https://solidity-by-example.org/signature/ - function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature) public pure returns (address) { + function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature) private pure returns (address) { (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); return ecrecover(_ethSignedMessageHash, v, r, s); } // from https://solidity-by-example.org/signature/ // Published under MIT license - function splitSignature(bytes memory sig) public pure returns (bytes32 r, bytes32 s, uint8 v) { + function splitSignature(bytes memory sig) private pure returns (bytes32 r, bytes32 s, uint8 v) { require(sig.length == 65, "invalid signature length"); assembly { @@ -80,7 +72,7 @@ abstract contract Offline { // https://ethereum.stackexchange.com/questions/10811/solidity-concatenate-uint-into-a-string // Published under license CC BY-SA 3.0 - function uintToString(uint v) public pure returns (string memory str) { + function uintToString(uint v) private pure returns (string memory str) { uint maxlength = 100; bytes memory reversed = new bytes(maxlength); uint i = 0;