fix: repair p2p announce route#4872
Conversation
|
Welcome to RustChain! Thanks for your first pull request. Before we review, please make sure:
Bounty tiers: Micro (1-10 RTC) | Standard (20-50) | Major (75-100) | Critical (100-150) A maintainer will review your PR soon. Thanks for contributing! |
jaxint
left a comment
There was a problem hiding this comment.
Great contribution! LGTM.
saim256
left a comment
There was a problem hiding this comment.
Requesting changes on current head c2e69b74000032cee5e40170458000b6e9750a37.
The route fix itself is narrowly correct: importing request/jsonify inside add_p2p_endpoints() unblocks /p2p/announce, and switching to get_json(silent=True) plus the object guard prevents array/non-object JSON from reaching data.get(...). The three new route tests also cover the valid announce path, non-object payload, and missing peer_url branch.
Blocking issue:
- The new file
node/tests/test_p2p_sync_routes.pyhas no SPDX header, so the repository policy gate fails. Locally,python tools\bcos_spdx_check.py --base-ref origin/mainreports:
BCOS SPDX check failed. Add an SPDX header to the following new files: - node/tests/test_p2p_sync_routes.py
Validation performed:
python -m pytest node\tests\test_p2p_sync_routes.py -q-> 3 passedpython -m py_compile node\rustchain_p2p_sync.py node\tests\test_p2p_sync_routes.py-> passedgit diff --check origin/main...HEAD-> passedpython tools\bcos_spdx_check.py --base-ref origin/main-> failed due to missing SPDX header above
Once the SPDX line is added to the new test file, this should be ready for re-review.
jaxint
left a comment
There was a problem hiding this comment.
Great contribution! LGTM.
|
Fixed the SPDX blocker in \d6d467f1b9291511f216e5f00df72c5e8f80faf4\. Re-ran: \python -m pytest node\\tests\\test_p2p_sync_routes.py -q\ -> 3 passed; \python -m py_compile node\\rustchain_p2p_sync.py node\\tests\\test_p2p_sync_routes.py\ -> passed; \python tools\\bcos_spdx_check.py --base-ref origin/main\ -> OK; \git diff --check\ -> passed. |
saim256
left a comment
There was a problem hiding this comment.
Approved updated head d6d467f1b9291511f216e5f00df72c5e8f80faf4.
The missing SPDX blocker from my prior review is fixed: node/tests/test_p2p_sync_routes.py now has the required MIT SPDX header, and the repository policy check passes. The implementation remains narrowly scoped: add_p2p_endpoints() imports the Flask route helpers it uses, /p2p/announce now rejects non-object JSON before data.get(...), and the tests cover the valid announce path plus the two 400 branches.
Validation performed:
python -m pytest node\tests\test_p2p_sync_routes.py -q-> 3 passedpython -m py_compile node\rustchain_p2p_sync.py node\tests\test_p2p_sync_routes.py-> passedgit diff --check origin/main...HEAD-> passedpython tools\bcos_spdx_check.py --base-ref origin/main-> OK
No blocking findings remain in this diff.
jaxint
left a comment
There was a problem hiding this comment.
Great contribution! LGTM.
jaxint
left a comment
There was a problem hiding this comment.
Great contribution! LGTM.
jaxint
left a comment
There was a problem hiding this comment.
Great contribution! LGTM.
jaxint
left a comment
There was a problem hiding this comment.
Great contribution! LGTM.
jaxint
left a comment
There was a problem hiding this comment.
Great contribution! LGTM.
508704820
left a comment
There was a problem hiding this comment.
Code Review: Repair P2P Announce Route
Summary
Fixes the P2P announce endpoint: adds missing Flask import, adds JSON object validation (matching #4871 pattern), and adds test coverage.
What Works Well
- Missing import fix: flask.jsonify and request were not imported in the endpoint function
- Input validation: isinstance(data, dict) check prevents non-object payloads
- Test coverage: 54-line test file for P2P sync routes
- Consistent pattern: Matches the get_required_json_object() approach from #4871
Verdict: Approve
Good fix — missing import would have caused a NameError at runtime.
jaxint
left a comment
There was a problem hiding this comment.
Great contribution! LGTM.
godd-ctrl
left a comment
There was a problem hiding this comment.
Approved on current head d6d467f.
The fix is scoped to the route factory, imports request/jsonify where add_p2p_endpoints() needs them, and adds a controlled 400 for non-object JSON before data.get() is used. The added route tests cover valid announce, array payload rejection, and missing peer_url, and they pass locally.
Validation performed:
- git diff --name-status origin/main...HEAD -> node/rustchain_p2p_sync.py, node/tests/test_p2p_sync_routes.py
- git diff --check origin/main...HEAD -> passed
- python tools\bcos_spdx_check.py --base-ref origin/main -> passed
- python -m py_compile node\rustchain_p2p_sync.py node\tests\test_p2p_sync_routes.py -> passed
- python -m pytest node\tests\test_p2p_sync_routes.py -q -> 3 passed
loganoe
left a comment
There was a problem hiding this comment.
Approved. The route factory now imports the Flask symbols it uses, and /p2p/announce rejects non-object JSON before accessing .get(), so both the original NameError and the array-body 500 path are covered.
Validation performed:
git diff --check origin/main...HEADpython3 -m py_compile node/rustchain_p2p_sync.py node/tests/test_p2p_sync_routes.pyPYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /tmp/rustchain-flask-venv/bin/python -m pytest -q node/tests/test_p2p_sync_routes.py-> 3 passed
Summary
request/jsonifyinsideadd_p2p_endpoints()so the legacy P2P routes can execute/p2p/announcereject non-object JSON with a controlled 400 instead of crashing during field accesspeer_urlRoot cause
node/rustchain_p2p_sync.pyregisters/p2p/announce,/p2p/peers, and/api/blocksroutes that callrequest/jsonify, but those Flask symbols were never imported in the module or route factory. As a result, even a validPOST /p2p/announceraisedNameError: name 'request' is not defined. After adding the imports, the endpoint also needed the usual object-body guard so a JSON array cannot reachdata.get(...)and raise a second 500.Verification
python -m pytest node\\tests\\test_p2p_sync_routes.py -q-> 3 passedpython -m py_compile node\\rustchain_p2p_sync.py node\\tests\\test_p2p_sync_routes.py-> passedpython tools\\bcos_spdx_check.py --base-ref origin/main-> BCOS SPDX check: OKgit diff --check-> passedNote:
ruffis not installed in this local environment, so I could not run the optional targeted Ruff check here.