Users who use account abstraction wallets and bridge their stETH on the Arbitrum network using the claim()
function will lose their funds. Account abstraction wallets are, by design, unique smart contract instances deployed on individual chains. While users can create account abstraction wallets on different chains, they ultimately have distinct account addresses
Since account abstraction wallets are on the rise, with Safe having almost 6M users (disregarding other Account Abstraction wallet "providers"), this is a very plausible scenario that should be taken into consideration.
When users stake stETH on Mainnet using the stake()
function, the funds that they've staked is recorded under msg.sender (the account on Mainnet with which they're interacting with the Distribution.sol contract).
As we can see msg.sender is passed as the user_
and the pending rewards will be recorded to that user data, meaning the msg.sender:
All of the rewards that the user has accumulated will be recorded under the userData which in the above case is the msg.sender (the mainnet address which called this function).
When a user goes on to claim their rewards on Arbitrum, all of the awards will be lost since they won't have the same address on Arbitrum as the one that they used to interact with the contract on mainnet.
Users which use Account Abstraction wallets will lose all of their funds when bridging tokens due to AA wallets having different addresses on different chains.
Manual Review
Include a rewardAddress
field on the claim
function so that users with account abstraction wallets can pass as an arbitrary argument to "redirect" all of their pending rewards to.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.