UNPKG

@evolutionland/evolution-js

Version:

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

339 lines (293 loc) 15.4 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>furnace/v2.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">furnace/v2.ts</h1> <section> <article> <pre class="prettyprint source linenums"><code>import { ethers } from "ethers"; import type { CallbackType } from "@evo/utils/ethers/contractHelper"; import { triggerContractByContractName, viewContractByContractName } from "@evo/utils/ethers/contractHelper"; import { pad0xBegin } from "@evo/utils/common/utils"; import { LandId } from "@evo/config/constants"; import { TransactionResponse } from "@ethersproject/providers"; import { getAddressesByLandId } from "@evo/utils/ethers/addressHelper"; export interface furnaceGetTreasurePriceResponse { priceGoldBox: string; priceSilverBox: string; } /** * Get treasure price * @param landId Land Id * @param provider Provider * @param callback Callback * @returns any */ export const furnaceGetTreasurePrice = async ( landId: LandId, provider: ethers.providers.Provider, callback?: CallbackType ): Promise&lt;furnaceGetTreasurePriceResponse> => { const results = await viewContractByContractName(landId, provider, "furnaceTreasure", "getPrice", [], callback); return { priceGoldBox: results.priceGoldBox.toHexString(), priceSilverBox: results.priceSilverBox.toHexString(), }; }; /** * Buy treasure * @param landId Land Id * @param signer Signer * @param to Recipient * @param goldBoxAmount Gold box amount * @param silverBoxAmount Silver box amount * @param cost Max cost * @param callback Callback * @returns any */ export const furnaceBuyTreasure = ( landId: LandId, signer: ethers.Signer, to: string, goldBoxAmount: string, silverBoxAmount: string, cost: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { if (landId === LandId.ETHEREUM || landId === LandId._ETHEREUM) { const addresses = getAddressesByLandId(landId); const goldBoxAmountHex = ethers.BigNumber.from(goldBoxAmount).toHexString(); const silverBoxAmountHex = ethers.BigNumber.from(silverBoxAmount).toHexString(); if (!addresses || !addresses.FURNACE_TREASURE) { throw "address error"; } return triggerContractByContractName( landId, signer, "ring", "transfer(address,uint256,bytes)", [ addresses.FURNACE_TREASURE, cost, `${ethers.utils.hexZeroPad(goldBoxAmountHex, 32)}${ethers.utils.hexZeroPad(silverBoxAmountHex, 32).slice(2)}`, ], callback ); } return triggerContractByContractName( landId, signer, "furnaceTreasure", "buyBox", [to, goldBoxAmount, silverBoxAmount, cost], callback ); }; /** * Use nft and elements or LP tokens in the furnace formula to the props. * @param signer * @param formulaIndex Formula for props - https://github.com/evolutionlandorg/furnace/blob/dev/src/Formula.sol * @param majorTokenId ERC721 token Id * @param minorTokenAddress Elements or LP tokens contract address * @param callback callback */ export const furnaceEnchantProps = ( landId: LandId, signer: ethers.Signer, formulaIndex: number, majorTokenId: string, minorTokenAddress: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "furnaceItemBase", "enchant", [formulaIndex, pad0xBegin(majorTokenId), minorTokenAddress], callback ); }; /** * Disenchant furnace props, and will get elements or LP and nft * @param signer * @param propsTokenId Token Id of the Props * @param depth Supports one-time decomposition of high-level props. If a prop is in the second level, it needs to be restored to its original state, and the depth needs to be passed in 2 * @param callback */ export const furnaceDisenchantProps = ( landId: LandId, signer: ethers.Signer, propsTokenId: string, depth: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "furnaceItemBase", "disenchant", [pad0xBegin(propsTokenId), depth], callback ); }; /** * Get treasure is opened * @param landId Land Id * @param provider Provider * @param treasureTokenId Id of treasure * @param callback Callback * @returns any */ export const furnaceGetTreasureStatus = async ( landId: LandId, provider: ethers.providers.Provider, treasureTokenId: string, callback?: CallbackType ): Promise&lt;boolean> => { const results = await viewContractByContractName( landId, provider, "furnaceTakeback", "ids", [pad0xBegin(treasureTokenId)], callback ); return results[0]; }; /** * Open furnace treasure * @param landId Land Id * @param signer Signer * @param param2 Signature content * @param callback Callback * @returns any */ export const furnaceOpenTreasure = ( landId: LandId, signer: ethers.Signer, { boxIds, amounts, hashmessage, v, r, s, }: { boxIds: string[]; amounts: string[]; hashmessage: string; v: number; r: string; s: string; }, callback?: CallbackType ): Promise&lt;TransactionResponse> => { const silverBoxGasLimit = ethers.BigNumber.from(350000); const goldBoxGasLimit = ethers.BigNumber.from(400000); let gasLimit = ethers.BigNumber.from(amounts[0]).lt("1000000000000000000000") ? silverBoxGasLimit : goldBoxGasLimit; if (amounts.length > 1) { for (let index = 1; index &lt; amounts.length; index++) { const amount = amounts[index]; gasLimit = gasLimit.add( ethers.BigNumber.from(amount).lt("1000000000000000000000") ? silverBoxGasLimit : silverBoxGasLimit ); } } const processedBoxIds = boxIds.map((id) => { return pad0xBegin(id); }); return triggerContractByContractName( landId, signer, "furnaceTakeback", "openBoxes", [processedBoxIds, amounts, hashmessage, v, r, s], callback, { gasLimit: gasLimit, } ); }; /** * Disenchant Equipment and will get elements and material * @param landId Land Id * @param signer Signer * @param equipmentTokenId Id of Equipment * @param callback Callback * @returns any */ export const furnaceDismantleEquipment = ( landId: LandId, signer: ethers.Signer, equipmentTokenId: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "pveCraft", "disenchant", [pad0xBegin(equipmentTokenId)], callback ); }; /** * Use material and elements tokens in the furnace formula to the equipment. * @param landId Land Id * @param signer Signer * @param equipmentTokenId Id of Equipment * @param tokenContractAddress Element token address * @param callback Callback * @returns any */ export const furnaceEnchantEquipment = ( landId: LandId, signer: ethers.Signer, equipmentTokenId: string, tokenContractAddress: string, callback?: CallbackType ): Promise&lt;TransactionResponse> => { return triggerContractByContractName( landId, signer, "pveCraft", "enchant", [pad0xBegin(equipmentTokenId), tokenContractAddress], 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>