Files
proxmox/docs/archive/historical/CONTRACT_ADDRESS_CROSS_CHAIN_NOTE.md

147 lines
4.0 KiB
Markdown
Raw Normal View History

# Contract Address Cross-Chain Note
**Date**: $(date)
**Purpose**: Explanation of why the same contract address exists on different chains with different states
---
## 🔍 The Situation
The contract address `0x105F8A15b819948a89153505762444Ee9f324684` exists on both:
1. **Ethereum Mainnet** - Has empty bytecode (`0x`)
2. **Chain 138** - Has deployed contract bytecode (~5KB)
---
## ❓ Why Does This Happen?
### Deterministic Address Generation
Contract addresses can be the same across different chains when:
1. **CREATE2 Deployment**: Using CREATE2 opcode with the same:
- Deployer address
- Salt value
- Bytecode hash
Results in the **same address** on any EVM-compatible chain.
2. **Pre-calculated Addresses**: Addresses calculated before deployment can match across chains if:
- Same deployment parameters are used
- Same nonce is used (for CREATE)
- Same CREATE2 parameters are used
3. **Genesis Pre-deployment**: Some chains pre-deploy contracts at specific addresses in genesis, which may match addresses on other chains by coincidence.
---
## 📊 Current State Comparison
| Network | Address | Bytecode | Status | Relevance |
|---------|---------|----------|--------|-----------|
| **Ethereum Mainnet** | `0x105F8A15b819948a89153505762444Ee9f324684` | `0x` (empty) | ❌ No contract | ❌ **Not relevant - ignore** |
| **Chain 138** | `0x105F8A15b819948a89153505762444Ee9f324684` | ~5KB bytecode | ✅ CCIP Sender deployed | ✅ **Only relevant address** |
---
## ✅ What This Means
### For Chain 138 Operations
- **Use this address**: `0x105F8A15b819948a89153505762444Ee9f324684`
- **Network**: Chain 138 (ChainID 138)
- **RPC**: `http://192.168.11.250:8545` or `https://rpc-core.d-bis.org`
- **Status**: ✅ Contract is deployed and operational
### For Ethereum Mainnet
-**Do NOT use this address** on mainnet
- ❌ The address has no contract code (empty bytecode)
-**Not functional** - completely useless for any operations
-**Not relevant for this project** - ignore mainnet address entirely
---
## 🔐 Security Implications
### Always Verify Chain Context
When interacting with contract addresses:
1. **Always specify the chain ID** in your code
2. **Verify bytecode** before interacting:
```bash
# Check Chain 138
cast code 0x105F8A15b819948a89153505762444Ee9f324684 \
--rpc-url http://192.168.11.250:8545
# Check Mainnet (will return 0x)
cast code 0x105F8A15b819948a89153505762444Ee9f324684 \
--rpc-url https://eth.llamarpc.com
```
3. **Use chain-specific RPC endpoints** in your applications
4. **Validate contract existence** before calling functions
---
## 📝 Best Practices
### In Smart Contracts
```solidity
// Always check contract exists
function callContract(address target) external {
require(target.code.length > 0, "Target is not a contract");
// ... rest of code
}
```
### In Frontend/Backend Code
```javascript
// Always specify chain ID
const provider = new ethers.providers.JsonRpcProvider(
"http://192.168.11.250:8545", // Chain 138 RPC
{ chainId: 138, name: "SMOM-DBIS-138" }
);
// Verify contract exists
const code = await provider.getCode(contractAddress);
if (code === "0x") {
throw new Error("Contract does not exist at this address");
}
```
### In Configuration Files
```bash
# Always include chain ID
CCIP_SENDER_ADDRESS=0x105F8A15b819948a89153505762444Ee9f324684
CHAIN_ID=138
RPC_URL=http://192.168.11.250:8545
```
---
## 🔗 Related Documentation
- [CCIP Sender Contract Reference](../../07-ccip/CCIP_SENDER_CONTRACT_REFERENCE.md)
- [Contract Addresses Reference](/docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md)
- [Final Contract Addresses](../../11-references/CONTRACT_ADDRESSES_REFERENCE.md)
---
## 📋 Summary
-**Chain 138**: Address has deployed CCIP Sender contract - **USE THIS**
-**Ethereum Mainnet**: Address has empty bytecode - **NOT FUNCTIONAL, IGNORE**
- ⚠️ **Only use on Chain 138** - mainnet address is useless
- 🔐 **Always verify you're on Chain 138** when interacting with this address
---
**Last Updated**: $(date)