Skip to content
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

✨ Message Hash Logic for < 1.0.0 Safe Versions #9

Merged
merged 2 commits into from
Dec 6, 2024

Conversation

pcaversaccio
Copy link
Owner

@pcaversaccio pcaversaccio commented Dec 6, 2024

🕓 Changelog

Safe multisig versions < 1.0.0 use a legacy (i.e. the parameter value baseGas was called dataGas previously) SAFE_TX_TYPEHASH value:

//keccak256(
//    "SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 dataGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)"
//);
bytes32 public constant SAFE_TX_TYPEHASH = 0x14d461bc7412367e924637b363c7bf29b8f47e2f84869f4426e5633d8af47b20;

Starting with version 1.0.0, baseGas was introduced: safe-global/safe-smart-account#90.

This PR introduces additional logic to the script to accommodate the breaking change in Safe versions. Furthermore, all Safe versions < 0.1.0 are not supported and the script issues as warning to the user.

Testing

Ethereum:

The Safe multisig 0xecd11858a4bcc35A51084Ebe672beaCe01142fcA is based on version 0.1.0.

Run:

./safe_hashes.sh --network ethereum --address 0xecd11858a4bcc35A51084Ebe672beaCe01142fcA --nonce 61
> Hashes:
Domain hash: 0x4181D94EE9F43DC08D31A2C86EB37B704F2051787A9C84D1397A60D07136D1C1
Message hash: 0xA6CF82FF9752EACE8FA8389C19C6B5FA8706AE702D7CF07F7B6734E73BFCD27D
Safe transaction hash: 0x85a7e913bba17df41ff87ce425bdf950ad8fa02343ec1c7652a823c1b2a9dab5

To verify the domain hash, you can use cast:

cast call 0xecd11858a4bcc35A51084Ebe672beaCe01142fcA "domainSeparator()" -r https://eth.llamarpc.com

which will output:

0x4181d94ee9f43dc08d31a2c86eb37b704f2051787a9c84d1397a60d07136d1c1

For the message hash and the Safe transaction hash, you can use the evaluate feature of Tenderly in one of the multisig transactions:

https://dashboard.tenderly.co/tx/mainnet/0xc139e324bc231c5f7b8a9a27e775295118e9cbc06995f89225261abd0420f362/debugger?trace=0.1.1.0

image

https://dashboard.tenderly.co/tx/mainnet/0xc139e324bc231c5f7b8a9a27e775295118e9cbc06995f89225261abd0420f362/debugger?trace=0.1.2

image

Signed-off-by: Pascal Marco Caversaccio <[email protected]>
@pcaversaccio pcaversaccio self-assigned this Dec 6, 2024
@pcaversaccio pcaversaccio added documentation Improvements or additions to documentation enhancement New feature or request labels Dec 6, 2024
@pcaversaccio pcaversaccio changed the title ✨ Message Hash Logic for <1.0.0 Safe Versions ✨ Message Hash Logic for < 1.0.0 Safe Versions Dec 6, 2024
Signed-off-by: Pascal Marco Caversaccio <[email protected]>
@pcaversaccio pcaversaccio merged commit 337fe27 into main Dec 6, 2024
@pcaversaccio pcaversaccio deleted the feat/support-very-old-safe-versions branch December 6, 2024 12:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant