chia_sdk_bindings/
clvm_types.rs1use bindy::{Error, Result};
2use chia_bls::SecretKey;
3use chia_protocol::{Bytes32, Coin};
4use chia_puzzle_types::{EveProof as EveProofRs, LineageProof, Proof as ProofRs};
5
6use crate::{Nft, Program};
7
8#[derive(Clone)]
9pub struct Spend {
10 pub puzzle: Program,
11 pub solution: Program,
12}
13
14impl From<Spend> for chia_sdk_driver::Spend {
15 fn from(value: Spend) -> Self {
16 Self {
17 puzzle: value.puzzle.1,
18 solution: value.solution.1,
19 }
20 }
21}
22
23#[derive(Clone)]
24pub struct Output {
25 pub value: Program,
26 pub cost: u64,
27}
28
29#[derive(Clone)]
30pub struct Pair {
31 pub first: Program,
32 pub rest: Program,
33}
34
35#[derive(Clone)]
36pub struct CurriedProgram {
37 pub program: Program,
38 pub args: Vec<Program>,
39}
40
41#[derive(Clone)]
42pub struct Proof {
43 pub parent_parent_coin_info: Bytes32,
44 pub parent_inner_puzzle_hash: Option<Bytes32>,
45 pub parent_amount: u64,
46}
47
48impl Proof {
49 pub fn to_lineage_proof(&self) -> Result<Option<LineageProof>> {
50 Ok(self.clone().try_into().ok())
51 }
52}
53
54impl TryFrom<Proof> for LineageProof {
55 type Error = Error;
56
57 fn try_from(value: Proof) -> Result<Self> {
58 Ok(Self {
59 parent_parent_coin_info: value.parent_parent_coin_info,
60 parent_inner_puzzle_hash: value
61 .parent_inner_puzzle_hash
62 .ok_or(Error::MissingParentInnerPuzzleHash)?,
63 parent_amount: value.parent_amount,
64 })
65 }
66}
67
68impl From<LineageProof> for Proof {
69 fn from(value: LineageProof) -> Self {
70 Self {
71 parent_parent_coin_info: value.parent_parent_coin_info,
72 parent_inner_puzzle_hash: Some(value.parent_inner_puzzle_hash),
73 parent_amount: value.parent_amount,
74 }
75 }
76}
77
78impl From<Proof> for ProofRs {
79 fn from(value: Proof) -> Self {
80 if let Some(parent_inner_puzzle_hash) = value.parent_inner_puzzle_hash {
81 Self::Lineage(chia_puzzle_types::LineageProof {
82 parent_parent_coin_info: value.parent_parent_coin_info,
83 parent_inner_puzzle_hash,
84 parent_amount: value.parent_amount,
85 })
86 } else {
87 Self::Eve(EveProofRs {
88 parent_parent_coin_info: value.parent_parent_coin_info,
89 parent_amount: value.parent_amount,
90 })
91 }
92 }
93}
94
95impl From<ProofRs> for Proof {
96 fn from(value: ProofRs) -> Self {
97 match value {
98 ProofRs::Lineage(proof) => Self {
99 parent_parent_coin_info: proof.parent_parent_coin_info,
100 parent_inner_puzzle_hash: Some(proof.parent_inner_puzzle_hash),
101 parent_amount: proof.parent_amount,
102 },
103 ProofRs::Eve(proof) => Self {
104 parent_parent_coin_info: proof.parent_parent_coin_info,
105 parent_inner_puzzle_hash: None,
106 parent_amount: proof.parent_amount,
107 },
108 }
109 }
110}
111
112pub trait LineageProofExt {
113 fn to_proof(&self) -> Result<Proof>;
114}
115
116impl LineageProofExt for LineageProof {
117 fn to_proof(&self) -> Result<Proof> {
118 Ok((*self).into())
119 }
120}
121
122#[derive(Clone)]
123pub struct OfferSecurityCoinDetails {
124 pub security_coin: Coin,
125 pub security_coin_sk: SecretKey,
126}
127
128#[derive(Clone)]
129pub struct SettlementNftSpendResult {
130 pub new_nft: Nft,
131 pub security_conditions: Vec<Program>,
132}