diff --git a/config/chainIds.ts b/config/chainIds.ts index a50afab..d588f4c 100644 --- a/config/chainIds.ts +++ b/config/chainIds.ts @@ -60,7 +60,7 @@ export const CHAIN_IDS = { HPP: 190415, XTZEVM: 42793, H: 6985385, - HOODETH: 999999, //TODO: update with correct mainnet chain ID when available + HOODETH: 4663, INKETH: 57073, HEMIETH: 43111, ABSTRACTETH: 2741, diff --git a/deployUtils.ts b/deployUtils.ts index 0f8dd4b..bf96440 100644 --- a/deployUtils.ts +++ b/deployUtils.ts @@ -3,9 +3,24 @@ import fs from 'fs'; import { BaseContract, getCreateAddress } from 'ethers'; import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { verifyOnCustomEtherscan } from './scripts/customContractVerifier'; +import { CHAIN_IDS } from './config/chainIds'; const OUTPUT_FILE = 'output.json'; +// Per-chain verification overrides for chains with slow block times or restricted explorers. +// All other chains use the defaults in VERIFICATION_CONFIG. +const CHAIN_VERIFICATION_OVERRIDES: Partial< + Record< + number, + { + confirmationBlocks: number; + maxRetries: number; + } + > +> = { + [CHAIN_IDS.HOODETH]: { confirmationBlocks: 2, maxRetries: 2 } +}; + // Balance check configuration /** * Safety multiplier for balance checks. @@ -461,11 +476,21 @@ export async function waitAndVerify( throw new Error(errorMsg); } + const chainId = hre.network?.config?.chainId; + const override = chainId ? CHAIN_VERIFICATION_OVERRIDES[chainId] : undefined; + const confirmationBlocks = + override?.confirmationBlocks ?? VERIFICATION_CONFIG.CONFIRMATION_BLOCKS; + const maxRetries = override?.maxRetries ?? VERIFICATION_CONFIG.MAX_RETRIES; + // Wait for block confirmations - const contractAddress = await waitForConfirmations(contract, contractName); + const contractAddress = await waitForConfirmations( + contract, + contractName, + confirmationBlocks + ); // Perform verification with retry logic - for (let attempt = 1; attempt <= VERIFICATION_CONFIG.MAX_RETRIES; attempt++) { + for (let attempt = 1; attempt <= maxRetries; attempt++) { logger.info(`Verification attempt #${attempt} for ${contractName}...`); try { @@ -490,7 +515,7 @@ export async function waitAndVerify( } // If we get here, verification failed and we should retry - if (attempt < VERIFICATION_CONFIG.MAX_RETRIES) { + if (attempt < maxRetries) { const delaySeconds = VERIFICATION_CONFIG.RETRY_DELAY_MS / 1000; logger.info(`Waiting ${delaySeconds} seconds before retrying...`); await delay(VERIFICATION_CONFIG.RETRY_DELAY_MS); diff --git a/hardhat.config.ts b/hardhat.config.ts index 50da3a5..3eca61e 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -931,7 +931,8 @@ const config: HardhatUserConfig = { ] }, hoodeth: { - url: 'https://rpc.testnet.chain.robinhood.com', // TODO: update to mainnet RPC when available + url: 'https://ac23019b22f1ae5a.offchainlabs.com/rpc/a6186cb065b52ca24da0d197e33b303c', + chainId: CHAIN_IDS.HOODETH, accounts: [ `${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`, `${PLACEHOLDER_KEY}`, @@ -1977,8 +1978,8 @@ const config: HardhatUserConfig = { network: 'hoodethMainnet', chainId: CHAIN_IDS.HOODETH, urls: { - apiURL: 'https://explorer.testnet.chain.robinhood.com/api', // TODO: update to mainnet explorer API when available - browserURL: 'https://explorer.testnet.chain.robinhood.com' // TODO: update to mainnet explorer when available + apiURL: 'https://8crv4vmq6tiu1yqr.blockscout.com/api', + browserURL: 'https://8crv4vmq6tiu1yqr.blockscout.com' } }, { diff --git a/scripts/chainConfig.ts b/scripts/chainConfig.ts index 7f7927f..11dc491 100644 --- a/scripts/chainConfig.ts +++ b/scripts/chainConfig.ts @@ -363,7 +363,6 @@ export async function getChainConfig(chainId: number): Promise { case CHAIN_IDS.UNICHAIN_TESTNET: case CHAIN_IDS.HPP: case CHAIN_IDS.HPP_TESTNET: - case CHAIN_IDS.HOODETH: case CHAIN_IDS.HOODETH_TESTNET: case CHAIN_IDS.INKETH: case CHAIN_IDS.INKETH_TESTNET: @@ -371,6 +370,12 @@ export async function getChainConfig(chainId: number): Promise { forwarderFactoryContractName = 'ForwarderFactoryV4'; break; + case CHAIN_IDS.HOODETH: + gasParams = { ...gasParams, gasLimit: 50_000_000 }; + forwarderContractName = 'ForwarderV4'; + forwarderFactoryContractName = 'ForwarderFactoryV4'; + break; + case CHAIN_IDS.H: case CHAIN_IDS.H_TESTNET: forwarderContractName = 'ForwarderV4';