Avata 帮助文档-测试
  1. 合约服务接口
Avata 帮助文档-测试
  • Avata 平台文档
    • 平台介绍
      • 平台简介
      • 核心功能
      • 基础术语
      • 平台服务
        • 文昌链极速网
        • 文昌链存证服务
        • 文昌链域名服务
        • 第三方支付服务
    • 用户指南
      • 接入流程
      • AVATA API 接入说明
      • AVATA API 最佳实践
      • 费用说明
    • 常见问题
      • AVATA 平台 NFT 元数据规范
      • Avata 测试项目如何充值能量值
      • Avata 技术社区使用指南
      • 原生 NFT 和原生 MT 区别
      • operation_id 的作用
      • AVATA API & 底层链 SDK 如何选择
      • 如何开具发票
      • 申请平台合作协议
      • 网信办备案填报指南
      • 变更认证主体流程说明
      • 更多问题 >>
  • AVATA API 文档
    • AVATA API 文档
      • 接入说明
        • 网关鉴权签名示例
        • 交易结果异步回调通知
      • AVATA v3 API 文档
        • API 版本简介
        • 链账户接口
          • 创建链账户
          • 批量创建链账户
          • 查询链账户
        • 原生模块
          • 关于原生模块
          • 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 余额
          • 区块链存证接口
            • 数字作品存证接口
          • 查询链账户操作记录
          • 查询上链交易结果
          • 查询枚举值列表
        • 智能合约模块
          • 关于智能合约模块
          • NFT 接口
            • 创建 NFT 类别
            • 转让 NFT 类别
            • 查询 NFT 类别
            • 查询 NFT 类别详情
            • 发行 NFT
            • 转让 NFT
            • 编辑 NFT
            • 销毁 NFT
            • 查询 NFT
            • 查询 NFT 详情
            • 查询 NFT 操作记录
          • 合约服务接口
            • Avata API 合约服务使用说明
            • 调用合约
            • 查询合约
          • Web3 域名服务接口
            • 注册域名
            • 转让域名
            • 查询域名
            • 查询用户域名
            • 设置域名解析
            • 查询域名解析
            • 设置域名反向解析
            • 查询域名反向解析
            • 续购域名
          • 查询链账户操作记录
          • 查询上链交易结果
          • 查询枚举值列表
        • 购买能量值接口
          • 购买能量值
          • 批量购买能量值
          • 查询能量值购买结果
          • 查询能量值购买结果列表
        • 钱包服务接口
          • 创建钱包用户
          • 更新钱包用户
          • 查询钱包用户信息
          • 认证钱包用户
      • AVATA v2 API 文档
        • API 版本简介
        • 链账户接口
          • 创建链账户
          • 批量创建链账户
          • 查询链账户
          • 查询链账户操作记录
        • NFT 接口
          • NFT/MT 元数据规范
          • 创建NFT类别
          • 查询NFT类别
          • 查询NFT类别详情
          • 转让NFT类别
          • 发行 NFT
          • 转让 NFT
          • 编辑 NFT
          • 销毁 NFT
          • 查询 NFT
          • 查询 NFT 详情
          • 查询 NFT 操作记录
        • web3域名服务接口
          • 注册域名
          • 转让域名
          • 查询域名
          • 查询用户域名
        • 合约服务接口
          • Avata API 合约服务使用说明
          • 调用合约
            POST
          • 查询合约
            GET
        • 购买能量值接口
          • 购买能量值
          • 批量购买能量值
          • 查询能量值购买结果
          • 查询能量值购买结果列表
        • 区块链存证接口
          • 数字作品存证接口
        • 钱包服务接口
          • 创建钱包用户
          • 更新钱包用户
          • 查询钱包用户信息
          • 认证钱包用户
        • 查询交易结果接口
          • 查询上链交易结果
      • AVATA v1 API 文档
        • API 版本简介
        • 链账户接口
          • 创建链账户
          • 批量创建链账户
          • 查询链账户
          • 查询链账户操作记录
        • NFT 接口
          • 创建 NFT 类别
          • 查询 NFT 类别
          • 查询 NFT 类别详情
          • 转让 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 详情
        • 区块链存证接口
          • 数字作品存证接口
        • 购买能量值接口
          • 购买能量值
          • 批量购买能量值
          • 查询能量值购买结果
          • 查询能量值购买结果列表
        • 查询交易结果接口
          • 查询上链交易结果
          • 查询上链交易排队状态
  • AVATA SDK 文档
    • AVATA SDK 文档
      • AVATA v3 SDK 文档
        • Go 语言
        • JAVA 语言
      • AVATA v1 SDK 文档
        • Go 语言
        • JAVA 语言
        • PHP 语言
  • 底层链 SDK 文档
    • 底层链 SDK 文档
      • 底层链介绍
      • 底层链 API 接入说明
      • Go 语言接入教程
      • JAVA 语言接入教程
      • 文昌链最佳实践建议
  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
上一页
查询用户域名
下一页
调用合约
Built with
本篇目录
前置条件
使用流程
调用合约和查询合约的区别
合约接口中 data 参数的生成步骤说明
Avata API 与标准合约接口调用流程的区别
代码示例