Go-SDK 预编译合约文档
预编译合约接口
因为预编译合约需要调用合约,因此各个预编译合约的结构体都需要包含ContractClient。 并且预编译合约不需要传入合约的 abi 文件,因此在对各个合约初始化时,可以将contract 的AbiPath 设置为空。
账户合约 Account
账户客户端的数据结构如下,其中需要包括账户地址Address。
// client/account.go:14
type AccountClient struct {
ContractClient
Address common.Address
}
账户的接口分别包括新增用户,更新用户,用户查询
// client/types.go:30
type IAccount interface {
UserAdd(ctx context.Context, txparam common_sdk.TxParams, name, phone, email, organization string) (string, error)
UserUpdate(ctx context.Context, txparam common_sdk.TxParams, phone, email, organization string) (string, error)
QueryUser(ctx context.Context, txparam common_sdk.TxParams, user string) (string, error)
Lock(ctx context.Context) (bool, error)
UnLock(ctx context.Context) (bool, error)
}
新增账户
以下为账户合约新增账户的示例:
// client/account_test.go:15
// 如果没有abipath 和codepath 的话,可以设置为空
func InitAccountClient() (common_sdk.TxParams, AccountClient) {
txparam, contract := InitContractClient()
contract.AbiPath = ""
client := AccountClient{
ContractClient: contract,
Address: common.HexToAddress("3fcaa0a86dfbbe105c7ed73ca505c7a59c579667"),
}
return txparam, client
}
首先需要初始化账户客户端,以下展示添加账户的例子,需要的参数分别代表name, phone, email, organization。如果不需要可以设置为“ ”。
// client/account_test.go:25
func TestAccountClient_UserAdd(t *testing.T) {
txparam, client := InitAccountClient()
result, _ := client.UserAdd(context.Background(), txparam, "Alice", "110", "", "")
fmt.Println(result)
assert.True(t, result != "")
}
更新账户
传入需要更新的账户phone, email, organization。注意只能更新这些信息,账户的名字是不能更改的。
// client/account_test.go:32
func TestAccountClient_UserUpdate(t *testing.T) {
txparam, client := InitAccountClient()
result, _ := client.UserUpdate(context.Background(), txparam, "13556672653", "test@163.com", "wxbc2")
fmt.Println(result)
assert.True(t, result != "")
}
查询账户信息
传入账户的名字即可查询到该账户的相关信息
// func TestAccountClient_QueryUser(t *testing.T) {
func TestAccountClient_QueryUser(t *testing.T) {
txparam, client := InitAccountClient()
result, _ := client.QueryUser(context.Background(), txparam, "Alice")
fmt.Println(result)
assert.True(t, result != "")
}
账户锁定和解锁
在账户客户端,sdk 还提供了账户锁定和解锁的功能。调用以下函数即可:
client.UnLock(context.Background())
client.Lock(context.Background())
剩下的预编译合约
CnsClient
需要指定cns 的名字
type CnsClient struct {
ContractClient
name string
}
FireWallClient
防火墙客户端管理合约的防火墙,需要指定合约地址。
type FireWallClient struct {
ContractClient
ContractAddress string
}
NodeClient
节点客户端需要指定节点的名字
type NodeClient struct {
ContractClient
NodeName string
}
SysConfigClient 和 RoleClient 则使用合约的方法。
剩下的预编译合约相关接口如下,相关的test 已在client 包中。可查看使用:
type ICns interface {
CnsExecute(ctx context.Context, txparam common.TxParams, funcName string, funcParams []string, cns string) ([]interface{}, error)
CnsRegister(ctx context.Context, txparam common_sdk.TxParams, version, address string) (string, error)
CnsResolve(ctx context.Context, txparam common_sdk.TxParams, version string) (string, error)
CnsRedirect(ctx context.Context, txparam common_sdk.TxParams, version string) (string, error)
CnsQueryAll(ctx context.Context, txparam common_sdk.TxParams) (string, error)
CnsQueryByName(ctx context.Context, txparam common_sdk.TxParams) (string, error)
CnsQueryByAddress(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
CnsQueryByAccount(ctx context.Context, txparam common_sdk.TxParams, account string) (string, error)
CnsStateByAddress(ctx context.Context, txparam common_sdk.TxParams, address string) (int32, error)
CnsState(ctx context.Context, txparam common_sdk.TxParams) (int32, error)
}
type IFireWall interface {
FwStatus(ctx context.Context, txparam common_sdk.TxParams) (string, error)
FwStart(ctx context.Context, txparam common_sdk.TxParams) (string, error)
FwClose(ctx context.Context, txparam common_sdk.TxParams) (string, error)
FwExport(ctx context.Context, txparam common_sdk.TxParams, filePath string) (bool, error)
FwImport(ctx context.Context, txparam common_sdk.TxParams, filePath string) (string, error)
FwNew(ctx context.Context, txparam common_sdk.TxParams, action, targetAddr, api string) (string, error)
FwDelete(ctx context.Context, txparam common_sdk.TxParams, action, targetAddr, api string) (string, error)
FwReset(ctx context.Context, txparam common_sdk.TxParams, action, targetAddr, api string) (string, error)
FwClear(ctx context.Context, txparam common_sdk.TxParams, action string) (string, error)
}
type INode interface {
NodeAdd(ctx context.Context, txparam common_sdk.TxParams, requestNodeInfo syscontracts.NodeInfo) (string, error)
NodeDelete(ctx context.Context, txparam common_sdk.TxParams) (string, error)
NodeUpdate(ctx context.Context, txparam common_sdk.TxParams, request syscontracts.NodeUpdateInfo) (string, error)
NodeQuery(ctx context.Context, txparam common_sdk.TxParams, request *syscontracts.NodeQueryInfo) (string, error)
NodeStat(ctx context.Context, txparam common_sdk.TxParams, request *syscontracts.NodeStatInfo) (int32, error)
}
type IRole interface {
SetSuperAdmin(ctx context.Context, txparam common_sdk.TxParams) (string, error)
TransferSuperAdmin(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
AddChainAdmin(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
DelChainAdmin(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
AddGroupAdmin(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
DelGroupAdmin(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
AddNodeAdmin(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
DelNodeAdmin(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
AddContractAdmin(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
DelContractAdmin(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
AddContractDeployer(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
DelContractDeployer(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
GetAddrListOfRole(ctx context.Context, txparam common_sdk.TxParams, role string) (string, error)
GetRoles(ctx context.Context, txparam common_sdk.TxParams, address string) (string, error)
HasRole(ctx context.Context, txparam common_sdk.TxParams, address, role string) (int32, error)
}
type ISysconfig interface {
SetSysConfig(ctx context.Context, txparam common_sdk.TxParams, request SysConfigParam) ([]string, error)
GetTxGasLimit(ctx context.Context, txparam common_sdk.TxParams) (uint64, error)
GetBlockGasLimit(ctx context.Context, txparam common_sdk.TxParams) (uint64, error)
GetGasContractName(ctx context.Context, txparam common_sdk.TxParams) (string, error)
GetIsProduceEmptyBlock(ctx context.Context, txparam common_sdk.TxParams) (uint32, error)
GetCheckContractDeployPermission(ctx context.Context, txparam common_sdk.TxParams) (uint32, error)
GetAllowAnyAccountDeployContract(ctx context.Context, txparam common_sdk.TxParams) (uint32, error)
GetIsApproveDeployedContract(ctx context.Context, txparam common_sdk.TxParams) (uint32, error)
GetIsTxUseGas(ctx context.Context, txparam common_sdk.TxParams) (uint32, error)
GetVRFParams(ctx context.Context, txparam common_sdk.TxParams) (string, error)
}
相关预编译合约的使用可以查看文档 《链交互工具vcl》