mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
Merge bitcoin/bitcoin#23139: rpc: fix "trusted" field in TransactionDescriptionString(), add coverage
66f6efc70a
rpc: improve TransactionDescriptionString() "generated" help (Jon Atack)296cfa312f
test: add listtransactions/listsinceblock "trusted" coverage (Jon Atack)d95913fc43
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: tACK66f6efc70a
theStack: Tested ACK66f6efc70a
Tree-SHA512: 4c2127765b82780e07bbdbf519d27163d414d9f15598e01e02210f210e6009be344c84951d7274e747b1386991d4c3b082cd25aebe885fb8cf0b92d57178f68e
This commit is contained in:
commit
a1d55ced09
4 changed files with 18 additions and 6 deletions
|
@ -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…
Add table
Reference in a new issue