文档首页/ 数字资产链 DAC/ 开发指南/ SDK参考/ Go/ SDK配置和调用示例
更新时间:2025-06-06 GMT+08:00
分享

SDK配置和调用示例

SDK下载

SDK中相关方法的使用示例,可参考应用程序的示例GoSample,内含Go版本SDK(GoSample下载地址)。

  • SDK在不同环境下支持的实例安全机制如下:
    • Windows环境:ECDSA
    • Linux环境:ECDSA
  • Linux环境,Go SDK的编译、运行,需要手动下载并配置openssl(openssl下载链接)。
    • 解压openssl,拷贝openssl文件夹到目录“/usr/local/include/”下。
    • 执行库的导入命令:

      export CGO_LDFLAGS=-L/usr/local/include/openssl

      export C_INCLUDE_PATH=/usr/local/include/openssl

      export LD_LIBRARY_PATH=/usr/local/include/openssl

  • 合约开发需要使用go mod,因此请确保GO111MODULE为on、镜像源配置。请确保可正常访问华为云镜像网站,环境设置命令如下:
    go env -w GO111MODULE=on 
    go env -w GOPROXY=https://repo.huaweicloud.com/repository/goproxy/ 
    go env -w GONOSUMDB=*

调用示例

Go-sdk 调用示例:

// 初始化SDK
sdk, err:=tdcsdk.New("/root/test-tdc-sdk-conf/conf.yaml")
if err != nil {
	fmt.Println(err)
	return
}
// 创建名为“tiger01” 的集合
collectionIndex := "tiger01"
txid, err := sdk.CreateNFTCollection(collectionIndex)
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println("Create collection txid:",txid)
// 生成数字资产meta信息
meta, err := sdk.NewImageMetadata([]byte("123"),"tigerImage",
	"http://obs.huawei.com/1/tiger","description",1)
if err != nil {
	fmt.Println(err)
	return
}
// 铸造数字资产
ntf, txid, err := sdk.NFT721.Mint(collectionIndex,"1",meta)
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println("Mint txid:",txid)
fmt.Println("Mint ntf:",ntf)

// 查询数字资产所有者
owner, err := sdk.NFT721.OwnerOf(collectionIndex,"1")
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println("Collection:",collectionIndex,"token:1 owner is ",owner)

// 生成新的用户信息,包括证书,私钥和地址
cert, sk, receiverAddr, err := sdk.GenerateIdentity(utils.EcdsaWithSha256,"user1")
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println("cert:",cert)
fmt.Println("sk:",sk)
fmt.Println("addr:",receiverAddr)

// 数字资产转移
txid, err = sdk.NFT721.TransferFrom(collectionIndex,owner,receiverAddr,"1")
if err != nil{
	fmt.Println(err)
	return
}
fmt.Println("TransferFrom txid:", txid)

// 批量铸造数字资产
batchMintData := &mgmt.BatchMintData{StartTokenID: "5000", Amount: "5000", TokenURI: meta}
txid, err = sdk.NFT1155.BatchMint(collectionIndex, batchMintData)
if err != nil{
	fmt.Println(err)
	return
}
fmt.Println("BatchMint txid:", txid)

// 铸造可组合资产
nft, txid, err := sdk.NFT998.Mint(collectionIndex, "10", meta)
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println("Mint of composable asset txid:",txid)
fmt.Println("Mint of composable asset nft:",nft)

// 铸造数字资产
nft, txid, err = sdk.NFT721.Mint(collectionIndex,"2",meta)
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println("Mint txid:",txid)
fmt.Println("Mint nft:",nft)

// 查询数字资产拥有者
owner, err = sdk.NFT721.OwnerOf(collectionIndex, "2")
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println("the nft of owner:", owner)

// 加入可组合资产
txid, err = sdk.NFT998.GetChild(owner, collectionIndex, "10", collectionIndex, "2")
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println("GetChild txid:", txid)

// 切换成新的用户身份
err = sdk.SwitchIdentityWithPem(utils.EcdsaWithSha256,cert,sk)

// resourceByte 可以从本地文件获取或者从网络请求中接收图片的字节数组
resourceByte := []byte("资源的byte数组")
resourcePath, resourceUrl, metadata, err := sdk.ToolManager.UploadResourceWithAudit(resourceByte, mgmt.Image, mgmt.ImageJPEG, "1678671385", false)
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println("UploadResourceWithAudit resourceUrl:", resourceUrl)
fmt.Println("UploadResourceWithAudit metadata:", metadata)
fmt.Println("UploadResourceWithAudit resourcePath:", resourcePath)
// 其他业务调用...

相关文档