-
Notifications
You must be signed in to change notification settings - Fork 929
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make transaction order flexible #199
Comments
You mean for those actions, the nonce cannot be an "out of order" nonce, but rather an incremental one, right? |
For clarification here an example scenario: Let's assume you have a Safe with owners A, B, C and threshold 2
It has different end states depending on the order you execute them in.
Then the endstate is fix no matter what order you execute them in (and the state change of each single transaction is the same as before) |
Solutions used by any.sender contracts: https://github.com/anydotcrypto/metatransactions/blob/master/src/contracts/account/ReplayProtection.sol |
@mmv08 is this something you would like to be persued for release 1.5? |
No, because this is a breaking change. We're also tens of bytes away from the code size limit, so this would be impossible to include. |
Currently the transactions need to be executed in strict order of the nonce (as a normal ethereum transaction). This was done to save gas and to ensure that specific actions (adding owners/ removing owners/ changing threshold) don't get mixed up.
By adjusting that adding/ removing owner increments/ decrements the threshold by 1 instead of allowing to specify the threshold can prevent issue with potential owner changes mess ups (see formal verification for details)
If the order of transaction is important (which normally means that the transactions depend on each other) then batched transactions should be used.
The increase in gas costs can be minimized to a couple thousand gas by using a bucket based strategy (each storage slot can store up to 256 flags for used nonces).
The text was updated successfully, but these errors were encountered: