Skip to content

Commit

Permalink
versioned generic data naming
Browse files Browse the repository at this point in the history
  • Loading branch information
kpinter-iohk committed Jan 24, 2025
1 parent 9172bdd commit c88b9f3
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 44 deletions.
6 changes: 3 additions & 3 deletions toolkit/offchain/src/reserve/handover.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ use super::{reserve_utxo_input_with_validator_script_reference, ReserveUtxo, Tok
use crate::{
await_tx::AwaitTx,
csl::{
get_builder_config, AssetIdExt, CostStore, Costs, OgmiosUtxoExt, TransactionBuilderExt,
TransactionContext, TransactionOutputAmountBuilderExt,
get_builder_config, unit_plutus_data, AssetIdExt, CostStore, Costs, OgmiosUtxoExt,
TransactionBuilderExt, TransactionContext, TransactionOutputAmountBuilderExt,
},
init_governance::{get_governance_data, GovernanceData},
reserve::ReserveData,
Expand Down Expand Up @@ -148,5 +148,5 @@ fn illiquid_supply_validator_output(
}

fn illiquid_supply_validator_redeemer() -> PlutusData {
PlutusData::new_empty_constr_plutus_data(&BigNum::zero())
unit_plutus_data()
}
12 changes: 6 additions & 6 deletions toolkit/primitives/plutus-data/src/d_param.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ pub fn d_parameter_to_plutus_data(d_param: &sidechain_domain::DParameter) -> Plu
let mut list = PlutusList::new();
list.add(&PlutusData::new_integer(&d_param.num_permissioned_candidates.into()));
list.add(&PlutusData::new_integer(&d_param.num_registered_candidates.into()));
let generic_data = PlutusData::new_list(&list);
let appendix = PlutusData::new_list(&list);
VersionedGenericDatum {
datum: PlutusData::new_empty_constr_plutus_data(&0u64.into()),
generic_data,
appendix,
version: 0,
}
.into()
Expand All @@ -60,12 +60,12 @@ impl VersionedDatumWithLegacy for DParamDatum {

fn decode_versioned(
version: u64,
_const_data: &PlutusData,
mut_data: &PlutusData,
_datum: &PlutusData,
appendix: &PlutusData,
) -> Result<Self, String> {
match version {
0 => DParamDatum::decode_legacy(mut_data)
.map_err(|msg| format!("Can not parse mutable part of data: {msg}")),
0 => DParamDatum::decode_legacy(appendix)
.map_err(|msg| format!("Cannot parse appendix: {msg}")),
_ => Err(format!("Unknown version: {version}")),
}
}
Expand Down
22 changes: 11 additions & 11 deletions toolkit/primitives/plutus-data/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ impl PlutusDataExtensions for cardano_serialization_lib::PlutusData {
/// Trait that provides decoding of versioned generic plutus data.
///
/// Versioned generic plutus data contain a version number and two data sections:
/// - immutable section - the data with stable schema, read and validated by smart contracts
/// - mutable section - generic data with evolving schema indicated by the version number, not used by smart contracts
/// - datum - the data with stable schema, read and validated by smart contracts
/// - appendix - generic data with evolving schema indicated by the version number, not used by smart contracts
///
/// The corresponding definition in the smart contracts repo is:
/// ```haskell
Expand Down Expand Up @@ -68,12 +68,12 @@ pub(crate) trait VersionedDatumWithLegacy: Sized {
///
/// Parameters:
/// * `version` - version number
/// * `const_data` - immutable part of the schema
/// * `mut_data` - mutable part of the schema
/// * `datum` - datum with schema specified by smart-contract
/// * `appendix` - generic data ignored by smart-contract logic, schema is version dependent
fn decode_versioned(
version: u64,
const_data: &PlutusData,
mut_data: &PlutusData,
datum: &PlutusData,
appendix: &PlutusData,
) -> Result<Self, String>;
}

Expand All @@ -83,8 +83,8 @@ impl<T: VersionedDatumWithLegacy> VersionedDatum for T {
fn decode(data: &PlutusData) -> DecodingResult<Self> {
(match plutus_data_version_and_payload(data) {
None => Self::decode_legacy(data),
Some(VersionedGenericDatum { datum, generic_data, version }) => {
Self::decode_versioned(version, &datum, &generic_data)
Some(VersionedGenericDatum { datum, appendix, version }) => {
Self::decode_versioned(version, &datum, &appendix)
},
})
.map_err(|msg| decoding_error_and_log(data, Self::NAME, &msg))
Expand All @@ -96,7 +96,7 @@ fn plutus_data_version_and_payload(data: &PlutusData) -> Option<VersionedGeneric

Some(VersionedGenericDatum {
datum: fields.get(0),
generic_data: fields.get(1),
appendix: fields.get(1),
version: fields.get(2).as_u64()?,
})
}
Expand All @@ -111,15 +111,15 @@ fn decoding_error_and_log(data: &PlutusData, to: &str, msg: &str) -> DataDecodin
/// datum types.
pub(crate) struct VersionedGenericDatum {
pub datum: PlutusData,
pub generic_data: PlutusData,
pub appendix: PlutusData,
pub version: u64,
}

impl From<VersionedGenericDatum> for PlutusData {
fn from(value: VersionedGenericDatum) -> Self {
let mut list = PlutusList::new();
list.add(&value.datum);
list.add(&value.generic_data);
list.add(&value.appendix);
list.add(&PlutusData::new_integer(&value.version.into()));
PlutusData::new_list(&list)
}
Expand Down
12 changes: 6 additions & 6 deletions toolkit/primitives/plutus-data/src/permissioned_candidates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,10 @@ pub fn permissioned_candidates_to_plutus_data(
candidate_datum.add(&PlutusData::new_bytes(candidate.grandpa_public_key.0.clone()));
list.add(&PlutusData::new_list(&candidate_datum));
}
let generic_data = PlutusData::new_list(&list);
let appendix = PlutusData::new_list(&list);
VersionedGenericDatum {
datum: PlutusData::new_empty_constr_plutus_data(&BigNum::zero()),
generic_data,
appendix,
version: 0,
}
.into()
Expand All @@ -84,12 +84,12 @@ impl VersionedDatumWithLegacy for PermissionedCandidateDatums {

fn decode_versioned(
version: u64,
_const_data: &PlutusData,
mut_data: &PlutusData,
_datum: &PlutusData,
appendix: &PlutusData,
) -> Result<Self, String> {
match version {
0 => PermissionedCandidateDatums::decode_legacy(mut_data)
.map_err(|msg| format!("Can not parse mutable part of data: {msg}")),
0 => PermissionedCandidateDatums::decode_legacy(appendix)
.map_err(|msg| format!("Cannot parse appendix: {msg}")),
_ => Err(format!("Unknown version: {version}")),
}
}
Expand Down
34 changes: 17 additions & 17 deletions toolkit/primitives/plutus-data/src/registered_candidates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,12 @@ impl VersionedDatumWithLegacy for RegisterValidatorDatum {

fn decode_versioned(
version: u64,
const_data: &PlutusData,
mut_data: &PlutusData,
datum: &PlutusData,
appendix: &PlutusData,
) -> Result<Self, String> {
match version {
0 => decode_v0_register_validator_datum(const_data, mut_data)
.ok_or("Can not parse mutable part of data".to_string()),
0 => decode_v0_register_validator_datum(datum, appendix)
.ok_or("Can not parse appendix".to_string()),
_ => Err(format!("Unknown version: {version}")),
}
}
Expand Down Expand Up @@ -117,10 +117,10 @@ impl From<RegisterValidatorDatum> for CandidateRegistration {
}

fn decode_v0_register_validator_datum(
const_data: &PlutusData,
mut_data: &PlutusData,
datum: &PlutusData,
appendix: &PlutusData,
) -> Option<RegisterValidatorDatum> {
let fields = mut_data
let fields = appendix
.as_constr_plutus_data()
.filter(|datum| datum.alternative().is_zero())
.filter(|datum| datum.data().len() >= 6)?
Expand All @@ -132,7 +132,7 @@ fn decode_v0_register_validator_datum(
let aura_pub_key = fields.get(4).as_bytes().map(AuraPublicKey)?;
let grandpa_pub_key = fields.get(5).as_bytes().map(GrandpaPublicKey)?;

let own_pkh = MainchainAddressHash(const_data.as_bytes()?.try_into().ok()?);
let own_pkh = MainchainAddressHash(datum.as_bytes()?.try_into().ok()?);
Some(RegisterValidatorDatum::V0 {
stake_ownership,
sidechain_pub_key,
Expand Down Expand Up @@ -212,17 +212,17 @@ impl From<RegisterValidatorDatum> for PlutusData {
aura_pub_key,
grandpa_pub_key,
} => {
let mut generic_data_fields = PlutusList::new();
generic_data_fields.add(&stake_ownership_to_plutus_data(stake_ownership));
generic_data_fields.add(&PlutusData::new_bytes(sidechain_pub_key.0));
generic_data_fields.add(&PlutusData::new_bytes(sidechain_signature.0));
generic_data_fields.add(&utxo_id_to_plutus_data(registration_utxo));
generic_data_fields.add(&PlutusData::new_bytes(aura_pub_key.0));
generic_data_fields.add(&PlutusData::new_bytes(grandpa_pub_key.0));
let generic_data = ConstrPlutusData::new(&BigNum::zero(), &generic_data_fields);
let mut appendix_fields = PlutusList::new();
appendix_fields.add(&stake_ownership_to_plutus_data(stake_ownership));
appendix_fields.add(&PlutusData::new_bytes(sidechain_pub_key.0));
appendix_fields.add(&PlutusData::new_bytes(sidechain_signature.0));
appendix_fields.add(&utxo_id_to_plutus_data(registration_utxo));
appendix_fields.add(&PlutusData::new_bytes(aura_pub_key.0));
appendix_fields.add(&PlutusData::new_bytes(grandpa_pub_key.0));
let appendix = ConstrPlutusData::new(&BigNum::zero(), &appendix_fields);
VersionedGenericDatum {
datum: PlutusData::new_bytes(own_pkh.0.to_vec()),
generic_data: PlutusData::new_constr_plutus_data(&generic_data),
appendix: PlutusData::new_constr_plutus_data(&appendix),
version: 0,
}
.into()
Expand Down
2 changes: 1 addition & 1 deletion toolkit/primitives/plutus-data/src/reserve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ impl From<ReserveDatum> for PlutusData {
PlutusData::new_list(&datum)
},
// this empty constructor below is Plutus encoding of `()`
generic_data: PlutusData::new_empty_constr_plutus_data(&BigNum::zero()),
appendix: PlutusData::new_empty_constr_plutus_data(&BigNum::zero()),
version: 0,
}
.into()
Expand Down

0 comments on commit c88b9f3

Please sign in to comment.