feat: apply redeemers and datum to script
This commit is contained in:
parent
c9072deb09
commit
cf27c0c755
|
@ -9,7 +9,7 @@ dependencies = [
|
|||
"anyhow",
|
||||
"clap",
|
||||
"hex",
|
||||
"pallas-primitives 0.13.2",
|
||||
"pallas-primitives",
|
||||
"pallas-traverse",
|
||||
"uplc",
|
||||
]
|
||||
|
@ -318,20 +318,11 @@ dependencies = [
|
|||
"base58",
|
||||
"bech32 0.8.1",
|
||||
"hex",
|
||||
"pallas-codec 0.13.2",
|
||||
"pallas-crypto 0.13.2",
|
||||
"pallas-codec",
|
||||
"pallas-crypto",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pallas-codec"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0dce0ea17341c1a0e43e2bb4a637740198dcb09826879ce3ac5ae1c6f4398a5d"
|
||||
dependencies = [
|
||||
"minicbor 0.17.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pallas-codec"
|
||||
version = "0.13.2"
|
||||
|
@ -341,19 +332,6 @@ dependencies = [
|
|||
"minicbor 0.17.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pallas-crypto"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "051226367cd851895c73e3115d378b58495ade1ee60c3a154c0d0c30554565fa"
|
||||
dependencies = [
|
||||
"cryptoxide",
|
||||
"hex",
|
||||
"pallas-codec 0.12.0",
|
||||
"rand_core",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pallas-crypto"
|
||||
version = "0.13.2"
|
||||
|
@ -362,27 +340,11 @@ checksum = "e17a13efbe2609916de03c063d5bbef840616b02c658f3db5222785a18b63362"
|
|||
dependencies = [
|
||||
"cryptoxide",
|
||||
"hex",
|
||||
"pallas-codec 0.13.2",
|
||||
"pallas-codec",
|
||||
"rand_core",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pallas-primitives"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "97a0fcc7d5a7120bc2b2e203ec5e7f8088107c500c0eb665569d0e77a910d3c0"
|
||||
dependencies = [
|
||||
"base58",
|
||||
"bech32 0.9.0",
|
||||
"hex",
|
||||
"log",
|
||||
"pallas-codec 0.12.0",
|
||||
"pallas-crypto 0.12.0",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pallas-primitives"
|
||||
version = "0.13.2"
|
||||
|
@ -393,8 +355,8 @@ dependencies = [
|
|||
"bech32 0.9.0",
|
||||
"hex",
|
||||
"log",
|
||||
"pallas-codec 0.13.2",
|
||||
"pallas-crypto 0.13.2",
|
||||
"pallas-codec",
|
||||
"pallas-crypto",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
@ -407,9 +369,9 @@ checksum = "0549db2f8bbaf22d13fc35791dd50fb13a50a1290a342a98929c8ce6c422ed86"
|
|||
dependencies = [
|
||||
"hex",
|
||||
"pallas-addresses",
|
||||
"pallas-codec 0.13.2",
|
||||
"pallas-crypto 0.13.2",
|
||||
"pallas-primitives 0.13.2",
|
||||
"pallas-codec",
|
||||
"pallas-crypto",
|
||||
"pallas-primitives",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
|
@ -722,8 +684,8 @@ dependencies = [
|
|||
"flat-rs",
|
||||
"hex",
|
||||
"minicbor 0.18.0",
|
||||
"pallas-codec 0.12.0",
|
||||
"pallas-primitives 0.12.0",
|
||||
"pallas-codec",
|
||||
"pallas-primitives",
|
||||
"peg",
|
||||
"pretty",
|
||||
"proptest",
|
||||
|
|
|
@ -2,7 +2,7 @@ use std::{fmt::Write as _, fs};
|
|||
|
||||
use pallas_traverse::{Era, MultiEraTx};
|
||||
use uplc::{
|
||||
ast::{DeBruijn, FakeNamedDeBruijn, Name, NamedDeBruijn, Program, Term},
|
||||
ast::{Constant, DeBruijn, FakeNamedDeBruijn, Name, NamedDeBruijn, Program, Term},
|
||||
machine::cost_model::ExBudget,
|
||||
parser,
|
||||
};
|
||||
|
@ -30,17 +30,30 @@ fn main() -> anyhow::Result<()> {
|
|||
|
||||
println!("Simulating: {}", tx.hash());
|
||||
|
||||
println!("\nPlutus Data:");
|
||||
let witnesses = tx.witnesses();
|
||||
|
||||
println!("{:#?}", tx.witnesses().plutus_data());
|
||||
if let Some(((datums, redeemers), scripts)) = witnesses
|
||||
.plutus_data()
|
||||
.zip(witnesses.redeemer())
|
||||
.zip(witnesses.plutus_v1_script())
|
||||
{
|
||||
for ((datum, redeemer), script) in
|
||||
datums.iter().zip(redeemers.iter()).zip(scripts.iter())
|
||||
{
|
||||
let program: Program<NamedDeBruijn> = {
|
||||
let mut buffer = Vec::new();
|
||||
|
||||
println!("\nRedeemer:");
|
||||
let prog =
|
||||
Program::<FakeNamedDeBruijn>::from_cbor(&script.0, &mut buffer)?;
|
||||
|
||||
println!("{:#?}", tx.witnesses().redeemer());
|
||||
prog.into()
|
||||
};
|
||||
|
||||
println!("\nPlutus V1 Script:");
|
||||
|
||||
println!("{:#?}", tx.witnesses().plutus_v1_script());
|
||||
program
|
||||
.apply_data(datum.clone())
|
||||
.apply_data(redeemer.data.clone());
|
||||
}
|
||||
}
|
||||
|
||||
println!("\nPlutus V2 Script:");
|
||||
|
||||
|
|
|
@ -17,8 +17,8 @@ cryptoxide = "0.4.2"
|
|||
flat-rs = { path = "../flat", version = "0.0.10" }
|
||||
hex = "0.4.3"
|
||||
minicbor = { version = "0.18.0", features = ["std"] }
|
||||
pallas-codec = "0.12.0"
|
||||
pallas-primitives = "0.12.0"
|
||||
pallas-codec = "0.13.2"
|
||||
pallas-primitives = "0.13.2"
|
||||
peg = "0.8.0"
|
||||
pretty = "0.11.3"
|
||||
thiserror = "1.0.31"
|
||||
|
|
|
@ -54,6 +54,18 @@ where
|
|||
term: applied_term,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn apply_data(&self, plutus_data: PlutusData) -> Self {
|
||||
let applied_term = Term::Apply {
|
||||
function: Rc::new(self.term.clone()),
|
||||
argument: Rc::new(Term::Constant(Constant::Data(plutus_data))),
|
||||
};
|
||||
|
||||
Program {
|
||||
version: self.version,
|
||||
term: applied_term,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T> Display for Program<T>
|
||||
|
|
|
@ -31,8 +31,11 @@ where
|
|||
T: Binder<'b> + Debug,
|
||||
{
|
||||
pub fn from_cbor(bytes: &'b [u8], buffer: &'b mut Vec<u8>) -> Result<Self, de::Error> {
|
||||
let flat_bytes: Vec<u8> =
|
||||
minicbor::decode(bytes).map_err(|err| de::Error::Message(err.to_string()))?;
|
||||
let mut cbor_decoder = minicbor::Decoder::new(bytes);
|
||||
|
||||
let flat_bytes = cbor_decoder
|
||||
.bytes()
|
||||
.map_err(|err| de::Error::Message(err.to_string()))?;
|
||||
|
||||
buffer.extend(flat_bytes);
|
||||
|
||||
|
@ -58,7 +61,15 @@ where
|
|||
pub fn to_cbor(&self) -> Result<Vec<u8>, en::Error> {
|
||||
let flat_bytes = self.flat()?;
|
||||
|
||||
minicbor::to_vec(&flat_bytes).map_err(|err| en::Error::Message(err.to_string()))
|
||||
let mut bytes = Vec::new();
|
||||
|
||||
let mut cbor_encoder = minicbor::Encoder::new(&mut bytes);
|
||||
|
||||
cbor_encoder
|
||||
.bytes(&flat_bytes)
|
||||
.map_err(|err| en::Error::Message(err.to_string()))?;
|
||||
|
||||
Ok(bytes)
|
||||
}
|
||||
|
||||
// convenient so that people don't need to depend on the flat crate
|
||||
|
|
Loading…
Reference in New Issue