操作指南

1. 合约调用方式

用户可以通过如下两种方式调用合约:

  1. 直接使用ctool invoke,通过合约地址的方式调用

    ctool invoke --addr "$contractAddress" --func '$functionName' --param "$para" --abi $abiFilePath --config $configFilePath
  2. 部署的合约在合约管理服务(CNS)注册后,可以通过合约名的方式调用指定合约。

    ctool cnsInvoke --cns "$contractName" --func '${functionName}(${param})'  --abi $abiFilePath --config $configFilePath

2. 合约管理服务(CNS)

合约管理服务提供了对系统中合约的管理功能,包括合约的注册和注销,合约注册信息和地址的查询等功能。

3. 参数管理

4. 平台用户管理

4.1. 用户申请

新用户通过提交注册信息,待链管理员审核通过后,成为平台用户。平台用户可以申请不同的角色,待链管理员审核通过后,被授予对应的角色,并拥有相应的权限。

系统中内置的角色有:

角色中文名 角色英文名
链创建者(超管) chainCreator
链管理员(普管) chainAdmin
节点管理员 nodeAdmin
合约管理员 contractAdmin
合约部署者 contractDeployer
合约调用者 contractCaller

1)新用户申请[registerUser(RegisterInfo)]:

检查用户申请中各参数的合法性,并写入合约中。

参数说明:

ctool invoke --addr "0xf7e769f67be5bf06d5712c355e293ef0d4c685fc" --func 'registerUser' --param '{"address":"0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe","name":"xiaoluo","mobile":"13111111111","email":"123@126.com","roles":["chainAdmin"],"remark":"平台用户申请"}' --abi userRegister/userRegister.cpp.abi.json --config cnsManager/user.json 

2)管理员审核[approve(userAddress, status)]:

管理员验证用户合法性后,修改用户状态并保存到用户管理合约。

参数1:待审核用户的地址

参数2:审核状态,1:待审核,2:已批准,3:已拒绝

ctool invoke --addr "0xf7e769f67be5bf06d5712c355e293ef0d4c685fc" --func 'approve' --param '0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe' --param 2 --abi ./userRegister/userRegister.cpp.abi.json --config  cnsManager/config.json 

4.2. 用户管理

用户管理合约提供对平台用户信息的查询,删除和更新。

1)通过用户地址和用户名称两种查询条件查询用户信息

参数:用户地址

ctool invoke --addr "0x6c990c0f1ae07222c7b7dcb2b68b936d0008ca57" --func 'getAccountByAddress' --param "0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe" --abi userManager/userManager.cpp.abi.json --config cnsManager/config.json 

参数:用户名称

ctool invoke --addr "0x6c990c0f1ae07222c7b7dcb2b68b936d0008ca57" --func 'getAccountByName' --param "xiaoluo" --abi userManager/userManager.cpp.abi.json --config cnsManager/config.json  

输出:

result: {"code":0,"msg":"succeed","data":{"address":"0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe","name":"xiaoluo","mobile":"1312222","email":"123@qq.com","status":2}}

2)查询用户是否合法

参数:用户地址

ctool invoke --addr "0x6c990c0f1ae07222c7b7dcb2b68b936d0008ca57" --func 'isValidUser' --param "0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe" --abi userManager/userManager.cpp.abi.json --config cnsManager/config.json 

输出:1表示合法,0表示非法。

3) 更新用户信息

参数1:用户地址

参数2:用户信息(与新增用户时类似)

ctool invoke --addr "0x6c990c0f1ae07222c7b7dcb2b68b936d0008ca57" --func 'update' --param "0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe" --param '{"address":"0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe","name":"xiaoluo","mobile":"1312222","email":"123@qq.com","status":0}' --abi userManager/userManager.cpp.abi.json --config cnsManager/config.json 

4) 禁用和激活用户

参数:用户地址

ctool invoke --addr "0x6c990c0f1ae07222c7b7dcb2b68b936d0008ca57" --func 'disable' --param "0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe" --abi userManager/userManager.cpp.abi.json --config cnsManager/config.json 
ctool invoke --addr "0x6c990c0f1ae07222c7b7dcb2b68b936d0008ca57" --func 'enable' --param "0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe" --abi userManager/userManager.cpp.abi.json --config cnsManager/config.json

5)删除用户

参数:用户地址

