Skip to content

feat(dpp): shielded state transitions and Orchard bundle types (Medusa)#3177

Merged
QuantumExplorer merged 35 commits intov3.1-devfrom
feat/zk-dpp
Mar 6, 2026
Merged

feat(dpp): shielded state transitions and Orchard bundle types (Medusa)#3177
QuantumExplorer merged 35 commits intov3.1-devfrom
feat/zk-dpp

Conversation

@QuantumExplorer
Copy link
Member

Summary

Split from #3076 — this PR contains the DPP layer of the shielded credit pool (Medusa) feature:

  • 5 new state transition types: Shield (15), ShieldedTransfer (16), Unshield (17), ShieldFromAssetLock (18), ShieldedWithdrawal (19)
  • Orchard bundle integration: Halo 2 ZK proof types, Sinsemilla commitment tree structures, note encryption/decryption
  • Platform versioning: New version fields across rs-platform-version for shielded operations in Drive, Drive-ABCI, and DPP
  • Consensus errors: New error variants for shielded transaction validation failures
  • Platform sighash: Signing infrastructure for shielded state transitions
  • grovedb update: Aligned to rev 7ecb8465 which adds commitment tree support (sinsemilla_hash_calls, new TreeType variants, Option<KeyInfo>)

Dependent packages (rs-drive, rs-drive-abci, wasm-dpp, wasm-dpp2, rs-sdk-ffi) include todo!() stubs so the workspace compiles. These will be replaced with real implementations in subsequent split PRs.

Packages Changed

Package Scope
rs-dpp 103 files — full shielded ST types, Orchard bundles, consensus errors
rs-platform-version 47 files — version fields for shielded operations
rs-drive Compilation stubs + grovedb version bump
rs-drive-abci Compilation stubs for ST processor traits
wasm-dpp / wasm-dpp2 Compilation stubs for new ST variants
rs-sdk-ffi Compilation stub for new Element variants

Test plan

  • cargo check --workspace passes (verified locally)
  • cargo test -p dpp passes
  • CI green on Rust checks
  • Dependent PRs (Drive, Drive-ABCI) will add real implementations

🤖 Generated with Claude Code

QuantumExplorer and others added 2 commits March 4, 2026 17:28
Add the DPP layer for the shielded credit pool:

- Five new state transition types: Shield (15), ShieldedTransfer (16),
  Unshield (17), ShieldFromAssetLock (18), ShieldedWithdrawal (19)
- Orchard bundle builder (shielded/builder.rs) with platform sighash
- Bundle serialization (SerializedAction) and deserialization
- 12 new consensus errors (basic + state) for shielded validation
- PlatformAddress Orchard payment address support
- Platform version fields for shielded serialization and validation
- Workspace profile optimizations for ZK crypto crates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…dent packages

Adds compilation stubs across rs-drive, rs-drive-abci, wasm-dpp, wasm-dpp2,
and rs-sdk-ffi for the new shielded state transition variants (Shield,
ShieldedTransfer, Unshield, ShieldFromAssetLock, ShieldedWithdrawal) and
updated grovedb API (sinsemilla_hash_calls, Option<KeyInfo>, new TreeType
variants, GroveDBProof::V1). These will be replaced with real implementations
when each package is split out from feat/zk.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@QuantumExplorer QuantumExplorer requested a review from shumkov as a code owner March 4, 2026 10:52
@github-actions github-actions bot added this to the v3.1.0 milestone Mar 4, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 4, 2026

Important

Review skipped

Too many files!

This PR contains 193 files, which is 43 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9e306b7d-beb3-4ed0-8852-cbb64498ac4f

📥 Commits

