mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-07-24 15:18:51 +02:00
bitcoin-util: replace netmagic command with getchainparams command
Co-Authored-By: ekzyis <ramdip.singhgill@gmail.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
Tools and Utilities
|
||||
-------------------
|
||||
|
||||
- A new `bitcoin-util netmagic` command returns the network magic of the
|
||||
selected chain.
|
||||
- A new `bitcoin-util getchainparams` command returns hardcoded details
|
||||
about the selected chain.
|
||||
|
||||
|
||||
@@ -388,6 +388,7 @@ if(BUILD_UTIL)
|
||||
core_interface
|
||||
bitcoin_common
|
||||
bitcoin_util
|
||||
univalue
|
||||
)
|
||||
install_binary_component(bitcoin-util HAS_MANPAGE)
|
||||
endif()
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <compat/compat.h>
|
||||
#include <core_io.h>
|
||||
#include <streams.h>
|
||||
#include <univalue.h>
|
||||
#include <util/exception.h>
|
||||
#include <util/strencodings.h>
|
||||
#include <util/translation.h>
|
||||
@@ -36,7 +37,7 @@ static void SetupBitcoinUtilArgs(ArgsManager &argsman)
|
||||
argsman.AddArg("-version", "Print version and exit", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
|
||||
argsman.AddCommand("grind", "Perform proof of work on hex header string");
|
||||
argsman.AddCommand("netmagic", "Get the network magic bytes of the selected chain");
|
||||
argsman.AddCommand("getchainparams", "Get hardcoded parameters for the selected chain");
|
||||
|
||||
SetupChainParamsBaseOptions(argsman);
|
||||
}
|
||||
@@ -151,14 +152,60 @@ static int Grind(const std::vector<std::string>& args, std::string& strPrint)
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
static int NetMagic(const std::vector<std::string>& args, std::string& strPrint)
|
||||
static int GetChainParams(const std::vector<std::string>& args, std::string& strPrint)
|
||||
{
|
||||
if (!args.empty()) {
|
||||
strPrint = "netmagic does not take arguments";
|
||||
strPrint = "getchainparams does not take arguments";
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
strPrint = HexStr(Params().MessageStart());
|
||||
const auto& params = Params();
|
||||
const auto& consensus = params.GetConsensus();
|
||||
|
||||
UniValue result{UniValue::VOBJ};
|
||||
result.pushKV("chain", params.GetChainTypeString());
|
||||
result.pushKV("test_chain", params.IsTestChain());
|
||||
result.pushKV("genesis", HexStr(consensus.hashGenesisBlock));
|
||||
result.pushKV("subsidy_halving_interval", consensus.nSubsidyHalvingInterval);
|
||||
|
||||
if (consensus.signet_blocks) {
|
||||
UniValue signet{UniValue::VOBJ};
|
||||
signet.pushKV("challenge", HexStr(consensus.signet_challenge));
|
||||
result.pushKV("signet", signet);
|
||||
}
|
||||
|
||||
{
|
||||
UniValue pow{UniValue::VOBJ};
|
||||
pow.pushKV("limit", consensus.powLimit.ToString());
|
||||
if (!consensus.fPowNoRetargeting) {
|
||||
pow.pushKV("target_spacing", TicksSeconds(consensus.PowTargetSpacing()));
|
||||
pow.pushKV("difficulty_retarget_interval", consensus.DifficultyAdjustmentInterval());
|
||||
std::string mindiff_blocks = (consensus.fPowAllowMinDifficultyBlocks ?
|
||||
(consensus.enforce_BIP94 ? "bip94" : "yes") : "no");
|
||||
pow.pushKV("mindiff_blocks", mindiff_blocks);
|
||||
}
|
||||
result.pushKV("pow", pow);
|
||||
}
|
||||
|
||||
{
|
||||
UniValue net{UniValue::VOBJ};
|
||||
net.pushKV("default_port", params.GetDefaultPort());
|
||||
net.pushKV("magic", HexStr(params.MessageStart()));
|
||||
UniValue dns{UniValue::VARR};
|
||||
for (const auto& seed : params.DNSSeeds()) {
|
||||
dns.push_back(seed);
|
||||
}
|
||||
net.pushKV("dns_seeds", dns);
|
||||
result.pushKV("net", net);
|
||||
}
|
||||
|
||||
{
|
||||
UniValue addr{UniValue::VOBJ};
|
||||
addr.pushKV("bech32_hrp", params.Bech32HRP());
|
||||
result.pushKV("addresses", addr);
|
||||
}
|
||||
|
||||
strPrint = result.write(/*prettyIndent=*/2);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -191,8 +238,8 @@ MAIN_FUNCTION
|
||||
try {
|
||||
if (cmd->command == "grind") {
|
||||
ret = Grind(cmd->args, strPrint);
|
||||
} else if (cmd->command == "netmagic") {
|
||||
ret = NetMagic(cmd->args, strPrint);
|
||||
} else if (cmd->command == "getchainparams") {
|
||||
ret = GetChainParams(cmd->args, strPrint);
|
||||
} else {
|
||||
assert(false); // unknown command should be caught earlier
|
||||
}
|
||||
|
||||
@@ -31,52 +31,52 @@
|
||||
},
|
||||
{
|
||||
"exec": "./bitcoin-util",
|
||||
"args": ["netmagic"],
|
||||
"args": ["getchainparams"],
|
||||
"return_code": 0,
|
||||
"output_cmp": "netmagic-mainnet.hex",
|
||||
"description": "netmagic returns mainnet magic bytes"
|
||||
"output_cmp": "getchainparams-mainnet.json",
|
||||
"description": "getchainparams returns mainnet info"
|
||||
},
|
||||
{
|
||||
"exec": "./bitcoin-util",
|
||||
"args": ["-regtest", "netmagic"],
|
||||
"args": ["-regtest", "getchainparams"],
|
||||
"return_code": 0,
|
||||
"output_cmp": "netmagic-regtest.hex",
|
||||
"description": "netmagic returns regtest magic bytes"
|
||||
"output_cmp": "getchainparams-regtest.json",
|
||||
"description": "getchainparams returns regtest info"
|
||||
},
|
||||
{
|
||||
"exec": "./bitcoin-util",
|
||||
"args": ["-testnet", "netmagic"],
|
||||
"args": ["-testnet", "getchainparams"],
|
||||
"return_code": 0,
|
||||
"output_cmp": "netmagic-testnet.hex",
|
||||
"description": "netmagic returns testnet magic bytes"
|
||||
"output_cmp": "getchainparams-testnet.json",
|
||||
"description": "getchainparams returns testnet info"
|
||||
},
|
||||
{
|
||||
"exec": "./bitcoin-util",
|
||||
"args": ["-testnet4", "netmagic"],
|
||||
"args": ["-testnet4", "getchainparams"],
|
||||
"return_code": 0,
|
||||
"output_cmp": "netmagic-testnet4.hex",
|
||||
"description": "netmagic returns testnet4 magic bytes"
|
||||
"output_cmp": "getchainparams-testnet4.json",
|
||||
"description": "getchainparams returns testnet4 info"
|
||||
},
|
||||
{
|
||||
"exec": "./bitcoin-util",
|
||||
"args": ["-signet", "netmagic"],
|
||||
"args": ["-signet", "getchainparams"],
|
||||
"return_code": 0,
|
||||
"output_cmp": "netmagic-signet.hex",
|
||||
"description": "netmagic returns signet magic bytes"
|
||||
"output_cmp": "getchainparams-signet.json",
|
||||
"description": "getchainparams returns signet info"
|
||||
},
|
||||
{
|
||||
"exec": "./bitcoin-util",
|
||||
"args": ["-signet", "-signetchallenge=512102f7561d208dd9ae99bf497273e16f389bdbd6c4742ddb8e6b216e64fa2928ad8f51ae", "netmagic"],
|
||||
"args": ["-signet", "-signetchallenge=512102f7561d208dd9ae99bf497273e16f389bdbd6c4742ddb8e6b216e64fa2928ad8f51ae", "getchainparams"],
|
||||
"return_code": 0,
|
||||
"output_cmp": "netmagic-signet-custom.hex",
|
||||
"description": "netmagic returns custom signet magic bytes"
|
||||
"output_cmp": "getchainparams-signet-custom.json",
|
||||
"description": "getchainparams returns custom signet info"
|
||||
},
|
||||
{
|
||||
"exec": "./bitcoin-util",
|
||||
"args": ["netmagic", "extra_arg"],
|
||||
"args": ["getchainparams", "extra_arg"],
|
||||
"return_code": 1,
|
||||
"error_txt": "netmagic does not take arguments",
|
||||
"description": "netmagic rejects extra arguments"
|
||||
"error_txt": "getchainparams does not take arguments",
|
||||
"description": "getchainparams rejects extra arguments"
|
||||
},
|
||||
{ "exec": "./bitcoin-tx",
|
||||
"args": ["-create", "nversion=1"],
|
||||
|
||||
28
test/functional/data/util/getchainparams-mainnet.json
Normal file
28
test/functional/data/util/getchainparams-mainnet.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"chain": "main",
|
||||
"test_chain": false,
|
||||
"genesis": "6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000",
|
||||
"subsidy_halving_interval": 210000,
|
||||
"pow": {
|
||||
"limit": "00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
|
||||
"target_spacing": 600,
|
||||
"difficulty_retarget_interval": 2016,
|
||||
"mindiff_blocks": "no"
|
||||
},
|
||||
"net": {
|
||||
"default_port": 8333,
|
||||
"magic": "f9beb4d9",
|
||||
"dns_seeds": [
|
||||
"dnsseed.bluematt.me.",
|
||||
"seed.bitcoin.jonasschnelli.ch.",
|
||||
"seed.btc.petertodd.net.",
|
||||
"seed.bitcoin.sprovoost.nl.",
|
||||
"dnsseed.emzy.de.",
|
||||
"seed.bitcoin.wiz.biz.",
|
||||
"seed.mainnet.achownodes.xyz."
|
||||
]
|
||||
},
|
||||
"addresses": {
|
||||
"bech32_hrp": "bc"
|
||||
}
|
||||
}
|
||||
19
test/functional/data/util/getchainparams-regtest.json
Normal file
19
test/functional/data/util/getchainparams-regtest.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"chain": "regtest",
|
||||
"test_chain": true,
|
||||
"genesis": "06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f",
|
||||
"subsidy_halving_interval": 150,
|
||||
"pow": {
|
||||
"limit": "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
|
||||
},
|
||||
"net": {
|
||||
"default_port": 18444,
|
||||
"magic": "fabfb5da",
|
||||
"dns_seeds": [
|
||||
"dummySeed.invalid."
|
||||
]
|
||||
},
|
||||
"addresses": {
|
||||
"bech32_hrp": "bcrt"
|
||||
}
|
||||
}
|
||||
24
test/functional/data/util/getchainparams-signet-custom.json
Normal file
24
test/functional/data/util/getchainparams-signet-custom.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"chain": "signet",
|
||||
"test_chain": true,
|
||||
"genesis": "f61eee3b63a380a477a063af32b2bbc97c9ff9f01f2c4225e973988108000000",
|
||||
"subsidy_halving_interval": 210000,
|
||||
"signet": {
|
||||
"challenge": "512102f7561d208dd9ae99bf497273e16f389bdbd6c4742ddb8e6b216e64fa2928ad8f51ae"
|
||||
},
|
||||
"pow": {
|
||||
"limit": "00000377ae000000000000000000000000000000000000000000000000000000",
|
||||
"target_spacing": 600,
|
||||
"difficulty_retarget_interval": 2016,
|
||||
"mindiff_blocks": "no"
|
||||
},
|
||||
"net": {
|
||||
"default_port": 38333,
|
||||
"magic": "a5df2dcb",
|
||||
"dns_seeds": [
|
||||
]
|
||||
},
|
||||
"addresses": {
|
||||
"bech32_hrp": "tb"
|
||||
}
|
||||
}
|
||||
26
test/functional/data/util/getchainparams-signet.json
Normal file
26
test/functional/data/util/getchainparams-signet.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"chain": "signet",
|
||||
"test_chain": true,
|
||||
"genesis": "f61eee3b63a380a477a063af32b2bbc97c9ff9f01f2c4225e973988108000000",
|
||||
"subsidy_halving_interval": 210000,
|
||||
"signet": {
|
||||
"challenge": "512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae"
|
||||
},
|
||||
"pow": {
|
||||
"limit": "00000377ae000000000000000000000000000000000000000000000000000000",
|
||||
"target_spacing": 600,
|
||||
"difficulty_retarget_interval": 2016,
|
||||
"mindiff_blocks": "no"
|
||||
},
|
||||
"net": {
|
||||
"default_port": 38333,
|
||||
"magic": "0a03cf40",
|
||||
"dns_seeds": [
|
||||
"seed.signet.bitcoin.sprovoost.nl.",
|
||||
"seed.signet.achownodes.xyz."
|
||||
]
|
||||
},
|
||||
"addresses": {
|
||||
"bech32_hrp": "tb"
|
||||
}
|
||||
}
|
||||
26
test/functional/data/util/getchainparams-testnet.json
Normal file
26
test/functional/data/util/getchainparams-testnet.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"chain": "test",
|
||||
"test_chain": true,
|
||||
"genesis": "43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000",
|
||||
"subsidy_halving_interval": 210000,
|
||||
"pow": {
|
||||
"limit": "00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
|
||||
"target_spacing": 600,
|
||||
"difficulty_retarget_interval": 2016,
|
||||
"mindiff_blocks": "yes"
|
||||
},
|
||||
"net": {
|
||||
"default_port": 18333,
|
||||
"magic": "0b110907",
|
||||
"dns_seeds": [
|
||||
"testnet-seed.bitcoin.jonasschnelli.ch.",
|
||||
"seed.tbtc.petertodd.net.",
|
||||
"seed.testnet.bitcoin.sprovoost.nl.",
|
||||
"testnet-seed.bluematt.me.",
|
||||
"seed.testnet.achownodes.xyz."
|
||||
]
|
||||
},
|
||||
"addresses": {
|
||||
"bech32_hrp": "tb"
|
||||
}
|
||||
}
|
||||
23
test/functional/data/util/getchainparams-testnet4.json
Normal file
23
test/functional/data/util/getchainparams-testnet4.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"chain": "testnet4",
|
||||
"test_chain": true,
|
||||
"genesis": "43f08bdab050e35b567c864b91f47f50ae725ae2de53bcfbbaf284da00000000",
|
||||
"subsidy_halving_interval": 210000,
|
||||
"pow": {
|
||||
"limit": "00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
|
||||
"target_spacing": 600,
|
||||
"difficulty_retarget_interval": 2016,
|
||||
"mindiff_blocks": "bip94"
|
||||
},
|
||||
"net": {
|
||||
"default_port": 48333,
|
||||
"magic": "1c163f28",
|
||||
"dns_seeds": [
|
||||
"seed.testnet4.bitcoin.sprovoost.nl.",
|
||||
"seed.testnet4.wiz.biz."
|
||||
]
|
||||
},
|
||||
"addresses": {
|
||||
"bech32_hrp": "tb"
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
f9beb4d9
|
||||
@@ -1 +0,0 @@
|
||||
fabfb5da
|
||||
@@ -1 +0,0 @@
|
||||
a5df2dcb
|
||||
@@ -1 +0,0 @@
|
||||
0a03cf40
|
||||
@@ -1 +0,0 @@
|
||||
0b110907
|
||||
@@ -1 +0,0 @@
|
||||
1c163f28
|
||||
Reference in New Issue
Block a user