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》