mining.capnp raw
1 # Copyright (c) 2024-present The Bitcoin Core developers
2 # Distributed under the MIT software license, see the accompanying
3 # file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 @0xc77d03df6a41b505;
6
7 using Cxx = import "/capnp/c++.capnp";
8 $Cxx.namespace("ipc::capnp::messages");
9
10 using Common = import "common.capnp";
11 using Proxy = import "/mp/proxy.capnp";
12 $Proxy.include("interfaces/mining.h");
13 $Proxy.includeTypes("ipc/capnp/mining-types.h");
14
15 const maxMoney :Int64 = 2100000000000000;
16 const maxDouble :Float64 = 1.7976931348623157e308;
17 const defaultBlockReservedWeight :UInt32 = 8000;
18 const defaultCoinbaseOutputMaxAdditionalSigops :UInt32 = 400;
19
20 interface Mining $Proxy.wrap("interfaces::Mining") {
21 isTestChain @0 (context :Proxy.Context) -> (result: Bool);
22 isInitialBlockDownload @1 (context :Proxy.Context) -> (result: Bool);
23 getTip @2 (context :Proxy.Context) -> (result: Common.BlockRef, hasResult: Bool);
24 waitTipChanged @3 (context :Proxy.Context, currentTip: Data, timeout: Float64 = .maxDouble) -> (result: Common.BlockRef);
25 createNewBlock @4 (context :Proxy.Context, options: BlockCreateOptions, cooldown: Bool = true) -> (result: BlockTemplate);
26 checkBlock @5 (context :Proxy.Context, block: Data, options: BlockCheckOptions) -> (reason: Text, debug: Text, result: Bool);
27 interrupt @6 () -> ();
28 submitBlock @7 (context :Proxy.Context, block: Data) -> (reason: Text, debug: Text, result: Bool);
29 getTransactionsByTxID @8 (context :Proxy.Context, txids: List(Data)) -> (result: List(Data));
30 getTransactionsByWitnessID @9 (context :Proxy.Context, wtxids: List(Data)) -> (result: List(Data));
31 }
32
33 interface BlockTemplate $Proxy.wrap("interfaces::BlockTemplate") {
34 destroy @0 (context :Proxy.Context) -> ();
35 getBlockHeader @1 (context: Proxy.Context) -> (result: Data);
36 getBlock @2 (context: Proxy.Context) -> (result: Data);
37 getTxFees @3 (context: Proxy.Context) -> (result: List(Int64));
38 getTxSigops @4 (context: Proxy.Context) -> (result: List(Int64));
39 getCoinbaseTx @5 (context: Proxy.Context) -> (result: CoinbaseTx);
40 getCoinbaseMerklePath @6 (context: Proxy.Context) -> (result: List(Data));
41 submitSolution @7 (context: Proxy.Context, version: UInt32, timestamp: UInt32, nonce: UInt32, coinbase :Data) -> (result: Bool);
42 waitNext @8 (context: Proxy.Context, options: BlockWaitOptions) -> (result: BlockTemplate);
43 interruptWait @9() -> ();
44 }
45
46 struct BlockCreateOptions $Proxy.wrap("node::BlockCreateOptions") {
47 useMempool @0 :Bool = true $Proxy.name("use_mempool");
48 blockReservedWeight @1 :UInt64 = .defaultBlockReservedWeight $Proxy.name("block_reserved_weight");
49 coinbaseOutputMaxAdditionalSigops @2 :UInt64 = .defaultCoinbaseOutputMaxAdditionalSigops $Proxy.name("coinbase_output_max_additional_sigops");
50 }
51
52 struct BlockWaitOptions $Proxy.wrap("node::BlockWaitOptions") {
53 timeout @0 : Float64 = .maxDouble $Proxy.name("timeout");
54 feeThreshold @1 : Int64 = .maxMoney $Proxy.name("fee_threshold");
55 }
56
57 struct BlockCheckOptions $Proxy.wrap("node::BlockCheckOptions") {
58 checkMerkleRoot @0 :Bool = true $Proxy.name("check_merkle_root");
59 checkPow @1 :Bool = true $Proxy.name("check_pow");
60 }
61
62 struct CoinbaseTx $Proxy.wrap("node::CoinbaseTx") {
63 version @0 :UInt32 $Proxy.name("version");
64 sequence @1 :UInt32 $Proxy.name("sequence");
65 scriptSigPrefix @2 :Data $Proxy.name("script_sig_prefix");
66 witness @3 :Data $Proxy.name("witness");
67 blockRewardRemaining @4 :Int64 $Proxy.name("block_reward_remaining");
68 requiredOutputs @5 :List(Data) $Proxy.name("required_outputs");
69 lockTime @6 :UInt32 $Proxy.name("lock_time");
70 }
71