sherry-test-js-1 v0.1.11
SDK for APENFT marketplace base on TRON blockchain and TronLink wallet
开发者指南
安装
npm install apenft-js-tron
sdk 依赖 TronLink 钱包进行链上操作
在 node 环境下使用,还需安装 tronweb,
npm install tronweb
配置
初始化 SDK
/* 0. 引入SDK */
import sdk from "apenft-js-tron";
const { APENFTOrders, APENFTQuery, Network, AssetFactory } = sdk;
/* 1. 初始化tronWeb */
/* 浏览器环境下 */
const { tronWeb } = window;
/* node环境下,配置privateKey可以避免弹窗签名 */
const tronWeb = new TronWeb({
fullHost: "https://api.shasta.trongrid.io",
privateKey: "xxxxx-xxxx-xxxxx-xxxxx-xxxxx",
});
/* 2. 初始化SDK */
const networkName = Network.Shasta;
const sdk_orders = new APENFTOrders(tronWeb, { networkName });
// 查询初始化
const sdk_query = new APENFTQuery(tronWeb, { networkName });
资产
/* 如需创建资产,可通过以下两种方法获取工厂类 */
/* 从sdk_orders中获取工厂类 */
const sdk_fab = sdk_orders.assetFactory
/* new AssetFactory */
const sdk_fab = new AssetFactory(tronWeb, { networkName })
/* 然后就可以 */
sdk_fab.createAsset721(...); // 创建721资产合约
sdk_fab.mint721(...); // 铸造721资产
创建合约
sdk_fab.createAsset721(name,symbol,baseUrl,options)
方法说明
/**
* 部署ERC721合约,返回合约地址
* @param {string} name - 合约名称
* @param {string} symbol - 合约符号
* @param {string} baseUrl - 合约metadata的baseUrl
* @param {object} [options] - 可选参数,参考 https://cn.developers.tron.network/reference/tronweb-createsmartcontract
* @returns {Promise<{txHash,txSend}>} Promise对象,包括交易hash和广播事件接受器,可以通过await txSend获取创建的合约地址
*/
async createAsset721(name: string, symbol: string, baseUrl: string, options?: any)
方法使用示例
const sdk_fab = ...
const createRes = await sdk_fab.createAsset721(
'MyNFTName',
'MyNFTSymbol',
'https://ipfs.io/ipfs/QmPMc4tcBsMqLRuCQtPmPe84bpSjrC3Ky7t3JWuHXYB4aS/' // metadata json url
)
const output = await createRes.txSend.catch((err) => console.log(err))
// 得到新创建的合约地址
const nftContract = output.contract_address
铸造 NFT
sdk_fab.mint721(nftContract, toAddress,url)
方法说明
/**
*
* @param {string} assetAddr - NFT合约地址,指定在哪个合约中铸造NFT
* @param {string} to - NFT token接收者地址
* @param {string} [url] - 可选,NFT metadata的baseUrl
* @returns Promise
*/
async mint721(assetAddr, to, url)
方法使用示例
const nftContract = ...
const to = ...
const url = 'https://ipfs.io/ipfs/QmPMc4tcBsMqLRuCQtPmPe84bpSjrC3Ky7t3JWuHXYB4aS/1'
const defer = await sdk_fab.mint721(nftContract, to)
defer.txSend
.on('confirmation', (r) => console.log('confirmation', r))
.on('error', (r) => console.log('error', r))
await defer.txSend
查询资产
查询名下的 NFT
APENFTQuery.getAssetsList(account,pagination)
方法说明
/**
*
* @param {string} account - 钱包地址
* * @param {object} pagination - 分页信息
* @returns Promise
*/
async APENFTQuery.getAssetsList(account,pagination);
方法使用示例
const assetsList = await sdk_query.getAssetsList(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100, // min:1 max:100
cursor: "",
}
);
console.log("assetsList", assetsList);
查询名下的合集
APENFTQuery.getCollections(account,pagination)
方法说明
/**
*
* @param {string} account - 钱包地址
* @returns Promise
*/
async APENFTQuery.getCollections(account,pagination);
方法使用示例
const collectionsList = await sdk_query.getCollections(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100, // min:1 max:100
cursor: "",
}
);
console.log("collectionsList", collectionsList);
查询 NFT 详情
APENFTQuery.getAssetDetail(collection,id)
方法说明
/**
*
* @param {string} collection - 合集地址
* @param {string} id - id
* @returns Promise
*/
async APENFTQuery.getAssetDetail(collection,id);
方法使用示例
const assetDetail = await sdk_query.getAssetDetail(
"TDczyk1W3jNf62cfeZ5d7CasiVXfwy4xiY",
"252"
);
console.log("assetDetail", assetDetail);
订单
创建订单
初始化
方法说明
import { APENFTOrders, APENFTQuery, initApprove } from "apenft-js-tron";
let sdk_orders = new APENFTOrders(window.tronWeb, { networkName });
const sdk_query = new APENFTQuery(window.tronWeb, { networkName });
授权操作
交易类型为固定价上架, 竞拍上架, 购买报价, 竞拍报价时,需要进行授权操作; 同一合集授权后可以不用再授权;
方法说明
/**
*
* @param {object} APENFTOrders - sdk订单实例
* @param {string} orderType - 订单类型
* @param {object} orderParams - 订单信息
* @returns Promise
*/
async initApprove({ APENFTOrders, orderType, orderParams})
方法使用示例
let orderType = "FixPriceOrder";
let orderParams = {
asset: {
tokenId: "6",
tokenAddress: "TDJLEEDZ5Zr81NQv9jQjWSNtdS9nJyrLD3",
schemaName: "ERC721",
data: "https://gateway.btfs.io/btfs/QmPXgdwcMFdo2URjHHxvqps8Uz3h8Jvc6zMz1hJFFMwxNX",
collection: {
transferFeeAddress: "",
elementSellerFeeBasisPoints: 0,
},
},
quantity: 1,
paymentToken: {
__typename: "Currency",
address: "T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb",
symbol: "TRX",
decimal: 6,
icon: "https://images-testnet.apenft.io/icon/currency/icon-trx.svg",
decimals: 6,
},
listingTime: 1669272864,
expirationTime: 1671864854,
startAmount: 77,
buyerAddress: "",
};
await initApprove({ APENFTOrders: sdk_orders, orderType, orderParams });
固定价上架
获取入参:
APENFTQuery.getFixPriceOrderParams(params)
方法说明 :
/**
*
* @param {object} params -
* {
* collection: string // 合集地址
* id: string // id
* price: number // 报价
* currency: string // 币种
* expirationTime: number // 过期时间,时间戳,格式毫秒
* buyerAddress?: string // 指定买家地址,可选
* }
* @returns Promise
*/
async APENFTQuery.getFixPriceOrderParams(params);
方法使用示例
const params = {
collection: "TQXKjXfTiy9j2qfRXNroZdrrAawu65b72Z",
id: "5",
price: 20,
currency: "USDT",
expirationTime: new Date().getTime() + 7 * 24 * 60 * 60 * 1000,
buyerAddress: "",
};
let orderParams = await sdk_query.getFixPriceOrderParams(params);
APENFTOrders.createSellOrder(orderParams);
方法说明
/**
*
* @param {object} orderParams - 订单信息
* @returns Promise
*/
async APENFTOrders.createSellOrder(orderParams);
方法使用示例
const params = {
collection: "TQXKjXfTiy9j2qfRXNroZdrrAawu65b72Z",
id: "5",
price: 20,
currency: "USDT",
expirationTime: new Date().getTime() + 7 * 24 * 60 * 60 * 1000,
buyerAddress: "",
};
let orderParams = await sdk_query.getFixPriceOrderParams(params);
await sdk_orders.createSellOrder(orderParams);
竞拍上架
获取入参:
APENFTQuery.getEnglishAuctionOrderParams(params)
方法说明 :
/**
*
* @param {object} params -
* {
* collection: string // 合集地址
* id: string // id
* bidPrice: number // 报价
* reservePrice: number // 最低报价
* currency: string // 币种
* expirationTime: number // 过期时间,时间戳,格式毫秒
* }
* @returns Promise
*/
async APENFTQuery.getEnglishAuctionOrderParams(params);
方法使用示例
const params = {
collection: "TQXKjXfTiy9j2qfRXNroZdrrAawu65b72Z",
id: "5",
bidPrice: 20,
reservePrice: 100,
currency: "USDT",
expirationTime: new Date().getTime() + 7 * 24 * 60 * 60 * 1000,
};
let orderParams = await sdk_query.getEnglishAuctionOrderParams(params);
APENFTOrders.createAuctionOrder(orderParams);
方法说明
/**
*
* @param {object} orderParams - 订单信息
* @returns Promise
*/
async APEBFTOrders.createAuctionOrder(orderParams);
方法使用示例
const params = {
collection: "TQXKjXfTiy9j2qfRXNroZdrrAawu65b72Z",
id: "5",
bidPrice: 20,
reservePrice: 100,
currency: "USDT",
expirationTime: new Date().getTime() + 7 * 24 * 60 * 60 * 1000,
};
let orderParams = await sdk_query.getEnglishAuctionOrderParams(params);
await sdk_orders.createAuctionOrder(orderParams);
购买报价
获取入参:
APENFTQuery.getMakeOfferOrderOrderParams(params)
方法说明 :
/**
*
* @param {object} params -
* {
* collection: string // 合集地址
* id: string // id
* price: number // 报价
* currency: string // 币种
* expirationTime: number // 过期时间,时间戳,格式毫秒
* }
* @returns Promise
*/
async APENFTQuery.getMakeOfferOrderOrderParams(params);
方法使用示例
const params = {
collection: "TQFhpAACCPomuW4daSiGTh4SMCvUKtZyNs",
id: "105",
price: 110,
currency: "WTRX",
expirationTime: new Date().getTime() + 7 * 24 * 60 * 60 * 1000,
};
let orderParams = await sdk_query.getMakeOfferOrderOrderParams(params);
APENFTOrders.createBuyOrder(orderParams)
方法说明
/**
*
* @param {object} orderParams - 订单信息
* @returns Promise
*/
async APENFTOrders.createBuyOrder(orderParams);
方法使用示例
const params = {
collection: "TQFhpAACCPomuW4daSiGTh4SMCvUKtZyNs",
id: "105",
price: 110,
currency: "WTRX",
expirationTime: new Date().getTime() + 7 * 24 * 60 * 60 * 1000,
};
let orderParams = await sdk_query.getMakeOfferOrderOrderParams(params);
await sdk_orders.createBuyOrder(orderParams);
竞拍报价
获取入参:
APENFTQuery.getEnglishAuctionBiddingOrderParams(params)
方法说明 :
/**
*
* @param {object} params -
* {
* collection: string // 合集地址
* id: string // id
* price: number // 报价
* currency: string // 币种
* }
* @returns Promise
*/
async APENFTQuery.getEnglishAuctionBiddingOrderParams(params);
方法使用示例
const params = {
collection: "TGvAiyw7uT27xVpqHaQ1NM6ZDquEEHQgso",
id: "9927",
price: 125,
currency: "WTRX",
};
let orderParams = await sdk_query.getEnglishAuctionBiddingOrderParams(params);
APENFTOrders.createBiddingOrder(orderParams);
方法说明
/**
*
* @param {object} orderParams - 订单信息
* @returns Promise
*/
async APENFTOrders.createBiddingOrder(orderParams);
方法使用示例
const params = {
collection: "TGvAiyw7uT27xVpqHaQ1NM6ZDquEEHQgso",
id: "9927",
price: 125,
currency: "WTRX",
};
let orderParams = await sdk_query.getEnglishAuctionBiddingOrderParams(params);
await sdk_orders.createBiddingOrder(orderParams);
降低固定价上架
获取入参:
APENFTQuery.getLowerPriceOrderParams(params)
方法说明:
/**
*
* @param {object} params -
* {
* collection: string // 合集地址
* id: string // id
* price: number // 报价
* }
* @returns Promise
*/
async APENFTQuery.getLowerPriceOrderParams(params);
方法使用示例
const params = {
collection: "TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
id: "2",
price: 80,
};
let orderParams = await sdk_query.getLowerPriceOrderParams(params);
APENFTOrders.createLowerPriceOrder(orderParams)
方法说明
/**
*
* @param {object} orderParams - 订单信息
* @returns Promise
*/
async APENFTOrders.createLowerPriceOrder(orderParams);
方法使用示例
const params = {
collection: "TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
id: "2",
price: 80,
};
let orderParams = await sdk_query.getLowerPriceOrderParams(params);
await sdk_orders.createLowerPriceOrder(orderParams);
接受订单
立即购买
获取最佳卖单入参:
APENFTQuery.getAssetBestAskOrderInfo(params)
方法说明:
/**
*
* @param {string} collection - 合集地址
* @param {string} id - id
* @returns Promise
*/
async APENFTQuery.getAssetBestAskOrderInfo(collection,id);
方法使用示例
let bestAskOrder = await sdk_query.getAssetBestAskOrderInfo(
"TDczyk1W3jNf62cfeZ5d7CasiVXfwy4xiY",
"252"
);
APENFTOrders.account.orderMatch({ buy, sell })
方法说明
/**
*
* @param {object} buyOrder - 订单信息
* @param {object} sellOrder - 订单信息
* @returns Promise
*/
async APENFTOrders.account.orderMatch({ buyOrder, sellOrder });
方法使用示例
let OrderSide = {
0: "Buy",
1: "Sell",
Buy: 0,
Sell: 1,
};
let bestAskOrder = await sdk_query.getAssetBestAskOrderInfo(
"TDczyk1W3jNf62cfeZ5d7CasiVXfwy4xiY",
"252"
);
// 当前钱包地址
const accountAddress = "XXXXXX";
const signedOrder = sdk_orders.orders.orderFromJSON(bestAskOrder);
let recipientAddress = "";
if (bestAskOrder.side === OrderSide.Sell) {
recipientAddress = accountAddress;
}
if (bestAskOrder.side === OrderSide.Buy) {
recipientAddress = bestAskOrder.maker;
}
const { buy, sell } = sdk_orders.orders.makeMatchingOrder({
signedOrder,
accountAddress: accountAddress,
recipientAddress,
});
await sdk_orders.account.orderMatch({ buy, sell });
接受报价
获取收到的出价列表
APENFTQuery.getReceivedOffers(account,pagination)
方法说明:
/**
*
* @param {string} account - 钱包地址
* @param {object} pagination - 分页信息
* @returns Promise
*/
async APENFTQuery.getReceivedOffers(account,pagination);
APENFTQuery.getReceivedOffers(account,pagination)
方法使用示例
let receivedOffers = await sdk_query.getReceivedOffers(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100, // min:1 max:100
cursor: "",
}
);
console.log("receivedOffers", receivedOffers);
APENFTOrders.account.orderMatch({ buy, sell })
方法说明
/**
*
* @param {object} buyOrder - 订单信息
* @param {object} sellOrder - 订单信息
* @returns Promise
*/
async APENFTOrders.account.orderMatch({ buyOrder, sellOrder });
方法使用示例
let OrderSide = {
0: "Buy",
1: "Sell",
Buy: 0,
Sell: 1,
};
// 获取收到的出价列表
const receivedOffers = await sdk_query.getReceivedOffers(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100, // min:1 max:100
cursor: "",
}
);
// 选择接受第n个NFT出价(某个NFT的某个价格)
// 可以根据返回的数据自行过滤某个NFT
const n = 0;
let bestBidOrder = receivedOffers?.items?.[n]?.bestBidOrder;
// 当前钱包地址
const accountAddress = "XXXXXX";
const signedOrder = sdk_orders.orders.orderFromJSON(bestBidOrder);
let recipientAddress = "";
if (bestBidOrder.side === OrderSide.Sell) {
recipientAddress = accountAddress;
}
if (bestBidOrder.side === OrderSide.Buy) {
recipientAddress = bestBidOrder.maker;
}
const { buy, sell } = sdk_orders.orders.makeMatchingOrder({
signedOrder,
accountAddress: accountAddress,
recipientAddress,
});
await sdk_orders.account.orderMatch({ buy, sell });
取消订单
取消上架
获取入参:
APENFTQuery.getAssetBestAskOrderInfo(collection,id)
方法说明
/**
*
* @param {string} collection - 合集地址
* @param {string} id - id
* @returns Promise
*/
async APENFTQuery.getAssetBestAskOrderInfo(collection,id);
方法使用示例
const order = await sdk_query.getAssetBestAskOrderInfo(
"TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
"2"
);
APENFTOrders.account.orderCancel(order)
方法说明
/**
*
* @param {object} order - 订单信息
* @returns Promise
*/
async APENFTOrders.account.orderCancel(order);
方法使用示例
const order = await sdk_query.getAssetListingInfo(
"TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
"2"
);
const _order = sdk_orders.orders.orderFromJSON(order);
await sdk_orders.account.orderCancel(_order);
取消出价
获取发出的出价列表
APENFTQuery.getSentOffers(account,pagination)
方法说明:
/**
*
* @param {string} account - 钱包地址
* @param {object} pagination - 分页信息
* @returns Promise
*/
async APENFTQuery.getSentOffers(account,pagination);
方法使用示例
const sentOffers = await sdk_query.getSentOffers(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100, // min:1 max:100
cursor: "",
}
);
console.log("sentOffers", sentOffers);
APENFTOrders.account.orderCancel(order)
方法说明
/**
*
* @param {object} order - 订单信息
* @returns Promise
*/
async APENFTOrders.account.orderCancel(order);
方法使用示例
// 获取发出的出价列表
const sentOffers = await sdk_query.getSentOffers(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100, // min:1 max:100
cursor: "",
}
);
console.log("sentOffers", sentOffers);
// 选择取消第n个NFT出价(某个NFT的某个价格)
// 可以根据返回的数据自行过滤某个NFT
const n = 0;
let order = sentOffers?.items?.[n];
const _order = sdk_orders.orders.orderFromJSON(order);
await sdk_orders.account.orderCancel(_order);
转移资产
获取入参:
APENFTQuery.getTransferParams(collection,id)
方法说明
/**
*
* @param {string} collection - 合集地址
* @param {string} id - id
* @returns Promise
*/
async APENFTQuery.getTransferParams(collection,id);
方法使用示例
const { metadata, assetData } = await sdk_query.getTransferParams(
"TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
"2"
);
APENFTOrders.account.assetTransfer(metadata, to)
方法说明
/**
*
* @param {object} metadata - 元数据
* @param {string} to - 接收地址
* @returns Promise
*/
async APENFTOrders.account.assetTransfer(metadata, to)
方法使用示例
const { metadata, assetData } = await sdk_query.getTransferParams(
"TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
"2"
);
const { newAsset } = await sdk_orders.getAssetOrderVersion(assetData);
if (metadata?.asset) {
metadata.asset.data = newAsset || "";
}
let to = "TQzRKbEgp7iSj9fpXX5ghdBHHoh3tEtgwU";
await sdk_orders.account.assetTransfer(metadata, to);
查询订单
查询 NFT 上架列表
APENFTQuery.getAssetListingOrders(collection,id,pagination)
方法说明
/**
*
* @param {string} collection - 合集地址
* @param {string} id - id
* @param {object} pagination - 分页信息
* @returns Promise
*/
async APENFTQuery.getAssetListingOrders(collection,id,pagination);
方法使用示例
const listingData = await sdk_query.getAssetListingOrders(
"TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
"2",
{
first: 100, // min:1 max:100
cursor: "",
}
);
console.log("listingData", listingData);
查询 NFT 出价列表
APENFTQuery.getAssetOffers(collection,id,pagination)
方法说明
/**
*
* @param {string} collection - 合集地址
* @param {string} id - id
* @param {object} pagination - 分页信息
* @returns Promise
*/
async APENFTQuery.getAssetOffers(collection,id,pagination);
方法使用示例
const offersData = await sdk_query.getAssetOffers(
"TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
"2",
{
first: 100, // min:1 max:100
cursor: "",
}
);
console.log("offersData", offerData);
查询 NFT 交易历史
APENFTQuery.getAssetTradingHistory(collection,id,pagination)
方法说明
/**
*
* @param {string} collection - 合集地址
* @param {string} id - id
* @param {object} pagination - 分页信息
* @returns Promise
*/
async APENFTQuery.getAssetTradingHistory(collection,id,pagination);
方法使用示例
const assetTradingHistory = await sdk_query.getAssetTradingHistory(
"TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
"2",
{
first: 100, // min:1 max:100
cursor: "",
}
);
console.log("assetTradingHistory", assetTradingHistory);
查询收到的出价
APENFTQuery.getReceivedOffers(account,pagination)
方法说明
/**
*
* @param {string} account - 钱包地址
* @param {object} pagination - 分页信息
* @returns Promise
*/
async APENFTQuery.getReceivedOffers(account,pagination);
方法使用示例
const receivedOffers = await sdk_query.getReceivedOffers(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100, // min:1 max:100
cursor: "",
}
);
console.log("receivedOffers", receivedOffers);
查询发出的出价
APENFTQuery.getSentOffers(account,pagination)
方法说明
/**
*
* @param {string} account - 钱包地址
* * @param {object} pagination - 分页信息
* @returns Promise
*/
async APENFTQuery.getSentOffers(account,pagination);
方法使用示例
const sentOffers = await sdk_query.getSentOffers(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100, // min:1 max:100
cursor: "",
}
);
console.log("sentOffers", sentOffers);
合集
查询合集
查询合集下的 NFT 列表
APENFTQuery.getCollectionAssetsList(collection,pagination)
方法说明
/**
*
* @param {string} collection - 合集地址
* @param {object} pagination - 分页信息
* @returns Promise
*/
async APENFTQuery.getCollectionAssetsList(collection,pagination);
方法使用示例
const collectionAssetsList = await sdk_query.getCollectionAssetsList(
"TDczyk1W3jNf62cfeZ5d7CasiVXfwy4xiY",
{
first: 100, // min:1 max:100
cursor: "",
}
);
console.log("collectionAssetsList", collectionAssetsList);
查询单个合集信息
APENFTQuery.getSingleCollectionInfo(collection)
方法说明
/**
*
* @param {string} collection - 合集地址
* @returns Promise
*/
async APENFTQuery.getSingleCollectionInfo(collection);
方法使用示例
const singleCollectionInfo = await sdk_query.getSingleCollectionInfo(
"TDczyk1W3jNf62cfeZ5d7CasiVXfwy4xiY"
);
console.log("singleCollectionInfo", singleCollectionInfo);
Licence
apenft-js-tron is distributed under a MIT licence.