polymer-template-gizr
Version:
Template project to start building IBC enabled Solidity contracts, with Hardhat and Foundry support
118 lines (102 loc) • 4.76 kB
JavaScript
const {ethers} = require("hardhat");
const { getConfigPath, fetchABI} = require("./_helpers.js");
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) {
try {
const config = require(getConfigPath());
const ibcAppAddr = config.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 ethers.getContractAt(
`${contractType}`,
ibcAppAddr
);
return ibcApp;
} catch (error) {
console.log(`❌ Error getting IBC app: ${error}`);
return;
}
}
function getDispatcherAddress(network) {
const config = require(getConfigPath());
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 config = require(getConfigPath());
const providerOptimism = new ethers.JsonRpcProvider(rpcOptimism);
const providerBase = new ethers.JsonRpcProvider(rpcBase);
let explorerUrl;
let dispatcher;
let dispatcherAddress;
try {
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;
}
catch (error) {
console.log(`❌ Error getting dispatcher: ${error}`);
return;
}
}
function getUcHandlerAddress(network) {
const config = require(getConfigPath());
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 config = require(getConfigPath());
const providerOptimism = new ethers.JsonRpcProvider(rpcOptimism);
const providerBase = new ethers.JsonRpcProvider(rpcBase);
let explorerUrl;
let ucHandler;
let ucHandlerAddress;
try {
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;
} catch (error) {
console.log(`❌ Error getting ucHandler: ${error}`);
return;
}
}
module.exports = { getIbcApp, getDispatcherAddress, getDispatcher, getUcHandlerAddress, getUcHandler };