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