zips
zips copied to clipboard
[ZIP 2003] Disallow v4 transactions in NU7
In NU7 we will very likely be adding a new transaction version, v6. This is likely to mean that three transaction versions will be allowed simultaneously: v4, v5, and v6. That is complicated but not really so bad.
After NU7, it is proposed to reorganise transaction fields to support "action groups". This may or may not require another transaction version, v7, but it will increase the number of options for the transaction format regardless. In addition there will be a new revision of the Orchard shielded protocol to support ZSAs, with an associated circuit change. I think it is not yet decided whether the old Orchard Action circuit will still be used in v5/v6 transactions after NU7 activation, but in any case proofs of that circuit must still be verifiable.
Having effectively four transaction versions (v4 to v6 and the action groups change), and five zk circuits (Sprout JoinSplit, Sapling Spend, Sapling Output, Orchard Action, OrchardZSA Action) in the field at once is too much. I'm good at remembering protocol details and I don't think I'll be able to effectively keep track of the whole protocol at this point, even with the help of my ADHD meds 😛
So, assuming that NU6 and NU7 remain roughly as planned, I propose that in NU7, we:
- disallow v4 transactions, i.e. only v5, v6 and possibly v7 will be supported;
- ~~at the NU7 activation height, burn/unissue all remaining Sprout funds~~ moved to #925.
Note that the Sprout chain value pool balance will necessarily be nonnegative because ZIP 209 requires that as a consensus rule.
(As with all network upgrades, a rollback is possible undoing the activation, at which point it is technically possible for additional Sprout funds to be spent before any reactivation. Therefore, a validating node must keep the last Sprout treestate until it is no longer possible to roll back that far, i.e. 100 blocks after activation for Zebra. It is expected that all zcashd nodes will have halted.)
This is proposed for NU7, so it should block the NU7 target until it is decided whether or not it will be included.
@str4d made the argument that if we do this and then there is a reason to re-allow v4 transactions, that would be possible.
This is specified by draft-hopwood-disallow-v4-transactions.
The ZIP Editors (me, @nuttycom, @conradoplg, @arya2) agree that the ZIP draft as-written is an Update ZIP, and have assigned it ZIP 2003.