1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use crate::{
serialization::{
HexNumber,
HexType,
},
GenesisCommitment,
};
use fuel_core_interfaces::{
common::prelude::{
Address,
MerkleRoot,
Word,
},
model::{
DaBlockHeight,
Message,
},
};
use serde::{
Deserialize,
Serialize,
};
use serde_with::{
serde_as,
skip_serializing_none,
};
#[skip_serializing_none]
#[serde_as]
#[derive(Clone, Debug, Default, Deserialize, Serialize, Eq, PartialEq)]
pub struct MessageConfig {
#[serde_as(as = "HexType")]
pub sender: Address,
#[serde_as(as = "HexType")]
pub recipient: Address,
#[serde_as(as = "HexNumber")]
pub nonce: Word,
#[serde_as(as = "HexNumber")]
pub amount: Word,
#[serde_as(as = "HexType")]
pub data: Vec<u8>,
#[serde_as(as = "HexNumber")]
pub da_height: DaBlockHeight,
}
impl From<MessageConfig> for Message {
fn from(msg: MessageConfig) -> Self {
Message {
sender: msg.sender,
recipient: msg.recipient,
nonce: msg.nonce,
amount: msg.amount,
data: msg.data,
da_height: msg.da_height,
fuel_block_spend: None,
}
}
}
impl GenesisCommitment for Message {
fn root(&mut self) -> anyhow::Result<MerkleRoot> {
Ok(self.id().into())
}
}