Function zebra_state::service::check::nullifier::no_duplicates_in_finalized_chain
source · pub(crate) fn no_duplicates_in_finalized_chain(
semantically_verified: &SemanticallyVerifiedBlock,
finalized_state: &ZebraDb,
) -> Result<(), ValidateContextError>
Expand description
Reject double-spends of nullifers:
- one from this
SemanticallyVerifiedBlock
, and the other already committed to theFinalizedState
.
(Duplicate non-finalized nullifiers are rejected during the chain update,
see add_to_non_finalized_chain_unique
for details.)
§Consensus
A nullifier MUST NOT repeat either within a transaction, or across transactions in a valid blockchain. Sprout and Sapling and Orchard nullifiers are considered disjoint, even if they have the same bit pattern.