chia_sdk_driver/primitives/action_layer/
medieval_vault_info.rs1use 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}