Do native tokens in wallet ever change addresses, e.g. during staking?

Is there ever any circumstance when Daedalus or Yoroi will shuffle around the non-Ada native tokens contained in any of the wallet’s addresses… automatically consolidating the UTxOs storing non-Ada tokens and/or moving them to different addresses, in response to Ada transactions or maintaining an Ada stake delegation?

We’re on a project now whose own sidechain will verify participation by checking for native token deposits at a particular address rather than in a particular wallet. As I remember, at least some processes like initially staking from Daedalus will consolidate multiple UTxOs into a single address before the stake assignment… in general, reserving some right to rearrange the UTxO distribution.

I’m just trying to make sure that no such process will ever affect the distribution of non-Ada native tokens among wallet addresses, particularly since most users on our new project will be storing this other native token in Cardano wallets already delegated to Ada stake pools.

If there are any conditions, Ada staking or not, that will automatically (i.e. without user request) bounce around a wallet’s native token deposits between addresses, we might have to take the extreme step of moving chunks of project native tokens into raw Cardano addresses… but we’re hoping that will not be necessary. :sunglasses:

1 Like

A wallet will only be able to shuffle or consolidate tokens as part of a user-authorized transaction: it cannot submit a transaction without the user passphrase or hardware wallet confirmation.

I’ve noticed that Daedalus is pretty aggressive at consolidating and moving tokens as a side effect of a transaction and that Yoroi is less aggressive in this regard. This aggressiveness is good for the blockchain but bad for the user. (You can notice that Daedalus intends to do this when you see a relatively high fee ~0.21 proposed, since that indicates tokens or several UTxOs are involved; setting up the same transaction on Yoroi often shows a lower, closer to minimal fee (~0.17).)

Depending on your use case, monitoring which tokens are held by any address associated with the particular stake address might be an option.

2 Likes

thanks @bwbush & yes, that might be a more convenient design… although we’re not the administrators of this project. It might have been a consideration in this design that, as far as I know, the Daedalus and Yoroi UIs don’t allow the user to extract their own stake address (please correct me if I’m wrong)… and they didn’t feel comfortable asking users to extract it themselves using third party utilities.

So, given what you say above: if for instance a project user placed 100K project tokens each into 2 separate Daedalus wallet addresses, it would be sufficient to simply receive those 2 separate deposits to those addresses & then halt all activity on the wallet during the required verification period:

  • With no transactions nor delegation changes, those 2 addresses would remain, exactly as we left them, each with their own separate balance of 100K tokens.
  • Since the regular receipt of delegation rewards is not a “user-authorized transaction,” we could count on this not disturbing the existing UTxO distribution… at least not of those 2 addresses.
1 Like

The “Rewards” tab on Daedalus lists the stake address for the wallet. It can also be extracted from knowing any of the wallet addresses, which are a combination of the payment plus stake verification hashes. I’m not sure about Yoroi. However, it sounds like wallets will someday allow users to split their staking among multiple pools: that would break the assumption that each wallet only has one stake address.

Yes, I think your scenario could work, but I’m concerned that it would be fragile in that it requires the user to halt activity for a while. (Some users may not read the instructions thoroughly enough.) Thorough testing of the possible wallet and user actions would be important.

1 Like

thanks; I can see them listed there as “Rewards addresses” :+1:

yes, we have been working on that one :heart_eyes:

Thanks for the verification, and for the consideration which of course you are right about… although in this case the users will be our own selves & a coordinated group of people testing a new platform in which no other activity will be possible for a few months other than “staking” from the specified addresses. :sunglasses:

1 Like

This is off topic, but I’m again finding it surprising that Yoroi doesn’t expose the stake key for its wallet(s). Maybe 1) I’ve missed it somewhere, or 2) it can be determined from the exported public key (Settings > wallet > Export button = 128 digit hex number)?

EDIT, p.s. I found it (i.e. option #1). There is an inner “Reward” selection, so it’s named as in Daedalus: Receive tab > left sidebar Reward = appears under Generated addresses.

1 Like