From f5b76f602fdc09c0596b771e4448bbbf3bcdcabd Mon Sep 17 00:00:00 2001 From: N V Rakesh Reddy Date: Mon, 30 Mar 2026 16:58:45 +0530 Subject: [PATCH] feat(codexeth): add contract deployment config for Codex EVM L2 CECHO-596 --- .github/workflows/deploy_and_release.yml | 12 ++++-- .github/workflows/deploy_batcher_contract.yml | 12 ++++-- config/chainIds.ts | 4 +- hardhat.config.ts | 41 ++++++++++++++++++- scripts/chainConfig.ts | 6 +++ 5 files changed, 66 insertions(+), 9 deletions(-) diff --git a/.github/workflows/deploy_and_release.yml b/.github/workflows/deploy_and_release.yml index 815fa3c..d30bdeb 100644 --- a/.github/workflows/deploy_and_release.yml +++ b/.github/workflows/deploy_and_release.yml @@ -69,6 +69,8 @@ jobs: HBAREVM_EXPLORER_API_KEY: ${{ secrets.HBAREVM_EXPLORER_API_KEY }} ARCUSDC_EXPLORER_API_KEY: ${{ secrets.ARCUSDC_EXPLORER_API_KEY }} opBNB_EXPLORER_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} + CODEX_EXPLORER_API_KEY: ${{ secrets.CODEX_EXPLORER_API_KEY }} + HEMI_EXPLORER_API_KEY: ${{ secrets.HEMI_EXPLORER_API_KEY }} get-network: runs-on: ubuntu-latest @@ -84,7 +86,7 @@ jobs: result-encoding: string script: | const tag = process.env.GITHUB_REF_NAME; - const regex = /v.*\-(eth|hteth|matic|tmatic|bsc|tbsc|arbeth|tarbeth|opeth|topeth|zketh|tzketh|baseeth|tbaseeth|bera|tbera|tavaxc|avaxc|toas|oas|tcoredao|coredao|tflr|flr|tsgb|sgb|txdc|xdc|twemix|wemix|tmon|mon|tstt|stt|tsoneium|soneium|world|tworld|tctc|ctc|tapechain|apechain|tphrs|phrs|thypeevm|hypeevm|tsonic|sonic|seievm|tseievm|kaia|tkaia|irys|tirys|tlineaeth|lineaeth|ip|tip|plasma|tplasma|kavaevm|tkavaevm|plume|tplume|zksyncera|tzksyncera|tog|og|flow|tflow|megaeth|tmegaeth|hbarevm|thbarevm|fluenteth|tfluenteth|mantle|tmantle|dogeos|tdogeos|opBNB|topBNB|jovayeth|tjovayeth|okb|tokb|ftm|morpheth|tmorpheth|arcusdc|tarcusdc|chiliz|tchiliz|unichain|tunichain|hpp|thpp|hoodeth|thoodeth|h|th|usdt0|tusdt0|xtzevm|txtzevm)$/; + const regex = /v.*\-(eth|hteth|matic|tmatic|bsc|tbsc|arbeth|tarbeth|opeth|topeth|zketh|tzketh|baseeth|tbaseeth|bera|tbera|tavaxc|avaxc|toas|oas|tcoredao|coredao|tflr|flr|tsgb|sgb|txdc|xdc|twemix|wemix|tmon|mon|tstt|stt|tsoneium|soneium|world|tworld|tctc|ctc|tapechain|apechain|tphrs|phrs|thypeevm|hypeevm|tsonic|sonic|seievm|tseievm|kaia|tkaia|irys|tirys|tlineaeth|lineaeth|ip|tip|plasma|tplasma|kavaevm|tkavaevm|plume|tplume|zksyncera|tzksyncera|tog|og|flow|tflow|megaeth|tmegaeth|hbarevm|thbarevm|fluenteth|tfluenteth|mantle|tmantle|dogeos|tdogeos|opBNB|topBNB|jovayeth|tjovayeth|okb|tokb|ftm|morpheth|tmorpheth|arcusdc|tarcusdc|chiliz|tchiliz|unichain|tunichain|hpp|thpp|hoodeth|thoodeth|h|th|usdt0|tusdt0|xtzevm|txtzevm|codexeth|tcodexeth|hemieth|themieth)$/; const network = tag.match(regex); return network ? network[1] : "hteth"; preview: @@ -117,7 +119,7 @@ jobs: deploy-to-test: runs-on: ubuntu-latest needs: [lint-and-test, get-network, preview] - if: ${{ (needs.get-network.outputs.network == 'hteth' ) || (needs.get-network.outputs.network == 'tmatic' ) || (needs.get-network.outputs.network == 'tbsc' ) || (needs.get-network.outputs.network == 'tarbeth' ) || (needs.get-network.outputs.network == 'topeth' ) || (needs.get-network.outputs.network == 'tzketh' ) || (needs.get-network.outputs.network == 'tbaseeth' ) || (needs.get-network.outputs.network == 'tbera' ) || (needs.get-network.outputs.network == 'tavaxc' ) || (needs.get-network.outputs.network == 'toas' ) || (needs.get-network.outputs.network == 'tcoredao' ) || (needs.get-network.outputs.network == 'tflr' ) || (needs.get-network.outputs.network == 'tsgb' ) || (needs.get-network.outputs.network == 'txdc' ) || (needs.get-network.outputs.network == 'twemix' ) || (needs.get-network.outputs.network == 'tmon' ) || (needs.get-network.outputs.network == 'tstt' ) || (needs.get-network.outputs.network == 'tsoneium' ) || (needs.get-network.outputs.network == 'tworld' ) || (needs.get-network.outputs.network == 'tctc' ) || (needs.get-network.outputs.network == 'tapechain' ) || (needs.get-network.outputs.network == 'tphrs' ) || (needs.get-network.outputs.network == 'thypeevm' ) || (needs.get-network.outputs.network == 'tsonic' )|| (needs.get-network.outputs.network == 'tseievm' ) || (needs.get-network.outputs.network == 'tkaia' ) || (needs.get-network.outputs.network == 'tirys' ) || (needs.get-network.outputs.network == 'tlineaeth' ) || (needs.get-network.outputs.network == 'tip' ) || (needs.get-network.outputs.network == 'tplasma' ) || (needs.get-network.outputs.network == 'tog' ) || (needs.get-network.outputs.network == 'tkavaevm' ) || (needs.get-network.outputs.network == 'tplume') || (needs.get-network.outputs.network == 'tzksyncera') || (needs.get-network.outputs.network == 'tflow') || (needs.get-network.outputs.network == 'tmegaeth') || (needs.get-network.outputs.network == 'thbarevm') || (needs.get-network.outputs.network == 'tfluenteth') || (needs.get-network.outputs.network == 'tmantle') || (needs.get-network.outputs.network == 'tdogeos') || (needs.get-network.outputs.network == 'topBNB') || (needs.get-network.outputs.network == 'tjovayeth') || (needs.get-network.outputs.network == 'tokb') || (needs.get-network.outputs.network == 'tarcusdc') || (needs.get-network.outputs.network == 'tmorpheth') || (needs.get-network.outputs.network == 'tchiliz') || (needs.get-network.outputs.network == 'tunichain') || (needs.get-network.outputs.network == 'thpp') || (needs.get-network.outputs.network == 'th') || (needs.get-network.outputs.network == 'thoodeth') || (needs.get-network.outputs.network == 'tusdt0' ) || (needs.get-network.outputs.network == 'txtzevm' )}} + if: ${{ (needs.get-network.outputs.network == 'hteth' ) || (needs.get-network.outputs.network == 'tmatic' ) || (needs.get-network.outputs.network == 'tbsc' ) || (needs.get-network.outputs.network == 'tarbeth' ) || (needs.get-network.outputs.network == 'topeth' ) || (needs.get-network.outputs.network == 'tzketh' ) || (needs.get-network.outputs.network == 'tbaseeth' ) || (needs.get-network.outputs.network == 'tbera' ) || (needs.get-network.outputs.network == 'tavaxc' ) || (needs.get-network.outputs.network == 'toas' ) || (needs.get-network.outputs.network == 'tcoredao' ) || (needs.get-network.outputs.network == 'tflr' ) || (needs.get-network.outputs.network == 'tsgb' ) || (needs.get-network.outputs.network == 'txdc' ) || (needs.get-network.outputs.network == 'twemix' ) || (needs.get-network.outputs.network == 'tmon' ) || (needs.get-network.outputs.network == 'tstt' ) || (needs.get-network.outputs.network == 'tsoneium' ) || (needs.get-network.outputs.network == 'tworld' ) || (needs.get-network.outputs.network == 'tctc' ) || (needs.get-network.outputs.network == 'tapechain' ) || (needs.get-network.outputs.network == 'tphrs' ) || (needs.get-network.outputs.network == 'thypeevm' ) || (needs.get-network.outputs.network == 'tsonic' )|| (needs.get-network.outputs.network == 'tseievm' ) || (needs.get-network.outputs.network == 'tkaia' ) || (needs.get-network.outputs.network == 'tirys' ) || (needs.get-network.outputs.network == 'tlineaeth' ) || (needs.get-network.outputs.network == 'tip' ) || (needs.get-network.outputs.network == 'tplasma' ) || (needs.get-network.outputs.network == 'tog' ) || (needs.get-network.outputs.network == 'tkavaevm' ) || (needs.get-network.outputs.network == 'tplume') || (needs.get-network.outputs.network == 'tzksyncera') || (needs.get-network.outputs.network == 'tflow') || (needs.get-network.outputs.network == 'tmegaeth') || (needs.get-network.outputs.network == 'thbarevm') || (needs.get-network.outputs.network == 'tfluenteth') || (needs.get-network.outputs.network == 'tmantle') || (needs.get-network.outputs.network == 'tdogeos') || (needs.get-network.outputs.network == 'topBNB') || (needs.get-network.outputs.network == 'tjovayeth') || (needs.get-network.outputs.network == 'tokb') || (needs.get-network.outputs.network == 'tarcusdc') || (needs.get-network.outputs.network == 'tmorpheth') || (needs.get-network.outputs.network == 'tchiliz') || (needs.get-network.outputs.network == 'tunichain') || (needs.get-network.outputs.network == 'thpp') || (needs.get-network.outputs.network == 'th') || (needs.get-network.outputs.network == 'thoodeth') || (needs.get-network.outputs.network == 'tusdt0' ) || (needs.get-network.outputs.network == 'txtzevm' ) || (needs.get-network.outputs.network == 'tcodexeth' ) || (needs.get-network.outputs.network == 'themieth' )}} environment: testnet steps: - uses: actions/checkout@v2 @@ -182,6 +184,8 @@ jobs: HBAREVM_EXPLORER_API_KEY: ${{ secrets.HBAREVM_EXPLORER_API_KEY }} opBNB_EXPLORER_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} ARCUSDC_EXPLORER_API_KEY: ${{ secrets.ARCUSDC_EXPLORER_API_KEY }} + CODEX_EXPLORER_API_KEY: ${{ secrets.CODEX_EXPLORER_API_KEY }} + HEMI_EXPLORER_API_KEY: ${{ secrets.HEMI_EXPLORER_API_KEY }} - name: Update release notes uses: actions/github-script@v6 with: @@ -213,7 +217,7 @@ jobs: deploy-to-prod: runs-on: ubuntu-latest needs: [lint-and-test, get-network, preview] - if: ${{ (needs.get-network.outputs.network == 'eth' ) || (needs.get-network.outputs.network == 'matic' ) || (needs.get-network.outputs.network == 'bsc' ) || (needs.get-network.outputs.network == 'arbeth' ) || (needs.get-network.outputs.network == 'opeth' ) || (needs.get-network.outputs.network == 'zketh' ) || (needs.get-network.outputs.network == 'baseeth' ) || (needs.get-network.outputs.network == 'bera' ) || (needs.get-network.outputs.network == 'avaxc' ) || (needs.get-network.outputs.network == 'coredao' ) || (needs.get-network.outputs.network == 'oas' ) || (needs.get-network.outputs.network == 'flr' ) || (needs.get-network.outputs.network == 'sgb' ) || (needs.get-network.outputs.network == 'xdc' ) || (needs.get-network.outputs.network == 'wemix' ) || (needs.get-network.outputs.network == 'mon' ) || (needs.get-network.outputs.network == 'stt' ) || (needs.get-network.outputs.network == 'soneium' ) || (needs.get-network.outputs.network == 'world' ) || (needs.get-network.outputs.network == 'ctc' ) || (needs.get-network.outputs.network == 'apechain' ) || (needs.get-network.outputs.network == 'phrs' ) || (needs.get-network.outputs.network == 'hypeevm' ) || (needs.get-network.outputs.network == 'sonic' ) || (needs.get-network.outputs.network == 'seievm' ) || (needs.get-network.outputs.network == 'kaia' ) || (needs.get-network.outputs.network == 'irys' ) || (needs.get-network.outputs.network == 'lineaeth' ) || (needs.get-network.outputs.network == 'ip' ) || (needs.get-network.outputs.network == 'plasma' ) || (needs.get-network.outputs.network == 'kavaevm' ) || (needs.get-network.outputs.network == 'og' ) || (needs.get-network.outputs.network == 'plume') || (needs.get-network.outputs.network == 'zksyncera') || (needs.get-network.outputs.network == 'flow') || (needs.get-network.outputs.network == 'megaeth') || (needs.get-network.outputs.network == 'hbarevm') || (needs.get-network.outputs.network == 'fluenteth') || (needs.get-network.outputs.network == 'mantle') || (needs.get-network.outputs.network == 'dogeos') || (needs.get-network.outputs.network == 'opBNB') || (needs.get-network.outputs.network == 'jovayeth') || (needs.get-network.outputs.network == 'okb') || (needs.get-network.outputs.network == 'ftm') || (needs.get-network.outputs.network == 'arcusdc') || (needs.get-network.outputs.network == 'morpheth') || (needs.get-network.outputs.network == 'chiliz') || (needs.get-network.outputs.network == 'unichain') || (needs.get-network.outputs.network == 'hpp') || (needs.get-network.outputs.network == 'h') || (needs.get-network.outputs.network == 'hoodeth') || (needs.get-network.outputs.network == 'usdt0') || (needs.get-network.outputs.network == 'xtzevm' )}} + if: ${{ (needs.get-network.outputs.network == 'eth' ) || (needs.get-network.outputs.network == 'matic' ) || (needs.get-network.outputs.network == 'bsc' ) || (needs.get-network.outputs.network == 'arbeth' ) || (needs.get-network.outputs.network == 'opeth' ) || (needs.get-network.outputs.network == 'zketh' ) || (needs.get-network.outputs.network == 'baseeth' ) || (needs.get-network.outputs.network == 'bera' ) || (needs.get-network.outputs.network == 'avaxc' ) || (needs.get-network.outputs.network == 'coredao' ) || (needs.get-network.outputs.network == 'oas' ) || (needs.get-network.outputs.network == 'flr' ) || (needs.get-network.outputs.network == 'sgb' ) || (needs.get-network.outputs.network == 'xdc' ) || (needs.get-network.outputs.network == 'wemix' ) || (needs.get-network.outputs.network == 'mon' ) || (needs.get-network.outputs.network == 'stt' ) || (needs.get-network.outputs.network == 'soneium' ) || (needs.get-network.outputs.network == 'world' ) || (needs.get-network.outputs.network == 'ctc' ) || (needs.get-network.outputs.network == 'apechain' ) || (needs.get-network.outputs.network == 'phrs' ) || (needs.get-network.outputs.network == 'hypeevm' ) || (needs.get-network.outputs.network == 'sonic' ) || (needs.get-network.outputs.network == 'seievm' ) || (needs.get-network.outputs.network == 'kaia' ) || (needs.get-network.outputs.network == 'irys' ) || (needs.get-network.outputs.network == 'lineaeth' ) || (needs.get-network.outputs.network == 'ip' ) || (needs.get-network.outputs.network == 'plasma' ) || (needs.get-network.outputs.network == 'kavaevm' ) || (needs.get-network.outputs.network == 'og' ) || (needs.get-network.outputs.network == 'plume') || (needs.get-network.outputs.network == 'zksyncera') || (needs.get-network.outputs.network == 'flow') || (needs.get-network.outputs.network == 'megaeth') || (needs.get-network.outputs.network == 'hbarevm') || (needs.get-network.outputs.network == 'fluenteth') || (needs.get-network.outputs.network == 'mantle') || (needs.get-network.outputs.network == 'dogeos') || (needs.get-network.outputs.network == 'opBNB') || (needs.get-network.outputs.network == 'jovayeth') || (needs.get-network.outputs.network == 'okb') || (needs.get-network.outputs.network == 'ftm') || (needs.get-network.outputs.network == 'arcusdc') || (needs.get-network.outputs.network == 'morpheth') || (needs.get-network.outputs.network == 'chiliz') || (needs.get-network.outputs.network == 'unichain') || (needs.get-network.outputs.network == 'hpp') || (needs.get-network.outputs.network == 'h') || (needs.get-network.outputs.network == 'hoodeth') || (needs.get-network.outputs.network == 'usdt0') || (needs.get-network.outputs.network == 'xtzevm' ) || (needs.get-network.outputs.network == 'codexeth' ) || (needs.get-network.outputs.network == 'hemieth' )}} environment: mainnet steps: - uses: actions/checkout@v2 @@ -277,6 +281,8 @@ jobs: MEGAETH_EXPLORER_API_KEY: ${{ secrets.MEGAETH_EXPLORER_API_KEY }} HBAREVM_EXPLORER_API_KEY: ${{ secrets.HBAREVM_EXPLORER_API_KEY }} ARCUSDC_EXPLORER_API_KEY: ${{ secrets.ARCUSDC_EXPLORER_API_KEY }} + CODEX_EXPLORER_API_KEY: ${{ secrets.CODEX_EXPLORER_API_KEY }} + HEMI_EXPLORER_API_KEY: ${{ secrets.HEMI_EXPLORER_API_KEY }} opBNB_EXPLORER_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} - name: Update release notes uses: actions/github-script@v6 diff --git a/.github/workflows/deploy_batcher_contract.yml b/.github/workflows/deploy_batcher_contract.yml index f51cd62..055e41d 100644 --- a/.github/workflows/deploy_batcher_contract.yml +++ b/.github/workflows/deploy_batcher_contract.yml @@ -67,6 +67,8 @@ jobs: MEGAETH_EXPLORER_API_KEY: ${{ secrets.MEGAETH_EXPLORER_API_KEY }} HBAREVM_EXPLORER_API_KEY: ${{ secrets.HBAREVM_EXPLORER_API_KEY }} ARCUSDC_EXPLORER_API_KEY: ${{ secrets.ARCUSDC_EXPLORER_API_KEY }} + CODEX_EXPLORER_API_KEY: ${{ secrets.CODEX_EXPLORER_API_KEY }} + HEMI_EXPLORER_API_KEY: ${{ secrets.HEMI_EXPLORER_API_KEY }} get-network: runs-on: ubuntu-latest needs: [lint-and-test] @@ -81,7 +83,7 @@ jobs: result-encoding: string script: | const tag = process.env.GITHUB_REF_NAME; - const regex = /v.*\-(eth|hteth|matic|tmatic|bsc|tbsc|arbeth|tarbeth|opeth|topeth|zketh|tzketh|baseeth|tbaseeth|bera|tbera|tavaxc|avaxc|toas|oas|tcoredao|coredao|flr|tflr|sgb|tsgb|txdc|xdc|twemix|wemix|tmon|mon|tstt|stt|tsoneium|soneium|tworld|world|tctc|ctc|tapechain|apechain|tphrs|phrs|thypeevm|hypeevm|tsonic|sonic|seievm|tseievm|kaia|tkaia|irys|tirys|lineaeth|tlineaeth|tip|ip|tplasma|plasma|kavaevm|tkavaevm|plume|tplume|zksyncera|tzksyncera|tog|og|tflow|flow|megaeth|tmegaeth|hbarevm|thbarevm|fluenteth|tfluenteth|mantle|tmantle|dogeos|tdogeos|jovayeth|tjovayeth|okb|tokb|morpheth|tmorpheth|arcusdc|tarcusdc|chiliz|tchiliz|unichain|tunichain|hpp|thpp|hoodeth|thoodeth|h|th|usdt0|tusdt0|xtzevm|txtzevm)$/; + const regex = /v.*\-(eth|hteth|matic|tmatic|bsc|tbsc|arbeth|tarbeth|opeth|topeth|zketh|tzketh|baseeth|tbaseeth|bera|tbera|tavaxc|avaxc|toas|oas|tcoredao|coredao|flr|tflr|sgb|tsgb|txdc|xdc|twemix|wemix|tmon|mon|tstt|stt|tsoneium|soneium|tworld|world|tctc|ctc|tapechain|apechain|tphrs|phrs|thypeevm|hypeevm|tsonic|sonic|seievm|tseievm|kaia|tkaia|irys|tirys|lineaeth|tlineaeth|tip|ip|tplasma|plasma|kavaevm|tkavaevm|plume|tplume|zksyncera|tzksyncera|tog|og|tflow|flow|megaeth|tmegaeth|hbarevm|thbarevm|fluenteth|tfluenteth|mantle|tmantle|dogeos|tdogeos|jovayeth|tjovayeth|okb|tokb|morpheth|tmorpheth|arcusdc|tarcusdc|chiliz|tchiliz|unichain|tunichain|hpp|thpp|hoodeth|thoodeth|h|th|usdt0|tusdt0|xtzevm|txtzevm|codexeth|tcodexeth|hemieth|themieth)$/; const matchedNetwork = tag.match(regex); if (!matchedNetwork) { console.log("No match found for the network name, defaulting to 'hteth'."); @@ -112,7 +114,7 @@ jobs: deploy-batcher-contract-to-test: runs-on: ubuntu-latest needs: [lint-and-test, get-network, preview] - if: ${{ (needs.get-network.outputs.network == 'hteth' ) || (needs.get-network.outputs.network == 'tmatic' ) || (needs.get-network.outputs.network == 'tbsc' ) || (needs.get-network.outputs.network == 'tarbeth' ) || (needs.get-network.outputs.network == 'topeth' ) || (needs.get-network.outputs.network == 'tzketh' ) || (needs.get-network.outputs.network == 'tbaseeth' ) || (needs.get-network.outputs.network == 'tbera' ) || (needs.get-network.outputs.network == 'tavaxc' ) || (needs.get-network.outputs.network == 'tcoredao' ) || (needs.get-network.outputs.network == 'toas' ) || (needs.get-network.outputs.network == 'tflr' ) || (needs.get-network.outputs.network == 'tsgb' ) || (needs.get-network.outputs.network == 'txdc' ) || (needs.get-network.outputs.network == 'twemix' ) || (needs.get-network.outputs.network == 'tmon' ) || (needs.get-network.outputs.network == 'tstt' ) || (needs.get-network.outputs.network == 'tsoneium' ) || (needs.get-network.outputs.network == 'tworld' ) || (needs.get-network.outputs.network == 'tctc' ) || (needs.get-network.outputs.network == 'tapechain' ) || (needs.get-network.outputs.network == 'tphrs' ) || (needs.get-network.outputs.network == 'thypeevm' ) || (needs.get-network.outputs.network == 'tsonic' ) || (needs.get-network.outputs.network == 'tseievm' ) || (needs.get-network.outputs.network == 'tkaia' ) || (needs.get-network.outputs.network == 'tirys' ) || (needs.get-network.outputs.network == 'tlineaeth' ) || (needs.get-network.outputs.network == 'tip' ) || (needs.get-network.outputs.network == 'tplasma' ) || (needs.get-network.outputs.network == 'tog' ) || (needs.get-network.outputs.network == 'tkavaevm' ) || (needs.get-network.outputs.network == 'tplume') || (needs.get-network.outputs.network == 'tzksyncera') || (needs.get-network.outputs.network == 'tflow' ) || (needs.get-network.outputs.network == 'tmegaeth' ) || (needs.get-network.outputs.network == 'thbarevm' ) || (needs.get-network.outputs.network == 'tfluenteth' ) || (needs.get-network.outputs.network == 'tmantle' ) || (needs.get-network.outputs.network == 'tdogeos') || (needs.get-network.outputs.network == 'tjovayeth') || (needs.get-network.outputs.network == 'tokb') || (needs.get-network.outputs.network == 'tmorpheth') || (needs.get-network.outputs.network == 'tarcusdc') || (needs.get-network.outputs.network == 'tchiliz') || (needs.get-network.outputs.network == 'tunichain') || (needs.get-network.outputs.network == 'thpp') || (needs.get-network.outputs.network == 'th') || (needs.get-network.outputs.network == 'thoodeth') || (needs.get-network.outputs.network == 'tusdt0') || (needs.get-network.outputs.network == 'txtzevm' )}} + if: ${{ (needs.get-network.outputs.network == 'hteth' ) || (needs.get-network.outputs.network == 'tmatic' ) || (needs.get-network.outputs.network == 'tbsc' ) || (needs.get-network.outputs.network == 'tarbeth' ) || (needs.get-network.outputs.network == 'topeth' ) || (needs.get-network.outputs.network == 'tzketh' ) || (needs.get-network.outputs.network == 'tbaseeth' ) || (needs.get-network.outputs.network == 'tbera' ) || (needs.get-network.outputs.network == 'tavaxc' ) || (needs.get-network.outputs.network == 'tcoredao' ) || (needs.get-network.outputs.network == 'toas' ) || (needs.get-network.outputs.network == 'tflr' ) || (needs.get-network.outputs.network == 'tsgb' ) || (needs.get-network.outputs.network == 'txdc' ) || (needs.get-network.outputs.network == 'twemix' ) || (needs.get-network.outputs.network == 'tmon' ) || (needs.get-network.outputs.network == 'tstt' ) || (needs.get-network.outputs.network == 'tsoneium' ) || (needs.get-network.outputs.network == 'tworld' ) || (needs.get-network.outputs.network == 'tctc' ) || (needs.get-network.outputs.network == 'tapechain' ) || (needs.get-network.outputs.network == 'tphrs' ) || (needs.get-network.outputs.network == 'thypeevm' ) || (needs.get-network.outputs.network == 'tsonic' ) || (needs.get-network.outputs.network == 'tseievm' ) || (needs.get-network.outputs.network == 'tkaia' ) || (needs.get-network.outputs.network == 'tirys' ) || (needs.get-network.outputs.network == 'tlineaeth' ) || (needs.get-network.outputs.network == 'tip' ) || (needs.get-network.outputs.network == 'tplasma' ) || (needs.get-network.outputs.network == 'tog' ) || (needs.get-network.outputs.network == 'tkavaevm' ) || (needs.get-network.outputs.network == 'tplume') || (needs.get-network.outputs.network == 'tzksyncera') || (needs.get-network.outputs.network == 'tflow' ) || (needs.get-network.outputs.network == 'tmegaeth' ) || (needs.get-network.outputs.network == 'thbarevm' ) || (needs.get-network.outputs.network == 'tfluenteth' ) || (needs.get-network.outputs.network == 'tmantle' ) || (needs.get-network.outputs.network == 'tdogeos') || (needs.get-network.outputs.network == 'tjovayeth') || (needs.get-network.outputs.network == 'tokb') || (needs.get-network.outputs.network == 'tmorpheth') || (needs.get-network.outputs.network == 'tarcusdc') || (needs.get-network.outputs.network == 'tchiliz') || (needs.get-network.outputs.network == 'tunichain') || (needs.get-network.outputs.network == 'thpp') || (needs.get-network.outputs.network == 'th') || (needs.get-network.outputs.network == 'thoodeth') || (needs.get-network.outputs.network == 'tusdt0') || (needs.get-network.outputs.network == 'txtzevm' ) || (needs.get-network.outputs.network == 'tcodexeth' ) || (needs.get-network.outputs.network == 'themieth' )}} environment: testnet steps: - uses: actions/checkout@v4 @@ -173,6 +175,8 @@ jobs: MEGAETH_EXPLORER_API_KEY: ${{ secrets.MEGAETH_EXPLORER_API_KEY }} HBAREVM_EXPLORER_API_KEY: ${{ secrets.HBAREVM_EXPLORER_API_KEY }} ARCUSDC_EXPLORER_API_KEY: ${{ secrets.ARCUSDC_EXPLORER_API_KEY }} + CODEX_EXPLORER_API_KEY: ${{ secrets.CODEX_EXPLORER_API_KEY }} + HEMI_EXPLORER_API_KEY: ${{ secrets.HEMI_EXPLORER_API_KEY }} - name: Update release notes uses: actions/github-script@v7 with: @@ -184,7 +188,7 @@ jobs: deploy-batcher-contract-to-prod: runs-on: ubuntu-latest needs: [lint-and-test, get-network, preview] - if: ${{ (needs.get-network.outputs.network == 'eth' ) || (needs.get-network.outputs.network == 'matic' ) || (needs.get-network.outputs.network == 'bsc' ) || (needs.get-network.outputs.network == 'arbeth' ) || (needs.get-network.outputs.network == 'opeth' ) || (needs.get-network.outputs.network == 'zketh' ) || (needs.get-network.outputs.network == 'baseeth' ) || (needs.get-network.outputs.network == 'bera' ) || (needs.get-network.outputs.network == 'avaxc' ) || (needs.get-network.outputs.network == 'coredao' ) || (needs.get-network.outputs.network == 'oas' ) || (needs.get-network.outputs.network == 'sgb' ) || (needs.get-network.outputs.network == 'flr' ) || (needs.get-network.outputs.network == 'xdc' ) || (needs.get-network.outputs.network == 'wemix' ) || (needs.get-network.outputs.network == 'mon' ) || (needs.get-network.outputs.network == 'stt' ) || (needs.get-network.outputs.network == 'soneium' ) || (needs.get-network.outputs.network == 'world' ) || (needs.get-network.outputs.network == 'ctc' ) || (needs.get-network.outputs.network == 'apechain' ) || (needs.get-network.outputs.network == 'phrs' ) || (needs.get-network.outputs.network == 'hypeevm' ) || (needs.get-network.outputs.network == 'sonic' ) || (needs.get-network.outputs.network == 'seievm' ) || (needs.get-network.outputs.network == 'kaia' ) || (needs.get-network.outputs.network == 'irys' ) || (needs.get-network.outputs.network == 'lineaeth' ) || (needs.get-network.outputs.network == 'ip' ) || (needs.get-network.outputs.network == 'plasma' ) || (needs.get-network.outputs.network == 'kavaevm' ) || (needs.get-network.outputs.network == 'og' ) || (needs.get-network.outputs.network == 'plume' ) || (needs.get-network.outputs.network == 'zksyncera' ) || (needs.get-network.outputs.network == 'flow' ) || (needs.get-network.outputs.network == 'megaeth' ) || (needs.get-network.outputs.network == 'hbarevm' ) || (needs.get-network.outputs.network == 'fluenteth' ) || (needs.get-network.outputs.network == 'mantle' ) || (needs.get-network.outputs.network == 'dogeos') || (needs.get-network.outputs.network == 'jovayeth') || (needs.get-network.outputs.network == 'okb') || (needs.get-network.outputs.network == 'morpheth') || (needs.get-network.outputs.network == 'arcusdc') || (needs.get-network.outputs.network == 'chiliz') || (needs.get-network.outputs.network == 'unichain') || (needs.get-network.outputs.network == 'hpp') || (needs.get-network.outputs.network == 'h') || (needs.get-network.outputs.network == 'hoodeth') || (needs.get-network.outputs.network == 'usdt0' ) || (needs.get-network.outputs.network == 'xtzevm' )}} + if: ${{ (needs.get-network.outputs.network == 'eth' ) || (needs.get-network.outputs.network == 'matic' ) || (needs.get-network.outputs.network == 'bsc' ) || (needs.get-network.outputs.network == 'arbeth' ) || (needs.get-network.outputs.network == 'opeth' ) || (needs.get-network.outputs.network == 'zketh' ) || (needs.get-network.outputs.network == 'baseeth' ) || (needs.get-network.outputs.network == 'bera' ) || (needs.get-network.outputs.network == 'avaxc' ) || (needs.get-network.outputs.network == 'coredao' ) || (needs.get-network.outputs.network == 'oas' ) || (needs.get-network.outputs.network == 'sgb' ) || (needs.get-network.outputs.network == 'flr' ) || (needs.get-network.outputs.network == 'xdc' ) || (needs.get-network.outputs.network == 'wemix' ) || (needs.get-network.outputs.network == 'mon' ) || (needs.get-network.outputs.network == 'stt' ) || (needs.get-network.outputs.network == 'soneium' ) || (needs.get-network.outputs.network == 'world' ) || (needs.get-network.outputs.network == 'ctc' ) || (needs.get-network.outputs.network == 'apechain' ) || (needs.get-network.outputs.network == 'phrs' ) || (needs.get-network.outputs.network == 'hypeevm' ) || (needs.get-network.outputs.network == 'sonic' ) || (needs.get-network.outputs.network == 'seievm' ) || (needs.get-network.outputs.network == 'kaia' ) || (needs.get-network.outputs.network == 'irys' ) || (needs.get-network.outputs.network == 'lineaeth' ) || (needs.get-network.outputs.network == 'ip' ) || (needs.get-network.outputs.network == 'plasma' ) || (needs.get-network.outputs.network == 'kavaevm' ) || (needs.get-network.outputs.network == 'og' ) || (needs.get-network.outputs.network == 'plume' ) || (needs.get-network.outputs.network == 'zksyncera' ) || (needs.get-network.outputs.network == 'flow' ) || (needs.get-network.outputs.network == 'megaeth' ) || (needs.get-network.outputs.network == 'hbarevm' ) || (needs.get-network.outputs.network == 'fluenteth' ) || (needs.get-network.outputs.network == 'mantle' ) || (needs.get-network.outputs.network == 'dogeos') || (needs.get-network.outputs.network == 'jovayeth') || (needs.get-network.outputs.network == 'okb') || (needs.get-network.outputs.network == 'morpheth') || (needs.get-network.outputs.network == 'arcusdc') || (needs.get-network.outputs.network == 'chiliz') || (needs.get-network.outputs.network == 'unichain') || (needs.get-network.outputs.network == 'hpp') || (needs.get-network.outputs.network == 'h') || (needs.get-network.outputs.network == 'hoodeth') || (needs.get-network.outputs.network == 'usdt0' ) || (needs.get-network.outputs.network == 'xtzevm' ) || (needs.get-network.outputs.network == 'codexeth' ) || (needs.get-network.outputs.network == 'hemieth' )}} environment: mainnet steps: - uses: actions/checkout@v4 @@ -245,6 +249,8 @@ jobs: MEGAETH_EXPLORER_API_KEY: ${{ secrets.MEGAETH_EXPLORER_API_KEY }} HBAREVM_EXPLORER_API_KEY: ${{ secrets.HBAREVM_EXPLORER_API_KEY }} ARCUSDC_EXPLORER_API_KEY: ${{ secrets.ARCUSDC_EXPLORER_API_KEY }} + CODEX_EXPLORER_API_KEY: ${{ secrets.CODEX_EXPLORER_API_KEY }} + HEMI_EXPLORER_API_KEY: ${{ secrets.HEMI_EXPLORER_API_KEY }} - name: Update release notes uses: actions/github-script@v7 with: diff --git a/config/chainIds.ts b/config/chainIds.ts index 29482e8..5da716e 100644 --- a/config/chainIds.ts +++ b/config/chainIds.ts @@ -61,6 +61,7 @@ export const CHAIN_IDS = { XTZEVM: 42793, H: 6985385, HOODETH: 999999, //TODO: update with correct mainnet chain ID when available + CODEXETH: 81224, // Testnet Networks BSC_TESTNET: 97, @@ -110,5 +111,6 @@ export const CHAIN_IDS = { UNICHAIN_TESTNET: 1301, HPP_TESTNET: 181228, H_TESTNET: 7080969, - HOODETH_TESTNET: 46630 + HOODETH_TESTNET: 46630, + CODEXETH_TESTNET: 812242 } as const; diff --git a/hardhat.config.ts b/hardhat.config.ts index 63e572d..19f9979 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -57,7 +57,8 @@ const { FLOW_EXPLORER_API_KEY, HBAREVM_EXPLORER_API_KEY, ARCUSDC_EXPLORER_API_KEY, - DOGEOS_EXPLORER_API_KEY + DOGEOS_EXPLORER_API_KEY, + CODEX_EXPLORER_API_KEY } = process.env; const PLACEHOLDER_KEY: string = @@ -960,6 +961,22 @@ const config: HardhatUserConfig = { `${PLACEHOLDER_KEY}`, `${PRIVATE_KEY_FOR_BATCHER_CONTRACT_DEPLOYMENT}` ] + }, + codexeth: { + url: `https://rpc.codex.xyz/`, + accounts: [ + `${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`, + `${PLACEHOLDER_KEY}`, + `${PRIVATE_KEY_FOR_BATCHER_CONTRACT_DEPLOYMENT}` + ] + }, + tcodexeth: { + url: `https://rpc.codex-stg.xyz/`, + accounts: [ + `${PRIVATE_KEY_FOR_V4_CONTRACT_DEPLOYMENT}`, + `${PLACEHOLDER_KEY}`, + `${PRIVATE_KEY_FOR_BATCHER_CONTRACT_DEPLOYMENT}` + ] } }, gasReporter: { @@ -1137,7 +1154,11 @@ const config: HardhatUserConfig = { // Robinhood Chain (explorer.testnet.chain.robinhood.com) hoodethTestnet: `${ETHERSCAN_API_KEY}`, - hoodethMainnet: `${ETHERSCAN_API_KEY}` + hoodethMainnet: `${ETHERSCAN_API_KEY}`, + + // CODEXETH + codexethTestnet: `${CODEX_EXPLORER_API_KEY}`, + codexethMainnet: `${CODEX_EXPLORER_API_KEY}` }, customChains: [ { @@ -1919,6 +1940,22 @@ const config: HardhatUserConfig = { 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 } + }, + { + network: 'codexethTestnet', + chainId: CHAIN_IDS.CODEXETH_TESTNET, + urls: { + apiURL: 'https://explorer.codex-stg.xyz/api', + browserURL: 'https://explorer.codex-stg.xyz' + } + }, + { + network: 'codexethMainnet', + chainId: CHAIN_IDS.CODEXETH, + urls: { + apiURL: 'https://explorer.codex.xyz/api', + browserURL: 'https://explorer.codex.xyz' + } } ] }, diff --git a/scripts/chainConfig.ts b/scripts/chainConfig.ts index 75a3120..6651fec 100644 --- a/scripts/chainConfig.ts +++ b/scripts/chainConfig.ts @@ -352,6 +352,12 @@ export async function getChainConfig(chainId: number): Promise { forwarderContractName = 'ForwarderV4'; forwarderFactoryContractName = 'ForwarderFactoryV4'; break; + + case CHAIN_IDS.CODEXETH: + case CHAIN_IDS.CODEXETH_TESTNET: + forwarderContractName = 'ForwarderV4'; + forwarderFactoryContractName = 'ForwarderFactoryV4'; + break; } return {