ctool invoke --addr "0x6c990c0f1ae07222c7b7dcb2b68b936d0008ca57" --func 'delUser' --param "0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe" --abi userManager/userManager.cpp.abi.json --config cnsManager/config.json

4.3. 角色申请

平台用户申请在系统中的角色,待链管理员审核通过后,被授予对应的角色,并拥有相应的权限。

1)用户申请角色

参数:申请的角色名

ctool invoke --addr "0xf8f1bec07e2556e6be2371f441f0a1ce9c8b737b" --func 'registerRole' --param '["nodeAdmin"]' --abi roleRegister/roleRegister.cpp.abi.json --config cnsManager/user.jso

2)管理员审核

ctool invoke --addr "0xf8f1bec07e2556e6be2371f441f0a1ce9c8b737b" --func 'approveRole' --param '0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe' --param 2 --abi roleRegister/roleRegister.cpp.abi.json --config cnsManager/config.json 

参数1:待审核用户的地址

参数2:审核状态,1:待审核,2:已批准,3:已拒绝

4.4. 角色管理

角色管理合约提供对用户角色的查询和撤销。

1)通过用户地址和用户名称两种查询条件查询用户角色信息

参数:用户地址

ctool invoke --addr "0x1df9e46ccaf981f993fe26a6eb52a6c3fd7193df" --func 'getRolesByAddress' --param "0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe" --abi roleManager/roleManager.cpp.abi.json --config cnsManager/config.json

参数:用户名称

ctool invoke --addr "0x1df9e46ccaf981f993fe26a6eb52a6c3fd7193df" --func 'getRolesByName' --param "xiaowang" --abi roleManager/roleManager.cpp.abi.json --config cnsManager/config.json 

输出:

result: {"code":0,"msg":"Success","data":["contractDeployer","contractAdmin"]}

2)查询用户是否有某个角色

参数1:用户地址

参数2:角色名

ctool invoke --addr "0x1df9e46ccaf981f993fe26a6eb52a6c3fd7193df" --func 'hasRole' --param "0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe" --param "chainAdmin" --abi roleManager/roleManager.cpp.abi.json --config cnsManager/config.json

输出:1表示拥有,0表示没有。

3) 查询系统中某个角色的地址

参数:角色名

ctool invoke --addr "0x1df9e46ccaf981f993fe26a6eb52a6c3fd7193df" --func 'getAccountsByRole' --param "chainAdmin" --abi roleManager/roleManager.cpp.abi.json --config cnsManager/config.json

输出:

result: {"code":0,"msg":"Success","data":[{"name":"xiaoluo","address":"0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe"}]}

4)撤销用户角色

参数1:用户地址

参数2:角色名

ctool invoke --addr "0x1df9e46ccaf981f993fe26a6eb52a6c3fd7193df" --func 'removeRole' --param "0x39f5ddcd8956e57b7fe6290e008f845f59dde8fe" --param '["nodeAdmin"]' --abi roleManager/roleManager.cpp.abi.json --config cnsManager/config.json

5. 节点管理

5.1. 节点申请

管理所有节点的申请信息以及审核信息,节点申请审核后,节点信息才会登记于节点管理合约。

参数说明: + name:节点名称 + owner :申请者的地址 + desc:节点描述 + type: + 1:共识节点 + 0:观察者节点 + publicKey :节点公钥 + externalIP :外网 IP + internalIP:内网 IP + rpcPort:rpc 端口 + p2pPort :p2p端口 + status : + 0:未审核 + 1:申请通过 + 2:拒绝申请 + approver:审核人的地址 + registerTime:申请时间 + root: + true:是根节点 + false:不是根节点

