Add script context translations for voting purpose.
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user