0.1.11 • Published 1 year ago

sherry-test-js-1 v0.1.11

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

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.