Signature verification using a key commitment referenced from a relay block. Enables cross-rung key sharing without duplicating pubkey commitments, saving ~30 bytes per reference.
Signature Non-Invertible| Field | Data Type | Size | Side | Description |
|---|---|---|---|---|
| relay_index | NUMERIC | 4 B | Conditions | Index into the relay array (must be in rung's relay_refs) |
| block_index | NUMERIC | 4 B | Conditions | Index of the target block within the resolved relay |
| pubkey | PUBKEY | 32-33 B | Witness | Full public key (verified against relay's Merkle leaf) |
| signature | SIGNATURE | 64-65 B | Witness | Schnorr signature (64B) or with sighash byte (65B). PQ signatures variable size. |
Key resolved from relay (PubkeyCountForBlock = 0). No key field in conditions.
Conditions side (in scriptPubKey):
Witness side (in input witness):
KEY_REF_SIG resolves its public key from a relay block rather than folding it into the rung's own Merkle leaf. PubkeyCountForBlock = 0 for KEY_REF_SIG; the key is bound via the relay's leaf instead. Each additional rung referencing the same relay key avoids duplicating the key in multiple Merkle leaves.
| Condition | Result |
|---|---|
| Missing NUMERIC fields (relay_index, block_index) | ERROR |
| Relay context unavailable or relay_refs missing | ERROR |
| relay_index not in rung's relay_refs | ERROR |
| relay_index or block_index out of bounds | ERROR |
| Target block missing pubkey in Merkle leaf | ERROR |
| Witness missing PUBKEY or SIGNATURE | ERROR |
| Merkle leaf verification fails | UNSATISFIED |
| Signature verification fails | UNSATISFIED |
| Signature valid against resolved key | SATISFIED |
{
"type": "KEY_REF_SIG",
"inverted": false,
"fields": [
{ "type": "NUMERIC", "hex": "00000000" },
{ "type": "NUMERIC", "hex": "00000000" }
]
}{
"type": "SIG",
"fields": [
{ "type": "PUBKEY", "hex": "02abc1...33 bytes" },
{ "type": "SCHEME", "hex": "01" }
]
}{
"type": "KEY_REF_SIG",
"inverted": false,
"fields": [
{ "type": "PUBKEY", "hex": "02abc1...33 bytes" },
{ "type": "SIGNATURE", "hex": "30440...64 bytes" }
]
}