Compare commits

...

17 Commits

Author SHA1 Message Date
Wladimir J. van der Laan
49e34e2880 doc: Update manpages for 0.16.3
Tree-SHA512: e631405dd03438ac4b5fae5ed2fc0cb061e4cb7092ab068dd99b7c3001c95d166224f50af759454dbf47a2954409ac62c1232988918dd6650213918b853aea2d
2018-09-18 01:55:20 +02:00
Wladimir J. van der Laan
a0f4ff6088 doc: 0.16.3 release notes
Tree-SHA512: 4237ac0c1cd0c0f4c3f50494cf5985a95317730194820a22e2814571107a684fdd5253625707c95ac558a1ad8ab9f36904c46647d0cb931fe67ea2407738133a
2018-09-18 01:42:22 +02:00
Wladimir J. van der Laan
86e2f1d4bb build: Bump version to 0.16.3
Tree-SHA512: 56565311429f56d68508215eaa04f31f3e3f0144f367fc874da78652ce0aeb62b1d609513d9f8dcb204425c8e108103855a737eefc661f8b1f94c6219a9518a3
2018-09-18 01:26:53 +02:00
Wladimir J. van der Laan
696b936aa3 Merge #14249: [0.16] Fix crash bug with duplicate inputs within a transaction
9bd08fd465 [qa] backport: Test for duplicate inputs within a transaction (Suhas Daftuar)
d1dee20547 Fix crash bug with duplicate inputs within a transaction (Suhas Daftuar)

Pull request description:

  This is a backport of #14247 to 0.16.

Tree-SHA512: f11b2b0f2d8089bbac7542f78a0f14fc15c693604cb1168ef5ea71852a206da7eb53b6e420376ed1380583961176ba2d283e409e19d783c7a68c3407933a89b0
2018-09-18 01:25:55 +02:00
Suhas Daftuar
9bd08fd465 [qa] backport: Test for duplicate inputs within a transaction 2018-09-17 17:58:49 -04:00
Suhas Daftuar
d1dee20547 Fix crash bug with duplicate inputs within a transaction
Introduced by #9049
2018-09-17 22:22:30 +02:00
Wladimir J. van der Laan
9e116a6f87 Merge #13852: [0.16] doc: correct the help output for -prune
11b9dbb439 -prune option -help output aligned with code (Hennadii Stepanov)

Pull request description:

  Backports #13844 to the 0.16 branch.

Tree-SHA512: 84cac57ca3b1ef34892e73f131b5f3cc50d3f9e268a4123092cf6cdf519fc20616b5b084f9e9343505c15a2cf663a2c94d18c4587bcb7c261cbe32eeac8afe9b
2018-08-08 12:36:33 +02:00
Wladimir J. van der Laan
b64f02fcfa Merge #13796: [0.16] Make signrawtransaction give an error when amount is needed but missing
212ef1f954 [tests] Check signrawtransaction* errors on missing prevtx info (Anthony Towns)
1825e37075 Error on missing amount in signrawtransaction* (Anthony Towns)

Pull request description:

  Backport of #13547 to 0.16

Tree-SHA512: 7a660023b6948632a1f949443c18fa45add75ec8c36df1ebbaccd181dd1560c1bef460f061f8dab36b6a5df295eb4967effaa2cf55ea06b41d8f7562842a39ec
2018-08-08 12:29:30 +02:00
Hennadii Stepanov
11b9dbb439 -prune option -help output aligned with code
see: .../src/init.cpp#L1063

Github-Pull: #13844
Rebased-From: 312ff01
2018-08-02 21:35:23 +08:00
Wladimir J. van der Laan
6518bcd56c Merge #13797: [0.16] bitcoinconsensus: invalid flags should be set to bitcoinconsensus_error type, add test cases covering bitcoinconsensus error codes
1cdbea7f74 bitcoinconsensus: invalid flags should be set to bitcoinconsensus_error type, add test cases covering bitcoinconsensus error codes (Thomas Kerin)

Pull request description:

  Backport of #13655 to 0.16

Tree-SHA512: b62e185f2aa957f09255090e59f96c039f47a5623d68b6fef8d1dd831c6d3135b039be5cfad0f823687ff2a5143d24e34bd83fefcc9ba5b68f43054cbd9d909d
2018-07-30 17:04:07 +02:00
Wladimir J. van der Laan
8561515022 doc: Clean out release notes after 0.16.2
Tree-SHA512: fb7208356134322f3515c682ac7349eddb1ff54094abe397c94acb7e931b42265aca6b716eba072f79ebdb4a69ea87a5e40b6c4a48571db5b7b095ead45456ef
2018-07-30 16:38:26 +02:00
Thomas Kerin
1cdbea7f74 bitcoinconsensus: invalid flags should be set to bitcoinconsensus_error type, add test cases covering bitcoinconsensus error codes
Github-Pull: #13655
Rebased-From: 417b6c1d29
2018-07-29 21:08:45 +00:00
Anthony Towns
212ef1f954 [tests] Check signrawtransaction* errors on missing prevtx info
Github-Pull: #13547
Rebased-From: 685d1d8115
2018-07-29 20:26:45 +00:00
Anthony Towns
1825e37075 Error on missing amount in signrawtransaction*
Signatures using segregated witness commit to the amount being spent,
so that value must be passed into signrawtransactionwithkey and
signrawtransactionwithwallet. This ensures an error is issued if that
doesn't happen, rather than just assuming the value is 0 and producing
a signature that is almost certainly invalid.

