new tests
This commit is contained in:
parent
c45643bb01
commit
99a27f6a3d
|
@ -1,5 +1,5 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
ast::{FakeNamedDeBruijn, NamedDeBruijn, Program},
|
ast::{DeBruijn, FakeNamedDeBruijn, NamedDeBruijn, Program},
|
||||||
machine::cost_model::ExBudget,
|
machine::cost_model::ExBudget,
|
||||||
PlutusData,
|
PlutusData,
|
||||||
};
|
};
|
||||||
|
@ -739,10 +739,15 @@ pub fn eval_redeemer(
|
||||||
prog.into()
|
prog.into()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let program_flat: Program<DeBruijn> = program.clone().into();
|
||||||
|
println!("{}", hex::encode(program_flat.to_cbor().unwrap()));
|
||||||
|
|
||||||
let program = program
|
let program = program
|
||||||
.apply_data(redeemer.data.clone())
|
.apply_data(redeemer.data.clone())
|
||||||
.apply_data(script_context.to_plutus_data());
|
.apply_data(script_context.to_plutus_data());
|
||||||
|
|
||||||
|
println!("{:#?}", script_context.to_plutus_data());
|
||||||
|
|
||||||
let (result, budget, logs) = if let Some(cost_mdls) = cost_mdls_opt {
|
let (result, budget, logs) = if let Some(cost_mdls) = cost_mdls_opt {
|
||||||
let costs = if let Some(costs) = &cost_mdls.plutus_v1 {
|
let costs = if let Some(costs) = &cost_mdls.plutus_v1 {
|
||||||
costs
|
costs
|
||||||
|
|
|
@ -1072,6 +1072,212 @@ fn test_eval_5() {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_eval_6() {
|
||||||
|
/*
|
||||||
|
|
||||||
|
Haskell PLC: (_, _)
|
||||||
|
Aiken PLC: (_,_)
|
||||||
|
|
||||||
|
Plutus V1
|
||||||
|
|
||||||
|
Helios script:
|
||||||
|
|
||||||
|
func main(ctx: ScriptContext) -> Bool {ctx.tx.fee == ctx.tx.fee}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
let tx_bytes = hex::decode("84a80082825820f375a19211ee8ce75b8306a2604e2a0e8c50dfae7a103dd3688f980bec5e29b200825820a0bfcb30c19402a5bc79ecd33ddea4d67d8d6cb2ebe694c5ac2f14abc47092f4000182825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d5821a00111958a1581c652cc39999ceb1ddbdd788c3206d70536d84d36f42198296736355efa1400a825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a0047acf6021a0002c73209a1581c652cc39999ceb1ddbdd788c3206d70536d84d36f42198296736355efa1400a0b58201ca9076f41fe63a349f05c6346c732fa7f42744e43e0d54f546af0ffc463057f0d81825820f375a19211ee8ce75b8306a2604e2a0e8c50dfae7a103dd3688f980bec5e29b20110825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a054bc2ef111a00042acba30081825820065dd553fbe4e240a8f819bb9e333a7483de4a22b65c7fb6a95ce9450f84dff758402220dcecba177cabf70414676a5b9af9e0d6dec5ce3a7335caef5e4843a2f045995f6e8debbe019d21dcfc8749d780f0cd75c717cfab17ba275702c3aae37309038158235821010000323232223333573460060024931324c4660040020020024466ebc00800410581840100d8798082190fa21a005f14d0f5f6").unwrap();
|
||||||
|
|
||||||
|
let raw_inputs = hex::decode("86825820a0bfcb30c19402a5bc79ecd33ddea4d67d8d6cb2ebe694c5ac2f14abc47092f400825820a0bfcb30c19402a5bc79ecd33ddea4d67d8d6cb2ebe694c5ac2f14abc47092f401825820cd3589fae0ae4ad33dbc8a8d99b4e99b4a78c2b0473040aab34da8e44fba9fa300825820f375a19211ee8ce75b8306a2604e2a0e8c50dfae7a103dd3688f980bec5e29b200825820f375a19211ee8ce75b8306a2604e2a0e8c50dfae7a103dd3688f980bec5e29b201825820c5bc1437117c200f325467dcede3c09fbfca32f9fe399bd40c778ab2fa832f4301").unwrap();
|
||||||
|
let raw_outputs = hex::decode("86825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a000f4240825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d5821a005da7c4ac581c1e852216c006c55490cd85b6e0ba523a37c2be3526f479e61cca41eba2444e616d6902454e616d693201581c21514b6c51f0aaa0c9c337329ce93c52fad208cfd0b4ccd51074d9dcab4d50494e4b44494e4f4331494439014d50494e4b44494e4f4332494439014d50494e4b44494e4f4333494439014d50494e4b44494e4f4334494439014d50494e4b44494e4f4335494439014d50494e4b44494e4f4336494439014d50494e4b44494e4f4337494439014d50494e4b44494e4f4338494439014d50494e4b44494e4f4339494439014e50494e4b44494e4f433130494439014e50494e4b44494e4f43313149443901581c321668648736a09a40bc3ef5fbd05590530be624e39af84fab3bc6bba84d435033503050726f6d6f333431014f4b696e67447572616e747574323531015053616d757257686950726f6d6f313933015143727970746f6d626f50726f6d6f3134360154536b756c6c62616c6c4c6f676f50726f6d6f35320155536b756c6c62616c6c4c6f676f50726f6d6f33313301581b425345647761726473536c616d6d696e48616e647330303034313201581c42697a61727265537461727344726561646c696f6e526f736533323401581c9ec93fd47d1e43ec5bb5dad70af92b6498b92d20d4325f9027ac4743a1574a6f736570684d6972616e64615754503030353754323601581ca7dc26584358f5ca8d99d7aa646a7b658120296a94588e1cefad8940a157546573744e616d69467269656e645368696e794a50454701581cbc5a0f0f3f1bfa92286410388c54655687bb518f47e12b88c0d0728ca14b566563746f724669656c6401581cc4c00fbd8fa227442a5e7cdecde33b24588494d05a2c50fda8938c6da1444b49445a19c346581cd068fe47123ec4c86460eeb74c7d7765c67d2df295a3ac86d664ed45a156506c757475734669727374436c61737350686f746f3101581cd3b65744dd067fd7103cc6a4019cc9cd5f8627b78174c05dc67a9ad6a1544c696665496e4c6f636b646f776e53314d31503201581cd973d8df645da318bb331dbe4af8eb0270079470225d955c6183445ca15148617070794269727468646179416c657301581cdf9974c2192744f3b6dac92990769fe26c36b0ac8bcc623fb457a45da14d575450303035466c796572323401581cee47c1521b55a006c345f739f084f5c205aeb295e3e42fa66b9d1dd2a151446965666e6643727970746f6e6965726505825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a000f4240825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a004c4b40825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a054fedba825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a0028a3c6").unwrap();
|
||||||
|
|
||||||
|
let inputs = MaybeIndefArray::<TransactionInput>::decode_fragment(&raw_inputs).unwrap();
|
||||||
|
let outputs = MaybeIndefArray::<TransactionOutput>::decode_fragment(&raw_outputs).unwrap();
|
||||||
|
|
||||||
|
let utxos: MaybeIndefArray<ResolvedInput> = MaybeIndefArray::Indef(
|
||||||
|
inputs
|
||||||
|
.iter()
|
||||||
|
.zip(outputs.iter())
|
||||||
|
.map(|(input, output)| ResolvedInput {
|
||||||
|
input: input.clone(),
|
||||||
|
output: output.clone(),
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
|
);
|
||||||
|
|
||||||
|
let slot_config = SlotConfig {
|
||||||
|
zero_time: 1596059091000, // Mainnet network
|
||||||
|
slot_length: 1000,
|
||||||
|
};
|
||||||
|
|
||||||
|
let costs: Vec<i64> = vec![
|
||||||
|
197209, 0, 1, 1, 396231, 621, 0, 1, 150000, 1000, 0, 1, 150000, 32, 2477736, 29175, 4,
|
||||||
|
29773, 100, 29773, 100, 29773, 100, 29773, 100, 29773, 100, 29773, 100, 100, 100, 29773,
|
||||||
|
100, 150000, 32, 150000, 32, 150000, 32, 150000, 1000, 0, 1, 150000, 32, 150000, 1000, 0,
|
||||||
|
8, 148000, 425507, 118, 0, 1, 1, 150000, 1000, 0, 8, 150000, 112536, 247, 1, 150000, 10000,
|
||||||
|
1, 136542, 1326, 1, 1000, 150000, 1000, 1, 150000, 32, 150000, 32, 150000, 32, 1, 1,
|
||||||
|
150000, 1, 150000, 4, 103599, 248, 1, 103599, 248, 1, 145276, 1366, 1, 179690, 497, 1,
|
||||||
|
150000, 32, 150000, 32, 150000, 32, 150000, 32, 150000, 32, 150000, 32, 148000, 425507,
|
||||||
|
118, 0, 1, 1, 61516, 11218, 0, 1, 150000, 32, 148000, 425507, 118, 0, 1, 1, 148000, 425507,
|
||||||
|
118, 0, 1, 1, 2477736, 29175, 4, 0, 82363, 4, 150000, 5000, 0, 1, 150000, 32, 197209, 0, 1,
|
||||||
|
1, 150000, 32, 150000, 32, 150000, 32, 150000, 32, 150000, 32, 150000, 32, 150000, 32,
|
||||||
|
3345831, 1, 1,
|
||||||
|
];
|
||||||
|
|
||||||
|
let cost_mdl = CostMdls {
|
||||||
|
plutus_v1: Some(costs),
|
||||||
|
plutus_v2: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let initial_budget = ExBudget {
|
||||||
|
cpu: 10000000000,
|
||||||
|
mem: 14000000,
|
||||||
|
};
|
||||||
|
|
||||||
|
let multi_era_tx = MultiEraTx::decode(Era::Babbage, &tx_bytes)
|
||||||
|
.or_else(|_| MultiEraTx::decode(Era::Alonzo, &tx_bytes))
|
||||||
|
.unwrap();
|
||||||
|
match multi_era_tx {
|
||||||
|
MultiEraTx::Babbage(tx) => {
|
||||||
|
let redeemers = eval_phase_two(
|
||||||
|
&tx,
|
||||||
|
&utxos,
|
||||||
|
Some(&cost_mdl),
|
||||||
|
Some(&initial_budget),
|
||||||
|
&slot_config,
|
||||||
|
false,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
println!("{:?}", redeemers.len());
|
||||||
|
|
||||||
|
let total_budget_used =
|
||||||
|
redeemers
|
||||||
|
.iter()
|
||||||
|
.fold(ExBudget { mem: 0, cpu: 0 }, |accum, curr| ExBudget {
|
||||||
|
mem: accum.mem + curr.ex_units.mem as i64,
|
||||||
|
cpu: accum.cpu + curr.ex_units.steps as i64,
|
||||||
|
});
|
||||||
|
|
||||||
|
println!("{:?}", total_budget_used);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
total_budget_used,
|
||||||
|
// Numbers came uplc evaluate
|
||||||
|
ExBudget {
|
||||||
|
cpu: 40211433,
|
||||||
|
mem: 114126
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
_ => unreachable!(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_eval_7() {
|
||||||
|
/*
|
||||||
|
|
||||||
|
Haskell PLC: (_, _)
|
||||||
|
Aiken PLC: (_,_)
|
||||||
|
|
||||||
|
Plutus V1
|
||||||
|
|
||||||
|
Helios script:
|
||||||
|
|
||||||
|
func main(ctx: ScriptContext) -> Bool {ctx.tx.fee == ctx.tx.fee}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
let tx_bytes = hex::decode("84a80082825820f375a19211ee8ce75b8306a2604e2a0e8c50dfae7a103dd3688f980bec5e29b200825820c5bc1437117c200f325467dcede3c09fbfca32f9fe399bd40c778ab2fa832f43010182825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d5821a00111958a1581c366b596f230f1f7002b5a7a63c3fc6be4ef4e3ab81aae50824f78f52a1400a825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a0060019e021a0003d41009a1581c366b596f230f1f7002b5a7a63c3fc6be4ef4e3ab81aae50824f78f52a1400a0b58204d87ff063c986ace7ca9fb756623f2125e7270c6934724f4cef6ae181d59cf650d81825820f375a19211ee8ce75b8306a2604e2a0e8c50dfae7a103dd3688f980bec5e29b20110825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a054a2fa2111a0005be18a30081825820065dd553fbe4e240a8f819bb9e333a7483de4a22b65c7fb6a95ce9450f84dff75840bb436c43e52cf56c75c551c65c25b10e6ef864ded07742bc2bca8ee20c29bad00d2016e265d15b614fa486b912443e3206a2ca19cca5d9a7c0ff08124a821f0e038159045a590457010000332232323232323222323232325335001100c1326320083357389201035054350000c3353235001220013553353333333574800846666ae68cdc39aab9d5004480008cccd55cfa8021280791999aab9f500425010233335573e6ae89401494cd54cd4c8c8c8c8c8c8c8c8c8c8c8c8ccccccd5d200611999ab9a3370e6aae7540312000233335573ea0184a04046666aae7d4030940848cccd55cfa8061281111999aab9f500c25023233335573ea0184a04846666aae7d4030940948cccd55cfa8061281311999aab9f500c25027233335573ea0184a05046666aae7d4030940a48cccd55cf9aba2500d2533553355335533553355335533533355025028335502502802735742a028426a05866644444444424666666666600201401201001600e00c00a0080060046ae854060d5d0a80b9aba150161502a213502c300135742a0282a054426a05860026ae85404c540a884d40b0c004d5d0a8090a815109a81618009aba150111502a213502c300135742a0202a054426a05860026ae85403c540a8940a80a009c09809409008c08808408007c0789407c060940789407894078940780704d5d1280089aba25001135744a00226ae8940044d5d1280089aba25001135744a00226ae8940044d5d1280089aab9e5001137540026ae85401c84d404c848cc00400c00854044854cd4c8c8c8c8ccccccd5d200211999ab9a3370ea004900111999aab9f500425019233335573e6ae89401494cd4c8c8c8c8ccccccd5d200211999ab9a3370e6aae7540112000233335573ea0084a04246666aae7d4010940888cccd55cf9aba25005253353232323333333574800646666ae68cdc39aab9d5003480008cccd55cfa8019281491999aab9f35744a0084a66a60506ae85401484d40b0004540a8940a80a009c940a00849409c9409c9409c9409c0944d55cf280089baa00135742a00e42a66a60426ae85401c84d409848cc00400c008540905408c9408c08408007c940800649407c9407c9407c9407c0744d5d1280089aab9e5001137540026ae85401884d4070488c00400c540689406806005c8cccd5cd19b875003480008cccd55cfa8029280d11999aab9f35744a00c4a66a60326ae85401c84d4074488c00800c5406c9406c064060940640480449405c9405c9405c9405c0544d55cea80109aab9e5001137540026ae85401c84d4050c00800454048540449404403c0380349403801c9403494034940349403402c8448c0040085880048488008984d5d1280089aab9e5001137540029308911911999999aba4001550052533530033756004426a0180022a014aa00aaa00aaa00a010640026460020024464646666aae7c00c8d403448800894cd4c01cd55cea80110a99a98039aab9e500321533530053574400c426a02024466002246600200c00a0062a01c2a01a2a01801426ae84008c00800844940148ccccccd5d200092802928029280291a8031bad002250050032333333357480024a0084a0084a0084a00846a00a6eb80080084800448488c00800c44880050581840100d87980821a0003b9f01a0675391df5f6").unwrap();
|
||||||
|
|
||||||
|
let raw_inputs = hex::decode("86825820a0bfcb30c19402a5bc79ecd33ddea4d67d8d6cb2ebe694c5ac2f14abc47092f400825820a0bfcb30c19402a5bc79ecd33ddea4d67d8d6cb2ebe694c5ac2f14abc47092f401825820cd3589fae0ae4ad33dbc8a8d99b4e99b4a78c2b0473040aab34da8e44fba9fa300825820f375a19211ee8ce75b8306a2604e2a0e8c50dfae7a103dd3688f980bec5e29b200825820f375a19211ee8ce75b8306a2604e2a0e8c50dfae7a103dd3688f980bec5e29b201825820c5bc1437117c200f325467dcede3c09fbfca32f9fe399bd40c778ab2fa832f4301").unwrap();
|
||||||
|
let raw_outputs = hex::decode("86825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a000f4240825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d5821a005da7c4ac581c1e852216c006c55490cd85b6e0ba523a37c2be3526f479e61cca41eba2444e616d6902454e616d693201581c21514b6c51f0aaa0c9c337329ce93c52fad208cfd0b4ccd51074d9dcab4d50494e4b44494e4f4331494439014d50494e4b44494e4f4332494439014d50494e4b44494e4f4333494439014d50494e4b44494e4f4334494439014d50494e4b44494e4f4335494439014d50494e4b44494e4f4336494439014d50494e4b44494e4f4337494439014d50494e4b44494e4f4338494439014d50494e4b44494e4f4339494439014e50494e4b44494e4f433130494439014e50494e4b44494e4f43313149443901581c321668648736a09a40bc3ef5fbd05590530be624e39af84fab3bc6bba84d435033503050726f6d6f333431014f4b696e67447572616e747574323531015053616d757257686950726f6d6f313933015143727970746f6d626f50726f6d6f3134360154536b756c6c62616c6c4c6f676f50726f6d6f35320155536b756c6c62616c6c4c6f676f50726f6d6f33313301581b425345647761726473536c616d6d696e48616e647330303034313201581c42697a61727265537461727344726561646c696f6e526f736533323401581c9ec93fd47d1e43ec5bb5dad70af92b6498b92d20d4325f9027ac4743a1574a6f736570684d6972616e64615754503030353754323601581ca7dc26584358f5ca8d99d7aa646a7b658120296a94588e1cefad8940a157546573744e616d69467269656e645368696e794a50454701581cbc5a0f0f3f1bfa92286410388c54655687bb518f47e12b88c0d0728ca14b566563746f724669656c6401581cc4c00fbd8fa227442a5e7cdecde33b24588494d05a2c50fda8938c6da1444b49445a19c346581cd068fe47123ec4c86460eeb74c7d7765c67d2df295a3ac86d664ed45a156506c757475734669727374436c61737350686f746f3101581cd3b65744dd067fd7103cc6a4019cc9cd5f8627b78174c05dc67a9ad6a1544c696665496e4c6f636b646f776e53314d31503201581cd973d8df645da318bb331dbe4af8eb0270079470225d955c6183445ca15148617070794269727468646179416c657301581cdf9974c2192744f3b6dac92990769fe26c36b0ac8bcc623fb457a45da14d575450303035466c796572323401581cee47c1521b55a006c345f739f084f5c205aeb295e3e42fa66b9d1dd2a151446965666e6643727970746f6e6965726505825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a000f4240825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a004c4b40825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a054fedba825839010af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a0028a3c6").unwrap();
|
||||||
|
|
||||||
|
let inputs = MaybeIndefArray::<TransactionInput>::decode_fragment(&raw_inputs).unwrap();
|
||||||
|
let outputs = MaybeIndefArray::<TransactionOutput>::decode_fragment(&raw_outputs).unwrap();
|
||||||
|
|
||||||
|
let utxos: MaybeIndefArray<ResolvedInput> = MaybeIndefArray::Indef(
|
||||||
|
inputs
|
||||||
|
.iter()
|
||||||
|
.zip(outputs.iter())
|
||||||
|
.map(|(input, output)| ResolvedInput {
|
||||||
|
input: input.clone(),
|
||||||
|
output: output.clone(),
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
|
);
|
||||||
|
|
||||||
|
let slot_config = SlotConfig {
|
||||||
|
zero_time: 1596059091000, // Mainnet network
|
||||||
|
slot_length: 1000,
|
||||||
|
};
|
||||||
|
|
||||||
|
let costs: Vec<i64> = vec![
|
||||||
|
197209, 0, 1, 1, 396231, 621, 0, 1, 150000, 1000, 0, 1, 150000, 32, 2477736, 29175, 4,
|
||||||
|
29773, 100, 29773, 100, 29773, 100, 29773, 100, 29773, 100, 29773, 100, 100, 100, 29773,
|
||||||
|
100, 150000, 32, 150000, 32, 150000, 32, 150000, 1000, 0, 1, 150000, 32, 150000, 1000, 0,
|
||||||
|
8, 148000, 425507, 118, 0, 1, 1, 150000, 1000, 0, 8, 150000, 112536, 247, 1, 150000, 10000,
|
||||||
|
1, 136542, 1326, 1, 1000, 150000, 1000, 1, 150000, 32, 150000, 32, 150000, 32, 1, 1,
|
||||||
|
150000, 1, 150000, 4, 103599, 248, 1, 103599, 248, 1, 145276, 1366, 1, 179690, 497, 1,
|
||||||
|
150000, 32, 150000, 32, 150000, 32, 150000, 32, 150000, 32, 150000, 32, 148000, 425507,
|
||||||
|
118, 0, 1, 1, 61516, 11218, 0, 1, 150000, 32, 148000, 425507, 118, 0, 1, 1, 148000, 425507,
|
||||||
|
118, 0, 1, 1, 2477736, 29175, 4, 0, 82363, 4, 150000, 5000, 0, 1, 150000, 32, 197209, 0, 1,
|
||||||
|
1, 150000, 32, 150000, 32, 150000, 32, 150000, 32, 150000, 32, 150000, 32, 150000, 32,
|
||||||
|
3345831, 1, 1,
|
||||||
|
];
|
||||||
|
|
||||||
|
let cost_mdl = CostMdls {
|
||||||
|
plutus_v1: Some(costs),
|
||||||
|
plutus_v2: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let initial_budget = ExBudget {
|
||||||
|
cpu: 10000000000,
|
||||||
|
mem: 14000000,
|
||||||
|
};
|
||||||
|
|
||||||
|
let multi_era_tx = MultiEraTx::decode(Era::Babbage, &tx_bytes)
|
||||||
|
.or_else(|_| MultiEraTx::decode(Era::Alonzo, &tx_bytes))
|
||||||
|
.unwrap();
|
||||||
|
match multi_era_tx {
|
||||||
|
MultiEraTx::Babbage(tx) => {
|
||||||
|
let redeemers = eval_phase_two(
|
||||||
|
&tx,
|
||||||
|
&utxos,
|
||||||
|
Some(&cost_mdl),
|
||||||
|
Some(&initial_budget),
|
||||||
|
&slot_config,
|
||||||
|
false,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
println!("{:?}", redeemers.len());
|
||||||
|
|
||||||
|
let total_budget_used =
|
||||||
|
redeemers
|
||||||
|
.iter()
|
||||||
|
.fold(ExBudget { mem: 0, cpu: 0 }, |accum, curr| ExBudget {
|
||||||
|
mem: accum.mem + curr.ex_units.mem as i64,
|
||||||
|
cpu: accum.cpu + curr.ex_units.steps as i64,
|
||||||
|
});
|
||||||
|
|
||||||
|
println!("{:?}", total_budget_used);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
total_budget_used,
|
||||||
|
// Numbers came uplc evaluate
|
||||||
|
ExBudget {
|
||||||
|
cpu: 40211433,
|
||||||
|
mem: 114126
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
_ => unreachable!(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn eval_missing_redeemer() {
|
fn eval_missing_redeemer() {
|
||||||
let tx_bytes = hex::decode("84a30082825820275b5da338c8b899035081eb34bfa950b634911a5dd3271b3ad6cf4c2bba0c5000825820275b5da338c8b899035081eb34bfa950b634911a5dd3271b3ad6cf4c2bba0c50010181825839000af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a02cf47c8021a00028d89a1068149480100002221200101f5f6").unwrap();
|
let tx_bytes = hex::decode("84a30082825820275b5da338c8b899035081eb34bfa950b634911a5dd3271b3ad6cf4c2bba0c5000825820275b5da338c8b899035081eb34bfa950b634911a5dd3271b3ad6cf4c2bba0c50010181825839000af00cc47500bb64cfffb783e8c42f746b4e8b8a70ede9c08c7113acf3bde34d1041f5a2076ef9aa6cf4539ab1a96ed462a0300acbdb65d51a02cf47c8021a00028d89a1068149480100002221200101f5f6").unwrap();
|
||||||
|
|
Loading…
Reference in New Issue