ipc: Expose an RPC interface over the -ipcbind socket

This allows `bitcoin-cli` to connect to the node via IPC instead TCP to execute
RPC methods in an upcoming commit.
This commit is contained in:
Ryan Ofsky
2025-10-09 12:47:27 -04:00
parent df76891a3b
commit 6a54834895
12 changed files with 95 additions and 1 deletions

View File

@@ -14,6 +14,7 @@ target_capnp_sources(bitcoin_ipc ${CMAKE_CURRENT_SOURCE_DIR}
capnp/echo.capnp
capnp/init.capnp
capnp/mining.capnp
capnp/rpc.capnp
)
target_link_libraries(bitcoin_ipc

View File

@@ -7,5 +7,6 @@
#include <ipc/capnp/echo.capnp.proxy-types.h>
#include <ipc/capnp/mining.capnp.proxy-types.h>
#include <ipc/capnp/rpc.capnp.proxy-types.h>
#endif // BITCOIN_IPC_CAPNP_INIT_TYPES_H

View File

@@ -15,11 +15,13 @@ $Proxy.includeTypes("ipc/capnp/init-types.h");
using Echo = import "echo.capnp";
using Mining = import "mining.capnp";
using Rpc = import "rpc.capnp";
interface Init $Proxy.wrap("interfaces::Init") {
construct @0 (threadMap: Proxy.ThreadMap) -> (threadMap :Proxy.ThreadMap);
makeEcho @1 (context :Proxy.Context) -> (result :Echo.Echo);
makeMining @3 (context :Proxy.Context) -> (result :Mining.Mining);
makeRpc @4 (context :Proxy.Context) -> (result :Rpc.Rpc);
# DEPRECATED: no longer supported; server returns an error.
makeMiningOld2 @2 () -> ();

12
src/ipc/capnp/rpc-types.h Normal file
View File

@@ -0,0 +1,12 @@
// Copyright (c) 2025 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_IPC_CAPNP_RPC_TYPES_H
#define BITCOIN_IPC_CAPNP_RPC_TYPES_H
#include <ipc/capnp/common.capnp.proxy-types.h>
#include <ipc/capnp/common-types.h>
#include <ipc/capnp/rpc.capnp.proxy.h>
#endif // BITCOIN_IPC_CAPNP_RPC_TYPES_H

17
src/ipc/capnp/rpc.capnp Normal file
View File

@@ -0,0 +1,17 @@
# Copyright (c) 2025 The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
@0x9c3505dc45e146ac;
using Cxx = import "/capnp/c++.capnp";
$Cxx.namespace("ipc::capnp::messages");
using Common = import "common.capnp";
using Proxy = import "/mp/proxy.capnp";
$Proxy.include("interfaces/rpc.h");
$Proxy.includeTypes("ipc/capnp/rpc-types.h");
interface Rpc $Proxy.wrap("interfaces::Rpc") {
executeRpc @0 (context :Proxy.Context, request :Text, uri :Text, user :Text) -> (result :Text);
}