Search Apps Documentation Source Content File Folder Download Copy Actions Download

impl.gno

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