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}