chia_sdk_driver/primitives/action_layer/
medieval_vault_info.rs

1use chia_bls::PublicKey;
2use chia_protocol::Bytes32;
3use chia_sdk_types::puzzles::P2MOfNDelegateDirectArgs;
4use clvm_traits::{FromClvm, ToClvm};
5use clvm_utils::TreeHash;
6
7use crate::{MOfNLayer, SingletonInfo, SingletonLayer};
8
9type MedievalVaultLayers = SingletonLayer<MOfNLayer>;
10
11#[derive(Debug, Clone, PartialEq, Eq)]
12pub struct MedievalVaultInfo {
13    pub launcher_id: Bytes32,
14
15    pub m: usize,
16    pub public_key_list: Vec<PublicKey>,
17}
18
19impl MedievalVaultInfo {
20    pub fn new(launcher_id: Bytes32, m: usize, public_key_list: Vec<PublicKey>) -> Self {
21        Self {
22            launcher_id,
23            m,
24            public_key_list,
25        }
26    }
27
28    pub fn from_hint(hint: MedievalVaultHint) -> Self {
29        Self {
30            launcher_id: hint.my_launcher_id,
31            m: hint.m,
32            public_key_list: hint.public_key_list,
33        }
34    }
35
36    pub fn into_layers(&self) -> MedievalVaultLayers {
37        SingletonLayer::new(
38            self.launcher_id,
39            MOfNLayer::new(self.m, self.public_key_list.clone()),
40        )
41    }
42
43    pub fn to_hint(&self) -> MedievalVaultHint {
44        MedievalVaultHint {
45            my_launcher_id: self.launcher_id,
46            m: self.m,
47            public_key_list: self.public_key_list.clone(),
48        }
49    }
50}
51
52impl SingletonInfo for MedievalVaultInfo {
53    fn launcher_id(&self) -> Bytes32 {
54        self.launcher_id
55    }
56
57    fn inner_puzzle_hash(&self) -> TreeHash {
58        P2MOfNDelegateDirectArgs::curry_tree_hash(self.m, self.public_key_list.clone())
59    }
60}
61
62#[derive(ToClvm, FromClvm, Debug, Clone, PartialEq, Eq)]
63#[clvm(list)]
64pub struct MedievalVaultHint {
65    pub my_launcher_id: Bytes32,
66    pub m: usize,
67    #[clvm(rest)]
68    pub public_key_list: Vec<PublicKey>,
69}