ergo_lib_c_core/
parameters.rs

1//! Ergo blockchain state (for ErgoTree evaluation)
2
3use crate::util::mut_ptr_as_mut;
4use crate::Error;
5use ergo_lib::chain;
6
7/// Blockchain parameters
8#[derive(PartialEq, Eq, Debug, Clone)]
9pub struct Parameters(pub(crate) chain::parameters::Parameters);
10pub type ParametersPtr = *mut Parameters;
11pub type ConstParametersPtr = *const Parameters;
12
13/// Return default blockchain parameters that were set at genesis
14pub unsafe fn parameters_default(parameters_out: *mut ParametersPtr) {
15    *parameters_out = Box::into_raw(Box::new(Parameters(
16        chain::parameters::Parameters::default(),
17    )));
18}
19
20/// Create new parameters from provided blockchain parameters
21#[allow(clippy::too_many_arguments)]
22pub unsafe fn parameters_new(
23    block_version: i32,
24    storage_fee_factor: i32,
25    min_value_per_byte: i32,
26    max_block_size: i32,
27    max_block_cost: i32,
28    token_access_cost: i32,
29    input_cost: i32,
30    data_input_cost: i32,
31    output_cost: i32,
32    parameters_out: *mut ParametersPtr,
33) -> Result<(), Error> {
34    let parameters_out = mut_ptr_as_mut(parameters_out, "parameters_out")?;
35    let parameters = chain::parameters::Parameters::new(
36        block_version,
37        storage_fee_factor,
38        min_value_per_byte,
39        max_block_size,
40        max_block_cost,
41        token_access_cost,
42        input_cost,
43        data_input_cost,
44        output_cost,
45    );
46    *parameters_out = Box::into_raw(Box::new(Parameters(parameters)));
47    Ok(())
48}
49
50/// Parse parameters from JSON. Supports Ergo Node API/Explorer API
51pub unsafe fn parameters_from_json(
52    json: &str,
53    parameters_out: *mut ParametersPtr,
54) -> Result<(), Error> {
55    let parameters_out = mut_ptr_as_mut(parameters_out, "parameters_out")?;
56    let parameters = serde_json::from_str(json).map(Parameters)?;
57    *parameters_out = Box::into_raw(Box::new(parameters));
58    Ok(())
59}
60
61pub unsafe fn parameters_delete(parameters: ParametersPtr) {
62    if !parameters.is_null() {
63        let boxed = Box::from_raw(parameters);
64        std::mem::drop(boxed);
65    }
66}