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