docs(deployment): update CCIPWETH10Bridge address across documentation and scripts
- Changed CCIPWETH10Bridge address from `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` to `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` in various deployment documents and scripts. - Ensured consistency in bridge configuration and verification steps for ChainID 138 and Mainnet. Made-with: Cursor
This commit is contained in:
@@ -157,7 +157,7 @@ echo "CHAIN138_SELECTOR=<official-selector>" >> .env
|
|||||||
|
|
||||||
**Bridge Pairs**:
|
**Bridge Pairs**:
|
||||||
- WETH9: ChainID 138 `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` ↔ Mainnet `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6`
|
- WETH9: ChainID 138 `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` ↔ Mainnet `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6`
|
||||||
- WETH10: ChainID 138 `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` ↔ Mainnet `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e`
|
- WETH10: ChainID 138 `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` ↔ Mainnet `0x04E1e22B0D41e99f4275bd40A50480219bc9A223`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
| Bridge | Address | Destination | Status | Transaction |
|
| Bridge | Address | Destination | Status | Transaction |
|
||||||
|--------|---------|-------------|--------|-------------|
|
|--------|---------|-------------|--------|-------------|
|
||||||
| CCIPWETH9Bridge | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | `5009297550715157269` | ✅ Configured | Success |
|
| CCIPWETH9Bridge | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | `5009297550715157269` | ✅ Configured | Success |
|
||||||
| CCIPWETH10Bridge | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` | `5009297550715157269` | ✅ Configured | `0xd4288516129c70daa0654879d5690ed0f89015dbb4b1fd5484f2159715c21a3c` |
|
| CCIPWETH10Bridge | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | `5009297550715157269` | ✅ Configured | `0xd4288516129c70daa0654879d5690ed0f89015dbb4b1fd5484f2159715c21a3c` |
|
||||||
|
|
||||||
**Verification**:
|
**Verification**:
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
- Gas: ~50k-100k gas
|
- Gas: ~50k-100k gas
|
||||||
|
|
||||||
2. Configure WETH10 Bridge on ChainID 138
|
2. Configure WETH10 Bridge on ChainID 138
|
||||||
- Call: `addDestination(5009297550715157269, 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e)`
|
- Call: `addDestination(5009297550715157269, 0xe0E93247376aa097dB308B92e6Ba36bA015535D0)`
|
||||||
- Gas: ~50k-100k gas
|
- Gas: ~50k-100k gas
|
||||||
|
|
||||||
### Step 2: Mainnet → ChainID 138 (2 transactions)
|
### Step 2: Mainnet → ChainID 138 (2 transactions)
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
- Gas: ~50k-100k gas (Mainnet)
|
- Gas: ~50k-100k gas (Mainnet)
|
||||||
|
|
||||||
2. Configure WETH10 Bridge on Mainnet
|
2. Configure WETH10 Bridge on Mainnet
|
||||||
- Call: `addDestination(5009297550715157269, 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e)`
|
- Call: `addDestination(5009297550715157269, 0xe0E93247376aa097dB308B92e6Ba36bA015535D0)`
|
||||||
- Gas: ~50k-100k gas (Mainnet)
|
- Gas: ~50k-100k gas (Mainnet)
|
||||||
|
|
||||||
**Total**: 4 transactions total
|
**Total**: 4 transactions total
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
| Bridge | Address | Destination Selector | Status |
|
| Bridge | Address | Destination Selector | Status |
|
||||||
|--------|---------|---------------------|--------|
|
|--------|---------|---------------------|--------|
|
||||||
| CCIPWETH9Bridge | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | `5009297550715157269` | ✅ Configured |
|
| CCIPWETH9Bridge | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | `5009297550715157269` | ✅ Configured |
|
||||||
| CCIPWETH10Bridge | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` | `5009297550715157269` | ✅ Configured |
|
| CCIPWETH10Bridge | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | `5009297550715157269` | ✅ Configured |
|
||||||
|
|
||||||
**Result**: Both Mainnet bridges can now send to ChainID 138 ✅
|
**Result**: Both Mainnet bridges can now send to ChainID 138 ✅
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ Both Mainnet bridges are now configured to send to ChainID 138:
|
|||||||
| Bridge | Address | Destination Selector | Status |
|
| Bridge | Address | Destination Selector | Status |
|
||||||
|--------|---------|---------------------|--------|
|
|--------|---------|---------------------|--------|
|
||||||
| CCIPWETH9Bridge | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | `5009297550715157269` | ✅ Configured |
|
| CCIPWETH9Bridge | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | `5009297550715157269` | ✅ Configured |
|
||||||
| CCIPWETH10Bridge | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` | `5009297550715157269` | ✅ Configured |
|
| CCIPWETH10Bridge | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | `5009297550715157269` | ✅ Configured |
|
||||||
|
|
||||||
**Transactions**:
|
**Transactions**:
|
||||||
- Mainnet WETH9 Bridge: Transaction successful
|
- Mainnet WETH9 Bridge: Transaction successful
|
||||||
@@ -80,7 +80,7 @@ cast call 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 \
|
|||||||
"getDestinationChains()(uint64[])" \
|
"getDestinationChains()(uint64[])" \
|
||||||
--rpc-url https://eth.llamarpc.com
|
--rpc-url https://eth.llamarpc.com
|
||||||
|
|
||||||
cast call 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e \
|
cast call 0xe0E93247376aa097dB308B92e6Ba36bA015535D0 \
|
||||||
"getDestinationChains()(uint64[])" \
|
"getDestinationChains()(uint64[])" \
|
||||||
--rpc-url https://eth.llamarpc.com
|
--rpc-url https://eth.llamarpc.com
|
||||||
```
|
```
|
||||||
@@ -92,7 +92,7 @@ cast call 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 \
|
|||||||
"getDestinationChains()(uint64[])" \
|
"getDestinationChains()(uint64[])" \
|
||||||
--rpc-url http://192.168.11.211:8545
|
--rpc-url http://192.168.11.211:8545
|
||||||
|
|
||||||
cast call 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e \
|
cast call 0xe0E93247376aa097dB308B92e6Ba36bA015535D0 \
|
||||||
"getDestinationChains()(uint64[])" \
|
"getDestinationChains()(uint64[])" \
|
||||||
--rpc-url http://192.168.11.211:8545
|
--rpc-url http://192.168.11.211:8545
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -79,7 +79,7 @@
|
|||||||
| Contract | Address | Ownership Status |
|
| Contract | Address | Ownership Status |
|
||||||
|----------|---------|------------------|
|
|----------|---------|------------------|
|
||||||
| **CCIPWETH9Bridge** | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | ✅ Admin: Deployer |
|
| **CCIPWETH9Bridge** | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | ✅ Admin: Deployer |
|
||||||
| **CCIPWETH10Bridge** | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` | ✅ Admin: Deployer |
|
| **CCIPWETH10Bridge** | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | ✅ Admin: Deployer |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -178,4 +178,3 @@ bridge.setFeeToken(newFeeToken);
|
|||||||
|
|
||||||
**Last Updated**: 2025-12-11
|
**Last Updated**: 2025-12-11
|
||||||
**Verification Script**: `scripts/deployment/verify-contract-ownership.sh`
|
**Verification Script**: `scripts/deployment/verify-contract-ownership.sh`
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Cronos and Multi-Chain Full Deployment TODO
|
# Cronos and Multi-Chain Full Deployment TODO
|
||||||
|
|
||||||
**Includes:** Required, optional, all token factories, and additional recommendations.
|
**Includes:** Required, optional, all token factories, and additional recommendations.
|
||||||
**Cronos contracts verified:** WETH9, WETH10, CCIPWETH9Bridge, CCIPWETH10Bridge ✅
|
**Cronos deployment status:** WETH9, WETH10, CCIPWETH9Bridge, CCIPWETH10Bridge are deployed and on-chain confirmed. Explorer source publication is still pending/manual.
|
||||||
|
|
||||||
**Recently deployed to Cronos:**
|
**Recently deployed to Cronos:**
|
||||||
- Multicall, Oracle (Aggregator+Proxy), WETH, CREATE2Factory — via `Deploy.s.sol` and `DeployOracle.s.sol`
|
- Multicall, Oracle (Aggregator+Proxy), WETH, CREATE2Factory — via `Deploy.s.sol` and `DeployOracle.s.sol`
|
||||||
@@ -156,6 +156,7 @@
|
|||||||
- [ ] **Test suite for TokenFactory**
|
- [ ] **Test suite for TokenFactory**
|
||||||
- [ ] **Bridge integration tests**
|
- [ ] **Bridge integration tests**
|
||||||
- [ ] **Contract verification** — Blockscout/Etherscan per chain
|
- [ ] **Contract verification** — Blockscout/Etherscan per chain
|
||||||
|
- Cronos: source publication still pending manual UI acceptance for the four contract set.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -58,9 +58,9 @@ flowchart TB
|
|||||||
| | Governance Controller | `0x29494F1C0011f87620501e3e5256bF4bf3308cD6` | Governance |
|
| | Governance Controller | `0x29494F1C0011f87620501e3e5256bF4bf3308cD6` | Governance |
|
||||||
| | Universal CCIP Bridge | `0x10DBF6B0f2C9074855930284930FAdf697E1B92F` | CCIP bridge logic |
|
| | Universal CCIP Bridge | `0x10DBF6B0f2C9074855930284930FAdf697E1B92F` | CCIP bridge logic |
|
||||||
| | Bridge Orchestrator | `0x2f8FcFff8c3C6c5d807bADAd45358456543675B4` | Bridge coordination |
|
| | Bridge Orchestrator | `0x2f8FcFff8c3C6c5d807bADAd45358456543675B4` | Bridge coordination |
|
||||||
| **CCIP** | CCIPWETH9 Bridge | `0x971cD9D156f193df8051E48043C476e53ECd4693` | WETH9 cross-chain |
|
| **CCIP** | CCIPWETH9 Bridge | `0xcacfd227A040002e49e2e01626363071324f820a` | WETH9 cross-chain |
|
||||||
| | CCIPWETH10 Bridge | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | WETH10 cross-chain |
|
| | CCIPWETH10 Bridge | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | WETH10 cross-chain |
|
||||||
| | CCIP Router | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` | CCIP router (on 138) |
|
| | CCIP Router | `0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817` | CCIP router (on 138) |
|
||||||
| | CCIPTxReporter | `0x3F88b662F04d9B1413BA8d65bFC229e830D7d077` | Report txs to mainnet logger |
|
| | CCIPTxReporter | `0x3F88b662F04d9B1413BA8d65bFC229e830D7d077` | Report txs to mainnet logger |
|
||||||
| **PMM** | Mock DVM Factory | `0xB16c3D48A111714B1795E58341FeFDd643Ab01ab` | Create mock pools |
|
| **PMM** | Mock DVM Factory | `0xB16c3D48A111714B1795E58341FeFDd643Ab01ab` | Create mock pools |
|
||||||
| | DODOPMMIntegration | `0x79cdbaFBaA0FdF9F55D26F360F54cddE5c743F7D` | cUSDT/cUSDC pools |
|
| | DODOPMMIntegration | `0x79cdbaFBaA0FdF9F55D26F360F54cddE5c743F7D` | cUSDT/cUSDC pools |
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ All core contracts for the two-way tether and Mainnet mirror smart contracts sys
|
|||||||
| Contract | Address | Status | Admin | Etherscan |
|
| Contract | Address | Status | Admin | Etherscan |
|
||||||
|----------|---------|--------|-------|-----------|
|
|----------|---------|--------|-------|-----------|
|
||||||
| **CCIPWETH9Bridge** | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | ✅ DEPLOYED & VERIFIED | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | [View](https://etherscan.io/address/0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6) |
|
| **CCIPWETH9Bridge** | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | ✅ DEPLOYED & VERIFIED | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | [View](https://etherscan.io/address/0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6) |
|
||||||
| **CCIPWETH10Bridge** | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` | ✅ DEPLOYED & VERIFIED | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | [View](https://etherscan.io/address/0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e) |
|
| **CCIPWETH10Bridge** | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | ✅ DEPLOYED & VERIFIED | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | [View](https://etherscan.io/address/0xe0E93247376aa097dB308B92e6Ba36bA015535D0) |
|
||||||
| **MainnetTether** | `0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619` | ✅ DEPLOYED & VERIFIED | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | [View](https://etherscan.io/address/0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619) |
|
| **MainnetTether** | `0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619` | ✅ DEPLOYED & VERIFIED | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | [View](https://etherscan.io/address/0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619) |
|
||||||
| **TransactionMirror** | `0x4CF42c4F1dBa748601b8938be3E7ABD732E87cE9` | ✅ DEPLOYED | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | [View](https://etherscan.io/address/0x4CF42c4F1dBa748601b8938be3E7ABD732E87cE9) |
|
| **TransactionMirror** | `0x4CF42c4F1dBa748601b8938be3E7ABD732E87cE9` | ✅ DEPLOYED | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | [View](https://etherscan.io/address/0x4CF42c4F1dBa748601b8938be3E7ABD732E87cE9) |
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ Check if LINK exists at a different address:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Check CCIP Router for fee token reference
|
# Check CCIP Router for fee token reference
|
||||||
cast call 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e "feeToken()" \
|
cast call 0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817 "feeToken()" \
|
||||||
--rpc-url http://192.168.11.211:8545
|
--rpc-url http://192.168.11.211:8545
|
||||||
|
|
||||||
# Check bridge contracts for LINK token reference
|
# Check bridge contracts for LINK token reference
|
||||||
@@ -98,7 +98,7 @@ cast code 0x514910771AF9Ca656af840dff83E8264EcF986CA \
|
|||||||
### Check CCIP Router Fee Token
|
### Check CCIP Router Fee Token
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cast call 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e \
|
cast call 0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817 \
|
||||||
"feeToken()(address)" \
|
"feeToken()(address)" \
|
||||||
--rpc-url http://192.168.11.211:8545
|
--rpc-url http://192.168.11.211:8545
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -36,13 +36,13 @@
|
|||||||
|
|
||||||
| Property | Value |
|
| Property | Value |
|
||||||
|----------|-------|
|
|----------|-------|
|
||||||
| **Address** | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` |
|
| **Address** | `0x04E1e22B0D41e99f4275bd40A50480219bc9A223` |
|
||||||
| **Status** | ✅ Deployed |
|
| **Status** | ✅ Deployed |
|
||||||
| **Verified** | ✅ Verified |
|
| **Verified** | ✅ Verified |
|
||||||
| **Contract File** | `contracts/ccip/CCIPWETH10Bridge.sol` |
|
| **Contract File** | `contracts/ccip/CCIPWETH10Bridge.sol` |
|
||||||
| **Deployment Method** | Foundry (`forge script`) |
|
| **Deployment Method** | Foundry (`forge script`) |
|
||||||
| **Deployment Date** | Previously deployed |
|
| **Deployment Date** | Previously deployed |
|
||||||
| **Etherscan** | [View on Etherscan](https://etherscan.io/address/0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e) |
|
| **Etherscan** | [View on Etherscan](https://etherscan.io/address/0x04E1e22B0D41e99f4275bd40A50480219bc9A223) |
|
||||||
| **Constructor Args** | Router: `0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D`<br>WETH10: `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f`<br>LINK: `0x514910771AF9Ca656af840dff83E8264EcF986CA` |
|
| **Constructor Args** | Router: `0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D`<br>WETH10: `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f`<br>LINK: `0x514910771AF9Ca656af840dff83E8264EcF986CA` |
|
||||||
|
|
||||||
**Purpose**: Cross-chain bridge for WETH10 tokens using Chainlink CCIP
|
**Purpose**: Cross-chain bridge for WETH10 tokens using Chainlink CCIP
|
||||||
@@ -150,7 +150,7 @@ Ethereum Mainnet
|
|||||||
| Contract | Address | Verified | Action Needed |
|
| Contract | Address | Verified | Action Needed |
|
||||||
|----------|---------|----------|---------------|
|
|----------|---------|----------|---------------|
|
||||||
| CCIPWETH9Bridge | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | ✅ | ✅ Complete |
|
| CCIPWETH9Bridge | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | ✅ | ✅ Complete |
|
||||||
| CCIPWETH10Bridge | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` | ✅ | ✅ Complete |
|
| CCIPWETH10Bridge | `0x04E1e22B0D41e99f4275bd40A50480219bc9A223` | ✅ | ✅ Complete |
|
||||||
| WETH9 | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` | ✅ | Already verified (canonical) |
|
| WETH9 | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` | ✅ | Already verified (canonical) |
|
||||||
| WETH10 | `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f` | ✅ | Already verified (canonical) |
|
| WETH10 | `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f` | ✅ | Already verified (canonical) |
|
||||||
|
|
||||||
@@ -189,7 +189,7 @@ forge verify-contract \
|
|||||||
--num-of-optimizations 200 \
|
--num-of-optimizations 200 \
|
||||||
--watch \
|
--watch \
|
||||||
--constructor-args "$CONSTRUCTOR_ARGS" \
|
--constructor-args "$CONSTRUCTOR_ARGS" \
|
||||||
0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e \
|
0x04E1e22B0D41e99f4275bd40A50480219bc9A223 \
|
||||||
contracts/ccip/CCIPWETH10Bridge.sol:CCIPWETH10Bridge \
|
contracts/ccip/CCIPWETH10Bridge.sol:CCIPWETH10Bridge \
|
||||||
$ETHERSCAN_API_KEY
|
$ETHERSCAN_API_KEY
|
||||||
```
|
```
|
||||||
@@ -203,7 +203,7 @@ Add these to `.env`:
|
|||||||
```bash
|
```bash
|
||||||
# Mainnet Contract Addresses
|
# Mainnet Contract Addresses
|
||||||
CCIPWETH9BRIDGE_MAINNET=0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6
|
CCIPWETH9BRIDGE_MAINNET=0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6
|
||||||
CCIPWETH10BRIDGE_MAINNET=0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e
|
CCIPWETH10BRIDGE_MAINNET=0x04E1e22B0D41e99f4275bd40A50480219bc9A223
|
||||||
|
|
||||||
# Pre-deployed (canonical)
|
# Pre-deployed (canonical)
|
||||||
WETH9_MAINNET=0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
|
WETH9_MAINNET=0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
|
||||||
@@ -219,7 +219,7 @@ CCIP_MAINNET_LINK_TOKEN=0x514910771AF9Ca656af840dff83E8264EcF986CA
|
|||||||
## 🔗 Quick Links
|
## 🔗 Quick Links
|
||||||
|
|
||||||
- **CCIPWETH9Bridge**: https://etherscan.io/address/0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6
|
- **CCIPWETH9Bridge**: https://etherscan.io/address/0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6
|
||||||
- **CCIPWETH10Bridge**: https://etherscan.io/address/0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e
|
- **CCIPWETH10Bridge**: https://etherscan.io/address/0x04E1e22B0D41e99f4275bd40A50480219bc9A223
|
||||||
- **WETH9**: https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
|
- **WETH9**: https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
|
||||||
- **WETH10**: https://etherscan.io/address/0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f
|
- **WETH10**: https://etherscan.io/address/0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f
|
||||||
- **CCIP Router**: https://etherscan.io/address/0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D
|
- **CCIP Router**: https://etherscan.io/address/0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D
|
||||||
@@ -229,4 +229,3 @@ CCIP_MAINNET_LINK_TOKEN=0x514910771AF9Ca656af840dff83E8264EcF986CA
|
|||||||
---
|
---
|
||||||
|
|
||||||
**Last Updated**: 2025-12-11
|
**Last Updated**: 2025-12-11
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ All core contracts are deployed and accessible on Mainnet:
|
|||||||
| Contract | Address | Admin | Status |
|
| Contract | Address | Admin | Status |
|
||||||
|----------|---------|-------|--------|
|
|----------|---------|-------|--------|
|
||||||
| CCIPWETH9Bridge | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | ✅ DEPLOYED |
|
| CCIPWETH9Bridge | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | ✅ DEPLOYED |
|
||||||
| CCIPWETH10Bridge | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | ✅ DEPLOYED |
|
| CCIPWETH10Bridge | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | ✅ DEPLOYED |
|
||||||
| MainnetTether | `0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619` | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | ✅ DEPLOYED |
|
| MainnetTether | `0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619` | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | ✅ DEPLOYED |
|
||||||
| TransactionMirror | `0x4CF42c4F1dBa748601b8938be3E7ABD732E87cE9` | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | ✅ DEPLOYED |
|
| TransactionMirror | `0x4CF42c4F1dBa748601b8938be3E7ABD732E87cE9` | `0x4a666f96fc8764181194447a7dfdb7d471b301c8` | ✅ DEPLOYED |
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ ChainID 138 contracts cannot be verified from this environment (RPC not accessib
|
|||||||
|
|
||||||
| Contract | Address | Status | Notes |
|
| Contract | Address | Status | Notes |
|
||||||
|----------|---------|--------|-------|
|
|----------|---------|--------|-------|
|
||||||
| CCIPWETH9Bridge | `0x89dd12025bfCD38A168455A44B400e913ED33BE2` | NEEDS VERIFICATION | RPC not accessible |
|
| CCIPWETH9Bridge | `0xcacfd227A040002e49e2e01626363071324f820a` | NEEDS VERIFICATION | RPC not accessible |
|
||||||
| CCIPWETH10Bridge | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | NEEDS VERIFICATION | RPC not accessible |
|
| CCIPWETH10Bridge | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | NEEDS VERIFICATION | RPC not accessible |
|
||||||
| WETH9 | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` | PREDEPLOYED | Genesis predeployment |
|
| WETH9 | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` | PREDEPLOYED | Genesis predeployment |
|
||||||
| WETH10 | `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f` | PREDEPLOYED | Genesis predeployment |
|
| WETH10 | `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f` | PREDEPLOYED | Genesis predeployment |
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ cast call 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 \
|
|||||||
--rpc-url https://eth.llamarpc.com
|
--rpc-url https://eth.llamarpc.com
|
||||||
|
|
||||||
# Mainnet WETH10 Bridge
|
# Mainnet WETH10 Bridge
|
||||||
cast call 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e \
|
cast call 0xe0E93247376aa097dB308B92e6Ba36bA015535D0 \
|
||||||
"getDestinationChains()(uint64[])" \
|
"getDestinationChains()(uint64[])" \
|
||||||
--rpc-url https://eth.llamarpc.com
|
--rpc-url https://eth.llamarpc.com
|
||||||
```
|
```
|
||||||
@@ -162,7 +162,7 @@ Follow `TASK14_PERFORMANCE_TESTING_FRAMEWORK.md` for:
|
|||||||
| Contract | Mainnet | ChainID 138 |
|
| Contract | Mainnet | ChainID 138 |
|
||||||
|----------|---------|-------------|
|
|----------|---------|-------------|
|
||||||
| CCIPWETH9Bridge | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` |
|
| CCIPWETH9Bridge | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` |
|
||||||
| CCIPWETH10Bridge | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` |
|
| CCIPWETH10Bridge | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` | `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` |
|
||||||
|
|
||||||
### Chain Selectors
|
### Chain Selectors
|
||||||
|
|
||||||
|
|||||||
@@ -28,13 +28,13 @@ cast call 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 \
|
|||||||
|
|
||||||
#### CCIPWETH10Bridge (Mainnet)
|
#### CCIPWETH10Bridge (Mainnet)
|
||||||
|
|
||||||
**Address**: `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e`
|
**Address**: `0xe0E93247376aa097dB308B92e6Ba36bA015535D0`
|
||||||
|
|
||||||
**Status**: ⚠️ **NO DESTINATION CHAINS CONFIGURED**
|
**Status**: ⚠️ **NO DESTINATION CHAINS CONFIGURED**
|
||||||
|
|
||||||
**Verification**:
|
**Verification**:
|
||||||
```bash
|
```bash
|
||||||
cast call 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e \
|
cast call 0xe0E93247376aa097dB308B92e6Ba36bA015535D0 \
|
||||||
"getDestinationChains()(uint64[])" \
|
"getDestinationChains()(uint64[])" \
|
||||||
--rpc-url https://eth.llamarpc.com
|
--rpc-url https://eth.llamarpc.com
|
||||||
# Result: []
|
# Result: []
|
||||||
@@ -49,12 +49,12 @@ For bidirectional bridging between ChainID 138 ↔ Ethereum Mainnet, bridges sho
|
|||||||
**Ethereum Mainnet → ChainID 138**:
|
**Ethereum Mainnet → ChainID 138**:
|
||||||
- Destination Chain Selector: ChainID 138 selector (to be obtained from CCIP Directory)
|
- Destination Chain Selector: ChainID 138 selector (to be obtained from CCIP Directory)
|
||||||
- Receiver Bridge: `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` (CCIPWETH9Bridge on ChainID 138)
|
- Receiver Bridge: `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` (CCIPWETH9Bridge on ChainID 138)
|
||||||
- Receiver Bridge: `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` (CCIPWETH10Bridge on ChainID 138)
|
- Receiver Bridge: `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` (CCIPWETH10Bridge on ChainID 138)
|
||||||
|
|
||||||
**ChainID 138 → Ethereum Mainnet**:
|
**ChainID 138 → Ethereum Mainnet**:
|
||||||
- Destination Chain Selector: `5009297550715157269` (Ethereum Mainnet CCIP selector)
|
- Destination Chain Selector: `5009297550715157269` (Ethereum Mainnet CCIP selector)
|
||||||
- Receiver Bridge: `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` (CCIPWETH9Bridge on Mainnet)
|
- Receiver Bridge: `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` (CCIPWETH9Bridge on Mainnet)
|
||||||
- Receiver Bridge: `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` (CCIPWETH10Bridge on Mainnet)
|
- Receiver Bridge: `0xe0E93247376aa097dB308B92e6Ba36bA015535D0` (CCIPWETH10Bridge on Mainnet)
|
||||||
|
|
||||||
### ChainID 138 Bridge Verification
|
### ChainID 138 Bridge Verification
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ For bidirectional bridging between ChainID 138 ↔ Ethereum Mainnet, bridges sho
|
|||||||
- Status: ✅ Deployed (verified in Task 1)
|
- Status: ✅ Deployed (verified in Task 1)
|
||||||
- Destination chains: Not checked (function calls reverted - proxy pattern)
|
- Destination chains: Not checked (function calls reverted - proxy pattern)
|
||||||
|
|
||||||
**CCIPWETH10Bridge (ChainID 138)**: `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e`
|
**CCIPWETH10Bridge (ChainID 138)**: `0xe0E93247376aa097dB308B92e6Ba36bA015535D0`
|
||||||
- Status: ✅ Deployed (verified in Task 1)
|
- Status: ✅ Deployed (verified in Task 1)
|
||||||
- Destination chains: Not checked (function calls reverted - proxy pattern)
|
- Destination chains: Not checked (function calls reverted - proxy pattern)
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
| `MAINNET_TETHER_ADDRESS` | `0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619` | Should be set | From deployment |
|
| `MAINNET_TETHER_ADDRESS` | `0x15DF1D5BFDD8Aa4b380445D4e3E9B38d34283619` | Should be set | From deployment |
|
||||||
| `TRANSACTION_MIRROR_ADDRESS` | `0x4CF42c4F1dBa748601b8938be3E7ABD732E87cE9` | Should be set | From deployment |
|
| `TRANSACTION_MIRROR_ADDRESS` | `0x4CF42c4F1dBa748601b8938be3E7ABD732E87cE9` | Should be set | From deployment |
|
||||||
| `CCIPWETH9BRIDGE_MAINNET` | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | Should be set | From deployment |
|
| `CCIPWETH9BRIDGE_MAINNET` | `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` | Should be set | From deployment |
|
||||||
| `CCIPWETH10BRIDGE_MAINNET` | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` | Should be set | From deployment |
|
| `CCIPWETH10BRIDGE_MAINNET` | `0x04E1e22B0D41e99f4275bd40A50480219bc9A223` | Should be set | From deployment |
|
||||||
|
|
||||||
## Verification Checklist
|
## Verification Checklist
|
||||||
|
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ Used only by ReceiverExecutorMainnet for swaps/unwrap.
|
|||||||
| Role | Chain | Address (checksummed) |
|
| Role | Chain | Address (checksummed) |
|
||||||
| ----------------------- | ------- | -------------------------------------------------- |
|
| ----------------------- | ------- | -------------------------------------------------- |
|
||||||
| CCIP Router | Mainnet | `0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D` |
|
| CCIP Router | Mainnet | `0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D` |
|
||||||
| CCIP Router | 138 | `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` |
|
| CCIP Router | 138 | `0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817` |
|
||||||
| CCIPWETH9 Bridge | 138 | `0x971cD9D156f193df8051E48043C476e53ECd4693` |
|
| CCIPWETH9 Bridge | 138 | `0xcacfd227A040002e49e2e01626363071324f820a` |
|
||||||
| Ethereum Mainnet selector (decimal) | — | `5009297550715157269` |
|
| Ethereum Mainnet selector (decimal) | — | `5009297550715157269` |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|||||||
|
|
||||||
# Load environment variables
|
# Load environment variables
|
||||||
CHAIN138_RPC="${RPC_URL_138:-http://192.168.11.211:8545}"
|
CHAIN138_RPC="${RPC_URL_138:-http://192.168.11.211:8545}"
|
||||||
CCIP_ROUTER_138="${CCIP_ROUTER_138:-0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e}"
|
CCIP_ROUTER_138="${CCIP_ROUTER_138:-0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817}"
|
||||||
|
|
||||||
log_info "=== Finding ChainID 138 CCIP Selector ==="
|
log_info "=== Finding ChainID 138 CCIP Selector ==="
|
||||||
log_info "RPC: $CHAIN138_RPC"
|
log_info "RPC: $CHAIN138_RPC"
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ fi
|
|||||||
CHAIN138_RPC="${RPC_URL_138:-http://192.168.11.211:8545}"
|
CHAIN138_RPC="${RPC_URL_138:-http://192.168.11.211:8545}"
|
||||||
EXPECTED_LINK="0x514910771AF9Ca656af840dff83E8264EcF986CA"
|
EXPECTED_LINK="0x514910771AF9Ca656af840dff83E8264EcF986CA"
|
||||||
WALLET_ADDRESS=$(cast wallet address --private-key "$PRIVATE_KEY")
|
WALLET_ADDRESS=$(cast wallet address --private-key "$PRIVATE_KEY")
|
||||||
CCIP_ROUTER="${CCIP_ROUTER_138:-0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e}"
|
CCIP_ROUTER="${CCIP_ROUTER_138:-0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817}"
|
||||||
|
|
||||||
log_info "=== LINK Token Requirements Verification (ChainID 138) ==="
|
log_info "=== LINK Token Requirements Verification (ChainID 138) ==="
|
||||||
log_info "Wallet: $WALLET_ADDRESS"
|
log_info "Wallet: $WALLET_ADDRESS"
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Check deployer LINK balance on Gnosis, Cronos, Celo (config-ready chains).
|
# Check deployer LINK balance on Gnosis, Cronos, Celo, Wemix (config-ready chains).
|
||||||
# Required before fund-ccip-bridges-with-link.sh: 20 LINK per chain (10 per bridge).
|
# Required before fund-ccip-bridges-with-link.sh: 20 LINK per chain (10 per bridge).
|
||||||
#
|
#
|
||||||
# Usage: ./scripts/deployment/check-link-balance-config-ready-chains.sh [gnosis|cronos|celo|all]
|
# Usage: ./scripts/deployment/check-link-balance-config-ready-chains.sh [gnosis|cronos|celo|wemix|all]
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
@@ -19,10 +19,12 @@ REQUIRED_LINK="20" # 10 per WETH9 bridge + 10 per WETH10 bridge
|
|||||||
LINK_TOKEN_GNOSIS="${LINK_TOKEN_GNOSIS:-${CCIP_GNOSIS_LINK_TOKEN:-0xE2e73A1c69ecF83F464EFCE6A5be353a37cA09b2}}"
|
LINK_TOKEN_GNOSIS="${LINK_TOKEN_GNOSIS:-${CCIP_GNOSIS_LINK_TOKEN:-0xE2e73A1c69ecF83F464EFCE6A5be353a37cA09b2}}"
|
||||||
LINK_TOKEN_CRONOS="${LINK_TOKEN_CRONOS:-${CCIP_CRONOS_LINK_TOKEN:-0x8c80A01F461f297Df7F9DA3A4f740D7297C8Ac85}}"
|
LINK_TOKEN_CRONOS="${LINK_TOKEN_CRONOS:-${CCIP_CRONOS_LINK_TOKEN:-0x8c80A01F461f297Df7F9DA3A4f740D7297C8Ac85}}"
|
||||||
LINK_TOKEN_CELO="${LINK_TOKEN_CELO:-${CCIP_CELO_LINK_TOKEN:-0xd07294e6E917e07dfDcee882dd1e2565085C2ae0}}"
|
LINK_TOKEN_CELO="${LINK_TOKEN_CELO:-${CCIP_CELO_LINK_TOKEN:-0xd07294e6E917e07dfDcee882dd1e2565085C2ae0}}"
|
||||||
|
LINK_TOKEN_WEMIX="${LINK_TOKEN_WEMIX:-${CCIP_WEMIX_LINK_TOKEN:-0x80f1FcdC96B55e459BF52b998aBBE2c364935d69}}"
|
||||||
|
|
||||||
GNOSIS_RPC="${GNOSIS_RPC:-https://rpc.gnosischain.com}"
|
GNOSIS_RPC="${GNOSIS_RPC:-https://rpc.gnosischain.com}"
|
||||||
CRONOS_RPC="${CRONOS_RPC:-https://evm.cronos.org}"
|
CRONOS_RPC="${CRONOS_RPC:-https://evm.cronos.org}"
|
||||||
CELO_RPC="${CELO_RPC:-https://forno.celo.org}"
|
CELO_RPC="${CELO_RPC:-https://forno.celo.org}"
|
||||||
|
WEMIX_RPC="${WEMIX_RPC:-https://api.wemix.com}"
|
||||||
|
|
||||||
if [[ -z "${PRIVATE_KEY:-}" ]]; then
|
if [[ -z "${PRIVATE_KEY:-}" ]]; then
|
||||||
echo "Error: Set PRIVATE_KEY in .env" >&2
|
echo "Error: Set PRIVATE_KEY in .env" >&2
|
||||||
@@ -65,12 +67,14 @@ case "$CHAIN" in
|
|||||||
gnosis) check_link "Gnosis" "$GNOSIS_RPC" "$LINK_TOKEN_GNOSIS" || failed=1 ;;
|
gnosis) check_link "Gnosis" "$GNOSIS_RPC" "$LINK_TOKEN_GNOSIS" || failed=1 ;;
|
||||||
cronos) check_link "Cronos" "$CRONOS_RPC" "$LINK_TOKEN_CRONOS" || failed=1 ;;
|
cronos) check_link "Cronos" "$CRONOS_RPC" "$LINK_TOKEN_CRONOS" || failed=1 ;;
|
||||||
celo) check_link "Celo" "$CELO_RPC" "$LINK_TOKEN_CELO" || failed=1 ;;
|
celo) check_link "Celo" "$CELO_RPC" "$LINK_TOKEN_CELO" || failed=1 ;;
|
||||||
|
wemix) check_link "Wemix" "$WEMIX_RPC" "$LINK_TOKEN_WEMIX" || failed=1 ;;
|
||||||
all)
|
all)
|
||||||
check_link "Gnosis" "$GNOSIS_RPC" "$LINK_TOKEN_GNOSIS" || failed=1
|
check_link "Gnosis" "$GNOSIS_RPC" "$LINK_TOKEN_GNOSIS" || failed=1
|
||||||
check_link "Cronos" "$CRONOS_RPC" "$LINK_TOKEN_CRONOS" || failed=1
|
check_link "Cronos" "$CRONOS_RPC" "$LINK_TOKEN_CRONOS" || failed=1
|
||||||
check_link "Celo" "$CELO_RPC" "$LINK_TOKEN_CELO" || failed=1
|
check_link "Celo" "$CELO_RPC" "$LINK_TOKEN_CELO" || failed=1
|
||||||
|
check_link "Wemix" "$WEMIX_RPC" "$LINK_TOKEN_WEMIX" || failed=1
|
||||||
;;
|
;;
|
||||||
*) echo "Usage: $0 [gnosis|cronos|celo|all]"; exit 1 ;;
|
*) echo "Usage: $0 [gnosis|cronos|celo|wemix|all]"; exit 1 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
@@ -82,5 +86,6 @@ else
|
|||||||
echo " Gnosis: $LINK_TOKEN_GNOSIS"
|
echo " Gnosis: $LINK_TOKEN_GNOSIS"
|
||||||
echo " Cronos: $LINK_TOKEN_CRONOS"
|
echo " Cronos: $LINK_TOKEN_CRONOS"
|
||||||
echo " Celo: $LINK_TOKEN_CELO"
|
echo " Celo: $LINK_TOKEN_CELO"
|
||||||
|
echo " Wemix: $LINK_TOKEN_WEMIX"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -77,16 +77,17 @@ run_or_echo() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# ---- Step A: On Chain 138, add Gnosis/Cronos/Celo/Wemix as destinations ----
|
configure_chain_138_destination() {
|
||||||
echo ""
|
local label="$1"
|
||||||
echo "Step A: Chain 138 bridges → add Gnosis, Cronos, Celo, Wemix as destinations"
|
local selector="$2"
|
||||||
|
local addr9="$3"
|
||||||
|
local addr10="$4"
|
||||||
|
|
||||||
while IFS= read -r line; do
|
|
||||||
read -r label selector addr9 addr10 rpc <<< "$line"
|
|
||||||
if [[ -z "$addr9" && -z "$addr10" ]]; then
|
if [[ -z "$addr9" && -z "$addr10" ]]; then
|
||||||
echo " Skip $label (no bridge addresses in .env)"
|
echo " Skip $label (no bridge addresses in .env)"
|
||||||
continue
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo " Configuring Chain 138 → $label..."
|
echo " Configuring Chain 138 → $label..."
|
||||||
if [[ -n "$addr9" ]]; then
|
if [[ -n "$addr9" ]]; then
|
||||||
run_or_echo "cast send $WETH9_138 \"addDestination(uint64,address)\" $selector $addr9 --rpc-url $CHAIN138_RPC --private-key \$PRIVATE_KEY --legacy --gas-limit 200000"
|
run_or_echo "cast send $WETH9_138 \"addDestination(uint64,address)\" $selector $addr9 --rpc-url $CHAIN138_RPC --private-key \$PRIVATE_KEY --legacy --gas-limit 200000"
|
||||||
@@ -94,12 +95,36 @@ while IFS= read -r line; do
|
|||||||
if [[ -n "$addr10" ]]; then
|
if [[ -n "$addr10" ]]; then
|
||||||
run_or_echo "cast send $WETH10_138 \"addDestination(uint64,address)\" $selector $addr10 --rpc-url $CHAIN138_RPC --private-key \$PRIVATE_KEY --legacy --gas-limit 200000"
|
run_or_echo "cast send $WETH10_138 \"addDestination(uint64,address)\" $selector $addr10 --rpc-url $CHAIN138_RPC --private-key \$PRIVATE_KEY --legacy --gas-limit 200000"
|
||||||
fi
|
fi
|
||||||
done << EOF
|
}
|
||||||
Gnosis $GNOSIS_SELECTOR $WETH9_GNOSIS $WETH10_GNOSIS $GNOSIS_RPC
|
|
||||||
Cronos $CRONOS_SELECTOR $WETH9_CRONOS $WETH10_CRONOS $CRONOS_RPC
|
configure_remote_chain_destination() {
|
||||||
Celo $CELO_SELECTOR $WETH9_CELO $WETH10_CELO $CELO_RPC
|
local label="$1"
|
||||||
Wemix $WEMIX_SELECTOR $WETH9_WEMIX $WETH10_WEMIX $WEMIX_RPC
|
local rpc="$2"
|
||||||
EOF
|
local addr9="$3"
|
||||||
|
local addr10="$4"
|
||||||
|
|
||||||
|
if [[ -z "$addr9" && -z "$addr10" ]]; then
|
||||||
|
echo " Skip $label (no bridge addresses)"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " Configuring $label → Chain 138..."
|
||||||
|
if [[ -n "$addr9" ]]; then
|
||||||
|
run_or_echo "cast send $addr9 \"addDestination(uint64,address)\" $CHAIN138_SELECTOR $WETH9_138 --rpc-url $rpc --private-key \$PRIVATE_KEY --legacy"
|
||||||
|
fi
|
||||||
|
if [[ -n "$addr10" ]]; then
|
||||||
|
run_or_echo "cast send $addr10 \"addDestination(uint64,address)\" $CHAIN138_SELECTOR $WETH10_138 --rpc-url $rpc --private-key \$PRIVATE_KEY --legacy"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---- Step A: On Chain 138, add Gnosis/Cronos/Celo/Wemix as destinations ----
|
||||||
|
echo ""
|
||||||
|
echo "Step A: Chain 138 bridges → add Gnosis, Cronos, Celo, Wemix as destinations"
|
||||||
|
|
||||||
|
configure_chain_138_destination "Gnosis" "$GNOSIS_SELECTOR" "$WETH9_GNOSIS" "$WETH10_GNOSIS"
|
||||||
|
configure_chain_138_destination "Cronos" "$CRONOS_SELECTOR" "$WETH9_CRONOS" "$WETH10_CRONOS"
|
||||||
|
configure_chain_138_destination "Celo" "$CELO_SELECTOR" "$WETH9_CELO" "$WETH10_CELO"
|
||||||
|
configure_chain_138_destination "Wemix" "$WEMIX_SELECTOR" "$WETH9_WEMIX" "$WETH10_WEMIX"
|
||||||
|
|
||||||
# ---- Step B: On Gnosis/Cronos/Celo/Wemix, add Chain 138 as destination ----
|
# ---- Step B: On Gnosis/Cronos/Celo/Wemix, add Chain 138 as destination ----
|
||||||
if [[ -z "$CHAIN138_SELECTOR" ]]; then
|
if [[ -z "$CHAIN138_SELECTOR" ]]; then
|
||||||
@@ -110,25 +135,10 @@ else
|
|||||||
echo ""
|
echo ""
|
||||||
echo "Step B: Gnosis/Cronos/Celo/Wemix bridges → add Chain 138 as destination"
|
echo "Step B: Gnosis/Cronos/Celo/Wemix bridges → add Chain 138 as destination"
|
||||||
|
|
||||||
while IFS= read -r line; do
|
configure_remote_chain_destination "Gnosis" "$GNOSIS_RPC" "$WETH9_GNOSIS" "$WETH10_GNOSIS"
|
||||||
read -r label rpc addr9 addr10 <<< "$line"
|
configure_remote_chain_destination "Cronos" "$CRONOS_RPC" "$WETH9_CRONOS" "$WETH10_CRONOS"
|
||||||
if [[ -z "$addr9" && -z "$addr10" ]]; then
|
configure_remote_chain_destination "Celo" "$CELO_RPC" "$WETH9_CELO" "$WETH10_CELO"
|
||||||
echo " Skip $label (no bridge addresses)"
|
configure_remote_chain_destination "Wemix" "$WEMIX_RPC" "$WETH9_WEMIX" "$WETH10_WEMIX"
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo " Configuring $label → Chain 138..."
|
|
||||||
if [[ -n "$addr9" ]]; then
|
|
||||||
run_or_echo "cast send $addr9 \"addDestination(uint64,address)\" $CHAIN138_SELECTOR $WETH9_138 --rpc-url $rpc --private-key \$PRIVATE_KEY --legacy"
|
|
||||||
fi
|
|
||||||
if [[ -n "$addr10" ]]; then
|
|
||||||
run_or_echo "cast send $addr10 \"addDestination(uint64,address)\" $CHAIN138_SELECTOR $WETH10_138 --rpc-url $rpc --private-key \$PRIVATE_KEY --legacy"
|
|
||||||
fi
|
|
||||||
done << EOF
|
|
||||||
Gnosis $GNOSIS_RPC $WETH9_GNOSIS $WETH10_GNOSIS
|
|
||||||
Cronos $CRONOS_RPC $WETH9_CRONOS $WETH10_CRONOS
|
|
||||||
Celo $CELO_RPC $WETH9_CELO $WETH10_CELO
|
|
||||||
Wemix $WEMIX_RPC $WETH9_WEMIX $WETH10_WEMIX
|
|
||||||
EOF
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
@@ -24,33 +24,42 @@ verify_one() {
|
|||||||
local contract="$2"
|
local contract="$2"
|
||||||
local chain_arg="$3"
|
local chain_arg="$3"
|
||||||
local chain_name="$4"
|
local chain_name="$4"
|
||||||
|
local api_key="${5:-${ETHERSCAN_API_KEY}}"
|
||||||
echo "Verifying $contract at $addr on $chain_name..."
|
echo "Verifying $contract at $addr on $chain_name..."
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
forge verify-contract "$addr" "$contract" $chain_arg \
|
forge verify-contract "$addr" "$contract" $chain_arg \
|
||||||
--etherscan-api-key "${ETHERSCAN_API_KEY}" \
|
--etherscan-api-key "${api_key}" \
|
||||||
--watch 2>/dev/null || echo " (may already be verified or need chain-specific API key)"
|
--watch 2>/dev/null || echo " (may already be verified or need chain-specific API key)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Avalanche 43114
|
# Avalanche 43114
|
||||||
for addr in 0xa4B9DD039565AeD9641D45b57061f99d9cA6Df08 0x89dd12025bfCD38A168455A44B400e913ED33BE2 0xe0E93247376aa097dB308B92e6Ba36bA015535D0 0xAb57BF30F1354CA0590af22D8974c7f24DB2DbD7; do
|
for item in \
|
||||||
case "$addr" in
|
"${WETH9_AVALANCHE:-}:contracts/tokens/WETH.sol:WETH" \
|
||||||
0xa4B9DD039565AeD9641D45b57061f99d9cA6Df08) c="contracts/tokens/WETH.sol:WETH" ;;
|
"${WETH10_AVALANCHE:-}:contracts/tokens/WETH10.sol:WETH10" \
|
||||||
0x89dd12025bfCD38A168455A44B400e913ED33BE2) c="contracts/tokens/WETH10.sol:WETH10" ;;
|
"${CCIPWETH9_BRIDGE_AVALANCHE:-}:contracts/ccip/CCIPWETH9Bridge.sol:CCIPWETH9Bridge" \
|
||||||
0xe0E93247376aa097dB308B92e6Ba36bA015535D0) c="contracts/ccip/CCIPWETH9Bridge.sol:CCIPWETH9Bridge" ;;
|
"${CCIPWETH10_BRIDGE_AVALANCHE:-}:contracts/ccip/CCIPWETH10Bridge.sol:CCIPWETH10Bridge"; do
|
||||||
0xAb57BF30F1354CA0590af22D8974c7f24DB2DbD7) c="contracts/ccip/CCIPWETH10Bridge.sol:CCIPWETH10Bridge" ;;
|
addr="${item%%:*}"
|
||||||
esac
|
rest="${item#*:}"
|
||||||
verify_one "$addr" "$c" "--chain avalanche" "Avalanche"
|
contract="${rest%%:*}"
|
||||||
|
if [ -z "$addr" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
verify_one "$addr" "$contract" "--chain avalanche" "Avalanche" "${SNOWTRACE_API_KEY:-$ETHERSCAN_API_KEY}"
|
||||||
done
|
done
|
||||||
|
|
||||||
# Arbitrum 42161
|
# Arbitrum 42161
|
||||||
for addr in 0x89dd12025bfCD38A168455A44B400e913ED33BE2 0xe0E93247376aa097dB308B92e6Ba36bA015535D0 0xAb57BF30F1354CA0590af22D8974c7f24DB2DbD7 0xa780ef19A041745d353c9432f2a7f5A241335ffE; do
|
for item in \
|
||||||
case "$addr" in
|
"${WETH9_ARBITRUM:-}:contracts/tokens/WETH.sol:WETH" \
|
||||||
0x89dd12025bfCD38A168455A44B400e913ED33BE2) c="contracts/tokens/WETH.sol:WETH" ;;
|
"${WETH10_ARBITRUM:-}:contracts/tokens/WETH10.sol:WETH10" \
|
||||||
0xe0E93247376aa097dB308B92e6Ba36bA015535D0) c="contracts/tokens/WETH10.sol:WETH10" ;;
|
"${CCIPWETH9_BRIDGE_ARBITRUM:-}:contracts/ccip/CCIPWETH9Bridge.sol:CCIPWETH9Bridge" \
|
||||||
0xAb57BF30F1354CA0590af22D8974c7f24DB2DbD7) c="contracts/ccip/CCIPWETH9Bridge.sol:CCIPWETH9Bridge" ;;
|
"${CCIPWETH10_BRIDGE_ARBITRUM:-}:contracts/ccip/CCIPWETH10Bridge.sol:CCIPWETH10Bridge"; do
|
||||||
0xa780ef19A041745d353c9432f2a7f5A241335ffE) c="contracts/ccip/CCIPWETH10Bridge.sol:CCIPWETH10Bridge" ;;
|
addr="${item%%:*}"
|
||||||
esac
|
rest="${item#*:}"
|
||||||
verify_one "$addr" "$c" "--chain arbitrum" "Arbitrum"
|
contract="${rest%%:*}"
|
||||||
|
if [ -z "$addr" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
verify_one "$addr" "$contract" "--chain arbitrum" "Arbitrum" "${ARBISCAN_API_KEY:-$ETHERSCAN_API_KEY}"
|
||||||
done
|
done
|
||||||
|
|
||||||
# Cronos 25 — API: explorer-api.cronos.org/mainnet. Forge Blockscout verifier incompatible.
|
# Cronos 25 — API: explorer-api.cronos.org/mainnet. Forge Blockscout verifier incompatible.
|
||||||
@@ -62,7 +71,7 @@ if [ -n "${CRONOSCAN_API_KEY:-}" ]; then
|
|||||||
echo "If that fails, manual verification: export-cronos-verification-sources.sh then CRONOS_VERIFICATION_RUNBOOK.md"
|
echo "If that fails, manual verification: export-cronos-verification-sources.sh then CRONOS_VERIFICATION_RUNBOOK.md"
|
||||||
echo " WETH9: 0x99B3511A2d315A497C8112C1fdd8D508d4B1E506"
|
echo " WETH9: 0x99B3511A2d315A497C8112C1fdd8D508d4B1E506"
|
||||||
echo " WETH10: 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6"
|
echo " WETH10: 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6"
|
||||||
echo " CCIPWETH9: 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e"
|
echo " CCIPWETH9: 0x3Cc23d086fCcbAe1e5f3FE2bA4A263E1D27d8Cab"
|
||||||
echo " CCIPWETH10: 0x105F8A15b819948a89153505762444Ee9f324684"
|
echo " CCIPWETH10: 0x105F8A15b819948a89153505762444Ee9f324684"
|
||||||
echo ""
|
echo ""
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ echo "Ethereum Mainnet Contract Verification"
|
|||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# Mainnet contract addresses (from deployment logs)
|
# Mainnet contract addresses (prefer env-backed canonical values)
|
||||||
CCIPWETH9BRIDGE_MAINNET="0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6"
|
CCIPWETH9BRIDGE_MAINNET="${MAINNET_CCIP_WETH9_BRIDGE:-0xc9901ce2Ddb6490FAA183645147a87496d8b20B6}"
|
||||||
CCIPWETH10BRIDGE_MAINNET="0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e"
|
CCIPWETH10BRIDGE_MAINNET="${MAINNET_CCIP_WETH10_BRIDGE:-0x04E1e22B0D41e99f4275bd40A50480219bc9A223}"
|
||||||
|
|
||||||
# Check verification status
|
# Check verification status
|
||||||
check_verification() {
|
check_verification() {
|
||||||
@@ -92,4 +92,3 @@ echo " • CCIPWETH9Bridge: https://etherscan.io/address/$CCIPWETH9BRIDGE_MAINN
|
|||||||
echo " • CCIPWETH10Bridge: https://etherscan.io/address/$CCIPWETH10BRIDGE_MAINNET"
|
echo " • CCIPWETH10Bridge: https://etherscan.io/address/$CCIPWETH10BRIDGE_MAINNET"
|
||||||
echo " • Verify Contracts: https://etherscan.io/myverify_address"
|
echo " • Verify Contracts: https://etherscan.io/myverify_address"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ echo "=========================================="
|
|||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# Mainnet contract addresses
|
# Mainnet contract addresses
|
||||||
CCIPWETH9BRIDGE_MAINNET="0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6"
|
CCIPWETH9BRIDGE_MAINNET="${MAINNET_CCIP_WETH9_BRIDGE:-0xc9901ce2Ddb6490FAA183645147a87496d8b20B6}"
|
||||||
CCIPWETH10BRIDGE_MAINNET="0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e"
|
CCIPWETH10BRIDGE_MAINNET="${MAINNET_CCIP_WETH10_BRIDGE:-0x04E1e22B0D41e99f4275bd40A50480219bc9A223}"
|
||||||
|
|
||||||
# Constructor arguments
|
# Constructor arguments
|
||||||
CCIP_ROUTER="${CCIP_MAINNET_ROUTER:-0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D}"
|
CCIP_ROUTER="${CCIP_MAINNET_ROUTER:-0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D}"
|
||||||
@@ -88,4 +88,3 @@ echo "📄 View contracts:"
|
|||||||
echo " • CCIPWETH9Bridge: https://etherscan.io/address/$CCIPWETH9BRIDGE_MAINNET"
|
echo " • CCIPWETH9Bridge: https://etherscan.io/address/$CCIPWETH9BRIDGE_MAINNET"
|
||||||
echo " • CCIPWETH10Bridge: https://etherscan.io/address/$CCIPWETH10BRIDGE_MAINNET"
|
echo " • CCIPWETH10Bridge: https://etherscan.io/address/$CCIPWETH10BRIDGE_MAINNET"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ fi
|
|||||||
RPC_URL="${RPC_URL:-${RPC_URL_138:-http://192.168.11.250:8545}}"
|
RPC_URL="${RPC_URL:-${RPC_URL_138:-http://192.168.11.250:8545}}"
|
||||||
BRIDGE_ADDRESS="${CCIPWETH9_BRIDGE_CHAIN138:-0x971cD9D156f193df8051E48043C476e53ECd4693}"
|
BRIDGE_ADDRESS="${CCIPWETH9_BRIDGE_CHAIN138:-0x971cD9D156f193df8051E48043C476e53ECd4693}"
|
||||||
LINK_TOKEN="${LINK_TOKEN:-0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03}"
|
LINK_TOKEN="${LINK_TOKEN:-0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03}"
|
||||||
CCIP_ROUTER="${CCIP_ROUTER:-0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e}"
|
CCIP_ROUTER="${CCIP_ROUTER:-0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817}"
|
||||||
ETH_SELECTOR="5009297550715157269" # Ethereum Mainnet
|
ETH_SELECTOR="5009297550715157269" # Ethereum Mainnet
|
||||||
|
|
||||||
echo "========================================="
|
echo "========================================="
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ fi
|
|||||||
|
|
||||||
# Chain 138 LINK - approve for CCIP fees (bridge or router pulls). Canonical on 138: 0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03 (see CHAIN138_TOKEN_ADDRESSES.md, LINK_TOKEN_STATUS_FINAL.md).
|
# Chain 138 LINK - approve for CCIP fees (bridge or router pulls). Canonical on 138: 0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03 (see CHAIN138_TOKEN_ADDRESSES.md, LINK_TOKEN_STATUS_FINAL.md).
|
||||||
LINK_TOKEN_138="${LINK_TOKEN_CHAIN138:-${LINK_TOKEN:-0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03}}"
|
LINK_TOKEN_138="${LINK_TOKEN_CHAIN138:-${LINK_TOKEN:-0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03}}"
|
||||||
CCIP_ROUTER_138="${CCIP_ROUTER_ADDRESS:-0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e}"
|
CCIP_ROUTER_138="${CCIP_ROUTER_ADDRESS:-0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817}"
|
||||||
MAX_UINT256="115792089237316195423570985008687907853269984665640564039457584007913129639935"
|
MAX_UINT256="115792089237316195423570985008687907853269984665640564039457584007913129639935"
|
||||||
log_info "Approving LINK for CCIP fees (bridge + router)..."
|
log_info "Approving LINK for CCIP fees (bridge + router)..."
|
||||||
cast send "$LINK_TOKEN_138" "approve(address,uint256)" "$WETH9_BRIDGE" "$MAX_UINT256" \
|
cast send "$LINK_TOKEN_138" "approve(address,uint256)" "$WETH9_BRIDGE" "$MAX_UINT256" \
|
||||||
@@ -314,4 +314,3 @@ else
|
|||||||
log_info "Output: $BRIDGE_TX"
|
log_info "Output: $BRIDGE_TX"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,7 @@
|
|||||||
"code": "0x",
|
"code": "0x",
|
||||||
"storage": {}
|
"storage": {}
|
||||||
},
|
},
|
||||||
"0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e": {
|
"0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817": {
|
||||||
"balance": "0xd3c21bcecceda1000000",
|
"balance": "0xd3c21bcecceda1000000",
|
||||||
"code": "0x",
|
"code": "0x",
|
||||||
"storage": {}
|
"storage": {}
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ WETH10_ADDRESS=${WETH10_ADDRESS:-0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f}
|
|||||||
|
|
||||||
# Bridges
|
# Bridges
|
||||||
CCIPWETH9_BRIDGE_CHAIN138=${CCIPWETH9_BRIDGE_CHAIN138:-0x971cD9D156f193df8051E48043C476e53ECd4693}
|
CCIPWETH9_BRIDGE_CHAIN138=${CCIPWETH9_BRIDGE_CHAIN138:-0x971cD9D156f193df8051E48043C476e53ECd4693}
|
||||||
CCIPWETH10_BRIDGE_CHAIN138=${CCIPWETH10_BRIDGE_CHAIN138:-0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e}
|
CCIPWETH10_BRIDGE_CHAIN138=${CCIPWETH10_BRIDGE_CHAIN138:-0xe0E93247376aa097dB308B92e6Ba36bA015535D0}
|
||||||
|
|
||||||
# CCIP Chain Selectors
|
# CCIP Chain Selectors
|
||||||
ETHEREUM_MAINNET_SELECTOR=${ETHEREUM_MAINNET_SELECTOR:-5009297550715157269}
|
ETHEREUM_MAINNET_SELECTOR=${ETHEREUM_MAINNET_SELECTOR:-5009297550715157269}
|
||||||
@@ -104,4 +104,3 @@ echo " - .env.mainnet"
|
|||||||
echo " - .env.chain138"
|
echo " - .env.chain138"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Review and update these files with any missing values."
|
echo "Review and update these files with any missing values."
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user