@evolutionland/evolution-js
Version:
evolution evolution-js evolutionland evolution-js-sdk evolution-land metaverse
284 lines (283 loc) • 14.5 kB
JavaScript
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 { getProvider } from "./utils";
import { CONFIG } from "../../config/constants";
// ABI
import ringABI from "../../config/abi/common/abi-ring.json";
import ktonABI from "../../config/abi/common/abi-kton.json";
import apostleAuctionABI from "../../config/abi/common/abi-apostleAuction.json";
import apostleAuctionV3ABI from "../../config/abi/common/abi-apostleAuctionV3.json";
import apostleSiringV3ABI from "../../config/abi/common/abi-apostleSiringV3.json";
import tokenUseV2ABI from "../../config/abi/common/abi-tokenUseV2.json";
import apostleBaseV3ABI from "../../config/abi/common/abi-apostleBaseV3.json";
import apostleBaseV5ABI from "../../config/abi/common/abi-apostleBaseV5.json";
import goldRushRaffleABI from "../../config/abi/common/abi-goldRushRaffle.json";
import clockAuctionV3ABI from "../../config/abi/common/abi-clockAuctionV3.json";
import landResourceABI from "../../config/abi/common/abi-landResource.json";
import landResourceV2ABI from "../../config/abi/common/abi-landResourceV2.json";
import pveTeamABI from "../../config/abi/common/abi-pveTeam.json";
import objectOwnershipABI from "../../config/abi/common/abi-objectOwnership.json";
import settingsRegistry from "../../config/abi/common/abi-settingsRegistry.json";
import lotteryABI from "../../config/abi/common/abi-lottery.json";
import userPointsABI from "../../config/abi/common/abi-userPoints.json";
import furnaceTreasureABI from "../../config/abi/common/abi-furnaceTreasure.json";
import furnaceItemBaseABI from "../../config/abi/common/abi-furnaceItemBase.json";
import furnaceTakebackABI from "../../config/abi/common/abi-furnaceTakeback.json";
import uniswapExchangeABI from "../../config/abi/common/abi-uniswapExchange.json";
import liquidityStakerABI from "../../config/abi/common/abi-liquidityStaker.json";
import liquidityStakerFactoryABI from "../../config/abi/common/abi-liquidityStakerFactory.json";
import materialABI from "../../config/abi/common/abi-material.json";
import elementRaffleABI from "../../config/abi/common/abi-elementRaffle.json";
import pveCraftABI from "../../config/abi/common/abi-pveCraft.json";
export const getContractAddressAndAbiByContractName = (landId, signerOrProvider, contractName, widthABI = true) => {
var _a;
const contractAddrAndAbi = {};
const provider = getProvider(signerOrProvider);
if (!provider) {
console.error(`failed to get contract address and abi by contract name. provider undefined, contarct name is ${contractName}`);
return contractAddrAndAbi;
}
const addresses = (_a = CONFIG[landId]) === null || _a === void 0 ? void 0 : _a.address;
if (addresses) {
switch (contractName) {
case "ring":
contractAddrAndAbi.address = addresses.TOKEN_RING;
contractAddrAndAbi.interface = ringABI;
break;
case "kton":
contractAddrAndAbi.address = addresses.TOKEN_KTON;
contractAddrAndAbi.interface = ktonABI;
break;
case "gold":
contractAddrAndAbi.address = addresses.ELEMENT_GOLD;
contractAddrAndAbi.interface = ringABI;
break;
case "wood":
contractAddrAndAbi.address = addresses.ELEMENT_WOOD;
contractAddrAndAbi.interface = ringABI;
break;
case "water":
contractAddrAndAbi.address = addresses.ELEMENT_WATER;
contractAddrAndAbi.interface = ringABI;
break;
case "fire":
contractAddrAndAbi.address = addresses.ELEMENT_FIRE;
contractAddrAndAbi.interface = ringABI;
break;
case "soil":
contractAddrAndAbi.address = addresses.ELEMENT_SOIL;
contractAddrAndAbi.interface = ringABI;
break;
case "apostleAuction":
contractAddrAndAbi.address = addresses.APOSTLE_CLOCK_AUCTION;
contractAddrAndAbi.interface = apostleAuctionABI;
break;
case "apostleClockAuctionV3":
contractAddrAndAbi.address = addresses.APOSTLE_CLOCK_AUCTION;
contractAddrAndAbi.interface = apostleAuctionV3ABI;
break;
case "apostleSiringAuctionV3":
contractAddrAndAbi.address = addresses.SIRING_CLOCK_AUCTION;
contractAddrAndAbi.interface = apostleSiringV3ABI;
break;
case "apostleTokenUseV2":
contractAddrAndAbi.address = addresses.TOKEN_USE;
contractAddrAndAbi.interface = tokenUseV2ABI;
break;
case "apostleBaseV3":
contractAddrAndAbi.address = addresses.APOSTLE_BASE;
contractAddrAndAbi.interface = apostleBaseV3ABI;
break;
case "apostleBaseV5":
contractAddrAndAbi.address = addresses.APOSTLE_BASE;
contractAddrAndAbi.interface = apostleBaseV5ABI;
break;
case "goldRushRaffle":
contractAddrAndAbi.address = addresses.GOLD_RUSH_RAFFLE;
contractAddrAndAbi.interface = goldRushRaffleABI;
break;
case "landClockAuctionV3":
contractAddrAndAbi.address = addresses.LAND_CLOCK_AUCTION;
contractAddrAndAbi.interface = clockAuctionV3ABI;
break;
case "apostleLandResource":
contractAddrAndAbi.address = addresses.LAND_RESOURCE;
contractAddrAndAbi.interface = landResourceABI;
break;
case "apostleLandResourceV2":
contractAddrAndAbi.address = addresses.LAND_RESOURCE;
contractAddrAndAbi.interface = landResourceV2ABI;
break;
case "pveTeam":
contractAddrAndAbi.address = addresses.PVETEAM_PROXY;
contractAddrAndAbi.interface = pveTeamABI;
break;
case "pveCraft":
contractAddrAndAbi.address = addresses.CRAFTBASE_PROXY;
contractAddrAndAbi.interface = pveCraftABI;
break;
case "objectOwnership":
contractAddrAndAbi.address = addresses.OBJECTOWNERSHIP;
contractAddrAndAbi.interface = objectOwnershipABI;
break;
case "settingsRegistry":
contractAddrAndAbi.address = addresses.SETTINGSREGISTRY;
contractAddrAndAbi.interface = settingsRegistry;
break;
case "lottery":
contractAddrAndAbi.address = addresses.POINTS_REWARD_POOL;
contractAddrAndAbi.interface = lotteryABI;
break;
case "userPoints":
contractAddrAndAbi.address = addresses.TOKEN_USER_POINTS;
contractAddrAndAbi.interface = userPointsABI;
break;
case "furnaceTreasure":
contractAddrAndAbi.address = addresses.FURNACE_TREASURE;
contractAddrAndAbi.interface = furnaceTreasureABI;
break;
case "furnaceItemBase":
contractAddrAndAbi.address = addresses.FURNACE_ITEM_BASE;
contractAddrAndAbi.interface = furnaceItemBaseABI;
break;
case "furnaceTakeback":
contractAddrAndAbi.address = addresses.FURNACE_TAKEBACK;
contractAddrAndAbi.interface = furnaceTakebackABI;
break;
case "uniswapExchange":
contractAddrAndAbi.address = addresses.UNISWAP_EXCHANGE;
contractAddrAndAbi.interface = uniswapExchangeABI;
break;
case "liquidityStaker":
contractAddrAndAbi.address = "";
contractAddrAndAbi.interface = liquidityStakerABI;
break;
case "liquidityStakerFactory":
contractAddrAndAbi.address = addresses.STAKINGREWARDSFACTORY;
contractAddrAndAbi.interface = liquidityStakerFactoryABI;
break;
case "material":
contractAddrAndAbi.address = addresses.MATERIAL_PROXY;
contractAddrAndAbi.interface = materialABI;
break;
case "goldElementRaffle":
contractAddrAndAbi.address = addresses.GOLDRAFFLEPOOL_PROXY;
contractAddrAndAbi.interface = elementRaffleABI;
break;
case "woodElementRaffle":
contractAddrAndAbi.address = addresses.WOODRAFFLEPOOL_PROXY;
contractAddrAndAbi.interface = elementRaffleABI;
break;
case "waterElementRaffle":
contractAddrAndAbi.address = addresses.WATERRAFFLEPOOL_PROXY;
contractAddrAndAbi.interface = elementRaffleABI;
break;
case "fireElementRaffle":
contractAddrAndAbi.address = addresses.FIRERAFFLEPOOL_PROXY;
contractAddrAndAbi.interface = elementRaffleABI;
break;
case "soilElementRaffle":
contractAddrAndAbi.address = addresses.SOILRAFFLEPOOL_PROXY;
contractAddrAndAbi.interface = elementRaffleABI;
break;
}
}
!contractAddrAndAbi.address &&
console.warn(`failed to get contract address by contract name. contarct name is ${contractName}`);
!contractAddrAndAbi.interface &&
console.warn(`failed to get contract interface by contract name. contarct name is ${contractName}`);
return contractAddrAndAbi;
};
export const getContract = (signerOrProvider, contractAddress, contractInterface) => {
// try {
const contract = new ethers.Contract(contractAddress, contractInterface, signerOrProvider);
return contract;
// } catch (err) {
// console.error("failed to get contract. error:", err);
// }
};
export const getContractByContractName = (landId, signerOrProvider, contractName) => {
const contractAddrAndAbi = getContractAddressAndAbiByContractName(landId, signerOrProvider, contractName);
const contract = new ethers.Contract(contractAddrAndAbi.address, contractAddrAndAbi.interface, signerOrProvider);
return contract;
// if (contractAddrAndAbi.address && contractAddrAndAbi.interface) {
// try {
// const contract = new ethers.Contract(contractAddrAndAbi.address, contractAddrAndAbi.interface, signerOrProvider);
// return contract;
// } catch (err) {
// console.error(`failed to get contract by contract name. contarct name is ${contractName}, error:`, err);
// }
// } else {
// console.error(
// `failed to get contract by contract name. address or abi undefined, contarct name is ${contractName}`
// );
// }
};
const defaultCallback = {
errorCallback: ({ error }) => {
void error;
},
// responseCallback: ({ transactionHash }) => { console.info(transactionHash) },
// successCallback: ({ transactionHash }) => { console.info(transactionHash) },
};
export const triggerContract = (contract, methodName, contractArgs = [], callback = defaultCallback, overrides) => __awaiter(void 0, void 0, void 0, function* () {
const { errorCallback, responseCallback, successCallback } = callback;
// try {
const response = yield contract[methodName](...contractArgs, Object.assign({}, overrides));
responseCallback && responseCallback({ transactionHash: response.hash });
// const receipt: ethers.providers.TransactionReceipt = await response.wait(2);
// if (receipt.byzantium && receipt.status === 1) {
// successCallback && successCallback({ transactionHash: receipt.transactionHash });
// }
return response;
// } catch (err) {
// console.error(err);
// errorCallback({ error: err });
// }
});
export const triggerContractByContractName = (landId, signerOrProvider, contractName, methodName, contractArgs = [], callback = defaultCallback, overrides) => __awaiter(void 0, void 0, void 0, function* () {
const contract = yield getContractByContractName(landId, signerOrProvider, contractName);
return yield triggerContract(contract, methodName, contractArgs, callback, overrides);
// if (contract) {
// return await triggerContract(contract, methodName, contractArgs, callback, overrides);
// } else {
// callback &&
// callback.errorCallback({
// error: new Error(
// `failed to trigger contract by contract name. contract undefined, contract name is ${contractName}`
// ),
// });
// }
});
export const viewContract = (contract, methodName, contractArgs = [], callback = defaultCallback) => __awaiter(void 0, void 0, void 0, function* () {
const { errorCallback } = callback;
try {
return yield contract.functions[methodName](...contractArgs);
}
catch (err) {
console.error(err);
errorCallback({ error: err });
}
return [];
});
export const viewContractByContractName = (landId, signerOrProvider, contractName, methodName, contractArgs = [], callback = defaultCallback) => __awaiter(void 0, void 0, void 0, function* () {
const contract = yield getContractByContractName(landId, signerOrProvider, contractName);
if (contract) {
return yield viewContract(contract, methodName, contractArgs, callback);
}
else {
callback &&
callback.errorCallback({
error: new Error(`failed to view contract by contract name. contract undefined, contract name is ${contractName}`),
});
return [];
}
});