bitcoin-adaptor-sigs

v2026.09.24

Adaptor signatures: pre-signature paired with a "secret" such that publishing a valid signature reveals the secret, and vice versa. Foundational for atomic swaps, scriptless scripts, DLCs, Submarine Swaps trustless variants, PTLCs (Point Time-Locked Contracts). USE WHEN: designing atomic swaps, evaluating PTLCs vs HTLCs, building DLCs, understanding scriptless scripts.

GitHub
安装命令
npx skhub add claude-dev-suite/bitcoin-adaptor-sigs
Markdown
SKILL.md

Adaptor Signatures

An adaptor signature is a modification of a Schnorr signing protocol: instead of producing a complete signature, the signer produces a pre-signature that is invalid on its own but becomes valid once adapted with a secret value t.

Two key properties:

  1. Witness extractability — given a complete sig and the pre-signature, anyone can compute t.
  2. Atomicity — observing one side of a swap reveals the secret needed for the other side.

Schnorr-based adaptor (BIP340)

Standard Schnorr sig:

e = challenge(R, P, m)
s = k + e*d   (where R = k*G)

Adaptor variant with adaptor point T = t*G:

s' = k + e*d           ← same as normal s
σ  = (R, s')           ← pre-signature

But the verifier checks against (R + T), not R. So σ alone fails verification. To complete:

s = s' + t mod n

Now (R + T, s) verifies as a normal Schnorr sig under public key P.

Properties used

  • Pre-sig verify — anyone can check that σ is "valid except for T" by checking s'*G - e*P == R.
  • Adapt — with t, anyone can compute s = s' + t.
  • Extract — with both σ and s, compute t = s - s'.

Scriptless atomic swap

Two parties Alice (BTC) and Bob (LTC) want to swap.

Alice creates Tx_A (BTC for Bob), with Alice's signature σ_A as adaptor
  with adaptor point T = t*G (t known only to Alice)
  σ_A: pre-sig — Bob CAN'T spend yet (verifier expects sig over R+T, not R)

Bob creates Tx_B (LTC for Alice), with Bob's signature σ_B as adaptor
  with the SAME adaptor point T

Alice publishes Tx_B by adapting σ_B with t (Alice can do this because
  she knows t)
  → publishing reveals s_B = σ_B + t
  → Bob extracts t = s_B - σ_B (he sees Tx_B on chain)

Bob now adapts σ_A with t to spend Tx_A

Both txs publish or neither. No HTLC, no script, no preimage. Just two adaptor sigs over the same secret.

PTLC (Point Time-Locked Contract)

Lightning's HTLC = "Hash Time-Locked Contract" — locks fund release on revealing a preimage r such that hash(r) = H.

PTLC = "Point Time-Locked Contract" — locks fund release on revealing a scalar t such that t*G = T. Same atomic guarantees, but:

  • Better privacy: each hop in a routed payment uses a different T (derived per-hop), defeating cross-hop correlation.
  • Smaller on chain — no preimage in script, just an adaptor sig.
  • Compatible with Schnorr — needs Taproot adoption.

PTLC requires LN-spec updates (BOLT-PTLC drafts in flight).

DLC (Discreet Log Contract) integration

DLC oracles publish nonce commitments. Bettors construct adaptor sigs that adapt under specific oracle outcomes:

Oracle nonces: R_oracle for upcoming event, will publish (s_outcome, R_oracle)
  where s_outcome = k_oracle + e_outcome * d_oracle

Bettor pre-signs CET (Contract Execution Tx) with adaptor point
  T_outcome = R_oracle + (e_outcome * P_oracle)

When oracle publishes s_outcome for the actual outcome:
  bettor extracts t_outcome = s_outcome
  adapts pre-sig → publishes CET

Other applications

  • Submarine swaps (LN ↔ on-chain) trustless variants.
  • Cross-chain atomic swaps without HTLC.
  • Coin-mixing with PTLC for privacy.
  • Threshold escrow — n-of-m parties can adapt with their share of t.

Implementations

  • secp256k1-zkp (Blockstream fork) — ecdsa_adaptor, plus BIP340 adaptor support inside musig (musig_adapt / musig_extract_adaptor). No standalone Schnorr adaptor module — PR #299 unmerged since Oct 2024, no tagged releases (Sept 2026).
  • schnorr_fun / ecdsa_fun (secp256kfun, LLFourn) — pure-Rust adaptor modules for BIP340 and ECDSA adaptor sigs; schnorr_fun 0.13.0 (May 2026), ecdsa_fun 0.12.0 (November 2025).
  • rust-secp256k1-zkp (BlockstreamResearch; formerly ElementsProject, as of September 2026) — Rust bindings to the C secp256k1-zkp library; crate secp256k1-zkp 0.11.0 (July 2024), wraps the C ecdsa_adaptor API.
  • DLC: rust-dlc (Crypto Garage / p2pderivatives) — dlc crate 0.8.0 (December 2025), repo last pushed March 2026.
  • Some Lightning impls' PTLC branches (LDK research, not mainnet).

Security caveats

  • Choice of t must be uniformly random in [1, n-1].
  • Reuse of adaptor point across protocols → cross-protocol leak.
  • Atomic timing: while atomicity is guaranteed, timing windows matter: refund paths must give honest party time to react.
  • Fair-exchange impossibility is sidestepped because adaptor sig embeds the unforgeable signing operation.

Common bugs

  • Forgetting parity flip when computing R + T (Schnorr's even-y rule applies to the resulting point).
  • Storing t in plaintext between adapt and reveal phases.
  • Failing to verify pre-signature before relying on it (someone could give you a completely random pre-sig that won't adapt).

See also

发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

2026年9月24日

分类

未分类

许可证

MIT

源路径

skills/bitcoin/cryptography/adaptor-sigs

默认分支

main

最新提交

9496306

Tree SHA

fe4e2f1