Skip to content

fix: allow onion addresses and external peers in messages command#791

Open
nkatha23 wants to merge 1 commit intobitcoin-dev-project:mainfrom
nkatha23:fix/messages-onion-addresses
Open

fix: allow onion addresses and external peers in messages command#791
nkatha23 wants to merge 1 commit intobitcoin-dev-project:mainfrom
nkatha23:fix/messages-onion-addresses

Conversation

@nkatha23
Copy link
Copy Markdown

  • Add is_external_peer() helper to detect onion addresses and non-tank peers
  • Skip namespace parsing and kubectl IP lookups for external peers
  • Match message capture directories directly by address for external peers
  • Fix dot-split validation that would reject onion addresses containing dots
  • Add check_messages() test to onion_test.py to verify the fix

Fixes #761

@nkatha23
Copy link
Copy Markdown
Author

@pinheadmz I investigated the rpc_test failure and I believe it's a pre-existing issue unrelated to my changes.
The test/data/12_node_ring/node-defaults.yaml does not include -capturemessages, which means Bitcoin message capture is never enabled for that test network. Without it, get_messages will always return an empty list and the verack assertion will always fail.
My changes only affect how tank_b is resolved — for known tanks the kubectl IP lookup path is unchanged. The rpc_test failure would occur on main as well.
Happy to also fix the node-defaults.yaml to add -capturemessages if that's the right approach, or open a separate issue for it. Let me know how you'd like to proceed.

@nkatha23
Copy link
Copy Markdown
Author

nkatha23 commented Mar 6, 2026

14/16 checks passing. The only remaining failure is plugin_test which is a pre-existing issue in test_base.py, while investigating it I discovered that inspect.getsource() can't handle functools.partial objects, causing a TypeError that masks the real timeout error. I've opened a separate PR #795 to fix that. This PR is ready for review.

@pinheadmz
Copy link
Copy Markdown
Contributor

rebased on main after merging #803

Copy link
Copy Markdown
Contributor

@pinheadmz pinheadmz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code review 4189232

Thanks for taking this on! I left a few comments below but in general, please squash any fixes you make within the branch. To me it looks like this whole PR could be one single commit.

And then, I think the approach could be improved. I think messages() could be entirely left alone, and only in get_messages() we fall back to whatever the exact value of tank_b: str is if we fail to map that tank name to an IP address with a directory in message_capture.

I don't think namespace_b is None should be a trigger for the alternate behavior.

Also I wonder if we can add the port internally? Instead of the user needing to suffix ._18444 or whatever?

Comment thread src/warnet/bitcoin.py Outdated
Comment thread src/warnet/bitcoin.py Outdated
Comment thread test/onion_test.py Outdated
Comment thread src/warnet/bitcoin.py Outdated
@nkatha23 nkatha23 force-pushed the fix/messages-onion-addresses branch from 4189232 to 263592b Compare April 20, 2026 07:02
- Add is_external_peer() helper to detect onion addresses and non-tank peers
- Skip namespace parsing and kubectl IP lookups for external peers
- Match message capture directories directly by address for external peers
- Fix dot-split validation that would reject onion addresses containing dots
- Add check_messages() test to onion_test.py to verify the fix

Fixes bitcoin-dev-project#761

fix: remove original dot-split validation that rejected onion addresses

fix: move check_messages inside OnionTest class

fix: resolve namespace before get_messages to fix tank-to-tank message lookup

The previous implementation used namespace_b = None as a sentinel for
both 'known tank with no explicit namespace' and 'external/onion peer',
causing known tanks like tank-0001 to fall into the external peer path
in get_messages. This set tank_b_ip = 'tank-0001' instead of doing the
kubectl IP lookup, so no message capture directories ever matched.

Fix: resolve namespace_b via get_default_namespace_or() for known tanks
before calling get_messages, so only genuine external peers arrive with
namespace_b = None.

Fixes rpc_test verack assertion failure introduced in previous commit.

fix: refactor onion/external peer support based on review feedback
@nkatha23 nkatha23 force-pushed the fix/messages-onion-addresses branch from 263592b to 71ef99b Compare April 20, 2026 07:06
@nkatha23
Copy link
Copy Markdown
Author

Hello @pinheadmz, I've addressed all review feedback:

Removed is_external_peer() helper
Restored messages() to original shape, fixed typo
Updated get_messages() with try/except kubectl fallback, if IP lookup fails, falls back to matching tank_b directly against directory names
Inlined onion message check into check_tor per your diff
Squashed all commits into one

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

captured messages retrieval should allow onion addresses or peers that are not known tanks

2 participants