chia_sdk_driver/primitives/option/
option_metadata.rs

1use chia_protocol::Bytes32;
2use clvm_traits::{FromClvm, ToClvm};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ToClvm, FromClvm)]
5#[clvm(list)]
6pub struct OptionMetadata {
7    pub expiration_seconds: u64,
8    pub strike_type: OptionType,
9}
10
11impl OptionMetadata {
12    pub fn new(expiration_seconds: u64, strike_type: OptionType) -> Self {
13        Self {
14            expiration_seconds,
15            strike_type,
16        }
17    }
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ToClvm, FromClvm)]
21#[clvm(list)]
22#[repr(u8)]
23pub enum OptionType {
24    Xch {
25        amount: u64,
26    },
27    Cat {
28        asset_id: Bytes32,
29        amount: u64,
30    },
31    RevocableCat {
32        asset_id: Bytes32,
33        hidden_puzzle_hash: Bytes32,
34        amount: u64,
35    },
36    Nft {
37        launcher_id: Bytes32,
38        settlement_puzzle_hash: Bytes32,
39        amount: u64,
40    },
41}
42
43impl OptionType {
44    pub fn amount(&self) -> u64 {
45        match self {
46            OptionType::Xch { amount }
47            | OptionType::Cat { amount, .. }
48            | OptionType::RevocableCat { amount, .. }
49            | OptionType::Nft { amount, .. } => *amount,
50        }
51    }
52
53    pub fn is_hinted(&self) -> bool {
54        matches!(
55            self,
56            OptionType::Cat { .. } | OptionType::RevocableCat { .. } | OptionType::Nft { .. }
57        )
58    }
59}