I've successfully added and built API/data definitions for my new Validation interface
namespace interfaces {
//! Inteface giving clients access to the validation engine.
class Validation
{
public:
virtual ~Validation() {}
// Check if headers are valid.
virtual bool validateHeaders(const BlockHeader& header) = 0;
};
} // namespace interfaces
using Cxx = import "/capnp/c++.capnp";
$Cxx.namespace("ipc::capnp::messages");
using Proxy = import "/mp/proxy.capnp";
$Proxy.include("interfaces/validation.h");
$Proxy.include("ipc/capnp/validation.capnp.h");
interface Validation $Proxy.wrap("interfaces::Validation") {
destroy [@0](/bitcoin-core-multiprocess/contributor/0/) (context :Proxy.Context) -> ();
validateHeaders [@1](/bitcoin-core-multiprocess/contributor/1/) (context :Proxy.Context, header: BlockHeader) -> (result: Bool);
}
I would like to add a custom parameters to my interface :
struct BlockHeader $Proxy.wrap("BlockHeader")
{
nVersion [@0](/bitcoin-core-multiprocess/contributor/0/) :Int32;
hashPrevBlock [@1](/bitcoin-core-multiprocess/contributor/1/) :Data;
hashMerkleRoot [@2](/bitcoin-core-multiprocess/contributor/2/) :Data;
nTime [@3](/bitcoin-core-multiprocess/contributor/3/) :UInt32;
nBits [@4](/bitcoin-core-multiprocess/contributor/4/) :UInt32;
nNonce [@5](/bitcoin-core-multiprocess/contributor/5/) :UInt32;
}
But so far, I'm hitting libmultiprocess compilations errors which are beyond my understanding for now.
AFAIU by observing the interfaces in #10102, you have two options to add a custom parameters :
- wrapping a struct duplicated in the API definition (e.g
struct WalletTxOut $Proxy.wrap("interfaces::WalletTxOut")) - declaring a custom reader/builder in "types files" linking API/data definitions (e.g
CustomReadMessage/CustomBuildMessage)
I should rebase my branch on top of #10102, as this branch includes a lot more of common helpers.
Feel free to correct the terminology I used, I'm progressively catching up on libmultiprocess usage :)