From 473e1e9ca12cf74ce7082b018b23a9110ddb181c Mon Sep 17 00:00:00 2001 From: Steven Roose Date: Tue, 21 May 2019 16:18:48 +0100 Subject: [PATCH] MERGE-FIX: Fix compatibility functional tests --- src/outputtype.cpp | 2 +- src/primitives/transaction.h | 4 ---- src/rpc/rawtransaction.cpp | 16 ++++++++-------- src/wallet/rpcwallet.cpp | 2 +- .../functional/feature_filelock.py | 6 ++++-- .../functional/rpc_rawtransaction.py | 3 ++- .../bitcoin_functional/functional/test_runner.py | 2 +- .../bitcoin_functional/functional/tool_wallet.py | 3 ++- .../functional/wallet_address_types.py | 3 ++- 9 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/outputtype.cpp b/src/outputtype.cpp index cfd054e2f8..c24c4460af 100644 --- a/src/outputtype.cpp +++ b/src/outputtype.cpp @@ -113,7 +113,7 @@ CTxDestination AddAndGetDestinationForScript(CKeyStore& keystore, const CScript& if (type == OutputType::BECH32) { return witdest; } else { - return ScriptHash(CScriptID(witprog)); + return ScriptHash(witprog); } } default: assert(false); diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 7bed21ad90..92dc82142c 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -387,10 +387,6 @@ inline void UnserializeTransaction(TxType& tx, Stream& s) { s >> tx.witness.vtxinwit[i].m_pegin_witness.stack; } } - if (!tx.HasWitness()) { - /* It's illegal to encode witnesses when all witness stacks are empty. */ - throw std::ios_base::failure("Superfluous witness record"); - } } s >> tx.nLockTime; } diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 3281fd68a6..56d6e07326 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -608,7 +608,7 @@ static UniValue createrawtransaction(const JSONRPCRequest& request) CMutableTransaction rawTx = ConstructTransaction(request.params[0], request.params[1], request.params[2], request.params[3], request.params[4]); - return EncodeHexTx(CTransaction(rawTx), RPCSerializationFlags()); + return EncodeHexTx(CTransaction(rawTx)); } static UniValue decoderawtransaction(const JSONRPCRequest& request) @@ -865,7 +865,7 @@ static UniValue combinerawtransaction(const JSONRPCRequest& request) UpdateTransaction(mergedTx, i, sigdata); } - return EncodeHexTx(CTransaction(mergedTx), RPCSerializationFlags()); + return EncodeHexTx(CTransaction(mergedTx)); } UniValue SignTransaction(interfaces::Chain& chain, CMutableTransaction& mtx, const UniValue& prevTxsUnival, CBasicKeyStore *keystore, bool is_temp_keystore, const UniValue& hashType) @@ -1029,7 +1029,7 @@ UniValue SignTransaction(interfaces::Chain& chain, CMutableTransaction& mtx, con bool fComplete = vErrors.empty(); UniValue result(UniValue::VOBJ); - result.pushKV("hex", EncodeHexTx(CTransaction(mtx), RPCSerializationFlags())); + result.pushKV("hex", EncodeHexTx(CTransaction(mtx))); result.pushKV("complete", fComplete); if (!vErrors.empty()) { result.pushKV("errors", vErrors); @@ -1944,7 +1944,7 @@ UniValue rawblindrawtransaction(const JSONRPCRequest& request) if (num_pubkeys == 0 && n_blinded_ins == 0) { // Vacuous, just return the transaction - return EncodeHexTx(CTransaction(tx), RPCSerializationFlags()); + return EncodeHexTx(CTransaction(tx)); } else if (n_blinded_ins > 0 && num_pubkeys == 0) { // No notion of wallet, cannot complete this blinding without passed-in pubkey throw JSONRPCError(RPC_INVALID_PARAMETER, "Unable to blind transaction: Add another output to blind in order to complete the blinding."); @@ -1952,7 +1952,7 @@ UniValue rawblindrawtransaction(const JSONRPCRequest& request) if (fIgnoreBlindFail) { // Just get rid of the ECDH key in the nonce field and return tx.vout[keyIndex].nNonce.SetNull(); - return EncodeHexTx(CTransaction(tx), RPCSerializationFlags()); + return EncodeHexTx(CTransaction(tx)); } else { throw JSONRPCError(RPC_INVALID_PARAMETER, "Unable to blind transaction: Add another output to blind in order to complete the blinding."); } @@ -1965,7 +1965,7 @@ UniValue rawblindrawtransaction(const JSONRPCRequest& request) throw JSONRPCError(RPC_INVALID_PARAMETER, "Unable to blind transaction: Are you sure each asset type to blind is represented in the inputs?"); } - return EncodeHexTx(CTransaction(tx), RPCSerializationFlags()); + return EncodeHexTx(CTransaction(tx)); } struct RawIssuanceDetails @@ -2189,7 +2189,7 @@ UniValue rawissueasset(const JSONRPCRequest& request) UniValue obj(UniValue::VOBJ); if (issuances_til_now == issuances.size()) { - obj.pushKV("hex", EncodeHexTx(CTransaction(mtx), RPCSerializationFlags())); + obj.pushKV("hex", EncodeHexTx(CTransaction(mtx))); } obj.pushKV("vin", details.input_index); obj.pushKV("entropy", details.entropy.GetHex()); @@ -2287,7 +2287,7 @@ UniValue rawreissueasset(const JSONRPCRequest& request) } UniValue ret(UniValue::VOBJ); - ret.pushKV("hex", EncodeHexTx(CTransaction(mtx), RPCSerializationFlags())); + ret.pushKV("hex", EncodeHexTx(CTransaction(mtx))); return ret; } diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 802c50bf88..a5d2ee7926 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -3132,7 +3132,7 @@ static UniValue listunspent(const JSONRPCRequest& request) } if (scriptPubKey.IsPayToScriptHash()) { - const CScriptID hash(GetScriptForDestination(address)); + const CScriptID& hash = CScriptID(boost::get(address)); CScript redeemScript; if (pwallet->GetCScript(hash, redeemScript)) { entry.pushKV("redeemScript", HexStr(redeemScript.begin(), redeemScript.end())); diff --git a/test/bitcoin_functional/functional/feature_filelock.py b/test/bitcoin_functional/functional/feature_filelock.py index 9fb0d35a68..9910432dfe 100755 --- a/test/bitcoin_functional/functional/feature_filelock.py +++ b/test/bitcoin_functional/functional/feature_filelock.py @@ -23,12 +23,14 @@ class FilelockTest(BitcoinTestFramework): self.log.info("Using datadir {}".format(datadir)) self.log.info("Check that we can't start a second bitcoind instance using the same datadir") - expected_msg = "Error: Cannot obtain a lock on data directory {}. Bitcoin Core is probably already running.".format(datadir) + # ELEMENTS: s/Bitcoin/Elements/ + expected_msg = "Error: Cannot obtain a lock on data directory {}. Elements Core is probably already running.".format(datadir) self.nodes[1].assert_start_raises_init_error(extra_args=['-datadir={}'.format(self.nodes[0].datadir), '-noserver'], expected_msg=expected_msg) if self.is_wallet_compiled(): wallet_dir = os.path.join(datadir, 'wallets') - self.log.info("Check that we can't start a second bitcoind instance using the same wallet") + # ELEMENTS: s/bitcoind/daemon/ + self.log.info("Check that we can't start a second daemon instance using the same wallet") expected_msg = "Error: Error initializing wallet database environment" self.nodes[1].assert_start_raises_init_error(extra_args=['-walletdir={}'.format(wallet_dir), '-noserver'], expected_msg=expected_msg, match=ErrorMatch.PARTIAL_REGEX) diff --git a/test/bitcoin_functional/functional/rpc_rawtransaction.py b/test/bitcoin_functional/functional/rpc_rawtransaction.py index c793cf00de..2f25d5a639 100755 --- a/test/bitcoin_functional/functional/rpc_rawtransaction.py +++ b/test/bitcoin_functional/functional/rpc_rawtransaction.py @@ -74,7 +74,8 @@ class RawTransactionsTest(BitcoinTestFramework): assert_raises_rpc_error(-1, "createrawtransaction", self.nodes[0].createrawtransaction, []) # Test `createrawtransaction` invalid extra parameters - assert_raises_rpc_error(-1, "createrawtransaction", self.nodes[0].createrawtransaction, [], {}, 0, False, 'foo') + # ELEMENTS: + #assert_raises_rpc_error(-1, "createrawtransaction", self.nodes[0].createrawtransaction, [], {}, 0, False, 'foo') # Test `createrawtransaction` invalid `inputs` txid = '1d1d4e24ed99057e84c3f80fd8fbec79ed9e1acee37da269356ecea000000000' diff --git a/test/bitcoin_functional/functional/test_runner.py b/test/bitcoin_functional/functional/test_runner.py index 1aca35f15f..ff7d440112 100755 --- a/test/bitcoin_functional/functional/test_runner.py +++ b/test/bitcoin_functional/functional/test_runner.py @@ -121,8 +121,8 @@ BASE_SCRIPTS = [ 'wallet_createwallet.py --usecli', 'interface_http.py', 'interface_rpc.py', - 'rpc_psbt.py', # ELEMENTS: + #'rpc_psbt.py', #'rpc_users.py', 'feature_proxy.py', 'rpc_signrawtransaction.py', diff --git a/test/bitcoin_functional/functional/tool_wallet.py b/test/bitcoin_functional/functional/tool_wallet.py index fbcf21e729..bee913ba04 100755 --- a/test/bitcoin_functional/functional/tool_wallet.py +++ b/test/bitcoin_functional/functional/tool_wallet.py @@ -18,7 +18,8 @@ class ToolWalletTest(BitcoinTestFramework): self.skip_if_no_wallet() def bitcoin_wallet_process(self, *args): - binary = self.config["environment"]["BUILDDIR"] + '/src/bitcoin-wallet' + self.config["environment"]["EXEEXT"] + # ELEMENTS: + binary = self.config["environment"]["BUILDDIR"] + '/src/elements-wallet' + self.config["environment"]["EXEEXT"] args = ['-datadir={}'.format(self.nodes[0].datadir), '-regtest'] + list(args) return subprocess.Popen([binary] + args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) diff --git a/test/bitcoin_functional/functional/wallet_address_types.py b/test/bitcoin_functional/functional/wallet_address_types.py index 380dd9c0ad..445c5556cc 100755 --- a/test/bitcoin_functional/functional/wallet_address_types.py +++ b/test/bitcoin_functional/functional/wallet_address_types.py @@ -307,7 +307,8 @@ class AddressTypeTest(BitcoinTestFramework): for utxo in self.nodes[to_node].listunspent(): if utxo['address'] == addresses[to_node][0]: found = True - self.test_desc(to_node, addresses[to_node][0], multisig, addresses[to_node][1], utxo) + #TODO(gwillen) turn back on after PSBT + #self.test_desc(to_node, addresses[to_node][0], multisig, addresses[to_node][1], utxo) break assert found