Skip to content

Commit d4cdbd6

Browse files
committed
[rpc] Deprecate estimatefee RPC
Deprecate 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=<method>` argument. RPC method is removed entirely in version (x+1).
1 parent 86700d3 commit d4cdbd6

File tree

6 files changed

+18
-1
lines changed

6 files changed

+18
-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/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.

0 commit comments

Comments
 (0)