Add new context test for datums and reference scripts
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
use aiken/builtin
|
||||
use aiken/dict
|
||||
use aiken/hash.{blake2b_256}
|
||||
use aiken/list
|
||||
use aiken/transaction.{DatumHash, InlineDatum, ScriptContext}
|
||||
use aiken/transaction/credential.{Inline, VerificationKeyCredential}
|
||||
|
||||
fn spend(datum: Data, _redeemer: Data, ctx: ScriptContext) {
|
||||
[
|
||||
assert_datum(datum),
|
||||
assert_datums(ctx.transaction.datums),
|
||||
assert_outputs(ctx.transaction.outputs),
|
||||
]
|
||||
|> list.and
|
||||
}
|
||||
|
||||
fn assert_datum(datum) {
|
||||
let my_datum: Data = Void
|
||||
datum == my_datum
|
||||
}
|
||||
|
||||
type MyDatum {
|
||||
MyDatum(Int)
|
||||
}
|
||||
|
||||
fn assert_datums(datums) {
|
||||
let my_datum = MyDatum(42)
|
||||
|
||||
expect Some(datum) =
|
||||
dict.get(datums, blake2b_256(builtin.serialise_data(my_datum)))
|
||||
|
||||
expect datum: MyDatum = datum
|
||||
|
||||
my_datum == datum && dict.size(datums) == 2
|
||||
}
|
||||
|
||||
fn assert_outputs(outputs) {
|
||||
when outputs is {
|
||||
[output_1, output_2, ..] ->
|
||||
assert_first_output(output_1) && assert_second_output(output_2)
|
||||
_ -> error("expected transaction to have (at least) 2 outputs")
|
||||
}
|
||||
}
|
||||
|
||||
fn assert_first_output(output) {
|
||||
[
|
||||
output.datum == DatumHash(
|
||||
#"fcaa61fb85676101d9e3398a484674e71c45c3fd41b492682f3b0054f4cf3273",
|
||||
),
|
||||
output.reference_script == Some(
|
||||
#"e37db487fbd58c45d059bcbf5cd6b1604d3bec16cf888f1395a4ebc4",
|
||||
),
|
||||
]
|
||||
|> list.and
|
||||
}
|
||||
|
||||
fn assert_second_output(output) {
|
||||
[
|
||||
output.address.stake_credential == Some(
|
||||
Inline(
|
||||
VerificationKeyCredential(
|
||||
#"66666666666666666666666666666666666666666666666666666666",
|
||||
))
|
||||
)
|
||||
,
|
||||
when output.datum is {
|
||||
InlineDatum(_) -> True
|
||||
_ -> error("expected inline datum")
|
||||
},
|
||||
]
|
||||
|> list.and
|
||||
}
|
||||
Reference in New Issue
Block a user