UNPKG

@evolutionland/evolution-js

Version:

evolution evolution-js evolutionland evolution-js-sdk evolution-land metaverse

747 lines (682 loc) 25.5 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>apostle/v1.ts - Documentation</title> <script src="scripts/prettify/prettify.js"></script> <script src="scripts/prettify/lang-css.js"></script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc.css"> <script src="scripts/nav.js" defer></script> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <input type="checkbox" id="nav-trigger" class="nav-trigger" /> <label for="nav-trigger" class="navicon-button x"> <div class="navicon"></div> </label> <label for="nav-trigger" class="overlay"></label> <nav > <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#apostleAllowanceToClockAuction">apostleAllowanceToClockAuction</a></li><li><a href="global.html#apostleAskWithToken">apostleAskWithToken</a></li><li><a href="global.html#apostleBidWithToken">apostleBidWithToken</a></li><li><a href="global.html#apostleBorn">apostleBorn</a></li><li><a href="global.html#apostleBornAndEnhance">apostleBornAndEnhance</a></li><li><a href="global.html#apostleBreed">apostleBreed</a></li><li><a href="global.html#apostleBreedAsk">apostleBreedAsk</a></li><li><a href="global.html#apostleBreedBid">apostleBreedBid</a></li><li><a href="global.html#apostleCancelAskWithToken">apostleCancelAskWithToken</a></li><li><a href="global.html#apostleCancelBreedAsk">apostleCancelBreedAsk</a></li><li><a href="global.html#apostleCancelHire">apostleCancelHire</a></li><li><a href="global.html#apostleClaim">apostleClaim</a></li><li><a href="global.html#apostleClaimHire">apostleClaimHire</a></li><li><a href="global.html#apostleGetAutoBreedFee">apostleGetAutoBreedFee</a></li><li><a href="global.html#apostleGetCurrentPriceByTokenId">apostleGetCurrentPriceByTokenId</a></li><li><a href="global.html#apostleGetCurrentSiringPriceByTokenId">apostleGetCurrentSiringPriceByTokenId</a></li><li><a href="global.html#apostleHire">apostleHire</a></li><li><a href="global.html#apostleHireBid">apostleHireBid</a></li><li><a href="global.html#apostleStopWork">apostleStopWork</a></li><li><a href="global.html#apostleTransfer">apostleTransfer</a></li><li><a href="global.html#apostleWork">apostleWork</a></li><li><a href="global.html#drillStopWork">drillStopWork</a></li><li><a href="global.html#drillTransfer">drillTransfer</a></li><li><a href="global.html#drillWork">drillWork</a></li><li><a href="global.html#equipmentTransfer">equipmentTransfer</a></li><li><a href="global.html#equipmentUnequip">equipmentUnequip</a></li><li><a href="global.html#erc20Allowance">erc20Allowance</a></li><li><a href="global.html#erc20AllowanceByContractAddress">erc20AllowanceByContractAddress</a></li><li><a href="global.html#erc20Approve">erc20Approve</a></li><li><a href="global.html#erc20ApproveByContractAddress">erc20ApproveByContractAddress</a></li><li><a href="global.html#erc20BalanceOf">erc20BalanceOf</a></li><li><a href="global.html#erc20TotalSupply">erc20TotalSupply</a></li><li><a href="global.html#erc20TransferByContractAddress">erc20TransferByContractAddress</a></li><li><a href="global.html#erc721IsApprovedForAll">erc721IsApprovedForAll</a></li><li><a href="global.html#erc721IsApprovedOrOwner">erc721IsApprovedOrOwner</a></li><li><a href="global.html#erc721OwnerOf">erc721OwnerOf</a></li><li><a href="global.html#erc721SetApprovalForAll">erc721SetApprovalForAll</a></li><li><a href="global.html#erc1155BalanceOf">erc1155BalanceOf</a></li><li><a href="global.html#erc1155BalanceOfBatch">erc1155BalanceOfBatch</a></li><li><a href="global.html#erc1155IsApprovedForAll">erc1155IsApprovedForAll</a></li><li><a href="global.html#erc1155SafeBatchTransferFrom">erc1155SafeBatchTransferFrom</a></li><li><a href="global.html#erc1155SetApprovalForAll">erc1155SetApprovalForAll</a></li><li><a href="global.html#farmGetStakerAddress">farmGetStakerAddress</a></li><li><a href="global.html#farmGetStakerBalanceOf">farmGetStakerBalanceOf</a></li><li><a href="global.html#farmGetStakerEarned">farmGetStakerEarned</a></li><li><a href="global.html#farmGetStakerExit">farmGetStakerExit</a></li><li><a href="global.html#farmGetStakerGetReward">farmGetStakerGetReward</a></li><li><a href="global.html#farmGetStakerStakeToken">farmGetStakerStakeToken</a></li><li><a href="global.html#farmGetStakerTotalSupply">farmGetStakerTotalSupply</a></li><li><a href="global.html#farmStakerWithdraw">farmStakerWithdraw</a></li><li><a href="global.html#furnaceBuyTreasure">furnaceBuyTreasure</a></li><li><a href="global.html#furnaceDisenchantProps">furnaceDisenchantProps</a></li><li><a href="global.html#furnaceDismantleEquipment">furnaceDismantleEquipment</a></li><li><a href="global.html#furnaceEnchantEquipment">furnaceEnchantEquipment</a></li><li><a href="global.html#furnaceEnchantProps">furnaceEnchantProps</a></li><li><a href="global.html#furnaceGetTreasurePrice">furnaceGetTreasurePrice</a></li><li><a href="global.html#furnaceGetTreasureStatus">furnaceGetTreasureStatus</a></li><li><a href="global.html#furnaceOpenTreasure">furnaceOpenTreasure</a></li><li><a href="global.html#goldRushRaffleChangeAmount">goldRushRaffleChangeAmount</a></li><li><a href="global.html#goldRushRaffleChangeInfo">goldRushRaffleChangeInfo</a></li><li><a href="global.html#goldRushRaffleChangeSubAddr">goldRushRaffleChangeSubAddr</a></li><li><a href="global.html#goldRushRaffleDraw">goldRushRaffleDraw</a></li><li><a href="global.html#goldRushRaffleExit">goldRushRaffleExit</a></li><li><a href="global.html#goldRushRaffleGetHistory">goldRushRaffleGetHistory</a></li><li><a href="global.html#goldRushRaffleJoin">goldRushRaffleJoin</a></li><li><a href="global.html#landAskWithToken">landAskWithToken</a></li><li><a href="global.html#landBatchClaimItemResource">landBatchClaimItemResource</a></li><li><a href="global.html#landBatchClaimLandResource">landBatchClaimLandResource</a></li><li><a href="global.html#landBidWithToken">landBidWithToken</a></li><li><a href="global.html#landCancelAskWithToken">landCancelAskWithToken</a></li><li><a href="global.html#landClaimItemResource">landClaimItemResource</a></li><li><a href="global.html#landClaimLand">landClaimLand</a></li><li><a href="global.html#landGetAvailableItemResources">landGetAvailableItemResources</a></li><li><a href="global.html#landGetAvailableResources">landGetAvailableResources</a></li><li><a href="global.html#landGetCurrentPriceByTokenId">landGetCurrentPriceByTokenId</a></li><li><a href="global.html#landTransfer">landTransfer</a></li><li><a href="global.html#lotteryGetPointsBalance">lotteryGetPointsBalance</a></li><li><a href="global.html#lotteryGetTotalRewardInPool">lotteryGetTotalRewardInPool</a></li><li><a href="global.html#lotteryPlayWithTicket">lotteryPlayWithTicket</a></li><li><a href="global.html#materialBalanceOfBatch">materialBalanceOfBatch</a></li><li><a href="global.html#materialBatchTransfer">materialBatchTransfer</a></li><li><a href="global.html#materialIdEncode">materialIdEncode</a></li><li><a href="global.html#pveTeamAt">pveTeamAt</a></li><li><a href="global.html#pveTeamEvict">pveTeamEvict</a></li><li><a href="global.html#pveTeamExist">pveTeamExist</a></li><li><a href="global.html#pveTeamExit">pveTeamExit</a></li><li><a href="global.html#pveTeamExits">pveTeamExits</a></li><li><a href="global.html#pveTeamJoin">pveTeamJoin</a></li><li><a href="global.html#pveTeamJoins">pveTeamJoins</a></li><li><a href="global.html#pveTeamSwap">pveTeamSwap</a></li><li><a href="global.html#uniswapBuyRING">uniswapBuyRING</a></li></ul> </nav> <div id="main"> <h1 class="page-title">apostle/v1.ts</h1> <section> <article> <pre class="prettyprint source linenums"><code>import { ethers } from "ethers"; import { erc20Allowance } from "@evo/api/ethers/erc20"; import { pad0xBegin } from "@evo/utils/common/utils"; import { toHexAndPadLeft, padLeft } from "@evo/utils/ethers/utils"; import { getContractAddressAndAbiByContractName, triggerContractByContractName, viewContractByContractName, } from "@evo/utils/ethers/contractHelper"; import type { ElementType } from "@evo/types"; import type { CallbackType } from "@evo/utils/ethers/contractHelper"; import { LandId } from "@evo/config/constants"; import { TransactionResponse } from "@ethersproject/providers"; import { getAddressesByLandId } from "@evo/utils/ethers/addressHelper"; /** * Apostle Allowance To Clock Auction * @param provider Ethers provider * @param from From * @param callback Callback * @returns Promise&lt;string | undefined> */ export const apostleAllowanceToClockAuction = async ( landId: LandId, provider: ethers.providers.Provider, from: string, callback?: CallbackType ): Promise&lt;string | undefined> => { const spender = getContractAddressAndAbiByContractName(landId, provider, "apostleAuction").address; if (spender) { return erc20Allowance(landId, provider, "ring", from, spender as string); } else { callback &amp;&amp; callback.errorCallback({ error: new Error("failed to call apostleAllowanceToClockAuction. spender undefined") }); } }; /** * Apostle Bid * @param signer Ethers signer * @param tokenId Apostle token id * @param referrer Refer address * @param amountMax RING Amount * @param callback Callback */ export const apostleBidWithToken = ( landId: LandId, signer: ethers.Signer, tokenId: string, referrer: string, amountMax: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { const finalReferrer = referrer &amp;&amp; ethers.utils.isAddress(referrer) ? referrer : "0x0000000000000000000000000000000000000000"; if (landId === LandId.ETHEREUM || landId === LandId._ETHEREUM) { const data = referrer ? `${pad0xBegin(tokenId)}${ethers.utils.hexZeroPad(referrer, 32).slice(2)}` : pad0xBegin(tokenId); const addresses = getAddressesByLandId(landId); if (!addresses || !addresses.APOSTLE_CLOCK_AUCTION) { throw "address error"; } return triggerContractByContractName( landId, signer, "ring", "transfer(address,uint256,bytes)", [addresses.APOSTLE_CLOCK_AUCTION, amountMax, data], callback ); } return triggerContractByContractName( landId, signer, "apostleClockAuctionV3", "bidWithToken", [pad0xBegin(tokenId), finalReferrer, amountMax], callback ); }; /** * Apostle Breed - Apostle reproduction in own * @param signer Ethers signer * @param tokenId Token id * @param targetTokenId Target token id * @param amountMax Amount max * @param callback Callback */ export const apostleBreed = ( landId: LandId, signer: ethers.Signer, tokenId: string, targetTokenId: string, amountMax: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { if (landId === LandId.ETHEREUM || landId === LandId._ETHEREUM) { const addresses = getAddressesByLandId(landId); if (!addresses || !addresses.APOSTLE_BASE) { throw "address error"; } return triggerContractByContractName( landId, signer, "ring", "transfer(address,uint256,bytes)", [ addresses.APOSTLE_BASE, amountMax, `${pad0xBegin(tokenId)}${ethers.utils.hexZeroPad(pad0xBegin(targetTokenId), 32).slice(2)}`, ], callback ); } return triggerContractByContractName( landId, signer, "apostleBaseV3", "breedWithAuto", [pad0xBegin(tokenId), pad0xBegin(targetTokenId), amountMax], callback ); }; /** * Apostle Breed Bid - Apostle reproduction * @param signer Ethers signer * @param tokenId Token id * @param targetTokenId Target token id * @param amountMax Amount max (bidPrice + autoBirthFee) * @param callback Callback */ export const apostleBreedBid = ( landId: LandId, signer: ethers.Signer, tokenId: string, targetTokenId: string, amountMax: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { if (landId === LandId.ETHEREUM || landId === LandId._ETHEREUM) { const addresses = getAddressesByLandId(landId); if (!addresses || !addresses.SIRING_CLOCK_AUCTION) { throw "address error"; } return triggerContractByContractName( landId, signer, "ring", "transfer(address,uint256,bytes)", [ addresses.SIRING_CLOCK_AUCTION, amountMax, `${pad0xBegin(tokenId)}${ethers.utils.hexZeroPad(pad0xBegin(targetTokenId), 32).slice(2)}`, ], callback ); } return triggerContractByContractName( landId, signer, "apostleSiringAuctionV3", "bidWithToken", [pad0xBegin(tokenId), pad0xBegin(targetTokenId), amountMax], callback ); }; /** * Apostle Hire Bid - Bid apostle on Renting * @param signer Ethers signer * @param tokenId Apostle token id * @param amountMax Amount max (bid price) * @param callback Callback */ export const apostleHireBid = ( landId: LandId, signer: ethers.Signer, tokenId: string, amountMax: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { if (landId === LandId.ETHEREUM || landId === LandId._ETHEREUM) { const addresses = getAddressesByLandId(landId); if (!addresses || !addresses.TOKEN_USE) { throw "address error"; } return triggerContractByContractName( landId, signer, "ring", "transfer(address,uint256,bytes)", [addresses.TOKEN_USE, amountMax, pad0xBegin(tokenId)], callback ); } return triggerContractByContractName( landId, signer, "apostleTokenUseV2", "takeTokenUseOffer", [pad0xBegin(tokenId), amountMax], callback ); }; /** * Apostle Born Without Element * @param signer Ethers signer * @param motherTokenId Mother token id * @param callback Callback */ export const apostleBorn = ( landId: LandId, signer: ethers.Signer, motherTokenId: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "apostleBaseV3", "giveBirth", [pad0xBegin(motherTokenId), ethers.utils.hexZeroPad("0x", 20), 0, 0], callback ); }; /** * Apostle Born And Enhance * @param signer Ethers signer * @param motherTokenId Mother token id * @param element Element * @param level Level * @param levelUnitPrice Level unit price * @param callback Callback * @returns Void */ export const apostleBornAndEnhance = async ( landId: LandId, signer: ethers.Signer, motherTokenId: string, element: ElementType, level: number, levelUnitPrice: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { const elementAddress = getContractAddressAndAbiByContractName(landId, signer, element).address; const cost = ethers.BigNumber.from(level).mul(ethers.BigNumber.from(levelUnitPrice)).toString(); if (landId === LandId.ETHEREUM || landId === LandId._ETHEREUM) { const addresses = getAddressesByLandId(landId); if (!addresses || !addresses.APOSTLE_BASE) { throw "address error"; } return triggerContractByContractName( landId, signer, element, "transfer(address,uint256,bytes)", [ addresses.APOSTLE_BASE, cost, `${pad0xBegin(motherTokenId)}${ethers.utils.hexZeroPad(ethers.utils.hexlify(level), 32).slice(2)}`, ], callback ); } return triggerContractByContractName( landId, signer, "apostleBaseV3", "giveBirth", [pad0xBegin(motherTokenId), elementAddress, level, cost], callback ); }; /** * Returns the current price of an auction. * @param provider Ethers signer * @param tokenId Apostle Token Id * @param callback Callback * @returns any */ export const apostleGetCurrentPriceByTokenId = async ( landId: LandId, provider: ethers.providers.Provider, tokenId: string, callback?: CallbackType ): Promise&lt;string> => { const results = await viewContractByContractName( landId, provider, "apostleClockAuctionV3", "getCurrentPriceInToken", [pad0xBegin(tokenId)], callback ); return (results[0] as ethers.BigNumber).toHexString(); }; /** * Returns the current siring price of an auction. * @param provider Ethers signer * @param tokenId Token Id * @param callback Callback * @returns any */ export const apostleGetCurrentSiringPriceByTokenId = async ( landId: LandId, provider: ethers.providers.Provider, tokenId: string, callback?: CallbackType ): Promise&lt;string> => { const results = await viewContractByContractName( landId, provider, "apostleSiringAuctionV3", "getCurrentPriceInToken", [pad0xBegin(tokenId)], callback ); return (results[0] as ethers.BigNumber).toHexString(); }; /** * Sell Apostle asset * @param signer Ethers signer * @param from * @param tokenId - Apostle tokenId * @param start - start price * @param end - end price * @param duration - bid duration time in second * @param callback Callback * @returns {Promise&lt;void>} */ export const apostleAskWithToken = async ( landId: LandId, signer: ethers.Signer, from: string, tokenId: string, startPrice: string, endPrice: string, duration: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { const _from = padLeft(from.slice(2), 64, "0"); const _start = toHexAndPadLeft(startPrice).slice(2); const _end = toHexAndPadLeft(endPrice).slice(2); const _duration = toHexAndPadLeft(duration).slice(2); const data = `0x${_start}${_end}${_duration}${_from}`; const apostleClockAuctionV3 = getContractAddressAndAbiByContractName(landId, signer, "apostleClockAuctionV3"); return triggerContractByContractName( landId, signer, "objectOwnership", "approveAndCall", [apostleClockAuctionV3.address, pad0xBegin(tokenId), data], callback ); }; /** * Cancel the auction by apostle token ID * @param landId Land Id * @param signer Signer * @param tokenId apostle token Id * @param callback Callback * @returns any */ export const apostleCancelAskWithToken = ( landId: LandId, signer: ethers.Signer, tokenId: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "apostleAuction", "cancelAuction", [pad0xBegin(tokenId)], callback ); }; /** * Renting apostles to work * @param landId Land Id * @param signer Signer * @param resourceAddress Resource contract address * @param tokenId Apostle tokenId * @param price Hire price * @param duration Duration in second * @param callback Callback */ export const apostleHire = async ( landId: LandId, signer: ethers.Signer, resourceAddress: string, tokenId: string, price: string, duration: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { const _price = toHexAndPadLeft(price).slice(2); const _duration = toHexAndPadLeft(duration).slice(2); const _resourceAddress = padLeft(resourceAddress.slice(2), 64, "0"); const data = `0x${_duration}${_price}${_resourceAddress}`; const apostleTokenUseV2Contract = getContractAddressAndAbiByContractName(landId, signer, "apostleTokenUseV2"); return triggerContractByContractName( landId, signer, "objectOwnership", "approveAndCall", [apostleTokenUseV2Contract.address, pad0xBegin(tokenId), data], callback ); }; /** * Cancel an apostle on Renting * @param landId Land Id * @param signer Signer * @param tokenId Apostle tokenId * @param callback Callback * @returns any */ export const apostleCancelHire = ( landId: LandId, signer: ethers.Signer, tokenId: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "apostleTokenUseV2", "cancelTokenUseOffer", [pad0xBegin(tokenId)], callback ); }; /** * Let apostle go to work * @param landId Land Id * @param signer Signer * @param apostleTokenId Apostle token Id * @param landTokenId Land token Id * @param elementContractAddress Element contract address * @param callback Callback * @returns any */ export const apostleWork = ( landId: LandId, signer: ethers.Signer, apostleTokenId: string, landTokenId: string, elementContractAddress: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "apostleLandResource", "startMining", [pad0xBegin(apostleTokenId), pad0xBegin(landTokenId), elementContractAddress], callback ); }; /** * Stop apostle mining * @param landId Land Id * @param signer Signer * @param tokenId Apostle tokenId * @param callback Callback * @returns any */ export const apostleStopWork = async ( landId: LandId, signer: ethers.Signer, tokenId: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "apostleLandResource", "stopMining", [pad0xBegin(tokenId)], callback ); }; /** * Get apostle breed fee * @param landId Land Id * @param provider Provider * @param callback Callback * @returns fee in string */ export const apostleGetAutoBreedFee = async ( landId: LandId, provider: ethers.providers.Provider, callback?: CallbackType ): Promise&lt;string> => { const results = await viewContractByContractName( landId, provider, "settingsRegistry", "uintOf", ["0x55494e545f4155544f42495254485f4645450000000000000000000000000000"], // UINT_AUTOBIRTH_FEE callback ); return (results[0] as ethers.BigNumber).toHexString(); }; /** * Receive apostle * @param landId Land Id * @param signer Singer * @param tokenId Apostle tokenId * @param callback Callback * @returns any */ export const apostleClaim = async ( landId: LandId, signer: ethers.Signer, tokenId: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "apostleAuction", "claimApostleAsset", [pad0xBegin(tokenId)], callback ); }; /** * Apostle Breed Auction * @param landId Land Id * @param signer Signer * @param from * @param tokenId Apostle tokenId * @param startPrice Start price * @param endPrice End price * @param duration Auction duration time in second * @param callback Callback * @returns any */ export const apostleBreedAsk = async ( landId: LandId, signer: ethers.Signer, from: string, tokenId: string, startPrice: string, endPrice: string, duration: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { const _from = padLeft(from.slice(2), 64, "0"); const _start = toHexAndPadLeft(startPrice).slice(2); const _end = toHexAndPadLeft(endPrice).slice(2); const _duration = toHexAndPadLeft(duration).slice(2); const data = `0x${_start}${_end}${_duration}${_from}`; const apostleSiringAuctionV3Contract = getContractAddressAndAbiByContractName( landId, signer, "apostleSiringAuctionV3" ); return triggerContractByContractName( landId, signer, "objectOwnership", "approveAndCall", [apostleSiringAuctionV3Contract.address, pad0xBegin(tokenId), data], callback ); }; /** * Cancel Apostle Breed Auction * @param landId Land Id * @param signer Signer * @param tokenId Apostle tokenId * @param callback Callback * @returns any */ export const apostleCancelBreedAsk = async ( landId: LandId, signer: ethers.Signer, tokenId: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "apostleSiringAuctionV3", "cancelAuction", [pad0xBegin(tokenId)], callback ); }; /** * Transfer Apsotle * @param landId Land Id * @param signer Signer * @param from Apostle owner * @param to Recipient * @param tokenId Apostle tokenId * @param callback Callback * @returns any */ export const apostleTransfer = async ( landId: LandId, signer: ethers.Signer, from: string, to: string, tokenId: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "objectOwnership", "transferFrom", [from, to, pad0xBegin(tokenId)], callback ); }; /** * Claim an apostle that expires at work * @param landId Land Id * @param signer Signer * @param tokenId Apostle tokenId * @param callback Callback * @returns any */ export const apostleClaimHire = async ( landId: LandId, signer: ethers.Signer, tokenId: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "apostleTokenUseV2", "removeTokenUseAndActivity", [pad0xBegin(tokenId)], callback ); }; </code></pre> </article> </section> </div> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.11</a> on Mon Aug 15 2022 13:54:57 GMT+0800 (China Standard Time) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme. </footer> <script>prettyPrint();</script> <script src="scripts/polyfill.js"></script> <script src="scripts/linenumber.js"></script> </body> </html>