You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Describe the bug
When simulating calls involving the .transfer() of ETH to the Piloted Safe address, these fail with an out-of-gas exception. That is because for transactions with the avatar address as sender, the Safe proxy+implementation contracts are cold. This means that the stipend of 2300 gas is insufficient to execute the cold Safe's receive() hook.
Expected behavior
The simulated call should succeed.
Possible solutions:
The issue could be mitigated using EIP-2930 access lists. The question is how we could make sure that requests dispatched from apps will generally have the required access list. We'd need to start intercepting RPC traffic already before a fork has been launched.
Another possible solution would be encouraging the use of a custom Safe proxy, which directly owns the receive() hook instead of proxying to the implementation contract. This would ensure that the hook could be executed staying inside the 2300 gas quota even for cold safe proxies. This obviously won't fix the issue for existing Safes using the default proxy.
Additional context
The issue should hopefully become less important over time, as using .transfer() is discouraged. However, as it stands there are popular contracts, such as WETH, using it.
The text was updated successfully, but these errors were encountered:
Describe the bug
When simulating calls involving the
.transfer()
of ETH to the Piloted Safe address, these fail with an out-of-gas exception. That is because for transactions with the avatar address as sender, the Safe proxy+implementation contracts are cold. This means that the stipend of 2300 gas is insufficient to execute the cold Safe's receive() hook.To Reproduce
Steps to reproduce the behavior:
Expected behavior
The simulated call should succeed.
Possible solutions:
The issue could be mitigated using EIP-2930 access lists. The question is how we could make sure that requests dispatched from apps will generally have the required access list. We'd need to start intercepting RPC traffic already before a fork has been launched.
Another possible solution would be encouraging the use of a custom Safe proxy, which directly owns the
receive()
hook instead of proxying to the implementation contract. This would ensure that the hook could be executed staying inside the 2300 gas quota even for cold safe proxies. This obviously won't fix the issue for existing Safes using the default proxy.Additional context
The issue should hopefully become less important over time, as using
.transfer()
is discouraged. However, as it stands there are popular contracts, such as WETH, using it.The text was updated successfully, but these errors were encountered: