In another article (Private Key Reuse Detected — What it means and how to unblock your funds) I explained why your funds might get blocked in your iota wallet due to the key reuse warning. The referenced article also describes how to move your funds using the iota command line wallet (cli wallet), but this always creates a certain risk of your funds getting stolen because you actually have to reuse the private key of the affected address.

In this new article, I like to discuss another option to move your iotas without any additional risk. It does not require you to sign any transaction again, thus it is not publishing any additional part of the private key of the address. No risk involved at all!

How does it work?

If you have funds on a used address, it means that there is at least one outgoing transaction already. The iota protocol allows replaying the same transaction without having to sign again. By simply reattaching the original outgoing transaction the iotas are moved away from the used address to the target address(es) of the previous transaction. No key reuse is necessary and the funds are never at risk.

Sounds too good to be true?

Well, it is good and true, but unfortunately, this option is only applicable under certain circumstances and will not help everybody. It is also a bit more complicated to execute, so you should only try this when you feel comfortable with using tangle explorers and have a basic knowledge of how iota transactions work. If your address was only used once before and the amount of funds blocked is not substantial you might just use the command line wallet to move your funds as described in the article mentioned above. In any way, if you feel unsure or have any open questions you can always ask for assistance in the #help channel on iota’s Discord server. It should be clear that I cannot take any responsibility for your funds.

Why does it not work for everyone?

Of course, everyone can do this, as the underlying protocol allows it, but in some cases, it is not recommended. It is important to understand that you cannot change the original transaction, you can just repeat it. That means that the blocked iotas will be transferred to the original target address of the previous outgoing transaction. If you do not have any control over this address (because it is not yours) then you would just send your funds away. Also, it is quite likely that this target address itself was also already used for sending, so you would just end up with blocked funds on another used address again.

What do you have to do to make this work?

1. Identify the affected address with blocked funds

First, you need to find the address that is actually blocking you. If you use the Trinity wallet this is a fairly simple task as there is a nice overview showing your addresses and their balances. You can find this list by clicking on Settings → Account Management → View addresses (Use the Account menu when on Trinity desktop). Scroll through your list and find a used address with funds on it. Used addresses are highlighted in red with crossed-out characters.

In the screenshot above you can see that the address 9GIYJ… is used but still has 100 i on it. These kinds of funds are blocked now by the wallet for your own protection as moving them by sending a new transaction would require a key reuse. Copy the affected address to a text file so you have it handy.

If you are not using Trinity but the official GUI wallet, things are a bit more tricky. This wallet does not show the balances in the list of addresses, which makes it harder to identify the culprit. To find the affected address you will have to check each address in a tangle explorer manually. Open the History section and click on the Addresses button.

Start from the top (newest address) and copy it to the clipboard by clicking it. Now enter it into a tangle explorer as for example theTangle.org.

If your wallet is connected to a synced node you should see all used addresses as crossed-out text. Check all used addresses first until you find one that still has a balance on it.

2. Identify the target address(es)

With the affected address identified, we can have a look at the original outgoing transaction. After entering the affected address in the tangle explorer click on the outgoing transaction (negative value in a red box ) and then on its bundle hash to display the full bundle. For illustration purposes, we will use the transaction from the screenshot (9OEMJ…) with its bundle (PXFXH…).