SDK for APENFT marketplace base on TRON blockchain and TronLink wallet
开发者指南
安装
npm install apenft-js-tron
sdk 依赖 TronLink 钱包进行链上操作
在浏览器环境下直接使用 TronLink 注入到 window.tronWeb
在 node 环境下使用,还需安装 tronweb,
npm install tronweb
配置
初始化 SDK
import sdk from "apenft-js-tron";
const { APENFTOrders, APENFTQuery, Network, AssetFactory } = sdk;
const { tronWeb } = window;
const tronWeb = new TronWeb({
fullHost: "https://api.shasta.trongrid.io",
privateKey: "xxxxx-xxxx-xxxxx-xxxxx-xxxxx",
});
const networkName = Network.Shasta;
const sdk_orders = new APENFTOrders(tronWeb, { networkName });
const sdk_query = new APENFTQuery(tronWeb, { networkName });
资产
const sdk_fab = sdk_orders.assetFactory
const sdk_fab = new AssetFactory(tronWeb, { networkName })
sdk_fab.createAsset721(...);
sdk_fab.mint721(...);
创建合约
sdk_fab.createAsset721(name,symbol,baseUrl,options)
方法说明
async createAsset721(name: string, symbol: string, baseUrl: string, options?: any)
方法使用示例
const sdk_fab = ...
const createRes = await sdk_fab.createAsset721(
'MyNFTSymbol',
'MyNFTName',
'https://ipfs.io/ipfs/QmPMc4tcBsMqLRuCQtPmPe84bpSjrC3Ky7t3JWuHXYB4aS/'
)
const output = await createRes.txSend.catch((err) => console.log(err))
const nftContract = output.contract_address
铸造 NFT
sdk_fab.mint721(nftContract, toAddress,url)
方法说明
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)
方法说明
async APENFTQuery.getAssetsList(account,pagination);
方法使用示例
const assetsList = await sdk_query.getAssetsList(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100,
cursor: "",
}
);
console.log("assetsList", assetsList);
查询名下的合集
APENFTQuery.getCollections(account,pagination)
方法说明
async APENFTQuery.getCollections(account,pagination);
方法使用示例
const collectionsList = await sdk_query.getCollections(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100,
cursor: "",
}
);
console.log("collectionsList", collectionsList);
查询 NFT 详情
APENFTQuery.getAssetDetail(collection,id)
方法说明
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 });
授权操作
交易类型为固定价上架, 竞拍上架, 购买报价, 竞拍报价时,需要进行授权操作;
同一合集授权后可以不用再授权;
方法说明
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: "",
APENFTSellerFeeBasisPoints: 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)
方法说明 :
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);
方法说明
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)
方法说明 :
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);
方法说明
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)
方法说明 :
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)
方法说明
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)
方法说明 :
async APENFTQuery.getEnglishAuctionBiddingOrderParams(params);
方法使用示例
const params = {
collection: "TGvAiyw7uT27xVpqHaQ1NM6ZDquEEHQgso",
id: "9927",
price: 125,
currency: "WTRX",
};
let orderParams = await sdk_query.getEnglishAuctionBiddingOrderParams(params);
APENFTOrders.createBiddingOrder(orderParams);
方法说明
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)
方法说明:
async APENFTQuery.getLowerPriceOrderParams(params);
方法使用示例
const params = {
collection: "TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
id: "2",
price: 80,
};
let orderParams = await sdk_query.getLowerPriceOrderParams(params);
APENFTOrders.createLowerPriceOrder(orderParams)
方法说明
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)
方法说明:
async APENFTQuery.getAssetBestAskOrderInfo(collection,id);
方法使用示例
let bestAskOrder = await sdk_query.getAssetBestAskOrderInfo(
"TDczyk1W3jNf62cfeZ5d7CasiVXfwy4xiY",
"252"
);
APENFTOrders.account.orderMatch({ buy, sell })
方法说明
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)
方法说明:
async APENFTQuery.getReceivedOffers(account,pagination);
APENFTQuery.getReceivedOffers(account,pagination)
方法使用示例
let receivedOffers = await sdk_query.getReceivedOffers(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100,
cursor: "",
}
);
console.log("receivedOffers", receivedOffers);
APENFTOrders.account.orderMatch({ buy, sell })
方法说明
async APENFTOrders.account.orderMatch({ buyOrder, sellOrder });
方法使用示例
let OrderSide = {
0: "Buy",
1: "Sell",
Buy: 0,
Sell: 1,
};
const receivedOffers = await this.Querys.getReceivedOffers(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100,
cursor: "",
}
);
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)
方法说明
async APENFTQuery.getAssetBestAskOrderInfo(collection,id);
方法使用示例
const order = await sdk_query.getAssetBestAskOrderInfo(
"TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
"2"
);
APENFTOrders.account.orderCancel(order)
方法说明
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)
方法说明:
async APENFTQuery.getSentOffers(account,pagination);
方法使用示例
const sentOffers = await this.Querys.getSentOffers(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100,
cursor: "",
}
);
console.log("sentOffers", sentOffers);
APENFTOrders.account.orderCancel(order)
方法说明
async APENFTOrders.account.orderCancel(order);
方法使用示例
const sentOffers = await this.Querys.getSentOffers(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100,
cursor: "",
}
);
console.log("sentOffers", sentOffers);
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)
方法说明
async APENFTQuery.getTransferParams(collection,id);
方法使用示例
const { metadata, assetData } = await sdk_query.getTransferParams(
"TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
"2"
);
APENFTOrders.account.assetTransfer(metadata, to)
方法说明
async APENFTOrders.account.assetTransfer(metadata, to)
方法使用示例
const { metadata, assetData } = await this.Querys.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)
方法说明
async APENFTQuery.getAssetListingOrders(collection,id,pagination);
方法使用示例
const listingData = await sdk_query.getAssetListingOrders(
"TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
"2",
{
first: 100,
cursor: "",
}
);
console.log("listingData", listingData);
查询 NFT 出价列表
APENFTQuery.getAssetOffers(collection,id,pagination)
方法说明
async APENFTQuery.getAssetOffers(collection,id,pagination);
方法使用示例
const offersData = await sdk_query.getAssetOffers(
"TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
"2",
{
first: 100,
cursor: "",
}
);
console.log("offersData", offerData);
查询 NFT 交易历史
APENFTQuery.getAssetTradingHistory(collection,id,pagination)
方法说明
async APENFTQuery.getAssetTradingHistory(collection,id,pagination);
方法使用示例
const assetTradingHistory = await sdk_query.getAssetTradingHistory(
"TL39x7unoU1ivqxac43umyUaFoGzEE2Ens",
"2",
{
first: 100,
cursor: "",
}
);
console.log("assetTradingHistory", assetTradingHistory);
查询收到的出价
APENFTQuery.getReceivedOffers(account,pagination)
方法说明
async APENFTQuery.getReceivedOffers(account,pagination);
方法使用示例
const receivedOffers = await sdk_query.getReceivedOffers(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100,
cursor: "",
}
);
console.log("receivedOffers", receivedOffers);
查询发出的出价
APENFTQuery.getSentOffers(account,pagination)
方法说明
async APENFTQuery.getSentOffers(account,pagination);
方法使用示例
const sentOffers = await sdk_query.getSentOffers(
"TFrBnJPgZEfXtvauVG9XVLaDEDDo5jtMWV",
{
first: 100,
cursor: "",
}
);
console.log("sentOffers", sentOffers);
合集
查询合集
查询合集下的 NFT 列表
APENFTQuery.getCollectionAssetsList(collection,pagination)
方法说明
async APENFTQuery.getCollectionAssetsList(collection,pagination);
方法使用示例
const collectionAssetsList = await sdk_query.getCollectionAssetsList(
"TDczyk1W3jNf62cfeZ5d7CasiVXfwy4xiY",
{
first: 100,
cursor: "",
}
);
console.log("collectionAssetsList", collectionAssetsList);
查询单个合集信息
APENFTQuery.getSingleCollectionInfo(collection)
方法说明
async APENFTQuery.getSingleCollectionInfo(collection);
方法使用示例
const singleCollectionInfo = await sdk_query.getSingleCollectionInfo(
"TDczyk1W3jNf62cfeZ5d7CasiVXfwy4xiY"
);
console.log("singleCollectionInfo", singleCollectionInfo);