ContractVtxo carries TapLeaves and EncodedVtxoScript as
Partial<> because VTXOs fetched raw from the indexer do not yet have
taproot data.
ExtendedContractVtxo narrows those fields to required, guaranteeing
that annotateVtxos has run and the taproot leaves are present.
Use this type (instead of ContractVtxo) wherever the compiler
should enforce that annotation has happened — e.g. saveVtxos and
forfeit transaction construction.
A ContractVtxo with all taproot annotation fields required.
Mirrors the ExtendedVirtualCoin / VirtualCoin split:
TapLeavesandEncodedVtxoScriptasPartial<>because VTXOs fetched raw from the indexer do not yet have taproot data.ExtendedContractVtxonarrows those fields to required, guaranteeing thatannotateVtxoshas run and the taproot leaves are present.Use this type (instead of ContractVtxo) wherever the compiler should enforce that annotation has happened — e.g.
saveVtxosand forfeit transaction construction.