```
./bin/ctool invoke --addr "0x743bc6816b2fa897d60b657b7eee3aaf2e3ca253" --func 'registerNode' --param '{"name":"nodeB","desc":"i am nodeB","type":0,"publicKey":"7caae651e633769fa693f633e3a468775bf19699ccdc014eb9449c2eb0f82ebde4a7d28c9b846d2df02d1e7f7e1460fbb31eb83c6faf208dcbfd4f2944d31c61","externalIP":"127.0.0.1","internalIP":"127.0.0.1","rpcPort":6793,"p2pPort":16793,"root":false}' --abi ./conf/contracts/nodeRegister.cpp.abi.json --config ./user2.json
```
  1. 审核节点信息 [approve(publicKey,status)]

    参数说明: + publicKey:待审核节点公钥 + status: + 1:通过

    • 2:拒绝
    ./bin/ctool invoke --addr "0x743bc6816b2fa897d60b657b7eee3aaf2e3ca253" --func 'approve' --param "7caae651e633769fa693f633e3a468775bf19699ccdc014eb9449c2eb0f82ebde4a7d28c9b846d2df02d1e7f7e1460fbb31eb83c6faf208dcbfd4f2944d31c61" --param 1 --abi ./conf/contracts/nodeRegister.cpp.abi.json --config ./user2.json
  2. 根据公钥获取申请信息[getRegisterInfoByPublicKey(publicKey)]

    参数说明:

    • publicKey: 待查看节点公钥
    ./bin/ctool invoke --addr "0x743bc6816b2fa897d60b657b7eee3aaf2e3ca253" --func 'getRegisterInfoByPublicKey' --param "7caae651e633769fa693f633e3a468775bf19699ccdc014eb9449c2eb0f82ebde4a7d28c9b846d2df02d1e7f7e1460fbb31eb83c6faf208dcbfd4f2944d31c61" --abi ./conf/contracts/nodeRegister.cpp.abi.json --config ./user2.json

5.2. 节点管理

管理所有的节点信息,节点包括共识节点和非共识节点,节点信息包括公钥,证书,管理员,名称等

5.3. 共识&观察者节点

6. 合约防火墙

合约防火墙主要实现了对防火墙白名单和黑名单的管理功能,使得合约的部署者可以设置合约的防火墙规则,使特定的用户获得调用合约指定函数的权限或者禁止特定用户调用合约指定函数。

1)合约防火墙激活

参数addr:合约地址

ctool fwInvoke --addr "0x08644ba5e0dd71d3d7cbb58913a099c2f3ca403f" --func '__sys_FwOpen()' --config cnsManager/config.json 

2)合约白名单和黑名单的管理

创建白名单和黑名单:

参数说明:

  1. Accept:设置白名单;Reject:设置黑名单
  2. 过滤规则:”{地址}:{函数名}“
ctool fwInvoke --addr "0x08644ba5e0dd71d3d7cbb58913a099c2f3ca403f" --func '__sys_FwAdd("Accept","*:getName")' --config cnsManager/config.json 
 ctool fwInvoke --addr "0x08644ba5e0dd71d3d7cbb58913a099c2f3ca403f" --func '__sys_FwAdd("Reject","0x01a369998e4a141c5e2b40dbcbaf4a601d57cfa5:invokeNotify")' --config cnsManager/config.json 

清空白名单和黑名单:

 ctool fwInvoke --addr "0x08644ba5e0dd71d3d7cbb58913a099c2f3ca403f" --func '__sys_FwClear("Accept")' --config cnsManager/config.json 
 ctool fwInvoke --addr "0x08644ba5e0dd71d3d7cbb58913a099c2f3ca403f" --func '__sys_FwClear("Reject")' --config cnsManager/config.json

重置名单:

 ctool fwInvoke --addr "0x08644ba5e0dd71d3d7cbb58913a099c2f3ca403f" --func '__sys_FwSet("Reject","*:invokeNotify")' --config cnsManager/config.json 

删除指定合约的白/黑名单里的指定地址:

 ctool fwInvoke --addr "0x08644ba5e0dd71d3d7cbb58913a099c2f3ca403f" --func '__sys_FwDel("Reject","0x01a369998e4a141c5e2b40dbcbaf4a601d57cfa5:invokeNotify")' --config cnsManager/config.json 

3)合约防火墙状态查询

 ctool fwInvoke --addr "0x08644ba5e0dd71d3d7cbb58913a099c2f3ca403f" --func '__sys_FwStatus()' --config cnsManager/config.json 

输出:

  result: {"ContractAddress":"0x08644ba5e0dd71d3d7cbb58913a099c2f3ca403f","FwActive":true,"AcceptedList":[{"Addr":"0xffffffffffffffffffffffffffffffffffffffff","FuncName":"getName"}],"DeniedList":[{"Addr":"0x01a369998e4a141c5e2b40dbcbaf4a601d57cfa5","FuncName":"invokeNotify"}]}

4)合约防火墙关闭

  ctool fwInvoke --addr "0x08644ba5e0dd71d3d7cbb58913a099c2f3ca403f" --func '__sys_FwClose()' --config cnsManager/config.json