The deal
A hash-time-locked contract (HTLC) locks PRL for a claimer who knows the secret preimage. If the swap dies, the refundee sweeps everything back after the timeout. No chain on Pearl runs contracts — this is pure Taproot script, enforced by consensus.
The secret (maker only — never share until you claim the counterparty leg)
The hash lock (taker — paste from the maker's descriptor)
The preimage itself is revealed later — on the counterparty chain, when the maker claims their side. You will enter it on the Settle step to claim the PRL.
Counterparty leg (memo — the other chain's side of the swap)
Saved deals
No saved deals yet.
The contract
The HTLC address commits to both spending paths. Verify the scripts before anyone funds it — the address is fully determined by the claimer key, the refundee key, the hash lock and the timeout.
Spending paths
Leaf 0 · Claim hash-locked
Spends with [signature, preimage, script, control block] — the preimage's
SHA-256 must equal the hash lock, then the claimer's Schnorr signature is checked.
Leaf 1 · Refund timelocked
Spends with [signature, script, control block] once the chain reaches the
timeout height — refundee signature only.
Taptree
- Internal key
(NUMS — no known private key; keypath spending is impossible for anyone)- Claim leaf hash
- Refund leaf hash
- Merkle root
- Timeout
Control blocks (the counterparty needs these to verify)
Descriptor (tamper-evident — share this with the counterparty)
- Fingerprint
Import a descriptor (taker path — verify a maker's contract)
Fund the HTLC
The maker funds the HTLC address from any Pearl wallet (Oyster, Pearl Sign, …). This page only watches — it never asks for the funding wallet's keys.
- HTLC address
- Expected
Air-gapped funding (paste the funding outpoint manually)
Track the swap
Watch the HTLC: funding confirmations, any spend (claim or refund), and the countdown to the refund timeout.
- Funding
- —
- Spend
- —
- Timeout
- —
- Countdown
- —
Counterparty leg (your notes — the app cannot see the other chain)
Revealed preimage (maker — store the secret you revealed on the other chain)
Settle
Two exits, one contract. Claim reveals the preimage and pays the claimer; refund reclaims everything for the refundee once the timelock opens.
prl1p62v09vuzyd8kdz9l23jaf3kph4wwx6jqcmhkkhg8lhr2qlxky8psu3zw9d.
It is paid as its own output out of this claim — you receive the HTLC value minus the fee and the tip — and it is
never automatic: with this box unchecked (the default) the claim is exactly as before. Refunds never carry a tip.
Settlement plan
- Path
- Digest to sign
- Outputs
- Fee
- Builder tip
- —
Sign (locally — the key never leaves this page)
Unsigned bundle (air-gap: sign on a cold device)
- Bundle fingerprint
Broadcast & verify
The fully-signed transaction. Its signature was verified locally before assembly — what you broadcast is exactly what the key approved.
- TXID
- vBytes
- Path
Standalone verifier
Verify any Pearl Atomic descriptor or HTLC state without forging anything.
Honest limits
- Pearl has no smart contracts — this HTLC is Taproot script, and the other chain's leg is entirely the counterparty's responsibility. This page cannot see it, fund it, or enforce it.
- Timeout ordering is on you: whoever locks first must use the longer refund timeout. The app warns, but it cannot verify the other chain.
- The maker must keep the preimage secret until they claim the counterparty leg — anyone holding the preimage can claim the PRL.
- A refund is impossible before the timeout height — that is consensus, not a UI choice.
- No real swaps were executed while testing this app (needs a live counterparty and funds on both chains).
- Blockbook reads are GET-only until you press Broadcast; a pasted outpoint is trusted as-is.
- Saved deals and secrets live in this browser's localStorage — use Wipe, and never reuse a revealed secret.
- The builder tip on claims is optional — off by default, disclosed next to its checkbox at 1% of the claimed amount to the builder address shown there, and paid only inside a claim transaction you sign. Refunds never carry it.