test: fix acceptance tests

This commit is contained in:
rvcas 2023-02-15 22:46:16 -05:00 committed by Lucas
parent 7b0faa7c1c
commit d41e6942c6
12 changed files with 109 additions and 105 deletions

View File

@ -5,8 +5,7 @@
}, },
"validators": [ "validators": [
{ {
"title": "spend", "title": "spend.spend",
"purpose": "spend",
"datum": { "datum": {
"title": "Data", "title": "Data",
"description": "Any Plutus data." "description": "Any Plutus data."
@ -19,8 +18,7 @@
"hash": "3f46b921ead33594e1da4afa1f1ba31807c0d8deca029f96fe9fe394" "hash": "3f46b921ead33594e1da4afa1f1ba31807c0d8deca029f96fe9fe394"
}, },
{ {
"title": "spend", "title": "spend.mint",
"purpose": "mint",
"redeemer": { "redeemer": {
"title": "Unit", "title": "Unit",
"description": "The nullary constructor.", "description": "The nullary constructor.",

View File

@ -12,16 +12,15 @@ pub fn has_policy_id(self: Output, policy_id: PolicyId) -> Bool {
|> not |> not
} }
pub fn spend(_datum: Data, _redeemer: Data, ctx: ScriptContext) -> Bool { validator spend {
fn(_datum: Data, _redeemer: Data, ctx: ScriptContext) -> Bool {
ctx.transaction.outputs ctx.transaction.outputs
|> list.any(has_policy_id(_, my_policy_id)) |> list.any(has_policy_id(_, my_policy_id))
}
} }
fn mint( validator mint(output_reference: OutputReference) {
output_reference: OutputReference, fn(_redeemer: Void, ctx: ScriptContext) -> Bool {
_redeemer: Void,
ctx: ScriptContext,
) -> Bool {
when when
list.find( list.find(
ctx.transaction.inputs, ctx.transaction.inputs,
@ -31,4 +30,5 @@ fn mint(
Some(_) -> True Some(_) -> True
None -> False None -> False
} }
}
} }

View File

@ -5,8 +5,7 @@
}, },
"validators": [ "validators": [
{ {
"title": "foo", "title": "foo.spend",
"purpose": "spend",
"datum": { "datum": {
"title": "Unit", "title": "Unit",
"description": "The nullary constructor.", "description": "The nullary constructor.",

View File

@ -1,5 +1,7 @@
fn spend(_datum: Void, _redeemer: Void, _ctx: Void) -> Bool { validator spend {
fn(_datum: Void, _redeemer: Void, _ctx: Void) -> Bool {
True True
}
} }
test foo() { test foo() {

View File

@ -5,8 +5,7 @@
}, },
"validators": [ "validators": [
{ {
"title": "foo", "title": "foo.spend",
"purpose": "spend",
"datum": { "datum": {
"title": "Data", "title": "Data",
"description": "Any Plutus data." "description": "Any Plutus data."

View File

@ -4,6 +4,8 @@ fn when_tuple(a: (Int, Int)) -> Int {
} }
} }
pub fn spend(a: Data, b: Data, c) -> Bool { validator spend {
fn(a: Data, b: Data, c) -> Bool {
when_tuple((4, 1)) == 4 when_tuple((4, 1)) == 4
}
} }

View File

@ -5,8 +5,20 @@
}, },
"validators": [ "validators": [
{ {
"title": "withdrawals", "title": "deploy.spend",
"purpose": "spend", "datum": {
"title": "Data",
"description": "Any Plutus data."
},
"redeemer": {
"title": "Data",
"description": "Any Plutus data."
},
"compiledCode": "5904b001000032323232323232323232322225333006323232323230020013301033300a32323375e0040026601893260103d87980000074c103d87a80004c0103d87980003301033300a32323232323232330123253330123370e002900009919299980c980e0010a4c2a6602c921364c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2069742065787065637465640016375a603400260180042a660289212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630143754002a66602266ebd30106d8799f182aff0000113370e64600a00200690020a50301700130093253330103370e900018099baa0011001153301249012a4173736572746564206f6e20696e636f727265637420636f6e7374727563746f722076617269616e742e00163322330060020010013237280026ecd30106d8799f182aff0037566600e60106600e6010012900024028600200244a6660260022900009919b8048008cc00c00c004c058004c0040048894ccc0480084cdd2a400497ae013232323253330113371e00a002266e952000330170024bd7009998038038018029bae30130033013002301600330140024c0103d87a80004c0103d87980003301033300a325333010001153300d4901316578706563746564207472616e73616374696f6e20746f206861766520286174206c65617374292032206f75747075747300161325333011001153300e4901316578706563746564207472616e73616374696f6e20746f206861766520286174206c65617374292032206f757470757473001613253330120011323232533301032323009001330173330113375e6601460160029002260126d87a9f5820fcaa61fb85676101d9e3398a484674e71c45c3fd41b492682f3b0054f4cf3273ff004c0103d87a80004c0103d8798000330173330113375e6601460160029003260122d8799f581ce37db487fbd58c45d059bcbf5cd6b1604d3bec16cf888f1395a4ebc4ff004c0103d87a80004c0103d87980004bd700018991918048009980b99980899baf3300a300b3300a300b0014800120024c012ad8799fd8799fd8799f581c66666666666666666666666666666666666666666666666666666666ffffff004c0103d87a80004c0103d879800033017333011323253330133370e0029002099251300d0021533015490115657870656374656420696e6c696e6520646174756d001630153754002660146016002900226103d87a80004c0103d87980004bd700010a50301700430150033014003153300f4901316578706563746564207472616e73616374696f6e20746f206861766520286174206c65617374292032206f757470757473001630140013013001375866006600866006600800a900024008980103d87a80004c0103d87980004bd7018008009129998078008a5113232533300c00213300400400114a0602600466e1d2002300d3754602200244646660020029000001911199980619b870040020132333004004337000069001180a800800918059baa001149858c0040048894ccc0240085261330053001300b002333003003300c0020015734ae6d5ce2ab9d5573caae7d5d02ba15745",
"hash": "40d205673f92b78edf545e560dcbbaa13e9e6b60bca1bebe70950efd"
},
{
"title": "withdrawals.spend",
"datum": { "datum": {
"title": "Unit", "title": "Unit",
"description": "The nullary constructor.", "description": "The nullary constructor.",
@ -33,18 +45,7 @@
"hash": "d728bee57cec0eeab091201017a43001978acda9c0957bae8c9704df" "hash": "d728bee57cec0eeab091201017a43001978acda9c0957bae8c9704df"
}, },
{ {
"title": "mint", "title": "basic.spend",
"purpose": "mint",
"redeemer": {
"title": "Data",
"description": "Any Plutus data."
},
"compiledCode": "59049e010000323232323232323232323222533300532323232323001003300100122533300f00114a226464a6660180042660080080022940c04c008cdc3a4004601a6ea8c044004cc034ccc01cc8c8c8c8c8c8c94ccc04cc0580084c8c8cdc78018009bae3016001300932533300f3370e900018091baa0011001153301149012a4173736572746564206f6e20696e636f727265637420636f6e7374727563746f722076617269616e742e00163300830090034800854cc0412401364c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2069742065787065637465640016375c602800264646464600c00200200264640026644660100040020029110000137566600c600e6600c600e00290002401000e600200244a666020002297ae01323232323301537520026600c00c0066eb8c04400cdd59808801180a0011809000980080091129998078010a5eb7bdb1804c8c8c8c94ccc038cdc7802800880189980a19bb037520026e98008ccc01c01c00c014dd718080019bab3010002301300330110024c103d87a80004c0103d87980003300d333007323232323322323232323253330123370e00290010a9980a2490f746f6b656e206e6f7420666f756e640016132323370e00290790a1bad301a001300d00230143754002664466010004002002910103666f6f0033223233223253330153370e00290010801099190009bab301d00130100033017375400400297adef6c6033223300b002001002001375666012601400690040009bae30150013008533300d3370e900018081baa0021002153300f49012a4173736572746564206f6e20696e636f727265637420636f6e7374727563746f722076617269616e742e001633005300600748008cc014c01801d20003001001222533301100213374a900125eb804c8c8c8c94ccc040cdc7802800899ba548000cc058dd400125eb804ccc01c01c00c014dd718090019bad3012002301500330130023001001222533300f00213374a900125eb804c8c8c8c94ccc038cdc7802800899ba548000cc050dd300125eb804ccc01c01c00c014dd718080019bab3010002301300330110024c103d87a80004c0103d87980003300d3330073232323233223232533300f3375e006002266e1cc8c018004dd5998049805198049805002240009009240042940c054004c020c94ccc038cdc3a400060226ea8004400454cc0412412a4173736572746564206f6e20696e636f727265637420636f6e7374727563746f722076617269616e742e001633223300700200137566600e60106600e60100049000240246600e6010004900100380418008009129998080008a400026466e0120023300300300130130013001001222533300f00213374a900125eb804c8c8c8c94ccc038cdd7802800899ba548000cc0500092f5c0266600e00e00600a6020006602000460260066022004980103d87a80004c0103d87980004bd701119199800800a4000006444666601666e1c0100080488ccc010010cdc0001a40046028002002460146ea8004526163001001222533300900214984cc014c004c02c008ccc00c00cc0300080055cd2b9b5738aae7555cf2ab9f5740ae855d11",
"hash": "c941d5e9386a58d33f19ed088fc631bf0ded090d148268803e3dce7b"
},
{
"title": "basic",
"purpose": "spend",
"datum": { "datum": {
"title": "Unit", "title": "Unit",
"description": "The nullary constructor.", "description": "The nullary constructor.",
@ -71,18 +72,13 @@
"hash": "dfee0efa0f0c05bf6f3b69d626911891396a6c21d50da7653ce91aac" "hash": "dfee0efa0f0c05bf6f3b69d626911891396a6c21d50da7653ce91aac"
}, },
{ {
"title": "deploy", "title": "mint.mint",
"purpose": "spend",
"datum": {
"title": "Data",
"description": "Any Plutus data."
},
"redeemer": { "redeemer": {
"title": "Data", "title": "Data",
"description": "Any Plutus data." "description": "Any Plutus data."
}, },
"compiledCode": "5904b001000032323232323232323232322225333006323232323230020013301033300a32323375e0040026601893260103d87980000074c103d87a80004c0103d87980003301033300a32323232323232330123253330123370e002900009919299980c980e0010a4c2a6602c921364c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2069742065787065637465640016375a603400260180042a660289212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630143754002a66602266ebd30106d8799f182aff0000113370e64600a00200690020a50301700130093253330103370e900018099baa0011001153301249012a4173736572746564206f6e20696e636f727265637420636f6e7374727563746f722076617269616e742e00163322330060020010013237280026ecd30106d8799f182aff0037566600e60106600e6010012900024028600200244a6660260022900009919b8048008cc00c00c004c058004c0040048894ccc0480084cdd2a400497ae013232323253330113371e00a002266e952000330170024bd7009998038038018029bae30130033013002301600330140024c0103d87a80004c0103d87980003301033300a325333010001153300d4901316578706563746564207472616e73616374696f6e20746f206861766520286174206c65617374292032206f75747075747300161325333011001153300e4901316578706563746564207472616e73616374696f6e20746f206861766520286174206c65617374292032206f757470757473001613253330120011323232533301032323009001330173330113375e6601460160029002260126d87a9f5820fcaa61fb85676101d9e3398a484674e71c45c3fd41b492682f3b0054f4cf3273ff004c0103d87a80004c0103d8798000330173330113375e6601460160029003260122d8799f581ce37db487fbd58c45d059bcbf5cd6b1604d3bec16cf888f1395a4ebc4ff004c0103d87a80004c0103d87980004bd700018991918048009980b99980899baf3300a300b3300a300b0014800120024c012ad8799fd8799fd8799f581c66666666666666666666666666666666666666666666666666666666ffffff004c0103d87a80004c0103d879800033017333011323253330133370e0029002099251300d0021533015490115657870656374656420696e6c696e6520646174756d001630153754002660146016002900226103d87a80004c0103d87980004bd700010a50301700430150033014003153300f4901316578706563746564207472616e73616374696f6e20746f206861766520286174206c65617374292032206f757470757473001630140013013001375866006600866006600800a900024008980103d87a80004c0103d87980004bd7018008009129998078008a5113232533300c00213300400400114a0602600466e1d2002300d3754602200244646660020029000001911199980619b870040020132333004004337000069001180a800800918059baa001149858c0040048894ccc0240085261330053001300b002333003003300c0020015734ae6d5ce2ab9d5573caae7d5d02ba15745", "compiledCode": "59049e010000323232323232323232323222533300532323232323001003300100122533300f00114a226464a6660180042660080080022940c04c008cdc3a4004601a6ea8c044004cc034ccc01cc8c8c8c8c8c8c94ccc04cc0580084c8c8cdc78018009bae3016001300932533300f3370e900018091baa0011001153301149012a4173736572746564206f6e20696e636f727265637420636f6e7374727563746f722076617269616e742e00163300830090034800854cc0412401364c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2069742065787065637465640016375c602800264646464600c00200200264640026644660100040020029110000137566600c600e6600c600e00290002401000e600200244a666020002297ae01323232323301537520026600c00c0066eb8c04400cdd59808801180a0011809000980080091129998078010a5eb7bdb1804c8c8c8c94ccc038cdc7802800880189980a19bb037520026e98008ccc01c01c00c014dd718080019bab3010002301300330110024c103d87a80004c0103d87980003300d333007323232323322323232323253330123370e00290010a9980a2490f746f6b656e206e6f7420666f756e640016132323370e00290790a1bad301a001300d00230143754002664466010004002002910103666f6f0033223233223253330153370e00290010801099190009bab301d00130100033017375400400297adef6c6033223300b002001002001375666012601400690040009bae30150013008533300d3370e900018081baa0021002153300f49012a4173736572746564206f6e20696e636f727265637420636f6e7374727563746f722076617269616e742e001633005300600748008cc014c01801d20003001001222533301100213374a900125eb804c8c8c8c94ccc040cdc7802800899ba548000cc058dd400125eb804ccc01c01c00c014dd718090019bad3012002301500330130023001001222533300f00213374a900125eb804c8c8c8c94ccc038cdc7802800899ba548000cc050dd300125eb804ccc01c01c00c014dd718080019bab3010002301300330110024c103d87a80004c0103d87980003300d3330073232323233223232533300f3375e006002266e1cc8c018004dd5998049805198049805002240009009240042940c054004c020c94ccc038cdc3a400060226ea8004400454cc0412412a4173736572746564206f6e20696e636f727265637420636f6e7374727563746f722076617269616e742e001633223300700200137566600e60106600e60100049000240246600e6010004900100380418008009129998080008a400026466e0120023300300300130130013001001222533300f00213374a900125eb804c8c8c8c94ccc038cdd7802800899ba548000cc0500092f5c0266600e00e00600a6020006602000460260066022004980103d87a80004c0103d87980004bd701119199800800a4000006444666601666e1c0100080488ccc010010cdc0001a40046028002002460146ea8004526163001001222533300900214984cc014c004c02c008ccc00c00cc0300080055cd2b9b5738aae7555cf2ab9f5740ae855d11",
"hash": "40d205673f92b78edf545e560dcbbaa13e9e6b60bca1bebe70950efd" "hash": "c941d5e9386a58d33f19ed088fc631bf0ded090d148268803e3dce7b"
} }
] ]
} }

View File

@ -29,7 +29,7 @@ if [ $? -ne 0 ]; then
exit $? exit $?
fi fi
BLUEPRINT=$(jq ".validators[] | select(.title == \"$TITLE\")" plutus.json) BLUEPRINT=$(jq ".validators[] | select(.title|contains(\"$TITLE\"))" plutus.json)
VALIDATOR_HASH=$(echo $BLUEPRINT | jq .hash | sed s/\"//g) VALIDATOR_HASH=$(echo $BLUEPRINT | jq .hash | sed s/\"//g)
VALIDATOR=$(echo $BLUEPRINT | jq .compiledCode | sed s/\"//g) VALIDATOR=$(echo $BLUEPRINT | jq .compiledCode | sed s/\"//g)

View File

@ -4,7 +4,8 @@ use aiken/transaction.{NoDatum, ScriptContext, Spend, TransactionId}
use aiken/transaction/credential.{VerificationKeyCredential} use aiken/transaction/credential.{VerificationKeyCredential}
use aiken/transaction/value use aiken/transaction/value
fn spend(_datum: Void, _redeemer: Void, ctx: ScriptContext) { validator spend {
fn(_datum: Void, _redeemer: Void, ctx: ScriptContext) {
[ [
assert_id(ctx.transaction), assert_id(ctx.transaction),
assert_purpose(ctx.purpose), assert_purpose(ctx.purpose),
@ -12,6 +13,7 @@ fn spend(_datum: Void, _redeemer: Void, ctx: ScriptContext) {
assert_fee(ctx.transaction), assert_fee(ctx.transaction),
] ]
|> list.and |> list.and
}
} }
fn assert_id(transaction) { fn assert_id(transaction) {
@ -26,7 +28,7 @@ fn assert_purpose(purpose) {
ref.transaction_id == TransactionId( ref.transaction_id == TransactionId(
#"0000000000000000000000000000000000000000000000000000000000000000", #"0000000000000000000000000000000000000000000000000000000000000000",
) && ref.output_index == 0 ) && ref.output_index == 0
_ -> error("script purpose isn't 'Spend'") _ -> error "script purpose isn't 'Spend'"
} }
} }
@ -47,6 +49,6 @@ fn assert_outputs(transaction) {
output.reference_script == None, output.reference_script == None,
] ]
|> list.and |> list.and
_ -> error("unexpected number of outputs") _ -> error "unexpected number of outputs"
} }
} }

View File

@ -5,13 +5,15 @@ use aiken/list
use aiken/transaction.{DatumHash, InlineDatum, ScriptContext} use aiken/transaction.{DatumHash, InlineDatum, ScriptContext}
use aiken/transaction/credential.{Inline, VerificationKeyCredential} use aiken/transaction/credential.{Inline, VerificationKeyCredential}
fn spend(datum: Data, _redeemer: Data, ctx: ScriptContext) { validator spend {
fn(datum: Data, _redeemer: Data, ctx: ScriptContext) {
[ [
assert_datum(datum), assert_datum(datum),
assert_datums(ctx.transaction.datums), assert_datums(ctx.transaction.datums),
assert_outputs(ctx.transaction.outputs), assert_outputs(ctx.transaction.outputs),
] ]
|> list.and |> list.and
}
} }
fn assert_datum(datum) { fn assert_datum(datum) {
@ -38,7 +40,7 @@ fn assert_outputs(outputs) {
when outputs is { when outputs is {
[output_1, output_2, ..] -> [output_1, output_2, ..] ->
assert_first_output(output_1) && assert_second_output(output_2) assert_first_output(output_1) && assert_second_output(output_2)
_ -> error("expected transaction to have (at least) 2 outputs") _ -> error "expected transaction to have (at least) 2 outputs"
} }
} }
@ -65,7 +67,7 @@ fn assert_second_output(output) {
), ),
when output.datum is { when output.datum is {
InlineDatum(_) -> True InlineDatum(_) -> True
_ -> error("expected inline datum") _ -> error "expected inline datum"
}, },
] ]
|> list.and |> list.and

View File

@ -3,13 +3,15 @@ use aiken/list
use aiken/transaction.{Mint, ScriptContext} use aiken/transaction.{Mint, ScriptContext}
use aiken/transaction/value use aiken/transaction/value
fn mint(redeemer: Data, ctx: ScriptContext) { validator mint {
fn(redeemer: Data, ctx: ScriptContext) {
[ [
assert_purpose(ctx), assert_purpose(ctx),
assert_mint(ctx.purpose, ctx.transaction), assert_mint(ctx.purpose, ctx.transaction),
assert_redeemers(ctx, redeemer), assert_redeemers(ctx, redeemer),
] ]
|> list.and |> list.and
}
} }
fn assert_purpose(ctx) { fn assert_purpose(ctx) {
@ -27,7 +29,7 @@ fn assert_mint(purpose, transaction) {
let tokens = value.tokens(transaction.mint, policy_id) let tokens = value.tokens(transaction.mint, policy_id)
when dict.get(tokens, #"666f6f") is { when dict.get(tokens, #"666f6f") is {
None -> error("token not found") None -> error "token not found"
Some(quantity) -> quantity == 1337 Some(quantity) -> quantity == 1337
} }
} }

View File

@ -5,7 +5,8 @@ use aiken/transaction/credential.{
Inline, ScriptCredential, VerificationKeyCredential, Inline, ScriptCredential, VerificationKeyCredential,
} }
fn spend(_datum: Void, _redeemer: Void, ctx: ScriptContext) { validator spend {
fn(_datum: Void, _redeemer: Void, ctx: ScriptContext) {
let alice = let alice =
Inline( Inline(
VerificationKeyCredential( VerificationKeyCredential(
@ -22,14 +23,15 @@ fn spend(_datum: Void, _redeemer: Void, ctx: ScriptContext) {
[ [
when dict.get(ctx.transaction.withdrawals, alice) is { when dict.get(ctx.transaction.withdrawals, alice) is {
None -> error("alice's withdrawal not found") None -> error "alice's withdrawal not found"
Some(value) -> value == 42 Some(value) -> value == 42
}, },
when dict.get(ctx.transaction.withdrawals, bob) is { when dict.get(ctx.transaction.withdrawals, bob) is {
None -> error("bob's withdrawal not found") None -> error "bob's withdrawal not found"
Some(value) -> value == 14 Some(value) -> value == 14
}, },
dict.keys(ctx.transaction.withdrawals) == [alice, bob], dict.keys(ctx.transaction.withdrawals) == [alice, bob],
] ]
|> list.and |> list.and
}
} }