mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-22 14:52:41 +02:00
Merge bitcoin/bitcoin#25204: rpc: remove deprecated top-level fee fields from mempool entries
885694d7941ccb601388bc8412ac1df182785ef8 doc: add release note about removal of `deprecatedrpc=fees` flag (Sebastian Falbesoner) 387ae8bc09ac211af4a4e45ea4ff22518d541d0b rpc: remove deprecated fee fields from mempool entries (Sebastian Falbesoner) Pull request description: Deprecating the top-level fee fields (`fee`, `modifiedfee`, `ancestorfees` and `descendantfees`) from the mempool entries and introducing `-deprecatedrpc=fees` was done in PR #22689 (released in v23.0). For the next release v24.0, this configuration option can be removed. ACKs for top commit: fanquake: ACK 885694d7941ccb601388bc8412ac1df182785ef8 Tree-SHA512: fec6b5be5c3f0cd55738a888b390ef9271e70b2dba913a14ce82427dac002e999f93df298bb3b494f3d1b850a23d2b5b3e010e901543b0d18db9be133579e1ec
This commit is contained in:
commit
b6ab45ae5c
@ -62,6 +62,13 @@ Updated RPCs
|
|||||||
change that behaviour. Excluding coinbases was previously deprecated in 23.0.
|
change that behaviour. Excluding coinbases was previously deprecated in 23.0.
|
||||||
(#25171)
|
(#25171)
|
||||||
|
|
||||||
|
- The `deprecatedrpc=fees` configuration option has been removed. The top-level
|
||||||
|
fee fields `fee`, `modifiedfee`, `ancestorfees` and `descendantfees` are no
|
||||||
|
longer returned by RPCs `getmempoolentry`, `getrawmempool(verbose=true)`,
|
||||||
|
`getmempoolancestors(verbose=true)` and `getmempooldescendants(verbose=true)`.
|
||||||
|
The same fee fields can be accessed through the `fees` object in the result.
|
||||||
|
The top-level fee fields were previously deprecated in 23.0. (#25204)
|
||||||
|
|
||||||
Changes to wallet related RPCs can be found in the Wallet section below.
|
Changes to wallet related RPCs can be found in the Wallet section below.
|
||||||
|
|
||||||
New RPCs
|
New RPCs
|
||||||
|
@ -229,23 +229,12 @@ static std::vector<RPCResult> MempoolEntryDescription()
|
|||||||
return {
|
return {
|
||||||
RPCResult{RPCResult::Type::NUM, "vsize", "virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted."},
|
RPCResult{RPCResult::Type::NUM, "vsize", "virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted."},
|
||||||
RPCResult{RPCResult::Type::NUM, "weight", "transaction weight as defined in BIP 141."},
|
RPCResult{RPCResult::Type::NUM, "weight", "transaction weight as defined in BIP 141."},
|
||||||
RPCResult{RPCResult::Type::STR_AMOUNT, "fee", /*optional=*/true,
|
|
||||||
"transaction fee, denominated in " + CURRENCY_UNIT + " (DEPRECATED, returned only if config option -deprecatedrpc=fees is passed)"},
|
|
||||||
RPCResult{RPCResult::Type::STR_AMOUNT, "modifiedfee", /*optional=*/true,
|
|
||||||
"transaction fee with fee deltas used for mining priority, denominated in " + CURRENCY_UNIT +
|
|
||||||
" (DEPRECATED, returned only if config option -deprecatedrpc=fees is passed)"},
|
|
||||||
RPCResult{RPCResult::Type::NUM_TIME, "time", "local time transaction entered pool in seconds since 1 Jan 1970 GMT"},
|
RPCResult{RPCResult::Type::NUM_TIME, "time", "local time transaction entered pool in seconds since 1 Jan 1970 GMT"},
|
||||||
RPCResult{RPCResult::Type::NUM, "height", "block height when transaction entered pool"},
|
RPCResult{RPCResult::Type::NUM, "height", "block height when transaction entered pool"},
|
||||||
RPCResult{RPCResult::Type::NUM, "descendantcount", "number of in-mempool descendant transactions (including this one)"},
|
RPCResult{RPCResult::Type::NUM, "descendantcount", "number of in-mempool descendant transactions (including this one)"},
|
||||||
RPCResult{RPCResult::Type::NUM, "descendantsize", "virtual transaction size of in-mempool descendants (including this one)"},
|
RPCResult{RPCResult::Type::NUM, "descendantsize", "virtual transaction size of in-mempool descendants (including this one)"},
|
||||||
RPCResult{RPCResult::Type::STR_AMOUNT, "descendantfees", /*optional=*/true,
|
|
||||||
"transaction fees of in-mempool descendants (including this one) with fee deltas used for mining priority, denominated in " +
|
|
||||||
CURRENCY_ATOM + "s (DEPRECATED, returned only if config option -deprecatedrpc=fees is passed)"},
|
|
||||||
RPCResult{RPCResult::Type::NUM, "ancestorcount", "number of in-mempool ancestor transactions (including this one)"},
|
RPCResult{RPCResult::Type::NUM, "ancestorcount", "number of in-mempool ancestor transactions (including this one)"},
|
||||||
RPCResult{RPCResult::Type::NUM, "ancestorsize", "virtual transaction size of in-mempool ancestors (including this one)"},
|
RPCResult{RPCResult::Type::NUM, "ancestorsize", "virtual transaction size of in-mempool ancestors (including this one)"},
|
||||||
RPCResult{RPCResult::Type::STR_AMOUNT, "ancestorfees", /*optional=*/true,
|
|
||||||
"transaction fees of in-mempool ancestors (including this one) with fee deltas used for mining priority, denominated in " +
|
|
||||||
CURRENCY_ATOM + "s (DEPRECATED, returned only if config option -deprecatedrpc=fees is passed)"},
|
|
||||||
RPCResult{RPCResult::Type::STR_HEX, "wtxid", "hash of serialized transaction, including witness data"},
|
RPCResult{RPCResult::Type::STR_HEX, "wtxid", "hash of serialized transaction, including witness data"},
|
||||||
RPCResult{RPCResult::Type::OBJ, "fees", "",
|
RPCResult{RPCResult::Type::OBJ, "fees", "",
|
||||||
{
|
{
|
||||||
@ -269,24 +258,12 @@ static void entryToJSON(const CTxMemPool& pool, UniValue& info, const CTxMemPool
|
|||||||
|
|
||||||
info.pushKV("vsize", (int)e.GetTxSize());
|
info.pushKV("vsize", (int)e.GetTxSize());
|
||||||
info.pushKV("weight", (int)e.GetTxWeight());
|
info.pushKV("weight", (int)e.GetTxWeight());
|
||||||
// TODO: top-level fee fields are deprecated. deprecated_fee_fields_enabled blocks should be removed in v24
|
|
||||||
const bool deprecated_fee_fields_enabled{IsDeprecatedRPCEnabled("fees")};
|
|
||||||
if (deprecated_fee_fields_enabled) {
|
|
||||||
info.pushKV("fee", ValueFromAmount(e.GetFee()));
|
|
||||||
info.pushKV("modifiedfee", ValueFromAmount(e.GetModifiedFee()));
|
|
||||||
}
|
|
||||||
info.pushKV("time", count_seconds(e.GetTime()));
|
info.pushKV("time", count_seconds(e.GetTime()));
|
||||||
info.pushKV("height", (int)e.GetHeight());
|
info.pushKV("height", (int)e.GetHeight());
|
||||||
info.pushKV("descendantcount", e.GetCountWithDescendants());
|
info.pushKV("descendantcount", e.GetCountWithDescendants());
|
||||||
info.pushKV("descendantsize", e.GetSizeWithDescendants());
|
info.pushKV("descendantsize", e.GetSizeWithDescendants());
|
||||||
if (deprecated_fee_fields_enabled) {
|
|
||||||
info.pushKV("descendantfees", e.GetModFeesWithDescendants());
|
|
||||||
}
|
|
||||||
info.pushKV("ancestorcount", e.GetCountWithAncestors());
|
info.pushKV("ancestorcount", e.GetCountWithAncestors());
|
||||||
info.pushKV("ancestorsize", e.GetSizeWithAncestors());
|
info.pushKV("ancestorsize", e.GetSizeWithAncestors());
|
||||||
if (deprecated_fee_fields_enabled) {
|
|
||||||
info.pushKV("ancestorfees", e.GetModFeesWithAncestors());
|
|
||||||
}
|
|
||||||
info.pushKV("wtxid", pool.vTxHashes[e.vTxHashesIdx].first.ToString());
|
info.pushKV("wtxid", pool.vTxHashes[e.vTxHashesIdx].first.ToString());
|
||||||
|
|
||||||
UniValue fees(UniValue::VOBJ);
|
UniValue fees(UniValue::VOBJ);
|
||||||
|
@ -1,67 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# Copyright (c) 2021 The Bitcoin Core developers
|
|
||||||
# Distributed under the MIT software license, see the accompanying
|
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
||||||
"""Test deprecation of fee fields from top level mempool entry object"""
|
|
||||||
|
|
||||||
from test_framework.blocktools import COIN
|
|
||||||
from test_framework.test_framework import BitcoinTestFramework
|
|
||||||
from test_framework.util import assert_equal
|
|
||||||
from test_framework.wallet import MiniWallet
|
|
||||||
|
|
||||||
|
|
||||||
def assertions_helper(new_object, deprecated_object, deprecated_fields):
|
|
||||||
for field in deprecated_fields:
|
|
||||||
assert field in deprecated_object
|
|
||||||
assert field not in new_object
|
|
||||||
|
|
||||||
|
|
||||||
class MempoolFeeFieldsDeprecationTest(BitcoinTestFramework):
|
|
||||||
def set_test_params(self):
|
|
||||||
self.num_nodes = 2
|
|
||||||
self.extra_args = [[], ["-deprecatedrpc=fees"]]
|
|
||||||
|
|
||||||
def run_test(self):
|
|
||||||
# we get spendable outputs from the premined chain starting
|
|
||||||
# at block 76. see BitcoinTestFramework._initialize_chain() for details
|
|
||||||
self.wallet = MiniWallet(self.nodes[0])
|
|
||||||
self.wallet.rescan_utxos()
|
|
||||||
|
|
||||||
# we create the tx on the first node and wait until it syncs to node_deprecated
|
|
||||||
# thus, any differences must be coming from getmempoolentry or getrawmempool
|
|
||||||
tx = self.wallet.send_self_transfer(from_node=self.nodes[0])
|
|
||||||
self.nodes[1].sendrawtransaction(tx["hex"])
|
|
||||||
|
|
||||||
deprecated_fields = ["ancestorfees", "descendantfees", "modifiedfee", "fee"]
|
|
||||||
self.test_getmempoolentry(tx["txid"], deprecated_fields)
|
|
||||||
self.test_getrawmempool(tx["txid"], deprecated_fields)
|
|
||||||
self.test_deprecated_fields_match(tx["txid"])
|
|
||||||
|
|
||||||
def test_getmempoolentry(self, txid, deprecated_fields):
|
|
||||||
|
|
||||||
self.log.info("Test getmempoolentry rpc")
|
|
||||||
entry = self.nodes[0].getmempoolentry(txid)
|
|
||||||
deprecated_entry = self.nodes[1].getmempoolentry(txid)
|
|
||||||
assertions_helper(entry, deprecated_entry, deprecated_fields)
|
|
||||||
|
|
||||||
def test_getrawmempool(self, txid, deprecated_fields):
|
|
||||||
|
|
||||||
self.log.info("Test getrawmempool rpc")
|
|
||||||
entry = self.nodes[0].getrawmempool(verbose=True)[txid]
|
|
||||||
deprecated_entry = self.nodes[1].getrawmempool(verbose=True)[txid]
|
|
||||||
assertions_helper(entry, deprecated_entry, deprecated_fields)
|
|
||||||
|
|
||||||
def test_deprecated_fields_match(self, txid):
|
|
||||||
|
|
||||||
self.log.info("Test deprecated fee fields match new fees object")
|
|
||||||
entry = self.nodes[0].getmempoolentry(txid)
|
|
||||||
deprecated_entry = self.nodes[1].getmempoolentry(txid)
|
|
||||||
|
|
||||||
assert_equal(deprecated_entry["fee"], entry["fees"]["base"])
|
|
||||||
assert_equal(deprecated_entry["modifiedfee"], entry["fees"]["modified"])
|
|
||||||
assert_equal(deprecated_entry["descendantfees"], entry["fees"]["descendant"] * COIN)
|
|
||||||
assert_equal(deprecated_entry["ancestorfees"], entry["fees"]["ancestor"] * COIN)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
MempoolFeeFieldsDeprecationTest().main()
|
|
@ -328,7 +328,6 @@ BASE_SCRIPTS = [
|
|||||||
'feature_presegwit_node_upgrade.py',
|
'feature_presegwit_node_upgrade.py',
|
||||||
'feature_settings.py',
|
'feature_settings.py',
|
||||||
'rpc_getdescriptorinfo.py',
|
'rpc_getdescriptorinfo.py',
|
||||||
'rpc_mempool_entry_fee_fields_deprecation.py',
|
|
||||||
'rpc_mempool_info.py',
|
'rpc_mempool_info.py',
|
||||||
'rpc_help.py',
|
'rpc_help.py',
|
||||||
'feature_dirsymlinks.py',
|
'feature_dirsymlinks.py',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user