use aiken/dict use aiken/transaction.{Mint, ScriptContext} use aiken/transaction/value validator { fn mint(redeemer: Data, ctx: ScriptContext) { and { assert_purpose(ctx), assert_mint(ctx.purpose, ctx.transaction), assert_redeemers(ctx, redeemer), } } } fn assert_purpose(ctx) { expect [my_policy_id] = ctx.transaction.mint |> value.from_minted_value |> value.without_lovelace |> value.policies expect Mint(policy_id) = ctx.purpose my_policy_id == policy_id } fn assert_mint(purpose, transaction) { expect Mint(policy_id) = purpose let tokens = value.tokens(transaction.mint |> value.from_minted_value, policy_id) when dict.get(tokens, #"666f6f") is { None -> fail @"token not found" Some(quantity) -> quantity == 1337 } } fn assert_redeemers(ctx, my_redeemer) { expect Some(redeemer) = dict.get(ctx.transaction.redeemers, ctx.purpose) my_redeemer == redeemer && dict.size(ctx.transaction.redeemers) == 1 }