use aiken/collection/dict.{Dict}
use aiken/collection/list
use cardano/assets.{PolicyId, Value}
use cardano/credential
use cardano/transaction.{
DatumHash, Input, Mint, Minting, NoDatum, Output, OutputReference,
ScriptContext, ScriptInfo, ScriptPurpose, Transaction
}
const null28 = #"00000000000000000000000000000000000000000000000000000000"
const null32 =
#"0000000000000000000000000000000000000000000000000000000000000000"
const void_hash =
#"923918e403bf43c34b4ef6b48eb2ee04babed17320d8d1b9ff9ad086e86f44ec"
validator test_1 {
mint(_rdmr: Data, our_policy_id: PolicyId, transaction: Transaction) {
let other_policy_id = assert_redeemers(transaction.redeemers)
assert_outputs(transaction.outputs, our_policy_id, other_policy_id)
assert_mint(transaction.mint, our_policy_id, other_policy_id)
assert_reference_inputs(transaction.reference_inputs)
assert_datums(transaction.datums)
True
}
else(_ctx) {
fail
}
}
fn assert_reference_inputs(inputs: List) -> Void {
expect
[
Input {
output_reference: OutputReference {
transaction_id: null32,
output_index: 0,
},
output: Output {
address: credential.from_verification_key(null28),
value: assets.from_lovelace(1_000_000),
datum: NoDatum,
reference_script: None,
},
},
] == inputs
Void
}
fn assert_redeemers(redeemers: Pairs) -> PolicyId {
expect [Pair(Mint(other_policy_id), data), _] = redeemers
expect Void = data
other_policy_id
}
fn assert_datums(datums: Dict) -> Void {
let void: Data = Void
expect [Pair(void_hash, void)] == dict.to_pairs(datums)
Void
}
fn assert_outputs(
outputs: List