[validation] Always include merkle root in coinbase commitment

This commit is contained in:
Dhruv Mehta
2021-06-20 11:26:35 -07:00
parent 189128c220
commit a806647d26

View File

@ -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;