fuels_types/
coin.rs

1#![cfg(feature = "std")]
2
3use fuel_core_chain_config::CoinConfig;
4use fuel_core_client::client::schema::coins::Coin as ClientCoin;
5use fuel_tx::{AssetId, UtxoId};
6
7use crate::bech32::Bech32Address;
8
9#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
10pub enum CoinStatus {
11    #[default]
12    Unspent,
13    Spent,
14}
15
16#[derive(Debug, Clone, PartialEq, Eq, Hash)]
17pub struct Coin {
18    pub amount: u64,
19    pub block_created: u32,
20    pub asset_id: AssetId,
21    pub utxo_id: UtxoId,
22    pub maturity: u32,
23    pub owner: Bech32Address,
24    pub status: CoinStatus,
25}
26
27impl From<ClientCoin> for Coin {
28    fn from(coin: ClientCoin) -> Self {
29        Self {
30            amount: coin.amount.0,
31            block_created: coin.block_created.0,
32            asset_id: coin.asset_id.0 .0,
33            utxo_id: coin.utxo_id.0 .0,
34            maturity: coin.maturity.0,
35            owner: coin.owner.0 .0.into(),
36            status: CoinStatus::Unspent,
37        }
38    }
39}
40
41impl From<Coin> for CoinConfig {
42    fn from(coin: Coin) -> CoinConfig {
43        Self {
44            tx_id: Some(*coin.utxo_id.tx_id()),
45            output_index: Some(coin.utxo_id.output_index()),
46            tx_pointer_block_height: Some(coin.block_created.into()),
47            tx_pointer_tx_idx: None,
48            maturity: Some(coin.maturity.into()),
49            owner: coin.owner.into(),
50            amount: coin.amount,
51            asset_id: coin.asset_id,
52        }
53    }
54}