@bowogfc/bbpolymer
Version:
101 lines (82 loc) • 4.06 kB
JavaScript
const {ethers} = require("hardhat");
const {fetchABI} = require("./_helpers.js");
const config = require("../config.json");
const explorerOpUrl = "https://optimism-sepolia.blockscout.com/";
const explorerBaseUrl = "https://base-sepolia.blockscout.com/";
const rpcOptimism = `https://opt-sepolia.g.alchemy.com/v2/${process.env.OP_ALCHEMY_API_KEY}`;
const rpcBase = `https://base-sepolia.g.alchemy.com/v2/${process.env.BASE_ALCHEMY_API_KEY}`;
async function getIbcApp (network, isUniversal) {
const ibcAppAddr = isUniversal ? config["sendUniversalPacket"][`${network}`]["portAddr"] : config["sendPacket"][`${network}`]["portAddr"];
console.log(`Fetching IBC app on ${network} at address: ${ibcAppAddr}`)
const contractType = config["deploy"][`${network}`];
const ibcApp = await hre.ethers.getContractAt(
`${contractType}`,
ibcAppAddr
);
return ibcApp;
}
function getDispatcherAddress(network) {
let dispatcherAddr;
if (network === "optimism") {
dispatcherAddr = config.proofsEnabled ? process.env.OP_DISPATCHER : process.env.OP_DISPATCHER_SIM;
} else if (network === "base") {
dispatcherAddr = config.proofsEnabled ? process.env.BASE_DISPATCHER : process.env.BASE_DISPATCHER_SIM;
} else {
throw new Error("Invalid network");
}
return dispatcherAddr;
}
async function getDispatcher (network) {
const providerOptimism = new ethers.JsonRpcProvider(rpcOptimism);
const providerBase = new ethers.JsonRpcProvider(rpcBase);
let explorerUrl;
let dispatcher;
let dispatcherAddress;
if (network === "optimism") {
explorerUrl = explorerOpUrl;
dispatcherAddress = config.proofsEnabled ? dispatcherAddress = process.env.OP_DISPATCHER : dispatcherAddress = process.env.OP_DISPATCHER_SIM;
const opDispatcherAbi = await fetchABI(explorerUrl, dispatcherAddress);
dispatcher = new ethers.Contract(dispatcherAddress, opDispatcherAbi, providerOptimism);
} else if (network === "base") {
explorerUrl = explorerBaseUrl;
dispatcherAddress = config.proofsEnabled ? dispatcherAddress = process.env.BASE_DISPATCHER : dispatcherAddress = process.env.BASE_DISPATCHER_SIM;
const baseDispatcherAbi = await fetchABI(explorerUrl, dispatcherAddress);
dispatcher = new ethers.Contract(dispatcherAddress, baseDispatcherAbi, providerBase);
} else {
throw new error(`Invalid network: ${network}`);
}
return dispatcher;
}
function getUcHandlerAddress(network) {
let ucHandlerAddr;
if (network === "optimism") {
ucHandlerAddr = config.proofsEnabled ? process.env.OP_UC_MW : process.env.OP_UC_MW_SIM;
} else if (network === "base") {
ucHandlerAddr = config.proofsEnabled ? process.env.BASE_UC_MW : process.env.BASE_UC_MW_SIM;
} else {
throw new Error("Invalid network");
}
return ucHandlerAddr;
}
async function getUcHandler (network) {
const providerOptimism = new ethers.JsonRpcProvider(rpcOptimism);
const providerBase = new ethers.JsonRpcProvider(rpcBase);
let explorerUrl;
let ucHandler;
let ucHandlerAddress;
if (network === "optimism") {
explorerUrl = explorerOpUrl;
ucHandlerAddress = config.proofsEnabled ? process.env.OP_UC_MW : process.env.OP_UC_MW_SIM;
const opUcHandlerAbi = await fetchABI(explorerUrl, ucHandlerAddress);
ucHandler = new ethers.Contract(ucHandlerAddress, opUcHandlerAbi, providerOptimism);
} else if (network === "base") {
explorerUrl = explorerBaseUrl;
ucHandlerAddress = config.proofsEnabled ? process.env.BASE_UC_MW : process.env.BASE_UC_MW_SIM;
const baseUcHandlerAbi = await fetchABI(explorerUrl, ucHandlerAddress);
ucHandler = new ethers.Contract(ucHandlerAddress, baseUcHandlerAbi, providerBase);
} else {
throw new error(`Invalid network: ${network}`);
}
return ucHandler;
}
module.exports = { getIbcApp, getDispatcherAddress, getDispatcher, getUcHandlerAddress, getUcHandler };