mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 12:02:48 +01:00
Merge bitcoin/bitcoin#23146: Test transactions conflicted by double spend in listtransactions
502f50da12694dd0193744427f0f89238e612f54 Test transactions conflicted by double spend in listtransactions (Jon Atack)
Pull request description:
Test the properties of transactions conflicted by a double spend as returned by RPC listtransactions in the abandoned, confirmations, trusted and walletconflicts fields. These fields are also returned by RPCs listsinceblock and gettransactions.
ACKs for top commit:
brunoerg:
tACK 502f50da12694dd0193744427f0f89238e612f54
rajarshimaitra:
Concept + tACK 502f50da12
Tree-SHA512: 28968f4a5f1960ea45b2e6f5b20fe25c1b51f66944062dcddea52ea970ad21c74d583793d091b84e8a5e506d6aecc1f0435c5b918213975b22c38e02bba19aa1
This commit is contained in:
parent
f40055446b
commit
bcb9cb546c
@ -154,6 +154,7 @@ class AbandonConflictTest(BitcoinTestFramework):
|
|||||||
assert_equal(newbalance, balance - Decimal("24.9996"))
|
assert_equal(newbalance, balance - Decimal("24.9996"))
|
||||||
balance = newbalance
|
balance = newbalance
|
||||||
|
|
||||||
|
self.log.info("Test transactions conflicted by a double spend")
|
||||||
# Create a double spend of AB1 by spending again from only A's 10 output
|
# Create a double spend of AB1 by spending again from only A's 10 output
|
||||||
# Mine double spend from node 1
|
# Mine double spend from node 1
|
||||||
inputs = []
|
inputs = []
|
||||||
@ -168,6 +169,34 @@ class AbandonConflictTest(BitcoinTestFramework):
|
|||||||
connect_nodes(self.nodes[0], 1)
|
connect_nodes(self.nodes[0], 1)
|
||||||
self.sync_blocks()
|
self.sync_blocks()
|
||||||
|
|
||||||
|
tx_list = self.nodes[0].listtransactions()
|
||||||
|
|
||||||
|
conflicted = [tx for tx in tx_list if tx["confirmations"] < 0]
|
||||||
|
assert_equal(4, len(conflicted))
|
||||||
|
|
||||||
|
wallet_conflicts = [tx for tx in conflicted if tx["walletconflicts"]]
|
||||||
|
assert_equal(2, len(wallet_conflicts))
|
||||||
|
|
||||||
|
double_spends = [tx for tx in tx_list if tx["walletconflicts"] and tx["confirmations"] > 0]
|
||||||
|
assert_equal(1, len(double_spends))
|
||||||
|
double_spend = double_spends[0]
|
||||||
|
|
||||||
|
# Test the properties of the conflicted transactions, i.e. with confirmations < 0.
|
||||||
|
for tx in conflicted:
|
||||||
|
assert_equal(tx["abandoned"], False)
|
||||||
|
assert_equal(tx["confirmations"], -1)
|
||||||
|
assert_equal(tx["trusted"], False)
|
||||||
|
|
||||||
|
# Test the properties of the double-spend transaction, i.e. having wallet conflicts and confirmations > 0.
|
||||||
|
assert_equal(double_spend["abandoned"], False)
|
||||||
|
assert_equal(double_spend["confirmations"], 1)
|
||||||
|
assert "trusted" not in double_spend.keys() # "trusted" only returned if tx has 0 or negative confirmations.
|
||||||
|
|
||||||
|
# Test the walletconflicts field of each.
|
||||||
|
for tx in wallet_conflicts:
|
||||||
|
assert_equal(double_spend["walletconflicts"], [tx["txid"]])
|
||||||
|
assert_equal(tx["walletconflicts"], [double_spend["txid"]])
|
||||||
|
|
||||||
# Verify that B and C's 10 BTC outputs are available for spending again because AB1 is now conflicted
|
# Verify that B and C's 10 BTC outputs are available for spending again because AB1 is now conflicted
|
||||||
newbalance = self.nodes[0].getbalance()
|
newbalance = self.nodes[0].getbalance()
|
||||||
assert_equal(newbalance, balance + Decimal("20"))
|
assert_equal(newbalance, balance + Decimal("20"))
|
||||||
|
Loading…
Reference in New Issue
Block a user