test 'mint' purpose and script context creation.

Alongside a bunch of other stuff from the coverage list. In
  particular, the mint transaction contains:

  - reference inputs
  - multiple outputs, with assets, and type-0, type-1 and type-6
    addresses.
  - an output with a datum hash
  - an output with an inline script
  - carries an extra datum witness, preimage of the embedded hash
  - mint, with 2 policies purposely ordered wrongly, with 1 and 2
    assets purposely ordered wrong. One of the mint is actually a
    burn (i.e. negative quantity)
This commit is contained in:
KtorZ
2024-08-10 15:56:53 +02:00
parent eea8dc7d0a
commit 6b6bace8a5
9 changed files with 2467 additions and 38 deletions

View File

@@ -968,7 +968,7 @@ mod tests {
}
#[test]
fn tx_to_plutus_data() {
fn script_context_simple_send() {
let datum = Some(Data::constr(0, Vec::new()));
let redeemer = Redeemer {
@@ -1005,4 +1005,64 @@ mod tests {
// from the Haskell ledger / cardano node.
insta::assert_debug_snapshot!(script_context.to_plutus_data())
}
#[test]
fn script_context_mint() {
let redeemer = Redeemer {
tag: RedeemerTag::Mint,
index: 1,
data: Data::integer(42.into()),
ex_units: ExUnits {
mem: 1000000,
steps: 100000000,
},
};
let script_context = fixture_tx_info(
"84a9008182582000000000000000000000000000000000000000000000000000\
00000000000000000183a300581d600000000000000000000000000000000000\
0000000000000000000000011a000f42400282005820923918e403bf43c34b4e\
f6b48eb2ee04babed17320d8d1b9ff9ad086e86f44eca2005839000000000000\
0000000000000000000000000000000000000000000000000000000000000000\
0000000000000000000000000000000000000001821a000f4240a2581c12593b\
4cbf7fdfd8636db99fe356437cd6af8539aadaa0a401964874a14474756e611b\
00005af3107a4000581c0c8eaf490c53afbf27e3d84a3b57da51fbafe5aa7844\
3fcec2dc262ea14561696b656e182aa300583910000000000000000000000000\
0000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000001821a000f4240a1581c0c8eaf490c53afbf27e3\
d84a3b57da51fbafe5aa78443fcec2dc262ea14763617264616e6f0103d81847\
82034463666f6f02182a09a2581c12593b4cbf7fdfd8636db99fe356437cd6af\
8539aadaa0a401964874a14474756e611b00005af3107a4000581c0c8eaf490c\
53afbf27e3d84a3b57da51fbafe5aa78443fcec2dc262ea24763617264616e6f\
014561696b656e2d0b5820ffffffffffffffffffffffffffffffffffffffffff\
ffffffffffffffffffffff0d8182582000000000000000000000000000000000\
00000000000000000000000000000000001082581d6000000000000000000000\
0000000000000000000000000000000000001a3b9aca00110112818258200000\
00000000000000000000000000000000000000000000000000000000000000a3\
0582840100d87980821a000f42401a05f5e100840101182a821a000f42401a05\
f5e1000481d879800782587d587b010100323232323232322533333300800115\
3330033370e900018029baa001153330073006375400224a6660089445261533\
0054911856616c696461746f722072657475726e65642066616c736500136560\
02002002002002002153300249010b5f746d70323a20566f696400165734ae71\
55ceaab9e5573eae915895589301010032323232323232253333330080011533\
30033370e900018029baa001153330073006375400224a666008a6600a920110\
5f5f5f5f5f6d696e745f325f5f5f5f5f0014a22930a99802a4811856616c6964\
61746f722072657475726e65642066616c736500136560020020020020020021\
53300249010b5f746d70323a20566f696400165734ae7155ceaab9e5573eae91\
f5f6",
"8182582000000000000000000000000000000000000000000000000000000000\
0000000000",
"81a200581d600000000000000000000000000000000000000000000000000000\
0000011a000f4240",
)
.into_script_context(&redeemer, None)
.unwrap();
// NOTE: The initial snapshot has been generated using the Haskell
// implementation of the ledger library for that same serialized
// transactions. It is meant to control that our construction of the
// script context and its serialization matches exactly those
// from the Haskell ledger / cardano node.
insta::assert_debug_snapshot!(script_context.to_plutus_data());
}
}

View File

@@ -0,0 +1,641 @@
---
source: crates/uplc/src/tx/script_context.rs
expression: script_context.to_plutus_data()
---
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
Array(
[
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
BoundedBytes(
BoundedBytes(
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
],
),
),
BigInt(
Int(
Int(
Int {
neg: false,
val: 0,
},
),
),
),
],
},
),
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 122,
any_constructor: None,
fields: [
BoundedBytes(
BoundedBytes(
[
57,
244,
127,
211,
179,
136,
239,
83,
196,
143,
8,
222,
36,
118,
109,
62,
85,
218,
222,
108,
174,
144,
140,
194,
78,
15,
79,
62,
],
),
),
],
},
),
Constr(
Constr {
tag: 122,
any_constructor: None,
fields: [],
},
),
],
},
),
Map(
Def(
[
(
BoundedBytes(
BoundedBytes(
[],
),
),
Map(
Def(
[
(
BoundedBytes(
BoundedBytes(
[],
),
),
BigInt(
Int(
Int(
Int {
neg: false,
val: 1000000000,
},
),
),
),
),
],
),
),
),
],
),
),
Constr(
Constr {
tag: 123,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [],
},
),
],
},
),
Constr(
Constr {
tag: 122,
any_constructor: None,
fields: [],
},
),
],
},
),
],
},
),
],
),
Array(
[],
),
Array(
[
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
BoundedBytes(
BoundedBytes(
[
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
],
),
),
],
},
),
Constr(
Constr {
tag: 122,
any_constructor: None,
fields: [],
},
),
],
},
),
Map(
Def(
[
(
BoundedBytes(
BoundedBytes(
[],
),
),
Map(
Def(
[
(
BoundedBytes(
BoundedBytes(
[],
),
),
BigInt(
Int(
Int(
Int {
neg: false,
val: 1000000000,
},
),
),
),
),
],
),
),
),
],
),
),
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [],
},
),
Constr(
Constr {
tag: 122,
any_constructor: None,
fields: [],
},
),
],
},
),
],
),
BigInt(
Int(
Int(
Int {
neg: false,
val: 42,
},
),
),
),
Map(
Def(
[],
),
),
Array(
[],
),
Map(
Def(
[],
),
),
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [],
},
),
Constr(
Constr {
tag: 122,
any_constructor: None,
fields: [],
},
),
],
},
),
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 123,
any_constructor: None,
fields: [],
},
),
Constr(
Constr {
tag: 122,
any_constructor: None,
fields: [],
},
),
],
},
),
],
},
),
Array(
[],
),
Map(
Def(
[
(
Constr(
Constr {
tag: 122,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
BoundedBytes(
BoundedBytes(
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
],
),
),
BigInt(
Int(
Int(
Int {
neg: false,
val: 0,
},
),
),
),
],
},
),
],
},
),
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [],
},
),
),
],
),
),
Map(
Def(
[],
),
),
BoundedBytes(
BoundedBytes(
[
120,
236,
20,
142,
166,
71,
207,
153,
105,
68,
104,
145,
175,
49,
147,
156,
93,
87,
178,
117,
162,
69,
87,
6,
120,
44,
97,
131,
239,
11,
98,
241,
],
),
),
Map(
Def(
[],
),
),
Array(
[],
),
Constr(
Constr {
tag: 122,
any_constructor: None,
fields: [],
},
),
Constr(
Constr {
tag: 122,
any_constructor: None,
fields: [],
},
),
],
},
),
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [],
},
),
Constr(
Constr {
tag: 122,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
BoundedBytes(
BoundedBytes(
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
],
),
),
BigInt(
Int(
Int(
Int {
neg: false,
val: 0,
},
),
),
),
],
},
),
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [
Constr(
Constr {
tag: 121,
any_constructor: None,
fields: [],
},
),
],
},
),
],
},
),
],
},
)