Expand description
Tier 2 execution validation (EXE-*): CLVM execution, condition parsing, signatures, conservation.
§Requirements trace
- EXE-001 —
validate_execution()API acceptingValidationConfig+genesis_challenge. - EXE-002 — puzzle hash verification via
clvm-utils::tree_hash(). - EXE-003 — CLVM execution via
dig_clvm::validate_spend_bundle()(not rawchia-consensus). - EXE-004 — two-pass condition validation: collect (Pass 1) then assert (Pass 2). Height/time/ephemeral assertions deferred to Tier 3.
- EXE-005 — BLS aggregate signature verification (inside
dig-clvm, not separate). - EXE-006 — coin conservation per-bundle (dig-clvm) + block-level fee consistency.
- EXE-007 — cost consistency:
sum(SpendResult.conditions.cost) == header.total_cost. - EXE-008 —
ExecutionResultoutput struct carrying additions, removals, assertions, cost, fees, receipts. - EXE-009 —
PendingAssertiontype:AssertionKindenum (8 height/time variants) +from_condition()factory. - SER-001 —
Serialize/DeserializeonExecutionResult,AssertionKind,PendingAssertionfor bincode. - NORMATIVE — full execution validation domain.
- SPEC §7.4 — Tier 2 execution validation pipeline.
§Pipeline (per SpendBundle, in block order)
for each SpendBundle in block.spend_bundles:
1. For each CoinSpend: tree_hash(puzzle_reveal) == coin.puzzle_hash [EXE-002]
2. dig_clvm::validate_spend_bundle(bundle, config, genesis_challenge) [EXE-003]
├── CLVM execution (clvmr)
├── condition parsing (chia-sdk-types::Condition) [EXE-004]
├── BLS aggregate signature verification (chia-bls::aggregate_verify) [EXE-005]
└── per-bundle conservation check (total_input >= total_output) [EXE-006]
3. Accumulate SpendResult: additions, removals, conditions, cost, fee
4. Collect height/time/ephemeral assertions → PendingAssertion [EXE-004/009]
after all bundles:
5. Check computed_total_fees == header.total_fees [EXE-006]
6. Check computed_total_cost == header.total_cost [EXE-007]
7. Build ExecutionResult [EXE-008]§Chia parity
- Puzzle hash:
block_body_validation.pyCheck 20 (WRONG_PUZZLE_HASH). - Signatures:
block_body_validation.pyCheck 22 (BAD_AGGREGATE_SIGNATURE). - Conservation:
block_body_validation.pyCheck 16 (MINTING_COIN). - Fee consistency:
block_body_validation.pyCheck 19 (INVALID_BLOCK_FEE_AMOUNT). - Cost consistency:
block_body_validation.pyCheck 9 (INVALID_BLOCK_COST).
§Status
Stub — ExecutionResult placeholder defined; full pipeline implementation in EXE-001 through EXE-009.
§Serialization (SER-001)
ExecutionResult, AssertionKind, and PendingAssertion derive serde::Serialize / Deserialize so
Tier-2 outputs and deferred assertions use the same bincode wire discipline as block types (SPEC §8.1).
Structs§
- Execution
Result - Validated output from Tier 2 execution, bridging to Tier 3 state validation (EXE-008, SPEC §7.4.7).
- Pending
Assertion - Deferred height/time assertion collected in Tier 2 and evaluated in Tier 3 (EXE-009).
Enums§
- Assertion
Kind - Height / time assertion opcode mirrored as a stable, bincode-friendly enum (EXE-009).
Functions§
- collect_
pending_ assertions_ from_ conditions - Collect the height / time / before-height / before-time assertions carried by a
chia_consensus::owned_conditions::OwnedSpendBundleConditionsinto a flatVec<PendingAssertion>for Tier-3 evaluation (EXE-004, SPEC §7.4.4). - compute_
state_ root_ from_ delta - Compute the
crate::EMPTY_ROOT-anchored state-delta root for a block’s additions + removals (STV-007, SPEC §7.5.6). - map_
clvm_ validation_ error - Map a
dig_clvm::ValidationErrorto the appropriatecrate::BlockErrorvariant (EXE-003, SPEC §7.4.3). - verify_
coin_ spend_ puzzle_ hash - Verify that
tree_hash(coin_spend.puzzle_reveal) == coin_spend.coin.puzzle_hash(EXE-002, SPEC §7.4.2).