chia-sdk-driver 0.33.0

Driver code for interacting with standard puzzles on the Chia blockchain.
Documentation
use chia_bls::PublicKey;
use chia_protocol::Bytes32;
use chia_sdk_types::puzzles::P2MOfNDelegateDirectArgs;
use clvm_traits::{FromClvm, ToClvm};
use clvm_utils::TreeHash;

use crate::{MOfNLayer, SingletonInfo, SingletonLayer};

type MedievalVaultLayers = SingletonLayer<MOfNLayer>;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct MedievalVaultInfo {
    pub launcher_id: Bytes32,

    pub m: usize,
    pub public_key_list: Vec<PublicKey>,
}

impl MedievalVaultInfo {
    pub fn new(launcher_id: Bytes32, m: usize, public_key_list: Vec<PublicKey>) -> Self {
        Self {
            launcher_id,
            m,
            public_key_list,
        }
    }

    pub fn from_hint(hint: MedievalVaultHint) -> Self {
        Self {
            launcher_id: hint.my_launcher_id,
            m: hint.m,
            public_key_list: hint.public_key_list,
        }
    }

    pub fn into_layers(&self) -> MedievalVaultLayers {
        SingletonLayer::new(
            self.launcher_id,
            MOfNLayer::new(self.m, self.public_key_list.clone()),
        )
    }

    pub fn to_hint(&self) -> MedievalVaultHint {
        MedievalVaultHint {
            my_launcher_id: self.launcher_id,
            m: self.m,
            public_key_list: self.public_key_list.clone(),
        }
    }
}

impl SingletonInfo for MedievalVaultInfo {
    fn launcher_id(&self) -> Bytes32 {
        self.launcher_id
    }

    fn inner_puzzle_hash(&self) -> TreeHash {
        P2MOfNDelegateDirectArgs::curry_tree_hash(self.m, self.public_key_list.clone())
    }
}

#[derive(ToClvm, FromClvm, Debug, Clone, PartialEq, Eq)]
#[clvm(list)]
pub struct MedievalVaultHint {
    pub my_launcher_id: Bytes32,
    pub m: usize,
    #[clvm(rest)]
    pub public_key_list: Vec<PublicKey>,
}