chia_sdk_driver/layers/
settlement_layer.rs

1use 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/// The settlement [`Layer`] is used to spend coins that are part of an offer.
10#[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}