diff --git a/examples/gift_card/validators/multi.ak b/examples/gift_card/validators/multi.ak index 612043b1..e8847428 100644 --- a/examples/gift_card/validators/multi.ak +++ b/examples/gift_card/validators/multi.ak @@ -22,14 +22,11 @@ validator redeem(creator: ByteArray) { // Each spend input checks for a token name matching the datum being burned datum: SpendTokenName, _r: Data, - ctx: ScriptContext, + own_ref: OutputReference, + transaction: Transaction, ) { - let ScriptContext { transaction, purpose } = ctx - let Transaction { inputs, mint, .. } = transaction - expect Spend(own_ref) = purpose - expect Some(own_input) = list.find(inputs, fn(input) { input.output_reference == own_ref }) @@ -47,12 +44,7 @@ validator redeem(creator: ByteArray) { ) == -1 } - mint(rdmr: Action, ctx: ScriptContext) -> Bool { - // get values from transaction and purpose - let ScriptContext { transaction, purpose } = ctx - - expect tx.Mint(policy_id) = purpose - + mint(rdmr: Action, policy_id: PolicyId, transaction: Transaction) -> Bool { let Transaction { inputs, mint, extra_signatories, outputs, .. } = transaction @@ -65,14 +57,18 @@ validator redeem(creator: ByteArray) { when rdmr is { Mint(total) -> { expect [input, ..] = inputs + // Base is created from serializing a utxo ref being spent. Thus this guarantees a unique base let base = builtin.serialise_data(input.output_reference) + // Create a list of expected token names let expected_minted_token_names = create_expected_minted_nfts(base, total, []) + // Check contract creator is a signer of this tx let signature_check = list.any(extra_signatories, fn(n) { creator == n }) + // Support multiple gift card creation by allowing a // 'number of tokens minted' == 'outputs with datum being token name' signature_check && check_mint_and_outputs( diff --git a/examples/gift_card/validators/oneshot.ak b/examples/gift_card/validators/oneshot.ak index f1ba7843..784778cb 100644 --- a/examples/gift_card/validators/oneshot.ak +++ b/examples/gift_card/validators/oneshot.ak @@ -9,11 +9,7 @@ type Action { } validator gift_card(token_name: ByteArray, utxo_ref: OutputReference) { - mint(rdmr: Action, ctx: ScriptContext) -> Bool { - let ScriptContext { transaction, purpose } = ctx - - expect tx.Mint(policy_id) = purpose - + mint(rdmr: Action, policy_id: PolicyId, transaction: Transaction) -> Bool { let Transaction { inputs, mint, .. } = transaction expect [Pair(asset_name, amount)] = @@ -26,6 +22,7 @@ validator gift_card(token_name: ByteArray, utxo_ref: OutputReference) { Mint -> { expect Some(_input) = list.find(inputs, fn(input) { input.output_reference == utxo_ref }) + amount == 1 && asset_name == token_name } Burn -> amount == -1 && asset_name == token_name @@ -34,9 +31,7 @@ validator gift_card(token_name: ByteArray, utxo_ref: OutputReference) { } validator redeem(token_name: ByteArray, policy_id: ByteArray) { - spend(_d: Data, _r: Data, ctx: ScriptContext) -> Bool { - let ScriptContext { transaction, .. } = ctx - + spend(_d: Data, _r: Data, _o_ref: Data, transaction: Transaction) -> Bool { let Transaction { mint, .. } = transaction expect [Pair(asset_name, amount)] =