From 3bb5826b918d75f1b8bde25bb6eddba3e9e5e0c9 Mon Sep 17 00:00:00 2001 From: Kasey White Date: Fri, 23 Sep 2022 18:34:24 -0400 Subject: [PATCH 1/2] change how mint gets converted to plutus data --- crates/uplc/src/tx/eval.rs | 8 ++++---- crates/uplc/src/tx/script_context.rs | 6 ++++-- crates/uplc/src/tx/to_plutus_data.rs | 26 +++++++++++++++++++++++++- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/crates/uplc/src/tx/eval.rs b/crates/uplc/src/tx/eval.rs index c1f8dc0c..9767a986 100644 --- a/crates/uplc/src/tx/eval.rs +++ b/crates/uplc/src/tx/eval.rs @@ -1,5 +1,5 @@ use crate::{ - ast::{FakeNamedDeBruijn, NamedDeBruijn, Program}, + ast::{DeBruijn, FakeNamedDeBruijn, NamedDeBruijn, Program}, machine::cost_model::ExBudget, PlutusData, }; @@ -19,7 +19,7 @@ use super::{ ResolvedInput, ScriptContext, ScriptPurpose, SlotConfig, TimeRange, TxInInfo, TxInfo, TxInfoV1, TxInfoV2, TxOut, }, - to_plutus_data::ToPlutusData, + to_plutus_data::{MintValue, ToPlutusData}, Error, }; @@ -286,7 +286,7 @@ fn get_tx_info_v1( inputs, outputs, fee, - mint, + mint: MintValue { mint_value: mint }, dcert, wdrl, valid_range, @@ -363,7 +363,7 @@ fn get_tx_info_v2( reference_inputs, outputs, fee, - mint, + mint: MintValue { mint_value: mint }, dcert, wdrl, valid_range, diff --git a/crates/uplc/src/tx/script_context.rs b/crates/uplc/src/tx/script_context.rs index 2ae643b9..f865d241 100644 --- a/crates/uplc/src/tx/script_context.rs +++ b/crates/uplc/src/tx/script_context.rs @@ -6,6 +6,8 @@ use pallas_primitives::babbage::{ }; use serde::Deserialize; +use super::to_plutus_data::MintValue; + #[derive(Debug, PartialEq, Clone, Deserialize)] pub struct ResolvedInput { pub input: TransactionInput, @@ -36,7 +38,7 @@ pub struct TxInfoV1 { pub inputs: Vec, pub outputs: Vec, pub fee: Value, - pub mint: Mint, + pub mint: MintValue, pub dcert: Vec, pub wdrl: Vec<(RewardAccount, Coin)>, pub valid_range: TimeRange, @@ -51,7 +53,7 @@ pub struct TxInfoV2 { pub reference_inputs: Vec, pub outputs: Vec, pub fee: Value, - pub mint: Mint, + pub mint: MintValue, pub dcert: Vec, pub wdrl: Withdrawals, pub valid_range: TimeRange, diff --git a/crates/uplc/src/tx/to_plutus_data.rs b/crates/uplc/src/tx/to_plutus_data.rs index 7747509e..305dfedc 100644 --- a/crates/uplc/src/tx/to_plutus_data.rs +++ b/crates/uplc/src/tx/to_plutus_data.rs @@ -1,7 +1,7 @@ use pallas_addresses::{Address, ShelleyDelegationPart, ShelleyPaymentPart}; use pallas_codec::utils::{AnyUInt, Bytes, Int, KeyValuePairs}; use pallas_crypto::hash::Hash; -use pallas_primitives::babbage::{AssetName, BigInt, Constr, PlutusData, ScriptRef}; +use pallas_primitives::babbage::{AssetName, BigInt, Constr, Mint, PlutusData, ScriptRef}; use pallas_primitives::babbage::{ Certificate, DatumOption, PolicyId, Redeemer, Script, StakeCredential, TransactionInput, TransactionOutput, Value, @@ -43,6 +43,11 @@ pub trait ToPlutusData { fn to_plutus_data(&self) -> PlutusData; } +#[derive(Debug, PartialEq, Clone)] +pub struct MintValue { + pub mint_value: Mint, +} + impl ToPlutusData for Address { fn to_plutus_data(&self) -> PlutusData { match self { @@ -233,6 +238,25 @@ impl ToPlutusData for Value { } } +impl ToPlutusData for MintValue { + fn to_plutus_data(&self) -> PlutusData { + let mut data_vec: Vec<(PlutusData, PlutusData)> = vec![]; + + for (policy_id, assets) in self.mint_value.iter() { + let mut assets_vec = vec![]; + for (asset, amount) in assets.iter() { + assets_vec.push((asset.to_plutus_data(), amount.to_plutus_data())); + } + data_vec.push(( + policy_id.to_plutus_data(), + PlutusData::Map(KeyValuePairs::Def(assets_vec)), + )); + } + + PlutusData::Map(KeyValuePairs::Def(data_vec)) + } +} + impl ToPlutusData for ScriptRef { fn to_plutus_data(&self) -> PlutusData { match &self.0 { From ca2d8f0a1fefe107ed742ace2f7c9870bff37162 Mon Sep 17 00:00:00 2001 From: Kasey White Date: Sat, 24 Sep 2022 15:47:51 -0400 Subject: [PATCH 2/2] ada policy is now empty and mintValue includes 0 ada --- crates/uplc/src/tx/eval.rs | 2 +- crates/uplc/src/tx/script_context.rs | 2 +- crates/uplc/src/tx/to_plutus_data.rs | 14 ++++++++++---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/crates/uplc/src/tx/eval.rs b/crates/uplc/src/tx/eval.rs index 9767a986..253dc538 100644 --- a/crates/uplc/src/tx/eval.rs +++ b/crates/uplc/src/tx/eval.rs @@ -1,5 +1,5 @@ use crate::{ - ast::{DeBruijn, FakeNamedDeBruijn, NamedDeBruijn, Program}, + ast::{FakeNamedDeBruijn, NamedDeBruijn, Program}, machine::cost_model::ExBudget, PlutusData, }; diff --git a/crates/uplc/src/tx/script_context.rs b/crates/uplc/src/tx/script_context.rs index f865d241..f762e441 100644 --- a/crates/uplc/src/tx/script_context.rs +++ b/crates/uplc/src/tx/script_context.rs @@ -1,7 +1,7 @@ use pallas_codec::utils::KeyValuePairs; use pallas_crypto::hash::Hash; use pallas_primitives::babbage::{ - AddrKeyhash, Certificate, Coin, DatumHash, Mint, PlutusData, PolicyId, Redeemer, RewardAccount, + AddrKeyhash, Certificate, Coin, DatumHash, PlutusData, PolicyId, Redeemer, RewardAccount, StakeCredential, TransactionInput, TransactionOutput, Value, Withdrawals, }; use serde::Deserialize; diff --git a/crates/uplc/src/tx/to_plutus_data.rs b/crates/uplc/src/tx/to_plutus_data.rs index 305dfedc..a68b504f 100644 --- a/crates/uplc/src/tx/to_plutus_data.rs +++ b/crates/uplc/src/tx/to_plutus_data.rs @@ -3,7 +3,7 @@ use pallas_codec::utils::{AnyUInt, Bytes, Int, KeyValuePairs}; use pallas_crypto::hash::Hash; use pallas_primitives::babbage::{AssetName, BigInt, Constr, Mint, PlutusData, ScriptRef}; use pallas_primitives::babbage::{ - Certificate, DatumOption, PolicyId, Redeemer, Script, StakeCredential, TransactionInput, + Certificate, DatumOption, Redeemer, Script, StakeCredential, TransactionInput, TransactionOutput, Value, }; use pallas_traverse::ComputeHash; @@ -206,7 +206,7 @@ impl ToPlutusData for Value { fn to_plutus_data(&self) -> PlutusData { match self { Value::Coin(coin) => PlutusData::Map(KeyValuePairs::Def(vec![( - PolicyId::from([0; 28]).to_plutus_data(), + Bytes::from(vec![]).to_plutus_data(), PlutusData::Map(KeyValuePairs::Def(vec![( AssetName::from(vec![]).to_plutus_data(), coin.to_plutus_data(), @@ -214,7 +214,7 @@ impl ToPlutusData for Value { )])), Value::Multiasset(coin, multiassets) => { let mut data_vec: Vec<(PlutusData, PlutusData)> = vec![( - PolicyId::from([0; 28]).to_plutus_data(), + Bytes::from(vec![]).to_plutus_data(), PlutusData::Map(KeyValuePairs::Def(vec![( AssetName::from(vec![]).to_plutus_data(), coin.to_plutus_data(), @@ -240,7 +240,13 @@ impl ToPlutusData for Value { impl ToPlutusData for MintValue { fn to_plutus_data(&self) -> PlutusData { - let mut data_vec: Vec<(PlutusData, PlutusData)> = vec![]; + let mut data_vec: Vec<(PlutusData, PlutusData)> = vec![( + Bytes::from(vec![]).to_plutus_data(), + PlutusData::Map(KeyValuePairs::Def(vec![( + AssetName::from(vec![]).to_plutus_data(), + 0_i64.to_plutus_data(), + )])), + )]; for (policy_id, assets) in self.mint_value.iter() { let mut assets_vec = vec![];