merkle: remove unused mutated arg from BlockWitnessMerkleRoot
The `mutated` parameter is never used at any call site - all callers pass `nullptr`. The explicit comment in `validation.cpp` explains the reason: // The malleation check is ignored; as the transaction tree itself // already does not permit it, it is impossible to trigger in the // witness tree.
This commit is contained in:
1 parent
63d640fa6a
commit
24ed820d4f
4 files changed
+7
-8
No files matched your search
@@ -73,7 +73,7 @@ uint256 BlockMerkleRoot(const CBlock& block, bool* mutated)
|
|||||||
return ComputeMerkleRoot(std::move(leaves), mutated);
|
return ComputeMerkleRoot(std::move(leaves), mutated);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint256 BlockWitnessMerkleRoot(const CBlock& block, bool* mutated)
|
uint256 BlockWitnessMerkleRoot(const CBlock& block)
|
||||||
{
|
{
|
||||||
std::vector<uint256> leaves;
|
std::vector<uint256> leaves;
|
||||||
leaves.resize(block.vtx.size());
|
leaves.resize(block.vtx.size());
|
||||||
@@ -81,7 +81,7 @@ uint256 BlockWitnessMerkleRoot(const CBlock& block, bool* mutated)
|
|||||||
for (size_t s = 1; s < block.vtx.size(); s++) {
|
for (size_t s = 1; s < block.vtx.size(); s++) {
|
||||||
leaves[s] = block.vtx[s]->GetWitnessHash().ToUint256();
|
leaves[s] = block.vtx[s]->GetWitnessHash().ToUint256();
|
||||||
}
|
}
|
||||||
return ComputeMerkleRoot(std::move(leaves), mutated);
|
return ComputeMerkleRoot(std::move(leaves));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This implements a constant-space merkle path calculator, limited to 2^32 leaves. */
|
/* This implements a constant-space merkle path calculator, limited to 2^32 leaves. */
|
||||||
|
|||||||
@@ -20,9 +20,8 @@ uint256 BlockMerkleRoot(const CBlock& block, bool* mutated = nullptr);
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Compute the Merkle root of the witness transactions in a block.
|
* Compute the Merkle root of the witness transactions in a block.
|
||||||
* *mutated is set to true if a duplicated subtree was found.
|
|
||||||
*/
|
*/
|
||||||
uint256 BlockWitnessMerkleRoot(const CBlock& block, bool* mutated = nullptr);
|
uint256 BlockWitnessMerkleRoot(const CBlock& block);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compute merkle path to the specified transaction
|
* Compute merkle path to the specified transaction
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ FUZZ_TARGET(merkle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Test ComputeMerkleRoot
|
// Test ComputeMerkleRoot
|
||||||
bool mutated = fuzzed_data_provider.ConsumeBool();
|
bool mutated = fuzzed_data_provider.ConsumeBool(); // output param, initial value shouldn't matter
|
||||||
const uint256 merkle_root = ComputeMerkleRoot(tx_hashes, &mutated);
|
const uint256 merkle_root = ComputeMerkleRoot(tx_hashes, &mutated);
|
||||||
|
|
||||||
// Basic sanity checks for ComputeMerkleRoot
|
// Basic sanity checks for ComputeMerkleRoot
|
||||||
@@ -66,7 +66,7 @@ FUZZ_TARGET(merkle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!block->vtx.empty()){
|
if (!block->vtx.empty()){
|
||||||
const uint256 block_witness_merkle_root = BlockWitnessMerkleRoot(*block, &mutated);
|
const uint256 block_witness_merkle_root = BlockWitnessMerkleRoot(*block);
|
||||||
if (tx_hashes.size() == 1) {
|
if (tx_hashes.size() == 1) {
|
||||||
assert(block_witness_merkle_root == uint256());
|
assert(block_witness_merkle_root == uint256());
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -3996,7 +3996,7 @@ static bool CheckWitnessMalleation(const CBlock& block, bool expect_witness_comm
|
|||||||
// The malleation check is ignored; as the transaction tree itself
|
// The malleation check is ignored; as the transaction tree itself
|
||||||
// already does not permit it, it is impossible to trigger in the
|
// already does not permit it, it is impossible to trigger in the
|
||||||
// witness tree.
|
// witness tree.
|
||||||
uint256 hash_witness = BlockWitnessMerkleRoot(block, /*mutated=*/nullptr);
|
uint256 hash_witness = BlockWitnessMerkleRoot(block);
|
||||||
|
|
||||||
CHash256().Write(hash_witness).Write(witness_stack[0]).Finalize(hash_witness);
|
CHash256().Write(hash_witness).Write(witness_stack[0]).Finalize(hash_witness);
|
||||||
if (memcmp(hash_witness.begin(), &block.vtx[0]->vout[commitpos].scriptPubKey[6], 32)) {
|
if (memcmp(hash_witness.begin(), &block.vtx[0]->vout[commitpos].scriptPubKey[6], 32)) {
|
||||||
@@ -4109,7 +4109,7 @@ std::vector<unsigned char> ChainstateManager::GenerateCoinbaseCommitment(CBlock&
|
|||||||
int commitpos = GetWitnessCommitmentIndex(block);
|
int commitpos = GetWitnessCommitmentIndex(block);
|
||||||
std::vector<unsigned char> ret(32, 0x00);
|
std::vector<unsigned char> ret(32, 0x00);
|
||||||
if (commitpos == NO_WITNESS_COMMITMENT) {
|
if (commitpos == NO_WITNESS_COMMITMENT) {
|
||||||
uint256 witnessroot = BlockWitnessMerkleRoot(block, nullptr);
|
uint256 witnessroot = BlockWitnessMerkleRoot(block);
|
||||||
CHash256().Write(witnessroot).Write(ret).Finalize(witnessroot);
|
CHash256().Write(witnessroot).Write(ret).Finalize(witnessroot);
|
||||||
CTxOut out;
|
CTxOut out;
|
||||||
out.nValue = 0;
|
out.nValue = 0;
|
||||||
|
|||||||
Reference in new issue
Block a user