Hi all. I’m a Rust dev looking at where I could contribute something durable
around Ironwood, and I want to sanity check an idea with the people who’d
actually use it before writing any code.
The situation as I understand it: once Ironwood is live, every wallet, exchange
and SDK that supports migration has to write its own turnstile-aware transaction
construction, track which funds have and haven’t moved, and handle edge cases
like partial migrations and retries. Shielded Labs flagged the failure modes
(value leaking across migration, funds getting stuck, replay of already-migrated
notes, incorrect cap handling) as a readiness risk.
What already exists: nuttycom sketched a migration-tool design in Zallet #481
(a migration bundle plus a background executor), Zaino #1343 tracks the indexer
side, and a “Turnstile Migration Integration Kit” grant application was declined.
So the need is acknowledged, but I don’t see a shared, reusable implementation
that multiple wallets could embed rather than each reinventing it.
The idea would be a small, reusable Rust crate that any wallet or SDK can use to:
construct turnstile-aware migration transactions, track migrated vs unmigrated
balances, and handle partial/retry edge cases, plus a set of conformance test
vectors so implementations can check they agree.
My honest questions, and a “no” to any of these is genuinely useful:
- Are wallet teams already solving this well enough in-house that a shared
library wouldn’t get adopted? (The kit grant was declined roughly on “no
developer ready to adopt it,” so I’d rather find that out first.) - Is it too late to matter for activation itself, given the real migration
window is the weeks and months after, as users actually move Orchard funds? - If a shared library would help, what would you need from it to actually adopt
it: what API shape, and at what layer (inside librustzcash vs a standalone
crate)?
@nuttycom, since the Zallet #481 design is yours, I’d especially value your read
on whether a separate reusable crate makes sense or whether this belongs in the
wallet stack directly. And wallet teams (Zkool, Zingo, Zodl and others), would
you use something like this?
Thanks for any candid feedback.