Search Apps Documentation Source Content File Folder Download Copy Actions Download

impl.gno

1.24 Kb ยท 58 lines
 1package impl
 2
 3import (
 4	"chain/runtime"
 5
 6	"gno.land/r/gov/dao/v3/memberstore"
 7	"gno.land/r/sys/users"
 8)
 9
10var (
11	law    *Law
12	govDAO *GovDAO = NewGovDAO()
13	gRealm         = runtime.CurrentRealm()
14)
15
16func init() {
17	law = &Law{
18		Supermajority: 66.66, // Two thirds
19	}
20}
21
22func Render(in string) string {
23	return govDAO.Render(gRealm.PkgPath(), in)
24}
25
26// AddMember allows T1 and T2 members to freely add T3 members using their invitation points.
27func AddMember(cur realm, addr address) {
28	caller := runtime.PreviousRealm()
29	if !caller.IsUser() {
30		panic("this function must be called by an EOA through msg call or msg run")
31	}
32	m, t := memberstore.Get().GetMember(caller.Address())
33	if m == nil {
34		panic("caller is not a member")
35	}
36
37	if users.ResolveAddress(caller.Address()) == nil {
38		panic("caller should have a namespace")
39	}
40
41	if t != memberstore.T1 && t != memberstore.T2 {
42		panic("caller is not on T1 or T2. To add members, propose them through proposals")
43	}
44
45	m.RemoveInvitationPoint()
46
47	if err := memberstore.Get().SetMember(memberstore.T3, addr, memberByTier(memberstore.T3)); err != nil {
48		panic(err.Error())
49	}
50}
51
52func GetInstance() *GovDAO {
53	if runtime.CurrentRealm().PkgPath() != "gno.land/r/gov/dao/v3/loader" {
54		panic("not allowed")
55	}
56
57	return govDAO
58}