Skip to content

Commit 559d042

Browse files
committed
Merge bitcoin/bitcoin#35736: bitcoin-util: replace netmagic command with getchainparams command
7298281 bitcoin-util: replace netmagic command with getchainparams command (Anthony Towns) Pull request description: This is a follow-up to #35610. It replaces the `netmagic` command with a more versatile `getchainparams` command, as suggested in bitcoin/bitcoin#35610 (comment). ACKs for top commit: maflcko: re-ACK 7298281 📓 ajtowns: Coauthor ACK 7298281 sedited: ACK 7298281 Tree-SHA512: 153e97eb8d6bc6d98d925ce9718239c6ff5d7a80b760e7f3b807fc36f78e8da8550033c31016e1d1aee11484392dd80b76f9b1496a8dc6e47825910c170a0cd1
2 parents 8f2ed31 + 7298281 commit 559d042

16 files changed

Lines changed: 223 additions & 35 deletions

doc/release-notes-35610.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Tools and Utilities
22
-------------------
33

4-
- A new `bitcoin-util netmagic` command returns the network magic of the
5-
selected chain.
4+
- A new `bitcoin-util getchainparams` command returns hardcoded details
5+
about the selected chain.
66

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,7 @@ if(BUILD_UTIL)
388388
core_interface
389389
bitcoin_common
390390
bitcoin_util
391+
univalue
391392
)
392393
install_binary_component(bitcoin-util HAS_MANPAGE)
393394
endif()

src/bitcoin-util.cpp

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <compat/compat.h>
1616
#include <core_io.h>
1717
#include <streams.h>
18+
#include <univalue.h>
1819
#include <util/exception.h>
1920
#include <util/strencodings.h>
2021
#include <util/translation.h>
@@ -36,7 +37,7 @@ static void SetupBitcoinUtilArgs(ArgsManager &argsman)
3637
argsman.AddArg("-version", "Print version and exit", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
3738

3839
argsman.AddCommand("grind", "Perform proof of work on hex header string");
39-
argsman.AddCommand("netmagic", "Get the network magic bytes of the selected chain");
40+
argsman.AddCommand("getchainparams", "Get hardcoded parameters for the selected chain");
4041

4142
SetupChainParamsBaseOptions(argsman);
4243
}
@@ -151,14 +152,60 @@ static int Grind(const std::vector<std::string>& args, std::string& strPrint)
151152
return EXIT_SUCCESS;
152153
}
153154

154-
static int NetMagic(const std::vector<std::string>& args, std::string& strPrint)
155+
static int GetChainParams(const std::vector<std::string>& args, std::string& strPrint)
155156
{
156157
if (!args.empty()) {
157-
strPrint = "netmagic does not take arguments";
158+
strPrint = "getchainparams does not take arguments";
158159
return EXIT_FAILURE;
159160
}
160161

161-
strPrint = HexStr(Params().MessageStart());
162+
const auto& params = Params();
163+
const auto& consensus = params.GetConsensus();
164+
165+
UniValue result{UniValue::VOBJ};
166+
result.pushKV("chain", params.GetChainTypeString());
167+
result.pushKV("test_chain", params.IsTestChain());
168+
result.pushKV("genesis", HexStr(consensus.hashGenesisBlock));
169+
result.pushKV("subsidy_halving_interval", consensus.nSubsidyHalvingInterval);
170+
171+
if (consensus.signet_blocks) {
172+
UniValue signet{UniValue::VOBJ};
173+
signet.pushKV("challenge", HexStr(consensus.signet_challenge));
174+
result.pushKV("signet", signet);
175+
}
176+
177+
{
178+
UniValue pow{UniValue::VOBJ};
179+
pow.pushKV("limit", consensus.powLimit.ToString());
180+
if (!consensus.fPowNoRetargeting) {
181+
pow.pushKV("target_spacing", TicksSeconds(consensus.PowTargetSpacing()));
182+
pow.pushKV("difficulty_retarget_interval", consensus.DifficultyAdjustmentInterval());
183+
std::string mindiff_blocks = (consensus.fPowAllowMinDifficultyBlocks ?
184+
(consensus.enforce_BIP94 ? "bip94" : "yes") : "no");
185+
pow.pushKV("mindiff_blocks", mindiff_blocks);
186+
}
187+
result.pushKV("pow", pow);
188+
}
189+
190+
{
191+
UniValue net{UniValue::VOBJ};
192+
net.pushKV("default_port", params.GetDefaultPort());
193+
net.pushKV("magic", HexStr(params.MessageStart()));
194+
UniValue dns{UniValue::VARR};
195+
for (const auto& seed : params.DNSSeeds()) {
196+
dns.push_back(seed);
197+
}
198+
net.pushKV("dns_seeds", dns);
199+
result.pushKV("net", net);
200+
}
201+
202+
{
203+
UniValue addr{UniValue::VOBJ};
204+
addr.pushKV("bech32_hrp", params.Bech32HRP());
205+
result.pushKV("addresses", addr);
206+
}
207+
208+
strPrint = result.write(/*prettyIndent=*/2);
162209
return EXIT_SUCCESS;
163210
}
164211

