Search Apps Documentation Source Content File Folder Download Copy Actions Download

impl.gno

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