Always add default_witness_commitment with GBT client support
This commit is contained in:
parent
0c577f2638
commit
ad04d1cb35
3 changed files with 5 additions and 9 deletions
|
@ -3531,15 +3531,8 @@ 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);
|
||||||
bool fHaveWitness = false;
|
|
||||||
for (size_t t = 1; t < block.vtx.size(); t++) {
|
|
||||||
if (!block.vtx[t]->wit.IsNull()) {
|
|
||||||
fHaveWitness = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
std::vector<unsigned char> ret(32, 0x00);
|
std::vector<unsigned char> ret(32, 0x00);
|
||||||
if (fHaveWitness && IsWitnessEnabled(pindexPrev, consensusParams)) {
|
if (consensusParams.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout != 0) {
|
||||||
if (commitpos == -1) {
|
if (commitpos == -1) {
|
||||||
uint256 witnessroot = BlockWitnessMerkleRoot(block, NULL);
|
uint256 witnessroot = BlockWitnessMerkleRoot(block, NULL);
|
||||||
CHash256().Write(witnessroot.begin(), 32).Write(&ret[0], 32).Finalize(witnessroot.begin());
|
CHash256().Write(witnessroot.begin(), 32).Write(&ret[0], 32).Finalize(witnessroot.begin());
|
||||||
|
|
|
@ -680,7 +680,9 @@ UniValue getblocktemplate(const JSONRPCRequest& request)
|
||||||
result.push_back(Pair("curtime", pblock->GetBlockTime()));
|
result.push_back(Pair("curtime", pblock->GetBlockTime()));
|
||||||
result.push_back(Pair("bits", strprintf("%08x", pblock->nBits)));
|
result.push_back(Pair("bits", strprintf("%08x", pblock->nBits)));
|
||||||
result.push_back(Pair("height", (int64_t)(pindexPrev->nHeight+1)));
|
result.push_back(Pair("height", (int64_t)(pindexPrev->nHeight+1)));
|
||||||
if (!pblocktemplate->vchCoinbaseCommitment.empty()) {
|
|
||||||
|
const struct BIP9DeploymentInfo& segwit_info = VersionBitsDeploymentInfo[Consensus::DEPLOYMENT_SEGWIT];
|
||||||
|
if (!pblocktemplate->vchCoinbaseCommitment.empty() && setClientRules.find(segwit_info.name) != setClientRules.end()) {
|
||||||
result.push_back(Pair("default_witness_commitment", HexStr(pblocktemplate->vchCoinbaseCommitment.begin(), pblocktemplate->vchCoinbaseCommitment.end())));
|
result.push_back(Pair("default_witness_commitment", HexStr(pblocktemplate->vchCoinbaseCommitment.begin(), pblocktemplate->vchCoinbaseCommitment.end())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -214,6 +214,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
txCoinbase.vin[0].scriptSig = CScript();
|
txCoinbase.vin[0].scriptSig = CScript();
|
||||||
txCoinbase.vin[0].scriptSig.push_back(blockinfo[i].extranonce);
|
txCoinbase.vin[0].scriptSig.push_back(blockinfo[i].extranonce);
|
||||||
txCoinbase.vin[0].scriptSig.push_back(chainActive.Height());
|
txCoinbase.vin[0].scriptSig.push_back(chainActive.Height());
|
||||||
|
txCoinbase.vout.resize(1); // Ignore the (optional) segwit commitment added by CreateNewBlock (as the hardcoded nonces don't account for this)
|
||||||
txCoinbase.vout[0].scriptPubKey = CScript();
|
txCoinbase.vout[0].scriptPubKey = CScript();
|
||||||
pblock->vtx[0] = MakeTransactionRef(std::move(txCoinbase));
|
pblock->vtx[0] = MakeTransactionRef(std::move(txCoinbase));
|
||||||
if (txFirst.size() == 0)
|
if (txFirst.size() == 0)
|
||||||
|
|
Loading…
Reference in a new issue