aiken/examples/acceptance_tests/089/validators/test2.ak

73 lines
1.9 KiB
Plaintext

use aiken/list
use aiken/transaction.{
Input, Mint, NoDatum, Output, OutputReference, ScriptContext, Transaction,
TransactionId,
}
use aiken/transaction/credential.{Address, VerificationKeyCredential}
use aiken/transaction/value
pub const own_hash = #"01020304050607080910111213140102030405060708091011121314"
pub const other_hash =
#"02030405060708091011121314150203040506070809101112131415"
pub const beneficiary_keyhash =
#"03040506070809101112131415160304050607080910111213141516"
pub fn beneficiary_address() {
keyhash_address(beneficiary_keyhash)
}
pub fn keyhash_address(keyhash: ByteArray) {
Address {
payment_credential: VerificationKeyCredential(keyhash),
stake_credential: None,
}
}
validator(utxo_ref: OutputReference) {
fn simple_oneshot(_r: Void, ctx: ScriptContext) -> Bool {
let ScriptContext { transaction, purpose } = ctx
let Transaction { inputs, .. } = transaction
expect Mint(_policy_id) = purpose
expect Some(_input) =
list.find(inputs, fn(input) { input.output_reference == utxo_ref })
let input =
list.find(inputs, fn(input) { input.output_reference == utxo_ref })
when input is {
Some(_) -> True
None -> False
}
}
}
test test_simple_oneshot() {
let output =
Output {
address: beneficiary_address(),
value: value.zero(),
datum: NoDatum,
reference_script: None,
}
let val =
value.from_asset(policy_id: own_hash, asset_name: "testtoken", quantity: 1)
let utxo =
OutputReference { transaction_id: TransactionId(""), output_index: 0 }
let input = Input { output_reference: utxo, output }
let tx =
Transaction {
..transaction.placeholder(),
mint: value.to_minted_value(val),
extra_signatories: [other_hash],
inputs: [input],
}
let context = ScriptContext { purpose: Mint(own_hash), transaction: tx }
simple_oneshot(utxo, Void, context) == True
}