chia_sdk_driver/layers/
settlement_layer.rs1use chia_puzzle_types::offer::SettlementPaymentsSolution;
2use chia_puzzles::SETTLEMENT_PAYMENT_HASH;
3use chia_sdk_types::puzzles::SettlementPayment;
4use clvm_traits::FromClvm;
5use clvmr::{Allocator, NodePtr};
6
7use crate::{DriverError, Layer, Puzzle, SpendContext};
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11pub struct SettlementLayer;
12
13impl Layer for SettlementLayer {
14 type Solution = SettlementPaymentsSolution;
15
16 fn construct_puzzle(&self, ctx: &mut SpendContext) -> Result<NodePtr, DriverError> {
17 ctx.alloc_mod::<SettlementPayment>()
18 }
19
20 fn construct_solution(
21 &self,
22 ctx: &mut SpendContext,
23 solution: Self::Solution,
24 ) -> Result<NodePtr, DriverError> {
25 ctx.alloc(&solution)
26 }
27
28 fn parse_puzzle(_allocator: &Allocator, puzzle: Puzzle) -> Result<Option<Self>, DriverError> {
29 if puzzle.curried_puzzle_hash() != SETTLEMENT_PAYMENT_HASH.into() {
30 return Ok(None);
31 }
32 Ok(Some(Self))
33 }
34
35 fn parse_solution(
36 allocator: &Allocator,
37 solution: NodePtr,
38 ) -> Result<Self::Solution, DriverError> {
39 Ok(FromClvm::from_clvm(allocator, solution)?)
40 }
41}