BitcoinII v31 consensus data restrictions
Purpose
Section titled “Purpose”This page documents the BitcoinII Core v31.1.0 transaction-data restrictions activated on mainnet at height 57750.
The release notes describe these broadly as Ordinals, inscriptions, and Runes mitigation. The source is more specific.
Activation
Section titled “Activation”Mainnet chain parameters set:
nDataRestrictionsHeight = 57750During block connection, validation.cpp enables BitcoinII-specific data rules when the block being connected is at or above that height.
These checks are consensus checks. They are not merely mempool policy.
Output rules
Section titled “Output rules”src/consensus/bitcoinII_data.h defines output-only checks through Consensus::CheckBitcoinIIOutputRules.
Post-activation, a transaction is rejected from a consensus-valid block when it violates any of these rules:
- more than one
OP_RETURNoutput; - an
OP_RETURNscript larger than the BitcoinII consensus allowance; - an actual
OP_13opcode inside anOP_RETURNscript; - a bare multisig output.
The OP_13 detector parses script operations. A byte equal to OP_13 inside pushed data is not treated as an opcode violation.
Taproot witness rules
Section titled “Taproot witness rules”For spends of native Taproot outputs, BitcoinII adds witness-level restrictions:
- Taproot annex data is forbidden;
- script-path revealed tapscripts are capped at the BitcoinII consensus limit;
- Ordinals inscription envelopes matching the semantic pattern
OP_FALSE OP_IF <push "ord">are forbidden.
The Ordinals detector parses script operations instead of scanning raw bytes, reducing false matches inside unrelated pushed data.
Taproot key-path spends remain permitted by this helper.
Validation path
Section titled “Validation path”src/validation.cpp contains two wrapper checks:
CheckBitcoinIIConsensusOutputsCheckBitcoinIIConsensusWitness
When pindex->nHeight >= nDataRestrictionsHeight, block connection applies these checks to transactions and returns consensus-invalid block results for violations.
The output violation reasons include dedicated reject strings for OP_RETURN count, OP_RETURN size, OP_13, and bare multisig. Witness violations include Taproot annex, tapscript size, and Ordinals envelope failures.
Test coverage present upstream
Section titled “Test coverage present upstream”The v31.1.0 source tree includes:
src/test/bitcoinII_data_tests.cppfor BitcoinII data-rule unit tests;test/functional/feature_bitcoinII_data_consensus.py;test/functional/feature_bitcoinII_taproot_consensus.py.
MoreBC2 has identified these tests but has not yet executed them locally.
What this means for “Runes mitigation”
Section titled “What this means for “Runes mitigation””MoreBC2 should avoid summarizing this as a blanket ban on all arbitrary data.
The source-backed rules target specific transaction constructions and data-carrying surfaces. The current review supports claims about the explicit rules above; it does not support the broader statement that every possible arbitrary-data protocol is impossible on BitcoinII.
Primary sources
Section titled “Primary sources”Pinned to v31.1.0:
src/kernel/chainparams.cppsrc/consensus/params.hsrc/consensus/bitcoinII_data.hsrc/validation.cppsrc/test/bitcoinII_data_tests.cpptest/functional/feature_bitcoinII_data_consensus.pytest/functional/feature_bitcoinII_taproot_consensus.py
Canonical tag: https://github.com/Bitcoin-II/BitcoinII-Core/tree/v31.1.0
Verification
Section titled “Verification”Status: Source-reviewed partial
Primary sources checked: Yes, v31.1.0
Notes: Rule definitions, activation and validation placement are source-backed. Upstream tests were located but have not been run by MoreBC2.