There’s a number of RPC calls currently that don’t need to know anything about the blockchain or the users wallet, and also don’t need p2p network access:
- createmultisig
- signmessagewithprivkey
- verifymessage
- validateaddress
- combinepsbt
- converttopsbt
- decodepsbt
- decodescript
- finalizepsbt
Arguably also:
- decoderawtransaction(but- createrawtransactionneeds the node)
There’s also a few being proposed:
We could call the new thing bitcoin-util. The deprecation notice for bitcoin-cli method would simply be Use "bitcoin-util method" instead.
A bigger issue is that some application may depend on calling bitcoind via RPC, perhaps on a different machine. A few things we could do:
- take a very long time to deprecate
- add a parameter to bitcoindthat adds all utility functions via RPC, like e.g.bitcoin-cli util-deriveaddress
- let bitcoin-utilrun its own RPC server on a different port
However (2 & 3): maintaining RPC wrappers around utility functions is some overhead, and extra complexity.
Ideally bitcoin-util comes with a library that’s easy to include in ruby gems, npm modules, etc.
One additional benefit of a separate utility is that you can switch between testnet and mainnet without restarting the node.