Github-Pull: #13547
Rebased-From: a3b065b51f
2018-07-29 20:26:45 +00:00
Wladimir J. van der Laan
2848aa808f Merge #13703: 0.16.2: [doc] Bump manpages
0296b9c85e 0.16.2: Bump manpages (MarcoFalke)

Pull request description:

Tree-SHA512: 6fffb8ca0e3f2fbbb7561bf9e8710b1ece6475cc76d56120b790b0fa6261cb7a06f65816ab49a37e1ef5b99883d3e9649ac7f8dcabcfb716de03ca85a86cd320
2018-07-20 14:54:20 +02:00
MarcoFalke
0296b9c85e 0.16.2: Bump manpages 2018-07-18 13:38:06 -04:00
Wladimir J. van der Laan
08ca314410 doc: Fill in changelog and credits in release notes
Tree-SHA512: cb2a7cd91447b6e4ad13055e97b542c6984309e28cd33898f3c4bbe92141c6cb65cc472821b34e63f94aa675553d8d68709c431255ccc17e0fc0c54c0c3836bc
2018-07-18 15:36:50 +02:00
13 changed files with 262 additions and 40 deletions

View File

@@ -2,7 +2,7 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
AC_PREREQ([2.60])
define(_CLIENT_VERSION_MAJOR, 0)
define(_CLIENT_VERSION_MINOR, 16)
define(_CLIENT_VERSION_REVISION, 2)
define(_CLIENT_VERSION_REVISION, 3)
define(_CLIENT_VERSION_BUILD, 0)
define(_CLIENT_VERSION_IS_RELEASE, true)
define(_COPYRIGHT_YEAR, 2018)

View File

@@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
.TH BITCOIN-CLI "1" "January 2018" "bitcoin-cli v0.16.0.0" "User Commands"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6.
.TH BITCOIN-CLI "1" "September 2018" "bitcoin-cli v0.16.3.0" "User Commands"
.SH NAME
bitcoin-cli \- manual page for bitcoin-cli v0.16.0.0
bitcoin-cli \- manual page for bitcoin-cli v0.16.3.0
.SH DESCRIPTION
Bitcoin Core RPC client version v0.16.0.0
Bitcoin Core RPC client version v0.16.3.0
.SS "Usage:"
.TP
bitcoin\-cli [options] <command> [params]

View File

@@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
.TH BITCOIN-QT "1" "January 2018" "bitcoin-qt v0.16.0.0" "User Commands"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6.
.TH BITCOIN-QT "1" "September 2018" "bitcoin-qt v0.16.3.0" "User Commands"
.SH NAME
bitcoin-qt \- manual page for bitcoin-qt v0.16.0.0
bitcoin-qt \- manual page for bitcoin-qt v0.16.3.0
.SH DESCRIPTION
Bitcoin Core version v0.16.0.0 (64\-bit)
Bitcoin Core version v0.16.3.0 (64\-bit)
Usage:
.IP
bitcoin\-qt [command\-line options]
@@ -97,7 +97,7 @@ blocks if a target size in MiB is provided. This mode is
incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this
setting requires re\-downloading the entire blockchain. (default:
0 = disable pruning blocks, 1 = allow manual pruning via RPC,
>550 = automatically prune block files to stay under the
>=550 = automatically prune block files to stay under the
specified target size in MiB)
.HP
\fB\-reindex\-chainstate\fR
@@ -469,11 +469,6 @@ Block creation options:
.IP
Set maximum BIP141 block weight (default: 3996000)
.HP
\fB\-blockmaxsize=\fR<n>
.IP
Set maximum BIP141 block weight to this * 4. Deprecated, use
blockmaxweight
.HP
\fB\-blockmintxfee=\fR<amt>
.IP
Set lowest fee rate (in BTC/kB) for transactions to be included in block

View File

@@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
.TH BITCOIN-TX "1" "January 2018" "bitcoin-tx v0.16.0.0" "User Commands"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6.
.TH BITCOIN-TX "1" "September 2018" "bitcoin-tx v0.16.3.0" "User Commands"
.SH NAME
bitcoin-tx \- manual page for bitcoin-tx v0.16.0.0
bitcoin-tx \- manual page for bitcoin-tx v0.16.3.0
.SH DESCRIPTION
Bitcoin Core bitcoin\-tx utility version v0.16.0.0
Bitcoin Core bitcoin\-tx utility version v0.16.3.0
.SS "Usage:"
.TP
bitcoin\-tx [options] <hex\-tx> [commands]