Reviewing files that changed from the base of the PR and between 95b0d5c and 8633829.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (193)
  • Cargo.toml
  • packages/rs-dpp/Cargo.toml
  • packages/rs-dpp/src/address_funds/mod.rs
  • packages/rs-dpp/src/address_funds/orchard_address.rs
  • packages/rs-dpp/src/address_funds/platform_address.rs
  • packages/rs-dpp/src/asset_lock/mod.rs
  • packages/rs-dpp/src/asset_lock/reduced_asset_lock_value/mod.rs
  • packages/rs-dpp/src/asset_lock/reduced_asset_lock_value/v0/mod.rs
  • packages/rs-dpp/src/errors/consensus/basic/basic_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/mod.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_empty_proof_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_invalid_value_balance_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_no_actions_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_too_many_actions_error.rs
  • packages/rs-dpp/src/errors/consensus/basic/state_transition/shielded_zero_anchor_error.rs
  • packages/rs-dpp/src/errors/consensus/codes.rs
  • packages/rs-dpp/src/errors/consensus/state/mod.rs
  • packages/rs-dpp/src/errors/consensus/state/shielded/insufficient_pool_notes_error.rs
  • packages/rs-dpp/src/errors/consensus/state/shielded/insufficient_shielded_fee_error.rs
  • packages/rs-dpp/src/errors/consensus/state/shielded/invalid_anchor_error.rs
  • packages/rs-dpp/src/errors/consensus/state/shielded/invalid_shielded_proof_error.rs
  • packages/rs-dpp/src/errors/consensus/state/shielded/mod.rs
  • packages/rs-dpp/src/errors/consensus/state/shielded/nullifier_already_spent_error.rs
  • packages/rs-dpp/src/errors/consensus/state/state_error.rs
  • packages/rs-dpp/src/lib.rs
  • packages/rs-dpp/src/serialization/mod.rs
  • packages/rs-dpp/src/serialization/serde_bytes_64.rs
  • packages/rs-dpp/src/shielded/builder/mod.rs
  • packages/rs-dpp/src/shielded/builder/shield.rs
  • packages/rs-dpp/src/shielded/builder/shield_from_asset_lock.rs
  • packages/rs-dpp/src/shielded/builder/shielded_transfer.rs
  • packages/rs-dpp/src/shielded/builder/shielded_withdrawal.rs
  • packages/rs-dpp/src/shielded/builder/unshield.rs
  • packages/rs-dpp/src/shielded/mod.rs
  • packages/rs-dpp/src/state_transition/mod.rs
  • packages/rs-dpp/src/state_transition/proof_result.rs
  • packages/rs-dpp/src/state_transition/state_transition_types.rs
  • packages/rs-dpp/src/state_transition/state_transitions/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/common_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/fields.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/methods/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/methods/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/proved.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/state_transition_estimated_fee_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/state_transition_like.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/state_transition_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/v0/proved.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/v0/state_transition_like.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/v0/state_transition_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/v0/types.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/v0/v0_methods.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/v0/version.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_from_asset_lock_transition/version.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/methods/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/methods/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/state_transition_estimated_fee_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/state_transition_like.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/state_transition_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/v0/state_transition_like.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/v0/state_transition_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/v0/types.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/v0/v0_methods.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/v0/version.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shield_transition/version.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/accessors/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/accessors/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/methods/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/methods/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/state_transition_estimated_fee_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/state_transition_like.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/state_transition_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/v0/state_transition_like.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/v0/state_transition_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/v0/types.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/v0/v0_methods.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/v0/version.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_transfer_transition/version.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/accessors/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/accessors/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/methods/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/methods/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/state_transition_estimated_fee_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/state_transition_like.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/state_transition_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/v0/state_transition_like.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/v0/state_transition_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/v0/types.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/v0/v0_methods.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/v0/version.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/shielded_withdrawal_transition/version.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/accessors/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/accessors/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/methods/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/methods/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/state_transition_estimated_fee_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/state_transition_like.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/state_transition_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/v0/mod.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/v0/state_transition_like.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/v0/state_transition_validation.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/v0/types.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/v0/v0_methods.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/v0/version.rs
  • packages/rs-dpp/src/state_transition/state_transitions/shielded/unshield_transition/version.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/processor/traits/address_balances_and_nonces.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/processor/traits/address_witnesses.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/processor/traits/addresses_minimum_balance.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/processor/traits/basic_structure.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/processor/traits/identity_balance.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/processor/traits/identity_based_signature.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/processor/traits/identity_nonces.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/processor/traits/is_allowed.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/processor/traits/state.rs
  • packages/rs-drive-abci/src/execution/validation/state_transition/transformer/mod.rs
  • packages/rs-drive/Cargo.toml
  • packages/rs-drive/src/drive/credit_pools/mod.rs
  • packages/rs-drive/src/drive/credit_pools/pending_epoch_refunds/methods/add_delete_pending_epoch_refunds_except_specified/v0/mod.rs
  • packages/rs-drive/src/drive/identity/contract_info/keys/add_potential_contract_info_for_contract_bounded_key/v0/mod.rs
  • packages/rs-drive/src/drive/identity/contract_info/keys/refresh_potential_contract_info_key_references/v0/mod.rs
  • packages/rs-drive/src/drive/initialization/mod.rs
  • packages/rs-drive/src/drive/initialization/v3/mod.rs
  • packages/rs-drive/src/fees/op.rs
  • packages/rs-drive/src/prove/prove_state_transition/v0/mod.rs
  • packages/rs-drive/src/query/mod.rs
  • packages/rs-drive/src/util/batch/grovedb_op_batch/mod.rs
  • packages/rs-drive/src/util/grove_operations/batch_insert_empty_tree_if_not_exists/v0/mod.rs
  • packages/rs-drive/src/util/grove_operations/grove_insert_empty_tree/v0/mod.rs
  • packages/rs-drive/src/util/operations/apply_partial_batch_grovedb_operations/v0/mod.rs
  • packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v0/mod.rs
  • packages/rs-drive/src/verify/state_transition/verify_state_transition_was_executed_with_proof/v0/mod.rs
  • packages/rs-platform-version/Cargo.toml
  • packages/rs-platform-version/src/version/dpp_versions/dpp_state_transition_serialization_versions/mod.rs
  • packages/rs-platform-version/src/version/dpp_versions/dpp_state_transition_serialization_versions/v1.rs
  • packages/rs-platform-version/src/version/dpp_versions/dpp_state_transition_serialization_versions/v2.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_method_versions/mod.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_method_versions/v1.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_method_versions/v2.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_method_versions/v3.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_method_versions/v4.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_method_versions/v5.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_method_versions/v6.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_method_versions/v7.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_query_versions/mod.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_query_versions/v1.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_validation_versions/mod.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_validation_versions/v1.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_validation_versions/v2.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_validation_versions/v3.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_validation_versions/v4.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_validation_versions/v5.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_validation_versions/v6.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_validation_versions/v7.rs
  • packages/rs-platform-version/src/version/drive_abci_versions/drive_abci_validation_versions/v8.rs
  • packages/rs-platform-version/src/version/drive_versions/drive_group_method_versions/mod.rs
  • packages/rs-platform-version/src/version/drive_versions/drive_grove_method_versions/mod.rs
  • packages/rs-platform-version/src/version/drive_versions/drive_grove_method_versions/v1.rs
  • packages/rs-platform-version/src/version/drive_versions/drive_state_transition_method_versions/mod.rs
  • packages/rs-platform-version/src/version/drive_versions/drive_state_transition_method_versions/v1.rs
  • packages/rs-platform-version/src/version/drive_versions/drive_state_transition_method_versions/v2.rs
  • packages/rs-platform-version/src/version/drive_versions/drive_verify_method_versions/mod.rs
  • packages/rs-platform-version/src/version/drive_versions/drive_verify_method_versions/v1.rs
  • packages/rs-platform-version/src/version/drive_versions/mod.rs
  • packages/rs-platform-version/src/version/drive_versions/v1.rs
  • packages/rs-platform-version/src/version/drive_versions/v2.rs
  • packages/rs-platform-version/src/version/drive_versions/v3.rs
  • packages/rs-platform-version/src/version/drive_versions/v4.rs
  • packages/rs-platform-version/src/version/drive_versions/v5.rs
  • packages/rs-platform-version/src/version/drive_versions/v6.rs
  • packages/rs-platform-version/src/version/drive_versions/v7.rs
  • packages/rs-platform-version/src/version/feature_initial_protocol_versions.rs
  • packages/rs-platform-version/src/version/fee/hashing/mod.rs
  • packages/rs-platform-version/src/version/fee/hashing/v1.rs
  • packages/rs-platform-version/src/version/mocks/v2_test.rs
  • packages/rs-platform-version/src/version/mocks/v3_test.rs
  • packages/rs-platform-version/src/version/system_limits/mod.rs
  • packages/rs-platform-version/src/version/system_limits/v1.rs
  • packages/rs-platform-version/src/version/v12.rs
  • packages/rs-sdk-ffi/src/system/queries/path_elements.rs
  • packages/wasm-dpp/src/errors/consensus/consensus_error.rs
  • packages/wasm-dpp/src/identity/state_transition/transition_types.rs
  • packages/wasm-dpp/src/state_transition/state_transition_factory.rs
  • packages/wasm-dpp2/src/state_transitions/base/state_transition.rs
  • packages/wasm-dpp2/src/state_transitions/proof_result.rs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/zk-dpp

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Contributor

