TYPE 0x0705 · COMPOUND FAMILY
CLTV_SIG
Signature verification combined with an absolute timelock (CLTV) in a single block. Collapses the common SIG + CLTV two-block pattern, saving 8 bytes on wire.
Compound Non-InvertibleLadder Diagram
Fields
| Field | Data Type | Size | Side | Description |
|---|---|---|---|---|
| scheme | SCHEME | 1 B | Conditions | Signature scheme selector (Schnorr, ECDSA, or PQ) |
| locktime | NUMERIC | 1-4 B | Conditions | Absolute locktime (block height) |
| pubkey | PUBKEY | 32-33 B | Witness | Public key (verified via Merkle leaf) |
| signature | SIGNATURE | 64-65 B | Witness | Schnorr signature (64B) or with sighash byte (65B) |
Public key folded into Merkle leaf via merkle_pub_key (PubkeyCountForBlock = 1). No key field in conditions.
Evaluation Logic
1.
Locate the witness PUBKEY, SIGNATURE, and conditions NUMERIC (
locktime); any missing → ERROR. PUBKEY identity is bound at MLSC-proof level via merkle_pub_key.
2.
Read the optional conditions SCHEME; if absent, default to Schnorr.
3.
Dispatch VerifySigWithScheme(PUBKEY, SIGNATURE, scheme, ...). Sig size checks fire here. Invalid → the underlying result.
4.
Then run the CLTV check (mirrors CLTV block): ReadNumeric the locktime; undecodable → ERROR
5.
Range guard:
locktime < 0 or > 0xFFFFFFFF → UNSATISFIED
6.
CheckLockTime(uint32_t(locktime)); BIP-65 height/MTP discrimination fires inside (value < LOCKTIME_THRESHOLD = 500000000 is height, ≥ is MTP). Fails → UNSATISFIED; passes → SATISFIED
Return Values
| Condition | Result |
|---|---|
| PUBKEY, SIGNATURE, or NUMERIC missing; or NUMERIC undecodable | ERROR |
| Signature verification fails | UNSATISFIED |
Locktime out of uint32 range, or CheckLockTime fails | UNSATISFIED |
| Signature valid AND locktime reached | SATISFIED |
JSON Wire Format
Conditions (committed in the rung leaf)
{
"type": "CLTV_SIG",
"inverted": false,
"fields": [
{ "type": "SCHEME", "value": 1 },
{ "type": "NUMERIC", "value": 850000 }
]
}Witness (input)
{
"type": "CLTV_SIG",
"inverted": false,
"fields": [
{ "type": "PUBKEY", "hex": "02abc1...33 bytes" },
{ "type": "SIGNATURE", "hex": "30440...64 bytes" }
]
}Use Cases
Time-Locked Rewards
Mining pool payouts locked until a specific block height. The recipient has the key but cannot spend until the chain reaches the committed height, enforcing vesting schedules on-chain.
Scheduled Payments
Pre-signed transactions that become valid at a future date. Combined with a signature in one block, the payment is authorized but time-gated.
Refund Paths in HTLCs
The refund branch of an atomic swap uses CLTV_SIG: if the counterparty doesn't claim within the absolute deadline, the original sender can reclaim funds with their signature.