bianjieai/avata-sdk-php

边界智能旗下为对接Avata服务提供的PHP版本的SDK

v0.1.0 2023-02-13 10:47 UTC

README

边界智能旗下为对接Avata服务提供的PHP版本的SDK

# 引用
composer require bianjieai/avata-sdk-php 
# 异常处理
use \Bianjieai\AvataSdkPhp\Exception\Exception;

try {
  ......
} catch (Exception $exception) {
  # 获取Code
  $exception->getCode();
  # 获取CodeSpace
  $exception->getCodeSpace();
  # 获取异常信息
  $exception->getMessage();
  # 异常处理业务流程
  ......
}

二、例子

1. 初始化客户端

# 初始化配置信息
$cfg = [
    "api_key" => "Avata项目API-KEY",
    "api_secret" => "Avata项目API-SECRET",
    "domain" => "请求域名, 不同环境对应不同的域名, 如测试环境: https://stage.apis.avata.bianjie.ai",
    "http_timeout" => <请求Avata接口超时时间, 默认: 10>,
];
# Exception SDK下定义的异常
try {
    $obj = new Client($cfg);
} catch (Exception $exception) {
    // TODO Exception information processing
}

2. 链账户接口

2.1 创建单个链账户

# CreateAccountsReq 创建链账户的请求参数对象
# new CreateAccountsReq(<name>, <operation_id>)
# name: 链账户名称,支持 1-20 位汉字、大小写字母及数字组成的字符串
# operation_id: 操作 ID,保证幂等性,避免重复请求,保证对于同一操作发起的一次请求或者多次请求的结果是一致的;由接入方生成的针对每个 Project ID 唯一的、不超过 64 个大小写字母、数字、-、下划线的字符串组成。此操作 ID 仅限在查询链账户接口中使用,用于查询创建链账户的授权状态。

