mining.cpp raw

   1  // Copyright (c) 2024 The Limenka 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  #include <ipc/capnp/mining-types.h>
   6  #include <ipc/capnp/mining.capnp.proxy-types.h>
   7  
   8  #include <mp/proxy-types.h>
   9  
  10  namespace mp {
  11  void CustomBuildMessage(InvokeContext& invoke_context,
  12                          const BlockValidationState& src,
  13                          ipc::capnp::messages::BlockValidationState::Builder&& builder)
  14  {
  15      if (src.IsValid()) {
  16          builder.setMode(0);
  17      } else if (src.IsInvalid()) {
  18          builder.setMode(1);
  19      } else if (src.IsError()) {
  20          builder.setMode(2);
  21      } else {
  22          assert(false);
  23      }
  24      builder.setResult(static_cast<int>(src.GetResult()));
  25      builder.setRejectReason(src.GetRejectReason());
  26      builder.setDebugMessage(src.GetDebugMessage());
  27  }
  28  
  29  void CustomReadMessage(InvokeContext& invoke_context,
  30                         const ipc::capnp::messages::BlockValidationState::Reader& reader,
  31                         BlockValidationState& dest)
  32  {
  33      if (reader.getMode() == 0) {
  34          assert(reader.getResult() == 0);
  35          assert(reader.getRejectReason().size() == 0);
  36          assert(reader.getDebugMessage().size() == 0);
  37      } else if (reader.getMode() == 1) {
  38          dest.Invalid(static_cast<BlockValidationResult>(reader.getResult()), reader.getRejectReason(), reader.getDebugMessage());
  39      } else if (reader.getMode() == 2) {
  40          assert(reader.getResult() == 0);
  41          dest.Error(reader.getRejectReason());
  42          assert(reader.getDebugMessage().size() == 0);
  43      } else {
  44          assert(false);
  45      }
  46  }
  47  } // namespace mp
  48