squid-js/src/keeper/contractLoader.ts

30 lines
1.3 KiB
TypeScript

import * as TruffleContract from "truffle-contract";
import Logger from "../utils/logger";
import Web3Helper from "../utils/Web3Helper";
const contracts: Map<string, object> = new Map<string, object>();
export default class ContractLoader {
public static async load(what: string, web3Helper: Web3Helper) {
return contracts.get(what) || await ContractLoader._doLoad(what, web3Helper);
}
private static async _doLoad(what: string, web3Helper: Web3Helper): Promise<object> {
const where = (await web3Helper.getNetworkName()).toLowerCase();
Logger.log("Loading", what, "from", where);
try {
/* eslint-disable-next-line security/detect-non-literal-require */
const artifact = require(`@oceanprotocol/keeper-contracts/artifacts/${what}.${where}`);
// Logger.log('Loaded artifact', artifact)
const contract = TruffleContract(artifact);
Logger.log("Getting instance of", what, "from", where, "at", artifact.address);
contract.setProvider(web3Helper.web3.currentProvider);
contracts.set(what, await contract.at(artifact.address));
return contracts.get(what);
} catch (err) {
Logger.error("Failed to load", what, "from", where);
}
}
}