cml_multi_era/babbage/
mod.rs

1// This file was code-generated using an experimental CDDL to rust tool:
2// https://github.com/dcSpark/cddl-codegen
3
4pub mod cbor_encodings;
5pub mod serialization;
6pub mod utils;
7
8use crate::allegra::AllegraCertificate;
9use crate::alonzo::AlonzoRedeemer;
10use crate::shelley::ProtocolVersionStruct;
11use cbor_encodings::{
12    BabbageBlockEncoding, BabbageFormatAuxDataEncoding, BabbageFormatTxOutEncoding,
13    BabbageProtocolParamUpdateEncoding, BabbageTransactionBodyEncoding, BabbageTransactionEncoding,
14    BabbageTransactionWitnessSetEncoding, BabbageUpdateEncoding,
15};
16use cml_chain::address::Address;
17use cml_chain::assets::{Coin, Value};
18use cml_chain::auxdata::{Metadata, ShelleyFormatAuxData, ShelleyMAFormatAuxData};
19use cml_chain::block::Header;
20use cml_chain::crypto::{
21    AuxiliaryDataHash, BootstrapWitness, GenesisHash, ScriptDataHash, Vkeywitness,
22};
23use cml_chain::plutus::{
24    CostModels, ExUnitPrices, ExUnits, PlutusData, PlutusV1Script, PlutusV2Script,
25};
26use cml_chain::transaction::{AlonzoFormatTxOut, DatumOption, NativeScript, TransactionInput};
27use cml_chain::{Epoch, NetworkId, Rational, RequiredSigners, UnitInterval, Withdrawals};
28
29use cml_core::ordered_hash_map::OrderedHashMap;
30use cml_core::serialization::LenEncoding;
31use cml_core::TransactionIndex;
32
33use std::collections::BTreeMap;
34
35use self::utils::BabbageMint;
36
37#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
38pub enum BabbageAuxiliaryData {
39    Shelley(ShelleyFormatAuxData),
40    ShelleyMA(ShelleyMAFormatAuxData),
41    Babbage(BabbageFormatAuxData),
42}
43
44impl BabbageAuxiliaryData {
45    pub fn new_shelley(shelley: ShelleyFormatAuxData) -> Self {
46        Self::Shelley(shelley)
47    }
48
49    pub fn new_shelley_ma(shelley_ma: ShelleyMAFormatAuxData) -> Self {
50        Self::ShelleyMA(shelley_ma)
51    }
52
53    pub fn new_babbage(babbage: BabbageFormatAuxData) -> Self {
54        Self::Babbage(babbage)
55    }
56}
57
58#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
59pub struct BabbageBlock {
60    pub header: Header,
61    pub transaction_bodies: Vec<BabbageTransactionBody>,
62    pub transaction_witness_sets: Vec<BabbageTransactionWitnessSet>,
63    pub auxiliary_data_set: OrderedHashMap<TransactionIndex, BabbageAuxiliaryData>,
64    pub invalid_transactions: Vec<TransactionIndex>,
65    #[serde(skip)]
66    pub encodings: Option<BabbageBlockEncoding>,
67}
68
69impl BabbageBlock {
70    pub fn new(
71        header: Header,
72        transaction_bodies: Vec<BabbageTransactionBody>,
73        transaction_witness_sets: Vec<BabbageTransactionWitnessSet>,
74        auxiliary_data_set: OrderedHashMap<TransactionIndex, BabbageAuxiliaryData>,
75        invalid_transactions: Vec<TransactionIndex>,
76    ) -> Self {
77        Self {
78            header,
79            transaction_bodies,
80            transaction_witness_sets,
81            auxiliary_data_set,
82            invalid_transactions,
83            encodings: None,
84        }
85    }
86}
87
88pub type BabbageCostModels = CostModels;
89
90#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
91pub struct BabbageFormatAuxData {
92    pub metadata: Option<Metadata>,
93    pub native_scripts: Option<Vec<NativeScript>>,
94    pub plutus_v1_scripts: Option<Vec<PlutusV1Script>>,
95    pub plutus_v2_scripts: Option<Vec<PlutusV2Script>>,
96    #[serde(skip)]
97    pub encodings: Option<BabbageFormatAuxDataEncoding>,
98}
99
100impl BabbageFormatAuxData {
101    pub fn new() -> Self {
102        Self {
103            metadata: None,
104            native_scripts: None,
105            plutus_v1_scripts: None,
106            plutus_v2_scripts: None,
107            encodings: None,
108        }
109    }
110}
111
112impl Default for BabbageFormatAuxData {
113    fn default() -> Self {
114        Self::new()
115    }
116}
117
118#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
119pub struct BabbageFormatTxOut {
120    pub address: Address,
121    pub amount: Value,
122    pub datum_option: Option<DatumOption>,
123    pub script_reference: Option<BabbageScriptRef>,
124    #[serde(skip)]
125    pub encodings: Option<BabbageFormatTxOutEncoding>,
126}
127
128impl BabbageFormatTxOut {
129    pub fn new(address: Address, amount: Value) -> Self {
130        Self {
131            address,
132            amount,
133            datum_option: None,
134            script_reference: None,
135            encodings: None,
136        }
137    }
138}
139
140pub type BabbageProposedProtocolParameterUpdates =
141    OrderedHashMap<GenesisHash, BabbageProtocolParamUpdate>;
142
143#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
144pub struct BabbageProtocolParamUpdate {
145    pub minfee_a: Option<u64>,
146    pub minfee_b: Option<u64>,
147    pub max_block_body_size: Option<u64>,
148    pub max_transaction_size: Option<u64>,
149    pub max_block_header_size: Option<u64>,
150    pub key_deposit: Option<Coin>,
151    pub pool_deposit: Option<Coin>,
152    pub maximum_epoch: Option<Epoch>,
153    pub n_opt: Option<u64>,
154    pub pool_pledge_influence: Option<Rational>,
155    pub expansion_rate: Option<UnitInterval>,
156    pub treasury_growth_rate: Option<UnitInterval>,
157    pub protocol_version: Option<ProtocolVersionStruct>,
158    pub min_pool_cost: Option<Coin>,
159    pub ada_per_utxo_byte: Option<Coin>,
160    pub cost_models_for_script_languages: Option<BabbageCostModels>,
161    pub execution_costs: Option<ExUnitPrices>,
162    pub max_tx_ex_units: Option<ExUnits>,
163    pub max_block_ex_units: Option<ExUnits>,
164    pub max_value_size: Option<u64>,
165    pub collateral_percentage: Option<u64>,
166    pub max_collateral_inputs: Option<u64>,
167    #[serde(skip)]
168    pub encodings: Option<BabbageProtocolParamUpdateEncoding>,
169}
170
171impl BabbageProtocolParamUpdate {
172    pub fn new() -> Self {
173        Self {
174            minfee_a: None,
175            minfee_b: None,
176            max_block_body_size: None,
177            max_transaction_size: None,
178            max_block_header_size: None,
179            key_deposit: None,
180            pool_deposit: None,
181            maximum_epoch: None,
182            n_opt: None,
183            pool_pledge_influence: None,
184            expansion_rate: None,
185            treasury_growth_rate: None,
186            protocol_version: None,
187            min_pool_cost: None,
188            ada_per_utxo_byte: None,
189            cost_models_for_script_languages: None,
190            execution_costs: None,
191            max_tx_ex_units: None,
192            max_block_ex_units: None,
193            max_value_size: None,
194            collateral_percentage: None,
195            max_collateral_inputs: None,
196            encodings: None,
197        }
198    }
199}
200
201impl Default for BabbageProtocolParamUpdate {
202    fn default() -> Self {
203        Self::new()
204    }
205}
206
207#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
208pub enum BabbageScript {
209    Native {
210        script: NativeScript,
211        #[serde(skip)]
212        len_encoding: LenEncoding,
213        #[serde(skip)]
214        tag_encoding: Option<cbor_event::Sz>,
215    },
216    PlutusV1 {
217        script: PlutusV1Script,
218        #[serde(skip)]
219        len_encoding: LenEncoding,
220        #[serde(skip)]
221        tag_encoding: Option<cbor_event::Sz>,
222    },
223    PlutusV2 {
224        script: PlutusV2Script,
225        #[serde(skip)]
226        len_encoding: LenEncoding,
227        #[serde(skip)]
228        tag_encoding: Option<cbor_event::Sz>,
229    },
230}
231
232impl BabbageScript {
233    pub fn new_native(script: NativeScript) -> Self {
234        Self::Native {
235            script,
236            len_encoding: LenEncoding::default(),
237            tag_encoding: None,
238        }
239    }
240
241    pub fn new_plutus_v1(script: PlutusV1Script) -> Self {
242        Self::PlutusV1 {
243            script,
244            len_encoding: LenEncoding::default(),
245            tag_encoding: None,
246        }
247    }
248
249    pub fn new_plutus_v2(script: PlutusV2Script) -> Self {
250        Self::PlutusV2 {
251            script,
252            len_encoding: LenEncoding::default(),
253            tag_encoding: None,
254        }
255    }
256}
257
258pub type BabbageScriptRef = BabbageScript;
259
260#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
261pub struct BabbageTransaction {
262    pub body: BabbageTransactionBody,
263    pub witness_set: BabbageTransactionWitnessSet,
264    pub is_valid: bool,
265    pub auxiliary_data: Option<BabbageAuxiliaryData>,
266    #[serde(skip)]
267    pub encodings: Option<BabbageTransactionEncoding>,
268}
269
270impl BabbageTransaction {
271    pub fn new(
272        body: BabbageTransactionBody,
273        witness_set: BabbageTransactionWitnessSet,
274        is_valid: bool,
275        auxiliary_data: Option<BabbageAuxiliaryData>,
276    ) -> Self {
277        Self {
278            body,
279            witness_set,
280            is_valid,
281            auxiliary_data,
282            encodings: None,
283        }
284    }
285}
286
287#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
288pub struct BabbageTransactionBody {
289    pub inputs: Vec<TransactionInput>,
290    pub outputs: Vec<BabbageTransactionOutput>,
291    pub fee: Coin,
292    pub ttl: Option<u64>,
293    pub certs: Option<Vec<AllegraCertificate>>,
294    pub withdrawals: Option<Withdrawals>,
295    pub update: Option<BabbageUpdate>,
296    pub auxiliary_data_hash: Option<AuxiliaryDataHash>,
297    pub validity_interval_start: Option<u64>,
298    pub mint: Option<BabbageMint>,
299    pub script_data_hash: Option<ScriptDataHash>,
300    pub collateral_inputs: Option<Vec<TransactionInput>>,
301    pub required_signers: Option<RequiredSigners>,
302    pub network_id: Option<NetworkId>,
303    pub collateral_return: Option<BabbageTransactionOutput>,
304    pub total_collateral: Option<Coin>,
305    pub reference_inputs: Option<Vec<TransactionInput>>,
306    #[serde(skip)]
307    pub encodings: Option<BabbageTransactionBodyEncoding>,
308}
309
310impl BabbageTransactionBody {
311    pub fn new(
312        inputs: Vec<TransactionInput>,
313        outputs: Vec<BabbageTransactionOutput>,
314        fee: Coin,
315    ) -> Self {
316        Self {
317            inputs,
318            outputs,
319            fee,
320            ttl: None,
321            certs: None,
322            withdrawals: None,
323            update: None,
324            auxiliary_data_hash: None,
325            validity_interval_start: None,
326            mint: None,
327            script_data_hash: None,
328            collateral_inputs: None,
329            required_signers: None,
330            network_id: None,
331            collateral_return: None,
332            total_collateral: None,
333            reference_inputs: None,
334            encodings: None,
335        }
336    }
337}
338
339#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
340pub enum BabbageTransactionOutput {
341    AlonzoFormatTxOut(AlonzoFormatTxOut),
342    BabbageFormatTxOut(BabbageFormatTxOut),
343}
344
345impl BabbageTransactionOutput {
346    pub fn new_alonzo_format_tx_out(alonzo_format_tx_out: AlonzoFormatTxOut) -> Self {
347        Self::AlonzoFormatTxOut(alonzo_format_tx_out)
348    }
349
350    pub fn new_babbage_format_tx_out(babbage_format_tx_out: BabbageFormatTxOut) -> Self {
351        Self::BabbageFormatTxOut(babbage_format_tx_out)
352    }
353}
354
355#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
356pub struct BabbageTransactionWitnessSet {
357    pub vkeywitnesses: Option<Vec<Vkeywitness>>,
358    pub native_scripts: Option<Vec<NativeScript>>,
359    pub bootstrap_witnesses: Option<Vec<BootstrapWitness>>,
360    pub plutus_v1_scripts: Option<Vec<PlutusV1Script>>,
361    pub plutus_datums: Option<Vec<PlutusData>>,
362    pub redeemers: Option<Vec<AlonzoRedeemer>>,
363    pub plutus_v2_scripts: Option<Vec<PlutusV2Script>>,
364    #[serde(skip)]
365    pub encodings: Option<BabbageTransactionWitnessSetEncoding>,
366}
367
368impl BabbageTransactionWitnessSet {
369    pub fn new() -> Self {
370        Self {
371            vkeywitnesses: None,
372            native_scripts: None,
373            bootstrap_witnesses: None,
374            plutus_v1_scripts: None,
375            plutus_datums: None,
376            redeemers: None,
377            plutus_v2_scripts: None,
378            encodings: None,
379        }
380    }
381}
382
383impl Default for BabbageTransactionWitnessSet {
384    fn default() -> Self {
385        Self::new()
386    }
387}
388
389#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
390pub struct BabbageUpdate {
391    pub updates: BabbageProposedProtocolParameterUpdates,
392    pub epoch: Epoch,
393    #[serde(skip)]
394    pub encodings: Option<BabbageUpdateEncoding>,
395}
396
397impl BabbageUpdate {
398    pub fn new(updates: BabbageProposedProtocolParameterUpdates, epoch: Epoch) -> Self {
399        Self {
400            updates,
401            epoch,
402            encodings: None,
403        }
404    }
405}