{
  "schemaVersion": 1,
  "id": "fork-rehearsal",
  "title": "BLAKE2b Fork Rehearsal",
  "status": "verified",
  "network": "isolated-regtest",
  "startedAt": "2026-09-11T23:41:25.937Z",
  "verifiedAt": "2026-09-11T23:41:45.652Z",
  "reproduction": "node scripts/verify-fork.mjs",
  "checkCommand": "node scripts/verify-fork.mjs --check",
  "scope": "Native P2WPKH, SIGHASH_ALL (0x01) and SIGHASH_ALL|UNIFIED (0x21). Not default Signet or mainnet.",
  "software": [
    {
      "id": "core",
      "version": "Bitcoin Core daemon version v29.0.0",
      "archive": {
        "version": "29.0",
        "archive": "bitcoin-29.0-arm64-apple-darwin.tar.gz",
        "url": "https://bitcoincore.org/bin/bitcoin-core-29.0/",
        "sha256": "34431c582a0399dd42e1276d87d25306cbdde0217f6744bd55a2945986645dda"
      },
      "daemonSHA256": "f4b9d78a74643c726d022840ca506dc317d41f8825aaef80b7bb705e12c5fda8",
      "cliSHA256": "69437b987b4ad3aef1f478a3091d8e0032cb4183cd14d096982b292a2ba13ea1",
      "rpcVersion": 290000,
      "genesis": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206",
      "rpcPort": 57084,
      "p2pPort": 57085,
      "initialBlocks": 0,
      "networkActive": false,
      "peerCount": 0
    },
    {
      "id": "knots",
      "version": "Bitcoin Knots daemon version v29.4.1.knots20260508",
      "archive": {
        "version": "29.4.1.knots20260508",
        "archive": "bitcoin-29.4.1.knots20260508-arm64-apple-darwin.tar.gz",
        "url": "https://bitcoinknots.org/files/29.x/29.4.1.knots20260508/",
        "sha256": "c8b36d2d81cc25560680445b5b92339fb128af0af4654e7b75323f12b2866afc"
      },
      "daemonSHA256": "76881eecc76898e901b60fbea4cfd926c49bea9a8fd1ea7aab67f6fdd408f61b",
      "cliSHA256": "0a3d11397b3b72e7f049922d8a359a93f6ebce3980298aeaced5e3dfd1bcc645",
      "rpcVersion": 290401,
      "genesis": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206",
      "rpcPort": 57091,
      "p2pPort": 57092,
      "initialBlocks": 0,
      "networkActive": false,
      "peerCount": 0
    }
  ],
  "sourceArchive": {
    "version": "29.4.1.knots20260508",
    "archive": "bitcoin-29.4.1.knots20260508.tar.gz",
    "url": "https://bitcoinknots.org/files/29.x/29.4.1.knots20260508/",
    "sha256": "da43e8c790bed9d8c432d07a10271084537dbd61de3ba0f7bd49f959adcb9b8f"
  },
  "provenance": {
    "license": "MIT",
    "licenseURL": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/COPYING",
    "signatureMessageSource": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/test/functional/test_framework/script.py",
    "usage": "Runtime import from checksum-pinned upstream source; the upstream Python implementation is not vendored.",
    "attribution": "Bitcoin Core developers, Bitcoin Developers, and Bitcoin Knots contributors. See docs/fork-rehearsal.md."
  },
  "scriptSHA256": "1d3554713502421c2896f6beab2a3001ee275a1680a238b4e51bb65cbe1e8cb4",
  "isolation": {
    "flags": [
      "-regtest=1",
      "-server=1",
      "-daemon=0",
      "-listen=0",
      "-connect=0",
      "-discover=0",
      "-dnsseed=0",
      "-fixedseeds=0",
      "-listenonion=0",
      "-networkactive=0",
      "-rpcbind=127.0.0.1",
      "-rpcallowip=127.0.0.1",
      "-persistmempool=0",
      "-dbcache=64"
    ],
    "freshDatadirs": true,
    "existingWalletsUsed": false,
    "p2pNetworkingEnabled": false,
    "publicFundsUsed": false,
    "processesStopped": true,
    "temporaryDirectoryRemoved": true
  },
  "activation": {
    "height": 105,
    "arguments": [
      "-testactivationheight=blake2b@105",
      "-blake2b_headline=BitcoinSignetFaucet.com isolated rehearsal",
      "-rdtsexpiry=2000000000"
    ],
    "rdtsExpiry": 2000000000,
    "mempoolBeforeActivation": "Unified signature accepted at height 103 because activation is scheduled.",
    "blockBeforeActivation": "Explicit block containing the unified signature rejected at candidate height 104.",
    "coreHeaderBytes": 80,
    "knotsHeaderBytes": 164
  },
  "timeline": [
    {
      "height": 0,
      "event": "Two fresh regtest validators, networking disabled"
    },
    {
      "height": 102,
      "event": "Three 100,000-sat P2WPKH outputs created in shared history"
    },
    {
      "height": 104,
      "event": "Identical shared tip and unspent outpoints verified on both nodes",
      "hash": "1fef79a14b47ca9b92d594c750046feb2661db4d573dd7c957077997e97a253e"
    },
    {
      "height": 105,
      "event": "Core SHA256d and Knots BLAKE2b branches diverge"
    },
    {
      "height": 105,
      "event": "Ordinary replay succeeds in both directions; unified signature accepted only by Knots"
    },
    {
      "height": 106,
      "event": "Unified spend confirmed by Knots; original outpoint remains unspent on Core"
    }
  ],
  "matrix": [
    {
      "id": "ordinary-core-to-knots",
      "label": "Core ordinary signature replayed on Knots",
      "txid": "5abc3a6960005cba3aba54c457c1af7721a817dfe3751f23e3d31274d12dcca6",
      "wtxid": "9fe372c68ded3c1ab5b3f2debcdf9a021715b1e6bdf6ef56b248bff2a4e6353a",
      "signatureHashType": "0x01",
      "inputValueSats": 100000,
      "outputValueSats": 99000,
      "feeSats": 1000,
      "weight": 437,
      "vsize": 110,
      "core": {
        "accepted": true,
        "reason": "accepted",
        "details": null,
        "vsize": 110,
        "fees": {
          "base": 0.00001,
          "effective-feerate": 0.0000909,
          "effective-includes": [
            "9fe372c68ded3c1ab5b3f2debcdf9a021715b1e6bdf6ef56b248bff2a4e6353a"
          ]
        }
      },
      "knots": {
        "accepted": true,
        "reason": "accepted",
        "details": null,
        "vsize": 110,
        "fees": {
          "base": 0.00001,
          "effective-feerate": 0.0000909,
          "effective-includes": [
            "9fe372c68ded3c1ab5b3f2debcdf9a021715b1e6bdf6ef56b248bff2a4e6353a"
          ]
        }
      }
    },
    {
      "id": "ordinary-knots-to-core",
      "label": "Knots -walletoldsigs ordinary signature replayed on Core",
      "txid": "b93c3f15e48178847d56a2c1f94b9c4ccdfbf35b134b2845a5586c1847edec6e",
      "wtxid": "f12f3828a35e4fef8f7bc7074776c79746e11035d4da08abe914f740765373da",
      "signatureHashType": "0x01",
      "inputValueSats": 100000,
      "outputValueSats": 99000,
      "feeSats": 1000,
      "weight": 437,
      "vsize": 110,
      "core": {
        "accepted": true,
        "reason": "accepted",
        "details": null,
        "vsize": 110,
        "fees": {
          "base": 0.00001,
          "effective-feerate": 0.0000909,
          "effective-includes": [
            "f12f3828a35e4fef8f7bc7074776c79746e11035d4da08abe914f740765373da"
          ]
        }
      },
      "knots": {
        "accepted": true,
        "reason": "accepted",
        "details": null,
        "vsize": 110,
        "fees": {
          "base": 0.00001,
          "effective-feerate": 0.0000909,
          "effective-includes": [
            "f12f3828a35e4fef8f7bc7074776c79746e11035d4da08abe914f740765373da"
          ]
        }
      }
    },
    {
      "id": "ordinary-comparison",
      "label": "Ordinary signature on the unified comparison outpoint",
      "txid": "cc0043b88641a791a3acdffc35e50ee9a9f7611b6c5b10af70a5b63617c03da3",
      "wtxid": "01a7912dc9364aa402ef31f2a1ad46c96ebddedfbb76edfd1254ca55dc4f8f1b",
      "signatureHashType": "0x01",
      "inputValueSats": 100000,
      "outputValueSats": 99000,
      "feeSats": 1000,
      "weight": 437,
      "vsize": 110,
      "core": {
        "accepted": true,
        "reason": "accepted",
        "details": null,
        "vsize": 110,
        "fees": {
          "base": 0.00001,
          "effective-feerate": 0.0000909,
          "effective-includes": [
            "01a7912dc9364aa402ef31f2a1ad46c96ebddedfbb76edfd1254ca55dc4f8f1b"
          ]
        }
      },
      "knots": {
        "accepted": true,
        "reason": "accepted",
        "details": null,
        "vsize": 110,
        "fees": {
          "base": 0.00001,
          "effective-feerate": 0.0000909,
          "effective-includes": [
            "01a7912dc9364aa402ef31f2a1ad46c96ebddedfbb76edfd1254ca55dc4f8f1b"
          ]
        }
      }
    },
    {
      "id": "unified-knots-to-core",
      "label": "Knots ALL|UNIFIED signature offered to Core",
      "txid": "cc0043b88641a791a3acdffc35e50ee9a9f7611b6c5b10af70a5b63617c03da3",
      "wtxid": "f2b8419dd9b4d101d28a85b4a3b47d4fc6033f75d04b5bd489db804883d0a02e",
      "signatureHashType": "0x21",
      "inputValueSats": 100000,
      "outputValueSats": 99000,
      "feeSats": 1000,
      "weight": 437,
      "vsize": 110,
      "core": {
        "accepted": false,
        "reason": "mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element)",
        "details": "mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element), input 0 of cc0043b88641a791a3acdffc35e50ee9a9f7611b6c5b10af70a5b63617c03da3 (wtxid f2b8419dd9b4d101d28a85b4a3b47d4fc6033f75d04b5bd489db804883d0a02e), spending be59f3e3ead7a95d6b378d4fd71898c798e01b210482c3b688c019ab20545512:2",
        "vsize": null,
        "fees": null
      },
      "knots": {
        "accepted": true,
        "reason": "accepted",
        "details": null,
        "vsize": 110,
        "fees": {
          "base": 0.00001,
          "effective-feerate": 0.0000909,
          "effective-includes": [
            "f2b8419dd9b4d101d28a85b4a3b47d4fc6033f75d04b5bd489db804883d0a02e"
          ]
        }
      }
    },
    {
      "id": "flag-only-tampering",
      "label": "Opt-in byte added without re-signing",
      "txid": "cc0043b88641a791a3acdffc35e50ee9a9f7611b6c5b10af70a5b63617c03da3",
      "wtxid": "70dfd1a39259a60bc24d3563d42ceefdbf80d9d504f8d9de3f24a77ba5616d8f",
      "signatureHashType": "0x21",
      "inputValueSats": 100000,
      "outputValueSats": 99000,
      "feeSats": 1000,
      "weight": 437,
      "vsize": 110,
      "core": {
        "accepted": false,
        "reason": "mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element)",
        "details": "mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element), input 0 of cc0043b88641a791a3acdffc35e50ee9a9f7611b6c5b10af70a5b63617c03da3 (wtxid 70dfd1a39259a60bc24d3563d42ceefdbf80d9d504f8d9de3f24a77ba5616d8f), spending be59f3e3ead7a95d6b378d4fd71898c798e01b210482c3b688c019ab20545512:2",
        "vsize": null,
        "fees": null
      },
      "knots": {
        "accepted": false,
        "reason": "mempool-script-verify-flag-failed (Signature must be zero for failed CHECK(MULTI)SIG operation)",
        "details": "mempool-script-verify-flag-failed (Signature must be zero for failed CHECK(MULTI)SIG operation), input 0 of cc0043b88641a791a3acdffc35e50ee9a9f7611b6c5b10af70a5b63617c03da3 (wtxid 70dfd1a39259a60bc24d3563d42ceefdbf80d9d504f8d9de3f24a77ba5616d8f), spending be59f3e3ead7a95d6b378d4fd71898c798e01b210482c3b688c019ab20545512:2",
        "vsize": null,
        "fees": null
      }
    },
    {
      "id": "stripped-unified-flag",
      "label": "Opt-in byte removed without re-signing",
      "txid": "cc0043b88641a791a3acdffc35e50ee9a9f7611b6c5b10af70a5b63617c03da3",
      "wtxid": "306c22fa2fdc21d6264efaae5d11167e4a94a1e05d1247f92425ec270c74bef7",
      "signatureHashType": "0x01",
      "inputValueSats": 100000,
      "outputValueSats": 99000,
      "feeSats": 1000,
      "weight": 437,
      "vsize": 110,
      "core": {
        "accepted": false,
        "reason": "mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element)",
        "details": "mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element), input 0 of cc0043b88641a791a3acdffc35e50ee9a9f7611b6c5b10af70a5b63617c03da3 (wtxid 306c22fa2fdc21d6264efaae5d11167e4a94a1e05d1247f92425ec270c74bef7), spending be59f3e3ead7a95d6b378d4fd71898c798e01b210482c3b688c019ab20545512:2",
        "vsize": null,
        "fees": null
      },
      "knots": {
        "accepted": false,
        "reason": "mempool-script-verify-flag-failed (Signature must be zero for failed CHECK(MULTI)SIG operation)",
        "details": "mempool-script-verify-flag-failed (Signature must be zero for failed CHECK(MULTI)SIG operation), input 0 of cc0043b88641a791a3acdffc35e50ee9a9f7611b6c5b10af70a5b63617c03da3 (wtxid 306c22fa2fdc21d6264efaae5d11167e4a94a1e05d1247f92425ec270c74bef7), spending be59f3e3ead7a95d6b378d4fd71898c798e01b210482c3b688c019ab20545512:2",
        "vsize": null,
        "fees": null
      }
    }
  ],
  "signatureComparison": {
    "unsigned": "020000000112555420ab19c088b6c38204211be098c79818d74f8d376b5da9d7eae3f359be0200000000fdffffff01b882010000000000160014751e76e8199196d454941c45d1b3a323f1433bd600000000",
    "ordinary": "0200000000010112555420ab19c088b6c38204211be098c79818d74f8d376b5da9d7eae3f359be0200000000fdffffff01b882010000000000160014751e76e8199196d454941c45d1b3a323f1433bd60247304402206c5ae81c6f5a58ce7739a04f8ddc870150755208ddca068ede6ffd74c9f473ee022032f68e0c0b928cfd8870fd436299d186258d3d18f6108c31fcbcfe57787c467c01210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179800000000",
    "unified": "0200000000010112555420ab19c088b6c38204211be098c79818d74f8d376b5da9d7eae3f359be0200000000fdffffff01b882010000000000160014751e76e8199196d454941c45d1b3a323f1433bd602473044022022268ff8842bad8fb4244534484b9c7552c8dddd2ea3a0b236f2688a77b9690a022041c47289b04205d99b26aa7c215e7f2b1022b52b23b16a11bd905d34e5b994c421210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179800000000",
    "valueSats": 100000,
    "scriptPubKey": "0014751e76e8199196d454941c45d1b3a323f1433bd6",
    "scriptCode": "76a914751e76e8199196d454941c45d1b3a323f1433bd688ac",
    "publicKey": "0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
    "unifiedMessageHex": "0021020000000000000000381f956a46d618d17116632692a392c47850b5b6a5a6fa512dbb619018474fb7184c0ede118ec8cd31f699524bae48a81ed01ded5f8d08f2f4ff4286b33b0270d4a1b0f5cf5978e87850ef384c7fb67eb6b4ce799ad2d149db866b5d7fdc49ac23e9829bfb4e23fbd3c4848baa035af15d73bcb83e510f7f097f90a21a4280d2fdf9beda0ccfeaea87508e2587402f199dc2579556562a8dcba3829221b94bc301000000001976a914751e76e8199196d454941c45d1b3a323f1433bd688ac",
    "ordinaryMessageHex": "02000000b8555e174a15f1e303ac2b202516629c35a490afba5f0693b61cbf3d081aebffcaf35e5224de16efa3ccaf41070f6e7b9432b6f79551e629fca9d1c03b43bc5212555420ab19c088b6c38204211be098c79818d74f8d376b5da9d7eae3f359be020000001976a914751e76e8199196d454941c45d1b3a323f1433bd688aca086010000000000fdffffffde108224c53a714637d2456adfb01cc4dd47057bf4cf2d462c626e65b001d6020000000001000000",
    "ordinaryDigestHex": "c20de8428f5c92c65f2748b47736e0305a99a28a4a5a3311dc0dad09bac7c853",
    "unifiedDigestHex": "16e8390a1d7e9623ef8485aeb25fb7ee6d511bea4b661661fa77f1f59e9ac080",
    "coreDigestForUnifiedByteHex": "cceaada8703d7a1459ef3d35a8fe7881fa43c40580b924d333718e3e8603ab84",
    "ordinarySignatureVerified": true,
    "unifiedSignatureVerified": true,
    "unifiedSignatureValidForCoreDigest": false,
    "sameNonWitnessTransaction": true,
    "messageImplementation": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/test/functional/test_framework/script.py",
    "unifiedDomainTag": "UnifiedSighash",
    "ordinaryHash": "SHA256d",
    "unifiedHash": "tagged SHA256"
  },
  "transactionDiff": {
    "sameInput": true,
    "sameOutputs": true,
    "sameVersion": true,
    "sameLocktime": true,
    "sameTxid": true,
    "differentWtxid": true,
    "changedFields": [
      "input[0].witness[0] (ECDSA signature and sighash byte)"
    ],
    "ordinaryExample": "ordinary-comparison",
    "unifiedExample": "unified-knots-to-core"
  },
  "consensusEvidence": {
    "coreBlockRejection": "core generateblock: error code: -25\nerror message:\nTestBlockValidity failed: mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element), input 0 of cc0043b88641a791a3acdffc35e50ee9a9f7611b6c5b10af70a5b63617c03da3 (wtxid f2b8419dd9b4d101d28a85b4a3b47d4fc6033f75d04b5bd489db804883d0a02e), spending be59f3e3ead7a95d6b378d4fd71898c798e01b210482c3b688c019ab20545512:2",
    "knotsConfirmedBlock": "3b204f3e421976fe3995ec010377034b7601d148c1398d9c72fde18209346f42",
    "knotsConfirmedHeight": 106,
    "sameOutpointStillUnspentOnCore": true
  },
  "sources": [
    {
      "path": "COPYING",
      "url": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/COPYING",
      "sha256": "7c4a87f43afaf667b4c2187af92ebdd27310a24cec113f973e058e3300a76002"
    },
    {
      "path": "doc/unified-sighash.md",
      "url": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/doc/unified-sighash.md",
      "sha256": "99809b7f3c1a77deb38ac41a874bdfb6f14fe847c5e1e8b0f0899481c31df373"
    },
    {
      "path": "src/kernel/chainparams.cpp",
      "url": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/src/kernel/chainparams.cpp",
      "sha256": "f5774faa393a666a4f3b8c17a6f7b2c99d70c4b89b964fd4475422d6c6a2ffed"
    },
    {
      "path": "src/chainparams.cpp",
      "url": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/src/chainparams.cpp",
      "sha256": "167f081beed21ae5f51b6891d37159495123d4a03d60ff7babcb2acbe81b4f38"
    },
    {
      "path": "src/validation.cpp",
      "url": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/src/validation.cpp",
      "sha256": "05dd173aeac151ca81807fa85c2c1bb4db9790b53f7ed53d657735e8eb3c054f"
    },
    {
      "path": "src/script/interpreter.cpp",
      "url": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/src/script/interpreter.cpp",
      "sha256": "1375c6c66f70a959263444c6eb3bace92fe4eedcb3f2ce6e928fa74af0c2ee5d"
    },
    {
      "path": "src/script/interpreter.h",
      "url": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/src/script/interpreter.h",
      "sha256": "54f144ffbc13a2dfbe86967d9d77e8665cc027a7e716d0f1f4fff2f1952b480e"
    },
    {
      "path": "src/common/sighash_rules.cpp",
      "url": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/src/common/sighash_rules.cpp",
      "sha256": "630f79212c1e0eda1131df507b68a4a9d35209be760cd7b217b9c951210a4a8c"
    },
    {
      "path": "test/functional/feature_powchange.py",
      "url": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/test/functional/feature_powchange.py",
      "sha256": "e6298e0e760e25de0ff72d3cf8d27d82c38da37c886ded240eb1765d510310ba"
    },
    {
      "path": "test/functional/feature_unified_sighash.py",
      "url": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/test/functional/feature_unified_sighash.py",
      "sha256": "5635aeae488e59d77c6cac9e7c3c0aef3ad30a2fbecc874b5269da2645168d8d"
    },
    {
      "path": "test/functional/test_framework/script.py",
      "url": "https://github.com/bitcoinknots/bitcoin/blob/v29.4.1.knots20260508/test/functional/test_framework/script.py",
      "sha256": "94d0e43ef7c941edbf5031e042d211068a5988ae8fa26120b6c00a942874982a"
    }
  ],
  "limitations": [
    "Only the exact recorded P2WPKH test transactions were exercised.",
    "No real chain sync, P2P relay, default Signet, mainnet, or wallet coin-splitting service was tested.",
    "Regtest activation height, headline and RDTS expiry are explicit test overrides, not mainnet parameters.",
    "Fixed public demo key 1 is unsafe for any real funds. No user keys or existing wallets are read.",
    "Official HTTPS archive checksums are pinned; release PGP signatures were not independently authenticated.",
    "The verifier currently pins macOS arm64 binaries and requires Node.js plus Python 3."
  ],
  "artifacts": [
    {
      "path": "/static/lab/fork/evidence.json",
      "sha256": "8f164573b6ac7389df29a6b280eef98ed1206a4ea791afc006a082d8538421a0"
    }
  ]
}
