UNPKG

@le7el/rewards_engine

Version:

Smart contracts that distribute reward tokens according to conditional oracle or a merkle root

40 lines (35 loc) 1.45 kB
import {ContractInterface, ethers} from "ethers" import contracts from "./contracts" declare global { interface Window { ethereum: ethers.providers.ExternalProvider | ethers.providers.JsonRpcFetchFunc | undefined; } } const getWeb3Provider = (provider = null) : Promise<ethers.providers.Web3Provider | ethers.providers.JsonRpcSigner> => { if (provider) return Promise.resolve(provider) if (window.ethereum) return Promise.resolve(new ethers.providers.Web3Provider(window.ethereum, "any")) return Promise.reject('no web3 provider defined') } const controllerAddress = (contractKey : string, web3Provider = null) => { return getWeb3Provider(web3Provider) .then(provider => { if ('_isSigner' in provider) return provider.provider.getNetwork() return provider.getNetwork() }) .then(({ chainId }) => { return contractKey.length == 42 ? contractKey : contracts[`${chainId}`][contractKey] }) } const initContractByAbi = (abi : ContractInterface, contractKey : string, readOnly = true, web3Provider = null) => { return getWeb3Provider(web3Provider) .then(provider => { const signer = readOnly ? provider : ('_isSigner' in provider ? provider : provider.getSigner()) return controllerAddress(contractKey, web3Provider) .then(contract_address => new ethers.Contract(contract_address, abi, signer)) }) } export { getWeb3Provider, controllerAddress, initContractByAbi }