diff --git a/Cargo.lock b/Cargo.lock index 460c1a34..a45bb580 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3535,8 +3535,11 @@ dependencies = [ "num-integer", "num-traits", "once_cell", - "pallas", + "pallas-addresses", "pallas-codec", + "pallas-crypto", + "pallas-primitives", + "pallas-traverse", "peg", "pretty", "pretty_assertions", diff --git a/crates/uplc/Cargo.toml b/crates/uplc/Cargo.toml index 2df5c0ce..5cab53d4 100644 --- a/crates/uplc/Cargo.toml +++ b/crates/uplc/Cargo.toml @@ -19,8 +19,11 @@ miette = "5.5.0" num-bigint = "0.4.3" num-integer = "0.1.45" num-traits = "0.2.15" -pallas.workspace = true +pallas-crypto = "0.22.0" +pallas-primitives = "0.22.0" +pallas-addresses = "0.22.0" pallas-codec = { version = "0.22.0", features = ["num-bigint"] } +pallas-traverse = "0.22.0" peg = "0.8.1" pretty = "0.11.3" serde = { version = "1.0.152", features = ["derive"] } diff --git a/crates/uplc/src/ast.rs b/crates/uplc/src/ast.rs index 7acf2a37..c5db115a 100644 --- a/crates/uplc/src/ast.rs +++ b/crates/uplc/src/ast.rs @@ -11,14 +11,12 @@ use crate::{ }; use num_bigint::BigInt; use num_traits::ToPrimitive; -use pallas::ledger::{ - addresses::{Network, ShelleyAddress, ShelleyDelegationPart, ShelleyPaymentPart}, - primitives::{ - alonzo::{self, Constr, PlutusData}, - conway::{self, Language}, - }, - traverse::ComputeHash, +use pallas_addresses::{Network, ShelleyAddress, ShelleyDelegationPart, ShelleyPaymentPart}; +use pallas_primitives::{ + alonzo::{self, Constr, PlutusData}, + conway::{self, Language}, }; +use pallas_traverse::ComputeHash; use serde::{ self, de::{self, Deserialize, Deserializer, MapAccess, Visitor}, @@ -304,7 +302,7 @@ pub struct Data; impl Data { pub fn to_hex(data: PlutusData) -> String { let mut bytes = Vec::new(); - pallas::codec::minicbor::Encoder::new(&mut bytes) + pallas_codec::minicbor::Encoder::new(&mut bytes) .encode(data) .expect("failed to encode Plutus Data as cbor?"); hex::encode(bytes) diff --git a/crates/uplc/src/builder.rs b/crates/uplc/src/builder.rs index d4e879b8..8f62905f 100644 --- a/crates/uplc/src/builder.rs +++ b/crates/uplc/src/builder.rs @@ -2,7 +2,7 @@ use crate::{ ast::{Constant, Name, Term, Type}, builtins::DefaultFunction, }; -use pallas::ledger::primitives::alonzo::PlutusData; +use pallas_primitives::alonzo::PlutusData; pub const CONSTR_FIELDS_EXPOSER: &str = "__constr_fields_exposer"; pub const CONSTR_INDEX_EXPOSER: &str = "__constr_index_exposer"; diff --git a/crates/uplc/src/builtins.rs b/crates/uplc/src/builtins.rs index 3ffd9b84..a9bd2a48 100644 --- a/crates/uplc/src/builtins.rs +++ b/crates/uplc/src/builtins.rs @@ -1,6 +1,6 @@ use std::{fmt::Display, rc::Rc, str::FromStr}; -use pallas::codec::flat::de; +use pallas_codec::flat::de; use strum_macros::EnumIter; use crate::ast::Term; diff --git a/crates/uplc/src/flat.rs b/crates/uplc/src/flat.rs index a97f50b0..e71d2896 100644 --- a/crates/uplc/src/flat.rs +++ b/crates/uplc/src/flat.rs @@ -1,12 +1,10 @@ use num_bigint::BigInt; -use pallas::{ - codec::flat::{ - de::{self, Decode, Decoder}, - en::{self, Encode, Encoder}, - Flat, - }, - ledger::primitives::{babbage::PlutusData, Fragment}, +use pallas_codec::flat::{ + de::{self, Decode, Decoder}, + en::{self, Encode, Encoder}, + Flat, }; +use pallas_primitives::{babbage::PlutusData, Fragment}; use std::{collections::VecDeque, fmt::Debug, rc::Rc}; @@ -35,7 +33,7 @@ where T: Binder<'b> + Debug, { pub fn from_cbor(bytes: &'b [u8], buffer: &'b mut Vec) -> Result { - let mut cbor_decoder = pallas::codec::minicbor::Decoder::new(bytes); + let mut cbor_decoder = pallas_codec::minicbor::Decoder::new(bytes); let flat_bytes = cbor_decoder .bytes() @@ -88,7 +86,7 @@ where let mut bytes = Vec::new(); - let mut cbor_encoder = pallas::codec::minicbor::Encoder::new(&mut bytes); + let mut cbor_encoder = pallas_codec::minicbor::Encoder::new(&mut bytes); cbor_encoder .bytes(&flat_bytes) @@ -1006,7 +1004,7 @@ mod tests { parser, }; use indoc::indoc; - use pallas::codec::flat::Flat; + use pallas_codec::flat::Flat; #[test] fn flat_encode_integer() { diff --git a/crates/uplc/src/lib.rs b/crates/uplc/src/lib.rs index db0bb7ff..364cd7c4 100644 --- a/crates/uplc/src/lib.rs +++ b/crates/uplc/src/lib.rs @@ -9,9 +9,9 @@ pub mod parser; mod pretty; pub mod tx; -pub use pallas::codec::utils::KeyValuePairs; -pub use pallas::crypto::hash::Hash; -pub use pallas::ledger::primitives::{ +pub use pallas_codec::utils::KeyValuePairs; +pub use pallas_crypto::hash::Hash; +pub use pallas_primitives::{ alonzo::{BigInt, Constr, PlutusData}, babbage::{PostAlonzoTransactionOutput, TransactionInput, TransactionOutput, Value}, Error, Fragment, diff --git a/crates/uplc/src/machine.rs b/crates/uplc/src/machine.rs index 9a30548a..6efbdf3e 100644 --- a/crates/uplc/src/machine.rs +++ b/crates/uplc/src/machine.rs @@ -11,7 +11,7 @@ pub mod value; use cost_model::{ExBudget, StepKind}; pub use error::Error; -use pallas::ledger::primitives::conway::Language; +use pallas_primitives::conway::Language; use self::{ cost_model::CostModel, diff --git a/crates/uplc/src/machine/cost_model.rs b/crates/uplc/src/machine/cost_model.rs index 88eddf42..2050c997 100644 --- a/crates/uplc/src/machine/cost_model.rs +++ b/crates/uplc/src/machine/cost_model.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -use pallas::ledger::primitives::conway::Language; +use pallas_primitives::conway::Language; use crate::builtins::DefaultFunction; diff --git a/crates/uplc/src/machine/error.rs b/crates/uplc/src/machine/error.rs index c25086cf..2168532f 100644 --- a/crates/uplc/src/machine/error.rs +++ b/crates/uplc/src/machine/error.rs @@ -72,6 +72,16 @@ pub enum Error { #[error(transparent)] Secp256k1(#[from] secp256k1::Error), #[cfg(target_family = "wasm")] - #[error(transparent)] - Secp256k1(#[from] k256::ecdsa::Error), + #[error("{0}")] + K256Error(String), + // #[cfg(target_family = "wasm")] + // #[error("k256 error")] + // Secp256k1(#[from] k256::ecdsa::Error), +} + +#[cfg(target_family = "wasm")] +impl From for Error { + fn from(error: k256::ecdsa::Error) -> Error { + Error::K256Error(format!("k256 error: {}", error)) + } } diff --git a/crates/uplc/src/machine/runtime.rs b/crates/uplc/src/machine/runtime.rs index 360936cd..77f6a605 100644 --- a/crates/uplc/src/machine/runtime.rs +++ b/crates/uplc/src/machine/runtime.rs @@ -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::conway::{Language, PlutusData}; +use pallas_primitives::conway::{Language, PlutusData}; use crate::{ ast::{Constant, Data, Type}, diff --git a/crates/uplc/src/machine/value.rs b/crates/uplc/src/machine/value.rs index 8de10a4f..a52be8e9 100644 --- a/crates/uplc/src/machine/value.rs +++ b/crates/uplc/src/machine/value.rs @@ -6,7 +6,7 @@ use crate::{ }; use num_bigint::BigInt; use num_traits::{Signed, ToPrimitive, Zero}; -use pallas::ledger::primitives::babbage::{self, PlutusData}; +use pallas_primitives::babbage::{self, PlutusData}; use super::{runtime::BuiltinRuntime, Error}; @@ -411,7 +411,7 @@ pub fn from_pallas_bigint(n: &babbage::BigInt) -> BigInt { pub fn to_pallas_bigint(n: &BigInt) -> babbage::BigInt { if let Some(i) = n.to_i128() { if let Ok(i) = i.try_into() { - let pallas_int: pallas::codec::utils::Int = i; + let pallas_int: pallas_codec::utils::Int = i; return babbage::BigInt::Int(pallas_int); } } diff --git a/crates/uplc/src/optimize/shrinker.rs b/crates/uplc/src/optimize/shrinker.rs index b610b03c..06516569 100644 --- a/crates/uplc/src/optimize/shrinker.rs +++ b/crates/uplc/src/optimize/shrinker.rs @@ -3,7 +3,7 @@ use std::{cmp::Ordering, iter, ops::Neg, rc::Rc, vec}; use indexmap::IndexMap; use itertools::Itertools; -use pallas::ledger::primitives::babbage::{BigInt, PlutusData}; +use pallas_primitives::babbage::{BigInt, PlutusData}; use crate::{ ast::{Constant, Data, Name, NamedDeBruijn, Program, Term, Type}, @@ -1907,7 +1907,7 @@ fn pop_lambdas_and_get_names(term: &Term) -> (Vec>, &Term) #[cfg(test)] mod tests { - use pallas::ledger::primitives::babbage::{BigInt, PlutusData}; + use pallas_primitives::babbage::{BigInt, PlutusData}; use pretty_assertions::assert_eq; use crate::{ diff --git a/crates/uplc/src/parser.rs b/crates/uplc/src/parser.rs index d42d5d7a..87c97087 100644 --- a/crates/uplc/src/parser.rs +++ b/crates/uplc/src/parser.rs @@ -9,7 +9,7 @@ use crate::{ use interner::Interner; use num_bigint::BigInt; -use pallas::ledger::primitives::alonzo::PlutusData; +use pallas_primitives::alonzo::PlutusData; use peg::{error::ParseError, str::LineCol}; pub mod interner; @@ -248,7 +248,7 @@ peg::parser! { )) } / _* "Map" _+ kvps:plutus_key_value_pairs() { - PlutusData::Map(pallas::codec::utils::KeyValuePairs::Def(kvps)) + PlutusData::Map(pallas_codec::utils::KeyValuePairs::Def(kvps)) } / _* "List" _+ ls:plutus_list() { PlutusData::Array(ls) } / _* "I" _+ n:big_number() { PlutusData::BigInt(to_pallas_bigint(&n)) } diff --git a/crates/uplc/src/pretty.rs b/crates/uplc/src/pretty.rs index 8343b92d..1da5c6be 100644 --- a/crates/uplc/src/pretty.rs +++ b/crates/uplc/src/pretty.rs @@ -4,7 +4,7 @@ use crate::{ machine::runtime::{convert_tag_to_constr, Compressable}, machine::value::from_pallas_bigint, }; -use pallas::ledger::primitives::babbage::{Constr, PlutusData}; +use pallas_primitives::babbage::{Constr, PlutusData}; use pretty::RcDoc; use std::ascii::escape_default; diff --git a/crates/uplc/src/tx.rs b/crates/uplc/src/tx.rs index 500f59bd..3cd6457c 100644 --- a/crates/uplc/src/tx.rs +++ b/crates/uplc/src/tx.rs @@ -1,8 +1,8 @@ -use pallas::ledger::primitives::{ +use pallas_primitives::{ babbage::{CostMdls, MintedTx, Redeemer, TransactionInput, TransactionOutput}, Fragment, }; -use pallas::ledger::traverse::{Era, MultiEraTx}; +use pallas_traverse::{Era, MultiEraTx}; use error::Error; pub use phase_one::eval_phase_one; diff --git a/crates/uplc/src/tx/error.rs b/crates/uplc/src/tx/error.rs index be32b3d7..02437e2e 100644 --- a/crates/uplc/src/tx/error.rs +++ b/crates/uplc/src/tx/error.rs @@ -3,13 +3,13 @@ use crate::machine::{self, cost_model::ExBudget}; #[derive(thiserror::Error, Debug, miette::Diagnostic)] pub enum Error { #[error("{0}")] - Address(#[from] pallas::ledger::addresses::Error), + Address(#[from] pallas_addresses::Error), #[error("Only shelley reward addresses can be a part of withdrawals")] BadWithdrawalAddress, #[error("{0}")] - FlatDecode(#[from] pallas::codec::flat::de::Error), + FlatDecode(#[from] pallas_codec::flat::de::Error), #[error("{0}")] - FragmentDecode(#[from] pallas::ledger::primitives::Error), + FragmentDecode(#[from] pallas_primitives::Error), #[error("{}\n\n{:#?}\n\n{}", .0, .1, .2.join("\n"))] Machine(machine::Error, ExBudget, Vec), #[error("Native script can't be executed in phase-two")] @@ -32,7 +32,7 @@ pub enum Error { #[error("PlutusV2 cost model not found.")] V2CostModelNotFound, #[error("Wrong era, Please use Babbage or Alonzo: {0}")] - WrongEra(#[from] pallas::codec::minicbor::decode::Error), + WrongEra(#[from] pallas_codec::minicbor::decode::Error), #[error("Byron address not allowed in Plutus.")] ByronAddressNotAllowed, #[error("Inline datum not allowed in PlutusV1.")] diff --git a/crates/uplc/src/tx/eval.rs b/crates/uplc/src/tx/eval.rs index b061fe96..e19c4456 100644 --- a/crates/uplc/src/tx/eval.rs +++ b/crates/uplc/src/tx/eval.rs @@ -3,22 +3,17 @@ use crate::{ machine::cost_model::ExBudget, PlutusData, }; -use pallas::{ - codec::utils::{KeyValuePairs, MaybeIndefArray}, - crypto::hash::Hash, - ledger::{ - addresses::{Address, ScriptHash, StakePayload}, - primitives::babbage::{ - 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_addresses::{Address, ScriptHash, StakePayload}; +use pallas_codec::utils::{KeyValuePairs, MaybeIndefArray}; +use pallas_crypto::hash::Hash; +use pallas_primitives::babbage::{ + Certificate, CostMdls, DatumHash, DatumOption, ExUnits, Mint, MintedTx, NativeScript, + PlutusV1Script, PlutusV2Script, PolicyId, PseudoScript, Redeemer, RedeemerTag, RewardAccount, + StakeCredential, TransactionInput, TransactionOutput, Value, Withdrawals, }; +use pallas_traverse::{ComputeHash, OriginalHash}; -use pallas::ledger::primitives::conway::Language; +use pallas_primitives::conway::Language; use std::{cmp::Ordering, collections::HashMap, convert::TryInto, ops::Deref, vec}; diff --git a/crates/uplc/src/tx/phase_one.rs b/crates/uplc/src/tx/phase_one.rs index b3a7cc6c..3fc3dc02 100644 --- a/crates/uplc/src/tx/phase_one.rs +++ b/crates/uplc/src/tx/phase_one.rs @@ -1,14 +1,9 @@ use std::collections::HashMap; -use pallas::{ - codec::utils::{KeyValuePairs, MaybeIndefArray}, - ledger::{ - addresses::{Address, ScriptHash, ShelleyPaymentPart, StakePayload}, - primitives::babbage::{ - Certificate, MintedTx, PolicyId, RedeemerTag, RewardAccount, StakeCredential, - TransactionOutput, - }, - }, +use pallas_addresses::{Address, ScriptHash, ShelleyPaymentPart, StakePayload}; +use pallas_codec::utils::{KeyValuePairs, MaybeIndefArray}; +use pallas_primitives::babbage::{ + Certificate, MintedTx, PolicyId, RedeemerTag, RewardAccount, StakeCredential, TransactionOutput, }; use super::{ diff --git a/crates/uplc/src/tx/script_context.rs b/crates/uplc/src/tx/script_context.rs index d3bb5184..840480da 100644 --- a/crates/uplc/src/tx/script_context.rs +++ b/crates/uplc/src/tx/script_context.rs @@ -1,13 +1,9 @@ -use pallas::{ - codec::utils::KeyValuePairs, - crypto::hash::Hash, - ledger::{ - addresses::Address, - primitives::babbage::{ - AddrKeyhash, Certificate, Coin, DatumHash, PlutusData, PolicyId, Redeemer, - StakeCredential, TransactionInput, TransactionOutput, Value, - }, - }, +use pallas_addresses::Address; +use pallas_codec::utils::KeyValuePairs; +use pallas_crypto::hash::Hash; +use pallas_primitives::babbage::{ + AddrKeyhash, Certificate, Coin, DatumHash, PlutusData, PolicyId, Redeemer, StakeCredential, + TransactionInput, TransactionOutput, Value, }; use super::to_plutus_data::MintValue; diff --git a/crates/uplc/src/tx/tests.rs b/crates/uplc/src/tx/tests.rs index 7fbf364c..3978288b 100644 --- a/crates/uplc/src/tx/tests.rs +++ b/crates/uplc/src/tx/tests.rs @@ -1,9 +1,9 @@ -use pallas::codec::utils::MaybeIndefArray; -use pallas::ledger::primitives::{ +use pallas_codec::utils::MaybeIndefArray; +use pallas_primitives::{ babbage::{CostMdls, TransactionInput, TransactionOutput}, Fragment, }; -use pallas::ledger::traverse::{Era, MultiEraTx}; +use pallas_traverse::{Era, MultiEraTx}; use crate::machine::cost_model::ExBudget; diff --git a/crates/uplc/src/tx/to_plutus_data.rs b/crates/uplc/src/tx/to_plutus_data.rs index 4809e130..e96ee842 100644 --- a/crates/uplc/src/tx/to_plutus_data.rs +++ b/crates/uplc/src/tx/to_plutus_data.rs @@ -1,12 +1,12 @@ -use pallas::codec::utils::{AnyUInt, Bytes, Int, KeyValuePairs}; -use pallas::crypto::hash::Hash; -use pallas::ledger::addresses::{Address, ShelleyDelegationPart, ShelleyPaymentPart, StakePayload}; -use pallas::ledger::primitives::babbage::{AssetName, BigInt, Constr, Mint, PlutusData, ScriptRef}; -use pallas::ledger::primitives::babbage::{ +use pallas_addresses::{Address, ShelleyDelegationPart, ShelleyPaymentPart, StakePayload}; +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, PseudoScript, Redeemer, StakeCredential, TransactionInput, TransactionOutput, Value, }; -use pallas::ledger::traverse::ComputeHash; +use pallas_traverse::ComputeHash; use crate::machine::runtime::{convert_constr_to_tag, ANY_TAG}; diff --git a/crates/uplc/tests/pretty_tests.rs b/crates/uplc/tests/pretty_tests.rs index 5fd41e09..edb6a908 100644 --- a/crates/uplc/tests/pretty_tests.rs +++ b/crates/uplc/tests/pretty_tests.rs @@ -112,7 +112,7 @@ fn constant_data_constr() { tag: 122, any_constructor: None, fields: vec![PlutusData::BigInt( - pallas::ledger::primitives::alonzo::BigInt::Int(2.into()), + pallas_primitives::alonzo::BigInt::Int(2.into()), )], })) .into(), @@ -127,11 +127,11 @@ fn constant_data_map() { Term::::Constant( Constant::Data(PlutusData::Map(uplc::KeyValuePairs::Def(vec![ ( - PlutusData::BigInt(pallas::ledger::primitives::alonzo::BigInt::Int(0.into())), + PlutusData::BigInt(pallas_primitives::alonzo::BigInt::Int(0.into())), PlutusData::BoundedBytes(vec![0x00].into()), ), ( - PlutusData::BigInt(pallas::ledger::primitives::alonzo::BigInt::Int(1.into())), + PlutusData::BigInt(pallas_primitives::alonzo::BigInt::Int(1.into())), PlutusData::BoundedBytes(vec![0x0f].into()), ), ]))) @@ -146,8 +146,8 @@ fn constant_data_list() { round_trip( Term::::Constant( Constant::Data(PlutusData::Array(vec![ - PlutusData::BigInt(pallas::ledger::primitives::alonzo::BigInt::Int(0.into())), - PlutusData::BigInt(pallas::ledger::primitives::alonzo::BigInt::Int(1.into())), + PlutusData::BigInt(pallas_primitives::alonzo::BigInt::Int(0.into())), + PlutusData::BigInt(pallas_primitives::alonzo::BigInt::Int(1.into())), ])) .into(), ), @@ -160,7 +160,7 @@ fn constant_data_int() { round_trip( Term::::Constant( Constant::Data(PlutusData::BigInt( - pallas::ledger::primitives::alonzo::BigInt::Int(2.into()), + pallas_primitives::alonzo::BigInt::Int(2.into()), )) .into(), ), @@ -169,14 +169,14 @@ fn constant_data_int() { let term = Term::::Constant( Constant::Data(PlutusData::BigInt( - pallas::ledger::primitives::alonzo::BigInt::BigUInt(vec![2, 3, 4].into()), + pallas_primitives::alonzo::BigInt::BigUInt(vec![2, 3, 4].into()), )) .into(), ); assert_eq!(term.to_pretty(), "(con data (I 131844))"); let term = Term::::Constant( Constant::Data(PlutusData::BigInt( - pallas::ledger::primitives::alonzo::BigInt::BigNInt(vec![2, 3, 3].into()), + pallas_primitives::alonzo::BigInt::BigNInt(vec![2, 3, 3].into()), )) .into(), );