diff options
| author | Patrick Lodder <[email protected]> | 2021-06-27 00:37:10 +0200 |
|---|---|---|
| committer | Patrick Lodder <[email protected]> | 2021-08-05 18:24:17 +0200 |
| commit | 4c46af04830cec3da6ecfbf677ef3d826a5892e6 (patch) | |
| tree | 8e2c6490458c57ff690788195b298cc4edd07891 /qa | |
| parent | Merge pull request #2415 from rnicoll/1.14.4-rbf-fee (diff) | |
| download | discoin-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-x | qa/pull-tester/rpc-tests.py | 1 | ||||
| -rw-r--r-- | qa/rpc-tests/harddustlimit.py | 82 |
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() |