aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2016-11-18 12:15:01 -0800
committerWladimir J. van der Laan <laanwj@gmail.com>2016-12-02 08:38:02 +0100
commit99477c71c4cdb5127e0fd6e12f29507320432d9f (patch)
tree2c7e7484d3b078a5adb95c9eee041f5541552627
parentda5a16b11dca8f61d75f92bb08f1dd19a7800158 (diff)
downloadbitcoin-99477c71c4cdb5127e0fd6e12f29507320432d9f.tar.xz
Always add default_witness_commitment with GBT client support
Github-Pull: #9189 Rebased-From: ad04d1cb35b9612d36078c62213bdbb13f56d73d
-rw-r--r--src/main.cpp9
-rw-r--r--src/rpc/mining.cpp4
-rw-r--r--src/test/miner_tests.cpp1
3 files changed, 5 insertions, 9 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 6ad4304287..addc0f93a6 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -3503,15 +3503,8 @@ std::vector<unsigned char> GenerateCoinbaseCommitment(CBlock& block, const CBloc
{
std::vector<unsigned char> commitment;
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);
- if (fHaveWitness && IsWitnessEnabled(pindexPrev, consensusParams)) {
+ if (consensusParams.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout != 0) {
if (commitpos == -1) {
uint256 witnessroot = BlockWitnessMerkleRoot(block, NULL);
CHash256().Write(witnessroot.begin(), 32).Write(&ret[0], 32).Finalize(witnessroot.begin());
diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp
index e6901bc77e..ba48079c05 100644
--- a/src/rpc/mining.cpp
+++ b/src/rpc/mining.cpp
@@ -683,7 +683,9 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
result.push_back(Pair("curtime", pblock->GetBlockTime()));
result.push_back(Pair("bits", strprintf("%08x", pblock->nBits)));
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())));
}
diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp
index 70ba707795..f2bd082cba 100644
--- a/src/test/miner_tests.cpp
+++ b/src/test/miner_tests.cpp
@@ -213,6 +213,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
txCoinbase.vin[0].scriptSig = CScript();
txCoinbase.vin[0].scriptSig.push_back(blockinfo[i].extranonce);
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();
pblock->vtx[0] = CTransaction(txCoinbase);
if (txFirst.size() == 0)