Nexus accounts cannot be deployed with the same address across multiple chains, breaking cross-chain functionality.
Smart accounts simulate the functionality of EOAs by having the same address across multiple chains, which allows for cross-chain functionality such as bridges to be used.
In all factories, the salt for the account's CREATE2
deployment is taken as the keccak256
hash of the calldata that createAccount()
is called with:
NexusAccountFactory.sol#L45-L56
However, when calling createAccount()
in BiconomyMetaFactory
, K1ValidatorFactory
and RegistryFactory
, the calldata contains parameters that might not be the same across chains.
For example, the initData
parameter of RegistryFactory.createAccount()
contains the addresses of modules, the registry and attesters:
It is extremely unlikely that these modules will have the same address across multiple chains, especially since modules can be deployed and used by anyone, not just Biconomy.
As such, due to these parameters, the calldata passed to createAccount()
will be different across multiple chains, making it impossible for an owner to have the same smart account address across chains.
Owners cannot have the same smart account address across multiple chains, breaking cross-chain functionality for Nexus accounts.
This is admittedly not a trivial problem to fix.
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.