smplx_sdk/presets/
p2pk.rs1use crate::program::ArgumentsTrait;
2use crate::program::Program;
3
4use simplicityhl::simplicity::bitcoin::XOnlyPublicKey;
5
6pub struct P2PK {
8 program: Program,
9}
10
11impl P2PK {
12 pub const SOURCE: &'static str = include_str!("./simf/p2pk.simf");
13
14 pub fn new(public_key: XOnlyPublicKey, arguments: impl ArgumentsTrait + 'static) -> Self {
15 Self {
16 program: Program::new(Self::SOURCE, public_key, Box::new(arguments)),
17 }
18 }
19
20 pub fn get_program(&self) -> &Program {
21 &self.program
22 }
23
24 pub fn get_program_mut(&mut self) -> &mut Program {
25 &mut self.program
26 }
27}
28
29pub mod p2pk_build {
30 use crate::program::ArgumentsTrait;
31 use crate::program::WitnessTrait;
32 use simplicityhl::num::U256;
33 use simplicityhl::str::WitnessName;
34 use simplicityhl::value::UIntValue;
35 use simplicityhl::value::ValueConstructible;
36 use simplicityhl::{Arguments, Value, WitnessValues};
37 use std::collections::HashMap;
38
39 #[derive(Clone)]
40 pub struct P2PKWitness {
41 pub signature: [u8; 64usize],
42 }
43
44 #[derive(Clone)]
45 pub struct P2PKArguments {
46 pub public_key: [u8; 32],
47 }
48
49 impl WitnessTrait for P2PKWitness {
50 fn build_witness(&self) -> WitnessValues {
51 WitnessValues::from(HashMap::from([(
52 WitnessName::from_str_unchecked("SIGNATURE"),
53 Value::byte_array(self.signature),
54 )]))
55 }
56 }
57
58 impl ArgumentsTrait for P2PKArguments {
59 fn build_arguments(&self) -> Arguments {
60 Arguments::from(HashMap::from([(
61 WitnessName::from_str_unchecked("PUBLIC_KEY"),
62 Value::from(UIntValue::U256(U256::from_byte_array(self.public_key))),
63 )]))
64 }
65 }
66}