The uncomfortable truth is: You might have to get used to the fact that the funds are lost. In this article, we will explore if there is a way to recover. However it is more likely than not, that there is no way to recover.

Context

With the advent of more Ethereum Layer 2 solutions (e.g. Optimism, Arbitrum) and sidechains (e.g. xDai, Polygon), assets and dapps are scattered across different networks. That brings up the question: How do Ethereum accounts behave across different networks?

There is a difference between private key based accounts (“externally owned accounts”, EOAs) and smart contract accounts such as the Safe.

  • EOAs can be used across networks without issues.

  • Safes cannot be used that easily across networks.

Safes are deployed only to 1 specific network. This means if you created a Safe address on e.g. Ethereum mainnet, it does not mean that there is a Safe on the same address on e.g. xDai. That is unless yourself or someone else has deployed a Safe to this address, it will not exist.

Most bridges between networks assume the same addresses on each network by default which leads to most of the confusion. Bridges usually “bridge” under the assumption that it is between 2 EOA addresses.

In some cases, it is possible to create a Safe on a different network with the same address and owner structure. In other cases it is not possible. We will now explore this further.

Determine Safe setup during creation

As a first, we need to figure out how and with which settings the Safe was created. This is referring to the actually existing Safe. Particularly, we need to know the ProxyFactory address and the used masterCopy (called singleton starting v1.3.0).

For this, please open the Safe web interface and navigate to the creation transaction.

That’s the creation for this Safe on Ethereum mainnet. You can copy Factory and Mastercopy address here.

Alternatively, find the Safe creation transaction on Etherscan or a block explorer on your respective network. The to address is the used factory. The mastercopy can be seen after clicking “decode input data”. Here is an example transaction.

In our example, the following addresses have been found:

  • factory: 0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F9B

  • mastercopy: 0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F

For some cases below we also need the method that was called on the proxy factory. This info can be found in the undecoded input data field on Etherscan.

In this case it is createProxy.

Case 1: Safe version 1.3.0

This section only applies when

If any of the above differs, please skip to the next section.

Don’t get too excited yet, but you might be in luck and your funds can be recovered. In 1.3.0 of the Safe contracts, we made it easier and more reliable that Safes can be created at the same addresses on different networks with the exact same configuration (owners, threshold).

Since we are in the process of rolling out 1.3.0 at the time of writing this article, there is no specific guide for this, yet. We will add more info once 1.3.0 is available via our interfaces. For the time being, if you have such a Safe already, please reach out in the #safe channel on the Gnosis Discord.\

Case 2: Custom 1.1.1 Safe on Binance Smart Chain (BSC).

This section only applies when

If any of the above differs, please skip to the next section.

You created your Safe via an interface hosted by Binance, not Gnosis (cf. this article). Since it is hosted by Binance, we cannot provide any support since we haven’t verified any code changes that might have been made. Please reach out to Binance about potentially recovering your funds.

Case 3: Funds sent on xDai to 1.0.0 or 1.1.1 Safe created with createProxy

This section only applies when

If any of the above differs, please skip to the next section.

The Safe 1.1.1 used for a while a factory setup where Safe addresses would not depend on the actual Safe setup but rather just on the number of Safes previously deployed via this factory. This has since been changed. However, we might be able to help you, please reach out in the #safe channel on the Gnosis Discord.

Case 4: Funds sent to 1.0.0 or 1.1.1 Safe created with createProxyWithNonce

This section only applies when

If any of the above differs, please skip to the next section.

Your funds might be recoverable. However it takes technical knowledge with Ethereum, Solidity and web3 to do so. There are many rotating parts here and each case differs. Hence you need someone that knows what they are doing.

We currently don’t have a step by step guide for this due to other priorities, however the following outlines what you have to do to give this a try:

First, we need to make sure that the proxy factory exists on the network where the funds have accidentally been sent to. Make sure that factory and mastercopy exist on this network on the same addresses as the ones mentioned above. You can use our deployment replayer to create them.

The factory needs to have 100% the exact same bytecode on both networks. Please verify that. It is possible that some sidechains or L2 do not support specific opcodes which lead to a different generated bytecode. If the bytecode differs, asset recovery won’t be possible, unfortunately. If you don’t know how to compare the bytecode, you are probably not the right person for this task. Please get in touch with someone that has the required knowledge. In case recovery is theoretically possible, you do not want to mess up here.

Now you need to make the exact same call to the proxy factory in order to create a Safe with the same address. The executing account/address does not matter, however all input data needs to be 100% the same. If this succeeds, you now have created yourself a Safe on the same address on the other network and you can recover your funds by triggering a Safe transaction. The Safe will have the same configuration as the original Safe at the time of creation.

Please note: If your Safe uses a version prior to 1.3.0, transactions can be replayed cross-chain. Cross-chain replay protection was only introduced in 1.3.0. Again, if you don’t know what this means, please consider getting help from someone experienced with the technicalities as your funds might still be at risk even if you succeeded until this point.

Again, this description is very brief and quite technical. We are currently unable to provide hands-on support for this scenario. If you are in the process of trying this, feel free to reach out via the #safe channel on the Gnosis Discord with specific questions on what you are trying to achieve and where you are struggling.

Other cases:

This article currently does not cover any other cases. In case none of the above applies to you, please reach out via the #safe channel on the Gnosis Discord, so we can investigate your case and potentially expand this article.

We sincerely hope that you are able to recover your funds.

Did this answer your question?