Since BCHD unconditionally disconnects from nodes containing the "Bitcoin ABC" string, we cannot use it to connect to a Bitcoin ABC node, even if connected directly using -connect. This option allows to circumvent that feature.
Details
- Reviewers
deadalnix - Group Reviewers
Restricted Owners Package (Owns No Changed Paths) Restricted Project - Commits
- rABC038e6a22db0b: Add -uaclientname and -uaclientversion config options to set the client name…
ninja check-functional
Diff Detail
- Repository
- rABC Bitcoin ABC
- Branch
- useragent-conf
- Lint
Lint Passed - Unit
No Test Coverage - Build Status
Buildable 15933 Build 31766: Build Diff build-diff · build-without-wallet · lint-circular-dependencies · build-clang-tidy · build-debug · build-clang Build 31765: arc lint + arc unit
Event Timeline
Changed to -uaclient, which sets the client name and version of the user agent, staying compatible with -uacomment
| src/init.cpp | ||
|---|---|---|
| 2302 ↗ | (On Diff #28780) | Why? And if that is a requirement, why not ask for a client name and a version number rather than this? |
| 2319 ↗ | (On Diff #28780) | here |
| src/net.cpp | ||
| 3158 ↗ | (On Diff #28780) | You are branching twice on the same condition for pretty much the same reason (see here comment). This is indicative of brittle design. For instance, if you take client name + version, then you can simply use the same function in both cases, but if you do not, then you can still create a default uaclient from CLIENT_NAME and CLIENT_VERSION. Either way, this current way of doing it doesn't make sense. |
Changed FormatSubVersion to FormatUserAgent and solely use FormatSubVersionUserAgent now
Why not have two flags that can be set, -uaclientname, and -uaclientversion ?
Seems like that would be the simplest solution.
It looks like to me this got a bit out of control. In D9637, you split FormatSubVersion in two, and in this, you do it again. At this rate, 8 more patches and we get 1024 variation of that function.
There are several function with only one callsite that do serve much of a purpose in this. You need to simplify.
| src/clientversion.cpp | ||
|---|---|---|
| 88 ↗ | (On Diff #28980) | Merge this with FormatSubVersionUserAgent, these function don't make sense on their own. |
| src/init.cpp | ||
| 2322 ↗ | (On Diff #28980) | Every single call site contains both function calls, this is the kind of sign you must not ignore. You don't need me to tell you this, the code already told you this. |
| src/net.cpp | ||
| 3219 ↗ | (On Diff #28980) | The only thing that shoudl change in there is the check for parameter's value and related code. Everything else is gratuitous complexity. |
Failed tests logs:
====== Bitcoin ABC functional tests: abc_p2p_proof_inventory.py ======
------- Stdout: -------
2021-06-28T14:31:40.697000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-diff/test/tmp/test_runner_₿₵_ _20210628_143131/abc_p2p_proof_inventory_624
2021-06-28T14:31:41.960000Z TestFramework (INFO): Test sending a proof to our peers
2021-06-28T14:31:46.612000Z TestFramework (INFO): Test that we don't send the same inv several times
2021-06-28T14:31:48.434000Z TestFramework (INFO): Test a peer is created on proof reception
2021-06-28T14:31:48.561000Z TestFramework (INFO): Test receiving a proof with missing utxo is orphaned
2021-06-28T14:31:54.029000Z TestFramework (INFO): Nodes should eventually get the proof from their peer
2021-06-28T14:31:56.107000Z TestFramework (INFO): Test broadcasting proofs
2021-06-28T14:32:01.825000Z TestFramework (INFO): Proofs that become invalid should no longer be broadcasted
2021-06-28T14:32:04.349000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
File "/work/test/functional/test_framework/test_framework.py", line 127, in main
self.run_test()
File "/work/test/functional/abc_p2p_proof_inventory.py", line 295, in run_test
self.test_unbroadcast()
File "/work/test/functional/abc_p2p_proof_inventory.py", line 281, in test_unbroadcast
assert_equal(raw_proof["orphan"], True)
File "/work/test/functional/test_framework/util.py", line 60, in assert_equal
for arg in (thing1, thing2) + args)))
AssertionError: not(False == True)
2021-06-28T14:32:04.400000Z TestFramework (INFO): Stopping nodes
2021-06-28T14:32:04.754000Z TestFramework (WARNING): Not cleaning up dir /work/abc-ci-builds/build-diff/test/tmp/test_runner_₿₵_ _20210628_143131/abc_p2p_proof_inventory_624
2021-06-28T14:32:04.754000Z TestFramework (ERROR): Test failed. Test logging available at /work/abc-ci-builds/build-diff/test/tmp/test_runner_₿₵_ _20210628_143131/abc_p2p_proof_inventory_624/test_framework.log
2021-06-28T14:32:04.755000Z TestFramework (ERROR):
2021-06-28T14:32:04.755000Z TestFramework (ERROR): Hint: Call /work/test/functional/combine_logs.py '/work/abc-ci-builds/build-diff/test/tmp/test_runner_₿₵_ _20210628_143131/abc_p2p_proof_inventory_624' to consolidate all logs
2021-06-28T14:32:04.755000Z TestFramework (ERROR):
2021-06-28T14:32:04.755000Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
2021-06-28T14:32:04.755000Z TestFramework (ERROR): https://github.com/Bitcoin-ABC/bitcoin-abc/issues
2021-06-28T14:32:04.755000Z TestFramework (ERROR):Each failure log is accessible here:
Bitcoin ABC functional tests: abc_p2p_proof_inventory.py