帮助文档
文档中心
开发者文档
  • AVATA API 文档
  • 底层链 SDK 文档
开发者社区
区块链浏览器
  • 文昌链网浏览器
  • 文昌链极速网
  • 文昌链-天舟
  • 文昌链-神舟
  • 文昌链-天和
关于文昌链
文档中心
开发者文档
  • AVATA API 文档
  • 底层链 SDK 文档
开发者社区
区块链浏览器
  • 文昌链网浏览器
  • 文昌链极速网
  • 文昌链-天舟
  • 文昌链-神舟
  • 文昌链-天和
关于文昌链
AVATA API 文档
  • AVATA API 文档
接入说明AVATA v3 API 文档AVATA v1 API 文档AVATA v2 API 文档
接入说明AVATA v3 API 文档AVATA v1 API 文档AVATA v2 API 文档
  1. 合约服务接口
  • API 版本简介
  • 链账户接口
    • 创建链账户
      POST
    • 批量创建链账户
      POST
    • 查询链账户
      GET
  • 原生模块
    • 关于原生模块
    • NFT 接口
      • 创建 NFT 类别
      • 查询 NFT 类别
      • 查询 NFT 类别详情
      • 转让 NFT 类别
      • 发行 NFT
      • 转让 NFT
      • 编辑 NFT
      • 销毁 NFT
      • 查询 NFT
      • 查询 NFT 详情
      • 查询 NFT 操作记录
    • MT 接口
      • 创建 MT 类别
      • 查询 MT 类别
      • 查询 MT 类别详情
      • 转让 MT 类别
      • 发行 MT
      • 增发 MT
      • 转让 MT
      • 编辑 MT
      • 销毁 MT
      • 查询 MT
      • 查询 MT 详情
      • 查询 MT 操作记录
      • 查询 MT 余额
    • 区块链存证接口
      • 数字作品存证接口
    • 查询上链交易结果
      GET
    • 查询链账户操作记录
      GET
    • 查询枚举值列表
      GET
  • 智能合约模块
    • 关于智能合约模块
    • NFT 接口
      • 创建 NFT 类别
      • 查询 NFT 类别
      • 查询 NFT 类别详情
      • 转让 NFT 类别
      • 发行 NFT
      • 转让 NFT
      • 销毁 NFT
      • 编辑 NFT
      • 查询 NFT
      • 查询 NFT 详情
      • 查询 NFT 操作记录
    • Web3 域名服务接口
      • 注册域名
      • 转让域名
      • 续购域名
      • 查询域名
      • 查询用户域名
      • 设置域名解析
      • 查询域名解析
      • 设置域名反向解析
      • 查询域名反向解析
    • 合约服务接口
      • Avata API 合约服务使用说明
      • 调用合约
        POST
      • 查询合约
        GET
    • 查询上链交易结果
      GET
    • 查询链账户操作记录
      GET
    • 查询枚举值列表
      GET
  • 购买能量值接口
    • 购买能量值
      POST
    • 批量购买能量值
      POST
    • 查询能量值购买结果
      GET
    • 查询能量值购买结果列表
      GET
  • 钱包服务接口
    • 创建钱包用户
    • 更新钱包用户
    • 认证钱包用户
    • 查询钱包用户信息
  1. 合约服务接口

Avata API 合约服务使用说明

当 Avata API 其它功能无法满足需求时,开发者可通过自定义合约来实现定制的业务逻辑。Avata API 合约服务接口可以帮助开发者在不需要关心私钥托管、Gas 代付的前提下实现对自定义合约的调用。
Avata API 合约服务满足以下需求和场景:
1.
简化开发流程:开发者无需关心私钥管理、交易发送等底层技术细节,只需专注于自身业务逻辑的实现;
2.
提高安全性:Avata 平台提供链账户密钥和助记词安全托管服务,可根据收到的操作请求使用已托管的密钥进行上链交易签名。
备注
开发者可以通过 Avata 非托管模式部署合约,结合托管模式通过 Avata 对用户地址进行托管和代付,实现对开发者已部署好的合约的调用。