View File

@@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
.TH BITCOIND "1" "January 2018" "bitcoind v0.16.0.0" "User Commands"
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6.
.TH BITCOIND "1" "September 2018" "bitcoind v0.16.3.0" "User Commands"
.SH NAME
bitcoind \- manual page for bitcoind v0.16.0.0
bitcoind \- manual page for bitcoind v0.16.3.0
.SH DESCRIPTION
Bitcoin Core Daemon version v0.16.0.0
Bitcoin Core Daemon version v0.16.3.0
.SS "Usage:"
.TP
bitcoind [options]
@@ -102,7 +102,7 @@ blocks if a target size in MiB is provided. This mode is
incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this
setting requires re\-downloading the entire blockchain. (default:
0 = disable pruning blocks, 1 = allow manual pruning via RPC,
>550 = automatically prune block files to stay under the
>=550 = automatically prune block files to stay under the
specified target size in MiB)
.HP
\fB\-reindex\-chainstate\fR
@@ -474,11 +474,6 @@ Block creation options:
.IP
Set maximum BIP141 block weight (default: 3996000)
.HP
\fB\-blockmaxsize=\fR<n>
.IP
Set maximum BIP141 block weight to this * 4. Deprecated, use
blockmaxweight
.HP
\fB\-blockmintxfee=\fR<amt>
.IP
Set lowest fee rate (in BTC/kB) for transactions to be included in block

View File

@@ -1,6 +1,6 @@
Bitcoin Core version 0.16.2 is now available from:
Bitcoin Core version 0.16.3 is now available from:
<https://bitcoincore.org/bin/bitcoin-core-0.16.2/>
<https://bitcoincore.org/bin/bitcoin-core-0.16.3/>
This is a new minor version release, with various bugfixes
as well as updated translations.
@@ -49,19 +49,42 @@ frequently tested on them.
Notable changes
===============
to be filled in
Denial-of-Service vulnerability
-------------------------------
0.16.2 change log
A denial-of-service vulnerability exploitable by miners has been discovered in
Bitcoin Core versions 0.14.0 up to 0.16.2. It is recommended to upgrade any of
the vulnerable versions to 0.16.3 as soon as possible.
0.16.3 change log
------------------
to be filled in
### Consensus
- #14249 `696b936` Fix crash bug with duplicate inputs within a transaction (TheBlueMatt, sdaftuar)
### RPC and other APIs
- #13547 `212ef1f` Make `signrawtransaction*` give an error when amount is needed but missing (ajtowns)
### Miscellaneous
- #13655 `1cdbea7` bitcoinconsensus: invalid flags error should be set to `bitcoinconsensus_err` (afk11)
### Documentation
- #13844 `11b9dbb` correct the help output for -prune (hebasto)
Credits
=======
Thanks to everyone who directly contributed to this release:
to be filled in
- Anthony Towns
- Hennadii Stepanov
- Matt Corallo
- Suhas Daftuar
- Thomas Kerin
- Wladimir J. van der Laan
And to those that reported security issues:
- beardnboobies
As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).

View File

@@ -375,7 +375,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

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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()

View File

@@ -3032,7 +3032,7 @@ bool CheckBlock(const CBlock& block, CValidationState& state, const Consensus::P
// Check transactions
for (const auto& tx : block.vtx)
if (!CheckTransaction(*tx, state, false))
if (!CheckTransaction(*tx, state, true))
return state.Invalid(false, state.GetRejectCode(), state.GetRejectReason(),
strprintf("Transaction check failed (tx hash %s) %s", tx->GetHash().ToString(), state.GetDebugMessage()));

View File

@@ -95,7 +95,18 @@ class InvalidBlockRequestTest(ComparisonTestFramework):
assert(block2_orig.vtx != block2.vtx)
self.tip = block2.sha256
yield TestInstance([[block2, RejectResult(16, b'bad-txns-duplicate')], [block2_orig, True]])
yield TestInstance([[block2, RejectResult(16, b'bad-txns-duplicate')]])
# Check transactions for duplicate inputs
self.log.info("Test duplicate input block.")
block2_dup = copy.deepcopy(block2_orig)
block2_dup.vtx[2].vin.append(block2_dup.vtx[2].vin[0])
block2_dup.vtx[2].rehash()
block2_dup.hashMerkleRoot = block2_dup.calc_merkle_root()
block2_dup.rehash()
block2_dup.solve()
yield TestInstance([[block2_dup, RejectResult(16, b'bad-txns-inputs-duplicate')], [block2_orig, True]])
height += 1
'''

View File

@@ -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 #
#########################################