Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}