前置条件#

该接口面向智能合约开发者,需要具备一定的智能合约开发经验和基础知识。

使用流程#

Avata API __________ (3).png

调用合约和查询合约的区别#

1.
调用合约,是通过向链上发送交易,执行合约中指定方法的业务逻辑,更新合约中的状态。例:ERC-721 合约中的 mint、transfer 等方法。
2.
查询合约,是调用合约中只读的查询方法,查询合约在链上的最新状态。例:ERC-721 合约中的 balanceOf、ownerOf 等方法。
调用合约的过程符合「AVATA API 最佳实践」

合约接口中 data 参数的生成步骤说明#

1.
获取 ABI: 读取合约的 ABI ,初始化 ABI 对象;
2.
Pack 计算 data : abi.Pack 中传入合约中的方法名与参数,计算出 hex 字符串,即为 data;

Avata API 与标准合约接口调用流程的区别#

对于标准的合约调用,步骤为:
1.
构建交易: 包括合约地址、要调用的合约方法、方法参数等;
2.
签名交易: 使用发送者的私钥对交易进行签名;
3.
发送交易: 将签名的交易发送到网络;
4.
交易确认: 等待交易确认,进行上链。
如果使用 Avata API 接口,开发者只需实现步骤 1,步骤 2-4 由 Avata 完成。开发者只需传入 Avata 托管的链账户地址(即「调用合约」接口中的 from 字段),Avata 将会使用该地址的私钥进行签名上链,大大节约了开发者的工作量。

代码示例#

以下是调用标准 ERC721 合约,生成 hex data 的 GO 语言代码示例
package erc721_test

import (
	"log"
	"math/big"
	"strings"
	"testing"
        
	"github.com/ethereum/go-ethereum/accounts/abi"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/common/hexutil"
)

func Test_CallContract(t *testing.T) {
	// 获取 abi
	abi := GetERC721Abi()

	// 生成调用合约 hex data,以 ERC721 中 mint 方法为例
	packData, err := abi.Pack("mint", []interface{}{
		common.HexToAddress("0x"), // 接收者地址
		big.NewInt(1), // token ID
	}...)
	if err != nil {
		t.Fatal(err)
	}
	t.Logf("解析器设置 mint 编码数据:%s", hexutil.Encode(packData))
}

func Test_QueryContract(t *testing.T) {
	// 获取 abi
	abi := GetERC721Abi()

	// 生成查询合约 hex data,以 ERC721 中 ownerOf 方法为例
	packData, err := abi.Pack("ownerOf", []interface{}{
		big.NewInt(1), // token ID
	}...)
	if err != nil {
		t.Fatal(err)
	}
	t.Logf("解析器查询 ownerOf 编码数据:%s", hexutil.Encode(packData))

	// 解析查询合约结果数据
	resultHex := "0x" //  Avata API 「查询合约」接口返回的数据
	resultBytes, err := hexutil.Decode(resultHex)
	if err != nil {
		t.Fatal(err)
	}
	resultData, err := abi.Methods["ownerOf"].Outputs.Unpack(resultBytes)
	if err != nil {
		t.Fatal(err)
	}
	t.Logf("解析结果为:%v", resultData)
}

func GetERC721Abi() abi.ABI { 
	// 初始化 abi
	// ERC721MetaData.ABI 来源于 ERC721.go 中的 ABI 编码
	erc721Abi, err := abi.JSON(strings.NewReader(ERC721MetaData.ABI))
	if err != nil { 
		log.Fatal(err) 
	}
	return erc721Abi 
}
ERC721MetaData.ABI:
image.png

扫码加入文昌链微信技术交流群

在这里,获得 Avata 使用上的任何帮助,快速上手让你的研测效率大幅提升

扫码添加小助手
修改于 2024-03-15 10:35:11
上一页
查询域名反向解析
下一页
调用合约
Built with