github-actions bot commented Mar 4, 2026

✅ DashSDKFFI.xcframework built for this PR.

SwiftPM (host the zip at a stable URL, then use):

.binaryTarget(
  name: "DashSDKFFI",
  url: "https://your.cdn.example/DashSDKFFI.xcframework.zip",
  checksum: "467d4c9448d761195008f957e317cee65e7a7f53d75eaeeb1edf9c471aff09e8"
)

Xcode manual integration:

  • Download 'DashSDKFFI.xcframework' artifact from the run link above.
  • Drag it into your app target (Frameworks, Libraries & Embedded Content) and set Embed & Sign.
  • If using the Swift wrapper package, point its binaryTarget to the xcframework location or add the package and place the xcframework at the expected path.

Copy link
Member Author

@QuantumExplorer QuantumExplorer left a comment

Choose a reason for hiding this comment

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

Need some changes so far

QuantumExplorer and others added 3 commits March 4, 2026 19:13
- OrchardAddress: wrap PaymentAddress directly instead of raw bytes
- serialize_authorized_bundle: return SerializedBundle struct instead of tuple
- Add From<&OrchardAddress> for PaymentAddress (infallible since wrapper)
- Fix version comments in v7.rs (add reason for create_initial_state_structure,
  remove stale //changed comments)
- Add comment explaining drive change in v12.rs
- List new Element variants in rs-sdk-ffi path_elements.rs (CommitmentTree,
  MmrTree, BulkAppendTree, DenseAppendOnlyFixedSizeTree)
- Add shielded consensus errors properly in wasm-dpp:
  - State: InvalidAnchor, NullifierAlreadySpent, InvalidShieldedProof,
    InsufficientPoolNotes, InsufficientShieldedFee
  - Basic: ShieldedNoActions, ShieldedTooManyActions, ShieldedEmptyProof,
    ShieldedZeroAnchor, ShieldedInvalidValueBalance, UnshieldAmountZero,
    UnshieldValueBalanceBelowAmount

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…c Merkle root

The anchor in shielded state transitions is specifically the Sinsemilla root
of the depth-32 Orchard note commitment tree (over cmx values), not the
GroveDB commitment tree state root which also includes the BulkAppendTree.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy link
Member Author

@QuantumExplorer QuantumExplorer left a comment

Choose a reason for hiding this comment

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

Needs more fixes

QuantumExplorer and others added 15 commits March 4, 2026 23:36
…nature property paths

- Improve flags field documentation on all 5 shielded transitions to
  explain the Orchard bundle bit layout (bit 0 = spends_enabled, bit 1 =
  outputs_enabled) with per-transition usage context.

- Change ShieldFromAssetLockTransitionV0.value_balance from i64 to u64
  since value can only flow one direction (into the pool). Adds
  validation that value_balance > 0 and <= i64::MAX. Updates builder to
  negate the Orchard bundle's negative i64 value_balance.

- Add signature_property_paths and binary_property_paths returning
  SIGNATURE for ShieldFromAssetLockTransition (both v0 and enum wrapper)
  with a new fields.rs module. This transition is the only shielded
  transition with an ECDSA signature field.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The Orchard bundle flags are deterministic per transition type:
- Shield/ShieldFromAssetLock: always 0x02 (outputs_enabled only)
- Transfer/Unshield/Withdrawal: always 0x03 (both enabled)

No need to store or pass them through. The flags are still extracted
from the bundle in SerializedBundle for internal use but are no longer
part of the on-chain state transition representation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Allow too_many_arguments on 6 builder functions
- Replace clone-to-slice with std::slice::from_ref for SpendAuthorizingKey
- Fix doc_lazy_continuation in SerializedAction docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Shorter, clearer name for the feature gate that enables OrchardAddress,
the shielded transaction builder, and grovedb-commitment-tree dependency.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Flags are deterministic per transition type, same as the transition
structs themselves.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…Lock

The fee is implicitly the difference between the asset lock value and
value_balance, so no separate fee multiplier is needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ransitions

Remove StateTransitionHasUserFeeIncrease from shielded transitions
that don't support fee adjustment (ShieldedTransfer, Unshield,
ShieldedWithdrawal, ShieldFromAssetLock) and move it to the new
trait for Shield transition.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Split the monolithic builder/mod.rs (639 lines) into individual files
per builder function, keeping shared types and internal helpers in mod.rs.
Added 9 tests covering error paths and happy paths for all 5 builders.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…o amount, add fee cap