@@ -191,8 +238,8 @@ MAIN_FUNCTION
191238
try {
192239
if (cmd->command == "grind") {
193240
ret = Grind(cmd->args, strPrint);
194-
} else if (cmd->command == "netmagic") {
195-
ret = NetMagic(cmd->args, strPrint);
241+
} else if (cmd->command == "getchainparams") {
242+
ret = GetChainParams(cmd->args, strPrint);
196243
} else {
197244
assert(false); // unknown command should be caught earlier
198245
}

test/functional/data/util/bitcoin-util-test.json

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,52 +31,52 @@
3131
},
3232
{
3333
"exec": "./bitcoin-util",
34-
"args": ["netmagic"],
34+
"args": ["getchainparams"],
3535
"return_code": 0,
36-
"output_cmp": "netmagic-mainnet.hex",
37-
"description": "netmagic returns mainnet magic bytes"
36+
"output_cmp": "getchainparams-mainnet.json",
37+
"description": "getchainparams returns mainnet info"
3838
},
3939
{
4040
"exec": "./bitcoin-util",
41-
"args": ["-regtest", "netmagic"],
41+
"args": ["-regtest", "getchainparams"],
4242
"return_code": 0,
43-
"output_cmp": "netmagic-regtest.hex",
44-
"description": "netmagic returns regtest magic bytes"
43+
"output_cmp": "getchainparams-regtest.json",
44+
"description": "getchainparams returns regtest info"
4545
},
4646
{
4747
"exec": "./bitcoin-util",
48-
"args": ["-testnet", "netmagic"],
48+
"args": ["-testnet", "getchainparams"],
4949
"return_code": 0,
50-
"output_cmp": "netmagic-testnet.hex",
51-
"description": "netmagic returns testnet magic bytes"
50+
"output_cmp": "getchainparams-testnet.json",
51+
"description": "getchainparams returns testnet info"
5252
},
5353
{
5454
"exec": "./bitcoin-util",
55-
"args": ["-testnet4", "netmagic"],
55+
"args": ["-testnet4", "getchainparams"],
5656
"return_code": 0,
57-
"output_cmp": "netmagic-testnet4.hex",
58-
"description": "netmagic returns testnet4 magic bytes"
57+
"output_cmp": "getchainparams-testnet4.json",
58+
"description": "getchainparams returns testnet4 info"
5959
},
6060
{
6161
"exec": "./bitcoin-util",
62-
"args": ["-signet", "netmagic"],
62+
"args": ["-signet", "getchainparams"],
6363
"return_code": 0,
64-
"output_cmp": "netmagic-signet.hex",
65-
"description": "netmagic returns signet magic bytes"
64+
"output_cmp": "getchainparams-signet.json",
65+
"description": "getchainparams returns signet info"
6666
},
6767
{
6868
"exec": "./bitcoin-util",
69-
"args": ["-signet", "-signetchallenge=512102f7561d208dd9ae99bf497273e16f389bdbd6c4742ddb8e6b216e64fa2928ad8f51ae", "netmagic"],
69+
"args": ["-signet", "-signetchallenge=512102f7561d208dd9ae99bf497273e16f389bdbd6c4742ddb8e6b216e64fa2928ad8f51ae", "getchainparams"],
7070
"return_code": 0,
71-
"output_cmp": "netmagic-signet-custom.hex",
72-
"description": "netmagic returns custom signet magic bytes"
71+
"output_cmp": "getchainparams-signet-custom.json",
72+
"description": "getchainparams returns custom signet info"
7373
},
7474
{
7575
"exec": "./bitcoin-util",
76-
"args": ["netmagic", "extra_arg"],
76+
"args": ["getchainparams", "extra_arg"],
7777
"return_code": 1,
78-
"error_txt": "netmagic does not take arguments",
79-
"description": "netmagic rejects extra arguments"
78+
"error_txt": "getchainparams does not take arguments",
79+
"description": "getchainparams rejects extra arguments"
8080
},
8181
{ "exec": "./bitcoin-tx",
8282
"args": ["-create", "nversion=1"],
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"chain": "main",
3+
"test_chain": false,
4+
"genesis": "6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000",
5+
"subsidy_halving_interval": 210000,
6+
"pow": {
7+
"limit": "00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
8+
"target_spacing": 600,
9+
"difficulty_retarget_interval": 2016,
10+
"mindiff_blocks": "no"
11+
},
12+
"net": {
13+
"default_port": 8333,
14+
"magic": "f9beb4d9",
15+
"dns_seeds": [
16+
"dnsseed.bluematt.me.",
17+
"seed.bitcoin.jonasschnelli.ch.",
18+
"seed.btc.petertodd.net.",
19+
"seed.bitcoin.sprovoost.nl.",
20+
"dnsseed.emzy.de.",
21+
"seed.bitcoin.wiz.biz.",
22+
"seed.mainnet.achownodes.xyz."
23+
]
24+
},
25+
"addresses": {
26+
"bech32_hrp": "bc"
27+
}
28+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"chain": "regtest",
3+
"test_chain": true,
4+
"genesis": "06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f",
5+
"subsidy_halving_interval": 150,
6+
"pow": {
7+
"limit": "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
8+
},
9+
"net": {
10+
"default_port": 18444,
11+
"magic": "fabfb5da",
12+
"dns_seeds": [
13+
"dummySeed.invalid."
14+
]
15+
},
16+
"addresses": {
17+
"bech32_hrp": "bcrt"
18+
}
19+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"chain": "signet",
3+
"test_chain": true,
4+
"genesis": "f61eee3b63a380a477a063af32b2bbc97c9ff9f01f2c4225e973988108000000",
5+
"subsidy_halving_interval": 210000,
6+
"signet": {
7+
"challenge": "512102f7561d208dd9ae99bf497273e16f389bdbd6c4742ddb8e6b216e64fa2928ad8f51ae"
8+
},
9+
"pow": {
10+
"limit": "00000377ae000000000000000000000000000000000000000000000000000000",
11+
"target_spacing": 600,
12+
"difficulty_retarget_interval": 2016,
13+
"mindiff_blocks": "no"
14+
},
15+
"net": {
16+
"default_port": 38333,
17+
"magic": "a5df2dcb",
18+
"dns_seeds": [
19+
]
20+
},
21+
"addresses": {
22+
"bech32_hrp": "tb"
23+
}
24+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"chain": "signet",
3+
"test_chain": true,
4+
"genesis": "f61eee3b63a380a477a063af32b2bbc97c9ff9f01f2c4225e973988108000000",
5+
"subsidy_halving_interval": 210000,
6+
"signet": {
7+
"challenge": "512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae"
8+
},
9+
"pow": {
10+
"limit": "00000377ae000000000000000000000000000000000000000000000000000000",
11+
"target_spacing": 600,
12+
"difficulty_retarget_interval": 2016,
13+
"mindiff_blocks": "no"
14+
},
15+
"net": {
16+
"default_port": 38333,
17+
"magic": "0a03cf40",
18+
"dns_seeds": [
19+
"seed.signet.bitcoin.sprovoost.nl.",
20+
"seed.signet.achownodes.xyz."
21+
]
22+
},
23+
"addresses": {
24+
"bech32_hrp": "tb"
25+
}
26+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"chain": "test",
3+
"test_chain": true,
4+
"genesis": "43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000",
5+
"subsidy_halving_interval": 210000,
6+
"pow": {
7+
"limit": "00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
8+
"target_spacing": 600,
9+
"difficulty_retarget_interval": 2016,
10+
"mindiff_blocks": "yes"
11+
},
12+
"net": {
13+
"default_port": 18333,
14+
"magic": "0b110907",
15+
"dns_seeds": [
16+
"testnet-seed.bitcoin.jonasschnelli.ch.",
17+
"seed.tbtc.petertodd.net.",
18+
"seed.testnet.bitcoin.sprovoost.nl.",
19+
"testnet-seed.bluematt.me.",
20+
"seed.testnet.achownodes.xyz."
21+
]
22+
},
23+
"addresses": {
24+
"bech32_hrp": "tb"
25+
}
26+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"chain": "testnet4",
3+
"test_chain": true,
4+
"genesis": "43f08bdab050e35b567c864b91f47f50ae725ae2de53bcfbbaf284da00000000",
5+
"subsidy_halving_interval": 210000,
6+
"pow": {
7+
"limit": "00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
8+
"target_spacing": 600,
9+
"difficulty_retarget_interval": 2016,
10+
"mindiff_blocks": "bip94"
11+
},
12+
"net": {
13+
"default_port": 48333,
14+
"magic": "1c163f28",
15+
"dns_seeds": [
16+
"seed.testnet4.bitcoin.sprovoost.nl.",
17+
"seed.testnet4.wiz.biz."
18+
]
19+
},
20+
"addresses": {
21+
"bech32_hrp": "tb"
22+
}
23+
}

0 commit comments

Comments
 (0)