{
 "number": 35861,
 "repo": "bitcoin/bitcoin",
 "url": "https://github.com/bitcoin/bitcoin/pull/35861",
 "title": "Testnet 5 (BIP95)",
 "author": "fjahr",
 "author_association": "CONTRIBUTOR",
 "created_at": "2026-08-01T18:44:56Z",
 "updated_at": "2026-08-15T11:36:49Z",
 "age_days": 46,
 "draft": true,
 "labels": [
  "Needs rebase",
  "CI failed"
 ],
 "milestone": null,
 "base": "master",
 "head_sha": "31ed5baf687be3c1dd0ef283cf29b776ecf1698b",
 "head_ref": "2026-07-t5-draft",
 "head_repo": "fjahr/bitcoin",
 "head_history": [
  {
   "t": "2026-08-01T19:16:01Z",
   "sha": "31ed5baf687be3c1dd0ef283cf29b776ecf1698b"
  },
  {
   "t": "2026-08-15T09:39:58Z",
   "sha": "c83adca5e7b43f4c4756336c6049b9801ed503fa"
  },
  {
   "t": "2026-08-15T09:43:43Z",
   "sha": "31ed5baf687be3c1dd0ef283cf29b776ecf1698b"
  }
 ],
 "additions": 6743,
 "deletions": 129,
 "changed_files": 59,
 "commit_count": 25,
 "size_bucket": "XL",
 "mergeable_state": "dirty",
 "bot": {
  "drahtbot": {
   "present": true,
   "reviews": {},
   "conflicts": [
    {
     "number": 35852,
     "title": "scripted-diff: Use inline const(expr) over static constexpr in headers",
     "author": "maflcko"
    },
    {
     "number": 35657,
     "title": "refactor: avoid redundant input lookup in `CheckTxInputs`",
     "author": "arejula27"
    },
    {
     "number": 35570,
     "title": "refactor: Change some validation.cpp methods to return BlockValidationState",
     "author": "optout21"
    },
    {
     "number": 35569,
     "title": "Encapsulation for CTransaction",
     "author": "purpleKarrot"
    },
    {
     "number": 35301,
     "title": "Silent Payments: Implement bip352 (take 2)",
     "author": "Eunovo"
    },
    {
     "number": 34864,
     "title": "coins: tighten cache entry state invariants",
     "author": "l0rinc"
    },
    {
     "number": 32729,
     "title": "test,refactor: extract script template helpers and expand sigop coverage",
     "author": "l0rinc"
    },
    {
     "number": 32468,
     "title": "rpc: generateblock to allow multiple outputs",
     "author": "polespinasa"
    },
    {
     "number": 29491,
     "title": "[EXPERIMENTAL] Schnorr batch verification for blocks",
     "author": "fjahr"
    },
    {
     "number": 28690,
     "title": "build: Introduce internal kernel library",
     "author": "sedited"
    }
   ]
  }
 },
 "acks_parsed": {},
 "acks_tally": {
  "ack": 0,
  "stale_ack": 0,
  "concept_ack": 0,
  "approach_ack": 0,
  "nack": 0,
  "concept_nack": 0,
  "approach_nack": 0
 },
 "reviews": {
  "approved": 0,
  "changes_requested": 0,
  "distinct_reviewers": []
 },
 "signals": {
  "needs_rebase": true,
  "ci_failed": true,
  "mergeable_state": "dirty",
  "last_author_activity": "2026-08-15T09:43:43Z",
  "last_reviewer_activity": null,
  "last_reviewer": null,
  "author_silent_days": 33,
  "waiting_on_author_days": 0,
  "days_since_update": 33
 },
 "refs": {
  "mentioned": [
   35793
  ],
  "depends_on": [
   35793
  ],
  "fixes": [],
  "linked_issues": [],
  "references": [
   {
    "number": 35793,
    "type": "pull",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "Implement BIP 54 (Consensus Cleanup) without mainnet activation"
   }
  ],
  "conflicts": [
   35852,
   35657,
   35570,
   35569,
   35301,
   34864,
   32729,
   32468,
   29491,
   28690
  ]
 },
 "stack": {
  "shares_commits_with": [],
  "based_on": [],
  "base_for": []
 },
 "review_paths": [],
 "body": "Implements [BIP 95](https://github.com/bitcoin/bips/blob/master/bip-0095.md) (Testnet 5). Relative to Testnet 4 it removes the 20-minute minimum-difficulty exception, raises the minimum difficulty, and enforces [BIP 54](https://github.com/bitcoin/bips/blob/master/bip-0054.md) from block 1. The Genesis block has not been mined yet.\n\nBased on #35793, only the top five commits belong to this PR.\n\nPer the [discussion in a recent IRC meeting](https://bitcoin-irc.chaincode.com/bitcoin-core-dev/2026-07-30#1242502;): since BIP 95 activates BIP 54 from block 1, this depends on #35793 and won't make the v32 feature freeze. So we can review and settle the changes now, but leave this in draft until #35793 lands. Once reviewers are happy with the state of the draft here we can add the Genesis block and the network can get started without being included in a release. We can then ship a patched v32 release with Testnet 5 included. A solo-mining ckpool endpoint is likely being set up and will be advertised here. There are no DNS or fixed seeds yet.",
 "commits": [
  {
   "sha": "4a6b1c6ffb598a5e96b678b8f9b0948182151857",
   "date": "2026-07-24T14:33:21Z",
   "message": "chainparams: add versionbits deployment for BIP 54"
  },
  {
   "sha": "9fb74e75d01f467d1c9ae8f70500352b4f8cad48",
   "date": "2026-07-24T14:33:21Z",
   "message": "scripted-diff: rename BIP54-sigops constants to MAX_TX_BIP54_SIGOPS\n\nBIP54 counts sigops differently from existing sigops-based checks. Since\nwe are overloading the sigops term, make clear the constant refers to\nBIP54-sigops, not other kinds of pre-existing sigops.\n\nAlso update the functional test framework's constant that has\n\"standardness\" in its name, since we are about to make it consensus\ncritical (func test scripted-diff courtesy of Anthony Towns).\n\n-BEGIN VERIFY SCRIPT-\nsed -i 's/MAX_TX_LEGACY_SIGOPS/MAX_TX_BIP54_SIGOPS/g' $(git grep -l MAX_TX_LEGACY_SIGOPS src/)\nsed -i 's/MAX_STD_LEGACY_SIGOPS/MAX_TX_BIP54_SIGOPS/g' $(git grep -l MAX_STD_LEGACY_SIGOPS)\nsed -i 's/signature operations in validating a transaction./signature operations in a single transaction, per BIP54./' test/functional/test_framework/script_util.py\n-END VERIFY SCRIPT-\n\nCo-Authored-by: Anthony Towns <aj@erisian.com.au>"
  },
  {
   "sha": "9ccf729e7590d48503666414739d7c905a7cfdba",
   "date": "2026-07-24T14:33:21Z",
   "message": "moveonly: move CheckSigopsBIP54 from policy to consensus\n\nMove the function that checks whether a transaction respects the BIP54 sigops rule to the\nconsensus folder (along with the accompanying constant), as it will be made consensus-critical\nin the next commit. Can be reviewed with git's --color-moved option."
  },
  {
   "sha": "39cca6c97e9238a37bdbfea36caf694b7602a9e9",
   "date": "2026-07-24T14:33:21Z",
   "message": "validation: make BIP54 sigops check consensus-critical\n\nWhen BIP54 is active, enforce that block transactions do not violate the BIP54 limit on the\nnumber of legacy sigops present in Scripts that get executed during block validation."
  },
  {
   "sha": "16d8f7c502ac4d3726c50715fa1b593c1a5885ec",
   "date": "2026-07-24T14:33:21Z",
   "message": "qa: add to utilities a version of SignSignature for Taproot inputs\n\nIn Taproot the signature commits to the list of spent outputs."
  },
  {
   "sha": "d75143d39354d723c6a67a290dd03359841f2901",
   "date": "2026-07-24T14:43:22Z",
   "message": "qa: extensive unit tests for BIP54 legacy sigops limit\n\nTest the newly introduced limit with various combinations of inputs and outputs types,\nhistorical transactions, and exercise some implementation-specific edge cases. Record\neach test case and optionally write them to disk as JSON to generate the BIP test vectors."
  },
  {
   "sha": "243e7a762333946c65c44e406cc3064b31301511",
   "date": "2026-07-24T14:43:22Z",
   "message": "fuzz: add a fuzz target for the BIP54 sigops check\n\nThe fuzz target was specifically crafted to support seeding it with the BIP54 test vectors\ngenerated by the unit test in the previous commit."
  },
  {
   "sha": "43f1b9471b3601955adb16b8b98a2894799ef5d2",
   "date": "2026-07-24T14:43:22Z",
   "message": "scripted-diff: rename testnet4 timewarp constant\n\nWe are going to introduce the timewarp fix for mainnet with a greater grace period. Rename\nthe MAX_TIMEWARP value for testnet to differentiate them.\n\n-BEGIN VERIFY SCRIPT-\n\nfor f in $(git grep -l MAX_TIMEWARP); do sed -i \"s/MAX_TIMEWARP/MAX_TIMEWARP_TESTNET4/g\" \"$f\"; done\n\n-END VERIFY SCRIPT-"
  },
  {
   "sha": "6a10f77ef580b7b91799e998128583c5acc9c4dc",
   "date": "2026-07-24T14:43:22Z",
   "message": "miner: update a timewarp comment to refer specifically to BIP 54"
  },
  {
   "sha": "d96b2c79dcce9809125b3f1554f92959a4bf3dae",
   "date": "2026-07-24T14:43:22Z",
   "message": "validation: prevent timewarp attacks with a 2h grace period"
  },
  {
   "sha": "87956252426de3d4fd043b68f9b6ad13e2a3f154",
   "date": "2026-07-24T14:43:22Z",
   "message": "validation: prevent negative difficulty adjustment intervals"
  },
  {
   "sha": "da0b9ecf05553d7f58f8cbb23a568738936f4715",
   "date": "2026-07-24T14:43:22Z",
   "message": "qa: BIP54 test vectors for timewarp and Murch-Zawy\n\nDocumentation about the test vectors, including about their structure and content, as well as\nreproduction instructions, is available here: https://github.com/bitcoin/bips/tree/master/bip-0054/test_vectors"
  },
  {
   "sha": "87b003f19dc83637a84593a15d0b2fd5f556cdc6",
   "date": "2026-07-24T14:43:22Z",
   "message": "validation: enforce that coinbase transactions are timelocked to block height\n\nWhen BIP 54 is active, coinbase transactions must have their nLockTime field set to the block height\nminus 1 (since it encodes the last height at which the transaction is invalid), and their nSequence\nfield may be anything but the maximum value (which indicates \"final\", bypassing timelock\nvalidation)."
  },
  {
   "sha": "534d4766d1ec9eb7e97a7fe7f356a92705222094",
   "date": "2026-07-24T14:43:22Z",
   "message": "qa: BIP54 test vectors for restrictions on coinbase transactions\n\nDocumentation about the test vectors' structure and content, as well as instructions for generating\nthem is available at https://github.com/bitcoin/bips/tree/master/bip-0054/test_vectors ."
  },
  {
   "sha": "e5c1b4aae9f9f0ab526f24042cb48d39d1eb8d46",
   "date": "2026-07-24T14:43:22Z",
   "message": "Avoid creating <= 64-byte transactions in most functional tests."
  },
  {
   "sha": "32bfb7b6e1939079486cedf4bac523eef1e46086",
   "date": "2026-07-24T14:43:22Z",
   "message": "[test] Separate 64B and 63B tx size tests"
  },
  {
   "sha": "b1ec5a6f4f5055e1590ebc2414693b11ff499ee2",
   "date": "2026-07-24T14:43:22Z",
   "message": "validation: make 64-byte transactions invalid\n\n64-byte transactions are also now treated as a consensus failure in\nPreChecks, like BIP54-sigops check failures. Note this only changes the\nRPC error, and not the disconnection behaviour in P2P since\n266dd0e10d08c0bfde63205db15d6c210a021b90."
  },
  {
   "sha": "0719bf5164f540e8333d6a1a88d2ce28a3cf9c5c",
   "date": "2026-07-24T14:43:22Z",
   "message": "qa: unit tests for BIP54 rule on 64-byte transactions (with JSON test vectors)\n\nThis adds tests exercising the bounds of the checks on the invalid transaction size, for various\ntypes of transactions (legacy, Segwit, bytes in input/output to get to 64 bytes) as well as\nsanity checking against some known historical violations.\n\nThanks to Chris Stewart for digging up the historical violations to this rule."
  },
  {
   "sha": "0acde965fa1b8b2ecec0ae62695f816b780a3214",
   "date": "2026-07-24T14:43:22Z",
   "message": "qa: end-to-end test all BIP54 mitigations\n\nThe previously introduced unit tests extensively test the specific implementation of each\nmitigation. This functional test complements them by end-to-end testing all mitigations.\nFor the added timestamp constraints, it mimicks how they would get exploited (by implementing pseudo\ntimewarp and Murch-Zawy attacks) and demonstrates those exploits are not possible anymore after\nBIP54 activates."
  },
  {
   "sha": "9630491bf2135d03dac586d3492cfca9939f6fbb",
   "date": "2026-07-24T14:43:22Z",
   "message": "doc: add a BIP 54 entry to bips.md"
  },
  {
   "sha": "f7bc6bdb367b6d31c4bec29bb756a2f6a010c3bc",
   "date": "2026-08-01T18:59:55Z",
   "message": "testnet: Introduce Testnet5 (BIP95)\n\nTestnet 5 is specified in BIP95. It drops the 20-minute minimum-difficulty\nexception of Testnet 3/4 and raises the minimum difficulty to nBits\n0x1a0fffff."
  },
  {
   "sha": "768da947a7ad58d1b8abb39a3944d66279c163b5",
   "date": "2026-08-01T18:59:55Z",
   "message": "kernel: Add Testnet5 (BIP95) to the C API"
  },
  {
   "sha": "5777e69d25e66963ed5a7c799ba7ce5ebd3b539b",
   "date": "2026-08-01T18:59:55Z",
   "message": "testnet: Activate BIP54 on Testnet5 (BIP95)\n\nBIP95 enforces the BIP54 rules on Testnet 5 from block 1. This also covers\ntimewarp, so BIP94 is not enforced."
  },
  {
   "sha": "c168a088b3b4a6254ddcece76068b26b63dd07ad",
   "date": "2026-08-01T18:59:55Z",
   "message": "doc: add BIP95 entry to bips.md"
  },
  {
   "sha": "31ed5baf687be3c1dd0ef283cf29b776ecf1698b",
   "date": "2026-08-01T18:59:55Z",
   "message": "doc: add release note for Testnet5 (BIP95)"
  }
 ],
 "timeline": [
  {
   "t": "2026-08-01T19:16:01Z",
   "kind": "force_push",
   "who": "fjahr",
   "commit": "31ed5baf687be3c1dd0ef283cf29b776ecf1698b"
  },
  {
   "t": "2026-08-15T09:39:58Z",
   "kind": "force_push",
   "who": "fjahr",
   "commit": "c83adca5e7b43f4c4756336c6049b9801ed503fa"
  },
  {
   "t": "2026-08-15T09:43:43Z",
   "kind": "force_push",
   "who": "fjahr",
   "commit": "31ed5baf687be3c1dd0ef283cf29b776ecf1698b"
  }
 ],
 "labels_log": [
  {
   "t": "2026-08-01T19:16:28Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-01T21:13:00Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-14T17:49:53Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-15T11:36:49Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  }
 ],
 "state_log": [],
 "text_chars": 6379,
 "text_tokens_estimate": 1594,
 "changed_paths": [
  "doc/bips.md",
  "doc/release-notes-testnet5.md",
  "src/CMakeLists.txt",
  "src/bitcoin-cli.cpp",
  "src/chainparams.cpp",
  "src/chainparamsbase.cpp",
  "src/chainparamsbase.h",
  "src/common/args.cpp",
  "src/common/args.h",
  "src/consensus/consensus.h",
  "src/consensus/params.h",
  "src/consensus/tx_verify.cpp",
  "src/consensus/tx_verify.h",
  "src/deploymentinfo.cpp",
  "src/external_signer.h",
  "src/init.cpp",
  "src/kernel/bitcoinkernel.cpp",
  "src/kernel/bitcoinkernel.h",
  "src/kernel/bitcoinkernel_wrapper.h",
  "src/kernel/chainparams.cpp",
  "src/kernel/chainparams.h",
  "src/node/miner.cpp",
  "src/policy/policy.cpp",
  "src/policy/policy.h",
  "src/qt/guiconstants.h",
  "src/qt/guiutil.cpp",
  "src/qt/networkstyle.cpp",
  "src/rpc/blockchain.cpp",
  "src/test/CMakeLists.txt",
  "src/test/argsman_tests.cpp",
  "src/test/bip54_tests.cpp",
  "src/test/data/bip54_coinbases.json",
  "src/test/data/bip54_timestamps.json",
  "src/test/fuzz/CMakeLists.txt",
  "src/test/fuzz/bip54.cpp",
  "src/test/fuzz/coins_view.cpp",
  "src/test/pow_tests.cpp",
  "src/test/transaction_tests.cpp",
  "src/test/util/transaction_utils.cpp",
  "src/test/util/transaction_utils.h",
  "src/test/versionbits_tests.cpp",
  "src/txmempool.cpp",
  "src/util/chaintype.cpp",
  "src/util/chaintype.h",
  "src/validation.cpp",
  "test/functional/data/invalid_txs.py",
  "test/functional/feature_bip54.py",
  "test/functional/feature_block.py",
  "test/functional/feature_taproot.py",
  "test/functional/mempool_accept.py",
  "test/functional/mempool_sigoplimit.py",
  "test/functional/mining_basic.py",
  "test/functional/rpc_blockchain.py",
  "test/functional/rpc_getblockstats.py",
  "test/functional/test_framework/blocktools.py",
  "test/functional/test_framework/messages.py",
  "test/functional/test_framework/script_util.py",
  "test/functional/test_runner.py",
  "test/functional/wallet_migration.py"
 ],
 "files": [
  {
   "path": "doc/bips.md",
   "add": 2,
   "del": 0
  },
  {
   "path": "doc/release-notes-testnet5.md",
   "add": 7,
   "del": 0
  },
  {
   "path": "src/CMakeLists.txt",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/bitcoin-cli.cpp",
   "add": 4,
   "del": 1
  },
  {
   "path": "src/chainparams.cpp",
   "add": 5,
   "del": 0
  },
  {
   "path": "src/chainparamsbase.cpp",
   "add": 4,
   "del": 1
  },
  {
   "path": "src/chainparamsbase.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/common/args.cpp",
   "add": 5,
   "del": 2
  },
  {
   "path": "src/common/args.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/consensus/consensus.h",
   "add": 16,
   "del": 1
  },
  {
   "path": "src/consensus/params.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/consensus/tx_verify.cpp",
   "add": 31,
   "del": 1
  },
  {
   "path": "src/consensus/tx_verify.h",
   "add": 7,
   "del": 1
  },
  {
   "path": "src/deploymentinfo.cpp",
   "add": 4,
   "del": 0
  },
  {
   "path": "src/external_signer.h",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/init.cpp",
   "add": 7,
   "del": 5
  },
  {
   "path": "src/kernel/bitcoinkernel.cpp",
   "add": 3,
   "del": 0
  },
  {
   "path": "src/kernel/bitcoinkernel.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/kernel/bitcoinkernel_wrapper.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/kernel/chainparams.cpp",
   "add": 142,
   "del": 0
  },
  {
   "path": "src/kernel/chainparams.h",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/node/miner.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/policy/policy.cpp",
   "add": 1,
   "del": 36
  },
  {
   "path": "src/policy/policy.h",
   "add": 2,
   "del": 3
  },
  {
   "path": "src/qt/guiconstants.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/qt/guiutil.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/qt/networkstyle.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/rpc/blockchain.cpp",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/CMakeLists.txt",
   "add": 3,
   "del": 0
  },
  {
   "path": "src/test/argsman_tests.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/test/bip54_tests.cpp",
   "add": 1608,
   "del": 0
  },
  {
   "path": "src/test/data/bip54_coinbases.json",
   "add": 80,
   "del": 0
  },
  {
   "path": "src/test/data/bip54_timestamps.json",
   "add": 4134,
   "del": 0
  },
  {
   "path": "src/test/fuzz/CMakeLists.txt",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/test/fuzz/bip54.cpp",
   "add": 54,
   "del": 0
  },
  {
   "path": "src/test/fuzz/coins_view.cpp",
   "add": 6,
   "del": 1
  },
  {
   "path": "src/test/pow_tests.cpp",
   "add": 5,
   "del": 0
  },
  {
   "path": "src/test/transaction_tests.cpp",
   "add": 26,
   "del": 24
  },
  {
   "path": "src/test/util/transaction_utils.cpp",
   "add": 14,
   "del": 0
  },
  {
   "path": "src/test/util/transaction_utils.h",
   "add": 3,
   "del": 0
  },
  {
   "path": "src/test/versionbits_tests.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/txmempool.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/util/chaintype.cpp",
   "add": 4,
   "del": 0
  },
  {
   "path": "src/util/chaintype.h",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/validation.cpp",
   "add": 54,
   "del": 14
  },
  {
   "path": "test/functional/data/invalid_txs.py",
   "add": 17,
   "del": 3
  },
  {
   "path": "test/functional/feature_bip54.py",
   "add": 417,
   "del": 0
  },
  {
   "path": "test/functional/feature_block.py",
   "add": 9,
   "del": 1
  },
  {
   "path": "test/functional/feature_taproot.py",
   "add": 5,
   "del": 3
  },
  {
   "path": "test/functional/mempool_accept.py",
   "add": 1,
   "del": 1
  },
  {
   "path": "test/functional/mempool_sigoplimit.py",
   "add": 8,
   "del": 9
  },
  {
   "path": "test/functional/mining_basic.py",
   "add": 5,
   "del": 5
  },
  {
   "path": "test/functional/rpc_blockchain.py",
   "add": 13,
   "del": 0
  },
  {
   "path": "test/functional/rpc_getblockstats.py",
   "add": 3,
   "del": 0
  },
  {
   "path": "test/functional/test_framework/blocktools.py",
   "add": 4,
   "del": 2
  },
  {
   "path": "test/functional/test_framework/messages.py",
   "add": 1,
   "del": 0
  },
  {
   "path": "test/functional/test_framework/script_util.py",
   "add": 2,
   "del": 2
  },
  {
   "path": "test/functional/test_runner.py",
   "add": 1,
   "del": 0
  },
  {
   "path": "test/functional/wallet_migration.py",
   "add": 4,
   "del": 2
  }
 ],
 "test_lines": 6481,
 "git": {
  "head": "31ed5baf687be3c1dd0ef283cf29b776ecf1698b",
  "head_matches_backup": true,
  "base": "610dd320d1a80838fdf30ed1cb2e6ae1ec717f74",
  "commits": [
   {
    "sha": "4a6b1c6ffb",
    "subject": "chainparams: add versionbits deployment for BIP 54",
    "files": 7,
    "add": 49,
    "del": 2
   },
   {
    "sha": "9fb74e75d0",
    "subject": "scripted-diff: rename BIP54-sigops constants to MAX_TX_BIP54_SIGOPS",
    "files": 5,
    "add": 11,
    "del": 11
   },
   {
    "sha": "9ccf729e75",
    "subject": "moveonly: move CheckSigopsBIP54 from policy to consensus",
    "files": 6,
    "add": 37,
    "del": 33
   },
   {
    "sha": "39cca6c97e",
    "subject": "validation: make BIP54 sigops check consensus-critical",
    "files": 8,
    "add": 44,
    "del": 39
   },
   {
    "sha": "16d8f7c502",
    "subject": "qa: add to utilities a version of SignSignature for Taproot inputs",
    "files": 2,
    "add": 17,
    "del": 0
   },
   {
    "sha": "d75143d393",
    "subject": "qa: extensive unit tests for BIP54 legacy sigops limit",
    "files": 2,
    "add": 1311,
    "del": 0
   },
   {
    "sha": "243e7a7623",
    "subject": "fuzz: add a fuzz target for the BIP54 sigops check",
    "files": 2,
    "add": 55,
    "del": 0
   },
   {
    "sha": "43f1b9471b",
    "subject": "scripted-diff: rename testnet4 timewarp constant",
    "files": 4,
    "add": 7,
    "del": 7
   },
   {
    "sha": "6a10f77ef5",
    "subject": "miner: update a timewarp comment to refer specifically to BIP 54",
    "files": 1,
    "add": 2,
    "del": 2
   },
   {
    "sha": "d96b2c79dc",
    "subject": "validation: prevent timewarp attacks with a 2h grace period",
    "files": 2,
    "add": 20,
    "del": 9
   },
   {
    "sha": "8795625242",
    "subject": "validation: prevent negative difficulty adjustment intervals",
    "files": 1,
    "add": 14,
    "del": 0
   },
   {
    "sha": "da0b9ecf05",
    "subject": "qa: BIP54 test vectors for timewarp and Murch-Zawy",
    "files": 3,
    "add": 4218,
    "del": 0
   },
   {
    "sha": "87b003f19d",
    "subject": "validation: enforce that coinbase transactions are timelocked to block height",
    "files": 5,
    "add": 31,
    "del": 5
   },
   {
    "sha": "534d4766d1",
    "subject": "qa: BIP54 test vectors for restrictions on coinbase transactions",
    "files": 3,
    "add": 126,
    "del": 0
   },
   {
    "sha": "e5c1b4aae9",
    "subject": "Avoid creating <= 64-byte transactions in most functional tests.",
    "files": 1,
    "add": 3,
    "del": 1
   },
   {
    "sha": "32bfb7b6e1",
    "subject": "[test] Separate 64B and 63B tx size tests",
    "files": 1,
    "add": 14,
    "del": 1
   },
   {
    "sha": "b1ec5a6f4f",
    "subject": "validation: make 64-byte transactions invalid",
    "files": 6,
    "add": 25,
    "del": 8
   },
   {
    "sha": "0719bf5164",
    "subject": "qa: unit tests for BIP54 rule on 64-byte transactions (with JSON test vectors)",
    "files": 1,
    "add": 170,
    "del": 0
   },
   {
    "sha": "0acde965fa",
    "subject": "qa: end-to-end test all BIP54 mitigations",
    "files": 2,
    "add": 418,
    "del": 0
   },
   {
    "sha": "9630491bf2",
    "subject": "doc: add a BIP 54 entry to bips.md",
    "files": 1,
    "add": 1,
    "del": 0
   },
   {
    "sha": "f7bc6bdb36",
    "subject": "testnet: Introduce Testnet5 (BIP95)",
    "files": 19,
    "add": 158,
    "del": 15
   },
   {
    "sha": "768da947a7",
    "subject": "kernel: Add Testnet5 (BIP95) to the C API",
    "files": 3,
    "add": 5,
    "del": 0
   },
   {
    "sha": "5777e69d25",
    "subject": "testnet: Activate BIP54 on Testnet5 (BIP95)",
    "files": 1,
    "add": 4,
    "del": 1
   },
   {
    "sha": "c168a088b3",
    "subject": "doc: add BIP95 entry to bips.md",
    "files": 1,
    "add": 2,
    "del": 1
   },
   {
    "sha": "31ed5baf68",
    "subject": "doc: add release note for Testnet5 (BIP95)",
    "files": 1,
    "add": 7,
    "del": 0
   }
  ],
  "patch_truncated": true
 },
 "input_hash": "58bf477388609275",
 "extracted_at": "2026-09-17T16:15:31+00:00"
}