- Introduce OrchardProver trait abstracting over Halo 2 proving key access,
  following the same pattern as Signer
- Change ShieldTransitionV0.value_balance (i64) to amount (u64) since shield
  can only flow credits into the pool
- Add 1000x minimum fee cap check in shielded transfer builder
- Use letter generics <P: OrchardProver> across all builder functions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix import ordering in shield.rs tests (dpp formatting)
- Handle Option<KeyInfo> in credit_pools test assertions (drive)
- Add create_initial_state_structure v3 stub delegating to v2 (drive-abci)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…etLock

The asset lock can only be consumed once, making it the natural
deduplication key — consistent with IdentityTopUp.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ldedWithdrawal

The `amount` is fully derivable from `value_balance - fee` where fee is
deterministic. Removing it simplifies the structs, eliminates redundant
validation checks, and reduces the sighash extra_data to just the output
address/script. The amount is already cryptographically bound through
value_balance in the bundle commitment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…shield and ShieldedWithdrawal

Rename `value_balance: i64` to `unshielding_amount: u64` since these
transitions always have positive outflow. Simplifies validation (== 0
instead of <= 0) and makes the type match semantics. Also adds TODO
comments on `calculate_min_required_fee` returning 0 for shielded types,
and replaces todo!() panics in path_elements display with simple strings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
QuantumExplorer and others added 2 commits March 5, 2026 17:48
- Remove user_fee_increase field (fee is implicit from asset lock value)
- Add proof to binary_property_paths alongside signature

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Orchard value balances are signed i64, so amounts must not exceed
i64::MAX when represented as u64.

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

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy link
Member Author

