fuels_types/
message_proof.rs

1#![cfg(feature = "std")]
2
3use fuel_core_client::client::schema::message::MessageProof as ClientMessageProof;
4use fuel_tx::Bytes32;
5use fuel_types::Nonce;
6
7use crate::{bech32::Bech32Address, block::Header};
8
9#[derive(Debug)]
10pub struct MerkleProof {
11    /// The proof set of the message proof.
12    pub proof_set: Vec<Bytes32>,
13    /// The index that was used to produce this proof.
14    pub proof_index: u64,
15}
16
17#[derive(Debug)]
18pub struct MessageProof {
19    /// Proof that message is contained within the provided block header.
20    pub message_proof: MerkleProof,
21    /// Proof that the provided block header is contained within the blockchain history.
22    pub block_proof: MerkleProof,
23    /// The previous fuel block header that contains the message. Message block height <
24    /// commit block height.
25    pub message_block_header: Header,
26    /// The consensus header associated with the finalized commit being used
27    /// as the root of the block proof.
28    pub commit_block_header: Header,
29    pub sender: Bech32Address,
30    pub recipient: Bech32Address,
31    pub nonce: Nonce,
32    pub amount: u64,
33    pub data: Vec<u8>,
34}
35
36impl From<ClientMessageProof> for MessageProof {
37    fn from(client_message_proof: ClientMessageProof) -> Self {
38        let message_proof_set = client_message_proof
39            .message_proof
40            .proof_set
41            .iter()
42            .map(|proof| proof.0 .0)
43            .collect();
44        let block_proof_set = client_message_proof
45            .block_proof
46            .proof_set
47            .iter()
48            .map(|proof| proof.0 .0)
49            .collect();
50
51        Self {
52            message_proof: MerkleProof {
53                proof_set: message_proof_set,
54                proof_index: client_message_proof.message_proof.proof_index.0,
55            },
56            block_proof: MerkleProof {
57                proof_set: block_proof_set,
58                proof_index: client_message_proof.block_proof.proof_index.0,
59            },
60            message_block_header: client_message_proof.message_block_header.into(),
61            commit_block_header: client_message_proof.commit_block_header.into(),
62            sender: client_message_proof.sender.0 .0.into(),
63            recipient: client_message_proof.recipient.0 .0.into(),
64            nonce: client_message_proof.nonce.0 .0,
65            amount: client_message_proof.amount.0,
66            data: client_message_proof.data.0 .0,
67        }
68    }
69}