Skip to content

Commit ef8340d

Browse files
author
MarcoFalke
committed
Merge #11031: [rpc] deprecate estimatefee
048e0c3 [rpc] [tests] Add deprecated RPC test (Cristian Mircea Messel) d4cdbd6 [rpc] Deprecate estimatefee RPC (John Newbery) Pull request description: Deprecates estimatefee in v0.16, for final removal in v0.17. This commit introduces a phased removal of RPC methods. RPC method is disabled by default in version x, but can be enabled by using the `-deprecatedrpc=<methodname>` argument. RPC method is removed entirely in version (x+1). This gives users fair warning that an RPC is to be removed, and time to change client software if necessary. Deprecation warnings in RPC return values or release notes are easily ignored. This is a more generic version of the approach I tried to use in #10841, which too late to make it into v0.15. Tree-SHA512: 9695a600e84b812974387333e4a6805d18972da30befb754e9e4da77cd9815d00c5cc2ee0b0350bdbbdb5fdc6ba47789f8b2c6f5b15c8cd5a1deefcc4832da30
2 parents 69c7ece + 048e0c3 commit ef8340d

File tree

8 files changed

+42
-1
lines changed

8 files changed

+42
-1
lines changed

src/init.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,7 @@ std::string HelpMessage(HelpMessageMode mode)
430430
strUsage += HelpMessageOpt("-checkmempool=<n>", strprintf("Run checks every <n> transactions (default: %u)", defaultChainParams->DefaultConsistencyChecks()));
431431
strUsage += HelpMessageOpt("-checkpoints", strprintf("Disable expensive verification for known chain history (default: %u)", DEFAULT_CHECKPOINTS_ENABLED));
432432
strUsage += HelpMessageOpt("-disablesafemode", strprintf("Disable safemode, override a real safe mode event (default: %u)", DEFAULT_DISABLE_SAFEMODE));
433+
strUsage += HelpMessageOpt("-deprecatedrpc=<method>", "Allows deprecated RPC method(s) to be used");
433434
strUsage += HelpMessageOpt("-testsafemode", strprintf("Force safe mode (default: %u)", DEFAULT_TESTSAFEMODE));
434435
strUsage += HelpMessageOpt("-dropmessagestest=<n>", "Randomly drop 1 of every <n> network messages");
435436
strUsage += HelpMessageOpt("-fuzzmessagestest=<n>", "Randomly fuzz 1 of every <n> network messages");

src/rpc/mining.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -789,6 +789,12 @@ UniValue estimatefee(const JSONRPCRequest& request)
789789
+ HelpExampleCli("estimatefee", "6")
790790
);
791791

792+
if (!IsDeprecatedRPCEnabled("estimatefee")) {
793+
throw JSONRPCError(RPC_METHOD_DEPRECATED, "estimatefee is deprecated and will be fully removed in v0.17. "
794+
"To use estimatefee in v0.16, restart bitcoind with -deprecatedrpc=estimatefee.\n"
795+
"Projects should transition to using estimatesmartfee before upgrading to v0.17");
796+
}
797+
792798
RPCTypeCheck(request.params, {UniValue::VNUM});
793799

794800
int nBlocks = request.params[0].get_int();

src/rpc/protocol.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ enum RPCErrorCode
5757
RPC_VERIFY_REJECTED = -26, //!< Transaction or block was rejected by network rules
5858
RPC_VERIFY_ALREADY_IN_CHAIN = -27, //!< Transaction already in chain
5959
RPC_IN_WARMUP = -28, //!< Client still warming up
60+
RPC_METHOD_DEPRECATED = -32, //!< RPC method is deprecated
6061

6162
//! Aliases for backward compatibility
6263
RPC_TRANSACTION_ERROR = RPC_VERIFY_ERROR,

src/rpc/server.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,13 @@ void JSONRPCRequest::parse(const UniValue& valRequest)
382382
throw JSONRPCError(RPC_INVALID_REQUEST, "Params must be an array or object");
383383
}
384384

385+
bool IsDeprecatedRPCEnabled(const std::string& method)
386+
{
387+
const std::vector<std::string> enabled_methods = gArgs.GetArgs("-deprecatedrpc");
388+
389+
return find(enabled_methods.begin(), enabled_methods.end(), method) != enabled_methods.end();
390+
}
391+
385392
static UniValue JSONRPCExecOne(const UniValue& req)
386393
{
387394
UniValue rpc_result(UniValue::VOBJ);

src/rpc/server.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ class CRPCTable
171171
bool appendCommand(const std::string& name, const CRPCCommand* pcmd);
172172
};
173173

174+
bool IsDeprecatedRPCEnabled(const std::string& method);
175+
174176
extern CRPCTable tableRPC;
175177

176178
/**

test/functional/deprecated_rpc.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env python3
2+
# Copyright (c) 2017 The Bitcoin Core developers
3+
# Distributed under the MIT software license, see the accompanying
4+
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
5+
"""Test deprecation of RPC calls."""
6+
from test_framework.test_framework import BitcoinTestFramework
7+
from test_framework.util import assert_raises_jsonrpc
8+
9+
class DeprecatedRpcTest(BitcoinTestFramework):
10+
def set_test_params(self):
11+
self.num_nodes = 2
12+
self.setup_clean_chain = True
13+
self.extra_args = [[], ["-deprecatedrpc=estimatefee"]]
14+
15+
def run_test(self):
16+
self.log.info("estimatefee: Shows deprecated message")
17+
assert_raises_jsonrpc(-32, 'estimatefee is deprecated', self.nodes[0].estimatefee, 1)
18+
19+
self.log.info("Using -deprecatedrpc=estimatefee bypasses the error")
20+
self.nodes[1].estimatefee(1)
21+
22+
if __name__ == '__main__':
23+
DeprecatedRpcTest().main()

test/functional/smartfees.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ def setup_network(self):
151151
which we will use to generate our transactions.
152152
"""
153153
self.add_nodes(3, extra_args=[["-maxorphantx=1000", "-whitelist=127.0.0.1"],
154-
["-blockmaxsize=17000", "-maxorphantx=1000"],
154+
["-blockmaxsize=17000", "-maxorphantx=1000", "-deprecatedrpc=estimatefee"],
155155
["-blockmaxsize=8000", "-maxorphantx=1000"]])
156156
# Use node0 to mine blocks for input splitting
157157
# Node1 mines small blocks but that are bigger than the expected transaction rate.

test/functional/test_runner.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@
9898
'disconnect_ban.py',
9999
'decodescript.py',
100100
'blockchain.py',
101+
'deprecated_rpc.py',
101102
'disablewallet.py',
102103
'net.py',
103104
'keypool.py',

0 commit comments

Comments
 (0)