@QuantumExplorer QuantumExplorer left a comment

Choose a reason for hiding this comment

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

Reviewed

QuantumExplorer and others added 2 commits March 5, 2026 18:01
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
QuantumExplorer and others added 2 commits March 5, 2026 19:36
The upstream grovedb Display impl now includes `0x` prefixes on hex
bytes and prints the `add_parent_tree_on_subquery` field.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…t OrchardAddress

- Move serde_bytes_64 from shielded/mod.rs to serialization/serde_bytes_64.rs
  with hex encoding for human-readable formats (JSON)
- Extract OrchardAddress into its own address_funds/orchard_address.rs module,
  gated once with #[cfg(feature = "shielded-tx")] at the module level

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@codecov
Copy link

codecov bot commented Mar 5, 2026

Welcome to Codecov 🎉

Once you merge this PR into your default branch, you're all set! Codecov will compare coverage reports and display results in all future pull requests.

Thanks for integrating Codecov - We've got you covered ☂️

…helpers

Change `validate_actions_count`, `validate_proof_not_empty`, and
`validate_anchor_not_zero` to return `SimpleConsensusValidationResult`
directly instead of `Option<SimpleConsensusValidationResult>`. Update
all 5 call sites to use `if !result.is_valid()` pattern.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
QuantumExplorer and others added 5 commits March 6, 2026 13:23
…ove serde(skip)

Add serde derives to StoredAssetLockInfo, AssetLockValue, and
AssetLockValueV0 so the VerifiedAssetLockConsumed variant no longer
needs to be skipped during serialization.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@ktechmidas ktechmidas self-requested a review March 6, 2026 07:59
Copy link
Collaborator

@ktechmidas ktechmidas left a comment

Choose a reason for hiding this comment

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

N/A

@QuantumExplorer QuantumExplorer merged commit b33f8ec into v3.1-dev Mar 6, 2026
100 of 102 checks passed
@QuantumExplorer QuantumExplorer deleted the feat/zk-dpp branch March 6, 2026 08:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants