fuel_chain_config/config/
message.rs

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