massa_final_state/
mapping_grpc.rs1use crate::StateChanges;
4use massa_models::{
5 async_msg_id::AsyncMessageId,
6 types::{SetOrKeep, SetUpdateOrDelete},
7};
8use massa_proto_rs::massa::model::v1 as grpc_model;
9
10impl From<StateChanges> for grpc_model::StateChanges {
11 fn from(value: StateChanges) -> Self {
12 grpc_model::StateChanges {
13 executed_ops_changes: value
14 .executed_ops_changes
15 .into_iter()
16 .map(|(op_id, (op_exec_status, op_valid_until_slot))| {
17 grpc_model::ExecutedOpsChangeEntry {
18 operation_id: op_id.to_string(),
19 value: Some(grpc_model::ExecutedOpsChangeValue {
20 status: if op_exec_status {
21 grpc_model::OperationExecutionStatus::Success as i32
23 } else {
24 grpc_model::OperationExecutionStatus::Failed as i32
25 },
26 slot: Some(op_valid_until_slot.into()),
27 }),
28 }
29 })
30 .collect(),
31 async_pool_changes: value
32 .async_pool_changes
33 .0
34 .into_iter()
35 .map(|(async_msg_id, change)| match change {
36 SetUpdateOrDelete::Set(async_msg) => grpc_model::AsyncPoolChangeEntry {
37 async_message_id: async_msg_id_to_string(async_msg_id),
38 value: Some(grpc_model::AsyncPoolChangeValue {
39 r#type: grpc_model::AsyncPoolChangeType::Set as i32,
40 message: Some(
41 grpc_model::async_pool_change_value::Message::CreatedMessage(
42 async_msg.into(),
43 ),
44 ),
45 }),
46 },
47 SetUpdateOrDelete::Update(async_msg_update) => {
48 grpc_model::AsyncPoolChangeEntry {
49 async_message_id: async_msg_id_to_string(async_msg_id),
50 value: Some(grpc_model::AsyncPoolChangeValue {
51 r#type: grpc_model::AsyncPoolChangeType::Update as i32,
52 message: Some(
53 grpc_model::async_pool_change_value::Message::UpdatedMessage(
54 async_msg_update.into(),
55 ),
56 ),
57 }),
58 }
59 }
60 SetUpdateOrDelete::Delete => grpc_model::AsyncPoolChangeEntry {
61 async_message_id: async_msg_id_to_string(async_msg_id),
62 value: Some(grpc_model::AsyncPoolChangeValue {
63 r#type: grpc_model::AsyncPoolChangeType::Delete as i32,
64 message: None,
65 }),
66 },
67 })
68 .collect(),
69 ledger_changes: value
70 .ledger_changes
71 .0
72 .into_iter()
73 .map(|(key, value)| grpc_model::LedgerChangeEntry {
74 address: key.to_string(),
75 value: Some(match value {
76 SetUpdateOrDelete::Set(value) => grpc_model::LedgerChangeValue {
77 r#type: grpc_model::LedgerChangeType::Set as i32,
78 entry: Some(grpc_model::ledger_change_value::Entry::CreatedEntry(
79 value.into(),
80 )),
81 },
82 SetUpdateOrDelete::Update(value) => grpc_model::LedgerChangeValue {
83 r#type: grpc_model::LedgerChangeType::Update as i32,
84 entry: Some(grpc_model::ledger_change_value::Entry::UpdatedEntry(
85 value.into(),
86 )),
87 },
88 SetUpdateOrDelete::Delete => grpc_model::LedgerChangeValue {
89 r#type: grpc_model::LedgerChangeType::Delete as i32,
90 entry: None,
91 },
92 }),
93 })
94 .collect(),
95 executed_denunciations_changes: value
96 .executed_denunciations_changes
97 .into_iter()
98 .map(|de_idx| de_idx.into())
99 .collect(),
100 execution_trail_hash_change: match value.execution_trail_hash_change {
101 SetOrKeep::Set(value) => Some(grpc_model::SetOrKeepString {
102 change: Some(grpc_model::set_or_keep_string::Change::Set(
103 value.to_string(),
104 )),
105 }),
106 SetOrKeep::Keep => Some(grpc_model::SetOrKeepString {
107 change: Some(grpc_model::set_or_keep_string::Change::Keep(
108 grpc_model::Empty {},
109 )),
110 }),
111 },
112 }
113 }
114}
115
116fn async_msg_id_to_string(id: AsyncMessageId) -> String {
117 bs58::encode(format!("{}{}{}{}", id.0 .0.numer(), id.0 .0.denom(), id.1, id.2).as_bytes())
118 .with_check()
119 .into_string()
120}