Tokens transfer from KT1 contract to tz1 address

Dear Tezos community,

Recently I made a big mistake by accidentally sending wXTZ tokens to a KT1 delegation contract instead of the tz1 manager address. I am usually careful with signing transactions, but this time I was doing many transactions within a short time frame and accidentally copy/pasted the wrong address. When trying new things like STKR DAO I am always sending small amounts first as a try out (which I did when bridging wXTZ from the Tezos to Ethereum blockchain), but for bridging tokens back to the Tezos chain I did not, resulting in a transaction of 5000 wXTZ to the KT1 address I used for delegation, which is coupled to the tz1 address I used for minting wXTZ. So I hold the private keys of this KT1 address via the coupled tz1 manager address, but the KT1 address is unable to send the tokens back, while it can receive tokens.

Undoubtedly this concerns a mistake for which I am solely responsible, I should have been more careful in signing transactions and I should have taken a closer look at the StakerDAO instructions (which mentions that only tz1 addresses should be used for transferring wXTZ).

Still, it happened, and I can imagine that I will not be the last one (others have already reported ending up in my situation), especially given the exponential growth of tokens on the Tezos blockchain. Therefore, I would kindly like to make a proposal that may solve my problem, and also prevent future lockups of tokens on KT1 delegation contracts from others that make the same mistake as I did. Based on conversations I had on the Discord of STKR DAO, I understood that there may be a way to enable sending tokens from a KT1 delegation contract to a tz1 address as part of a protocol migration. This may involve creating a smart contract that can call a token contract and ask to transfer tokens from a KT1 to the tz1 address.

I also understood that this would take a substantial effort from core developers and may not be something particularly urgent. Nonetheless, given the quantity of tokens that I messed up with and the concern that more people may make this mistake, I am posting this request here. Besides, if funding may be a limitation to follow-up on this issue, I will be happy to provide this personally. I am very much looking forward to your thoughts, many thanks in advance for your consideration!



If by “KT1 delegation contract” you mean a smart contract running the default “” script then the contract is already able to perform arbitrary smart contract calls as long as they are signed by the manager (the stored tz1) so you can produce a call “tz1 → KT1 → token contract” to transfer your tokens from the KT1 to the tz1 and no protocol update is needed for that.

Your favorite wallet application might not feature this however.


Many thanks for your reply, that’s indeed what I mean. The manager tz1 address is on my ledger so I will be able to sign this. That would be a great opportunity to solve this, thanks for the info!