UNPKG

@hyperlane-xyz/core

Version:

Core solidity contracts for Hyperlane

51 lines (42 loc) 1.88 kB
/** * @description this script generates a master interface for interacting with the automation registry * @notice run this script with pnpm ts-node ./scripts/generate-automation-master-interface.ts */ import { AutomationRegistry2_2__factory as Registry } from '../typechain/factories/AutomationRegistry2_2__factory' import { AutomationRegistryLogicA2_2__factory as RegistryLogicA } from '../typechain/factories/AutomationRegistryLogicA2_2__factory' import { AutomationRegistryLogicB2_2__factory as RegistryLogicB } from '../typechain/factories/AutomationRegistryLogicB2_2__factory' import { utils } from 'ethers' import fs from 'fs' import { exec } from 'child_process' const dest = 'src/v0.8/automation/interfaces/v2_2' const srcDest = `${dest}/IAutomationRegistryMaster.sol` const tmpDest = `${dest}/tmp.txt` const combinedABI = [] const abiSet = new Set() const abis = [Registry.abi, RegistryLogicA.abi, RegistryLogicB.abi] for (const abi of abis) { for (const entry of abi) { const id = utils.id(JSON.stringify(entry)) if (!abiSet.has(id)) { abiSet.add(id) if ( entry.type === 'function' && (entry.name === 'checkUpkeep' || entry.name === 'checkCallback' || entry.name === 'simulatePerformUpkeep') ) { entry.stateMutability = 'view' // override stateMutability for check / callback / simulate functions } combinedABI.push(entry) } } } const checksum = utils.id(abis.join('')) fs.writeFileSync(`${tmpDest}`, JSON.stringify(combinedABI)) const cmd = ` cat ${tmpDest} | pnpm abi-to-sol --solidity-version ^0.8.4 --license MIT > ${srcDest} IAutomationRegistryMaster; echo "// abi-checksum: ${checksum}" | cat - ${srcDest} > ${tmpDest} && mv ${tmpDest} ${srcDest}; pnpm prettier --write ${srcDest}; ` exec(cmd) console.log('generated new master interface for automation registry')