mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-10 20:03:34 -03:00
Merge bitcoin/bitcoin#22959: cli: Display all proxies in -getinfo
7c3712fa32
cli: Display all proxies in -getinfo (klementtan) Pull request description: **Changes**: Display all proxies in `-getinfo` **Motivation**: * Currently `-getinfo` only return the proxy of the first network in `getnetworkinfo`. * This PR will display all unique proxies in `getnetworkinfo` as suggested in https://github.com/bitcoin/bitcoin/issues/17314#issue-514543978 >List all proxies, at least if they're different from the IPv4 one ![image](https://user-images.githubusercontent.com/49265907/133991832-a1f38b36-2975-4ce2-a427-e4ffab23383e.png) **Testing**: You can verify this change by starting bitcoind with ```shell ./src/bitcoind -signet --proxy=127.0.0.1:9050 --i2psam=127.0.0.1:7656 ``` Execute `-getinfo` ```shell ./src/bitcoin-cli -signet -getinfo ``` ACKs for top commit: laanwj: Tested ACK7c3712fa32
prayank23: utACK7c3712fa32
Tree-SHA512: 9eae97866220227f30ca4585f52799fa66fc1135047d869c4aabe598aee1a9414cb9e1c4a8d19165e52d65005f3c6d4bcc37463ace0ddb44389dfbcd4ca74095
This commit is contained in:
commit
d809d8bf12
2 changed files with 30 additions and 5 deletions
|
@ -337,7 +337,7 @@ public:
|
|||
connections.pushKV("total", batch[ID_NETWORKINFO]["result"]["connections"]);
|
||||
result.pushKV("connections", connections);
|
||||
|
||||
result.pushKV("proxy", batch[ID_NETWORKINFO]["result"]["networks"][0]["proxy"]);
|
||||
result.pushKV("networks", batch[ID_NETWORKINFO]["result"]["networks"]);
|
||||
result.pushKV("difficulty", batch[ID_BLOCKCHAININFO]["result"]["difficulty"]);
|
||||
result.pushKV("chain", UniValue(batch[ID_BLOCKCHAININFO]["result"]["chain"]));
|
||||
if (!batch[ID_WALLETINFO]["result"].isNull()) {
|
||||
|
@ -986,8 +986,26 @@ static void ParseGetInfoResult(UniValue& result)
|
|||
RESET);
|
||||
result_string += strprintf("Version: %s\n", result["version"].getValStr());
|
||||
result_string += strprintf("Time offset (s): %s\n", result["timeoffset"].getValStr());
|
||||
const std::string proxy = result["proxy"].getValStr();
|
||||
result_string += strprintf("Proxy: %s\n", proxy.empty() ? "N/A" : proxy);
|
||||
|
||||
// proxies
|
||||
std::map<std::string, std::vector<std::string>> proxy_networks;
|
||||
std::vector<std::string> ordered_proxies;
|
||||
|
||||
for (const UniValue& network : result["networks"].getValues()) {
|
||||
const std::string proxy = network["proxy"].getValStr();
|
||||
if (proxy.empty()) continue;
|
||||
// Add proxy to ordered_proxy if has not been processed
|
||||
if (proxy_networks.find(proxy) == proxy_networks.end()) ordered_proxies.push_back(proxy);
|
||||
|
||||
proxy_networks[proxy].push_back(network["name"].getValStr());
|
||||
}
|
||||
|
||||
std::vector<std::string> formatted_proxies;
|
||||
for (const std::string& proxy : ordered_proxies) {
|
||||
formatted_proxies.emplace_back(strprintf("%s (%s)", proxy, Join(proxy_networks.find(proxy)->second, ", ")));
|
||||
}
|
||||
result_string += strprintf("Proxies: %s\n", formatted_proxies.empty() ? "n/a" : Join(formatted_proxies, ", "));
|
||||
|
||||
result_string += strprintf("Min tx relay fee rate (%s/kvB): %s\n\n", CURRENCY_UNIT, result["relayfee"].getValStr());
|
||||
|
||||
if (!result["has_wallet"].isNull()) {
|
||||
|
|
|
@ -57,7 +57,7 @@ def cli_get_info_string_to_dict(cli_get_info_string):
|
|||
if key == 'Wallet' and value == '""':
|
||||
# Set default wallet("") to empty string
|
||||
value = ''
|
||||
if key == "Proxy" and value == "N/A":
|
||||
if key == "Proxies" and value == "n/a":
|
||||
# Set N/A to empty string to represent no proxy
|
||||
value = ''
|
||||
cli_get_info[key.strip()] = value.strip()
|
||||
|
@ -127,10 +127,17 @@ class TestBitcoinCli(BitcoinTestFramework):
|
|||
assert_equal(int(cli_get_info['Time offset (s)']), network_info['timeoffset'])
|
||||
expected_network_info = f"in {network_info['connections_in']}, out {network_info['connections_out']}, total {network_info['connections']}"
|
||||
assert_equal(cli_get_info["Network"], expected_network_info)
|
||||
assert_equal(cli_get_info['Proxy'], network_info['networks'][0]['proxy'])
|
||||
assert_equal(cli_get_info['Proxies'], network_info['networks'][0]['proxy'])
|
||||
assert_equal(Decimal(cli_get_info['Difficulty']), blockchain_info['difficulty'])
|
||||
assert_equal(cli_get_info['Chain'], blockchain_info['chain'])
|
||||
|
||||
self.log.info("Test -getinfo and bitcoin-cli return all proxies")
|
||||
self.restart_node(0, extra_args=["-proxy=127.0.0.1:9050", "-i2psam=127.0.0.1:7656"])
|
||||
network_info = self.nodes[0].getnetworkinfo()
|
||||
cli_get_info_string = self.nodes[0].cli('-getinfo').send_cli()
|
||||
cli_get_info = cli_get_info_string_to_dict(cli_get_info_string)
|
||||
assert_equal(cli_get_info["Proxies"], "127.0.0.1:9050 (ipv4, ipv6, onion), 127.0.0.1:7656 (i2p)")
|
||||
|
||||
if self.is_wallet_compiled():
|
||||
self.log.info("Test -getinfo and bitcoin-cli getwalletinfo return expected wallet info")
|
||||
assert_equal(Decimal(cli_get_info['Balance']), BALANCE)
|
||||
|
|
Loading…
Reference in a new issue