aboutsummaryrefslogtreecommitdiff
path: root/qa
diff options
context:
space:
mode:
authorPatrick Lodder <[email protected]>2021-06-27 00:37:10 +0200
committerPatrick Lodder <[email protected]>2021-08-05 18:24:17 +0200
commit4c46af04830cec3da6ecfbf677ef3d826a5892e6 (patch)
tree8e2c6490458c57ff690788195b298cc4edd07891 /qa
parentMerge pull request #2415 from rnicoll/1.14.4-rbf-fee (diff)
downloaddiscoin-4c46af04830cec3da6ecfbf677ef3d826a5892e6.tar.xz
discoin-4c46af04830cec3da6ecfbf677ef3d826a5892e6.zip
[fees] introduce configurable hard dust limit
Co-authored-by: Ross Nicoll <[email protected]>
Diffstat (limited to 'qa')
-rwxr-xr-xqa/pull-tester/rpc-tests.py1
-rw-r--r--qa/rpc-tests/harddustlimit.py82
2 files changed, 83 insertions, 0 deletions
diff --git a/qa/pull-tester/rpc-tests.py b/qa/pull-tester/rpc-tests.py
index f7a2deb0d..fd78d3701 100755
--- a/qa/pull-tester/rpc-tests.py
+++ b/qa/pull-tester/rpc-tests.py
@@ -153,6 +153,7 @@ testScripts = [
'signmessages.py',
# 'nulldummy.py',
'import-rescan.py',
+ 'harddustlimit.py',
# While fee bumping should work in Doge, these tests depend on free transactions, which we don't support.
# Disable until we can do a full rewrite of the tests (possibly upstream), or revise fee schedule, or something
'bumpfee.py',
diff --git a/qa/rpc-tests/harddustlimit.py b/qa/rpc-tests/harddustlimit.py
new file mode 100644
index 000000000..9d56febb7
--- /dev/null
+++ b/qa/rpc-tests/harddustlimit.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python3
+# Copyright (c) 2021 The Dogecoin Core developers
+# Distributed under the MIT software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+"""Hard dust limit QA test.
+
+# Tests nodes with differing -dustlimits
+"""
+
+from test_framework.test_framework import BitcoinTestFramework
+from test_framework.util import *
+from decimal import Decimal
+
+class HardDustLimitTest(BitcoinTestFramework):
+
+ def __init__(self):
+ super().__init__()
+ self.setup_clean_chain = True
+ self.num_nodes = 3
+
+ def setup_network(self, split=False):
+ self.nodes = []
+ self.nodes.append(start_node(0, self.options.tmpdir, ["-dustlimit=0.1", "-debug"]))
+ self.nodes.append(start_node(1, self.options.tmpdir, ["-dustlimit=1", "-debug"]))
+ self.nodes.append(start_node(2, self.options.tmpdir, ["-dustlimit=0.01", "-debug"]))
+
+ connect_nodes_bi(self.nodes,0,1)
+ connect_nodes_bi(self.nodes,1,2)
+ connect_nodes_bi(self.nodes,0,2)
+
+ self.is_network_split=False
+ self.sync_all()
+
+ def run_test(self):
+
+ self.fee = Decimal("1")
+ self.seed = 1000
+ self.coinselector = {'minimumAmount': self.fee * 10, 'maximumAmount': self.seed}
+
+ # set up addresses
+ n0a1 = self.nodes[0].getnewaddress()
+ n0a2 = self.nodes[0].getnewaddress()
+ n0a3 = self.nodes[0].getnewaddress()
+ n1a1 = self.nodes[1].getnewaddress()
+ n2a1 = self.nodes[2].getnewaddress()
+ n2a2 = self.nodes[2].getnewaddress()
+ n2a3 = self.nodes[2].getnewaddress()
+ n2a4 = self.nodes[2].getnewaddress()
+
+ # mine some blocks and prepare some coins
+ self.nodes[2].generate(1)
+ self.sync_all()
+ self.nodes[0].generate(101)
+ self.sync_all()
+ self.nodes[0].sendtoaddress(n0a1, self.seed)
+ self.nodes[0].sendtoaddress(n2a1, self.seed)
+ self.sync_all()
+ self.nodes[0].generate(1)
+ self.sync_all()
+
+ # create dusty transactions
+ self.send_dusty_tx(self.nodes[2], n2a2, n0a2, Decimal("0.9"))
+ self.send_dusty_tx(self.nodes[2], n2a3, n0a3, Decimal("0.09"))
+ self.send_dusty_tx(self.nodes[0], n2a4, n1a1, Decimal("1"))
+
+ # wait 10 seconds to sync mempools
+ time.sleep(10)
+
+ assert_equal(self.nodes[2].getmempoolinfo()['size'], 3)
+ assert_equal(self.nodes[1].getmempoolinfo()['size'], 1)
+ assert_equal(self.nodes[0].getmempoolinfo()['size'], 2)
+
+ def send_dusty_tx(self, n, addr1, addr2, dust):
+ avail = n.listunspent(0, 1000, [], True, self.coinselector)
+ inputs = [ {'txid': avail[0]['txid'], 'vout': avail[0]['vout']}]
+ outputs = { addr1 : avail[0]['amount'] - self.fee - dust , addr2: dust }
+ rawtx = n.createrawtransaction(inputs, outputs)
+ rawtx = n.signrawtransaction(rawtx)
+ n.sendrawtransaction(rawtx['hex'])
+
+if __name__ == '__main__':
+ HardDustLimitTest().main()