{
    "meta": {
        "title": "Bitcoin Node Relay-Policy & Template-Composition Matrix",
        "description": "Relay/mempool policy defaults of 6 Bitcoin node implementations (datacarrier/OP_RETURN, bare multisig, dust, full-RBF, inscription filtering) mapped to what each includes in a self-built block template.",
        "generated": "2026-07-17T16:01:59+00:00",
        "version": "1.0",
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "license_name": "CC BY 4.0",
        "source": "https://d-central.tech/bitcoin-node-relay-policy/",
        "record_count": 6,
        "disclaimer": "Point-in-time snapshot (July 2026). These are DEFAULT relay/mempool POLICY settings (standardness, not consensus) — every value is configurable and defaults change between releases. Verified against each project's release notes/docs; re-verify at the source before relying on it. \"Template effect\" describes what a block you build with default policy would include/exclude, relevant when you run your own templates via Stratum V2 job declaration or DATUM."
    },
    "rows": [
        {
            "id": "bitcoin-core",
            "name": "Bitcoin Core",
            "version": "v30.x",
            "repo": "https://github.com/bitcoin/bitcoin",
            "datacarrier_default": "Enabled (relayed)",
            "datacarrier_size": "100,000 B (v30; ~unlimited)",
            "multi_opreturn": "Standard (multiple)",
            "bare_multisig": "Relayed",
            "dust_threshold": "3000 sat/kvB (~546 P2PKH)",
            "full_rbf": "On by default (v28+)",
            "truc_v3": "Yes (v3/TRUC, ephemeral dust, P2A)",
            "max_mempool": "300 MB",
            "filters_inscriptions": "No — relays",
            "template_effect": "Includes large and multiple OP_RETURN data (up to ~100 kB aggregate), bare multisig, TRUC/v3 packages and Taproot inscription/ordinal witness txs; excludes only true sub-dust and genuinely non-standard scripts.",
            "source": "Bitcoin Core 30.0 release notes; src/policy/policy.h (DEFAULT_ACCEPT_DATACARRIER=true, datacarriersize=100000, DEFAULT_PERMIT_BAREMULTISIG=true, DEFAULT_DUST_RELAY_TX_FEE=3000); PR #32406 (multiple OP_RETURN); PR #30493 (full-RBF default, v28)"
        },
        {
            "id": "bitcoin-knots",
            "name": "Bitcoin Knots",
            "version": "v29.3.knots (v29-based)",
            "repo": "https://github.com/bitcoinknots/bitcoin",
            "datacarrier_default": "Enabled but capped",
            "datacarrier_size": "83 B (temporary; intent to revert to 42)",
            "multi_opreturn": "Non-standard (shared 83 B budget)",
            "bare_multisig": "Not relayed",
            "dust_threshold": "3000 sat/kvB + sub-dust fee penalty",
            "full_rbf": "On (always)",
            "truc_v3": "Yes (from v29 base)",
            "max_mempool": "300 MB",
            "filters_inscriptions": "Yes — filters",
            "template_effect": "Excludes inscriptions/ordinals, oversized or multiple OP_RETURN data (>83 B total), bare multisig and dust — a minimal-data-spam template of financial-looking transactions.",
            "source": "Knots v29.3.knots20260508 src/policy/policy.h (MAX_OP_RETURN_RELAY=83, DEFAULT_PERMIT_BAREMULTISIG=false, DEFAULT_DATACARRIER_FULLCOUNT=true, RBFPolicy::Always); v29.2.knots20251110 notes (42->83 temporary). Still Core-v29-based (did NOT rebase to v30)."
        },
        {
            "id": "btcd",
            "name": "btcd",
            "version": "v0.24.x (Go)",
            "repo": "https://github.com/btcsuite/btcd",
            "datacarrier_default": "Enabled (hardcoded)",
            "datacarrier_size": "80 B (fixed, no runtime knob)",
            "multi_opreturn": "Non-standard (1 max)",
            "bare_multisig": "Relayed (<=3 keys)",
            "dust_threshold": "1000 sat/kvB min-relay (~546 P2PKH)",
            "full_rbf": "BIP125 opt-in only (no full-RBF)",
            "truc_v3": "No",
            "max_mempool": "No byte cap (fee/expiry-bounded)",
            "filters_inscriptions": "No — relays",
            "template_effect": "Legacy-Core-style, by hardcoded standardness rather than a policy toggle: includes one <=80 B OP_RETURN and bare multisig; excludes large/multiple OP_RETURN and TRUC — more restrictive than Core v30.",
            "source": "btcsuite/btcd mempool/policy.go, txscript/standard.go (MaxDataCarrierSize=80)"
        },
        {
            "id": "bcoin",
            "name": "bcoin",
            "version": "v2.2.x (JS; low maint.)",
            "repo": "https://github.com/bcoin-org/bcoin",
            "datacarrier_default": "Enabled",
            "datacarrier_size": "80 B data / 83 B script (fixed)",
            "multi_opreturn": "Non-standard (1 max)",
            "bare_multisig": "Relayed",
            "dust_threshold": "1000 sat/kB (~546 P2PKH)",
            "full_rbf": "Opt-in RBF, off by default",
            "truc_v3": "No",
            "max_mempool": "~100 MB",
            "filters_inscriptions": "No — relays",
            "template_effect": "Legacy-Core-style templates (one <=80 B OP_RETURN, bare multisig; no oversized data or TRUC). Low ongoing maintenance.",
            "source": "bcoin-org/bcoin lib/protocol/policy.js (MAX_OP_RETURN 80/83, BARE_MULTISIG=true)"
        },
        {
            "id": "libbitcoin",
            "name": "Libbitcoin",
            "version": "libbitcoin v4 (toolkit)",
            "repo": "https://github.com/libbitcoin/libbitcoin-node",
            "datacarrier_default": "N/A",
            "datacarrier_size": "",
            "multi_opreturn": "N/A",
            "bare_multisig": "N/A",
            "dust_threshold": "N/A",
            "full_rbf": "N/A",
            "truc_v3": "N/A",
            "max_mempool": "N/A (no policy mempool)",
            "filters_inscriptions": "N/A",
            "template_effect": "A full-validation C++ library/node toolkit, not a Core-style relay-policy node: it validates and stores/relays blocks and fee-qualifying txs but exposes no OP_RETURN / dust / bare-multisig / RBF policy knobs, so it offers no configurable template policy.",
            "source": "libbitcoin/libbitcoin-node README; libbitcoin-server FAQ"
        },
        {
            "id": "floresta",
            "name": "Floresta",
            "version": "v0.9.x (Rust / utreexo)",
            "repo": "https://github.com/vinteumorg/Floresta",
            "datacarrier_default": "N/A",
            "datacarrier_size": "",
            "multi_opreturn": "N/A",
            "bare_multisig": "N/A",
            "dust_threshold": "N/A",
            "full_rbf": "N/A",
            "truc_v3": "N/A",
            "max_mempool": "N/A (no tx relay yet)",
            "filters_inscriptions": "N/A",
            "template_effect": "A utreexo compact-accumulator validation client with an integrated Electrum server; as of v0.9.x it has no transaction relay or policy mempool, so it does not build or relay policy templates at all.",
            "source": "vinteumorg/Floresta release notes (v0.8-0.9)"
        }
    ]
}