mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-07-12 16:42:45 +02:00
[validation] Always include merkle root in coinbase commitment
This commit is contained in:
@ -3094,25 +3094,23 @@ std::vector<unsigned char> GenerateCoinbaseCommitment(CBlock& block, const CBloc
|
|||||||
std::vector<unsigned char> commitment;
|
std::vector<unsigned char> commitment;
|
||||||
int commitpos = GetWitnessCommitmentIndex(block);
|
int commitpos = GetWitnessCommitmentIndex(block);
|
||||||
std::vector<unsigned char> ret(32, 0x00);
|
std::vector<unsigned char> ret(32, 0x00);
|
||||||
if (DeploymentEnabled(consensusParams, Consensus::DEPLOYMENT_SEGWIT)) {
|
if (commitpos == NO_WITNESS_COMMITMENT) {
|
||||||
if (commitpos == NO_WITNESS_COMMITMENT) {
|
uint256 witnessroot = BlockWitnessMerkleRoot(block, nullptr);
|
||||||
uint256 witnessroot = BlockWitnessMerkleRoot(block, nullptr);
|
CHash256().Write(witnessroot).Write(ret).Finalize(witnessroot);
|
||||||
CHash256().Write(witnessroot).Write(ret).Finalize(witnessroot);
|
CTxOut out;
|
||||||
CTxOut out;
|
out.nValue = 0;
|
||||||
out.nValue = 0;
|
out.scriptPubKey.resize(MINIMUM_WITNESS_COMMITMENT);
|
||||||
out.scriptPubKey.resize(MINIMUM_WITNESS_COMMITMENT);
|
out.scriptPubKey[0] = OP_RETURN;
|
||||||
out.scriptPubKey[0] = OP_RETURN;
|
out.scriptPubKey[1] = 0x24;
|
||||||
out.scriptPubKey[1] = 0x24;
|
out.scriptPubKey[2] = 0xaa;
|
||||||
out.scriptPubKey[2] = 0xaa;
|
out.scriptPubKey[3] = 0x21;
|
||||||
out.scriptPubKey[3] = 0x21;
|
out.scriptPubKey[4] = 0xa9;
|
||||||
out.scriptPubKey[4] = 0xa9;
|
out.scriptPubKey[5] = 0xed;
|
||||||
out.scriptPubKey[5] = 0xed;
|
memcpy(&out.scriptPubKey[6], witnessroot.begin(), 32);
|
||||||
memcpy(&out.scriptPubKey[6], witnessroot.begin(), 32);
|
commitment = std::vector<unsigned char>(out.scriptPubKey.begin(), out.scriptPubKey.end());
|
||||||
commitment = std::vector<unsigned char>(out.scriptPubKey.begin(), out.scriptPubKey.end());
|
CMutableTransaction tx(*block.vtx[0]);
|
||||||
CMutableTransaction tx(*block.vtx[0]);
|
tx.vout.push_back(out);
|
||||||
tx.vout.push_back(out);
|
block.vtx[0] = MakeTransactionRef(std::move(tx));
|
||||||
block.vtx[0] = MakeTransactionRef(std::move(tx));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
UpdateUncommittedBlockStructures(block, pindexPrev, consensusParams);
|
UpdateUncommittedBlockStructures(block, pindexPrev, consensusParams);
|
||||||
return commitment;
|
return commitment;
|
||||||
|
Reference in New Issue
Block a user