Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

quest_adapter.gno

1.78 Kb · 29 lines
 1// Closed, fixed-target quest authority adapter. Never recover dispatch failures.
 2package memba_dao
 3
 4import (
 5    "gno.land/p/samcrew/memba_weighted_host"
 6    "gno.land/r/samcrew/memba_quest_attestation_v1"
 7)
 8func questState() memba_weighted_host.QuestState {
 9    return memba_weighted_host.QuestState{Owner:address(memba_quest_attestation_v1.GetOwner()),PendingOwner:address(memba_quest_attestation_v1.GetPendingOwner()),Signer:memba_quest_attestation_v1.GetSigner()}
10}
11func ProposeQuestAccept(cur realm) uint64 { return host.ProposeQuest(questPolicy.Accept(),questState(),cur) }
12func ProposeQuestSigner(cur realm, key string) uint64 { return host.ProposeQuest(memba_weighted_host.QuestSigner(key),questState(),cur) }
13func ProposeQuestReturn(cur realm) uint64 { return host.ProposeQuest(questPolicy.Return(),questState(),cur) }
14func ProposeQuestAbortReturn(cur realm) uint64 { return host.ProposeQuest(questPolicy.AbortReturn(),questState(),cur) }
15func executeQuest(cur realm,id uint64) {
16    before:=questState();a:=host.ConsumeQuest(id,before,cur);expected:=before
17    switch a.Kind() {
18    case memba_weighted_host.QuestAcceptOwner:
19        expected.Owner=questPolicy.DAO();expected.PendingOwner="";memba_quest_attestation_v1.AcceptOwnership(cross(cur))
20    case memba_weighted_host.QuestSetSigner:
21        expected.Signer=a.Key();memba_quest_attestation_v1.SetSigner(cross(cur),a.Key())
22    case memba_weighted_host.QuestReturnOwner:
23        expected.PendingOwner=a.Recipient();memba_quest_attestation_v1.TransferOwnership(cross(cur),a.Recipient())
24    case memba_weighted_host.QuestAbortReturn:
25        expected.PendingOwner="";memba_quest_attestation_v1.CancelOwnershipTransfer(cross(cur))
26    default:panic("unsupported quest action")
27    }
28    if questState()!=expected { panic("quest postcondition mismatch") }
29}