@bowogfc/bbpolymer
Version:
221 lines (203 loc) โข 9.91 kB
JavaScript
const hre = require("hardhat");
const path = require("path");
const { areAddressesEqual } = require("./_helpers.js");
const { getUcHandlerAddress } = require("./_vibc-helpers.js");
const explorerOpUrl = "https://optimism-sepolia.blockscout.com/";
const explorerBaseUrl = "https://base-sepolia.blockscout.com/";
const configRelativePath = process.env.CONFIG_PATH || "config.json";
const configPath = path.join(__dirname, "..", configRelativePath);
const config = require(configPath);
function filterChannelEvents(portAddress) {
return areAddressesEqual(portAddress, config.createChannel["srcAddr"]) || areAddressesEqual(portAddress, config.createChannel["dstAddr"]);
}
function listenForIbcChannelEvents(network, source, dispatcher) {
const explorerUrl = network === "optimism" ? explorerOpUrl : explorerBaseUrl;
console.log(`๐ Listening for IBC channel events on ${network}...`);
dispatcher.on(
"OpenIbcChannel",
(portAddress, version, ordering, feeEnabled, connectionHops, counterparytPortId, counterpartyChannelId, event) => {
const txHash = event.log.transactionHash;
const counterpartyChannelIdString = hre.ethers.decodeBytes32String(counterpartyChannelId);
const url = `${explorerUrl}tx/${txHash}`;
if (filterChannelEvents(portAddress)) {
console.log(`
-------------------------------------------`);
if (source) {
console.log(`
๐โโ๏ธ CHANNEL OPEN INIT !!! ๐โโ๏ธ`);
} else {
console.log(`
๐โโ๏ธ CHANNEL OPEN TRY !!! ๐โโ๏ธ`);
}
console.log(`
-------------------------------------------
๐ Event name: ${event.log.fragment.name}
โ๏ธ Network: ${network}
๐ Port Address: ${portAddress}
๐ Counterparty Port ID: ${counterparytPortId}
๐ฃ๏ธ Counterparty Channel ID: ${counterpartyChannelIdString}
๐ฆ Connection Hops: ${connectionHops}
๐ Ordering: ${ordering}
๐ฐ Fee Enabled: ${feeEnabled}
#๏ธโฃ Version: ${version}
-------------------------------------------
๐งพ TxHash: ${txHash}
๐ Explorer URL: ${url}
-------------------------------------------\n`);
if (source) {
console.log(` โฑ๏ธ Waiting for channel open try...`);
} else {
console.log(` โฑ๏ธ Waiting for channel open ack...`);
}
}
}
);
dispatcher.on("ConnectIbcChannel", (portAddress, channelId, event) => {
const txHash = event.log.transactionHash;
const channelIdString = hre.ethers.decodeBytes32String(channelId);
const url = `${explorerUrl}tx/${txHash}`;
if (filterChannelEvents(portAddress)) {
console.log(`
-------------------------------------------`);
if (source) {
console.log(`
๐ฉโโค๏ธโ๐โ๐จ CHANNEL OPEN ACK !!! ๐ฉโโค๏ธโ๐โ๐จ`);
} else {
console.log(`
๐คตโโ๏ธ๐๐ฐโโ๏ธ CHANNEL OPEN CONFIRM !!! ๐ฐโโ๏ธ๐๐คตโโ๏ธ`);
}
console.log(`
-------------------------------------------
๐ Event name: ${event.log.fragment.name}
โ๏ธ Network: ${network}
๐ Port Address: ${portAddress}
๐ฃ๏ธ Channel ID: ${channelIdString}
-------------------------------------------
๐งพ TxHash: ${txHash}
๐ Explorer URL: ${url}
-------------------------------------------\n`);
if (source) {
console.log(` โฑ๏ธ Waiting for channel open confirm...`);
} else {
console.log(` โฑ๏ธ Waiting for channel creation overview...`);
}
}
dispatcher.removeAllListeners();
});
dispatcher.on("CloseIbcChannel", (portAddress, channelId, event) => {
const txHash = event.log.transactionHash;
const channelIdString = hre.ethers.decodeBytes32String(channelId);
const url = `${explorerUrl}tx/${txHash}`;
if (filterChannelEvents(portAddress)) {
console.log(`
-------------------------------------------
๐ ๐ IBC CHANNEL CLOSED !!! ๐ ๐
-------------------------------------------
๐ Event name: ${event.log.fragment.name}
โ๏ธ Network: ${network}
๐ Port Address: ${portAddress}
๐ฃ๏ธ Channel ID: ${channelIdString}
-------------------------------------------
๐งพ TxHash: ${txHash}
๐ Explorer URL: ${url}
-------------------------------------------\n`);
}
dispatcher.removeAllListeners();
});
}
function filterPacketEvents(portAddress, network) {
const sendPacketConfig = config.sendPacket;
const ucHandlerAddr = getUcHandlerAddress(network);
return areAddressesEqual(portAddress, sendPacketConfig[`${network}`].portAddr) || areAddressesEqual(portAddress, ucHandlerAddr);
}
function listenForIbcPacketEvents(network, dispatcher) {
const explorerUrl = network === "optimism" ? explorerOpUrl : explorerBaseUrl;
console.log(`๐ Listening for IBC packet events on ${network}...`);
dispatcher.on("SendPacket", (sourcePortAddress, sourceChannelId, packet, sequence, timeoutTimestamp, event) => {
const txHash = event.log.transactionHash;
const sourceChannelIdString = hre.ethers.decodeBytes32String(sourceChannelId);
const url = `${explorerUrl}tx/${txHash}`;
if (filterPacketEvents(sourcePortAddress, network)) {
console.log(`
-------------------------------------------
๐ฆ ๐ฎ PACKET HAS BEEN SENT !!! ๐ฆ ๐ฎ
-------------------------------------------
๐ Event name: ${event.log.fragment.name}
โ๏ธ Network: ${network}
๐ Source Port Address: ${sourcePortAddress}
๐ฃ๏ธ Source Channel ID: ${sourceChannelIdString}
๐ Sequence: ${sequence}
โณ Timeout Timestamp: ${timeoutTimestamp}
-------------------------------------------
๐งพ TxHash: ${txHash}
๐ Explorer URL: ${url}
-------------------------------------------\n`);
console.log(` โฑ๏ธ Waiting for packet receipt...`);
}
});
dispatcher.on("RecvPacket", (destPortAddress, destChannelId, sequence, event) => {
const txHash = event.log.transactionHash;
const destChannelIdString = hre.ethers.decodeBytes32String(destChannelId);
const url = `${explorerUrl}tx/${txHash}`;
if (filterPacketEvents(destPortAddress,network)) {
console.log(`
-------------------------------------------
๐ฆ ๐ฌ PACKET IS RECEIVED !!! ๐ฆ ๐ฌ
-------------------------------------------
๐ Event name: ${event.log.fragment.name}
โ๏ธ Network: ${network}
๐ Destination Port Address: ${destPortAddress}
๐ฃ๏ธ Destination Channel ID: ${destChannelIdString}
๐ Sequence: ${sequence}
-------------------------------------------
๐งพ TxHash: ${txHash}
๐ Explorer URL: ${url}
-------------------------------------------\n`);
console.log(` โฑ๏ธ Waiting for write acknowledgement...`);
}
});
dispatcher.on("WriteAckPacket", (writerPortAddress, writerChannelId, sequence, ackPacket, event) => {
const txHash = event.log.transactionHash;
const writerChannelIdString = hre.ethers.decodeBytes32String(writerChannelId);
const url = `${explorerUrl}tx/${txHash}`;
if (filterPacketEvents(writerPortAddress, network)) {
console.log(`
-------------------------------------------
๐ฆ ๐ ACKNOWLEDGEMENT WRITTEN !!! ๐ฆ ๐
-------------------------------------------
๐ Event name: ${event.log.fragment.name}
โ๏ธ Network: ${network}
๐ Destination Port Address: ${writerPortAddress}
๐ฃ๏ธ Channel ID: ${writerChannelIdString}
๐ Sequence: ${sequence}
-------------------------------------------
๐งพ TxHash: ${txHash}
๐ Explorer URL: ${url}
-------------------------------------------\n`);
console.log(` โฑ๏ธ Waiting for acknowledgement...`);
}
dispatcher.removeAllListeners();
});
dispatcher.on("Acknowledgement", (sourcePortAddress, sourceChannelId, sequence, event) => {
const txHash = event.log.transactionHash;
const sourceChannelIdString = hre.ethers.decodeBytes32String(sourceChannelId);
const url = `${explorerUrl}tx/${txHash}`;
if (filterPacketEvents(sourcePortAddress, network)) {
console.log(`
-------------------------------------------
๐ฆ ๐ PACKET IS ACKNOWLEDGED !!! ๐ฆ ๐
-------------------------------------------
๐ Event name: ${event.log.fragment.name}
โ๏ธ Network: ${network}
๐ Source Port Address: ${sourcePortAddress}
๐ฃ๏ธ Source Channel ID: ${sourceChannelIdString}
๐ Sequence: ${sequence}
-------------------------------------------
๐งพ TxHash: ${txHash}
๐ Explorer URL: ${url}
-------------------------------------------\n`);
}
dispatcher.removeAllListeners();
});
}
module.exports = { listenForIbcChannelEvents, listenForIbcPacketEvents };