By: Zooko Wilcox, Jason McGee, and Taylor Hornby of Shielded Labs
Summary
Shielded Labs is working with The Zcash Foundation, Tachyon Group, Valar Group, and the Zcash Open Development Lab (ZODL) on a proposal called “Ironwood” to restore the ability for users to verify the soundness of the circulating supply of Zcash.
Last week, a critical counterfeiting vulnerability was discovered in Zcash’s Orchard pool. The vulnerability was remediated through an emergency network upgrade coordinated by ZODL and other ecosystem participants, and was completed on June 2.
Although we believe it was unlikely that the vulnerability was exploited (for reasons given in our disclosure), the privacy properties of Orchard prevent users from verifying that for themselves.
Ironwood would allow users to verify that the circulating supply of Zcash is correct. Users would gain this ability immediately upon the activation of Ironwood, by simply summing up the balances of the active pools. They would not need to reason about other people’s incentives or actions, nor wait for migration from the Orchard pool, in order to verify that the total circulating supply of Zcash is correct.
Ironwood
The objective of Ironwood is to restore each Zcash user’s ability to verify the supply integrity of Zcash. This verifiability was impaired by the existence of the counterfeiting vulnerability. Immediately upon activation, users will be able to independently verify that the circulating supply of Zcash is sound, just by running a node.
To accomplish this, Ironwood would:
-
Create a new shielded pool using the Orchard circuit with the recent counterfeiting vulnerability fixed.
-
Reject as invalid any transaction that creates a new output in the old Orchard pool.
-
Increase assurance about the codebase, using such techniques as AI-assisted security auditing and formal verification, all aimed at assuring the absence of additional counterfeiting bugs.
Why Ironwood Works
Ironwood changes what can happen inside the Orchard pool.
Upon activation, any transaction that creates a new output in the Orchard pool would be rejected. This means ZEC could no longer continue circulating within that pool. From that point forward, funds in the Orchard pool could move only by exiting the pool through a turnstile.
Turnstiles are Zcash’s on-chain accounting mechanism for transfers between pools. They track how much ZEC has entered and exited each pool and reject any transaction that attempts to move out more ZEC than legitimately entered.
Together, these rules mean users do not need to wait for all, or even any, Orchard funds to migrate. As soon as Ironwood activates, users can verify from the consensus rules that no more than the correct amount of ZEC can be circulating. This provides an immediate, trustless guarantee of the soundness of the Zcash circulating supply. Excess ZEC cannot be secretly circulating between users of the Orchard pool, nor can it escape into another pool.
Generating Evidence of Whether or Not The Vulnerability Was Exploited
Ironwood may also provide evidence regarding whether the Orchard vulnerability was ever exploited, but achieving its objective does not depend on whether such evidence emerges.
As users migrate funds from the existing Orchard pool to the new pool, any hypothetical counterfeiter faces a choice: attempt to move counterfeit funds and risk exposing their existence, or leave them behind and risk being unable to move them in the future.
This creates two possible outcomes:
Outcome A: No excess ZEC attempts to leave the existing Orchard pool. This would be strong evidence that the vulnerability was never exploited, since a counterfeiter would have a strong incentive to move counterfeit funds before legitimate users completed their migrations.
Outcome B: Excess ZEC attempts to leave the existing Orchard pool. In this case, the excess funds would be unable to leave the pool and would effectively be destroyed. Unfortunately, this is necessary to preserve the current circulating supply across all pools. This would also provide publicly verifiable evidence that counterfeiting had occurred. Since we think the vulnerability was not exploited, we think this outcome is unlikely.
Wallets
We recommend that all wallets that support the existing Orchard pool add support for the new pool.
Wallets should continue to support the existing Orchard pool normally until Ironwood activation, and then migrate user funds from the existing Orchard pool to the new pool. While migration has privacy implications (namely, it exposes the amount of ZEC transferred and the time that the transfer took place), we believe the impact on user privacy is modest and can be further mitigated by wallet behavior.
Existing Orchard receivers (i.e. addresses) remain valid and would not need to be rotated. ZEC sent to Orchard receivers created before Ironwood activation would automatically be received as ZEC in the new pool.
Timing
Like most network upgrades, Ironwood will require development, testing, review, and coordination across the ecosystem. Experience has shown that this work often takes longer than expected, so we believe it is better to be conservative when discussing timelines than to overpromise and underdeliver.
One additional source of uncertainty is the ongoing deprecation of zcashd. While Shielded Labs has not been directly involved in that effort, the migration of exchanges, mining pools, wallets, and other infrastructure providers to Zebra may affect the timing of this network upgrade.
We expect to have a better understanding of the timeline as implementation plans mature and discussions continue.
Conclusion
We want to emphasize that we believe prior exploitation of the Orchard vulnerability is unlikely. But users should not have to trust our assessment, or anyone else’s, when it comes to the integrity of the Zcash supply.
Ironwood is designed to restore a guarantee of Zcash’s circulating supply that anyone can verify for themselves. Whether the vulnerability was ever exploited or not, the goal is the same: make the integrity of the Zcash supply something that can be verified.
We believe Ironwood is the best path forward and look forward to discussing this proposal with the Zcash community.
Acknowledgements
Thanks to Sean Bowe, Dev Ojha, David Campbell, Alex Bornstein, Nate Wilcox, Kris Nuttycombe, Vitalik Buterin, Balaji Srinivasan, and Taylor Hornby, Josh Swihart, and Tatyana for review and feedback. Especially thanks to Kris Nuttycombe for suggesting that the Ironwood upgrade disable transactions which create outputs in the old Orchard pool. This turns out to be critical for Ironwood to achieve its goal.

