Documentation
¶
Index ¶
- Constants
- Variables
- func DeserializeTxProof(data []byte) (*proof.TxProof, error)
- func JoinRoundAuthMessage(req *JoinRoundRequest) ([]byte, error)
- func MaxAncestryTreeDepth(ancestry []Ancestry) int
- func SerializeTxProof(p *proof.TxProof) ([]byte, error)
- type Ancestry
- type BatchOutputInfo
- type BoardingInputSignature
- type BoardingRequest
- type ClientBatchInfo
- type ConnectorLeafInfo
- type ForfeitParticipantSig
- type ForfeitRequest
- type ForfeitTxSig
- type JoinRoundAuth
- type JoinRoundRequest
- type LeaveRequest
- type OORPackageDirection
- type OORPackageLinkKind
- type OperatorTerms
- type VTXOOrigin
- type VTXORequest
- func (r *VTXORequest) DecodePolicyTemplate() (*arkscript.PolicyTemplate, error)
- func (r *VTXORequest) DecodeStandardPolicyTemplate() (*arkscript.StandardVTXOParams, error)
- func (r *VTXORequest) EffectivePkScript() ([]byte, error)
- func (r *VTXORequest) EffectivePolicyTemplate() ([]byte, error)
- func (r *VTXORequest) HasLocalOwner() bool
Constants ¶
const ( // VTXOOwnerKeyFamily is the key family used for long-lived VTXO owner // keys. Owner keys are committed into the VTXO policy and must remain // stable across refreshes. VTXOOwnerKeyFamily keychain.KeyFamily = 44 // VTXOSigningKeyFamily is the key family used for per-round VTXO // MuSig2 signing keys. It is intentionally distinct from LND's // internal multisig family and from the server operator family so a // client sharing an LND signer with the server cannot derive the // operator key as its first VTXO signing key. VTXOSigningKeyFamily keychain.KeyFamily = 45 )
Variables ¶
var ( // ErrOORBindingOutpointNotFound indicates that a binding references an // outpoint that is not present in the local VTXO store. ErrOORBindingOutpointNotFound = errors.New("oor binding outpoint not " + "found in local vtxo store") // ErrOORPackageDirectionConflict indicates that a session package was // already persisted with a different wallet-relative direction. ErrOORPackageDirectionConflict = errors.New("oor package direction " + "conflict") )
Functions ¶
func DeserializeTxProof ¶
DeserializeTxProof deserializes a proof.TxProof from TLV-encoded bytes.
func JoinRoundAuthMessage ¶
func JoinRoundAuthMessage(req *JoinRoundRequest) ([]byte, error)
JoinRoundAuthMessage serializes a JoinRoundRequest into deterministic, versioned TLV bytes for BIP-322 signing and verification.
The resulting bytes are the message that the client signs with BIP-322 to prove authorization of the join request contents.
Top-level envelope (TLV stream):
+-------+-------------------------------------------+
| type | field |
+-------+-------------------------------------------+
| 1 | version (uint64, currently 3) |
| 2 | domain ("wavelength-join-round-auth") |
| 3 | identifier (33-byte compressed pubkey) |
| 4 | boarding (blob list) |
| 5 | vtxos (blob list) |
| 6 | forfeits (blob list) |
| 7 | leaves (blob list) |
+-------+-------------------------------------------+
Each blob list is encoded as:
varint(count) || for each entry: varint(len) || entry_bytes
Boarding entry TLV:
1: outpoint hash | 2: outpoint index 3: client key | 4: operator key | 5: exit delay
VTXO entry TLV:
1: amount | 2: pkScript | 3: expiry 4: client key | 5: operator key | 6: signing key
Forfeit entry TLV:
1: outpoint hash | 2: outpoint index 3: auth spend | 4: forfeit spend
Leave entry TLV:
1: value | 2: pkScript
func MaxAncestryTreeDepth ¶
MaxAncestryTreeDepth returns the largest TreeDepth across the given ancestry slice. Returns 0 for an empty slice. Drives expiry timing decisions for callers that need worst-case unilateral-exit timing.
Types ¶
type Ancestry ¶
type Ancestry struct {
// TreePath is the extracted commitment-tree path from the batch root
// down to the input VTXO leaf served by this fragment.
TreePath *tree.Tree
// CommitmentTxID is the txid of the commitment tx anchoring this
// fragment. Multiple entries within one Descriptor may share a
// commitment txid (different leaves of the same commitment tree),
// but no two entries may carry the same (CommitmentTxID, TreePath)
// pair.
CommitmentTxID chainhash.Hash
// InputIndices lists the Ark tx input indices (within the OOR Ark tx
// that produced the VTXO) that this fragment serves. Empty for
// round-direct VTXOs (which are not produced by an OOR Ark tx).
InputIndices []uint32
// TreeDepth is the depth of the served leaf within this fragment's
// tree. Worst-case unilateral-exit timing for the produced VTXO is
// max(TreeDepth) across all entries.
TreeDepth uint32
// CommitmentHeight is the on-chain confirmation height of the
// commitment tx anchoring this fragment. Zero means unknown (legacy
// persisted VTXOs, or an unconfirmed/not-yet-resolved commitment), in
// which case callers fall back to a bounded lookback floor rather than
// trusting this value.
CommitmentHeight int32
}
Ancestry describes one rooted commitment-tree fragment that contributes ancestry to a VTXO. A round-direct VTXO has exactly one entry; an OOR VTXO whose inputs descend from multiple commitment-tree paths has one entry per distinct (commitment tx, tree path) pair. Several entries may share a commitment txid: an OOR spend of two inputs that sit at different leaves of the same commitment tree carries one fragment per leaf, because each leaf needs its own root-to-leaf path for unilateral exit. The operator's indexer groups fragments the same way (one AncestryPath per batch-tree path within a commitment).
Per-entry tree fragments are minimal extracted paths (root → leaf), not whole batch trees, so size scales with depth, not fan-out. The unroller must broadcast every fragment's transactions on-chain before the OOR chain can be claimed.
This type lives in lib/types so that both round.ClientVTXO and vtxo.Descriptor can carry the same multi-fragment ancestry without an import cycle (vtxo already imports round).
type BatchOutputInfo ¶
type BatchOutputInfo struct {
// Idx is the index of this batch output in the batch transaction.
Idx int
// SignerKey is they key that the operator will use for the Musig2
// signing sessions for this batch output.
SignerKey *btcec.PublicKey
// Tree is the VTXO tree for this batch output. The tree embeds the
// per-round sweep key, sweep delay, and PrevOut.
Tree *tree.Tree
}
BatchOutputInfo contains the information about a batch output in the batch transaction. A batch transaction can have multiple batch outputs, each with its own VTXO tree.
type BoardingInputSignature ¶
type BoardingInputSignature struct {
// InputIndex is the index of the input in the transaction
InputIndex int
// Outpoint identifies which boarding input this signature is for
Outpoint wire.OutPoint
// ClientSignature is the client's schnorr signature
ClientSignature *schnorr.Signature
}
BoardingInputSignature represents the client's signature for a boarding input in the batch transaction.
type BoardingRequest ¶
type BoardingRequest struct {
// Outpoint represents the UTXO that will be used as input to the batch
// transaction.
Outpoint *wire.OutPoint
// PolicyTemplate is the semantic arkscript policy for the boarding
// output. This is the authoritative join-round representation.
PolicyTemplate []byte
// ClientKey is the public key used for the client in the boarding
// tapscripts.
ClientKey *btcec.PublicKey
// OperatorKey is the public key used for the operator in the boarding
// tapscript collaborative spend path.
OperatorKey *btcec.PublicKey
// ExitDelay is the CSV delay used in the unilateral timeout script
// path of the boarding output. This must be at least the operator's
// minimum boarding exit delay.
ExitDelay uint32
// TxProof is the SPV proof that the boarding UTXO exists in a
// confirmed block. This allows the server to verify the UTXO without
// querying its own chain source. The proof includes the transaction,
// block header, merkle proof, and the taproot output construction
// details (internal key and merkle root).
//
// None means "rely on the server's chain source." This is acceptable
// when the operator runs a full bitcoind / btcd. Under standalone
// (lwwallet) deployments the server has no chain source and rejects
// join requests carrying TxProof=None with "TxProof is required when
// server has no chain source". Clients SHOULD always populate this
// field when they can; the wallet's first-confirmation pipeline
// builds it inline (see wallet.processUtxo) and the
// maybeRebuildBoardingProof recovery path reconstructs it from the
// chain backend for any persisted intent that lacks one.
TxProof fn.Option[proof.TxProof]
}
BoardingRequest represents a request to board the Ark via a UTXO.
func (*BoardingRequest) DecodePolicyTemplate ¶
func (r *BoardingRequest) DecodePolicyTemplate() (*arkscript.PolicyTemplate, error)
DecodePolicyTemplate decodes the semantic boarding policy.
func (*BoardingRequest) DecodeStandardPolicyTemplate ¶
func (r *BoardingRequest) DecodeStandardPolicyTemplate() ( *arkscript.StandardVTXOParams, error)
DecodeStandardPolicyTemplate decodes the semantic boarding policy and extracts the standard Ark boarding parameters.
func (*BoardingRequest) EffectivePolicyTemplate ¶
func (r *BoardingRequest) EffectivePolicyTemplate() ([]byte, error)
EffectivePolicyTemplate returns the semantic boarding policy.
type ClientBatchInfo ¶
type ClientBatchInfo struct {
// Transaction is the batch transaction.
Transaction *wire.MsgTx
// BatchOutputs contains the batch output info for each batch output
// that is relevant to the client. The number of VTXO leaves should
// match the number of VTXO requests made by the client.
BatchOutputs []*BatchOutputInfo
// ConnectorLeafMap maps each forfeited VTXO outpoint to its assigned
// connector leaf information. This allows the client to determine which
// connector leaf corresponds to each of their forfeit requests.
ConnectorLeafMap map[wire.OutPoint]*ConnectorLeafInfo
}
ClientBatchInfo contains batch information specific to a client. It contains all the info the client needs in order to validate that their requests were included correctly in the batch transaction.
- any boarding request will have a corresponding boarding input in the batch transaction.
- any VTXO request will have a corresponding output in the batch transaction.
- any forfeit request will have a corresponding connector leaf.
- any leave request will have a corresponding output in the batch transaction.
type ConnectorLeafInfo ¶
type ConnectorLeafInfo struct {
// LeafOutpoint is the outpoint of the connector leaf that the forfeit
// transaction should spend. This is the actual outpoint from the leaf
// transaction in the connector tree.
LeafOutpoint wire.OutPoint
// LeafOutput is the transaction output for the connector leaf. This
// contains the value and pkScript needed to construct the forfeit
// transaction witness.
LeafOutput *wire.TxOut
// RootOutputIndex is the commitment-tx output index that this
// connector tree's root transaction spends. It lets the client bind
// the connector tree to the commitment tx it is about to sign into.
RootOutputIndex uint32
// NumLeaves is the total number of connector leaves in the tree this
// leaf belongs to. Connector trees have identical leaves, so this plus
// the radix and operator key fully determine the tree shape.
NumLeaves uint32
// Radix is the branching factor used to build the connector tree. It
// is not derivable from the commitment tx, so the operator must supply
// it for deterministic reconstruction.
Radix uint32
// LeafIndex is the position of this leaf within the connector tree's
// flattened leaf list. Zero is a valid index.
LeafIndex uint32
}
ConnectorLeafInfo contains information about a connector leaf assigned to a specific forfeit request.
type ForfeitParticipantSig ¶
type ForfeitParticipantSig struct {
// PubKey is the x-only key that produced Signature.
PubKey *btcec.PublicKey
// Signature authorizes the forfeit transaction under PubKey.
Signature *schnorr.Signature
}
ForfeitParticipantSig is one non-operator participant's tapscript signature for a forfeited VTXO input.
type ForfeitRequest ¶
type ForfeitRequest struct {
// VTXOOutpoint is the outpoint of the VTXO to forfeit.
VTXOOutpoint *wire.OutPoint
// Amount is the local value of the forfeited VTXO in satoshis. This
// is used by the client when validating a round before registration.
// It is not part of the join-round wire encoding, where the outpoint
// remains the source of truth.
Amount btcutil.Amount
// AuthSpend is the unilateral proof/auth spend path used for join-auth
// when settling a custom-script output into a round. Standard wallet
// VTXOs leave this nil and let the operator load the canonical
// path from the VTXO registry. Custom VTXOs serialize it onto the
// join-round wire so the operator can validate the caller-provided
// path.
AuthSpend *arkscript.SpendPath
// ForfeitSpend is the operator-backed spend path used locally
// to build the actual round forfeit transaction for a
// custom-script output. Standard wallet VTXOs leave this nil and
// let the operator derive the path from the registered VTXO
// descriptor. Custom
// VTXOs serialize it onto the join-round wire so the operator can build
// the exact connector-bound forfeit request later.
ForfeitSpend *arkscript.SpendPath
}
ForfeitRequest represents a request to forfeit a VTXO.
type ForfeitTxSig ¶
type ForfeitTxSig struct {
// UnsignedTx is the forfeit transaction without any witness data
UnsignedTx *wire.MsgTx
// ClientVTXOSig is the client's schnorr signature for the VTXO input
ClientVTXOSig *schnorr.Signature
// ParticipantVTXOSigs carries tapscript signatures from all
// non-operator participants that must authorize the selected
// spend path. Standard VTXO forfeits need only ClientVTXOSig;
// custom policies such as vHTLC refund-style paths may require
// multiple client-side signatures for one forfeited VTXO.
ParticipantVTXOSigs []*ForfeitParticipantSig
// SpendPath is the canonical arkscript spend path for the
// forfeited VTXO input. This makes the custom or standard
// tapscript leaf an explicit part of round messaging instead
// of implicit witness metadata.
SpendPath *arkscript.SpendPath
}
ForfeitTxSig represents an unsigned forfeit transaction with the client's VTXO signature.
type JoinRoundAuth ¶
type JoinRoundAuth struct {
// Message is the canonical join message signed by the client.
Message []byte
// ValidFrom is the first block height where this auth intent is
// accepted.
ValidFrom uint32
// ValidUntil is the last block height where this auth intent is
// accepted. A value of 0 means no upper bound.
ValidUntil uint32
// Signature is the serialized full-format BIP-322 signature
// payload.
Signature []byte
}
JoinRoundAuth contains the BIP-322 payload for a JoinRoundRequest.
Message stores the exact canonical bytes that were signed. Signature stores the full-format BIP-322 payload, which is the serialized to_sign transaction.
type JoinRoundRequest ¶
type JoinRoundRequest struct {
// Identifier is the participant's public key identifier associated with
// this request.
Identifier *btcec.PublicKey
// VTXOReqs specifies the new VTXOs the client wants to receive.
VTXOReqs []*VTXORequest
// BoardingReqs specifies the boarding UTXOs the client wants to use
// to board the Ark.
BoardingReqs []*BoardingRequest
// LeaveReqs specifies the requests to leave the Ark with on-chain
// UTXOs.
LeaveReqs []*LeaveRequest
// ForfeitReqs specifies the requests to forfeit VTXOs.
ForfeitReqs []*ForfeitRequest
// Auth contains the BIP-322 payload that authorizes this join
// request.
Auth *JoinRoundAuth
}
JoinRoundRequest represents a participant's request to join a round.
func DecodeJoinRoundAuthMessage ¶
func DecodeJoinRoundAuthMessage(raw []byte) (*JoinRoundRequest, error)
DecodeJoinRoundAuthMessage parses canonical join-auth message bytes back into a JoinRoundRequest while enforcing decode-time size limits.
type LeaveRequest ¶
type LeaveRequest struct {
// Output is the output that will be created to return funds to the
// client when leaving the Ark. Its Value is the client's target
// amount; server-filled when IsChange=true.
Output *wire.TxOut
// IsChange marks this LeaveRequest as the client's designated
// fee-bearing change output for the intent.
IsChange bool
}
LeaveRequest represents a request to leave the Ark with an on-chain UTXO.
Under the #270 seal-time fee handshake `Output.Value` is the client's target amount in satoshis. When `IsChange` is true the server overrides the value with the residual (`Σin − Σ(fixed outputs) − fee`) at seal time; exactly one output across the intent's VTXORequests + LeaveRequests list may have IsChange=true.
type OORPackageDirection ¶
type OORPackageDirection int32
OORPackageDirection encodes transfer direction from this wallet's perspective.
const ( // OORPackageDirectionIncoming marks a package received by this wallet. OORPackageDirectionIncoming OORPackageDirection = 0 // OORPackageDirectionOutgoing marks a package sent by this wallet. OORPackageDirectionOutgoing OORPackageDirection = 1 )
func (OORPackageDirection) String ¶
func (d OORPackageDirection) String() string
String returns the stable direction label used in logs/errors.
type OORPackageLinkKind ¶
type OORPackageLinkKind int32
OORPackageLinkKind encodes local outpoint relation to a package.
const ( // OORPackageLinkKindCreatedOutput marks bindings where local outpoints // are created by the package Ark transaction. OORPackageLinkKindCreatedOutput OORPackageLinkKind = 0 // OORPackageLinkKindConsumedInput marks bindings where local outpoints // are consumed as inputs by the package Ark transaction. OORPackageLinkKindConsumedInput OORPackageLinkKind = 1 )
func (OORPackageLinkKind) String ¶
func (k OORPackageLinkKind) String() string
String returns the stable link-kind label used in logs/errors.
type OperatorTerms ¶
type OperatorTerms struct {
// PubKey is the operator's main public key. This should be used for
// constructing boarding scripts.
PubKey *btcec.PublicKey
// BoardingExitDelay is the minimum CSV delay to use for boarding
// outputs that the operator expects.
BoardingExitDelay uint32
// VTXOExitDelay is the minimum CSV delay to use for VTXO outputs. This
// delay will give the server time to respond to unilateral spends of
// a VTXO that has been forfeit or spent.
VTXOExitDelay uint32
// DustLimit enforces minimum output value for boarding/funding flows.
DustLimit btcutil.Amount
// MinVTXOAmount is the operator-advertised minimum VTXO output
// amount.
MinVTXOAmount btcutil.Amount
// MinBoardingAmount is the minimum amount clients must contribute.
MinBoardingAmount btcutil.Amount
// MaxVTXOAmount caps the amount accepted per VTXO (optional). The
// operator applies the same cap to boarding requests, round outputs
// and OOR recipient outputs.
MaxVTXOAmount btcutil.Amount
// MaxUserBalance caps the total balance a single user should hold
// in the system (optional). The cap is enforced client-side on
// receive and boarding flows before funds enter the system. Zero
// means no cap.
MaxUserBalance btcutil.Amount
// FeeRate reflects the operator's target package feerate (sat/vByte).
FeeRate btcutil.Amount
// MinOperatorFee is the minimum fee (satoshis) the operator
// requires per join request. The fee is the difference between
// total input value and total output value.
MinOperatorFee btcutil.Amount
// FreeRefreshWindowBlocks is the number of blocks before batch expiry
// in which a pure refresh qualifies for a complete fee waiver. Zero
// disables the policy.
FreeRefreshWindowBlocks uint32
// MinConfirmations is the minimum confs required on boarding inputs.
MinConfirmations uint32
// MaxOORLineageVBytes is the operator-published cap on the
// cumulative on-chain virtual bytes a recipient must publish to
// claim a VTXO produced by an OOR submit unilaterally. Clients
// mirror this cap when selecting OOR inputs so a submit that the
// operator would reject is rejected pre-network. Zero means the
// operator does not enforce a cap (the client should fall back to
// its own conservative default before submitting).
MaxOORLineageVBytes uint32
}
OperatorTerms holds the information that the operator will share with clients. It communicates the server's terms to the client.
func (*OperatorTerms) MinVTXOAmountFloor ¶
func (t *OperatorTerms) MinVTXOAmountFloor() btcutil.Amount
MinVTXOAmountFloor returns the effective minimum for a VTXO output. The advertised VTXO minimum is authoritative when it is above dust, but dust remains the floor for older or misconfigured operator snapshots.
type VTXOOrigin ¶
type VTXOOrigin uint8
VTXOOrigin classifies how a locally-owned round VTXO came into existence. The classification is decided at wallet intent- composition time because only the wallet knows whether a VTXO is funded by a boarding input, a forfeited VTXO, or a remote participant's directed send. It is used downstream by the round actor to route a correctly-classified VTXOReceivedMsg to the ledger actor (boarding vs refresh vs participant transfer book to different ledger account pairs).
The field is local-only and is NOT serialized on the join-round wire; remote peers never see it.
const ( // VTXOOriginUnknown is the zero value. Used for requests // whose origin has not been set (e.g. remote recipient // outputs on a directed send where HasLocalOwner is false) // and as a defensive default. The round actor treats this // as "do not emit a ledger event" to avoid misclassifying. VTXOOriginUnknown VTXOOrigin = iota // VTXOOriginRoundBoarding means the VTXO is the on-round // output of a boarding input the client owns: funds moved // from wallet_balance into vtxo_balance. Emitted as // VTXOReceivedMsg{Source=SourceRoundBoarding}. VTXOOriginRoundBoarding // VTXOOriginRoundRefresh means the VTXO materialized as the // output side of a refresh or directed-send flow in which // the client also forfeited VTXOs of roughly equal value. // Emitted as VTXOReceivedMsg{Source=SourceRoundRefresh} // paired with a VTXOSentMsg for the gross forfeited amount; // the two legs cancel on transfers_out. Used both for // straight refreshes and for self-change on directed sends. VTXOOriginRoundRefresh // VTXOOriginRoundTransfer means the VTXO was produced in- // round by another participant's directed send to this // client. Emitted as // VTXOReceivedMsg{Source=SourceRoundTransfer}, crediting // transfers_in as a genuine counterparty revenue flow. VTXOOriginRoundTransfer )
func (VTXOOrigin) String ¶
func (o VTXOOrigin) String() string
String returns a short human-readable label for the origin, matching the underscore-separated ledger source strings so a log line can include the origin verbatim.
type VTXORequest ¶
type VTXORequest struct {
// Amount is the client's target amount in satoshis for this
// output. Server-filled on the responding JoinRoundQuote when
// IsChange=true.
Amount btcutil.Amount
// IsChange marks this request as the intent's designated
// fee-bearing change output.
IsChange bool
// FixedAmount requires the operator quote to preserve Amount exactly.
// It is used for contract outputs where shrinking the replacement
// output would invalidate the higher-level protocol. A fixed single
// output is not eligible for the implicit-change exception.
FixedAmount bool
// PolicyTemplate is the semantic arkscript policy for the requested
// output. This is the authoritative join-round representation.
PolicyTemplate []byte
// PkScript is the output script of the VTXO. This will have
// both a collaborative and unilateral spend path.
PkScript []byte
// Expiry is the CSV delay used in the unilateral timeout script path
// of the VTXO.
Expiry uint32
// ClientKey is the public key of the client used in the construction
// of the collaborative spend path of the VTXO.
ClientKey *btcec.PublicKey
// OwnerKey is the local key descriptor for the VTXO owner when this
// client controls the resulting output. This is local-only
// metadata and is not serialized onto the join-round wire.
OwnerKey keychain.KeyDescriptor
// OperatorKey is the public key of the operator used in the
// construction of the collaborative spend path of the VTXO.
OperatorKey *btcec.PublicKey
// SigningKey is the key descriptor that the client will use in the
// building of the VTXO tree during Musig2 signing sessions. We use
// keychain.KeyDescriptor instead of just *btcec.PublicKey because we
// need the key locator for signing operations.
SigningKey keychain.KeyDescriptor
// Origin classifies how a locally-owned VTXO came into
// existence (boarding, refresh, or participant transfer). It
// is set by the wallet at intent-composition time and flows
// through the FSM so the round actor can emit a correctly-
// typed VTXOReceivedMsg to the ledger actor. Local-only;
// never serialized over the wire.
Origin VTXOOrigin
}
VTXORequest describes a requested round output. The policy template is the authoritative join-round representation, while local owner metadata is kept only when this client controls the resulting VTXO.
Under the #270 seal-time fee handshake `Amount` carries the client's target amount and is honored verbatim except for the designated change output, whose amount the server computes as the residual (`Σin − Σ(fixed outputs) − fee`) at seal time. The per-intent invariant is exactly one output across VTXORequests + LeaveRequests with `IsChange=true`.
func (*VTXORequest) DecodePolicyTemplate ¶
func (r *VTXORequest) DecodePolicyTemplate() (*arkscript.PolicyTemplate, error)
DecodePolicyTemplate decodes the semantic VTXO policy.
func (*VTXORequest) DecodeStandardPolicyTemplate ¶
func (r *VTXORequest) DecodeStandardPolicyTemplate() ( *arkscript.StandardVTXOParams, error)
DecodeStandardPolicyTemplate decodes the semantic VTXO policy and extracts the standard Ark VTXO parameters when the request uses the default output shape.
func (*VTXORequest) EffectivePkScript ¶
func (r *VTXORequest) EffectivePkScript() ([]byte, error)
EffectivePkScript returns the requested output script derived from the semantic policy.
func (*VTXORequest) EffectivePolicyTemplate ¶
func (r *VTXORequest) EffectivePolicyTemplate() ([]byte, error)
EffectivePolicyTemplate returns the semantic VTXO policy.
func (*VTXORequest) HasLocalOwner ¶
func (r *VTXORequest) HasLocalOwner() bool
HasLocalOwner reports whether the request carries a local owner descriptor that should be preserved through confirmation and persistence. A nil owner pubkey, not a zero-valued key locator, is the sentinel for foreign outputs.