Files
smom-dbis-138/docs/architecture/PREDEPLOYED_WETH_ARCHITECTURE.md
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- 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.
2025-12-12 14:57:48 -08:00

214 lines
7.3 KiB
Markdown

# Predeployed WETH Architecture
## Overview
WETH9 and WETH10 are **predeployed** at their canonical Ethereum Mainnet addresses via the `alloc` section in `genesis.json`. This provides the "same address across chains" property, enabling seamless cross-chain compatibility.
## Canonical Addresses
| Contract | Mainnet Address | ChainID 138 Address |
|----------|----------------|---------------------|
| **WETH9** | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` ✅ Same |
| **WETH10** | `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f` | `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f` ✅ Same |
## Benefits
1. **Same Address Across Chains**: Users can use the same WETH addresses on both Mainnet and ChainID 138
2. **No Deployment Needed**: Contracts exist from genesis block
3. **Cross-Chain Compatibility**: DApps can reference the same addresses
4. **WETH10 Advanced Features**: Flash-mint and complex structures work out of the box
## Genesis Configuration
The contracts are added to `genesis.json` in the `alloc` section:
```json
{
"alloc": {
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
"code": "0x608060405234801561001057600080fd5b50...",
"balance": "0x0"
},
"0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f": {
"code": "0x608060405234801561001057600080fd5b50...",
"balance": "0x0"
}
}
}
```
## Bridge Architecture
### Cross-Chain Bridge Pattern
The bridge contracts (`CCIPWETH9Bridge` and `CCIPWETH10Bridge`) work with the predeployed WETH contracts:
```
┌─────────────────────────────────────────────────────────────┐
│ Ethereum Mainnet │
│ │
│ User WETH (0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) │
│ │ │
│ │ Lock/Burn │
│ ▼ │
│ CCIPWETH9Bridge │
│ │ │
│ │ CCIP Message │
│ ▼ │
└───────────┼──────────────────────────────────────────────────┘
│ CCIP Cross-Chain
┌───────────┼──────────────────────────────────────────────────┐
│ ▼ ChainID 138 │
│ CCIPWETH9Bridge │
│ │ │
│ │ Mint/Unlock │
│ ▼ │
│ WETH9 (0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) │
│ │ │
│ │ User receives WETH │
│ ▼ │
│ User │
└─────────────────────────────────────────────────────────────┘
```
### Bridge Functions
#### Lock/Unlock Pattern (WETH9)
**On Mainnet:**
1. User deposits WETH to bridge
2. Bridge locks WETH (transfers from user)
3. Bridge sends CCIP message to ChainID 138
**On ChainID 138:**
1. Bridge receives CCIP message
2. Bridge mints WETH to user (same address as Mainnet)
#### Mint/Burn Pattern (WETH10)
**On Mainnet:**
1. User deposits WETH to bridge
2. Bridge burns WETH
3. Bridge sends CCIP message to ChainID 138
**On ChainID 138:**
1. Bridge receives CCIP message
2. Bridge mints WETH to user (same address as Mainnet)
### Bridge Contract Implementation
The bridge contracts reference the predeployed WETH addresses:
```solidity
// CCIPWETH9Bridge.sol
address public immutable weth9 = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
// CCIPWETH10Bridge.sol
address public immutable weth10 = 0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f;
```
## WETH10 Advanced Features
WETH10 is treated as an advanced instrument with:
- **Flash-Mint**: ERC-3156 flash loan support
- **Complex Structures**: More sophisticated internal logic
- **Same Address**: Works seamlessly across chains
## Deployment Process
### 1. Compile Contracts
```bash
forge build
```
### 2. Add to Genesis
```bash
./scripts/genesis/add-predeployed-weth.sh
```
This script:
- Compiles WETH9 and WETH10
- Extracts bytecode
- Adds to `genesis.json` `alloc` section
- Backs up original genesis file
### 3. Deploy Bridge Contracts
```bash
# Deploy CCIPWETH9Bridge
forge script script/DeployCCIPWETH9Bridge.s.sol --rpc-url $RPC_URL --broadcast
# Deploy CCIPWETH10Bridge
forge script script/DeployCCIPWETH10Bridge.s.sol --rpc-url $RPC_URL --broadcast
```
### 4. Verify
```bash
# Check WETH9 exists at canonical address
cast code 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 --rpc-url $RPC_URL
# Check WETH10 exists at canonical address
cast code 0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f --rpc-url $RPC_URL
```
## Cross-Chain Usage
### Example: User Wants to Bridge WETH
1. **User on Mainnet**:
```solidity
// Approve bridge
IERC20(WETH9).approve(bridgeAddress, amount);
// Bridge WETH
CCIPWETH9Bridge(bridgeAddress).sendCrossChain(
destinationChainSelector,
recipient,
amount
);
```
2. **Bridge on Mainnet**:
- Locks WETH from user
- Sends CCIP message
3. **Bridge on ChainID 138**:
- Receives CCIP message
- Mints WETH to user at same address
4. **User on ChainID 138**:
- Receives WETH at `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`
- Can use immediately (same address as Mainnet)
## Security Considerations
1. **Bytecode Verification**: Ensure bytecode matches Mainnet exactly
2. **Initial State**: Contracts start with zero balance (no pre-minted tokens)
3. **Bridge Security**: Bridge contracts must be secure (audit recommended)
4. **Access Control**: Only bridge contracts should mint/burn on ChainID 138
## Advantages Over Deployment
| Aspect | Predeployment | Deployment |
|--------|--------------|------------|
| **Address** | ✅ Same as Mainnet | ❌ Different |
| **Cross-Chain** | ✅ Seamless | ⚠️ Requires mapping |
| **User Experience** | ✅ Same addresses | ❌ Different addresses |
| **DApp Compatibility** | ✅ Works immediately | ⚠️ Needs updates |
## Conclusion
Predeploying WETH9 and WETH10 at their canonical Mainnet addresses provides:
- ✅ Same addresses across chains
- ✅ Seamless cross-chain compatibility
- ✅ Better user experience
- ✅ DApp compatibility out of the box
The bridge contracts handle the lock/unlock and mint/burn operations, enabling true cross-chain WETH transfers while maintaining address consistency.