-
Notifications
You must be signed in to change notification settings - Fork 1
2026 02 11 deploy #91
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,10 +1,10 @@ | ||
| LibDescribedByMetaEmitForDescribedAddressTest:testEmitForDescribedAddressHappy(bytes) (runs: 5096, μ: 256737, ~: 256683) | ||
| LibDescribedByMetaEmitForDescribedAddressTest:testEmitForDescribedAddressMismatch(bytes,bytes) (runs: 5092, μ: 258640, ~: 258619) | ||
| LibDescribedByMetaEmitForDescribedAddressTest:testEmitForDescribedAddressHappy(bytes) (runs: 5096, μ: 256735, ~: 256683) | ||
| LibDescribedByMetaEmitForDescribedAddressTest:testEmitForDescribedAddressMismatch(bytes,bytes) (runs: 5096, μ: 258640, ~: 258619) | ||
| LibMetaCheckMetaHashedV1_2Test:testCheckMetaHashedV1_2BadMagicBadHash(bytes,bytes32) (runs: 5096, μ: 5633, ~: 5616) | ||
| LibMetaCheckMetaHashedV1_2Test:testCheckMetaHashedV1_2BadMagicGoodHash(bytes) (runs: 5096, μ: 5719, ~: 5694) | ||
| LibMetaCheckMetaHashedV1_2Test:testCheckMetaHashedV1_2GoodMagicBadHash(bytes,bytes32) (runs: 5096, μ: 5782, ~: 5771) | ||
| LibMetaCheckMetaHashedV1_2Test:testCheckMetaHashedV1_2GoodMagicBadHash(bytes,bytes32) (runs: 5096, μ: 5783, ~: 5771) | ||
| LibMetaCheckMetaHashedV1_2Test:testCheckMetaHashedV1_2Happy(bytes) (runs: 5096, μ: 1102, ~: 1095) | ||
| LibMetaCheckMetaUnhashedV1_2Test:testCheckMetaUnhashedV1_2Fuzz(bytes) (runs: 5096, μ: 5818, ~: 5797) | ||
| LibMetaIsRainMetaV1_2Test:testIsRainMetaV1_2Fuzz(bytes) (runs: 5096, μ: 1025, ~: 1020) | ||
| MetaBoardHashTest:testMetaboardHash(bytes) (runs: 5096, μ: 191156, ~: 191140) | ||
| MetaBoardTest:testEmitMeta(bytes32,bytes) (runs: 5096, μ: 202190, ~: 202079) | ||
| MetaBoardTest:testEmitMeta(bytes32,bytes) (runs: 5096, μ: 202188, ~: 202079) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,5 +4,7 @@ cache | |
| .vscode | ||
| .direnv/ | ||
|
|
||
| .env | ||
|
|
||
| # Rust | ||
| target | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,6 @@ | ||
| [submodule "lib/forge-std"] | ||
| path = lib/forge-std | ||
| url = https://github.com/foundry-rs/forge-std | ||
| [submodule "lib/rain.deploy"] | ||
| path = lib/rain.deploy | ||
| url = https://github.com/rainlanguage/rain.deploy | ||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -10,5 +10,21 @@ evm_version = "cancun" | |||||||||||||||||||||
| bytecode_hash = "none" | ||||||||||||||||||||||
| cbor_metadata = false | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| remappings = [ | ||||||||||||||||||||||
| "rain.deploy/=lib/rain.deploy/src/" | ||||||||||||||||||||||
| ] | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| [fuzz] | ||||||||||||||||||||||
| runs = 5096 | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| [rpc_endpoints] | ||||||||||||||||||||||
| arbitrum = "${CI_DEPLOY_ARBITRUM_RPC_URL}" | ||||||||||||||||||||||
| base = "${CI_DEPLOY_BASE_RPC_URL}" | ||||||||||||||||||||||
| flare = "${CI_DEPLOY_FLARE_RPC_URL}" | ||||||||||||||||||||||
| polygon = "${CI_DEPLOY_POLYGON_RPC_URL}" | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| [etherscan] | ||||||||||||||||||||||
| arbitrum = { key = "${CI_DEPLOY_ARBITRUM_ETHERSCAN_API_KEY}" } | ||||||||||||||||||||||
| base = { key = "${CI_DEPLOY_BASE_ETHERSCAN_API_KEY}" } | ||||||||||||||||||||||
| flare = { key = "${CI_DEPLOY_FLARE_ETHERSCAN_API_KEY}" } | ||||||||||||||||||||||
| polygon = { key = "${CI_DEPLOY_POLYGON_ETHERSCAN_API_KEY}" } | ||||||||||||||||||||||
|
Comment on lines
+26
to
+30
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🌐 Web query:
💡 Result: In Foundry, the For Flare, set the chain id and the explorer API URL explicitly: [etherscan]
flare = { key = "${ETHERSCAN_API_KEY}", chain = 14, url = "https://flare-explorer.flare.network/api" }
coston2 = { key = "${ETHERSCAN_API_KEY}", chain = 114, url = "https://coston2-explorer.flare.network/api" }Flare chain IDs: 14 (mainnet) and 114 (Coston2), and their explorer API bases are Then verify with: forge verify-contract --chain 14 <address> src/Your.sol:YourContract --verifier etherscanSources: [1], [2] 🌐 Web query:
💡 Result:
Citations:
🌐 Web query:
💡 Result: To integrate an “Etherscan-style” block-explorer API for Flare, use the Blockscout explorer instance for Flare and swap your Etherscan base URL to the Blockscout
Example (Etherscan → Flare/Blockscout)Etherscan Flare (Blockscout) This is the standard Blockscout migration approach: host changes; most parameters stay the same. [3] Where to find endpoint docsBlockscout instances typically expose live API documentation at If instead you meant Flare’s non-Etherscan “Flare API / API Portal” (managed at Sources: [1] [2] [3] [4] Flare requires explicit Foundry auto-resolves chain details for standard networks like Arbitrum, Base, and Polygon using only the Proposed fix-flare = { key = "${CI_DEPLOY_FLARE_ETHERSCAN_API_KEY}" }
+flare = { key = "${CI_DEPLOY_FLARE_ETHERSCAN_API_KEY}", chain = 14, url = "https://flare-explorer.flare.network/api" }📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| // SPDX-License-Identifier: LicenseRef-DCL-1.0 | ||
| // SPDX-FileCopyrightText: Copyright (c) 2020 Rain Open Source Software Ltd | ||
| pragma solidity ^0.8.25; | ||
|
|
||
| /// @title LibMetaBoardDeploy | ||
| /// A library containing the deployed address and code hash of the MetaBoard | ||
| /// contract when deployed with the rain standard zoltu deployer. This allows | ||
| /// idempotent deployments against precommitted addresses and hashes that can be | ||
| /// easily verified automatically in tests and scripts rather than relying on | ||
| /// registries or manual verification. | ||
| library LibMetaBoardDeploy { | ||
| /// The address of the `MetaBoard` contract when deployed with the rain | ||
| /// standard zoltu deployer. | ||
| address constant METABOARD_DEPLOYED_ADDRESS = address(0xfb8437AeFBB8031064E274527C5fc08e30Ac6928); | ||
|
|
||
| /// The code hash of the `MetaBoard` contract when deployed with the rain | ||
| /// standard zoltu deployer. This can be used to verify that the deployed | ||
| /// contract has the expected bytecode, which provides stronger guarantees | ||
| /// than just checking the address. | ||
| bytes32 constant METABOARD_DEPLOYED_CODEHASH = | ||
| bytes32(0x60e0735a3406074fd8f85adb2813d0d7c346337ea4bcc6f2ef4eb25077a4933c); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| // 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 {LibRainDeploy} from "rain.deploy/lib/LibRainDeploy.sol"; | ||
| import {LibMetaBoardDeploy} from "src/lib/deploy/LibMetaBoardDeploy.sol"; | ||
| import {MetaBoard} from "src/concrete/MetaBoard.sol"; | ||
|
|
||
| contract LibMetaBoardDeployTest is Test { | ||
| function testDeployAddress() external { | ||
| vm.createSelectFork(vm.envString("CI_FORK_ETH_RPC_URL")); | ||
|
|
||
| address deployedAddress = LibRainDeploy.deployZoltu(type(MetaBoard).creationCode); | ||
|
|
||
| assertEq(deployedAddress, LibMetaBoardDeploy.METABOARD_DEPLOYED_ADDRESS); | ||
| assertTrue(address(deployedAddress).code.length > 0, "Deployed address has no code"); | ||
|
|
||
| assertEq(address(deployedAddress).codehash, LibMetaBoardDeploy.METABOARD_DEPLOYED_CODEHASH); | ||
| } | ||
coderabbitai[bot] marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| function testExpectedCodeHash() external { | ||
| MetaBoard metaBoard = new MetaBoard(); | ||
|
|
||
| assertEq(address(metaBoard).codehash, LibMetaBoardDeploy.METABOARD_DEPLOYED_CODEHASH); | ||
| } | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# Check .gitmodules file to see the full context cat -n .gitmodulesRepository: rainlanguage/rain.metadata
Length of output: 313
🏁 Script executed:
Repository: rainlanguage/rain.metadata
Length of output: 128
🌐 Web query:
rain.deploy GitHub repository rainlanguage💡 Result:
rain.deployis not a GitHub repository under the rainlanguage org—it’s a command (rain deploy) in AWS’s CloudFormation CLI tool Rain, hosted here: aws-cloudformation/rain. [1][2]The rainlanguage GitHub organization (Rainlang / Rain Protocol ecosystem) is here, and its repos are separate/unrelated to AWS’s
rain deploytool. [3]🏁 Script executed:
Repository: rainlanguage/rain.metadata
Length of output: 487
🏁 Script executed:
Repository: rainlanguage/rain.metadata
Length of output: 179
🌐 Web query:
rainlanguage github organization repositories deploy💡 Result:
The RainLanguage GitHub organization is
rainlanguage(displayed as “rainlang” on GitHub). Its repositories are listed on the org page under the Repositories tab (currently ~125 public repos), including core projects likerain.orderbook,rain.interpreter, and others. [1]For deployment, the org has a dedicated repository
rainlanguage/rain.deploy, described as tooling to deploy Solidity code (Foundry + Nix) to production using the Zoltu deterministic deployment proxy, plus helpers to validate supported networks/dependencies and perform post-deploy bytecode integrity checks. [2]Sources: [1] [2]
🌐 Web query:
rainlanguage rain.deploy github💡 Result:
There isn’t a
rain.deployrepo/command under the rainlanguage / Rainlang GitHub org (that org is here). [1]What you’re likely looking for is AWS CloudFormation “Rain”, a CLI tool whose command is
rain deploy:aws-cloudformation/rain(this is whererain deploylives). [2]rain deploy(deploys a CloudFormation stack/changeset from a local template). [3]Quick install (Go):
[2]
🌐 Web query:
"rainlanguage/rain.deploy" repository github💡 Result:
There doesn’t appear to be a GitHub repository named
rainlanguage/rain.deployunder therainlanguageorganization (a search of the org page shows manyrain.*repos, but notrain.deploy). [1]If you meant the
rain deploycommand, that’s part of AWS’s Rain CLI for CloudFormation, inaws-cloudformation/rain(docs: “rain deploy”). [2], [3]Sources:
[1] (github.com)
[2] (github.com)
[3] (aws-cloudformation.github.io)
Citations:
🏁 Script executed:
Repository: rainlanguage/rain.metadata
Length of output: 195
🏁 Script executed:
Repository: rainlanguage/rain.metadata
Length of output: 109
The repository URL
https://github.com/rainlanguage/rain.deploydoes not exist and will prevent the project from being cloned or built.The submodule points to a non-existent repository under the rainlanguage organization. This will cause
git cloneandgit submodule update --init --recursiveto fail. Verify the correct repository URL and update the submodule path accordingly, as foundry.toml references this dependency directly (rain.deploy/=lib/rain.deploy/src/).🤖 Prompt for AI Agents