Bitcoin Script vs Ladder Script

Side-by-side comparisons for common spending patterns. Same goal, different approach.

1. Vault with Clawback
Hot key spends after a delay. Cold key sweeps immediately.
Bitcoin Script (OP_VAULT proposal)
OP_VAULT <recovery-spk> <delay> <target-hash> Requires: BIP-345 soft fork (not activated) Recovery: OP_VAULT_RECOVER Unvault: separate tx to OP_UNVAULT output Trigger: reveal target outputs, wait delay 4 opcodes, 2 transactions minimum
Not available BIP-345 is proposed but not activated on mainnet.
Ladder Script
ladder(vault_lock(@recovery, @hot, 144)) Recovery key: sweeps immediately (no delay) Hot key: signs + waits 144 blocks 1 block type, 1 transaction Descriptor: vault_lock(@recovery, @hot, 144)
Native Single block type. Works on signet today.
Ladder Script: Built-in vault primitive. No multi-transaction ceremony. Recovery is one signature, not a separate recovery transaction.
2. Hash Time-Locked Contract (Atomic Swap)
Claim with preimage + signature, or refund after timeout.
Bitcoin Script
OP_IF OP_SHA256 <hash> OP_EQUALVERIFY <receiver-pubkey> OP_CHECKSIG OP_ELSE <timeout> OP_CHECKLOCKTIMEVERIFY OP_DROP <sender-pubkey> OP_CHECKSIG OP_ENDIF 11 opcodes, stack manipulation, branching Witness: choose IF or ELSE path + data
Works but fragile Script execution is path-dependent. Both branches visible on-chain.
Ladder Script
ladder(or( htlc(@sender, @receiver, <preimage>, 144), and(sig(@sender), cltv(900000)) )) 1 compound block + 1 fallback rung Merkelised: only spending rung revealed Descriptor: htlc(@alice, @bob, hex, 144)
Native HTLC is a single compound block. Unrevealed rung stays private (MLSC).
Ladder Script: HTLC as one typed block. No IF/ELSE branching. Only the spending path is revealed on-chain — the refund path stays private.
3. Rate-Limited Wallet
Cap how much can be spent per block, even if the key is compromised.
Bitcoin Script
Not possible with Bitcoin Script. No opcode inspects spending rate across blocks. OP_CHECKTEMPLATEVERIFY can constrain a single spending transaction but cannot enforce per-block rate limits over time. Workaround: pre-signed transaction chains (requires trust + key management)
Not possible No mechanism for cross-block spending rate enforcement.
Ladder Script
ladder(and( sig(@owner), rate_limit(200000, 1000000, 10) )) Max 200k sats per block Accumulation cap: 1M sats Refill: 10 blocks Descriptor: rate_limit(200000, 1000000, 10)
Native RATE_LIMIT is a single block type. Enforced at consensus.
Ladder Script: Native rate limiting. If your key is compromised, the attacker can only drain at the rate you set. Bitcoin Script has no equivalent.
4. Dollar-Cost Averaging Covenant
A UTXO that can be spent exactly 12 times, splitting off a fixed amount each time.
Bitcoin Script
Not possible without OP_CAT + CTV. Recursive covenants require introspecting the spending transaction's outputs. OP_CTV alone can pre-commit one template. OP_CAT (not activated) could enable generalized covenants but with unconstrained recursion depth. No bounded recursion primitive exists.
Not possible Requires covenant opcodes not available on mainnet.
Ladder Script
ladder(and( sig(@owner), amount_lock(50000, 100000), recurse_count(12) )) Count decrements each spend Terminates at 0 (free spend) Output must carry same conditions Descriptor: recurse_count(12)
Native Bounded recursion with automatic termination. No unbounded loops possible.
Ladder Script: Recursive covenants are first-class. Bounded by max_depth or countdown. No OP_CAT needed. The evaluator enforces that outputs carry the correct mutated conditions.
5. Dead Man's Switch (Inheritance)
Owner spends normally. If inactive for ~6 months, heir can claim.
Bitcoin Script
OP_IF <owner-pubkey> OP_CHECKSIG OP_ELSE <26000> OP_CHECKSEQUENCEVERIFY OP_DROP <heir-pubkey> OP_CHECKSIG OP_ENDIF Works but reveals both branches. No way to "reset" the timer without moving funds to a new UTXO.
Works Functional but both paths visible. No built-in timer reset.
Ladder Script
ladder(or( sig(@owner), and(csv(26000), sig(@heir)) )) Owner path: immediate, private Heir path: 26,000 blocks (~6 months) Only spending path revealed (MLSC) Timer resets on each owner spend
Native Same logic, but only the used path is revealed. Unrevealed rung stays private.
Ladder Script: Same inheritance logic, but with MLSC privacy. The heir path is never revealed unless used. With RECURSE_SAME, each owner spend resets the timer and re-encumbers with identical conditions.
6. Post-Quantum Key Migration
Use a classical key daily, with a post-quantum fallback for long-term security.
Bitcoin Script
Not possible. Bitcoin Script has no post-quantum signature verification opcodes. No soft fork proposal adds PQ support. Migration requires a hard fork or a new address type + opcode.
Not possible No PQ signature verification in Bitcoin Script.
Ladder Script
ladder(or( sig(@daily), sig(@pq_backup, falcon512) )) Daily spending: Schnorr (32-byte key) Recovery: FALCON-512 (897-byte key) Also: falcon1024, dilithium3, sphincs_sha Same descriptor notation, same RPC
Native PQ schemes are a 1-byte SCHEME field change. No new opcodes needed.
Ladder Script: Post-quantum support is built into the signature verification. Change one byte (the SCHEME field) to switch from Schnorr to FALCON-512, DILITHIUM3, or SPHINCS+. No new opcodes, no hard fork.
7. Governance-Gated Treasury
2-of-3 multisig + output must go to a specific address + max tx weight.
Bitcoin Script
OP_2 <pk1> <pk2> <pk3> OP_3 OP_CHECKMULTISIG Multisig: yes. Output constraints: not possible. Weight limits: not possible. Epoch gates: not possible. Bitcoin Script cannot inspect the spending transaction's outputs, weight, or block height modulo.
Partial Multisig works. Output/weight/epoch constraints don't exist.
Ladder Script
ladder(and( multisig(2, @dir_a, @dir_b, @dir_c), output_check(0, 1000000, 4294967295, <hash>), weight_limit(65536), epoch_gate(100, 100) )) Multisig + output constraint + weight limit + epoch window All in one rung, all enforced at consensus
Native Transaction-level constraints are first-class block types.
Ladder Script: OUTPUT_CHECK, WEIGHT_LIMIT, INPUT_COUNT, OUTPUT_COUNT, EPOCH_GATE, and RELATIVE_VALUE are all native block types. Bitcoin Script has no transaction introspection beyond signature verification.
Summary
Pattern Bitcoin Script Ladder Script
Vault with clawbackNot availablevault_lock
HTLC (atomic swap)11 opcodeshtlc (1 block)
Rate-limited walletNot possiblerate_limit
Recursive covenant (DCA)Not possiblerecurse_count
Dead man's switchIF/ELSE + CSVor(sig, csv+sig)
Post-quantum signaturesNot possiblesig(@pk, falcon512)
Governance treasuryMultisig onlymultisig + output_check + weight_limit

Bitcoin Script works for simple signatures, timelocks, and hash locks. For everything else — vaults, rate limiting, covenants, PQ signatures, transaction introspection — it either can't do it or requires proposed opcodes that aren't activated. Ladder Script provides all of these as native, typed block types with bounded execution and deterministic evaluation.