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

handover.gno

1.05 Kb · 50 lines
 1package kourtv3
 2func HandOver(cur realm, to address) {
 3	if !cur.IsCurrent() {
 4		panic(errStaleRealm)
 5	}
 6	if !to.IsValid() {
 7		panic("kourtv3: not a valid address")
 8	}
 9	who := cur.Previous().Address()
10	d := ensureGlobalDAO()
11	if who != d.admin {
12		panic("kourtv3: only the global DAO admin hands over")
13	}
14	if to == who {
15		panic("kourtv3: hand over to a different address")
16	}
17	seatGlobalMember(d, to)
18	d.admin = to
19	if d.members.Has(who.String()) {
20		d.members.Remove(who.String())
21		d.n--
22		if d.purgeM > d.n {
23			d.purgeM = d.n
24		}
25		clearPendingOnMembershipChange(&d.pending)
26	}
27	directoryAdmin = to
28	courts.Iterate("", "", func(_ string, v any) bool {
29		c := v.(*Court)
30		if c.admin != who {
31			return false
32		}
33		c.admin = to
34		if cm := c.mod; cm != nil && !cm.creatorUnseated {
35			if cm.members.Has(who.String()) {
36				cm.members.Remove(who.String())
37				cm.n--
38			}
39			if !cm.members.Has(to.String()) {
40				cm.members.Set(to.String(), true)
41				cm.n++
42			}
43			if cm.m > cm.n {
44				cm.m = cm.n
45			}
46			clearPendingOnMembershipChange(&cm.pending)
47		}
48		return false
49	})
50}