aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcontrib/testgen/gen_base58_test_vectors.py2
-rw-r--r--src/core_write.cpp4
-rw-r--r--src/qt/rpcconsole.cpp3
-rw-r--r--src/rpc/server.h2
-rw-r--r--src/txmempool.cpp2
-rw-r--r--src/txmempool.h8
-rw-r--r--src/validation.h2
-rw-r--r--src/validationinterface.h7
-rwxr-xr-xtest/functional/bip68-sequence.py4
-rwxr-xr-xtest/functional/bumpfee.py110
-rwxr-xr-xtest/functional/fundrawtransaction.py1
-rwxr-xr-xtest/functional/import-rescan.py1
-rwxr-xr-xtest/functional/multi_rpc.py2
-rwxr-xr-xtest/functional/rawtransactions.py1
-rwxr-xr-xtest/functional/segwit.py5
-rwxr-xr-xtest/functional/smartfees.py3
-rw-r--r--test/functional/test_framework/socks5.py1
-rwxr-xr-xtest/functional/test_framework/test_framework.py1
-rwxr-xr-xtest/functional/zmq_test.py1
19 files changed, 70 insertions, 90 deletions
diff --git a/contrib/testgen/gen_base58_test_vectors.py b/contrib/testgen/gen_base58_test_vectors.py
index ac0701e6be..86366eb8e3 100755
--- a/contrib/testgen/gen_base58_test_vectors.py
+++ b/contrib/testgen/gen_base58_test_vectors.py
@@ -13,7 +13,7 @@ Usage:
# Released under MIT License
import os
from itertools import islice
-from base58 import b58encode, b58decode, b58encode_chk, b58decode_chk, b58chars
+from base58 import b58encode_chk, b58decode_chk, b58chars
import random
from binascii import b2a_hex
diff --git a/src/core_write.cpp b/src/core_write.cpp
index b0993a131f..a3ca87c8b5 100644
--- a/src/core_write.cpp
+++ b/src/core_write.cpp
@@ -114,9 +114,9 @@ std::string ScriptToAsmStr(const CScript& script, const bool fAttemptSighashDeco
return str;
}
-std::string EncodeHexTx(const CTransaction& tx, const int serialFlags)
+std::string EncodeHexTx(const CTransaction& tx, const int serializeFlags)
{
- CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION | serialFlags);
+ CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION | serializeFlags);
ssTx << tx;
return HexStr(ssTx.begin(), ssTx.end());
}
diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp
index 60406c2059..7a0d0b3e0a 100644
--- a/src/qt/rpcconsole.cpp
+++ b/src/qt/rpcconsole.cpp
@@ -626,9 +626,12 @@ void RPCConsole::setClientModel(ClientModel *model)
for (size_t i = 0; i < commandList.size(); ++i)
{
wordList << commandList[i].c_str();
+ wordList << ("help " + commandList[i]).c_str();
}
+ wordList.sort();
autoCompleter = new QCompleter(wordList, this);
+ autoCompleter->setModelSorting(QCompleter::CaseSensitivelySortedModel);
ui->lineEdit->setCompleter(autoCompleter);
autoCompleter->popup()->installEventFilter(this);
// Start thread to execute RPC commands.
diff --git a/src/rpc/server.h b/src/rpc/server.h
index ad064e5690..de14c7ed3e 100644
--- a/src/rpc/server.h
+++ b/src/rpc/server.h
@@ -68,7 +68,7 @@ void SetRPCWarmupStatus(const std::string& newStatus);
void SetRPCWarmupFinished();
/* returns the current warmup state. */
-bool RPCIsInWarmup(std::string *statusOut);
+bool RPCIsInWarmup(std::string *outStatus);
/**
* Type-check arguments; throws JSONRPCError if wrong type given. Does not check that
diff --git a/src/txmempool.cpp b/src/txmempool.cpp
index fb58208774..6e1d7a42b5 100644
--- a/src/txmempool.cpp
+++ b/src/txmempool.cpp
@@ -108,7 +108,7 @@ void CTxMemPool::UpdateForDescendants(txiter updateIt, cacheMap &cachedDescendan
// vHashesToUpdate is the set of transaction hashes from a disconnected block
// which has been re-added to the mempool.
-// for each entry, look for descendants that are outside hashesToUpdate, and
+// for each entry, look for descendants that are outside vHashesToUpdate, and
// add fee/size information for such descendants to the parent.
// for each such descendant, also update the ancestor state to include the parent.
void CTxMemPool::UpdateTransactionsFromBlock(const std::vector<uint256> &vHashesToUpdate)
diff --git a/src/txmempool.h b/src/txmempool.h
index f9a9d088d0..4222789510 100644
--- a/src/txmempool.h
+++ b/src/txmempool.h
@@ -552,12 +552,12 @@ public:
* new mempool entries may have children in the mempool (which is generally
* not the case when otherwise adding transactions).
* UpdateTransactionsFromBlock() will find child transactions and update the
- * descendant state for each transaction in hashesToUpdate (excluding any
- * child transactions present in hashesToUpdate, which are already accounted
- * for). Note: hashesToUpdate should be the set of transactions from the
+ * descendant state for each transaction in vHashesToUpdate (excluding any
+ * child transactions present in vHashesToUpdate, which are already accounted
+ * for). Note: vHashesToUpdate should be the set of transactions from the
* disconnected block that have been accepted back into the mempool.
*/
- void UpdateTransactionsFromBlock(const std::vector<uint256> &hashesToUpdate);
+ void UpdateTransactionsFromBlock(const std::vector<uint256> &vHashesToUpdate);
/** Try to calculate all in-mempool ancestors of entry.
* (these are all calculated including the tx itself)
diff --git a/src/validation.h b/src/validation.h
index 43f0dbae34..5f8e9a689c 100644
--- a/src/validation.h
+++ b/src/validation.h
@@ -314,7 +314,7 @@ void FlushStateToDisk();
/** Prune block files and flush state to disk. */
void PruneAndFlush();
/** Prune block files up to a given height */
-void PruneBlockFilesManual(int nPruneUpToHeight);
+void PruneBlockFilesManual(int nManualPruneHeight);
/** (try to) add transaction to memory pool
* plTxnReplaced will be appended to with all transactions replaced from mempool **/
diff --git a/src/validationinterface.h b/src/validationinterface.h
index a494eb6990..7f13a29d23 100644
--- a/src/validationinterface.h
+++ b/src/validationinterface.h
@@ -69,7 +69,12 @@ struct CMainSignals {
boost::signals2::signal<void (const uint256 &)> Inventory;
/** Tells listeners to broadcast their data. */
boost::signals2::signal<void (int64_t nBestBlockTime, CConnman* connman)> Broadcast;
- /** Notifies listeners of a block validation result */
+ /**
+ * Notifies listeners of a block validation result.
+ * If the provided CValidationState IsValid, the provided block
+ * is guaranteed to be the current best block at the time the
+ * callback was generated (not necessarily now)
+ */
boost::signals2::signal<void (const CBlock&, const CValidationState&)> BlockChecked;
/** Notifies listeners that a key for mining is required (coinbase) */
boost::signals2::signal<void (boost::shared_ptr<CReserveScript>&)> ScriptForMining;
diff --git a/test/functional/bip68-sequence.py b/test/functional/bip68-sequence.py
index 3ed6ebe044..89d42a710c 100755
--- a/test/functional/bip68-sequence.py
+++ b/test/functional/bip68-sequence.py
@@ -378,8 +378,8 @@ class BIP68Test(BitcoinTestFramework):
# activation should happen at block height 432 (3 periods)
min_activation_height = 432
height = self.nodes[0].getblockcount()
- assert(height < 432)
- self.nodes[0].generate(432-height)
+ assert(height < min_activation_height)
+ self.nodes[0].generate(min_activation_height-height)
assert(get_bip9_status(self.nodes[0], 'csv')['status'] == 'active')
sync_blocks(self.nodes)
diff --git a/test/functional/bumpfee.py b/test/functional/bumpfee.py
index 8f75e9ed4d..172e414188 100755
--- a/test/functional/bumpfee.py
+++ b/test/functional/bumpfee.py
@@ -2,7 +2,17 @@
# Copyright (c) 2016 The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
-"""Test the bumpfee RPC."""
+"""Test the bumpfee RPC.
+
+Verifies that the bumpfee RPC creates replacement transactions successfully when
+its preconditions are met, and returns appropriate errors in other cases.
+
+This module consists of around a dozen individual test cases implemented in the
+top-level functions named as test_<test_case_description>. The test functions
+can be disabled or reordered if needed for debugging. If new test cases are
+added in the the future, they should try to follow the same convention and not
+make assumptions about execution order.
+"""
from segwit import send_to_witness
from test_framework.test_framework import BitcoinTestFramework
@@ -57,13 +67,13 @@ class BumpFeeTest(BitcoinTestFramework):
self.log.info("Running tests")
dest_address = peer_node.getnewaddress()
- test_small_output_fails(rbf_node, dest_address)
- test_dust_to_fee(rbf_node, dest_address)
test_simple_bumpfee_succeeds(rbf_node, peer_node, dest_address)
test_segwit_bumpfee_succeeds(rbf_node, dest_address)
test_nonrbf_bumpfee_fails(peer_node, dest_address)
test_notmine_bumpfee_fails(rbf_node, peer_node, dest_address)
test_bumpfee_with_descendant_fails(rbf_node, rbf_node_address, dest_address)
+ test_small_output_fails(rbf_node, dest_address)
+ test_dust_to_fee(rbf_node, dest_address)
test_settxfee(rbf_node, dest_address)
test_rebumping(rbf_node, dest_address)
test_rebumping_not_replaceable(rbf_node, dest_address)
@@ -74,7 +84,7 @@ class BumpFeeTest(BitcoinTestFramework):
def test_simple_bumpfee_succeeds(rbf_node, peer_node, dest_address):
- rbfid = create_fund_sign_send(rbf_node, {dest_address: 0.00090000})
+ rbfid = spend_one_input(rbf_node, dest_address)
rbftx = rbf_node.gettransaction(rbfid)
sync_mempools((rbf_node, peer_node))
assert rbfid in rbf_node.getrawmempool() and rbfid in peer_node.getrawmempool()
@@ -115,7 +125,7 @@ def test_segwit_bumpfee_succeeds(rbf_node, dest_address):
'vout': 0,
"sequence": BIP125_SEQUENCE_NUMBER
}], {dest_address: Decimal("0.0005"),
- get_change_address(rbf_node): Decimal("0.0003")})
+ rbf_node.getrawchangeaddress(): Decimal("0.0003")})
rbfsigned = rbf_node.signrawtransaction(rbfraw)
rbfid = rbf_node.sendrawtransaction(rbfsigned["hex"])
assert rbfid in rbf_node.getrawmempool()
@@ -127,7 +137,7 @@ def test_segwit_bumpfee_succeeds(rbf_node, dest_address):
def test_nonrbf_bumpfee_fails(peer_node, dest_address):
# cannot replace a non RBF transaction (from node which did not enable RBF)
- not_rbfid = create_fund_sign_send(peer_node, {dest_address: 0.00090000})
+ not_rbfid = peer_node.sendtoaddress(dest_address, Decimal("0.00090000"))
assert_raises_jsonrpc(-4, "not BIP 125 replaceable", peer_node.bumpfee, not_rbfid)
@@ -155,7 +165,7 @@ def test_notmine_bumpfee_fails(rbf_node, peer_node, dest_address):
def test_bumpfee_with_descendant_fails(rbf_node, rbf_node_address, dest_address):
# cannot bump fee if the transaction has a descendant
# parent is send-to-self, so we don't have to check which output is change when creating the child tx
- parent_id = create_fund_sign_send(rbf_node, {rbf_node_address: 0.00050000})
+ parent_id = spend_one_input(rbf_node, rbf_node_address)
tx = rbf_node.createrawtransaction([{"txid": parent_id, "vout": 0}], {dest_address: 0.00020000})
tx = rbf_node.signrawtransaction(tx)
txid = rbf_node.sendrawtransaction(tx["hex"])
@@ -164,58 +174,50 @@ def test_bumpfee_with_descendant_fails(rbf_node, rbf_node_address, dest_address)
def test_small_output_fails(rbf_node, dest_address):
# cannot bump fee with a too-small output
- rbfid = spend_one_input(rbf_node,
- Decimal("0.00100000"),
- {dest_address: 0.00080000,
- get_change_address(rbf_node): Decimal("0.00010000")})
- rbf_node.bumpfee(rbfid, {"totalFee": 20000})
+ rbfid = spend_one_input(rbf_node, dest_address)
+ rbf_node.bumpfee(rbfid, {"totalFee": 50000})
- rbfid = spend_one_input(rbf_node,
- Decimal("0.00100000"),
- {dest_address: 0.00080000,
- get_change_address(rbf_node): Decimal("0.00010000")})
- assert_raises_jsonrpc(-4, "Change output is too small", rbf_node.bumpfee, rbfid, {"totalFee": 20001})
+ rbfid = spend_one_input(rbf_node, dest_address)
+ assert_raises_jsonrpc(-4, "Change output is too small", rbf_node.bumpfee, rbfid, {"totalFee": 50001})
def test_dust_to_fee(rbf_node, dest_address):
# check that if output is reduced to dust, it will be converted to fee
- # the bumped tx sets fee=9900, but it converts to 10,000
- rbfid = spend_one_input(rbf_node,
- Decimal("0.00100000"),
- {dest_address: 0.00080000,
- get_change_address(rbf_node): Decimal("0.00010000")})
+ # the bumped tx sets fee=49,900, but it converts to 50,000
+ rbfid = spend_one_input(rbf_node, dest_address)
fulltx = rbf_node.getrawtransaction(rbfid, 1)
- bumped_tx = rbf_node.bumpfee(rbfid, {"totalFee": 19900})
+ bumped_tx = rbf_node.bumpfee(rbfid, {"totalFee": 49900})
full_bumped_tx = rbf_node.getrawtransaction(bumped_tx["txid"], 1)
- assert_equal(bumped_tx["fee"], Decimal("0.00020000"))
+ assert_equal(bumped_tx["fee"], Decimal("0.00050000"))
assert_equal(len(fulltx["vout"]), 2)
assert_equal(len(full_bumped_tx["vout"]), 1) #change output is eliminated
def test_settxfee(rbf_node, dest_address):
# check that bumpfee reacts correctly to the use of settxfee (paytxfee)
- # increase feerate by 2.5x, test that fee increased at least 2x
- rbf_node.settxfee(Decimal("0.00001000"))
- rbfid = create_fund_sign_send(rbf_node, {dest_address: 0.00090000})
+ rbfid = spend_one_input(rbf_node, dest_address)
rbftx = rbf_node.gettransaction(rbfid)
- rbf_node.settxfee(Decimal("0.00002500"))
+ requested_feerate = Decimal("0.00025000")
+ rbf_node.settxfee(requested_feerate)
bumped_tx = rbf_node.bumpfee(rbfid)
- assert bumped_tx["fee"] > 2 * abs(rbftx["fee"])
+ actual_feerate = bumped_tx["fee"] * 1000 / rbf_node.getrawtransaction(bumped_tx["txid"], True)["size"]
+ # Assert that the difference between the requested feerate and the actual
+ # feerate of the bumped transaction is small.
+ assert_greater_than(Decimal("0.00001000"), abs(requested_feerate - actual_feerate))
rbf_node.settxfee(Decimal("0.00000000")) # unset paytxfee
def test_rebumping(rbf_node, dest_address):
# check that re-bumping the original tx fails, but bumping the bumper succeeds
- rbf_node.settxfee(Decimal("0.00001000"))
- rbfid = create_fund_sign_send(rbf_node, {dest_address: 0.00090000})
- bumped = rbf_node.bumpfee(rbfid, {"totalFee": 1000})
- assert_raises_jsonrpc(-4, "already bumped", rbf_node.bumpfee, rbfid, {"totalFee": 2000})
- rbf_node.bumpfee(bumped["txid"], {"totalFee": 2000})
+ rbfid = spend_one_input(rbf_node, dest_address)
+ bumped = rbf_node.bumpfee(rbfid, {"totalFee": 2000})
+ assert_raises_jsonrpc(-4, "already bumped", rbf_node.bumpfee, rbfid, {"totalFee": 3000})
+ rbf_node.bumpfee(bumped["txid"], {"totalFee": 3000})
def test_rebumping_not_replaceable(rbf_node, dest_address):
# check that re-bumping a non-replaceable bump tx fails
- rbfid = create_fund_sign_send(rbf_node, {dest_address: 0.00090000})
+ rbfid = spend_one_input(rbf_node, dest_address)
bumped = rbf_node.bumpfee(rbfid, {"totalFee": 10000, "replaceable": False})
assert_raises_jsonrpc(-4, "Transaction is not BIP 125 replaceable", rbf_node.bumpfee, bumped["txid"],
{"totalFee": 20000})
@@ -223,7 +225,7 @@ def test_rebumping_not_replaceable(rbf_node, dest_address):
def test_unconfirmed_not_spendable(rbf_node, rbf_node_address):
# check that unconfirmed outputs from bumped transactions are not spendable
- rbfid = create_fund_sign_send(rbf_node, {rbf_node_address: 0.00090000})
+ rbfid = spend_one_input(rbf_node, rbf_node_address)
rbftx = rbf_node.gettransaction(rbfid)["hex"]
assert rbfid in rbf_node.getrawmempool()
bumpid = rbf_node.bumpfee(rbfid)["txid"]
@@ -258,7 +260,7 @@ def test_unconfirmed_not_spendable(rbf_node, rbf_node_address):
def test_bumpfee_metadata(rbf_node, dest_address):
- rbfid = rbf_node.sendtoaddress(dest_address, 0.00090000, "comment value", "to value")
+ rbfid = rbf_node.sendtoaddress(dest_address, Decimal("0.00100000"), "comment value", "to value")
bumped_tx = rbf_node.bumpfee(rbfid)
bumped_wtx = rbf_node.gettransaction(bumped_tx["txid"])
assert_equal(bumped_wtx["comment"], "comment value")
@@ -266,43 +268,23 @@ def test_bumpfee_metadata(rbf_node, dest_address):
def test_locked_wallet_fails(rbf_node, dest_address):
- rbfid = create_fund_sign_send(rbf_node, {dest_address: 0.00090000})
+ rbfid = spend_one_input(rbf_node, dest_address)
rbf_node.walletlock()
assert_raises_jsonrpc(-13, "Please enter the wallet passphrase with walletpassphrase first.",
rbf_node.bumpfee, rbfid)
-def create_fund_sign_send(node, outputs):
- rawtx = node.createrawtransaction([], outputs)
- fundtx = node.fundrawtransaction(rawtx)
- signedtx = node.signrawtransaction(fundtx["hex"])
- txid = node.sendrawtransaction(signedtx["hex"])
- return txid
-
-
-def spend_one_input(node, input_amount, outputs):
- input = dict(sequence=BIP125_SEQUENCE_NUMBER, **next(u for u in node.listunspent() if u["amount"] == input_amount))
- rawtx = node.createrawtransaction([input], outputs)
+def spend_one_input(node, dest_address):
+ tx_input = dict(
+ sequence=BIP125_SEQUENCE_NUMBER, **next(u for u in node.listunspent() if u["amount"] == Decimal("0.00100000")))
+ rawtx = node.createrawtransaction(
+ [tx_input], {dest_address: Decimal("0.00050000"),
+ node.getrawchangeaddress(): Decimal("0.00049000")})
signedtx = node.signrawtransaction(rawtx)
txid = node.sendrawtransaction(signedtx["hex"])
return txid
-def get_change_address(node):
- """Get a wallet change address.
-
- There is no wallet RPC to access unused change addresses, so this creates a
- dummy transaction, calls fundrawtransaction to give add an input and change
- output, then returns the change address."""
- dest_address = node.getnewaddress()
- dest_amount = Decimal("0.00012345")
- rawtx = node.createrawtransaction([], {dest_address: dest_amount})
- fundtx = node.fundrawtransaction(rawtx)
- info = node.decoderawtransaction(fundtx["hex"])
- return next(address for out in info["vout"]
- if out["value"] != dest_amount for address in out["scriptPubKey"]["addresses"])
-
-
def submit_block_with_tx(node, tx):
ctx = CTransaction()
ctx.deserialize(io.BytesIO(hex_str_to_bytes(tx)))
diff --git a/test/functional/fundrawtransaction.py b/test/functional/fundrawtransaction.py
index fd330ef277..1dc00f2ba1 100755
--- a/test/functional/fundrawtransaction.py
+++ b/test/functional/fundrawtransaction.py
@@ -691,7 +691,6 @@ class RawTransactionsTest(BitcoinTestFramework):
inputs = []
outputs = {self.nodes[2].getnewaddress(): value for value in (1.0, 1.1, 1.2, 1.3)}
- keys = list(outputs.keys())
rawtx = self.nodes[3].createrawtransaction(inputs, outputs)
result = [self.nodes[3].fundrawtransaction(rawtx),
diff --git a/test/functional/import-rescan.py b/test/functional/import-rescan.py
index 0218a46168..5be095e62d 100755
--- a/test/functional/import-rescan.py
+++ b/test/functional/import-rescan.py
@@ -22,7 +22,6 @@ happened previously.
from test_framework.authproxy import JSONRPCException
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import (start_nodes, connect_nodes, sync_blocks, assert_equal, set_node_times)
-from decimal import Decimal
import collections
import enum
diff --git a/test/functional/multi_rpc.py b/test/functional/multi_rpc.py
index 3b74bf1c46..a9701c548b 100755
--- a/test/functional/multi_rpc.py
+++ b/test/functional/multi_rpc.py
@@ -41,11 +41,9 @@ class HTTPBasicsTest (BitcoinTestFramework):
authpair = url.username + ':' + url.password
#New authpair generated via share/rpcuser tool
- rpcauth = "rpcauth=rt:93648e835a54c573682c2eb19f882535$7681e9c5b74bdd85e78166031d2058e1069b3ed7ed967c93fc63abba06f31144"
password = "cA773lm788buwYe4g4WT+05pKyNruVKjQ25x3n0DQcM="
#Second authpair with different username
- rpcauth2 = "rpcauth=rt2:f8607b1a88861fac29dfccf9b52ff9f$ff36a0c23c8c62b4846112e50fa888416e94c17bfd4c42f88fd8f55ec6a3137e"
password2 = "8/F3uMDw4KSEbw96U3CA1C4X05dkHDN2BPFjTgZW4KI="
authpairnew = "rt:"+password
diff --git a/test/functional/rawtransactions.py b/test/functional/rawtransactions.py
index 0374d8984a..d4c684136c 100755
--- a/test/functional/rawtransactions.py
+++ b/test/functional/rawtransactions.py
@@ -104,7 +104,6 @@ class RawTransactionsTest(BitcoinTestFramework):
txId = self.nodes[0].sendtoaddress(mSigObj, 2.2)
decTx = self.nodes[0].gettransaction(txId)
rawTx = self.nodes[0].decoderawtransaction(decTx['hex'])
- sPK = rawTx['vout'][0]['scriptPubKey']['hex']
self.sync_all()
self.nodes[0].generate(1)
self.sync_all()
diff --git a/test/functional/segwit.py b/test/functional/segwit.py
index 5b1fba8eec..a1fffcb81a 100755
--- a/test/functional/segwit.py
+++ b/test/functional/segwit.py
@@ -6,11 +6,10 @@
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import *
-from test_framework.mininode import sha256, ripemd160, CTransaction, CTxIn, COutPoint, CTxOut, COIN
+from test_framework.mininode import sha256, CTransaction, CTxIn, COutPoint, CTxOut, COIN, ToHex, FromHex
from test_framework.address import script_to_p2sh, key_to_p2pkh
-from test_framework.script import CScript, OP_HASH160, OP_CHECKSIG, OP_0, hash160, OP_EQUAL, OP_DUP, OP_EQUALVERIFY, OP_1, OP_2, OP_CHECKMULTISIG, hash160, OP_TRUE
+from test_framework.script import CScript, OP_HASH160, OP_CHECKSIG, OP_0, hash160, OP_EQUAL, OP_DUP, OP_EQUALVERIFY, OP_1, OP_2, OP_CHECKMULTISIG, OP_TRUE
from io import BytesIO
-from test_framework.mininode import ToHex, FromHex, COIN
NODE_0 = 0
NODE_1 = 1
diff --git a/test/functional/smartfees.py b/test/functional/smartfees.py
index 49f2df5c37..b7f4b86e7b 100755
--- a/test/functional/smartfees.py
+++ b/test/functional/smartfees.py
@@ -4,11 +4,10 @@
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
"""Test fee estimation code."""
-from collections import OrderedDict
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import *
from test_framework.script import CScript, OP_1, OP_DROP, OP_2, OP_HASH160, OP_EQUAL, hash160, OP_TRUE
-from test_framework.mininode import CTransaction, CTxIn, CTxOut, COutPoint, ToHex, FromHex, COIN
+from test_framework.mininode import CTransaction, CTxIn, CTxOut, COutPoint, ToHex, COIN
# Construct 2 trivial P2SH's and the ScriptSigs that spend them
# So we can create many many transactions without needing to spend
diff --git a/test/functional/test_framework/socks5.py b/test/functional/test_framework/socks5.py
index dd7624d454..a08b03ed24 100644
--- a/test/functional/test_framework/socks5.py
+++ b/test/functional/test_framework/socks5.py
@@ -5,7 +5,6 @@
"""Dummy Socks5 server for testing."""
import socket, threading, queue
-import traceback, sys
import logging
logger = logging.getLogger("TestFramework.socks5")
diff --git a/test/functional/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py
index 198c0cb5af..26a8aacb41 100755
--- a/test/functional/test_framework/test_framework.py
+++ b/test/functional/test_framework/test_framework.py
@@ -11,7 +11,6 @@ import sys
import shutil
import tempfile
import time
-import traceback
from .util import (
initialize_chain,
diff --git a/test/functional/zmq_test.py b/test/functional/zmq_test.py
index e6f18b0b93..9e27b46381 100755
--- a/test/functional/zmq_test.py
+++ b/test/functional/zmq_test.py
@@ -41,7 +41,6 @@ class ZMQTest (BitcoinTestFramework):
topic = msg[0]
assert_equal(topic, b"hashtx")
body = msg[1]
- nseq = msg[2]
msgSequence = struct.unpack('<I', msg[-1])[-1]
assert_equal(msgSequence, 0) #must be sequence 0 on hashtx