Skip to main content

miden_usdcx/note/
costs.rs

1//! Benchmarked consumption costs for notes whose execution on the xUSDC faucet differs from the
2//! corresponding standard note.
3
4use miden_protocol::note::NoteScriptRoot;
5use miden_standards::note::P2idNote;
6use miden_standards::note::costs::{NoteConsumptionCost, NoteCost};
7
8use super::xreserve_admin::XReserveSetAttesterNote;
9use super::xreserve_burn::XReserveBurnNote;
10use super::xreserve_mint::XUsdcMintNote;
11
12/// Cycles of consuming an xUSDC MINT note: empty hook data 47309, maximum hook data 65787.
13pub const XUSDC_MINT_CONSUMPTION_CYCLES: u32 = 65787;
14
15/// Cycles of consuming an xUSDC BURN note.
16pub const XUSDC_BURN_CONSUMPTION_CYCLES: u32 = 35540;
17
18/// Cycles of consuming an xUSDC set-attester note: enable 30314, disable 30177.
19pub const XRESERVE_SET_ATTESTER_CONSUMPTION_CYCLES: u32 = 30314;
20
21impl NoteConsumptionCost for XUsdcMintNote {
22    fn consumption_cycles() -> u32 {
23        XUSDC_MINT_CONSUMPTION_CYCLES
24    }
25
26    fn created_notes() -> Vec<NoteScriptRoot> {
27        vec![P2idNote::script_root()]
28    }
29}
30
31impl NoteConsumptionCost for XReserveBurnNote {
32    fn consumption_cycles() -> u32 {
33        XUSDC_BURN_CONSUMPTION_CYCLES
34    }
35}
36
37impl NoteConsumptionCost for XReserveSetAttesterNote {
38    fn consumption_cycles() -> u32 {
39        XRESERVE_SET_ATTESTER_CONSUMPTION_CYCLES
40    }
41}
42
43/// Returns the xUSDC-specific costs keyed by script root.
44pub(crate) fn note_costs() -> [(NoteScriptRoot, NoteCost); 3] {
45    [
46        (XUsdcMintNote::script_root(), NoteCost::of::<XUsdcMintNote>()),
47        (XReserveBurnNote::script_root(), NoteCost::of::<XReserveBurnNote>()),
48        (
49            XReserveSetAttesterNote::script_root(),
50            NoteCost::of::<XReserveSetAttesterNote>(),
51        ),
52    ]
53}