CreateNewBlock() now takes scriptPubKey argument,
rather than a key. CreateNewBlockWithKey() helper is added to restore existing functionality, making this an equivalent-transformation change.
This commit is contained in:
parent
b60012f2b6
commit
7e17018995
4 changed files with 27 additions and 20 deletions
|
@ -141,7 +141,7 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CBlockTemplate* CreateNewBlock(CReserveKey& reservekey)
|
CBlockTemplate* CreateNewBlock(CScript& scriptPubKeyIn)
|
||||||
{
|
{
|
||||||
// Create new block
|
// Create new block
|
||||||
auto_ptr<CBlockTemplate> pblocktemplate(new CBlockTemplate());
|
auto_ptr<CBlockTemplate> pblocktemplate(new CBlockTemplate());
|
||||||
|
@ -154,10 +154,7 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey)
|
||||||
txNew.vin.resize(1);
|
txNew.vin.resize(1);
|
||||||
txNew.vin[0].prevout.SetNull();
|
txNew.vin[0].prevout.SetNull();
|
||||||
txNew.vout.resize(1);
|
txNew.vout.resize(1);
|
||||||
CPubKey pubkey;
|
txNew.vout[0].scriptPubKey = scriptPubKeyIn;
|
||||||
if (!reservekey.GetReservedKey(pubkey))
|
|
||||||
return NULL;
|
|
||||||
txNew.vout[0].scriptPubKey << pubkey << OP_CHECKSIG;
|
|
||||||
|
|
||||||
// Add our coinbase tx as first transaction
|
// Add our coinbase tx as first transaction
|
||||||
pblock->vtx.push_back(txNew);
|
pblock->vtx.push_back(txNew);
|
||||||
|
@ -383,6 +380,15 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey)
|
||||||
return pblocktemplate.release();
|
return pblocktemplate.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey)
|
||||||
|
{
|
||||||
|
CPubKey pubkey;
|
||||||
|
if (!reservekey.GetReservedKey(pubkey))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
CScript scriptPubKey = CScript() << pubkey << OP_CHECKSIG;
|
||||||
|
return CreateNewBlock(scriptPubKey);
|
||||||
|
}
|
||||||
|
|
||||||
void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce)
|
void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce)
|
||||||
{
|
{
|
||||||
|
@ -510,7 +516,7 @@ void static BitcoinMiner(CWallet *pwallet)
|
||||||
unsigned int nTransactionsUpdatedLast = nTransactionsUpdated;
|
unsigned int nTransactionsUpdatedLast = nTransactionsUpdated;
|
||||||
CBlockIndex* pindexPrev = pindexBest;
|
CBlockIndex* pindexPrev = pindexBest;
|
||||||
|
|
||||||
auto_ptr<CBlockTemplate> pblocktemplate(CreateNewBlock(reservekey));
|
auto_ptr<CBlockTemplate> pblocktemplate(CreateNewBlockWithKey(reservekey));
|
||||||
if (!pblocktemplate.get())
|
if (!pblocktemplate.get())
|
||||||
return;
|
return;
|
||||||
CBlock *pblock = &pblocktemplate->block;
|
CBlock *pblock = &pblocktemplate->block;
|
||||||
|
|
|
@ -11,7 +11,8 @@
|
||||||
/** Run the miner threads */
|
/** Run the miner threads */
|
||||||
void GenerateBitcoins(bool fGenerate, CWallet* pwallet);
|
void GenerateBitcoins(bool fGenerate, CWallet* pwallet);
|
||||||
/** Generate a new block, without valid proof-of-work */
|
/** Generate a new block, without valid proof-of-work */
|
||||||
CBlockTemplate* CreateNewBlock(CReserveKey& reservekey);
|
CBlockTemplate* CreateNewBlock(CScript& scriptPubKeyIn);
|
||||||
|
CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey);
|
||||||
/** Modify the extranonce in a block */
|
/** Modify the extranonce in a block */
|
||||||
void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce);
|
void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce);
|
||||||
/** Do mining precalculation */
|
/** Do mining precalculation */
|
||||||
|
|
|
@ -149,7 +149,7 @@ Value getwork(const Array& params, bool fHelp)
|
||||||
nStart = GetTime();
|
nStart = GetTime();
|
||||||
|
|
||||||
// Create new block
|
// Create new block
|
||||||
pblocktemplate = CreateNewBlock(*pMiningKey);
|
pblocktemplate = CreateNewBlockWithKey(*pMiningKey);
|
||||||
if (!pblocktemplate)
|
if (!pblocktemplate)
|
||||||
throw JSONRPCError(RPC_OUT_OF_MEMORY, "Out of memory");
|
throw JSONRPCError(RPC_OUT_OF_MEMORY, "Out of memory");
|
||||||
vNewBlockTemplate.push_back(pblocktemplate);
|
vNewBlockTemplate.push_back(pblocktemplate);
|
||||||
|
@ -280,7 +280,7 @@ Value getblocktemplate(const Array& params, bool fHelp)
|
||||||
delete pblocktemplate;
|
delete pblocktemplate;
|
||||||
pblocktemplate = NULL;
|
pblocktemplate = NULL;
|
||||||
}
|
}
|
||||||
pblocktemplate = CreateNewBlock(*pMiningKey);
|
pblocktemplate = CreateNewBlockWithKey(*pMiningKey);
|
||||||
if (!pblocktemplate)
|
if (!pblocktemplate)
|
||||||
throw JSONRPCError(RPC_OUT_OF_MEMORY, "Out of memory");
|
throw JSONRPCError(RPC_OUT_OF_MEMORY, "Out of memory");
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
uint256 hash;
|
uint256 hash;
|
||||||
|
|
||||||
// Simple block creation, nothing special yet:
|
// Simple block creation, nothing special yet:
|
||||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey));
|
BOOST_CHECK(pblocktemplate = CreateNewBlockWithKey(reservekey));
|
||||||
|
|
||||||
// We can't make transactions until we have inputs
|
// We can't make transactions until we have inputs
|
||||||
// Therefore, load 100 blocks :)
|
// Therefore, load 100 blocks :)
|
||||||
|
@ -82,7 +82,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
delete pblocktemplate;
|
delete pblocktemplate;
|
||||||
|
|
||||||
// Just to make sure we can still make simple blocks
|
// Just to make sure we can still make simple blocks
|
||||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey));
|
BOOST_CHECK(pblocktemplate = CreateNewBlockWithKey(reservekey));
|
||||||
|
|
||||||
// block sigops > limit: 1000 CHECKMULTISIG + 1
|
// block sigops > limit: 1000 CHECKMULTISIG + 1
|
||||||
tx.vin.resize(1);
|
tx.vin.resize(1);
|
||||||
|
@ -99,7 +99,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
mempool.addUnchecked(hash, tx);
|
mempool.addUnchecked(hash, tx);
|
||||||
tx.vin[0].prevout.hash = hash;
|
tx.vin[0].prevout.hash = hash;
|
||||||
}
|
}
|
||||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey));
|
BOOST_CHECK(pblocktemplate = CreateNewBlockWithKey(reservekey));
|
||||||
delete pblocktemplate;
|
delete pblocktemplate;
|
||||||
mempool.clear();
|
mempool.clear();
|
||||||
|
|
||||||
|
@ -119,14 +119,14 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
mempool.addUnchecked(hash, tx);
|
mempool.addUnchecked(hash, tx);
|
||||||
tx.vin[0].prevout.hash = hash;
|
tx.vin[0].prevout.hash = hash;
|
||||||
}
|
}
|
||||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey));
|
BOOST_CHECK(pblocktemplate = CreateNewBlockWithKey(reservekey));
|
||||||
delete pblocktemplate;
|
delete pblocktemplate;
|
||||||
mempool.clear();
|
mempool.clear();
|
||||||
|
|
||||||
// orphan in mempool
|
// orphan in mempool
|
||||||
hash = tx.GetHash();
|
hash = tx.GetHash();
|
||||||
mempool.addUnchecked(hash, tx);
|
mempool.addUnchecked(hash, tx);
|
||||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey));
|
BOOST_CHECK(pblocktemplate = CreateNewBlockWithKey(reservekey));
|
||||||
delete pblocktemplate;
|
delete pblocktemplate;
|
||||||
mempool.clear();
|
mempool.clear();
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
tx.vout[0].nValue = 5900000000LL;
|
tx.vout[0].nValue = 5900000000LL;
|
||||||
hash = tx.GetHash();
|
hash = tx.GetHash();
|
||||||
mempool.addUnchecked(hash, tx);
|
mempool.addUnchecked(hash, tx);
|
||||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey));
|
BOOST_CHECK(pblocktemplate = CreateNewBlockWithKey(reservekey));
|
||||||
delete pblocktemplate;
|
delete pblocktemplate;
|
||||||
mempool.clear();
|
mempool.clear();
|
||||||
|
|
||||||
|
@ -155,7 +155,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
tx.vout[0].nValue = 0;
|
tx.vout[0].nValue = 0;
|
||||||
hash = tx.GetHash();
|
hash = tx.GetHash();
|
||||||
mempool.addUnchecked(hash, tx);
|
mempool.addUnchecked(hash, tx);
|
||||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey));
|
BOOST_CHECK(pblocktemplate = CreateNewBlockWithKey(reservekey));
|
||||||
delete pblocktemplate;
|
delete pblocktemplate;
|
||||||
mempool.clear();
|
mempool.clear();
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
tx.vout[0].nValue -= 1000000;
|
tx.vout[0].nValue -= 1000000;
|
||||||
hash = tx.GetHash();
|
hash = tx.GetHash();
|
||||||
mempool.addUnchecked(hash,tx);
|
mempool.addUnchecked(hash,tx);
|
||||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey));
|
BOOST_CHECK(pblocktemplate = CreateNewBlockWithKey(reservekey));
|
||||||
delete pblocktemplate;
|
delete pblocktemplate;
|
||||||
mempool.clear();
|
mempool.clear();
|
||||||
|
|
||||||
|
@ -187,17 +187,17 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
tx.vout[0].scriptPubKey = CScript() << OP_2;
|
tx.vout[0].scriptPubKey = CScript() << OP_2;
|
||||||
hash = tx.GetHash();
|
hash = tx.GetHash();
|
||||||
mempool.addUnchecked(hash, tx);
|
mempool.addUnchecked(hash, tx);
|
||||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey));
|
BOOST_CHECK(pblocktemplate = CreateNewBlockWithKey(reservekey));
|
||||||
delete pblocktemplate;
|
delete pblocktemplate;
|
||||||
mempool.clear();
|
mempool.clear();
|
||||||
|
|
||||||
// subsidy changing
|
// subsidy changing
|
||||||
int nHeight = pindexBest->nHeight;
|
int nHeight = pindexBest->nHeight;
|
||||||
pindexBest->nHeight = 209999;
|
pindexBest->nHeight = 209999;
|
||||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey));
|
BOOST_CHECK(pblocktemplate = CreateNewBlockWithKey(reservekey));
|
||||||
delete pblocktemplate;
|
delete pblocktemplate;
|
||||||
pindexBest->nHeight = 210000;
|
pindexBest->nHeight = 210000;
|
||||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey));
|
BOOST_CHECK(pblocktemplate = CreateNewBlockWithKey(reservekey));
|
||||||
delete pblocktemplate;
|
delete pblocktemplate;
|
||||||
pindexBest->nHeight = nHeight;
|
pindexBest->nHeight = nHeight;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue