Shekyl v3 Rollout (HF1)
Last updated: 2026-07-15
Scope
This note is for operators and wallet integrators rolling out TransactionV3
on Shekyl NG.
Activation
- Consensus gate:
HF_VERSION_SHEKYL_NG = 1 - At/after HF1:
- user tx max version:
3 pqc_authverification is required for non-coinbase v3 txs
- user tx max version:
- Coinbase txs remain outside
pqc_authrequirements
Transaction Size Impact
Measured canonical component sizes (oracle:
shekyl-engine-core tx_fee_model::pqc_auth_weight):
HybridPublicKey:1996bytesHybridSignature:3385bytespqc_authbody contribution (single-signer, per input):5389bytes —auth_version+scheme_id+flags(u16)+varint(pk_len)‖pk+varint(sig_len)‖sig(1+1+2 + 2+1996 + 2+3385)- FCMP++ membership proof: ~3-4 KB per input
- ML-KEM ciphertext (per output):
1088bytes (stored intx_extratag0x06)
With per-input pqc_auths (pqc_auths.size() == vin.size()), a typical
2-in/2-out transaction is approximately ~23 KB total (per-input pqc_auths
at ~5.4 KB each dominate the size).
Operators can achieve ~95% storage reduction by running --prune-blockchain,
which strips prunable transaction data while retaining headers and recent blocks.
Multisig Size Impact (scheme_id = 2)
Classical Monero-style multisig (secret-splitting) is removed from the
rebooted chain. All multisig uses PQC-only authorization via scheme_id = 2.
See docs/PQC_MULTISIG.md for full specification.
Multisig transactions carry N public keys and M signatures. Target
consensus cap (MSW-G, decided 2026-07-15):
MAX_MULTISIG_PARTICIPANTS = 5 (2f+1 at f=2 — largest group served;
see PQC_MULTISIG.md §5). Not yet live — code still uses = 7
until MSW-1. Size table below is sized to the target cap. Auth is ~⅓
of a solo tx; whole-tx weights (1-in/2-out, depth 12, measured FCMP
proof) dominate:
| Configuration | Approx tx total | vs 1 solo | vs N solos |
|---|---|---|---|
| solo | ~15.6 KB | 1.0× | — |
| 3-of-3 | ~26.5 KB | ~1.7× | ~0.57× (26.5 / (3×15.6)) |
| 5-of-5 | ~37.3 KB | ~2.4× | ~0.48× (37.3 / (5×15.6)) |
A 5-of-5 spend is ~2.4× one solo and well under five separate solos — it amortizes FCMP++/Bp+/KEM/prefix fixed costs. Do not read auth-overhead "×N vs single-signer" as whole-tx cost. (Do not reuse figures from a former "vs 7 solos" column under a relabeled "vs N solos" header.)
Multisig usage is expected to be well under 1% of transaction volume. Aggregate chain growth impact is negligible.
Practical effect:
- larger mempool footprint
- higher relay bandwidth usage
- larger RPC transaction payloads
- file-based at N≥3 after MSW-8 (~5.8k chars); N=2 QR-able; §15.3
registry is an optimization, not a ship prerequisite
(
PQC_MULTISIG.md§15.3)
Wallet Migration Notes
- Wallets must construct v3 payload first, then sign and attach
pqc_auth. - Wallet scanners should continue handling classical tx metadata (
extra) and treatpqc_authas authorization material, not scan metadata. - Restored wallets should have PQ key material generated and persisted.
- Hardware-wallet PQ support remains deferred; software wallets are the supported v3 path for now.
- Classical multisig removed: Monero-style secret-splitting multisig is
not carried forward to the rebooted chain. The
make_multisigcode path, MMS transport, and classical multisig wallet state are deleted. All multisig uses PQC-only authorization (scheme_id = 2). - Multisig wallets: Product path is Option E′
(
PQC_MULTISIG.md§15.4a / design §0.5): dealer-mode, group-plaintextb(local balance/KI), FROST M-of-N onywith per-output tweak,spend_auth_version = 0x02(0x01never issued). Address after MSW-8 is KEM-only per participant (+ E′B/Y). Not fixed group-aggregate PQC key (Option A rejected 2026-04-04) and not mandatory-prover Option D. Signing coordination uses file-based export/import of payload and signature blobs. - Staking / archival bonds with multisig: Funding inputs may use
scheme_id = 2while the bond vin authorizes with scheme-1 P (bond_spend_pkremains a single hybrid key — pseudonym uniformity). That requires relaxing tx-wide scheme agreement (MSW-6); archival core never sees fundingpqc_auths. Multisig is not "the recommended configuration" for long-duration positions by default — it is an optional custody shape once MSW-6 lands.
Payload Limit Guidance
Operators and indexers must accommodate the increased per-transaction size:
- Minimum recommended mempool tx limit: The
5389-bytepqc_authfigure (pqc_auth_weight()) is per-input, not per-transaction. With 2 inputs, that is ~10.8 KB of pqc_auth alone, plus ~3-4 KB per input for FCMP++ proofs and ~1 KB per output for ML-KEM ciphertexts. Budget at least 25 KB above current median user tx size. - Multisig headroom: the target cap
MAX_MULTISIG_PARTICIPANTS = 5(MSW-G; code still= 7until MSW-1) bounds planned worst-casepqc_authoverhead to ~27 KB (5-of-5). Typical configurations (2-of-3, 3-of-5) are well under this. Operators should not reject transactions solely based on pre-PQC size assumptions. - RPC consumers: adjust any hardcoded maximum payload buffers to at least 150 KB per transaction (typical 2-input/2-output tx + PQC auth). For multisig, budget up to 200 KB.
- Levin relay: the existing 100 MB default message limit is sufficient, but per-message transaction count assumptions should be revisited if batching relay payloads.
- Monitoring dashboards: alert thresholds tied to tx size should be
rebased against post-v3 norms, not pre-PQC averages. Consider separate
alerting bands for
scheme_id = 1(single) andscheme_id = 2(multisig).
Node/Infrastructure Checklist
- Ensure all validating nodes run HF1-capable binaries before activation.
- Verify custom RPC clients/indexers accept larger tx payloads.
- Update any tx-size assumptions in monitoring/alerting and mempool dashboards.
- Confirm seed/boot nodes are upgraded first to avoid propagation asymmetry.
- Verify that transaction validation correctly handles both
scheme_id = 1(single-signer) andscheme_id = 2(multisig signature list). - Test multisig transaction relay and mempool acceptance at realistic sizes
(2-of-2 through 5-of-5 — configurations with
n_total > 5are consensus-invalid under MSW-G).