mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-14 23:29:56 +02:00
Merge bitcoin/bitcoin#23139: rpc: fix "trusted" field in TransactionDescriptionString(), add coverage
66f6efc70a72cc1613906fd3c10281f9af0ba0db rpc: improve TransactionDescriptionString() "generated" help (Jon Atack)
296cfa312fd9ce19f1f820aeafa37d87764ad21d test: add listtransactions/listsinceblock "trusted" coverage (Jon Atack)
d95913fc432f0fde9dec743884b14c5df83727af rpc: fix "trusted" description in TransactionDescriptionString (Jon Atack)
Pull request description:
The RPC gettransaction, listtransactions, and listsinceblock helps returned by `TransactionDescriptionString()` inform the user that the `trusted` boolean field is only present if the transaction is trusted and safe to spend from.
The field is in fact returned by `WalletTxToJSON()` when the transaction has 0 confirmations (or negative confirmations, if conflicted), and it can be true or false.
This patch fixes the help, adds test coverage, and touches up the help for the neighboring `generate` field.
ACKs for top commit:
rajarshimaitra:
tACK 66f6efc70a
theStack:
Tested ACK 66f6efc70a72cc1613906fd3c10281f9af0ba0db
Tree-SHA512: 4c2127765b82780e07bbdbf519d27163d414d9f15598e01e02210f210e6009be344c84951d7274e747b1386991d4c3b082cd25aebe885fb8cf0b92d57178f68e
This commit is contained in:
commit
a1d55ced09
@ -1389,8 +1389,9 @@ static const std::vector<RPCResult> TransactionDescriptionString()
|
||||
{
|
||||
return{{RPCResult::Type::NUM, "confirmations", "The number of confirmations for the transaction. Negative confirmations means the\n"
|
||||
"transaction conflicted that many blocks ago."},
|
||||
{RPCResult::Type::BOOL, "generated", /* optional */ true, "Only present if transaction only input is a coinbase one."},
|
||||
{RPCResult::Type::BOOL, "trusted", /* optional */ true, "Only present if we consider transaction to be trusted and so safe to spend from."},
|
||||
{RPCResult::Type::BOOL, "generated", /* optional */ true, "Only present if the transaction's only input is a coinbase one."},
|
||||
{RPCResult::Type::BOOL, "trusted", /* optional */ true, "Whether we consider the transaction to be trusted and safe to spend from.\n"
|
||||
"Only present when the transaction has 0 confirmations (or negative confirmations, if conflicted)."},
|
||||
{RPCResult::Type::STR_HEX, "blockhash", /* optional */ true, "The block hash containing the transaction."},
|
||||
{RPCResult::Type::NUM, "blockheight", /* optional */ true, "The block height containing the transaction."},
|
||||
{RPCResult::Type::NUM, "blockindex", /* optional */ true, "The index of the transaction in the block that includes it."},
|
||||
@ -1408,7 +1409,7 @@ static const std::vector<RPCResult> TransactionDescriptionString()
|
||||
{RPCResult::Type::NUM_TIME, "timereceived", "The time received expressed in " + UNIX_EPOCH_TIME + "."},
|
||||
{RPCResult::Type::STR, "comment", /* optional */ true, "If a comment is associated with the transaction, only present if not empty."},
|
||||
{RPCResult::Type::STR, "bip125-replaceable", "(\"yes|no|unknown\") Whether this transaction could be replaced due to BIP125 (replace-by-fee);\n"
|
||||
"may be unknown for unconfirmed transactions not in the mempool"}};
|
||||
"may be unknown for unconfirmed transactions not in the mempool."}};
|
||||
}
|
||||
|
||||
static RPCHelpMan listtransactions()
|
||||
|
@ -99,7 +99,7 @@ class Variant(collections.namedtuple("Variant", "call data address_type rescan p
|
||||
assert_equal(tx["label"], self.label)
|
||||
assert_equal(tx["txid"], txid)
|
||||
assert_equal(tx["confirmations"], 1 + current_height - confirmation_height)
|
||||
assert_equal("trusted" not in tx, True)
|
||||
assert "trusted" not in tx
|
||||
|
||||
address, = [ad for ad in addresses if txid in ad["txids"]]
|
||||
assert_equal(address["address"], self.address["address"])
|
||||
|
@ -44,6 +44,14 @@ class ListSinceBlockTest(BitcoinTestFramework):
|
||||
def test_no_blockhash(self):
|
||||
self.log.info("Test no blockhash")
|
||||
txid = self.nodes[2].sendtoaddress(self.nodes[0].getnewaddress(), 1)
|
||||
self.sync_all()
|
||||
assert_array_result(self.nodes[0].listtransactions(), {"txid": txid}, {
|
||||
"category": "receive",
|
||||
"amount": 1,
|
||||
"confirmations": 0,
|
||||
"trusted": False,
|
||||
})
|
||||
|
||||
blockhash, = self.generate(self.nodes[2], 1)
|
||||
blockheight = self.nodes[2].getblockheader(blockhash)['height']
|
||||
self.sync_all()
|
||||
@ -56,6 +64,9 @@ class ListSinceBlockTest(BitcoinTestFramework):
|
||||
"blockheight": blockheight,
|
||||
"confirmations": 1,
|
||||
})
|
||||
assert_equal(len(txs), 1)
|
||||
assert "trusted" not in txs[0]
|
||||
|
||||
assert_equal(
|
||||
self.nodes[0].listsinceblock(),
|
||||
{"lastblock": blockhash,
|
||||
|
@ -31,10 +31,10 @@ class ListTransactionsTest(BitcoinTestFramework):
|
||||
self.sync_all()
|
||||
assert_array_result(self.nodes[0].listtransactions(),
|
||||
{"txid": txid},
|
||||
{"category": "send", "amount": Decimal("-0.1"), "confirmations": 0})
|
||||
{"category": "send", "amount": Decimal("-0.1"), "confirmations": 0, "trusted": True})
|
||||
assert_array_result(self.nodes[1].listtransactions(),
|
||||
{"txid": txid},
|
||||
{"category": "receive", "amount": Decimal("0.1"), "confirmations": 0})
|
||||
{"category": "receive", "amount": Decimal("0.1"), "confirmations": 0, "trusted": False})
|
||||
self.log.info("Test confirmations change after mining a block")
|
||||
blockhash = self.generate(self.nodes[0], 1)[0]
|
||||
blockheight = self.nodes[0].getblockheader(blockhash)['height']
|
||||
|
Loading…
x
Reference in New Issue
Block a user