Merge pull request #1231 from andreabonel/fix_dynamic_parameters_root_in_getblockheader

Fix dynamic parameters root in getblockheader
This commit is contained in:
James Dorfman 2023-04-04 14:49:39 -04:00 committed by GitHub
commit 1443d302ae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 3 deletions

View file

@ -154,17 +154,17 @@ UniValue paramEntryToJSON(const DynaFedParamEntry& entry)
}
// fields all params have
result.pushKV("root", HexStr(entry.CalculateRoot()));
result.pushKV("root", entry.CalculateRoot().GetHex());
result.pushKV("signblockscript", HexStr(entry.m_signblockscript));
result.pushKV("max_block_witness", (uint64_t)entry.m_signblock_witness_limit);
// add the extra root which is stored for compact and calculated for full
if (entry.m_serialize_type == 1) {
// compact
result.pushKV("extra_root", HexStr(entry.m_elided_root));
result.pushKV("extra_root", entry.m_elided_root.GetHex());
} else if (entry.m_serialize_type == 2) {
// full
result.pushKV("extra_root", HexStr(entry.CalculateExtraRoot()));
result.pushKV("extra_root", entry.CalculateExtraRoot().GetHex());
}
// some extra fields only present on full params

View file

@ -29,6 +29,8 @@ initial_offline = "03808355deeb0555203b53df7ef8f36edaf66ab0207ca1b11968a7ac42155
initial_extension = [initial_online+initial_online]
new_extension = [initial_offline+initial_online]
initial_cpe_root = "3700bdb2975ff8e0dadaaba2b33857b0ca2610c950a92b1db725025e3647a8e1"
ERR_MP_INVALID_PEGOUT = "invalid-pegout-proof"
ERR_MP_INVALID_PEGIN = "pegin-no-witness"
@ -48,16 +50,19 @@ def validate_no_vote_op_true(node, block, first_dynafed_active_block):
assert_equal(dynamic_parameters["current"]["signblockscript"], WSH_OP_TRUE)
if block_height % 10 == 0 or first_dynafed_active_block:
assert_equal(dynamic_parameters["current"]["type"], "full")
assert_equal(dynamic_parameters["current"]["root"], initial_cpe_root)
assert_equal(dynamic_parameters["current"]["fedpegscript"], "51")
assert_equal(dynamic_parameters["current"]["extension_space"], initial_extension)
else:
assert_equal(dynamic_parameters["current"]["type"], "compact")
assert_equal(dynamic_parameters["current"]["root"], initial_cpe_root)
assert not "fedpegscript" in dynamic_parameters["proposed"]
assert not "extension_space" in dynamic_parameters["proposed"]
assert_equal(dynamic_parameters["current"]["max_block_witness"], 74)
# nothing was proposed, null fields make impossible to be valid blockheader
# due to script rules requiring bool true on stack
assert_equal(dynamic_parameters["proposed"]["type"], "null")
assert not "root" in dynamic_parameters["proposed"]
assert not "signblockscript" in dynamic_parameters["proposed"]
assert not "max_block_witness" in dynamic_parameters["proposed"]
assert not "fedpegscript" in dynamic_parameters["proposed"]
@ -134,6 +139,9 @@ class DynaFedTest(BitcoinTestFramework):
self.sync_blocks(timeout=240)
assert_equal(self.nodes[0].getblockchaininfo()["softforks"]["dynafed"]["bip9"]["status"], "active")
# Check the root hash
assert_equal(self.nodes[0].getblockchaininfo()["current_params_root"], initial_cpe_root)
# Existing blocks should have null dynafed fields
for block in blocks:
assert "dynamic_parameters" not in self.nodes[0].getblock(block)