Skip to content

Commit

Permalink
New Conway.cddl updates (#324)
Browse files Browse the repository at this point in the history
* New Conway.cddl updates (cml-chain/cml-chain-wasm)

Includes:
* IntersectMBO/cardano-ledger#4003
* IntersectMBO/cardano-ledger#4178
* IntersectMBO/cardano-ledger#4055
* IntersectMBO/cardano-ledger#4117
* IntersectMBO/cardano-ledger#4040

TODO:

[ ] need to check how this affects the script data hash and test that
[ ] multi-era

* conway multi-era update + various fixes

* resolve merge conflict

* use conway costmodels for all eras (babbage costmdls found in alonzo on sancho testnet)

* IntoIter for NonemptySet<T>
  • Loading branch information
rooooooooob committed May 1, 2024
1 parent be26949 commit e34780f
Show file tree
Hide file tree
Showing 83 changed files with 4,524 additions and 2,890 deletions.
4 changes: 3 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ members = [
# exclude old crate structure to avoid error in it
exclude = [
"rust",
"rust/json-gen"
"rust/json-gen",
"tools/metadata-cddl-checker",
"tools/plutus-datum-codegen"
]

[profile.release]
Expand Down
14 changes: 7 additions & 7 deletions chain/rust/src/block/serialization.rs
Original file line number Diff line number Diff line change
Expand Up @@ -391,13 +391,13 @@ impl Deserialize for HeaderBody {
(|| -> Result<_, DeserializeError> {
let (block_number, block_number_encoding) = raw
.unsigned_integer_sz()
.map(|(x, enc)| (x, Some(enc)))
.map_err(Into::<DeserializeError>::into)
.map(|(x, enc)| (x, Some(enc)))
.map_err(|e: DeserializeError| e.annotate("block_number"))?;
let (slot, slot_encoding) = raw
.unsigned_integer_sz()
.map(|(x, enc)| (x, Some(enc)))
.map_err(Into::<DeserializeError>::into)
.map(|(x, enc)| (x, Some(enc)))
.map_err(|e: DeserializeError| e.annotate("slot"))?;
let (prev_hash, prev_hash_encoding) = (|| -> Result<_, DeserializeError> {
Ok(match raw.cbor_type()? != cbor_event::Type::Special {
Expand Down Expand Up @@ -444,8 +444,8 @@ impl Deserialize for HeaderBody {
.map_err(|e: DeserializeError| e.annotate("vrf_result"))?;
let (block_body_size, block_body_size_encoding) = raw
.unsigned_integer_sz()
.map(|(x, enc)| (x, Some(enc)))
.map_err(Into::<DeserializeError>::into)
.map(|(x, enc)| (x, Some(enc)))
.map_err(|e: DeserializeError| e.annotate("block_body_size"))?;
let (block_body_hash, block_body_hash_encoding) = raw
.bytes_sz()
Expand Down Expand Up @@ -600,13 +600,13 @@ impl DeserializeEmbeddedGroup for OperationalCert {
.map_err(|e: DeserializeError| e.annotate("hot_vkey"))?;
let (sequence_number, sequence_number_encoding) = raw
.unsigned_integer_sz()
.map(|(x, enc)| (x, Some(enc)))
.map_err(Into::<DeserializeError>::into)
.map(|(x, enc)| (x, Some(enc)))
.map_err(|e: DeserializeError| e.annotate("sequence_number"))?;
let (kes_period, kes_period_encoding) = raw
.unsigned_integer_sz()
.map(|(x, enc)| (x, Some(enc)))
.map_err(Into::<DeserializeError>::into)
.map(|(x, enc)| (x, Some(enc)))
.map_err(|e: DeserializeError| e.annotate("kes_period"))?;
let (sigma, sigma_encoding) = raw
.bytes_sz()
Expand Down Expand Up @@ -716,13 +716,13 @@ impl DeserializeEmbeddedGroup for ProtocolVersion {
(|| -> Result<_, DeserializeError> {
let (major, major_encoding) = raw
.unsigned_integer_sz()
.map(|(x, enc)| (x, Some(enc)))
.map_err(Into::<DeserializeError>::into)
.map(|(x, enc)| (x, Some(enc)))
.map_err(|e: DeserializeError| e.annotate("major"))?;
let (minor, minor_encoding) = raw
.unsigned_integer_sz()
.map(|(x, enc)| (x, Some(enc)))
.map_err(Into::<DeserializeError>::into)
.map(|(x, enc)| (x, Some(enc)))
.map_err(|e: DeserializeError| e.annotate("minor"))?;
Ok(ProtocolVersion {
major,
Expand Down
6 changes: 3 additions & 3 deletions chain/rust/src/builders/certificate_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use super::witness_builder::{NativeScriptWitnessInfo, RequiredWitnessSet};

use crate::{
certs::{Certificate, StakeCredential},
transaction::RequiredSigners,
RequiredSigners,
};

use cml_crypto::{Ed25519KeyHash, ScriptHash};
Expand Down Expand Up @@ -35,7 +35,7 @@ pub fn cert_required_wits(cert: &Certificate, required_witnesses: &mut RequiredW
required_witnesses.add_from_credential(cert.stake_credential.clone());
}
Certificate::PoolRegistration(cert) => {
for owner in &cert.pool_params.pool_owners {
for owner in cert.pool_params.pool_owners.as_ref() {
required_witnesses.add_vkey_key_hash(*owner);
}
required_witnesses.add_vkey_key_hash(cert.pool_params.operator);
Expand Down Expand Up @@ -108,7 +108,7 @@ pub fn add_cert_vkeys(
}
},
Certificate::PoolRegistration(cert) => {
for owner in &cert.pool_params.pool_owners {
for owner in cert.pool_params.pool_owners.as_ref() {
vkeys.insert(*owner);
}
vkeys.insert(cert.pool_params.operator);
Expand Down
5 changes: 3 additions & 2 deletions chain/rust/src/builders/input_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ use crate::{
certs::StakeCredential,
crypto::hash::hash_plutus_data,
plutus::PlutusData,
transaction::{RequiredSigners, TransactionInput, TransactionOutput},
NativeScript,
transaction::{TransactionInput, TransactionOutput},
NativeScript, RequiredSigners,
};

#[derive(Debug, thiserror::Error)]
Expand Down Expand Up @@ -140,6 +140,7 @@ impl SingleInputBuilder {
) -> Result<InputBuilderResult, InputBuilderError> {
let mut required_wits = RequiredWitnessSet::default();
required_signers
.as_ref()
.iter()
.for_each(|required_signer| required_wits.add_vkey_key_hash(*required_signer));
input_required_wits(&self.utxo_info, &mut required_wits);
Expand Down
2 changes: 1 addition & 1 deletion chain/rust/src/builders/mint_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use super::witness_builder::{NativeScriptWitnessInfo, RequiredWitnessSet};

use cml_core::ordered_hash_map::OrderedHashMap;

use crate::{assets::AssetName, transaction::RequiredSigners, NativeScript, PolicyId};
use crate::{assets::AssetName, NativeScript, PolicyId, RequiredSigners};

#[derive(Clone)]
pub struct MintBuilderResult {
Expand Down
31 changes: 17 additions & 14 deletions chain/rust/src/builders/redeemer_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use super::{
};
use crate::{
address::RewardAddress,
plutus::{ExUnits, PlutusData, Redeemer, RedeemerTag},
plutus::{ExUnits, LegacyRedeemer, PlutusData, RedeemerTag, Redeemers},
transaction::TransactionInput,
PolicyId,
};
Expand All @@ -22,16 +22,16 @@ impl RedeemerWitnessKey {
}
}

impl From<&Redeemer> for RedeemerWitnessKey {
fn from(redeemer: &Redeemer) -> Self {
impl From<&LegacyRedeemer> for RedeemerWitnessKey {
fn from(redeemer: &LegacyRedeemer) -> Self {
Self {
tag: redeemer.tag,
index: redeemer.index,
}
}
}

/// Redeemer without the tag of index
/// LegacyRedeemer without the tag of index
/// This allows builder code to return partial redeemers
/// and then later have them placed in the right context
#[derive(Clone, Debug)]
Expand Down Expand Up @@ -142,6 +142,12 @@ impl RedeemerSetBuilder {
ex_units,
)));
}
RedeemerTag::Proposing => {
todo!("https://github.com/dcSpark/cardano-multiplatform-lib/issues/323")
}
RedeemerTag::Voting => {
todo!("https://github.com/dcSpark/cardano-multiplatform-lib/issues/323")
}
}
}

Expand Down Expand Up @@ -211,10 +217,7 @@ impl RedeemerSetBuilder {
}
}

pub fn build(
&self,
default_to_dummy_exunits: bool,
) -> Result<Vec<Redeemer>, RedeemerBuilderError> {
pub fn build(&self, default_to_dummy_exunits: bool) -> Result<Redeemers, RedeemerBuilderError> {
let mut redeemers = Vec::new();
// Calling iter on a BTreeMap returns a list of sorted keys
self.remove_placeholders_and_tag(
Expand Down Expand Up @@ -242,12 +245,12 @@ impl RedeemerSetBuilder {
default_to_dummy_exunits,
)?;

Ok(redeemers)
Ok(Redeemers::new_arr_legacy_redeemer(redeemers))
}

fn remove_placeholders_and_tag<'a, K: Debug + Clone>(
&self,
redeemers: &mut Vec<Redeemer>,
redeemers: &mut Vec<LegacyRedeemer>,
tag: RedeemerTag,
entries: &mut dyn Iterator<Item = (&'a K, &'a Option<UntaggedRedeemerPlaceholder>)>,
default_to_dummy_exunits: bool,
Expand Down Expand Up @@ -280,12 +283,12 @@ impl RedeemerSetBuilder {
fn tag_redeemer(
tag: RedeemerTag,
untagged_redeemers: &[Option<UntaggedRedeemer>],
) -> Vec<Redeemer> {
) -> Vec<LegacyRedeemer> {
let mut result = Vec::new();

for (index, untagged_redeemer) in untagged_redeemers.iter().enumerate() {
if let Some(untagged_redeemer) = untagged_redeemer {
result.push(Redeemer::new(
result.push(LegacyRedeemer::new(
tag,
index as u64,
untagged_redeemer.data.clone(),
Expand Down Expand Up @@ -334,7 +337,7 @@ mod tests {
}
};
let missing_signers = vec![fake_raw_key_public(0).hash()];
InputAggregateWitnessData::PlutusScript(witness, missing_signers, None)
InputAggregateWitnessData::PlutusScript(witness, missing_signers.into(), None)
};

let address = Address::from_bech32("addr1qxeqxcja25k8q05evyngf4f88xn89asl54x2zg3ephgj26ndyt5qk02xmmras5pe9jz2c7tc93wu4c96rqwvg6e2v50qlpmx70").unwrap();
Expand Down Expand Up @@ -371,7 +374,7 @@ mod tests {
ExUnits::new(10, 10),
);

let redeemers = builder.build(false).unwrap();
let redeemers = builder.build(false).unwrap().to_flat_format();

assert_eq!(redeemers.len(), 1);

Expand Down
Loading

0 comments on commit e34780f

Please sign in to comment.