All Collections
Problems
I sent assets to a Safe address on the wrong network, any chance to recover?
I sent assets to a Safe address on the wrong network, any chance to recover?

This article explains what options you have in case you have sent funds to a Safe address on the wrong network.

Tobias Schubotz avatar
Written by Tobias Schubotz
Updated over a week ago

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).

Here's a guide detailing how to create a Safe with the same address on a different network - https://www.loom.com/share/ca34aabcd62747fb9fb89bd463b4c741. If you need further guidance, please reach out to our dedicated Safe Discord.

It needs to be noted that Safes with the same addresses on L2 and sidechains work out of the box with the Web and desktop UI. However, existing Safe addresses on Eth mainnet re-created on L2/sidechains (and vice versa) do not load up within our UI. This is because they use different singleton contracts. Therefore, users would need to load these newly created Safes via another UI e.g. through our command line interface.

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 Safe. 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 to our dedicated Safe 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 please reach out to our dedicated Safe 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 to our dedicated Safe 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?