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