Table of Contents

Class VHTLCv2NonInteractiveRefund

Namespace
NArk.Arkade.Contracts
Assembly
NArk.Arkade.dll

The optional nonInteractiveRefund leaf: server + receiver + a covenant-tweaked emulator co-signer, pinned to SenderPkScript, no timelock.

public sealed record VHTLCv2NonInteractiveRefund : IEquatable<VHTLCv2NonInteractiveRefund>
Inheritance
VHTLCv2NonInteractiveRefund
Implements
Inherited Members

Remarks

Every OTHER refund-side leaf requires the sender's own signature, so if the sender permanently loses that key none of them are reachable. This leaf is the exception: it needs neither the sender's presence nor their key, and the covenant is what still guarantees the payout can only reach the sender's pre-committed address. It does need the receiver — deliberately, because that is what lets server and receiver release the refund the moment they agree the swap failed, rather than making the sender wait out the locktime.

WithoutReceiver adds the one refund tier that needs NO participant signature at all: the server plus this same covenant co-signer, after RefundLocktime. refund and refundWithoutReceiver need the sender's key, nonInteractiveRefund needs the receiver's; a sender who funds a lockup and then vanishes is refundable through this leaf alone, by anyone, and still only to their pre-committed address.

It is opt-in because it APPENDS A NINTH LEAF and so moves the address. The two shapes are different contracts, not variants of one: a lockup already funded in the eight-leaf shape keeps it permanently, since a leaf cannot be retrofitted onto an address already committed to. Both leaves pin the same destination and so share one covenant key, which is why they are one record rather than two — deriving the key twice would make that agreement a coincidence.

Constructors

VHTLCv2NonInteractiveRefund(byte[], ECXOnlyPubKey, bool)

The optional nonInteractiveRefund leaf: server + receiver + a covenant-tweaked emulator co-signer, pinned to SenderPkScript, no timelock.

public VHTLCv2NonInteractiveRefund(byte[] SenderPkScript, ECXOnlyPubKey EmulatorPubKey, bool WithoutReceiver = false)

Parameters

SenderPkScript byte[]

Where the refund must pay — the sender's P2TR scriptPubKey (34 bytes).

EmulatorPubKey ECXOnlyPubKey

The emulator key the covenant tweaks.

WithoutReceiver bool

Also append the timelocked twin, nonInteractiveRefundWithoutReceiver. Defaults to false, which is the eight-leaf shape every lockup funded so far carries.

Remarks

Every OTHER refund-side leaf requires the sender's own signature, so if the sender permanently loses that key none of them are reachable. This leaf is the exception: it needs neither the sender's presence nor their key, and the covenant is what still guarantees the payout can only reach the sender's pre-committed address. It does need the receiver — deliberately, because that is what lets server and receiver release the refund the moment they agree the swap failed, rather than making the sender wait out the locktime.

WithoutReceiver adds the one refund tier that needs NO participant signature at all: the server plus this same covenant co-signer, after RefundLocktime. refund and refundWithoutReceiver need the sender's key, nonInteractiveRefund needs the receiver's; a sender who funds a lockup and then vanishes is refundable through this leaf alone, by anyone, and still only to their pre-committed address.

It is opt-in because it APPENDS A NINTH LEAF and so moves the address. The two shapes are different contracts, not variants of one: a lockup already funded in the eight-leaf shape keeps it permanently, since a leaf cannot be retrofitted onto an address already committed to. Both leaves pin the same destination and so share one covenant key, which is why they are one record rather than two — deriving the key twice would make that agreement a coincidence.

Properties

EmulatorPubKey

The emulator key the covenant tweaks.

public ECXOnlyPubKey EmulatorPubKey { get; init; }

Property Value

ECXOnlyPubKey

SenderPkScript

Where the refund must pay — the sender's P2TR scriptPubKey (34 bytes).

public byte[] SenderPkScript { get; init; }

Property Value

byte[]

WithoutReceiver

Also append the timelocked twin, nonInteractiveRefundWithoutReceiver. Defaults to false, which is the eight-leaf shape every lockup funded so far carries.

public bool WithoutReceiver { get; init; }

Property Value

bool