aiken/examples/acceptance_tests/script_context/v3/validators/voting.ak

84 lines
2.0 KiB
Plaintext

use aiken/collection/list
use cardano/credential.{Script, VerificationKey}
use cardano/governance.{
Abstain, ConstitutionalCommitteeMember, DelegateRepresentative,
GovernanceActionId, No, StakePool, Yes,
}
use cardano/transaction.{ScriptContext}
type Foo {
Foo(Int)
}
const only0s = #"00000000000000000000000000000000000000000000000000000000"
const only7s =
#"7777777777777777777777777777777777777777777777777777777777777777"
const only8s =
#"8888888888888888888888888888888888888888888888888888888888888888"
const only9s =
#"9999999999999999999999999999999999999999999999999999999999999999"
validator {
fn script(_tmp0: Void, ctx: ScriptContext) {
assert_redeemer(ctx.redeemer)
let votes = ctx.transaction.votes
expect Some(
Pair(ConstitutionalCommitteeMember(Script(..)),
[Pair(GovernanceActionId { transaction, proposal_procedure: 1 }, Yes)]),
) = list.at(votes, 0)
expect transaction == only9s
expect
Some(
Pair(ConstitutionalCommitteeMember(VerificationKey(only0s)),
[
Pair(GovernanceActionId {
transaction: only9s,
proposal_procedure: 152,
},
No),
]),
) == list.at(votes, 1)
expect Some(Pair(DelegateRepresentative(Script(..)), [_, ..])) =
list.at(votes, 2)
expect
Some(
Pair(DelegateRepresentative(VerificationKey(only0s)),
[
Pair(GovernanceActionId { transaction: only7s, proposal_procedure: 2 },
Abstain),
Pair(GovernanceActionId { transaction: only8s, proposal_procedure: 1 },
Abstain),
Pair(GovernanceActionId { transaction: only9s, proposal_procedure: 0 },
Abstain),
]),
) == list.at(votes, 3)
expect Some(Pair(StakePool(pool_id), [_, ..])) = list.at(votes, 4)
expect pool_id == only0s
True
}
}
fn assert_redeemer(data: Data) {
let is_valid =
if data is Foo(42): Foo {
True
} else if data is Void {
True
} else {
False
}
expect is_valid
Void
}