feat: add plutus version to aiken.toml

relates to #907
This commit is contained in:
rvcas
2024-05-21 17:01:09 -04:00
parent 4ca73c4cdf
commit 3bc3792aa3
14 changed files with 366 additions and 81 deletions

View File

@@ -15,7 +15,7 @@ use pallas::ledger::{
addresses::{Network, ShelleyAddress, ShelleyDelegationPart, ShelleyPaymentPart},
primitives::{
alonzo::{self, Constr, PlutusData},
babbage::{self, Language},
conway::{self, Language},
},
traverse::ComputeHash,
};
@@ -118,7 +118,7 @@ impl Serialize for Program<DeBruijn> {
let cbor = self.to_cbor().unwrap();
let mut s = serializer.serialize_struct("Program<DeBruijn>", 2)?;
s.serialize_field("compiledCode", &hex::encode(&cbor))?;
s.serialize_field("hash", &babbage::PlutusV2Script(cbor.into()).compute_hash())?;
s.serialize_field("hash", &conway::PlutusV2Script(cbor.into()).compute_hash())?;
s.end()
}
}
@@ -749,14 +749,9 @@ impl Program<NamedDeBruijn> {
EvalResult::new(term, machine.ex_budget, initial_budget, machine.logs)
}
/// Evaluate a Program as PlutusV1
pub fn eval_version(self, version: &Language) -> EvalResult {
let mut machine = Machine::new(
version.clone(),
CostModel::default(),
ExBudget::default(),
200,
);
/// Evaluate a Program as a specific PlutusVersion
pub fn eval_version(self, initial_budget: ExBudget, version: &Language) -> EvalResult {
let mut machine = Machine::new(version.clone(), CostModel::default(), initial_budget, 200);
let term = machine.run(self.term);

View File

@@ -11,7 +11,7 @@ pub mod value;
use cost_model::{ExBudget, StepKind};
pub use error::Error;
use pallas::ledger::primitives::babbage::Language;
use pallas::ledger::primitives::conway::Language;
use self::{
cost_model::CostModel,

View File

@@ -1,6 +1,6 @@
use std::collections::HashMap;
use pallas::ledger::primitives::babbage::Language;
use pallas::ledger::primitives::conway::Language;
use crate::builtins::DefaultFunction;
@@ -2188,7 +2188,187 @@ pub fn initialize_cost_model(version: &Language, costs: &[i64]) -> CostModel {
"verify_schnorr_secp256k1_signature-mem-arguments"=> costs[174]
}
}
Language::PlutusV3 => {
hashmap! {
"add_integer-cpu-arguments-intercept"=> costs[0],
"add_integer-cpu-arguments-slope"=> costs[1],
"add_integer-mem-arguments-intercept"=> costs[2],
"add_integer-mem-arguments-slope"=> costs[3],
"append_byte_string-cpu-arguments-intercept"=> costs[4],
"append_byte_string-cpu-arguments-slope"=> costs[5],
"append_byte_string-mem-arguments-intercept"=> costs[6],
"append_byte_string-mem-arguments-slope"=> costs[7],
"append_string-cpu-arguments-intercept"=> costs[8],
"append_string-cpu-arguments-slope"=> costs[9],
"append_string-mem-arguments-intercept"=> costs[10],
"append_string-mem-arguments-slope"=> costs[11],
"b_data-cpu-arguments"=> costs[12],
"b_data-mem-arguments"=> costs[13],
"blake2b_256-cpu-arguments-intercept"=> costs[14],
"blake2b_256-cpu-arguments-slope"=> costs[15],
"blake2b_256-mem-arguments"=> costs[16],
"cek_apply_cost-exBudgetCPU"=> costs[17],
"cek_apply_cost-exBudgetmem"=> costs[18],
"cek_builtin_cost-exBudgetCPU"=> costs[19],
"cek_builtin_cost-exBudgetmem"=> costs[20],
"cek_const_cost-exBudgetCPU"=> costs[21],
"cek_const_cost-exBudgetmem"=> costs[22],
"cek_delay_cost-exBudgetCPU"=> costs[23],
"cek_delay_cost-exBudgetmem"=> costs[24],
"cek_force_cost-exBudgetCPU"=> costs[25],
"cek_force_cost-exBudgetmem"=> costs[26],
"cek_lam_cost-exBudgetCPU"=> costs[27],
"cek_lam_cost-exBudgetmem"=> costs[28],
"cek_startup_cost-exBudgetCPU"=> costs[29],
"cek_startup_cost-exBudgetmem"=> costs[30],
"cek_var_cost-exBudgetCPU"=> costs[31],
"cek_var_cost-exBudgetmem"=> costs[32],
"choose_data-cpu-arguments"=> costs[33],
"choose_data-mem-arguments"=> costs[34],
"choose_list-cpu-arguments"=> costs[35],
"choose_list-mem-arguments"=> costs[36],
"choose_unit-cpu-arguments"=> costs[37],
"choose_unit-mem-arguments"=> costs[38],
"cons_byte_string-cpu-arguments-intercept"=> costs[39],
"cons_byte_string-cpu-arguments-slope"=> costs[40],
"cons_byte_string-mem-arguments-intercept"=> costs[41],
"cons_byte_string-mem-arguments-slope"=> costs[42],
"constr_data-cpu-arguments"=> costs[43],
"constr_data-mem-arguments"=> costs[44],
"decode_utf8-cpu-arguments-intercept"=> costs[45],
"decode_utf8-cpu-arguments-slope"=> costs[46],
"decode_utf8-mem-arguments-intercept"=> costs[47],
"decode_utf8-mem-arguments-slope"=> costs[48],
"divide_integer-cpu-arguments-constant"=> costs[49],
"divide_integer-cpu-arguments-model-arguments-intercept"=> costs[50],
"divide_integer-cpu-arguments-model-arguments-slope"=> costs[51],
"divide_integer-mem-arguments-intercept"=> costs[52],
"divide_integer-mem-arguments-minimum"=> costs[53],
"divide_integer-mem-arguments-slope"=> costs[54],
"encode_utf8-cpu-arguments-intercept"=> costs[55],
"encode_utf8-cpu-arguments-slope"=> costs[56],
"encode_utf8-mem-arguments-intercept"=> costs[57],
"encode_utf8-mem-arguments-slope"=> costs[58],
"equals_byte_string-cpu-arguments-constant"=> costs[59],
"equals_byte_string-cpu-arguments-intercept"=> costs[60],
"equals_byte_string-cpu-arguments-slope"=> costs[61],
"equals_byte_string-mem-arguments"=> costs[62],
"equals_data-cpu-arguments-intercept"=> costs[63],
"equals_data-cpu-arguments-slope"=> costs[64],
"equals_data-mem-arguments"=> costs[65],
"equals_integer-cpu-arguments-intercept"=> costs[66],
"equals_integer-cpu-arguments-slope"=> costs[67],
"equals_integer-mem-arguments"=> costs[68],
"equals_string-cpu-arguments-constant"=> costs[69],
"equals_string-cpu-arguments-intercept"=> costs[70],
"equals_string-cpu-arguments-slope"=> costs[71],
"equals_string-mem-arguments"=> costs[72],
"fst_pair-cpu-arguments"=> costs[73],
"fst_pair-mem-arguments"=> costs[74],
"head_list-cpu-arguments"=> costs[75],
"head_list-mem-arguments"=> costs[76],
"i_data-cpu-arguments"=> costs[77],
"i_data-mem-arguments"=> costs[78],
"if_then_else-cpu-arguments"=> costs[79],
"if_then_else-mem-arguments"=> costs[80],
"index_byte_string-cpu-arguments"=> costs[81],
"index_byte_string-mem-arguments"=> costs[82],
"length_of_byte_string-cpu-arguments"=> costs[83],
"length_of_byte_string-mem-arguments"=> costs[84],
"less_than_byte_string-cpu-arguments-intercept"=> costs[85],
"less_than_byte_string-cpu-arguments-slope"=> costs[86],
"less_than_byte_string-mem-arguments"=> costs[87],
"less_than_equals_byte_string-cpu-arguments-intercept"=> costs[88],
"less_than_equals_byte_string-cpu-arguments-slope"=> costs[89],
"less_than_equals_byte_string-mem-arguments"=> costs[90],
"less_than_equals_integer-cpu-arguments-intercept"=> costs[91],
"less_than_equals_integer-cpu-arguments-slope"=> costs[92],
"less_than_equals_integer-mem-arguments"=> costs[93],
"less_than_integer-cpu-arguments-intercept"=> costs[94],
"less_than_integer-cpu-arguments-slope"=> costs[95],
"less_than_integer-mem-arguments"=> costs[96],
"list_data-cpu-arguments"=> costs[97],
"list_data-mem-arguments"=> costs[98],
"map_data-cpu-arguments"=> costs[99],
"map_data-mem-arguments"=> costs[100],
"mk_cons-cpu-arguments"=> costs[101],
"mk_cons-mem-arguments"=> costs[102],
"mk_nil_data-cpu-arguments"=> costs[103],
"mk_nil_data-mem-arguments"=> costs[104],
"mk_nil_pair_data-cpu-arguments"=> costs[105],
"mk_nil_pair_data-mem-arguments"=> costs[106],
"mk_pair_data-cpu-arguments"=> costs[107],
"mk_pair_data-mem-arguments"=> costs[108],
"mod_integer-cpu-arguments-constant"=> costs[109],
"mod_integer-cpu-arguments-model-arguments-intercept"=> costs[110],
"mod_integer-cpu-arguments-model-arguments-slope"=> costs[111],
"mod_integer-mem-arguments-intercept"=> costs[112],
"mod_integer-mem-arguments-minimum"=> costs[113],
"mod_integer-mem-arguments-slope"=> costs[114],
"multiply_integer-cpu-arguments-intercept"=> costs[115],
"multiply_integer-cpu-arguments-slope"=> costs[116],
"multiply_integer-mem-arguments-intercept"=> costs[117],
"multiply_integer-mem-arguments-slope"=> costs[118],
"null_list-cpu-arguments"=> costs[119],
"null_list-mem-arguments"=> costs[120],
"quotient_integer-cpu-arguments-constant"=> costs[121],
"quotient_integer-cpu-arguments-model-arguments-intercept"=> costs[122],
"quotient_integer-cpu-arguments-model-arguments-slope"=> costs[123],
"quotient_integer-mem-arguments-intercept"=> costs[124],
"quotient_integer-mem-arguments-minimum"=> costs[125],
"quotient_integer-mem-arguments-slope"=> costs[126],
"remainder_integer-cpu-arguments-constant"=> costs[127],
"remainder_integer-cpu-arguments-model-arguments-intercept"=> costs[128],
"remainder_integer-cpu-arguments-model-arguments-slope"=> costs[129],
"remainder_integer-mem-arguments-intercept"=> costs[130],
"remainder_integer-mem-arguments-minimum"=> costs[131],
"remainder_integer-mem-arguments-slope"=> costs[132],
"serialise_data-cpu-arguments-intercept"=> costs[133],
"serialise_data-cpu-arguments-slope"=> costs[134],
"serialise_data-mem-arguments-intercept"=> costs[135],
"serialise_data-mem-arguments-slope"=> costs[136],
"sha2_256-cpu-arguments-intercept"=> costs[137],
"sha2_256-cpu-arguments-slope"=> costs[138],
"sha2_256-mem-arguments"=> costs[139],
"sha3_256-cpu-arguments-intercept"=> costs[140],
"sha3_256-cpu-arguments-slope"=> costs[141],
"sha3_256-mem-arguments"=> costs[142],
"slice_byte_string-cpu-arguments-intercept"=> costs[143],
"slice_byte_string-cpu-arguments-slope"=> costs[144],
"slice_byte_string-mem-arguments-intercept"=> costs[145],
"slice_byte_string-mem-arguments-slope"=> costs[146],
"snd_pair-cpu-arguments"=> costs[147],
"snd_pair-mem-arguments"=> costs[148],
"subtract_integer-cpu-arguments-intercept"=> costs[149],
"subtract_integer-cpu-arguments-slope"=> costs[150],
"subtract_integer-mem-arguments-intercept"=> costs[151],
"subtract_integer-mem-arguments-slope"=> costs[152],
"tail_list-cpu-arguments"=> costs[153],
"tail_list-mem-arguments"=> costs[154],
"trace-cpu-arguments"=> costs[155],
"trace-mem-arguments"=> costs[156],
"un_b_data-cpu-arguments"=> costs[157],
"un_b_data-mem-arguments"=> costs[158],
"un_constr_data-cpu-arguments"=> costs[159],
"un_constr_data-mem-arguments"=> costs[160],
"un_i_data-cpu-arguments"=> costs[161],
"un_i_data-mem-arguments"=> costs[162],
"un_list_data-cpu-arguments"=> costs[163],
"un_list_data-mem-arguments"=> costs[164],
"un_map_data-cpu-arguments"=> costs[165],
"un_map_data-mem-arguments"=> costs[166],
"verify_ecdsa_secp256k1_signature-cpu-arguments"=> costs[167],
"verify_ecdsa_secp256k1_signature-mem-arguments"=> costs[168],
"verify_ed25519_signature-cpu-arguments-intercept"=> costs[169],
"verify_ed25519_signature-cpu-arguments-slope"=> costs[170],
"verify_ed25519_signature-mem-arguments"=> costs[171],
"verify_schnorr_secp256k1_signature-cpu-arguments-intercept"=> costs[172],
"verify_schnorr_secp256k1_signature-cpu-arguments-slope"=> costs[173],
"verify_schnorr_secp256k1_signature-mem-arguments"=> costs[174]
}
}
};
CostModel {
machine_costs: MachineCosts {
startup: ExBudget {

View File

@@ -4,7 +4,7 @@ use num_bigint::BigInt;
use num_integer::Integer;
use num_traits::{Signed, Zero};
use once_cell::sync::Lazy;
use pallas::ledger::primitives::babbage::{Language, PlutusData};
use pallas::ledger::primitives::conway::{Language, PlutusData};
use crate::{
ast::{Constant, Data, Type},

View File

@@ -9,15 +9,17 @@ use pallas::{
ledger::{
addresses::{Address, ScriptHash, StakePayload},
primitives::babbage::{
Certificate, CostMdls, DatumHash, DatumOption, ExUnits, Language, Mint, MintedTx,
NativeScript, PlutusV1Script, PlutusV2Script, PolicyId, PseudoScript, Redeemer,
RedeemerTag, RewardAccount, StakeCredential, TransactionInput, TransactionOutput,
Value, Withdrawals,
Certificate, CostMdls, DatumHash, DatumOption, ExUnits, Mint, MintedTx, NativeScript,
PlutusV1Script, PlutusV2Script, PolicyId, PseudoScript, Redeemer, RedeemerTag,
RewardAccount, StakeCredential, TransactionInput, TransactionOutput, Value,
Withdrawals,
},
traverse::{ComputeHash, OriginalHash},
},
};
use pallas::ledger::primitives::conway::Language;
use std::{cmp::Ordering, collections::HashMap, convert::TryInto, ops::Deref, vec};
use super::{
@@ -761,7 +763,7 @@ pub fn eval_redeemer(
program.eval_as(&Language::PlutusV1, costs, Some(initial_budget))
} else {
program.eval_version(&Language::PlutusV1)
program.eval_version(ExBudget::default(), &Language::PlutusV1)
};
let cost = eval_result.cost();
@@ -861,7 +863,7 @@ pub fn eval_redeemer(
program.eval_as(&Language::PlutusV1, costs, Some(initial_budget))
} else {
program.eval_version(&Language::PlutusV1)
program.eval_version(ExBudget::default(), &Language::PlutusV1)
};
let cost = eval_result.cost();