{
 "number": 36152,
 "repo": "bitcoin/bitcoin",
 "url": "https://github.com/bitcoin/bitcoin/pull/36152",
 "title": "test: cover the feature-negotiation version boundary in p2p_leak",
 "author": "brunoerg",
 "author_association": "MEMBER",
 "created_at": "2026-09-02T18:10:54Z",
 "updated_at": "2026-09-12T21:38:54Z",
 "age_days": 14,
 "draft": false,
 "labels": [
  "Tests"
 ],
 "milestone": null,
 "base": "master",
 "head_sha": "2fabbc0bb38d0b87913d16777e25497ee6d017f0",
 "head_ref": "2026-09-test-wtxidrelay-version-boundary",
 "head_repo": "brunoerg/bitcoin",
 "head_history": [
  {
   "t": "2026-09-09T13:38:13Z",
   "sha": "2fabbc0bb38d0b87913d16777e25497ee6d017f0"
  }
 ],
 "additions": 26,
 "deletions": 1,
 "changed_files": 2,
 "commit_count": 2,
 "size_bucket": "S",
 "mergeable_state": "clean",
 "bot": {
  "drahtbot": {
   "present": true,
   "reviews": {
    "ack": [
     {
      "login": "Marisha-Sahay",
      "url": "https://github.com/bitcoin/bitcoin/pull/36152#issuecomment-5648864879"
     }
    ],
    "concept_ack": [
     {
      "login": "naiyoma",
      "url": "https://github.com/bitcoin/bitcoin/pull/36152#pullrequestreview-5133247058"
     }
    ]
   },
   "conflicts": []
  }
 },
 "acks_parsed": {
  "naiyoma": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2026-09-07T14:43:31Z",
   "stale": false
  }
 },
 "acks_tally": {
  "ack": 0,
  "stale_ack": 0,
  "concept_ack": 1,
  "approach_ack": 0,
  "nack": 0,
  "concept_nack": 0,
  "approach_nack": 0
 },
 "reviews": {
  "approved": 0,
  "changes_requested": 0,
  "distinct_reviewers": [
   "Marisha-Sahay",
   "naiyoma"
  ]
 },
 "signals": {
  "needs_rebase": false,
  "ci_failed": false,
  "mergeable_state": "clean",
  "last_author_activity": "2026-09-09T13:38:13Z",
  "last_reviewer_activity": "2026-09-12T21:38:49Z",
  "last_reviewer": "Marisha-Sahay",
  "author_silent_days": 8,
  "waiting_on_author_days": 4,
  "days_since_update": 4
 },
 "refs": {
  "mentioned": [],
  "depends_on": [],
  "fixes": [],
  "linked_issues": [],
  "references": [],
  "conflicts": []
 },
 "stack": {
  "shares_commits_with": [],
  "based_on": [],
  "base_for": []
 },
 "review_paths": [],
 "body": "p2p_leak already checks that a pre-wtxidrelay peer (nVersion 70015) is sent neither WTXIDRELAY nor SENDADDRV2, but nothing pins down the exact boundary: the feature negotiation messages are offered when the common version is >= WTXID_RELAY_VERSION (70016).\n\nAdd a peer advertising exactly 70016 and assert it receives both messages, so an off-by-one change of either `greatest_common_version >= WTXID_RELAY_VERSION` / `>= 70016` comparison to `>` is detected.\n\nIt kills https://bitcoincore.space/src/net_processing.cpp#3462 and https://bitcoincore.space/src/net_processing.cpp#3464\n\n-----\n\nedit: added a commit that adds a test case that checks `SENDTXRCNCL` is sent at version 70016. The existing 70015 case only shows SENDTXRCNCL is withheld below the wtxidrelay version. Add a peer at exactly 70016 so the lower bound of the `>= WTXID_RELAY_VERSION` check is covered too. It kills: https://bitcoincore.space/src/net_processing.cpp#3466.",
 "commits": [
  {
   "sha": "36775471f81ab5ad8499bf0e1c8aab6545db9da6",
   "date": "2026-09-09T13:38:02Z",
   "message": "test: cover the feature-negotiation version boundary in p2p_leak\n\np2p_leak already checks that a pre-wtxidrelay peer (nVersion 70015) is\nsent neither WTXIDRELAY nor SENDADDRV2, but nothing pins down the exact\nboundary: the feature negotiation messages are offered when the common\nversion is >= WTXID_RELAY_VERSION (70016). Add a peer advertising exactly\n70016 and assert it receives both messages, so an off-by-one change of\neither `greatest_common_version >= WTXID_RELAY_VERSION` / `>= 70016`\ncomparison to `>` is detected."
  },
  {
   "sha": "2fabbc0bb38d0b87913d16777e25497ee6d017f0",
   "date": "2026-09-09T13:38:02Z",
   "message": "test: check SENDTXRCNCL is sent at version 70016\n\nThe existing 70015 case only shows SENDTXRCNCL is withheld below the\nwtxidrelay version. Add a peer at exactly 70016 so the lower bound of\nthe `>= WTXID_RELAY_VERSION` check is covered too.\n\nCo-authored-by: naiyoma <lankas.aurelia@gmail.com>"
  }
 ],
 "timeline": [
  {
   "t": "2026-09-07T14:43:31Z",
   "kind": "review",
   "who": "naiyoma",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "8108dfe4e5b461eb47bc334cf025b46eff61b1cd",
   "text": "Concept ACK, ( not sure if this is out of scope). I think it would be great to kill  https://bitcoincore.space/src/net_processing.cpp#3466 in this PR as well.\n\n I did this in https://github.com/naiyoma/bitcoin/pull/22/changes/b7bdb41050cb20c80a72a9584fd52b4a6d45cdda"
  },
  {
   "t": "2026-09-08T20:36:33Z",
   "kind": "comment",
   "who": "brunoerg",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nNot out of scope, it's a simple test case and related so I just pushed adding it here as well. Thank you."
  },
  {
   "t": "2026-09-09T13:38:13Z",
   "kind": "force_push",
   "who": "brunoerg",
   "commit": "2fabbc0bb38d0b87913d16777e25497ee6d017f0"
  },
  {
   "t": "2026-09-12T21:38:49Z",
   "kind": "comment",
   "who": "Marisha-Sahay",
   "assoc": "NONE",
   "text": "tACK 2fabbc0bb38d0b87913d16777e25497ee6d017f0\n\nCompiled and ran test/functional/p2p_leak.py on macOS. Everything passes."
  }
 ],
 "labels_log": [
  {
   "t": "2026-09-02T18:10:58Z",
   "action": "labeled",
   "label": "Tests",
   "who": "DrahtBot"
  },
  {
   "t": "2026-09-08T21:36:34Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-09-09T14:43:41Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  }
 ],
 "state_log": [],
 "text_chars": 2338,
 "text_tokens_estimate": 584,
 "changed_paths": [
  "test/functional/p2p_leak.py",
  "test/functional/p2p_sendtxrcncl.py"
 ],
 "files": [
  {
   "path": "test/functional/p2p_leak.py",
   "add": 14,
   "del": 1
  },
  {
   "path": "test/functional/p2p_sendtxrcncl.py",
   "add": 12,
   "del": 0
  }
 ],
 "test_lines": 27,
 "git": {
  "head": "2fabbc0bb38d0b87913d16777e25497ee6d017f0",
  "head_matches_backup": true,
  "base": "2285d1931aa8806d0d4cf34e864ac93d82848246",
  "commits": [
   {
    "sha": "36775471f8",
    "subject": "test: cover the feature-negotiation version boundary in p2p_leak",
    "files": 1,
    "add": 14,
    "del": 1
   },
   {
    "sha": "2fabbc0bb3",
    "subject": "test: check SENDTXRCNCL is sent at version 70016",
    "files": 1,
    "add": 12,
    "del": 0
   }
  ],
  "patch_truncated": false
 },
 "input_hash": "2dd2dbbc5433f89a",
 "extracted_at": "2026-09-17T16:15:31+00:00"
}