UNPKG

@evolutionland/evolution-js

Version:

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

250 lines (249 loc) 13.6 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { ethers } from "ethers"; import { erc20Allowance } from "../../ethers/erc20"; import { pad0xBegin } from "../../../utils/common/utils"; import { toHexAndPadLeft, padLeft } from "../../../utils/ethers/utils"; import { getContractAddressAndAbiByContractName, triggerContractByContractName, viewContractByContractName, } from "../../../utils/tronweb/contractHelper"; import { LandId } from "../../../config/constants"; import { getAddressesByLandId } from "../../../utils/ethers/addressHelper"; import { convert41to0x, resultToHexNumber } from "../../../utils/tronweb/utils"; /** * Apostle Allowance To Clock Auction * @param provider Ethers provider * @param from From * @param callback Callback * @returns Promise<string | undefined> */ export const apostleAllowanceToClockAuction = (landId, provider, from, callback) => __awaiter(void 0, void 0, void 0, function* () { const spender = getContractAddressAndAbiByContractName(landId, provider, "apostleAuction").address; if (spender) { return erc20Allowance(landId, provider, "ring", from, spender); } else { callback && 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, signer, tokenId, referrer, amountMax, callback) => { const finalReferrer = referrer && ethers.utils.isAddress(referrer) ? referrer : "0x0000000000000000000000000000000000000000"; if (landId === LandId.TRON || landId === LandId._TRON) { 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", "transferAndFallback(address,uint256,bytes)", [convert41to0x(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, signer, tokenId, targetTokenId, amountMax, callback) => { if (landId === LandId.TRON || landId === LandId._TRON) { const addresses = getAddressesByLandId(landId); if (!addresses || !addresses.APOSTLE_BASE) { throw "address error"; } return triggerContractByContractName(landId, signer, "ring", "transferAndFallback(address,uint256,bytes)", [ convert41to0x(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, signer, tokenId, targetTokenId, amountMax, callback) => { if (landId === LandId.TRON || landId === LandId._TRON) { const addresses = getAddressesByLandId(landId); if (!addresses || !addresses.SIRING_CLOCK_AUCTION) { throw "address error"; } return triggerContractByContractName(landId, signer, "ring", "transferAndFallback(address,uint256,bytes)", [ convert41to0x(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, signer, tokenId, amountMax, callback) => { if (landId === LandId.TRON || landId === LandId._TRON) { const addresses = getAddressesByLandId(landId); if (!addresses || !addresses.TOKEN_USE) { throw "address error"; } return triggerContractByContractName(landId, signer, "ring", "transferAndFallback(address,uint256,bytes)", [convert41to0x(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, signer, motherTokenId, callback) => { 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 = (landId, signer, motherTokenId, element, level, levelUnitPrice, callback) => __awaiter(void 0, void 0, void 0, function* () { const elementAddress = getContractAddressAndAbiByContractName(landId, signer, element).address; const cost = ethers.BigNumber.from(level).mul(ethers.BigNumber.from(levelUnitPrice)).toString(); if (landId === LandId.TRON || landId === LandId._TRON) { const addresses = getAddressesByLandId(landId); if (!addresses || !addresses.APOSTLE_BASE) { throw "address error"; } return triggerContractByContractName(landId, signer, element, "transferAndFallback(address,uint256,bytes)", [ convert41to0x(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 Token Id * @param callback Callback * @returns any */ export const apostleGetCurrentPriceByTokenId = (landId, provider, tokenId, callback) => __awaiter(void 0, void 0, void 0, function* () { const results = yield viewContractByContractName(landId, provider, "apostleClockAuctionV3", "getCurrentPriceInToken", [pad0xBegin(tokenId)], callback); return resultToHexNumber(results); }); /** * Returns the current siring price of an auction. * @param provider Ethers signer * @param tokenId Token Id * @param callback Callback * @returns any */ export const apostleGetCurrentSiringPriceByTokenId = (landId, provider, tokenId, callback) => __awaiter(void 0, void 0, void 0, function* () { const results = yield viewContractByContractName(landId, provider, "apostleSiringAuctionV3", "getCurrentPriceInToken", [pad0xBegin(tokenId)], callback); return resultToHexNumber(results); }); /** * 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<void>} */ export const apostleAskWithToken = (landId, signer, from, tokenId, startPrice, endPrice, duration, callback) => __awaiter(void 0, void 0, void 0, function* () { 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); }); export const apostleCancelAskWithToken = (landId, signer, tokenId, callback) => { return triggerContractByContractName(landId, signer, "apostleAuction", "cancelAuction", [pad0xBegin(tokenId)], callback); }; /** * Renting apostles to work * @param signer * @param resourceAddress * @param tokenId * @param price * @param duration * @param callback */ export const apostleHire = (landId, signer, resourceAddress, tokenId, price, duration, callback) => __awaiter(void 0, void 0, void 0, function* () { 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); }); export const apostleCancelHire = (landId, signer, tokenId, callback) => { return triggerContractByContractName(landId, signer, "apostleTokenUseV2", "cancelTokenUseOffer", [pad0xBegin(tokenId)], callback); }; export const apostleWork = (landId, signer, apostleTokenId, landTokenId, elementContractAddress, callback) => { return triggerContractByContractName(landId, signer, "apostleLandResource", "startMining", [pad0xBegin(apostleTokenId), pad0xBegin(landTokenId), elementContractAddress], callback); }; export const apostleStopWork = (landId, signer, tokenId, callback) => __awaiter(void 0, void 0, void 0, function* () { return triggerContractByContractName(landId, signer, "apostleLandResource", "stopMining", [pad0xBegin(tokenId)], callback); }); export const apostleGetAutoBreedFee = (landId, provider, callback) => __awaiter(void 0, void 0, void 0, function* () { const results = yield viewContractByContractName(landId, provider, "settingsRegistry", "uintOf", ["0x55494e545f4155544f42495254485f4645450000000000000000000000000000"], // UINT_AUTOBIRTH_FEE callback); return resultToHexNumber(results); }); export const apostleClaim = (landId, signer, tokenId, callback) => __awaiter(void 0, void 0, void 0, function* () { return triggerContractByContractName(landId, signer, "apostleAuction", "claimApostleAsset", [pad0xBegin(tokenId)], callback); }); export const apostleBreedAsk = (landId, signer, from, tokenId, startPrice, endPrice, duration, callback) => __awaiter(void 0, void 0, void 0, function* () { 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); }); export const apostleCancelBreedAsk = (landId, signer, tokenId, callback) => __awaiter(void 0, void 0, void 0, function* () { return triggerContractByContractName(landId, signer, "apostleSiringAuctionV3", "cancelAuction", [pad0xBegin(tokenId)], callback); }); export const apostleTransfer = (landId, signer, from, to, tokenId, callback) => __awaiter(void 0, void 0, void 0, function* () { return triggerContractByContractName(landId, signer, "objectOwnership", "transferFrom", [from, to, pad0xBegin(tokenId)], callback); }); export const apostleClaimHire = (landId, signer, tokenId, callback) => __awaiter(void 0, void 0, void 0, function* () { return triggerContractByContractName(landId, signer, "apostleTokenUseV2", "removeTokenUseAndActivity", [pad0xBegin(tokenId)], callback); });