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}