Skip to content

[ZIP 248]: Define a forward-compatible, extensible transaction format.#1156

Open
nuttycom wants to merge 25 commits intomainfrom
draft/extensible_tx_format
Open

[ZIP 248]: Define a forward-compatible, extensible transaction format.#1156
nuttycom wants to merge 25 commits intomainfrom
draft/extensible_tx_format

Conversation

@nuttycom
Copy link
Copy Markdown
Contributor

@nuttycom nuttycom commented Jan 11, 2026

Fixes #1163

@nuttycom nuttycom force-pushed the draft/extensible_tx_format branch 3 times, most recently from 04ea4cc to 3f5566b Compare January 20, 2026 06:03
Copy link
Copy Markdown
Contributor Author

@nuttycom nuttycom left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Flushing comments from ZIP editing.

@nuttycom nuttycom force-pushed the draft/extensible_tx_format branch 3 times, most recently from b26bc92 to c7a649b Compare January 26, 2026 17:32
@nuttycom nuttycom linked an issue Jan 29, 2026 that may be closed by this pull request
@nuttycom nuttycom force-pushed the draft/extensible_tx_format branch from 2d2dffa to 29eb5b5 Compare January 31, 2026 02:47
@daira daira changed the title [ZIP TBD]: Define a forward-compatible, extensible transaction format. [ZIP 248]: Define a forward-compatible, extensible transaction format. Feb 4, 2026
@nuttycom nuttycom force-pushed the draft/extensible_tx_format branch 5 times, most recently from a0020fe to 986b087 Compare February 6, 2026 03:57
@nuttycom nuttycom marked this pull request as ready for review February 10, 2026 21:38
nuttycom and others added 16 commits March 24, 2026 14:43
… and Orchard.

Specifies the effecting and authorizing data structures for each bundle type,
with value balance moved to mValuePoolDeltas as per the extensible tx format design.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ment.

Specifies the V6 transaction digest algorithms:
- TxId digest with separate value_pool_deltas_digest and dynamic effects_bundles_digest
- Signature digest for transparent input signing with hash_type support
- Authorizing data commitment for witness data

Key design decisions:
- Value balances committed via top-level value_pool_deltas_digest (not per-bundle)
- effects_bundles_digest uses tagged concatenation (bundle_type_id || root_hash)
- Unknown bundle types supported by accepting their root hash externally

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…tion process.

Restructure the specification to begin with a comprehensive introduction to
protocol bundles, explaining effecting data, authorizing data, and the
transparent transaction value pool concepts. Define the bundle type
registration process that ZIPs must follow when introducing new bundle types.
Move the bundle type registry to appear before the transaction format
specification for better readability.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update PR URL to 1156 and fix email addresses
- Use conformance language (MAY/MUST NOT) for registry column descriptions
- Add constraint that map keys must be in increasing order
- Change "ordered by" to "in increasing order of" throughout
- Fix "transparent transaction value pool" terminology
- Change AssetUuid subscript notation to function notation
- Add registry update mechanism language
- Add "Defining ZIP" column to bundle type registry table
- Rephrase consensus rules section to clarify modifications to protocol spec
- Add clarifying text for fee bundle semantics (coinbase collects, others pay)
- Add mutual exclusion consensus rule for Sapling/Orchard bundle variants

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Register bundle type 4 (Transaction fee) in the V6 bundle registry
- Update consensus rules to use mValuePoolDeltas terminology
- Replace header_digest modification with value_pool_deltas_digest reference
- Add reference to extensible transaction format ZIP

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Register bundle type 5 (NSM field) in the V6 bundle registry
- Update consensus rules to use mValuePoolDeltas terminology
- Replace header_digest modification with value_pool_deltas_digest reference
- Add reference to extensible transaction format ZIP

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Register Memos, Sapling-post-ZIP 231, and Orchard-post-ZIP 231 bundle types
- Update encoding section to clarify it describes effecting data
- Replace Transaction sighash section with Transaction Digest referencing ZIP XXX
- Specify BLAKE2b-256 personalization strings for memo digest computation
- Add reference to extensible transaction format ZIP
- Fix zip-0230-note-plaintexts reference

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Register ZSA Issuance bundle type in the V6 bundle registry
- Update digest section to reference effects_bundles_digest and auth_bundles_digest
- Add reference to extensible transaction format ZIP
- Remove unused ZIP 244 and ZIP 246 references

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Register OrchardZSA bundle type in the V6 bundle registry
- Update digest section to reference effects_bundles_digest and auth_bundles_digest
- Add reference to extensible transaction format ZIP
- Remove unused ZIP 244 and ZIP 246 references

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…uples.

This makes the mutual exclusivity of bundle variants (e.g. Orchard vs
OrchardZSA) implicit in the map structure, and allows clients that do
not recognize a specific bundleVersion to still identify which pool
is affected.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a section to ZIP 248 describing wallet requirements for handling
unknown bundle types and versions. Update ZIP 226 to reference ZIP 248
instead of ZIP 230 for transaction format and wallet implications.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@nuttycom nuttycom force-pushed the draft/extensible_tx_format branch from 2397384 to d345f8a Compare March 24, 2026 20:53
@nuttycom nuttycom force-pushed the draft/extensible_tx_format branch from d345f8a to bd6f621 Compare March 24, 2026 20:56
@nuttycom nuttycom self-assigned this Mar 24, 2026
@nuttycom nuttycom force-pushed the draft/extensible_tx_format branch from bd6f621 to e325e71 Compare March 24, 2026 21:02
@arya2 arya2 self-assigned this Apr 1, 2026
Comment on lines +372 to +373
* updates to the transaction structure [#zip-0248]_ and the
sighash digest computation [#zip-0248]_;
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* updates to the transaction structure [#zip-0248]_ and the
sighash digest computation [#zip-0248]_;
* updates to the transaction structure and the sighash digest computation
(both in [#zip-0248]_);

the Orchard shielded pool, because v5 transactions can only transact in the native
ZEC asset. For other consequences see ZIP 230.
* *All* wallets SHOULD be ready to receive funds in outputs of v6 transactions
as soon as ZSAs activate — in particular to support decrypting note
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
as soon as ZSAs activate — in particular to support decrypting note
as soon as v6 transactions are allowed (whether or not ZSAs activate
at the same time) — in particular to support decrypting note

|-------|----------------|-----------|----------------------------------------------------------------------------|
| 8 | `zip233Amount` | `uint64` | The value to be removed from circulation in this transaction, in zatoshis. |
When the `mValuePoolDeltas` map contains an entry with `bundleType = 5`, the
transaction removes funds from circulation. The entry's `value` field MUST BE
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
transaction removes funds from circulation. The entry's `value` field MUST BE
transaction removes funds from circulation. The entry's `value` field MUST be


ZIP: 248
Title: Extensible Transaction Format
Owners: Jack Grigg <jack@znewco.com>
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Owners: Jack Grigg <jack@znewco.com>
Owners: Jack Grigg <thestr4d@gmail.com>

Comment on lines +19 to +20
{Edit this to reflect the key words that are actually used.}
The key words "MUST", "REQUIRED", "MUST NOT", "SHOULD", and "MAY" in this
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
{Edit this to reflect the key words that are actually used.}
The key words "MUST", "REQUIRED", "MUST NOT", "SHOULD", and "MAY" in this
The key words "MUST", "MUST NOT", "SHOULD", and "MAY" in this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-transaction-v6 Feature: v6 transactions NU7 proposal S-waiting-on-review Status: Awaiting review from the assignee but also interested parties.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ZIP 248]: Define a forward-compatible transaction format.

4 participants