feat(network): add Injective (chainId 1776)#2058
Conversation
Core network setup only (bridges deferred to follow-up PRs): - config/networks.json: injective entry (blockscout, cancun/0.8.28) - foundry.toml: RPC endpoint + blockscout verifier Permit2 (no code on chain) and Gas.zip (N/A) intentionally omitted. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 23 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (6)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Generated via scriptMaster use case 10 (parseTargetStateGoogleSpreadsheet production injective) from the production target-state Google Sheet. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Test Coverage ReportLine Coverage: 90.22% (3343 / 3705 lines) |
…get state - networks.json / foundry.toml: verifier API is on blockscout-api.injective.network (separate subdomain), not the explorer UI domain — fixes contract verification. - networks.json: record deployed CREATE3Factory + Safe addresses. - _targetState.json: re-parsed after the production sheet was updated to current versions (ERC20Proxy 1.2.0, LiFiIntentEscrowFacet 1.1.2) so the new network gets current code and the Executor is pre-authorized at deploy. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Production deployment artifacts for the Injective core bring-up (stages 1-10): CREATE3Factory, Safe, LiFiDiamond, 12 core facets, and periphery (ERC20Proxy 1.2.0 with Executor pre-authorized, Executor, FeeForwarder, TokenWrapper), plus the whitelist sync recording FeeForwarder/TokenWrapper selector pairs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
FeeCollector is deprecated but was still listed in global.json corePeriphery, so healthCheck.ts flagged it "not deployed" on every new chain (and Tron core deploy would still deploy it). Removing it from the list; the standalone FeeCollector config block is left for a fuller deprecation pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@script/deploy/_targetState.json`:
- Around line 2529-2544: Remove GasZipFacet, GasZipPeriphery, and Permit2Proxy
from the target state because their configurations are intentionally omitted and
unavailable on Injective. Verify the deferred Intents scope and remove
LiFiIntentEscrowFacet as well unless it is explicitly intended to deploy
independently of its peripheral integrations.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 46494cc7-3436-4552-9114-a0e9355107fa
📒 Files selected for processing (7)
config/global.jsonconfig/networks.jsonconfig/whitelist.jsondeployments/injective.diamond.jsondeployments/injective.jsonfoundry.tomlscript/deploy/_targetState.json
💤 Files with no reviewable changes (1)
- config/global.json
| "GasZipFacet": "2.0.5", | ||
| "GenericSwapFacet": "1.0.0", | ||
| "GenericSwapFacetV3": "2.0.0", | ||
| "LiFiIntentEscrowFacet": "1.1.2", | ||
| "LiFiTimelockController": "1.0.1", | ||
| "OwnershipFacet": "1.0.0", | ||
| "PeripheryRegistryFacet": "1.0.0", | ||
| "WhitelistManagerFacet": "1.1.0", | ||
| "WithdrawFacet": "1.0.0", | ||
| "LiFiDiamond": "1.0.0", | ||
| "ERC20Proxy": "1.2.0", | ||
| "Executor": "2.1.0", | ||
| "FeeForwarder": "1.0.0", | ||
| "GasZipPeriphery": "1.0.2", | ||
| "TokenWrapper": "1.2.1", | ||
| "Permit2Proxy": "1.0.4" |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Remove omitted components from target state.
The PR summary states that Permit2 and Gas.zip configurations are intentionally omitted because Permit2 has no deployed code on Injective and Gas.zip is unavailable. However, GasZipFacet, GasZipPeriphery, and Permit2Proxy are included in this target state block. Leaving them here will likely cause the deployment pipeline to erroneously attempt to deploy or verify them.
Additionally, since the summary mentions that Intents are deferred, please verify if LiFiIntentEscrowFacet should also be removed from the target state or if the facet itself is still intended to be deployed without its full peripheral integrations.
♻️ Proposed fix
- "GasZipFacet": "2.0.5",
"GenericSwapFacet": "1.0.0",
"GenericSwapFacetV3": "2.0.0",
"LiFiIntentEscrowFacet": "1.1.2",
"LiFiTimelockController": "1.0.1",
"OwnershipFacet": "1.0.0",
"PeripheryRegistryFacet": "1.0.0",
"WhitelistManagerFacet": "1.1.0",
"WithdrawFacet": "1.0.0",
"LiFiDiamond": "1.0.0",
"ERC20Proxy": "1.2.0",
"Executor": "2.1.0",
"FeeForwarder": "1.0.0",
- "GasZipPeriphery": "1.0.2",
- "TokenWrapper": "1.2.1",
- "Permit2Proxy": "1.0.4"
+ "TokenWrapper": "1.2.1"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "GasZipFacet": "2.0.5", | |
| "GenericSwapFacet": "1.0.0", | |
| "GenericSwapFacetV3": "2.0.0", | |
| "LiFiIntentEscrowFacet": "1.1.2", | |
| "LiFiTimelockController": "1.0.1", | |
| "OwnershipFacet": "1.0.0", | |
| "PeripheryRegistryFacet": "1.0.0", | |
| "WhitelistManagerFacet": "1.1.0", | |
| "WithdrawFacet": "1.0.0", | |
| "LiFiDiamond": "1.0.0", | |
| "ERC20Proxy": "1.2.0", | |
| "Executor": "2.1.0", | |
| "FeeForwarder": "1.0.0", | |
| "GasZipPeriphery": "1.0.2", | |
| "TokenWrapper": "1.2.1", | |
| "Permit2Proxy": "1.0.4" | |
| "GenericSwapFacet": "1.0.0", | |
| "GenericSwapFacetV3": "2.0.0", | |
| "LiFiIntentEscrowFacet": "1.1.2", | |
| "LiFiTimelockController": "1.0.1", | |
| "OwnershipFacet": "1.0.0", | |
| "PeripheryRegistryFacet": "1.0.0", | |
| "WhitelistManagerFacet": "1.1.0", | |
| "WithdrawFacet": "1.0.0", | |
| "LiFiDiamond": "1.0.0", | |
| "ERC20Proxy": "1.2.0", | |
| "Executor": "2.1.0", | |
| "FeeForwarder": "1.0.0", | |
| "TokenWrapper": "1.2.1" |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@script/deploy/_targetState.json` around lines 2529 - 2544, Remove
GasZipFacet, GasZipPeriphery, and Permit2Proxy from the target state because
their configurations are intentionally omitted and unavailable on Injective.
Verify the deferred Intents scope and remove LiFiIntentEscrowFacet as well
unless it is explicitly intended to deploy independently of its peripheral
integrations.
Local deployment-log cache was stale vs the MongoDB master log; synced it so the committed logs reflect all 19 deployed+verified contracts, including OutputValidator (0x1299f7F941745377a2091AF51557e8De04B96B10) — deployed via corePeriphery and registered in the diamond, but missing from the stale local cache the stage-11 health check had read. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Re-ran the whitelist sync after OutputValidator was confirmed deployed+registered; closes the address-consistency whitelist coverage gap (registered periphery must be covered in config/whitelist.json). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
OutputValidator (corePeriphery) was missing from the sheet; added it, re-parsed the target state so the health check tracks it as expected. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add Injective (chainId 1776) to config/permit2Proxy.json (canonical Permit2 0x000000000022D473030F116dDEE9F6B43aC78BA3) and deploy Permit2Proxy v1.0.4 to the Injective LiFiDiamond, registered via diamondUpdatePeriphery. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…targateV2) Configure Stargate V2 on Injective (chainId 1776) and deploy the facet + receiver: - config/stargateV2.json: endpointV2 0x6F475642a6e85809B1c36Fa62763669b1b48DD5B (LayerZero EndpointV2, from TokenMessaging.endpoint()) and tokenMessaging 0xAf368c91793CB22739386DFCbBb2F1A9e4bCBeBf (Stargate official injectiveevm-mainnet) - StargateFacetV2 v1.0.1 -> 0x2bE73b7851482428F28c8D0206667dFC74312400 (diamondCut) - ReceiverStargateV2 v1.1.0 -> 0x360cAEBad9699A334DFE5465eaDB8D0730a9a3c6 (diamondUpdatePeriphery) - add both to injective production target state Enables Stargate ETH/WETH routes (Stargate deploys StargateOFTETH on Injective). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Which Linear task belongs to this PR?
EXSC-630 — https://linear.app/lifi-linear/issue/EXSC-630/add-injective-chainid-1776-network-production-deploy
Why did I implement it this way?
Adds the Injective network (chainId
1776) — core network config only; bridgeintegrations (Gas.zip, Polymer, Glacis, Intents) are intentionally deferred to follow-up PRs.
Source: chain-team Tally form submission. Every contract address was validated on-chain with
cast codeagainst the public RPC (https://sentry.evm-rpc.injective.network, chainId confirmed 1776).config/networks.json— newinjectiveentry (inserted alphabetically), mirroring theinkprecedent (also blockscout, also Cancun-capable):nativeCurrencyINJ,nativeAddress0x0…0(form's "inj" → repo native-gas convention)wrappedNativeAddress0x0000000088827d2d103ee2d9a6b781773ae03ffb(WINJ) — ✅ code presentmulticallAddress0xcA11…CA11— ✅ code presentverificationTypeblockscout, explorerhttps://blockscout.injective.network(chain is not on the Etherscan V2 chainlist → blockscout API + verifier)
deployedWithEvmVersioncancun/deployedWithSolcVersion0.8.28— the chain's statedmax solc is 0.8.28, so we cap there rather than the repo default 0.8.29 (which would exceed it)
safeAddress""andcreate3Factory""— set once deployed on-chain; the form provided aSafe transaction-service URL, not our SC multisig contract address
gasZipChainId0— Gas.zip not yet available on Injectivefoundry.toml—injectiveRPC endpoint + blockscout verifier entry (chain1776).Intentional omissions (per the add-network rules, validated on-chain):
0x0000…78BA3has no code on Injective → not added toconfig/permit2Proxy.json(deployment will skip Permit2Proxy for this network).
config/global.jsonuntouched.config/gaszip.json.config/global.jsonuntouched.Deploy-time prerequisites (tracked separately, not part of this config PR):
ETH_NODE_URI_INJECTIVEmust be added to MongoDB (bun add-network-rpc) thenfetch-rpcs.scriptMaster.shuse case 10.Checklist before requesting a review
Checklist for reviewer (DO NOT DEPLOY and contracts BEFORE CHECKING THIS!!!)