/
sc_user_manager.go
104 lines (89 loc) · 3.29 KB
/
sc_user_manager.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package vm
import (
"math/big"
"github.com/Venachain/Venachain/common"
"github.com/Venachain/Venachain/params"
)
type UserManagement struct {
stateDB StateDB
caller common.Address
contractAddr common.Address
blockNumber *big.Int
}
func (u *UserManagement) RequiredGas(input []byte) uint64 {
if common.IsBytesEmpty(input) {
return 0
}
return params.UserManagementGas
}
// Run runs the precompiled contract
func (u *UserManagement) Run(input []byte) ([]byte, error) {
fnName, ret, err := execSC(input, u.AllExportFns())
if err != nil {
if fnName == "" {
fnName = "Notify"
}
u.emitEvent(fnName, operateFail, err.Error())
}
return ret, err
}
func (u *UserManagement) setState(key, value []byte) {
u.stateDB.SetState(u.contractAddr, key, value)
}
func (u *UserManagement) getState(key []byte) []byte {
value := u.stateDB.GetState(u.contractAddr, key)
return value
}
func (u *UserManagement) Caller() common.Address {
return u.caller
}
func (u *UserManagement) returnSuccess(topic string) (int32, error) {
u.emitEvent(topic, operateSuccess, "Success")
return int32(operateSuccess), nil
}
func (u *UserManagement) returnFail(topic string, err error) (int32, error) {
u.emitEvent(topic, operateFail, err.Error())
returnErr := err
// todo: in some cases, returnErr = nil
return int32(operateFail), returnErr
}
func (u *UserManagement) emitEvent(topic string, code CodeType, msg string) {
emitEvent(u.contractAddr, u.stateDB, u.blockNumber.Uint64(), topic, code, msg)
}
//for access control
func (u *UserManagement) AllExportFns() SCExportFns {
return SCExportFns{
"setSuperAdmin": u.setSuperAdmin,
"transferSuperAdminByAddress": u.transferSuperAdminByAddress,
"transferSuperAdminByName": u.transferSuperAdminByName,
"addChainAdminByAddress": u.addChainAdminByAddress,
"addChainAdminByName": u.addChainAdminByName,
"addGroupAdminByAddress": u.addGroupAdminByAddress,
"addGroupAdminByName": u.addGroupAdminByName,
"addNodeAdminByAddress": u.addNodeAdminByAddress,
"addNodeAdminByName": u.addNodeAdminByName,
"addContractAdminByAddress": u.addContractAdminByAddress,
"addContractAdminByName": u.addContractAdminByName,
"addContractDeployerByAddress": u.addContractDeployerByAddress,
"addContractDeployerByName": u.addContractDeployerByName,
"delChainAdminByAddress": u.delChainAdminByAddress,
"delChainAdminByName": u.delChainAdminByName,
"delGroupAdminByAddress": u.delGroupAdminByAddress,
"delGroupAdminByName": u.delGroupAdminByName,
"delNodeAdminByAddress": u.delNodeAdminByAddress,
"delNodeAdminByName": u.delNodeAdminByName,
"delContractAdminByAddress": u.delContractAdminByAddress,
"delContractAdminByName": u.delContractAdminByName,
"delContractDeployerByAddress": u.delContractDeployerByAddress,
"delContractDeployerByName": u.delContractDeployerByName,
"getAddrListOfRole": u.getAddrListOfRoleStr,
"getRolesByAddress": u.getRolesByAddress,
"getRolesByName": u.getRolesByName,
"hasRole": u.hasRole,
"addUser": u.addUser,
"updateUserDescInfo": u.updateUserDescInfo,
"getUserByAddress": u.getUserByAddress,
"getUserByName": u.getUserByName,
"getAllUsers": u.getAllUsers,
}
}