Hi Rosetta team,
We’re working on correctly representing Mina’s notion of time-locked accounts for its Rosetta integration and were hoping you could provide us with some feedback.
Certain accounts in Rosetta are configured with a vesting schedule that enforces that some subset of tokens in an account are initially illiquid, with new chunks becoming liquid at fixed time intervals. The intervals can be arbitrarily short, so every such account can see its liquid balance change in every single block.
Returning only the liquid subset in calls to
/accounts/balance is straightforward, but we don’t have corresponding operations representing these balance changes. For a few reasons, it’s impossible for us to directly create transactions/operations for the balance changes.
We’ve reviewed Celo’s implementation of vesting using their “ReleaseGold” smart contracts which are represented as sub-accounts in Rosetta, but unfortunately we can’t implement something equivalent in Mina.
So the appropriate solution for Mina appears to be to mark accounts with vesting schedules as balance-exempt and implementing historical balance lookups for all accounts.
One concern we have there is that we’re not sure whether the list of balance-exempt account identifiers we return in
/network/options can change as new vesting accounts are created (and perhaps removed once past the end of their vesting timeline). Is returning a different
balance_exemptions array across calls currently allowed? If not is it possible to update the Rosetta specification to support that in some way?