mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-14 17:17:58 +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
|
||||
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
|
||||
frequently tested on them.
|
||||
|
||||
0.16.2 change log
|
||||
Notable changes
|
||||
===============
|
||||
|
||||
(to be filled in)
|
||||
|
||||
0.16.x change log
|
||||
------------------
|
||||
|
||||
### Wallet
|
||||
- #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)
|
||||
(to be filled in)
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Thanks to everyone who directly contributed to this release:
|
||||
|
||||
- 532479301
|
||||
- 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
|
||||
(to be filled in)
|
||||
|
||||
And to those that reported security issues:
|
||||
|
||||
- Braydon Fuller
|
||||
- Himanshu Mehta
|
||||
(to be filled in)
|
||||
|
||||
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
|
||||
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. "
|
||||
"(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", _("Rebuild chain state and block index from the blk*.dat files on disk"));
|
||||
#ifndef WIN32
|
||||
|
@ -830,7 +830,7 @@ UniValue signrawtransaction(const JSONRPCRequest& request)
|
||||
}
|
||||
Coin newcoin;
|
||||
newcoin.out.scriptPubKey = scriptPubKey;
|
||||
newcoin.out.nValue = 0;
|
||||
newcoin.out.nValue = MAX_MONEY;
|
||||
if (prevOut.exists("amount")) {
|
||||
newcoin.out.nValue = AmountFromValue(find_value(prevOut, "amount"));
|
||||
}
|
||||
@ -910,6 +910,11 @@ UniValue signrawtransaction(const JSONRPCRequest& request)
|
||||
|
||||
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;
|
||||
if (!VerifyScript(txin.scriptSig, prevPubKey, &txin.scriptWitness, STANDARD_SCRIPT_VERIFY_FLAGS, TransactionSignatureChecker(&txConst, i, amount), &serror)) {
|
||||
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)
|
||||
{
|
||||
if (!verify_flags(flags)) {
|
||||
return bitcoinconsensus_ERR_INVALID_FLAGS;
|
||||
return set_error(err, bitcoinconsensus_ERR_INVALID_FLAGS);
|
||||
}
|
||||
try {
|
||||
TxInputStream stream(SER_NETWORK, PROTOCOL_VERSION, txTo, txToLen);
|
||||
|
@ -1481,4 +1481,146 @@ BOOST_AUTO_TEST_CASE(script_can_append_self)
|
||||
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()
|
||||
|
@ -98,6 +98,57 @@ class RawTransactionsTest(BitcoinTestFramework):
|
||||
# Test `createrawtransaction` invalid `replaceable`
|
||||
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 #
|
||||
#########################################
|
||||
|
Loading…
x
Reference in New Issue
Block a user