go 语言接入教程
1. 引入依赖
replace (
github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.2-alpha.regen.4
github.com/tendermint/tendermint => github.com/bianjieai/tendermint v0.34.1-irita-210113
github.com/prometheus/common => github.com/prometheus/common v0.26.0
)
require (
github.com/irisnet/core-sdk-go v0.0.0-20220720085949-4d825adb8054
github.com/irisnet/irismod-sdk-go v0.0.0-20220825063058-6bf8e60b42c8
github.com/bianjieai/iritamod-sdk-go v0.0.0-20220708032705-9e8e301da3a8
github.com/stretchr/testify v1.7.0
google.golang.org/grpc v1.40.0
)
2. 下载demo项目
下载链接:opb-sdk-go
::: tip
以上 1 和 2 任选一个即可
推荐直接引入依赖的方式。
:::
3. 接入信息配置
- 测试链配置
var (
wsAddress = ""
rpcAddress = "http://testnet.bianjie.ai:26657"
grpcAddress = "testnet.bianjie.ai:9090"
chainID = "testing"
tlsServiceName = "grpcs.testnet.bianjie.ai"
algo = "sm2"
projectId = "TestProjectID"
projectKey = "TestProjectKey"
chainAccountAddr = "TestChainAccountAddress"
name = ""
password = ""
mnemonic = ""
)
::: note
测试环境不在提供测试链,如果您想进行测试,请创建链账户后,私聊 技术支持,提供创建的链账户和助记词 进行能量值充值后,在进行测试。
:::
- 生产链配置
var (
wsAddress = "{{根据项目参数进行填写}}"
rpcAddress = "{{根据项目参数进行填写}}"
grpcAddress = "{{根据项目参数进行填写}}"
chainID = "{{根据项目参数进行填写}}"
tlsServiceName = "{{填写grpcAddress值}}"
algo = "sm2"
projectId = "{{根据项目参数进行填写}}"
projectKey = "{{根据项目参数进行填写}}"
chainAccountAddr = "填写您的链账户"
name = ""
password = ""
mnemonic = ""
)
4. 初始化 opb 客户端
//能量值费用:「创建NFT/MT类别」、「发行NFT/MT」为 40 万能量值(等值人民币:0.1元),其他交易类型为 20 万能量值(等值人民币:0.05元)
fee, _ := types.ParseDecCoins("400000ugas")
// 初始化 SDK 配置
options := []types.Option{
types.AlgoOption(algo),
types.KeyDAOOption(store.NewMemory(nil)),
types.FeeOption(fee),
types.TimeoutOption(10),
types.CachedOption(true),
types.WSAddrOption(wsAddress),
}
cfg, err := types.NewClientConfig(rpcAddress, grpcAddress, chainID, options...)
if err != nil {
panic(err)
}
// 初始化 OPB 网关账号(测试网环境设置为 nil 即可)
// 开启 TLS 连接
// 若服务器要求使用安全链接,此处应设为true,后面需要填写tlsServiceName
//若此处设为false可能导致请求出现长时间不响应的情况
// 若开启 TLS 连接,则必须设置验证证书的主机名
authToken := model.NewAuthToken(projectId, projectKey, chainAccountAddr)
if err := authToken.SetRequireTransportSecurity(false, ""); err != nil {
fmt.Println(fmt.Errorf("开启TLS失败: %s", err.Error()))
return
}
// 创建 OPB 客户端
client := opb.NewClient(cfg, &authToken)
// 导入私钥
address, err := client.Key.Recover(name, password, mnemonic)
if err != nil {
fmt.Println(fmt.Errorf("导入私钥失败: %s", err.Error()))
return
}
fmt.Println("address:", address)
5. 初始化交易信息体
// 初始化 Tx 基础参数
baseTx := types.BaseTx{
From: name, // 对应上面导入的私钥名称
Password: password, // 对应上面导入的私钥密码
Gas: 400000, // 单笔交易消耗的能量值
Memo: "", // Tx 备注
Mode: types.Sync, // Tx 广播模式
}
::: tip
交易体中的 广播模式推荐使用同步模式
详情请参考:https://forum.avata.bianjie.ai/t/topic/101
:::
::: highlight red 💡
完成以上操作,已经完成接入操作。
部分功能说明请参考后面内容。
:::
6. 详细操作功能
创建离线链账户:
address,mnemonic,err:=client.key.add(name,password)
查询交易结果(根据交易哈希查询):
result,err:=client.BaseClient.QueryTx(tx_hash)
代付授权(用于离线链账户上链):
basic := &feegrant.BasicAllowance{
SpendLimit: atom, //授权额度
Expiration: &threeHours, //过期时间
}
//链账户地址在这里需要转换一下
granter, _ = types.AccAddressFromBech32(address)
grantee, _ = types.AccAddressFromBech32(address)
// 授权
result, err := client.Feegrant.GrantAllowance(granter, grantee, basic, baseTx)
最后修改时间: 1 年前