mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-15 01:20:24 +00:00
Merge remote-tracking branch 'bitcoin/0.16' into HEAD
This commit is contained in:
commit
defc472744
@ -1,6 +1,6 @@
|
|||||||
Bitcoin Core version 0.16.2 is now available from:
|
Bitcoin Core version 0.16.x is now available from:
|
||||||
|
|
||||||
<https://bitcoincore.org/bin/bitcoin-core-0.16.2/>
|
<https://bitcoincore.org/bin/bitcoin-core-0.16.x/>
|
||||||
|
|
||||||
This is a new minor version release, with various bugfixes
|
This is a new minor version release, with various bugfixes
|
||||||
as well as updated translations.
|
as well as updated translations.
|
||||||
@ -46,71 +46,25 @@ the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not su
|
|||||||
Bitcoin Core should also work on most other Unix-like systems but is not
|
Bitcoin Core should also work on most other Unix-like systems but is not
|
||||||
frequently tested on them.
|
frequently tested on them.
|
||||||
|
|
||||||
0.16.2 change log
|
Notable changes
|
||||||
|
===============
|
||||||
|
|
||||||
|
(to be filled in)
|
||||||
|
|
||||||
|
0.16.x change log
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
### Wallet
|
(to be filled in)
|
||||||
- #13622 `c04a4a5` Remove mapRequest tracking that just effects Qt display. (TheBlueMatt)
|
|
||||||
- #12905 `cfc6f74` [rpcwallet] Clamp walletpassphrase value at 100M seconds (sdaftuar)
|
|
||||||
- #13437 `ed82e71` wallet: Erase wtxOrderd wtx pointer on removeprunedfunds (MarcoFalke)
|
|
||||||
|
|
||||||
### RPC and other APIs
|
|
||||||
- #13451 `cbd2f70` rpc: expose CBlockIndex::nTx in getblock(header) (instagibbs)
|
|
||||||
- #13507 `f7401c8` RPC: Fix parameter count check for importpubkey (kristapsk)
|
|
||||||
- #13452 `6b9dc8c` rpc: have verifytxoutproof check the number of txns in proof structure (instagibbs)
|
|
||||||
- #12837 `bf1f150` rpc: fix type mistmatch in `listreceivedbyaddress` (joemphilips)
|
|
||||||
- #12743 `657dfc5` Fix csBestBlock/cvBlockChange waiting in rpc/mining (sipa)
|
|
||||||
|
|
||||||
### GUI
|
|
||||||
- #12432 `f78e7f6` [qt] send: Clear All also resets coin control options (Sjors)
|
|
||||||
- #12617 `21dd512` gui: Show messages as text not html (laanwj)
|
|
||||||
- #12793 `cf6feb7` qt: Avoid reseting on resetguisettigs=0 (MarcoFalke)
|
|
||||||
|
|
||||||
### Build system
|
|
||||||
- #13544 `9fd3e00` depends: Update Qt download url (fanquake)
|
|
||||||
- #12573 `88d1a64` Fix compilation when compiler do not support `__builtin_clz*` (532479301)
|
|
||||||
|
|
||||||
### Tests and QA
|
|
||||||
- #13061 `170b309` Make tests pass after 2020 (bmwiedemann)
|
|
||||||
- #13192 `79c4fff` [tests] Fixed intermittent failure in `p2p_sendheaders.py` (lmanners)
|
|
||||||
- #13300 `d9c5630` qa: Initialize lockstack to prevent null pointer deref (MarcoFalke)
|
|
||||||
- #13545 `e15e3a9` tests: Fix test case `streams_serializedata_xor` Remove Boost dependency. (practicalswift)
|
|
||||||
- #13304 `cbdabef` qa: Fix `wallet_listreceivedby` race (MarcoFalke)
|
|
||||||
|
|
||||||
### Miscellaneous
|
|
||||||
- #12887 `2291774` Add newlines to end of log messages (jnewbery)
|
|
||||||
- #12859 `18b0c69` Bugfix: Include <memory> for `std::unique_ptr` (luke-jr)
|
|
||||||
- #13131 `ce8aa54` Add Windows shutdown handler (ken2812221)
|
|
||||||
- #13652 `20461fc` rpc: Fix that CWallet::AbandonTransaction would leave the grandchildren, etc. active (Empact)
|
|
||||||
|
|
||||||
Credits
|
Credits
|
||||||
=======
|
=======
|
||||||
|
|
||||||
Thanks to everyone who directly contributed to this release:
|
Thanks to everyone who directly contributed to this release:
|
||||||
|
|
||||||
- 532479301
|
(to be filled in)
|
||||||
- Ben Woosley
|
|
||||||
- Bernhard M. Wiedemann
|
|
||||||
- Chun Kuan Lee
|
|
||||||
- Cory Fields
|
|
||||||
- fanquake
|
|
||||||
- Gregory Sanders
|
|
||||||
- joemphilips
|
|
||||||
- John Newbery
|
|
||||||
- Kristaps Kaupe
|
|
||||||
- lmanners
|
|
||||||
- Luke Dashjr
|
|
||||||
- MarcoFalke
|
|
||||||
- Matt Corallo
|
|
||||||
- Pieter Wuille
|
|
||||||
- practicalswift
|
|
||||||
- Sjors Provoost
|
|
||||||
- Suhas Daftuar
|
|
||||||
- Wladimir J. van der Laan
|
|
||||||
|
|
||||||
And to those that reported security issues:
|
And to those that reported security issues:
|
||||||
|
|
||||||
- Braydon Fuller
|
(to be filled in)
|
||||||
- Himanshu Mehta
|
|
||||||
|
|
||||||
As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).
|
As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).
|
||||||
|
@ -379,7 +379,7 @@ std::string HelpMessage(HelpMessageMode mode)
|
|||||||
#endif
|
#endif
|
||||||
strUsage += HelpMessageOpt("-prune=<n>", strprintf(_("Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. "
|
strUsage += HelpMessageOpt("-prune=<n>", strprintf(_("Reduce storage requirements by enabling pruning (deleting) of old blocks. This allows the pruneblockchain RPC to be called to delete specific blocks, and enables automatic pruning of old blocks if a target size in MiB is provided. This mode is incompatible with -txindex and -rescan. "
|
||||||
"Warning: Reverting this setting requires re-downloading the entire blockchain. "
|
"Warning: Reverting this setting requires re-downloading the entire blockchain. "
|
||||||
"(default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >%u = automatically prune block files to stay under the specified target size in MiB)"), MIN_DISK_SPACE_FOR_BLOCK_FILES / 1024 / 1024));
|
"(default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, >=%u = automatically prune block files to stay under the specified target size in MiB)"), MIN_DISK_SPACE_FOR_BLOCK_FILES / 1024 / 1024));
|
||||||
strUsage += HelpMessageOpt("-reindex-chainstate", _("Rebuild chain state from the currently indexed blocks"));
|
strUsage += HelpMessageOpt("-reindex-chainstate", _("Rebuild chain state from the currently indexed blocks"));
|
||||||
strUsage += HelpMessageOpt("-reindex", _("Rebuild chain state and block index from the blk*.dat files on disk"));
|
strUsage += HelpMessageOpt("-reindex", _("Rebuild chain state and block index from the blk*.dat files on disk"));
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
|
@ -830,7 +830,7 @@ UniValue signrawtransaction(const JSONRPCRequest& request)
|
|||||||
}
|
}
|
||||||
Coin newcoin;
|
Coin newcoin;
|
||||||
newcoin.out.scriptPubKey = scriptPubKey;
|
newcoin.out.scriptPubKey = scriptPubKey;
|
||||||
newcoin.out.nValue = 0;
|
newcoin.out.nValue = MAX_MONEY;
|
||||||
if (prevOut.exists("amount")) {
|
if (prevOut.exists("amount")) {
|
||||||
newcoin.out.nValue = AmountFromValue(find_value(prevOut, "amount"));
|
newcoin.out.nValue = AmountFromValue(find_value(prevOut, "amount"));
|
||||||
}
|
}
|
||||||
@ -910,6 +910,11 @@ UniValue signrawtransaction(const JSONRPCRequest& request)
|
|||||||
|
|
||||||
UpdateTransaction(mtx, i, sigdata);
|
UpdateTransaction(mtx, i, sigdata);
|
||||||
|
|
||||||
|
// amount must be specified for valid segwit signature
|
||||||
|
if (amount == MAX_MONEY && !txin.scriptWitness.IsNull()) {
|
||||||
|
throw JSONRPCError(RPC_TYPE_ERROR, strprintf("Missing amount for %s", coin.out.ToString()));
|
||||||
|
}
|
||||||
|
|
||||||
ScriptError serror = SCRIPT_ERR_OK;
|
ScriptError serror = SCRIPT_ERR_OK;
|
||||||
if (!VerifyScript(txin.scriptSig, prevPubKey, &txin.scriptWitness, STANDARD_SCRIPT_VERIFY_FLAGS, TransactionSignatureChecker(&txConst, i, amount), &serror)) {
|
if (!VerifyScript(txin.scriptSig, prevPubKey, &txin.scriptWitness, STANDARD_SCRIPT_VERIFY_FLAGS, TransactionSignatureChecker(&txConst, i, amount), &serror)) {
|
||||||
if (serror == SCRIPT_ERR_INVALID_STACK_OPERATION) {
|
if (serror == SCRIPT_ERR_INVALID_STACK_OPERATION) {
|
||||||
|
@ -81,7 +81,7 @@ static int verify_script(const unsigned char *scriptPubKey, unsigned int scriptP
|
|||||||
unsigned int nIn, unsigned int flags, bitcoinconsensus_error* err)
|
unsigned int nIn, unsigned int flags, bitcoinconsensus_error* err)
|
||||||
{
|
{
|
||||||
if (!verify_flags(flags)) {
|
if (!verify_flags(flags)) {
|
||||||
return bitcoinconsensus_ERR_INVALID_FLAGS;
|
return set_error(err, bitcoinconsensus_ERR_INVALID_FLAGS);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
TxInputStream stream(SER_NETWORK, PROTOCOL_VERSION, txTo, txToLen);
|
TxInputStream stream(SER_NETWORK, PROTOCOL_VERSION, txTo, txToLen);
|
||||||
|
@ -1481,4 +1481,146 @@ BOOST_AUTO_TEST_CASE(script_can_append_self)
|
|||||||
BOOST_CHECK(s == d);
|
BOOST_CHECK(s == d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(HAVE_CONSENSUS_LIB)
|
||||||
|
|
||||||
|
/* Test simple (successful) usage of bitcoinconsensus_verify_script */
|
||||||
|
BOOST_AUTO_TEST_CASE(bitcoinconsensus_verify_script_returns_true)
|
||||||
|
{
|
||||||
|
unsigned int libconsensus_flags = 0;
|
||||||
|
int nIn = 0;
|
||||||
|
|
||||||
|
CScript scriptPubKey;
|
||||||
|
CScript scriptSig;
|
||||||
|
CScriptWitness wit;
|
||||||
|
|
||||||
|
scriptPubKey << OP_1;
|
||||||
|
CTransaction creditTx = BuildCreditingTransaction(scriptPubKey, 1);
|
||||||
|
CTransaction spendTx = BuildSpendingTransaction(scriptSig, wit, creditTx);
|
||||||
|
|
||||||
|
CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
stream << spendTx;
|
||||||
|
|
||||||
|
bitcoinconsensus_error err;
|
||||||
|
int result = bitcoinconsensus_verify_script(scriptPubKey.data(), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size(), nIn, libconsensus_flags, &err);
|
||||||
|
BOOST_CHECK_EQUAL(result, 1);
|
||||||
|
BOOST_CHECK_EQUAL(err, bitcoinconsensus_ERR_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test bitcoinconsensus_verify_script returns invalid tx index err*/
|
||||||
|
BOOST_AUTO_TEST_CASE(bitcoinconsensus_verify_script_tx_index_err)
|
||||||
|
{
|
||||||
|
unsigned int libconsensus_flags = 0;
|
||||||
|
int nIn = 3;
|
||||||
|
|
||||||
|
CScript scriptPubKey;
|
||||||
|
CScript scriptSig;
|
||||||
|
CScriptWitness wit;
|
||||||
|
|
||||||
|
scriptPubKey << OP_EQUAL;
|
||||||
|
CTransaction creditTx = BuildCreditingTransaction(scriptPubKey, 1);
|
||||||
|
CTransaction spendTx = BuildSpendingTransaction(scriptSig, wit, creditTx);
|
||||||
|
|
||||||
|
CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
stream << spendTx;
|
||||||
|
|
||||||
|
bitcoinconsensus_error err;
|
||||||
|
int result = bitcoinconsensus_verify_script(scriptPubKey.data(), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size(), nIn, libconsensus_flags, &err);
|
||||||
|
BOOST_CHECK_EQUAL(result, 0);
|
||||||
|
BOOST_CHECK_EQUAL(err, bitcoinconsensus_ERR_TX_INDEX);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test bitcoinconsensus_verify_script returns tx size mismatch err*/
|
||||||
|
BOOST_AUTO_TEST_CASE(bitcoinconsensus_verify_script_tx_size)
|
||||||
|
{
|
||||||
|
unsigned int libconsensus_flags = 0;
|
||||||
|
int nIn = 0;
|
||||||
|
|
||||||
|
CScript scriptPubKey;
|
||||||
|
CScript scriptSig;
|
||||||
|
CScriptWitness wit;
|
||||||
|
|
||||||
|
scriptPubKey << OP_EQUAL;
|
||||||
|
CTransaction creditTx = BuildCreditingTransaction(scriptPubKey, 1);
|
||||||
|
CTransaction spendTx = BuildSpendingTransaction(scriptSig, wit, creditTx);
|
||||||
|
|
||||||
|
CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
stream << spendTx;
|
||||||
|
|
||||||
|
bitcoinconsensus_error err;
|
||||||
|
int result = bitcoinconsensus_verify_script(scriptPubKey.data(), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size() * 2, nIn, libconsensus_flags, &err);
|
||||||
|
BOOST_CHECK_EQUAL(result, 0);
|
||||||
|
BOOST_CHECK_EQUAL(err, bitcoinconsensus_ERR_TX_SIZE_MISMATCH);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test bitcoinconsensus_verify_script returns invalid tx serialization error */
|
||||||
|
BOOST_AUTO_TEST_CASE(bitcoinconsensus_verify_script_tx_serialization)
|
||||||
|
{
|
||||||
|
unsigned int libconsensus_flags = 0;
|
||||||
|
int nIn = 0;
|
||||||
|
|
||||||
|
CScript scriptPubKey;
|
||||||
|
CScript scriptSig;
|
||||||
|
CScriptWitness wit;
|
||||||
|
|
||||||
|
scriptPubKey << OP_EQUAL;
|
||||||
|
CTransaction creditTx = BuildCreditingTransaction(scriptPubKey, 1);
|
||||||
|
CTransaction spendTx = BuildSpendingTransaction(scriptSig, wit, creditTx);
|
||||||
|
|
||||||
|
CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
stream << 0xffffffff;
|
||||||
|
|
||||||
|
bitcoinconsensus_error err;
|
||||||
|
int result = bitcoinconsensus_verify_script(scriptPubKey.data(), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size(), nIn, libconsensus_flags, &err);
|
||||||
|
BOOST_CHECK_EQUAL(result, 0);
|
||||||
|
BOOST_CHECK_EQUAL(err, bitcoinconsensus_ERR_TX_DESERIALIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test bitcoinconsensus_verify_script returns amount required error */
|
||||||
|
BOOST_AUTO_TEST_CASE(bitcoinconsensus_verify_script_amount_required_err)
|
||||||
|
{
|
||||||
|
unsigned int libconsensus_flags = bitcoinconsensus_SCRIPT_FLAGS_VERIFY_WITNESS;
|
||||||
|
int nIn = 0;
|
||||||
|
|
||||||
|
CScript scriptPubKey;
|
||||||
|
CScript scriptSig;
|
||||||
|
CScriptWitness wit;
|
||||||
|
|
||||||
|
scriptPubKey << OP_EQUAL;
|
||||||
|
CTransaction creditTx = BuildCreditingTransaction(scriptPubKey, 1);
|
||||||
|
CTransaction spendTx = BuildSpendingTransaction(scriptSig, wit, creditTx);
|
||||||
|
|
||||||
|
CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
stream << spendTx;
|
||||||
|
|
||||||
|
bitcoinconsensus_error err;
|
||||||
|
int result = bitcoinconsensus_verify_script(scriptPubKey.data(), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size(), nIn, libconsensus_flags, &err);
|
||||||
|
BOOST_CHECK_EQUAL(result, 0);
|
||||||
|
BOOST_CHECK_EQUAL(err, bitcoinconsensus_ERR_AMOUNT_REQUIRED);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test bitcoinconsensus_verify_script returns invalid flags err */
|
||||||
|
BOOST_AUTO_TEST_CASE(bitcoinconsensus_verify_script_invalid_flags)
|
||||||
|
{
|
||||||
|
unsigned int libconsensus_flags = 1 << 3;
|
||||||
|
int nIn = 0;
|
||||||
|
|
||||||
|
CScript scriptPubKey;
|
||||||
|
CScript scriptSig;
|
||||||
|
CScriptWitness wit;
|
||||||
|
|
||||||
|
scriptPubKey << OP_EQUAL;
|
||||||
|
CTransaction creditTx = BuildCreditingTransaction(scriptPubKey, 1);
|
||||||
|
CTransaction spendTx = BuildSpendingTransaction(scriptSig, wit, creditTx);
|
||||||
|
|
||||||
|
CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
stream << spendTx;
|
||||||
|
|
||||||
|
bitcoinconsensus_error err;
|
||||||
|
int result = bitcoinconsensus_verify_script(scriptPubKey.data(), scriptPubKey.size(), (const unsigned char*)&stream[0], stream.size(), nIn, libconsensus_flags, &err);
|
||||||
|
BOOST_CHECK_EQUAL(result, 0);
|
||||||
|
BOOST_CHECK_EQUAL(err, bitcoinconsensus_ERR_INVALID_FLAGS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
@ -98,6 +98,57 @@ class RawTransactionsTest(BitcoinTestFramework):
|
|||||||
# Test `createrawtransaction` invalid `replaceable`
|
# Test `createrawtransaction` invalid `replaceable`
|
||||||
assert_raises_rpc_error(-3, "Expected type bool", self.nodes[0].createrawtransaction, [], {}, 0, 'foo')
|
assert_raises_rpc_error(-3, "Expected type bool", self.nodes[0].createrawtransaction, [], {}, 0, 'foo')
|
||||||
|
|
||||||
|
for type in ["bech32", "p2sh-segwit", "legacy"]:
|
||||||
|
addr = self.nodes[0].getnewaddress("", type)
|
||||||
|
addrinfo = self.nodes[0].validateaddress(addr)
|
||||||
|
pubkey = addrinfo["scriptPubKey"]
|
||||||
|
|
||||||
|
self.log.info('sendrawtransaction with missing prevtx info (%s)' %(type))
|
||||||
|
|
||||||
|
# Test `signrawtransaction` invalid `prevtxs`
|
||||||
|
inputs = [ {'txid' : txid, 'vout' : 3, 'sequence' : 1000}]
|
||||||
|
outputs = { self.nodes[0].getnewaddress() : 1 }
|
||||||
|
rawtx = self.nodes[0].createrawtransaction(inputs, outputs)
|
||||||
|
|
||||||
|
prevtx = dict(txid=txid, scriptPubKey=pubkey, vout=3, amount=1)
|
||||||
|
succ = self.nodes[0].signrawtransaction(rawtx, [prevtx])
|
||||||
|
assert succ["complete"]
|
||||||
|
if type == "legacy":
|
||||||
|
del prevtx["amount"]
|
||||||
|
succ = self.nodes[0].signrawtransaction(rawtx, [prevtx])
|
||||||
|
assert succ["complete"]
|
||||||
|
|
||||||
|
if type != "legacy":
|
||||||
|
assert_raises_rpc_error(-3, "Missing amount", self.nodes[0].signrawtransaction, rawtx, [
|
||||||
|
{
|
||||||
|
"txid": txid,
|
||||||
|
"scriptPubKey": pubkey,
|
||||||
|
"vout": 3,
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
|
assert_raises_rpc_error(-3, "Missing vout", self.nodes[0].signrawtransaction, rawtx, [
|
||||||
|
{
|
||||||
|
"txid": txid,
|
||||||
|
"scriptPubKey": pubkey,
|
||||||
|
"amount": 1,
|
||||||
|
}
|
||||||
|
])
|
||||||
|
assert_raises_rpc_error(-3, "Missing txid", self.nodes[0].signrawtransaction, rawtx, [
|
||||||
|
{
|
||||||
|
"scriptPubKey": pubkey,
|
||||||
|
"vout": 3,
|
||||||
|
"amount": 1,
|
||||||
|
}
|
||||||
|
])
|
||||||
|
assert_raises_rpc_error(-3, "Missing scriptPubKey", self.nodes[0].signrawtransaction, rawtx, [
|
||||||
|
{
|
||||||
|
"txid": txid,
|
||||||
|
"vout": 3,
|
||||||
|
"amount": 1
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
#########################################
|
#########################################
|
||||||
# sendrawtransaction with missing input #
|
# sendrawtransaction with missing input #
|
||||||
#########################################
|
#########################################
|
||||||
|
Loading…
x
Reference in New Issue
Block a user