cml_chain/builders/
mint_builder.rs1use crate::builders::witness_builder::{InputAggregateWitnessData, PartialPlutusWitness};
2
3use super::witness_builder::{NativeScriptWitnessInfo, RequiredWitnessSet};
4
5use cml_core::ordered_hash_map::OrderedHashMap;
6
7use crate::{assets::AssetName, NativeScript, PolicyId, RequiredSigners};
8
9#[derive(Clone)]
10pub struct MintBuilderResult {
11 pub policy_id: PolicyId,
12 pub assets: OrderedHashMap<AssetName, i64>,
13 pub aggregate_witness: Option<InputAggregateWitnessData>,
14 pub required_wits: RequiredWitnessSet,
15}
16
17#[derive(Clone)]
18pub struct SingleMintBuilder {
19 assets: OrderedHashMap<AssetName, i64>,
20}
21
22impl SingleMintBuilder {
23 pub fn new(assets: OrderedHashMap<AssetName, i64>) -> Self {
24 Self { assets }
25 }
26
27 pub fn new_single_asset(asset: AssetName, amount: i64) -> Self {
28 let mut assets = OrderedHashMap::new();
29 assets.insert(asset, amount);
30 Self { assets }
31 }
32
33 pub fn native_script(
34 self,
35 native_script: NativeScript,
36 witness_info: NativeScriptWitnessInfo,
37 ) -> MintBuilderResult {
38 let mut required_wits = RequiredWitnessSet::default();
39 let script_hash = native_script.hash();
40 required_wits.add_script_hash(script_hash);
41
42 MintBuilderResult {
43 assets: self.assets,
44 policy_id: script_hash,
45 aggregate_witness: Some(InputAggregateWitnessData::NativeScript(
46 native_script,
47 witness_info,
48 )),
49 required_wits,
50 }
51 }
52
53 pub fn plutus_script(
54 self,
55 partial_witness: PartialPlutusWitness,
56 required_signers: RequiredSigners,
57 ) -> MintBuilderResult {
58 let mut required_wits = RequiredWitnessSet::default();
59
60 let script_hash = partial_witness.script.hash();
61 required_signers
62 .iter()
63 .for_each(|required_signer| required_wits.add_vkey_key_hash(*required_signer));
64 required_wits.add_script_hash(script_hash);
65
66 MintBuilderResult {
67 assets: self.assets,
68 policy_id: script_hash,
69 aggregate_witness: Some(InputAggregateWitnessData::PlutusScript(
70 partial_witness,
71 required_signers,
72 None,
73 )),
74 required_wits,
75 }
76 }
77}