M-of-N threshold signature verification. Multiple pubkey commitments are locked in conditions with a threshold. The witness provides N pubkeys and M valid signatures to satisfy the block.
Signature Non-Invertible| Field | Data Type | Size | Side | Description |
|---|---|---|---|---|
| threshold | NUMERIC | 1-4 B | Conditions | Required number of valid signatures (M) |
| pubkey[0..N] | PUBKEY | 32-33 B each | Witness | All N public keys (x-only 32B or compressed 33B) |
| signature[0..M] | SIGNATURE | 64-65 B each | Witness | M valid signatures corresponding to M distinct pubkeys |
| scheme | SCHEME | 1 B | Witness (opt) | Optional PQ signature scheme identifier for post-quantum routing |
Public keys folded into Merkle leaf via merkle_pub_key (PubkeyCountForBlock = N). No key fields in conditions.
Conditions side (example 2-of-3):
Witness side (example 2-of-3):
Wire size scales linearly: N pubkey commits in conditions + N pubkeys + M signatures in witness.
| Condition | Result |
|---|---|
| Missing NUMERIC field or Merkle leaf pubkey count mismatch | ERROR |
| Threshold M < 1 or M > N | ERROR |
| Fewer than N pubkeys in witness | ERROR |
| Merkle leaf verification fails for any key | UNSATISFIED |
| Fewer than M valid signatures | UNSATISFIED |
| M or more valid signatures from distinct keys | SATISFIED |
{
"type": "MULTISIG",
"inverted": false,
"fields": [
{ "type": "NUMERIC", "value": 2 },
{ "type": "PUBKEY", "hex": "02abc1...33 bytes" },
{ "type": "PUBKEY", "hex": "03def2...33 bytes" },
{ "type": "PUBKEY", "hex": "02789a...33 bytes" }
]
}{
"type": "MULTISIG",
"inverted": false,
"fields": [
{ "type": "PUBKEY", "hex": "02abc1...33 bytes" },
{ "type": "PUBKEY", "hex": "03def2...33 bytes" },
{ "type": "PUBKEY", "hex": "02789a...33 bytes" },
{ "type": "SIGNATURE", "hex": "30440...64 bytes" },
{ "type": "SIGNATURE", "hex": "e5f71...64 bytes" }
]
}