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

badges_adapter.gno

3.68 Kb · 72 lines
 1// Fixed badges administration and authority return. Operational badge minting
 2// remains with explicitly appointed admins; no arbitrary mint route is exposed.
 3package memba_dao
 4
 5import (
 6	"gno.land/p/samcrew/memba_weighted_host"
 7	"gno.land/r/samcrew/gnobuilders_badges_v2"
 8)
 9
10func badgesState(a memba_weighted_host.BadgesAction) memba_weighted_host.BadgesState {
11	owner := gnobuilders_badges_v2.GetOwner()
12	subject := false
13	if a.Subject() != "" { subject = gnobuilders_badges_v2.IsAdmin(a.Subject()) }
14	return memba_weighted_host.BadgesState{
15		Owner: owner, PendingOwner: gnobuilders_badges_v2.GetPendingOwner(),
16		Paused: gnobuilders_badges_v2.IsPaused(), AdminCount: gnobuilders_badges_v2.GetAdminCount(),
17		OwnerAdmin: gnobuilders_badges_v2.IsAdmin(owner), DAOAdmin: gnobuilders_badges_v2.IsAdmin(badgesPolicy.DAO()),
18		SuccessorAdmin: gnobuilders_badges_v2.IsAdmin(badgesPolicy.Successor()), SubjectAdmin: subject,
19	}
20}
21func proposeBadges(cur realm, a memba_weighted_host.BadgesAction) uint64 { return host.ProposeBadges(a, badgesState(a), cur) }
22func ProposeBadgesAccept(cur realm) uint64 { return proposeBadges(cur, badgesPolicy.Accept()) }
23func ProposeBadgesReturn(cur realm) uint64 { return proposeBadges(cur, badgesPolicy.Return()) }
24func ProposeBadgesAbortReturn(cur realm) uint64 { return proposeBadges(cur, badgesPolicy.AbortReturn()) }
25func ProposeBadgesAddAdmin(cur realm, who address) uint64 { return proposeBadges(cur, badgesPolicy.AddAdmin(who)) }
26func ProposeBadgesRemoveAdmin(cur realm, who address) uint64 { return proposeBadges(cur, memba_weighted_host.BadgesRevokeAdmin(who)) }
27func ProposeBadgesUnpause(cur realm) uint64 { return proposeBadges(cur, memba_weighted_host.BadgesResume()) }
28func EmergencyPauseBadges(cur realm) {
29	a := memba_weighted_host.BadgesResume()
30	before := badgesState(a)
31	host.PrepareBadgesEmergencyPause(before, cur)
32	expected := before
33	expected.Paused = true
34	gnobuilders_badges_v2.Pause(cross(cur))
35	if badgesState(a) != expected { panic("badges pause postcondition mismatch") }
36}
37func executeBadges(cur realm, id uint64) {
38	proposed := host.Proposal(id).BadgesAction
39	before := badgesState(proposed)
40	a := host.ConsumeBadges(id, before, cur)
41	expected := before
42	switch a.Kind() {
43	case memba_weighted_host.BadgesAcceptOwner:
44		expected.Owner = badgesPolicy.DAO()
45		expected.PendingOwner = ""
46		expected.OwnerAdmin = true
47		expected.DAOAdmin = true
48		if !before.DAOAdmin { expected.AdminCount++ }
49		if before.OwnerAdmin { expected.AdminCount-- }
50		if before.Owner == badgesPolicy.Successor() { expected.SuccessorAdmin = false }
51		gnobuilders_badges_v2.AcceptOwnership(cross(cur))
52	case memba_weighted_host.BadgesReturnOwner:
53		expected.PendingOwner = a.Recipient()
54		gnobuilders_badges_v2.TransferOwnership(cross(cur), a.Recipient())
55	case memba_weighted_host.BadgesAbortReturn:
56		expected.PendingOwner = ""
57		gnobuilders_badges_v2.CancelOwnershipTransfer(cross(cur))
58	case memba_weighted_host.BadgesUnpause:
59		expected.Paused = false
60		gnobuilders_badges_v2.Unpause(cross(cur))
61	case memba_weighted_host.BadgesAddAdmin, memba_weighted_host.BadgesRemoveAdmin:
62		grant := a.Kind() == memba_weighted_host.BadgesAddAdmin
63		expected.SubjectAdmin = grant
64		if grant { expected.AdminCount++ } else { expected.AdminCount-- }
65		if a.Subject() == badgesPolicy.Successor() { expected.SuccessorAdmin = grant }
66		if grant { gnobuilders_badges_v2.AddAdmin(cross(cur), a.Subject()) } else { gnobuilders_badges_v2.RemoveAdmin(cross(cur), a.Subject()) }
67	default:
68		panic("unsupported badges action")
69	}
70	if badgesState(a) != expected { panic("badges postcondition mismatch") }
71	if a.Kind() == memba_weighted_host.BadgesAcceptOwner && gnobuilders_badges_v2.IsAdmin(before.Owner) { panic("badges previous owner admin retained") }
72}