Search Apps Documentation Source Content File Folder Download Copy Actions Download

ownership.gno

1.57 Kb · 69 lines
 1package rbac
 2
 3import (
 4	ufmt "gno.land/p/nt/ufmt/v0"
 5
 6	prbac "gno.land/p/gnoswap/rbac"
 7	"gno.land/r/gnoswap/access"
 8)
 9
10// IsOwner returns true if addr is the current owner.
11func IsOwner(addr address) bool {
12	return manager.Owner() == addr
13}
14
15// IsPendingOwner returns true if addr is the pending owner.
16func IsPendingOwner(addr address) bool {
17	return manager.PendingOwner() == addr
18}
19
20// GetOwner returns the current owner address.
21func GetOwner() address {
22	return manager.Owner()
23}
24
25// GetPendingOwner returns the pending owner address.
26func GetPendingOwner() address {
27	return manager.PendingOwner()
28}
29
30// AcceptOwnership completes the ownership transfer process.
31// Only callable by pending owner.
32func AcceptOwnership(cur realm) {
33	caller := cur.Previous().Address()
34	assertIsPendingOwner(caller)
35
36	err := manager.AcceptOwnershipBy(caller)
37	if err != nil {
38		panic(err)
39	}
40
41	newOwner := manager.Owner()
42	err = manager.UpdateRoleAddress(prbac.ROLE_ADMIN.String(), newOwner)
43	if err != nil {
44		panic(makeErrorWithDetails(
45			err,
46			ufmt.Sprintf(
47				"role name: %s, address: %s",
48				prbac.ROLE_ADMIN.String(), newOwner.String()),
49		))
50	}
51	access.SetRoleAddress(cross(cur), prbac.ROLE_ADMIN.String(), newOwner)
52}
53
54// TransferOwnership initiates the ownership transfer process.
55//
56// Parameters:
57//   - addr: address to transfer ownership to
58//
59// Only callable by current owner.
60func TransferOwnership(cur realm, addr address) {
61	caller := cur.Previous().Address()
62	assertIsOwner(caller)
63	assertIsValidAddress(addr)
64
65	err := manager.TransferOwnershipBy(addr, caller)
66	if err != nil {
67		panic(err)
68	}
69}