算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
bitcoin-adaptor-sigs【设计与创意】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 …
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
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:
t.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.
σ is "valid except for
T" by checking s'*G - e*P == R.t, anyone can compute s = s' + t.σ and s, compute t = s - s'.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.
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:
T
(derived per-hop), defeating cross-hop correlation.PTLC requires LN-spec updates (BOLT-PTLC drafts in flight).
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
t.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.rust-dlc (Crypto Garage / p2pderivatives) — dlc crate
0.8.0 (December 2025), repo last pushed March 2026.PTLC branches (LDK research, not mainnet).t must be uniformly random in [1, n-1].R + T (Schnorr's even-y
rule applies to the resulting point).t in plaintext between adapt and reveal phases.