- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control. - Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities. - Created .gitmodules to include OpenZeppelin contracts as a submodule. - Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment. - Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks. - Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring. - Created scripts for resource import and usage validation across non-US regions. - Added tests for CCIP error handling and integration to ensure robust functionality. - Included various new files and directories for the orchestration portal and deployment scripts.
159 lines
4.1 KiB
Markdown
159 lines
4.1 KiB
Markdown
# Fork Analysis: Can We Use Mainnet WETH9 Address?
|
|
|
|
## Question: If ChainID 138 is a fork of Ethereum Mainnet, can we use the existing WETH9 address?
|
|
|
|
**Answer: ✅ YES - If it's a fork, WETH9 already exists at the Mainnet address!**
|
|
|
|
---
|
|
|
|
## Understanding Forks
|
|
|
|
### What is a Fork?
|
|
|
|
A **fork** of Ethereum Mainnet means:
|
|
- The new chain starts with a copy of Mainnet's state at a specific block
|
|
- All existing contracts are preserved at their original addresses
|
|
- All account balances and contract storage are preserved
|
|
- The chain then diverges from that point
|
|
|
|
### What is a New Chain?
|
|
|
|
A **new chain** (not a fork) means:
|
|
- Starts with empty state (genesis block)
|
|
- No existing contracts
|
|
- Must deploy all contracts from scratch
|
|
- Addresses will be different
|
|
|
|
---
|
|
|
|
## Current Status: ChainID 138
|
|
|
|
### Genesis Configuration Analysis
|
|
|
|
Looking at `config/genesis.json`:
|
|
- **Chain ID**: 138 (different from Mainnet's 1)
|
|
- **Consensus**: QBFT 2.0 (different from Mainnet's Proof of Stake)
|
|
- **Alloc**: Limited pre-allocated accounts
|
|
- **WETH9 Address**: Not found in genesis
|
|
|
|
### Conclusion: **NOT a Fork**
|
|
|
|
Based on the genesis configuration, ChainID 138 appears to be a **NEW chain**, not a fork:
|
|
- Different consensus mechanism (QBFT 2.0 vs PoS)
|
|
- Different chain ID (138 vs 1)
|
|
- No Mainnet state included
|
|
- WETH9 address not in genesis
|
|
|
|
---
|
|
|
|
## If We Made It a Fork
|
|
|
|
### Option 1: Fork at a Specific Block
|
|
|
|
If we configure ChainID 138 as a fork of Ethereum Mainnet:
|
|
|
|
```json
|
|
{
|
|
"config": {
|
|
"chainId": 138,
|
|
"berlinBlock": 0,
|
|
"londonBlock": 0,
|
|
"istanbulBlock": 0,
|
|
"qbft2": { ... }
|
|
},
|
|
"alloc": {
|
|
// Mainnet state at fork block would be included
|
|
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
|
|
"balance": "...",
|
|
"code": "...", // WETH9 bytecode
|
|
"storage": { ... } // WETH9 storage
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Result:**
|
|
- ✅ WETH9 exists at `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`
|
|
- ✅ No deployment needed
|
|
- ✅ Same address as Mainnet
|
|
- ✅ All Mainnet contracts available
|
|
|
|
### Option 2: Use Besu's Fork Configuration
|
|
|
|
Hyperledger Besu supports forking Ethereum Mainnet:
|
|
|
|
```toml
|
|
# besu-config.toml
|
|
genesis-file="/config/genesis.json"
|
|
fork-block-number=18000000 # Fork at block 18,000,000
|
|
```
|
|
|
|
**Result:**
|
|
- ✅ Mainnet state preserved
|
|
- ✅ WETH9 at original address
|
|
- ✅ All contracts available
|
|
|
|
---
|
|
|
|
## Current Implementation: New Chain
|
|
|
|
Since ChainID 138 is configured as a **new chain** (not a fork):
|
|
|
|
### Implications:
|
|
1. ❌ WETH9 does NOT exist
|
|
2. ❌ Must deploy WETH9
|
|
3. ❌ Address will be different from Mainnet
|
|
4. ✅ Full control over chain state
|
|
5. ✅ Custom consensus (QBFT 2.0)
|
|
|
|
### Deployment Options:
|
|
1. **Deploy with CREATE**: New address (current method)
|
|
2. **Deploy with CREATE2**: Deterministic address (but still different from Mainnet)
|
|
3. **Fork Mainnet**: WETH9 already exists (requires genesis reconfiguration)
|
|
|
|
---
|
|
|
|
## Recommendation
|
|
|
|
### If You Want WETH9 at Mainnet Address:
|
|
|
|
**Option A: Reconfigure as Fork**
|
|
1. Update genesis.json to include Mainnet state
|
|
2. Configure Besu to fork from a specific Mainnet block
|
|
3. WETH9 will exist at `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`
|
|
4. No deployment needed
|
|
|
|
**Option B: Keep as New Chain**
|
|
1. Deploy WETH9 with CREATE or CREATE2
|
|
2. Document the new address
|
|
3. Users will use the new address on ChainID 138
|
|
|
|
### Trade-offs:
|
|
|
|
| Aspect | Fork | New Chain |
|
|
|--------|------|-----------|
|
|
| **WETH9 Address** | ✅ Same as Mainnet | ❌ Different |
|
|
| **Mainnet Contracts** | ✅ All available | ❌ Must deploy |
|
|
| **State Size** | ⚠️ Large (full Mainnet state) | ✅ Small (empty) |
|
|
| **Control** | ⚠️ Limited (inherits Mainnet state) | ✅ Full control |
|
|
| **Consensus** | ⚠️ Must match Mainnet | ✅ Custom (QBFT 2.0) |
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
1. **Decide**: Fork or New Chain?
|
|
2. **If Fork**: Update genesis.json with Mainnet state
|
|
3. **If New Chain**: Continue with current deployment method
|
|
4. **Document**: Clearly state whether it's a fork or new chain
|
|
|
|
---
|
|
|
|
## Conclusion
|
|
|
|
**Current Status**: ChainID 138 is a **NEW CHAIN**, not a fork.
|
|
|
|
**To Use Mainnet WETH9 Address**: Reconfigure as a fork of Ethereum Mainnet.
|
|
|
|
**Otherwise**: Deploy WETH9 and use the new address.
|