From fae60513a4d112a788fabbd9346ba2957bcf44fb Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Tue, 10 Mar 2026 16:54:27 +0400 Subject: [PATCH] Add prod deployment verification tests Forks each supported network (Arbitrum, Base, Base Sepolia, Flare, Polygon) and verifies both log tables and DecimalFloat contracts exist at expected addresses with correct code hashes. Adds deploy RPC URLs to CI workflow. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/rainix.yaml | 5 ++ .../deploy/LibDecimalFloatDeployProd.t.sol | 53 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 test/src/lib/deploy/LibDecimalFloatDeployProd.t.sol diff --git a/.github/workflows/rainix.yaml b/.github/workflows/rainix.yaml index 33a1a45..fe46ecc 100644 --- a/.github/workflows/rainix.yaml +++ b/.github/workflows/rainix.yaml @@ -65,4 +65,9 @@ jobs: CI_FORK_SEPOLIA_BLOCK_NUMBER: ${{ vars.CI_FORK_SEPOLIA_BLOCK_NUMBER }} CI_FORK_SEPOLIA_DEPLOYER_ADDRESS: ${{ vars.CI_FORK_SEPOLIA_DEPLOYER_ADDRESS }} CI_DEPLOY_SEPOLIA_RPC_URL: ${{ secrets.CI_DEPLOY_SEPOLIA_RPC_URL || vars.CI_DEPLOY_SEPOLIA_RPC_URL }} + CI_DEPLOY_ARBITRUM_RPC_URL: ${{ secrets.CI_DEPLOY_ARBITRUM_RPC_URL || vars.CI_DEPLOY_ARBITRUM_RPC_URL || '' }} + CI_DEPLOY_BASE_RPC_URL: ${{ secrets.CI_DEPLOY_BASE_RPC_URL || vars.CI_DEPLOY_BASE_RPC_URL || '' }} + CI_DEPLOY_BASE_SEPOLIA_RPC_URL: ${{ secrets.CI_DEPLOY_BASE_SEPOLIA_RPC_URL || vars.CI_DEPLOY_BASE_SEPOLIA_RPC_URL || '' }} + CI_DEPLOY_FLARE_RPC_URL: ${{ secrets.CI_DEPLOY_FLARE_RPC_URL || vars.CI_DEPLOY_FLARE_RPC_URL || '' }} + CI_DEPLOY_POLYGON_RPC_URL: ${{ secrets.CI_DEPLOY_POLYGON_RPC_URL || vars.CI_DEPLOY_POLYGON_RPC_URL || '' }} run: nix develop -c ${{ matrix.task }} diff --git a/test/src/lib/deploy/LibDecimalFloatDeployProd.t.sol b/test/src/lib/deploy/LibDecimalFloatDeployProd.t.sol new file mode 100644 index 0000000..3a002d5 --- /dev/null +++ b/test/src/lib/deploy/LibDecimalFloatDeployProd.t.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: LicenseRef-DCL-1.0 +// SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd +pragma solidity =0.8.25; + +import {Test} from "forge-std/Test.sol"; +import {LibDecimalFloatDeploy} from "src/lib/deploy/LibDecimalFloatDeploy.sol"; +import {LibRainDeploy} from "rain.deploy/lib/LibRainDeploy.sol"; + +/// @title LibDecimalFloatDeployProdTest +/// @notice Verifies that both the log tables data contract and the DecimalFloat +/// contract are deployed on every supported production network with the expected +/// addresses and code hashes. +contract LibDecimalFloatDeployProdTest is Test { + function checkProdDeployment(string memory network) internal { + vm.createSelectFork(network); + + address logTables = LibDecimalFloatDeploy.ZOLTU_DEPLOYED_LOG_TABLES_ADDRESS; + assertTrue(logTables.code.length > 0, string.concat(network, ": log tables not deployed")); + assertEq( + logTables.codehash, + LibDecimalFloatDeploy.LOG_TABLES_DATA_CONTRACT_HASH, + string.concat(network, ": log tables code hash mismatch") + ); + + address decimalFloat = LibDecimalFloatDeploy.ZOLTU_DEPLOYED_DECIMAL_FLOAT_ADDRESS; + assertTrue(decimalFloat.code.length > 0, string.concat(network, ": DecimalFloat not deployed")); + assertEq( + decimalFloat.codehash, + LibDecimalFloatDeploy.DECIMAL_FLOAT_CONTRACT_HASH, + string.concat(network, ": DecimalFloat code hash mismatch") + ); + } + + function testProdDeploymentArbitrum() external { + checkProdDeployment("arbitrum"); + } + + function testProdDeploymentBase() external { + checkProdDeployment("base"); + } + + function testProdDeploymentBaseSepolia() external { + checkProdDeployment("base_sepolia"); + } + + function testProdDeploymentFlare() external { + checkProdDeployment("flare"); + } + + function testProdDeploymentPolygon() external { + checkProdDeployment("polygon"); + } +}