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