try {
    $account = $obj->accounts->CreateAccount(new CreateAccountsReq(<name>, <operation_id>));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# CreateAccountsRes 创建链账户成功返回的参数对象
# account: 链账户地址
# name: 链账户名称
# operation_id: 操作 ID。此操作 ID 仅限在查询链账户接口中使用,用于查询创建链账户的授权状态
$account 是CreateAccountsRes对象

2.2 批量创建链账户

# BatchCreateAccountsReq 批量创建链账户参数对象
# new BatchCreateAccountsReq(<count>, <operation_id>)
# count: 批量创建链账户的数量, 默认: 1
# operation_id: 操作 ID,保证幂等性,避免重复请求,保证对于同一操作发起的一次请求或者多次请求的结果是一致的;由接入方生成的针对每个 Project ID 唯一的、不超过 64 个大小写字母、数字、-、下划线的字符串组成。此操作 ID 仅限在查询链账户接口中使用,用于查询创建链账户的授权状态。

try {
    $accounts = $obj->accounts->BatchCreateAccounts(new BatchCreateAccountsReq(<count>, <operation_id>));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# BatchCreateAccountsRes 批量创建链账户成功返回的参数对象
# accounts: 链账户地址列表, 数组
# operation_id: 操作 ID。此操作 ID 仅限在查询链账户接口中使用,用于查询创建链账户的授权状态
$accounts 是BatchCreateAccountsRes对象

2.3 查询链账户

# QueryAccountsReq 查询链账户参数对象, 类型为数组
# offset: 	游标,默认为 0
# limit: 		每页记录数,默认为 10,上限为 50
# account: 	链账户地址
# name: 		链账户名称,支持模糊查询
# operation_id: 操作 ID。此操作 ID 需要填写在请求创建链账户/批量创建链账户接口时,返回的 Operation ID
# start_date: 	创建日期范围 - 开始,yyyy-MM-dd(UTC 时间)
# end_date: 		创建日期范围 - 结束,yyyy-MM-dd(UTC 时间)
# sort_by:			排序规则:DATE_ASC / DATE_DESC
# 以上参数类型都为String, 如写入其他类型,可能会导致签名参数验证不通过


try {
    $accounts = $obj->accounts->QueryAccounts(new QueryAccountsReq([
        "offset" =>     "0",
        "limit" =>      "10",
			]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# QueryAccountsRes 查询链账户成功返回的参数对象
# offset:						游标
# limit:						每页记录数
# total_count:			总记录数
# accouts:					链账户列表, 类型为数组
# accounts->account: 链账户地址
# accounts->name: 	 链账户名称
# accounts->gas: 		 文昌链能量值余额
# accounts->biz_fee: 文昌链 DDC 业务费余额,单位:分
# accounts->operation_id: 操作 ID
# accounts->status: 链账户的授权状态,0 未授权;1 已授权。链账户授权成功后,可使用该链账户地址发起上链交易请求;未授权时不影响作为交易的接受者地址进行使用(DDC 业务除外)
$accounts 是QueryAccountsRes对象

2.4 查询链账户操作记录

# QueryAccountsHistory 查询链账户操作记录参数对象, 类型为数组
# offset:								游标,默认为 0
# limit: 								每页记录数,默认为 10,上限为 50
# account: 							链账户地址
# module:								功能模块, Enum: "nft" "mt"
# operation:						操作类型,仅 module 不为空时有效,默认为 "all"。
#												module = nft 时,可选:issue_class / transfer_class / mint / edit / transfer / burn
#												module = mt 时,可选:issue_class / transfer_class / issue / mint / edit / transfer /burn
# tx_hash:							Tx Hash
# start_date:						日期范围 - 开始,yyyy-MM-dd(UTC 时间)
# end_date:							日期范围 - 结束,yyyy-MM-dd(UTC 时间)
# sort_by:							排序规则:DATE_ASC / DATE_DESC
# 以上参数类型都为String, 如写入其他类型,可能会导致签名参数验证不通过

try {
    $accountsHistory = $obj->accounts->QueryAccountsHistory(new QueryAccountsHistoryReq([
            "offset" =>     "0",
            "limit" =>      "10",
			]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# QueryAccountsHistoryRes 查询链账户操作记录成功返回的参数对象
# offset:						游标
# limit:						每页记录数
# total_count:			总记录数
# operation_records:					操作记录列表, 类型为数组
# operation_records->tx_hash: 操作 Tx Hash
# operation_records->module: 	 功能模块, Enum: "nft" "mt"
# operation_records->operation:操作类型, Enum: "issue_class" "transfer_class" "mint" "edit" "transfer" "burn" "issue"
# operation_records->signer: Tx 签名者地址
# operation_records->timestamp: 操作时间戳(UTC 时间)
# operation_records->gas_fee: 链上交易消耗的能量值,当前支持查询 2022 年 08 月 18 日 11:00:00(UTC 时间) 底层链升级固定 Gas 之后的数据,其它历史数据已归档,暂不支持查询对应结果
# operation_records->business_fee: 链上交易消耗的业务费
# operation_records->nft_msg: 对应不同操作类型的消息体,下方的Key只作为展示用, 实际返回中不存在该Key, 只返回对应数据
# operation_records->mt_msg: 对应不同操作类型的消息体,下方的Key只作为展示用, 实际返回中不存在该Key, 只返回对应数据
# 以上nft_msg, mt_msg具体参数可参考文档
$accountsHistory 是QueryAccountsHistoryRes对象

3.NFT 接口

3.1 类别接口

3.1.1 创建类别

# CreateNFTClassesReq 创建NFT类别参数对象, 类型为数组
# name:								NFT 类别名称, 必填字段
# class_id:						NFT 类别 ID,仅支持小写字母及数字,以字母开头
# symbol:							标识
# description:				描述
# uri:								链外数据链接
# uri_hash:						链外数据 Hash
# data:								自定义链上元数据
# owner:							NFT 类别权属者地址,拥有在该 NFT 类别中发行 NFT 的权限和转让该 NFT 类别的权限。支持任一 Avata 平台内合法链账户地址, 必填字段
# operation_id:				操作ID, 必填字段


try {
  $nftClasses = $obj->nft_classes->CreateNFTClasses(new CreateNFTClassesReq([
      "name"  => "PHP-SDK 测试创建类别",
      "owner"     => "类别拥有者链账户地址",
      "operation_id" => "<操作ID>"
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# CreateNFTClassesRes 创建NFT类别交易成功返回参数对象
# operation_id: 操作ID
$nftClasses 是CreateNFTClassesRes对象

3.1.2 查询类别列表

# QueryNFTClasses 查询NFT类别列表参数对象, 类型为数组
# offset:								游标,默认为 0
# limit: 								每页记录数,默认为 10,上限为 50
# id:										NFT 类别 ID
# name:									NFT 类别名称,支持模糊查询
# owner:								NFT 类别权属者地址
# tx_hash:							创建 NFT 类别的 Tx Hash
# start_date:						NFT 类别创建日期范围 - 开始,yyyy-MM-dd(UTC 时间)
# end_date:							NFT 类别创建日期范围 - 结束,yyyy-MM-dd(UTC 时间
# sort_by:							排序规则:DATE_ASC / DATE_DESC

try {
  $classes = $obj->nft_classes->QueryNFTClasses(new QueryNFTCLassesReq([
      "offset" => "0",
      "limit" => "10",
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# QueryNFTCLassesRes 查询NFT类别列表成功参数对象
# offset:						游标
# limit:						每页记录数
# total_count:			总记录数
# classes:					类别列表, 类型为数组
# classes->id:			NFT 类别 ID
# classes->name:		NFT 类别名称
# classes->symbol:	NFT 类别标识
# classes->nft_count: NFT 类别包含的 NFT 总量
# classes->uri:			链外数据链接
# classes->owner:		NFT 类别权属者地址
# classes->tx_hash: 创建 NFT 类别的 Tx Hash
# classes->timestamp: 创建 NFT 类别的时间戳(UTC 时间)
$classes 是QueryNFTCLassesRes对象

3.1.3 查询类别详情

# QueryNFTClass 查询类别详情对象
# id:		NFT 类别 ID 必填

try {
	$class = $obj->nft_classes->QueryNFTClass(new QueryNFTClassReq("<id>"));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# QueryNFTClassRes 查询类别详情返回对象
# id:								NFT 类别 ID
# name:							NFT 类别名称
# symbol:						NFT 类别标识
# description:			NFT 类别描述
# nft_count:				NFT 类别包含的 NFT 总量
# uri:							链外数据链接
# uri_hash:					链外数据 Hash
# data:							自定义链上元数据
# owner:						NFT 类别权属者地址
# tx_hash:					创建 NFT 类别的 Tx Hash
# timestamp:				创建 NFT 类别的时间戳(UTC 时间)
$class 是QueryNFTClassRes对象

3.1.4 转让类别

# TransferNFTClassReq 转让类别对象, 类型为数组
# class_id:					NFT 类别 ID,需要转让的类别ID, 必填字段
# owner:						NFT 类别权属者地址, 当前类别的权属者, 必填字段
# recipient:				NFT 类别接收者地址,支持任一 Avata 平台内合法链账户地址, 必填字段
# operation_id:			操作 ID, 必填字段

try {
  $classes = $obj->nft_classes->TransferNFTClass(new TransferNFTClassReq([
      "class_id"  => "<class_id>",
      "owner" => "<owner>",
      "recipient"=>"<recipient>",
      "operation_id"=>"<operation_id>"
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# TransferNFTClassRes 转让类别返回的对象
# operation_id:				操作ID
$classes 是TransferNFTClassRes对象

3.2 NFT 接口

3.2.1 发行NFT

# CreateNFTReq 发行NFT对象参数, 类型为数组
# class_id:								NFT类别ID, 必填参数
# name:										NFT 名称, 必填参数
# uri:										链外数据链接
# uri_hash:								链外数据 Hash
# data:										自定义链上元数据
# recipient:							NFT 接收者地址,支持任一文昌链合法链账户地址,默认为 NFT 类别的权属者地址,不填写该参数,默认该NFT接收者为类别的拥有者
# operation_id:						操作ID, 必填参数

try {
  $nft = $obj->nfts->CreateNFT(new CreateNFTReq([
      "class_id"  => "<类别ID>",
      "name"  => "<NFT 名称>",
      "operation_id" => "<操作ID>",
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# CreateNFTRes 发行NFT成功返回对象
# operation_id:				操作ID
$nft 是CreateNFTRes对象

3.2.2 转让NFT

# TransferNFTReq 转让NFT对象参数, 类型为数组
# class_id:								NFT 类别 ID, 必填参数
# owner:									NFT 持有者地址, 必填参数
# nft_id:									NFT ID, 必填参数
# recipient:							NFT 接收者地址, 必填参数
# operation_id:						操作 ID, 必填参数

try {
	$nft = $obj->nfts->TransferNFT(new TransferNFTReq([]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# TransferNFTRes	转让NFT成功返回对象
# operation_id:				操作ID
$nft 是TransferNFTRes对象

3.2.3 编辑NFT

# EditNFTReq 编辑NFT对象参数, 类型为数组
# class_id:								NFT 类别 ID, 必填参数
# owner:									NFT 持有者地址, 必填参数
# nft_id:									NFT ID, 必填参数
# name:										NFT 名称, 必填参数
# uri:										链外数据链接
# data:										自定义链上元数据
# operation_id:						操作 ID, 必填参数

try {
	$nft = $obj->nfts->EditNFT(new EditNFTReq([]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# EditNFTRes	编辑NFT成功返回对象
# operation_id:				操作ID
$nft 是EditNFTRes对象

3.2.4 销毁NFT

# DeleteNFTReq 销毁NFT对象参数, 类型为数组
# class_id:								NFT 类别 ID, 必填参数
# owner:									NFT 持有者地址, 必填参数
# nft_id:									NFT ID, 必填参数
# operation_id:						操作 ID, 必填参数

try {
	$nft = $obj->nfts->DeleteNFT(new DeleteNFTReq([]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# DeleteNFTRes	销毁NFT成功返回对象
# operation_id:				操作ID
$nft 是DeleteNFTRes对象

3.2.5 批量发行NFT

# BatchCreateNFTReq 批量发行NFT对象参数, 类型为数组
# class_id:								NFT 类别 ID, 必填参数
# name:										NFT 名称, 必填参数
# operation_id:						操作 ID, 必填参数
# recipients:							NFT 接收者地址和发行数量。以数组的方式进行组合,可以自定义多个组合,可面向多地址批量发行 NFT, 数组, [["amount" => <发行数量>, "recipient" => "<接收者地址>"]], 具体可参考接口文档 必填参数
# uri:										链外数据链接
# uri_hash:								链外数据 Hash
# data:										自定义链上元数据

try {
	$nfts = $obj->nfts->BatchCreateNFT(new BatchCreateNFTReq([]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# BatchCreateNFTRes 批量发行NFT成功返回对象
# operation_id:				操作ID
$nfts 是BatchCreateNFTRes对象

3.2.6 批量转让NFT

# BatchTransferNFT 批量转让NFT对象参数, 类型为数组
# owner:						NFT 持有者地址, 必填参数
# data:							转让的NFT和接收者, 数组, 必填参数
# operation_id:						操作 ID, 必填参数

try {
  $nfts = $obj->nfts->BatchTransferNFT(new BatchTransferNFTReq([
      "owner"  => "<NFT 持有者地址>",
      "operation_id" => "<操作 ID>",
      "data" => [
          [
              "nfts" => [
                  [
                      "class_id" => "<class_id 类别ID>",
                      "nft_id" => "<转让的NFT-ID>"
                  ],
                  ......
              ],
              "recipient" => "<接收者地址>"
          ]
      ]
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# BatchTransferNFTRes 批量转让NFT成功返回对象
# operation_id:				操作ID
$nfts 是BatchTransferNFTRes对象

3.2.7 批量编辑NFT

# BatchEditNFTReq 批量编辑NFT对象参数, 类型为数组
# owner:						NFT 持有者地址, 必填参数
# nfts:							编辑的NFT信息, 数组, 必填参数
# nfts->class_id:		NFT 类别 ID, 字符串, 必填参数
# nfts->nft_id:			NFT ID, 字符串, 必填参数
# nfts->name:				NFT 名称,字符串, 必填参数
# nfts->uri:				链外数据链接, 字符串
# nfts->data:				自定义链上元数据, 字符串
# operation_id:						操作 ID, 必填参数

try {
  $nfts = $obj->nfts->BatchEditNFT(new BatchEditNFTReq([
      "owner"  => "<NFT 持有者地址>",
      "operation_id" => "<操作 ID>",
      "nfts" => [
          [
              "class_id"=> "<NFT 类别 ID, 字符串, 必填参数>",
              "nft_id"=> "<NFT ID, 字符串, 必填参数>",
              "name"=> "<NFT 名称,字符串, 必填参数>",
              "uri"=> "<链外数据链接, 字符串>",
              "data"=> "<自定义链上元数据, 字符串>"
          ]
      ]
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# BatchEditNFTRes 批量编辑NFT成功返回对象
# operation_id:				操作ID
$nfts 是BatchEditNFTRes对象

3.2.7 批量销毁NFT

# BatchDeleteNFTReq 批量销毁NFT对象参数, 类型为数组
# owner:						NFT 持有者地址, 必填参数
# nfts:							编辑的NFT信息, 数组, 必填参数
# nfts->class_id:		NFT 类别 ID, 字符串, 必填参数
# nfts->nft_id:			NFT ID, 字符串, 必填参数
# operation_id:						操作 ID, 必填参数

try {
  $nfts = $obj->nfts->BatchDeleteNFT(new BatchDeleteNFTReq([
      "owner"  => "<NFT 持有者地址>",
      "operation_id" => "<操作 ID>",
      "nfts" => [
          [
              "class_id"=> "<NFT 类别 ID, 字符串, 必填参数>",
              "nft_id"=> "<NFT ID, 字符串, 必填参数>"
          ]
      ]
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# BatchDeleteNFTRes 批量销毁NFT成功返回对象
# operation_id:				操作ID
$nfts 是BatchDeleteNFTRes对象

3.2.8 NFT列表

# QueryNFTSReq 查询NFT列表参数对象, 类型为数组
# offset:								游标,默认为 0
# limit: 								每页记录数,默认为 10,上限为 50
# id:										NFT 类别 ID
# name:									NFT 名称,支持模糊查询
# class_id:							NFT 类别 ID
# owner:								NFT 权属者地址
# tx_hash:							创建 NFT 的 Tx Hash
# status:								NFT 状态:active / burned,默认为 active
# start_date:						NFT 类别创建日期范围 - 开始,yyyy-MM-dd(UTC 时间)
# end_date:							NFT 类别创建日期范围 - 结束,yyyy-MM-dd(UTC 时间
# sort_by:							排序规则:DATE_ASC / DATE_DESC

try {
  $nfts = $obj->nfts->QueryNFTS(new QueryNFTSReq([
      "offset" => "0",
      "limit" => "10",
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# QueryNFTSRes 			查询NFT列表成功参数对象
# offset:						游标
# limit:						每页记录数
# total_count:			总记录数
# nfts:							NFT列表, 类型为数组
# nfts->id:					NFT  ID
# nfts->name:				NFT 名称
# nfts->class_id:			NFT 类别ID
# nfts->class_name:			NFT 类别名称
# nfts->class_symbol:			NFT 类别标识
# nfts->uri: 			链外数据链接
# nfts->owner:		NFT 权属者地址
# nfts->status:		FT 状态:active / burned
# nfts->tx_hash: 创建 NFT 类别的 Tx Hash
# nfts->timestamp: 创建 NFT 类别的时间戳(UTC 时间)
$nfts 是QueryNFTSRes对象

3.2.9 查询NFT详情

# QueryNFTReq 					查询NFT详情参数对象
# class_id:							类别ID
# nft_id:								NFT ID

try {
	$nft = $obj->nfts->QueryNFT(new QueryNFTReq("<class_id>", "<nft_id>"));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# QueryNFTRes 	查询NFT详情成功参数对象
# id:					NFT  ID
# name:				NFT 名称
# class_id:			NFT 类别ID
# class_name:			NFT 类别名称
# class_symbol:			NFT 类别标识
# uri: 			链外数据链接
# uri_hash: 			链外数据 Hash
# data:			自定义链上元数据
# owner:		NFT 权属者地址
# status:		FT 状态:active / burned
# tx_hash: 创建 NFT 类别的 Tx Hash
# timestamp: 创建 NFT 类别的时间戳(UTC 时间)
$nft 是QueryNFTRes对象

3.2.10 查询NFT操作记录

# QueryNFTHistoryReq  	查询NFT操作记录参数对象
# class_id:							NFT 类别 ID
# nft_id:								NFT ID
# offset:								游标,默认为 0
# limit: 								每页记录数,默认为 10,上限为 50
# signer:								Tx 签名者地址
# tx_hash:							NFT 操作 Tx Hash
# operation:						操作类型:mint / edit / transfer / burn
# start_date:						NFT 操作日期范围 - 开始,yyyy-MM-dd(UTC 时间)
# end_date:							NFT 操作日期范围 - 结束,yyyy-MM-dd(UTC 时间)
# sort_by:							排序规则:DATE_ASC / DATE_DESC

try{
  $NFTHistorys = $obj->nfts->QueryNFTHistory(new QueryNFTHistoryReq([
      "class_id"	=> "<NFT 类别 ID>",
      "nft_id"		=> "<NFT ID>",
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# QueryNFTHistoryRes 查询NFT操作记录返回对象
# offset:						游标
# limit:						每页记录数
# total_count:			总记录数
# operation_records:							NFT操作记录列表, 类型为数组
# operation_records->tx_hash:			NFT 操作的 Tx Hash
# operation_records->operation:		NFT 操作类型 Enum: "mint" "edit" "transfer" "burn"
# operation_records->signer:			Tx 签名者地址
# operation_records->recipient:		NFT 接收者地址
# operation_records->timestamp:		NFT 操作时间戳(UTC 时间)
$NFTHistorysQueryNFTHistoryRes对象

4.MT 接口

4.1 类别接口

4.1.1 创建 MT 类别

# CreateMTClassReq 创建 MT 类别参数对象,类型为数组
# name:								MT 类别名称, 必填字段
# owner:							MT 类别权属者地址,支持任一 Avata 平台内合法链账户地址, 必填字段
# data:								自定义链上元数据
# operation_id:				        操作ID, 必填字段

try{
  $class = $obj->mts->CreateMTClass(new CreateMTClassReq([
    "name" => "<MT 类别名称>",
    "owner" => "<MT 类别权属者地址>",
    "operation_id" => "<操作 ID>"
    ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# CreateMTClassRes 创建MT类别交易成功返回参数对象
# operation_id: 操作ID
$class 是CreateMTClassRes对象

4.1.2 查询类别列表

# QueryMTClasses 查询 MT 类别列表参数对象, 类型为数组
# offset:								游标,默认为 0
# limit: 								每页记录数,默认为 10,上限为 50
# id:									MT 类别 ID
# name:									MT 类别名称,支持模糊查询
# owner:								MT 类别权属者地址
# tx_hash:							创建 MT 类别的 Tx Hash
# start_date:						MT 类别创建日期范围 - 开始,yyyy-MM-dd(UTC 时间)
# end_date:							MT 类别创建日期范围 - 结束,yyyy-MM-dd(UTC 时间
# sort_by:							排序规则:DATE_ASC / DATE_DESC

try{
  $classes = $obj->mts->QueryMTClasses(new QueryMTClassesReq([
      "offset" => "0",
      "limit" => "10",
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# QueryMTClassesRes 查询NFT类别列表成功参数对象
# offset:						游标
# limit:						每页记录数
# total_count:			总记录数
# classes:					类别列表, 类型为数组
# classes->id:			MT 类别 ID
# classes->name:		MT 类别名称
# classes->mt_count: 	MT 类别包含的 MT 总量(AVATA 平台内)
# classes->owner:		MT 类别权属者地址
# classes->tx_hash: 	创建 MT 类别的 Tx Hash
# classes->timestamp: 	创建 MT 类别的时间戳(UTC 时间)
$classes 是QueryMTClassesRes对象

4.1.3 查询类别详情

# QueryMTClass 查询类别详情对象
# id:		MT 类别 ID 必填

try{
	$classes = $obj->mts->QueryMTClass(new QueryMTClassReq("<id>"));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# QueryMTClassRes 查询类别详情返回对象
# id:								MT 类别 ID
# name:							MT 类别名称
# mt_count:				MT 类别包含的 NFT 总量
# data:							自定义链上元数据
# owner:						MT 类别权属者地址
# tx_hash:					创建 MT 类别的 Tx Hash
# timestamp:				创建 MT 类别的时间戳(UTC 时间)
$classes 是QueryMTClassRes对象

4.1.4 转让类别

# TransferMTClassReq 转让类别对象, 类型为数组
# class_id:					MT 类别 ID,需要转让的类别ID, 必填字段
# owner:					MT 类别权属者地址, 当前类别的权属者, 必填字段

# recipient:				MT 类别接收者地址,支持任一 Avata 平台内合法链账户地址, 必填字段
# operation_id:				操作 ID, 必填字段

try{
  $class = $obj->mts->TransferMTClass( "<class_id>","<owner>",new TransferMTClassReq([
      "recipient"=>"<recipient>",
      "operation_id"=>"<operation_id>"
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# TransferMTClassRes 转让类别返回的对象
# operation_id:				操作ID
$class 是TransferMTClassRes对象

4.2 MT 接口

4.2.1 发行MT

# IssueMTReq 发行 MT 对象参数, 类型为数组
# data:									自定义链上元数据
# amount:								MT 数量,不填写数量时,默认发行数量为 1
# recipient:							NFT 接收者地址,支持任一文昌链合法链账户地址,默认为 NFT 类别的权属者地址,不填写该参数,默认该NFT接收者为类别的拥有者
# operation_id:						操作ID, 必填参数

try{
  $mt = $obj->mts->IssueMT(new IssueMTReq([
      "operation_id" => "<操作ID>",
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# IssueMTRes 发行MT成功返回对象
# operation_id:				操作ID
$mt 是IssueMTRes对象

4.2.2 增发MT

# MintMTReq 增发 MT 对象参数, 类型为数组
# class_id:								MT 类别 ID, 必填参数
# mt_id:								MT ID, 必填参数

# amount:								MT 名称, 必填参数
# recipient:							MT 接收者地址
# operation_id:							操作ID, 必填参数

try{
  $mt = $obj->mts->MintMT("<MT 类别 ID>","<MT ID>",new MintMTReq([
      "operation_id" => "<操作 ID>",
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# MintMTRes 增发 MT 成功返回对象
# operation_id:				操作ID
$mt 是MintMTRes对象

4.2.3 转让MT

# TransferMTReq 转让 MT 对象参数, 类型为数组
# class_id:								MT 类别 ID, 必填参数
# owner:								MT 持有者地址, 必填参数
# mt_id:								MT ID, 必填参数

# amount:								转移的数量(默认为 1 )
# recipient:							接收者地址, 必填参数
# operation_id:							操作 ID, 必填参数

try{
  $mt = $obj->mts->TransferMT("<MT 类别 ID>","<MT 持有者地址>","<MT ID>",new TransferMTReq([
      "operation_id" => "<操作 ID>",
      "recipient" => "<MT 接收者地址>",
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# TransferMTRes	转让 MT 成功返回对象
# operation_id:				操作ID
$mt 是TransferMTRes对象

4.2.4 编辑MT

# EditMTReq 编辑 MT 对象参数, 类型为数组
# class_id:									MT 类别 ID, 必填参数
# owner:									MT 类别权属者地址, 必填参数
# mt_id:									MT ID, 必填参数
# data:										自定义链上元数据,必填参数
# operation_id:								操作 ID, 必填参数

try{
  $mt = $obj->mts->EditMT("<MT 类别 ID>","<MT 类别权属者地址>","<MT ID>", new EditMTReq([
      "operation_id" => "<操作 ID>",
      "data" => "<自定义链上元数据>",
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# EditMTRes	编辑NFT成功返回对象
# operation_id:				操作ID
$mt 是EditMTRes对象

4.2.5 销毁MT

# BurnMTReq 销毁 MT 对象参数, 类型为数组
# class_id:									MT 类别 ID, 必填参数
# owner:									MT 持有者地址, 必填参数
# mt_id:									MT ID, 必填参数
# amount:								 	销毁的数量
# operation_id:								操作 ID, 必填参数

try{
  $mt = $obj->mts->BurnMT("<MT 类别 ID>","<MT 持有者地址>","<MT ID>", new BurnMTReq([
      "operation_id" => "<操作 ID>",
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# BurnMTRes	销毁 MT 成功返回对象
# operation_id:				操作ID
$mt 是BurnMTRes对象

4.2.6 查询MT列表

# QueryMTsReq 查询 MT 列表参数对象, 类型为数组
# offset:								游标,默认为 0
# limit: 								每页记录数,默认为 10,上限为 50
# id:									MT ID
# name:									MT 名称,支持模糊查询
# class_id:								MT 类别 ID
# owner:								MT 发行者地址
# tx_hash:							    创建 MT 的 Tx Hash
# start_date:							MT 类别创建日期范围 - 开始,yyyy-MM-dd(UTC 时间)
# end_date:								MT 类别创建日期范围 - 结束,yyyy-MM-dd(UTC 时间
# sort_by:								排序规则:DATE_ASC / DATE_DESC

try{
  $mts = $obj->mts->QueryMTs(new QueryMTsReq([
      "offset" => "0",
      "limit" => "10",
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# QueryMTsRes 			查询 MT 列表成功参数对象
# offset:						游标
# limit:						每页记录数
# total_count:					总记录数
# mts:							MT 列表, 类型为数组
# mts->id:					MT  ID
# mts->class_id:			MT 类别ID
# mts->class_name:			MT 类别名称
# mts->issuer:				首次发行该 MT 的链账户地址
# mts->owner_count:			MT 拥有者数量(AVATA 平台内)
# mts->timestamp: 			MT 首次发行时间戳(UTC 时间)
$mts 是QueryMTsRes对象

4.2.7 查询MT详情

# QueryMTReq 					查询 MT 详情参数对象
# class_id:									MT 类别 ID, 必填参数
# mt_id:									MT ID, 必填参数

try{
	$mt = $obj->mts->QueryMT(new QueryMTReq("<class_id>", "<mt_id>"));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# QueryMTRes 	查询 MT 详情成功参数对象
# id:					MT  ID
# class_id:				MT 类别ID
# class_name:			MT 类别名称
# data:					自定义链上元数据
# owner_count:		    MT 拥有者数量(AVATA 平台内)
# issue_data:			首次发行该 MT 的链账户地址、发行时间、首发数量、首发交易哈希
# mt_count: 			MT 流通总量(全链)
# timestamp: 			MT 发行次数(AVATA 平台内累计发行次数(包括首次发行和增发))
$mt 是QueryMTRes对象

4.2.8 查询MT操作记录

# QueryMTHistoryReq  	查询 MT 操作记录参数对象
# class_id:							MT 类别 ID
# mt_id:							MT ID

# offset:							游标,默认为 0
# limit: 							每页记录数,默认为 10,上限为 50
# signer:							Tx 签名者地址
# tx_hash:							MT 操作 Tx Hash
# operation:						操作类型: issue(首发MT) / mint(增发MT) / edit(编辑MT) / transfer(转让MT) / burn(销毁MT)
# start_date:						MT 操作日期范围 - 开始,yyyy-MM-dd(UTC 时间)
# end_date:							MT 操作日期范围 - 结束,yyyy-MM-dd(UTC 时间)
# sort_by:							排序规则:DATE_ASC / DATE_DESC

try{
	$MTHistorys = $obj->mts->QueryMTHistory("<MT 类别 ID>","<MT ID>",new QueryMTHistoryReq([]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# QueryMTHistoryRes 查询 MT 操作记录返回对象
# offset:						游标
# limit:						每页记录数
# total_count:					总记录数
# operation_records:			MT 操作记录列表, 类型为数组
# operation_records->tx_hash:			MT 操作的 Tx Hash
# operation_records->operation:			MT 操作类型 Enum: "issue" "mint" "edit" "transfer" "burn"
# operation_records->signer:			Tx 签名者地址
# operation_records->recipient:			MT 接收者地址
# operation_records->amount:			MT 操作数量
# operation_records->timestamp:			MT 操作时间戳(UTC 时间)
$MTHistorysQueryMTHistoryRes对象

4.2.9 查询MT余额

# QueryMTBalanceReq  	查询 MT 余额参数对象
# class_id:							MT 类别 ID
# account:							链账户地址
# offset:								游标,默认为 0
# limit: 								每页记录数,默认为 10,上限为 50
# id:							 		MT ID

try{
	$mtBalance = $obj->mts->QueryMTBalance("<MT 类别 ID>","<链账户地址>",new QueryMTBalanceReq([]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# QueryMTBalanceRes 查询 MT 余额返回对象
# offset:						游标
# limit:						每页记录数
# total_count:					总记录数
# mts:						
# mts->tx_hash:			MT ID
# mts->operation:		MT 数量
$mtBalance 是QueryMTBalanceRes对象

5.充值接口

5.1 购买能量值/业务费

# CreateOrdersReq					购买能量值和业务费参数对象
# account:									链账户地址, 必填参数
# amount:									购买金额 ,只能购买整数元金额;单位:分, 必填参数
# order_type:							充值类型:gas:能量值;business:业务费, 必填参数
# order_id:								自定义订单流水号,必需且仅包含数字、下划线及英文字母大/小写

try{
  $order = $obj->orders->CreateOrder(new CreateOrdersReq([
      "account"	=> "<链账户地址>",
      "amount"	=> "<购买金额>",
      "order_type"				=> "<充值类型>",
      "order_id"	=> "<自定义订单流水号>"
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# CreateOrdersRes 					购买能量值和业务费返回对象
# order_id:									交易流水号(用户发起交易时传入的交易流水号)
$order 是CreateOrdersRes对象

5.2 查询能量值/业务费购买结果列表

# QueryOrdersReq  			查询能量值/业务费列表参数对象
# offset:								游标,默认为 0
# limit: 								每页记录数,默认为 10,上限为 50
# status:								订单状态:success 充值成功 / failed 充值失败 / pending 正在充值
# start_date:						充值订单创建日期范围 - 开始,yyyy-MM-dd(UTC 时间)
# end_date:							充值订单创建日期范围 - 结束,yyyy-MM-dd(UTC 时间)
# sort_by:							排序规则:DATE_ASC / DATE_DESC, 默认为 DATE_DESC

try{
	$orders = $obj->orders->QueryOrders(new QueryOrdersReq([]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# QueryOrdersRes 		查询能量值/业务费列表返回对象
# offset:						游标
# limit:						每页记录数
# total_count:			总记录数
# order_infos:			查询能量值/业务费记录列表, 类型为数组
# order_infos->order_id:		订单流水号
# order_infos->status:			订单状态,success 充值成功 / failed 充值失败 / pending 正在充值
# order_infos->message:			提示信息
# order_infos->account:			链账户地址, 调用「批量购买能量值」接口不展示此字段
# order_infos->amount:			充值金额,为整数元金额;单位:分, 调用「批量购买能量值」接口不展示此字段
# order_infos->number:			充值的数量,充值 gas 该值单位为 ugas,充值业务费单位为分, 调用「批量购买能量值」接口不展示此字段
# order_infos->create_time:		创建时间(UTC 时间)
# order_infos->update_time:		最后操作时间(UTC 时间)
# order_infos->order_type:		订单类型,gas / business
$orders 是QueryOrdersRes对象

5.3 查询能量值/业务费购买结果

# QueryOrderReq  				查询能量值/业务费参数对象
# order_id:							需要查询的订单流水号	

try{
	$order = $obj->orders->QueryOrder(new QueryOrderReq("<需要查询的订单流水号>"));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# QueryOrderRes 		查询能量值/业务费返回对象
# order_id:			订单流水号
# status:				订单状态,success 充值成功 / failed 充值失败 / pending 正在充值
# message:			提示信息
# account:			链账户地址, 调用「批量购买能量值」接口不展示此字段
# amount:				充值金额,为整数元金额;单位:分, 调用「批量购买能量值」接口不展示此字段
# number:				充值的数量,充值 gas 该值单位为 ugas,充值业务费单位为分, 调用「批量购买能量值」接口不展示此字段
# create_time:	创建时间(UTC 时间)
# update_time:	最后操作时间(UTC 时间)
# order_type:		订单类型,gas / business
$order 是QueryOrderRes对象

5.4 批量购买能量值

# BatchCreateOrderReq					批量购买能量值参数对象
# list:												充值信息,二维数组, 必填参数
# order_id:										自定义订单流水号,必需且仅包含数字、下划线及英文字母大/小写, 必填参数

try{
  $order = $obj->orders->BatchCreateOrder(new BatchCreateOrderReq([
      "list"      => [
          [
              "account"   =>  "<链账户地址>",
              "amount"    =>  <购买金额 ,只能购买整数元金额;单位:分>,
          ],
      ],
      "order_id"  => "<自定义订单流水号,必需且仅包含数字、下划线及英文字母大/小写>",
  ]));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# BatchCreateOrderRes					批量购买能量值返回对象
# order_id:										交易流水号(用户发起交易时传入的交易流水号)
$order 是BatchCreateOrderRes对象

6.链上存证服务

6.1 数字作品存证接口

# CreateRecordReq								数字作品存证参数对象
# identity_type:								存证主体;1:个人;2:企业
# identity_name:								个人姓名或企业名称,规范如下:
#																个人姓名:长度限制 1-16 个字符(UTF-8 编码),首字符不能是特殊符号;
# 															企业名称:长度限制 1-50 个字符(UTF-8 编码),首字符不能是特殊符号;
# 															未传入存证主体字段时,不支持此字段;传入存证主体字段时,此字段必填
# identity_num:									个人为身份证号码,企业为统一社会信用代码,未传入存证主体字段时,不支持此字段;传入存证主体字段时,此字段选填
# type:													作品类型, 参数值具体见SDK注释或接口文档字段定义,必填字段
# name:													作品名称, 必填字段
# description:									作品描述, 必填字段
# hash:													作品哈希;将单个作品源文件使用单向散列函数(如 MD5,SHA 等)进行一次 Hash 计算;将多个作品源文件分别进行一次 Hash 计算,再将得到的 Hash 值进行二次 Hash 计算, 必填字段
#	hash_type:										作品哈希类型 1:其它; 2:SHA256;3:MD5;4:SHA256-PFV, 必填字段
# operation_id:									操作 ID,保证幂等性,避免重复请求,保证对于同一操作发起的一次请求或者多次请求的结果是一致的;由接入方生成的、针对每个 Project ID 唯一的、不超过 64 个大小写字母、数字、-、下划线的字符串, 必填字段

try{
	$record = $obj->records->CreateRecord(new CreateRecordReq([]));
} catch (Exception $exception) {
    // TODO Exception information processing
}
# CreateRecordRes							数字作品存在返回对象
# operation_id:								操作ID
$record 是CreateRecordRes对象

7.交易结果查询接口

7.1 上链交易结果查询

# QueryTxReq					上链交易结果查询对象
# operation_id:				操作 ID, 创建交易时使用的操作id, 用于查询交易状态, 必填参数

try{
	$tx = $obj->txs->QueryTx(new QueryTxReq("<operation_id>"));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# QueryTxRes							上链交易结果查询返回对象
# type:										用户操作类型, 参数值请查询接口文档或SDK注释
# module:									交易模块, nft,mt,record
# tx_hash:								交易哈希
# status:									交易状态, 0 处理中; 1 成功; 2 失败; 3 未处理;
#													交易状态说明:
#													status 为 3(未处理),上链请求还在等待处理,请稍等;
#													status 为 0(处理中),上链请求正在处理,请等待处理完成;
#													status 为 1(成功),交易已上链并执行成功;
#													status 为 2(失败),说明该交易执行失败。请在业务侧做容错处理。可以参考接口返回的 message(交易失败#													的错误描述信息) 对 NFT / MT / 业务接口的请求参数做适当调整后,使用「新的 Operation ID 」重新发起 NFT / MT / 业务接口请求
# message:								交易失败的错误描述信息
# block_height:						交易上链的区块高度
#	timestamp:							交易上链时间(UTC 时间)
#	nft:										对应不同操作类型的消息体
# mt:											对应不同操作类型的消息体
# record:									对应不同操作类型的消息体
$tx 是QueryTxRes对象

7.2 上链交易排队状态查询

# QueryTxQueueReq								上链交易排队状态查询对象
# operation_id:									操作 ID, 创建交易时使用的操作id, 非必填参数

try{
	$tx = $obj->txs->QueryTxQueue(new QueryTxQueueReq("<operation_id>"));
} catch (Exception $exception) {
    // TODO Exception information processing
}

# QueryTxQueueRes							上链交易排队状态查询返回对象
# queue_total:								当前队列中待处理交易总数
# queue_request_time:					当前队列即将被处理交易的请求时间(UTC 时间)
# queue_cost_time:						当前队列中所有交易处理完预估时间(秒)
# tx_queue_position:					Operation ID 对应交易所处队列中的位置;若交易存在队列中,0 则表示正在重试
# tx_request_time:						Operation ID 对应交易的请求时间(UTC 时间)
# tx_cost_time:								Operation ID 对应交易预估处理所需时间(秒)
# tx_message:									Operation ID 对应交易排队描述信息

$tx是QueryTxQueueRes对象