UNPKG

@bowogfc/bbpolymer

Version:
221 lines (203 loc) โ€ข 9.91 kB
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 };