16 KiB
Complete Connections, Contracts, and Containers List
Date: $(date)
Purpose: Comprehensive list of all connections, smart contracts, and LXC containers
📋 Table of Contents
- Smart Contract Connections
- Smart Contracts Required
- LXC Containers to Deploy
- MetaMask ETH Price Feed Setup
🔗 Smart Contract Connections
RPC Endpoint Connections
All services that interact with smart contracts need to connect to Besu RPC endpoints:
Primary RPC Endpoints
- HTTP RPC:
http://192.168.11.250:8545(or load-balanced endpoint) - WebSocket RPC:
ws://192.168.11.250:8546 - Chain ID: 138
RPC Node IPs (Current Deployment)
| VMID | Hostname | IP Address | RPC Port | WS Port |
|---|---|---|---|---|
| 2500 | besu-rpc-1 | 192.168.11.250 | 8545 | 8546 |
| 2501 | besu-rpc-2 | 192.168.11.251 | 8545 | 8546 |
| 2502 | besu-rpc-3 | 192.168.11.252 | 8545 | 8546 |
Note: Services should use load-balanced endpoint or connect to multiple RPC nodes for redundancy.
📦 Smart Contracts Required
Priority 1: Core Infrastructure Contracts
1. Oracle Contract ⏳
- Status: Not Deployed
- Required By: Oracle Publisher Service (VMID 3500)
- Script:
DeployOracle.s.sol - Purpose: Receive price feed updates, store aggregated price data
- Configuration:
/opt/oracle-publisher/.envORACLE_CONTRACT_ADDRESS=<deploy-first>
2. CCIP Router Contract ⏳
- Status: Not Deployed
- Required By: CCIP Monitor Service (VMID 3501)
- Script:
DeployCCIPRouter.s.sol - Purpose: Main CCIP router for cross-chain message routing
- Configuration:
/opt/ccip-monitor/.envCCIP_ROUTER_ADDRESS=<deploy-first>
3. CCIP Sender Contract ⏳
- Status: Not Deployed
- Required By: CCIP Monitor Service (VMID 3501)
- Script:
DeployCCIPSender.s.sol - Purpose: Sender contract for initiating CCIP messages
- Configuration:
/opt/ccip-monitor/.envCCIP_SENDER_ADDRESS=<deploy-first>
4. LINK Token Contract ⏳
- Status: Not Deployed
- Required By: CCIP Monitor Service (VMID 3501)
- Purpose: LINK token for CCIP fee payments
- Configuration:
/opt/ccip-monitor/.envLINK_TOKEN_ADDRESS=<deploy-or-use-native-eth>
Priority 2: Automation & Price Feeds
5. Price Feed Keeper Contract ⏳
- Status: Not Deployed
- Required By: Price Feed Keeper Service (VMID 3502)
- Script:
reserve/DeployKeeper.s.sol(Chain 138 specific) - Purpose: Automation contract for triggering price feed updates
- Configuration:
/opt/keeper/.envPRICE_FEED_KEEPER_ADDRESS=<deploy-after-oracle> KEEPER_CONTRACT_ADDRESS=<same-as-above>
6. Oracle Price Feed Contract ⏳
- Status: Not Deployed
- Required By: Keeper Service, MetaMask Price Display
- Script: Part of Reserve System deployment
- Purpose: Provides ETH/USD and other price feeds for MetaMask and dApps
- Configuration:
/opt/keeper/.envORACLE_PRICE_FEED=<deploy-with-oracle>
Priority 3: Tokenization
7. Financial Tokenization Contract ⏳
- Status: Not Deployed
- Required By: Financial Tokenization Service (VMID 3503)
- Script:
reserve/DeployReserveSystem.s.sol - Purpose: Tokenization of financial instruments, ERC-20/ERC-721 management
- Configuration:
/opt/financial-tokenization/.envTOKENIZATION_CONTRACT_ADDRESS=<deploy-after-reserve>
8. Reserve System Contract ⏳
- Status: Not Deployed
- Required By: Financial Tokenization Service (VMID 3503)
- Script:
reserve/DeployReserveSystem.s.sol(Chain 138 specific) - Purpose: Reserve system for financial tokenization
- Configuration:
/opt/financial-tokenization/.env
Auto-Deployed Contracts
9. Firefly Core Contracts ⏳
- Status: Auto-deployed by Firefly on first startup
- Required By: Hyperledger Firefly (VMID 6200)
- Purpose: Firefly core functionality, tokenization APIs
- Configuration: Auto-configured in
/opt/firefly/docker-compose.yml
🖥️ LXC Containers to Deploy
Priority 1: Smart Contract Services (High Priority)
| VMID | Hostname | IP Address | Service | Status | Priority |
|---|---|---|---|---|---|
| 3500 | oracle-publisher-1 | 192.168.11.68 | Oracle Publisher | ⏳ Pending | P1 - High |
| 3501 | ccip-monitor-1 | 192.168.11.69 | CCIP Monitor | ⏳ Pending | P1 - High |
| 3502 | keeper-1 | 192.168.11.70 | Price Feed Keeper | ⏳ Pending | P1 - High |
| 3503 | financial-tokenization-1 | 192.168.11.71 | Financial Tokenization | ⏳ Pending | P2 - Medium |
Total: 4 containers
Priority 2: Hyperledger Services (Ready for Deployment)
| VMID | Hostname | IP Address | Service | Status | Priority |
|---|---|---|---|---|---|
| 5200 | cacti-1 | 192.168.11.64 | Hyperledger Cacti | ✅ Ready | P1 - High |
| 6000 | fabric-1 | 192.168.11.65 | Hyperledger Fabric | ✅ Ready | P2 - Medium |
| 6200 | firefly-1 | 192.168.11.66 | Hyperledger Firefly | ✅ Ready | P1 - High |
| 6400 | indy-1 | 192.168.11.67 | Hyperledger Indy | ✅ Ready | P2 - Medium |
Total: 4 containers
Note: These are ready but need RPC endpoint configuration after deployment.
Priority 3: Monitoring Stack (High Priority)
| VMID | Hostname | IP Address | Service | Status | Priority |
|---|---|---|---|---|---|
| 3504 | monitoring-stack-1 | 192.168.11.80 | Prometheus | ⏳ Pending | P1 - High |
| 3505 | monitoring-stack-2 | 192.168.11.81 | Grafana | ⏳ Pending | P1 - High |
| 3506 | monitoring-stack-3 | 192.168.11.82 | Loki | ⏳ Pending | P2 - Medium |
| 3507 | monitoring-stack-4 | 192.168.11.83 | Alertmanager | ⏳ Pending | P2 - Medium |
| 3508 | monitoring-stack-5 | 192.168.11.84 | Additional monitoring | ⏳ Pending | P2 - Medium |
Total: 5 containers
Priority 4: Explorer (Medium Priority)
| VMID | Hostname | IP Address | Service | Status | Priority |
|---|---|---|---|---|---|
| 5000 | blockscout-1 | 192.168.11.140 | Blockscout Explorer | ⏳ Pending | P2 - Medium |
Total: 1 container
📊 Summary
Total Containers to Deploy
By Priority:
-
P1 (High): 7 containers
- Oracle Publisher (3500)
- CCIP Monitor (3501)
- Keeper (3502)
- Cacti (5200)
- Firefly (6200)
- Prometheus (3504)
- Grafana (3505)
-
P2 (Medium): 7 containers
- Financial Tokenization (3503)
- Fabric (6000)
- Indy (6400)
- Loki (3506)
- Alertmanager (3507)
- Monitoring Stack 5 (3508)
- Blockscout (5000)
Grand Total: 14 containers ready for deployment
Total Smart Contracts Required
By Priority:
-
P1 (High): 4 contracts
- Oracle Contract
- CCIP Router
- CCIP Sender
- LINK Token
-
P2 (Medium): 2 contracts
- Price Feed Keeper
- Oracle Price Feed
-
P3 (Low): 2 contracts
- Financial Tokenization
- Reserve System
Grand Total: 8 contracts need to be deployed
🦊 MetaMask ETH Price Feed Setup
Overview
For MetaMask to display ETH pricing in USD, you need:
- Price Feed Oracle Contract - Provides ETH/USD price data
- Oracle Publisher Service - Updates price feed from external sources
- Token List Configuration (Optional) - For MetaMask to recognize tokens
Components Required
1. Oracle Price Feed Contract ✅
Purpose: Stores and provides ETH/USD price data that MetaMask can query
Contract Type: Chainlink-compatible Aggregator contract
Features Needed:
latestRoundData()function - Returns latest price, timestamp, round IDdecimals()function - Returns price feed decimals (typically 8)description()function - Returns price feed description (e.g., "ETH / USD")
Deployment:
# Deploy Oracle Price Feed (part of Oracle deployment)
cd /home/intlc/projects/smom-dbis-138
forge script script/DeployOracle.s.sol:DeployOracle \
--rpc-url http://192.168.11.250:8545 \
--private-key $PRIVATE_KEY \
--broadcast --verify -vvvv
Contract Address: Will be generated after deployment
2. Oracle Publisher Service ✅
Purpose: Fetches ETH/USD price from external APIs and updates the on-chain oracle
VMID: 3500
IP: 192.168.11.68
Status: ⏳ Pending Deployment
Data Sources (configure in service):
- CoinGecko API:
https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd - CoinMarketCap API:
https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=ETH - Binance API:
https://api.binance.com/api/v3/ticker/price?symbol=ETHUSDT - Multiple sources for aggregation and median calculation
Configuration: /opt/oracle-publisher/.env
RPC_URL_138=http://192.168.11.250:8545
WS_URL_138=ws://192.168.11.250:8546
ORACLE_CONTRACT_ADDRESS=<deployed-oracle-address>
PRIVATE_KEY=<oracle-publisher-private-key>
UPDATE_INTERVAL=60 # Update every 60 seconds
METRICS_PORT=8000
# Data Sources
DATA_SOURCE_1_URL=https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd
DATA_SOURCE_1_PARSER=coingecko
DATA_SOURCE_2_URL=https://api.binance.com/api/v3/ticker/price?symbol=ETHUSDT
DATA_SOURCE_2_PARSER=binance
How It Works:
- Service fetches ETH/USD price from multiple APIs
- Calculates median price (for accuracy)
- Checks deviation threshold (to avoid unnecessary updates)
- Submits transaction to update oracle contract
- Oracle contract stores latest price, timestamp, round ID
3. MetaMask Integration
Option A: Direct Oracle Contract Query (Recommended)
MetaMask can query the oracle contract directly using the Aggregator interface:
// MetaMask/dApp code to get ETH price
const oracleAddress = "0x..."; // Deployed oracle contract address
const oracleABI = [
"function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)",
"function decimals() external view returns (uint8)",
"function description() external view returns (string memory)"
];
const provider = new ethers.providers.Web3Provider(window.ethereum);
const oracle = new ethers.Contract(oracleAddress, oracleABI, provider);
// Get latest price
const roundData = await oracle.latestRoundData();
const price = roundData.answer; // Price in USD (with decimals)
const decimals = await oracle.decimals();
const priceInUSD = price / (10 ** decimals);
Option B: Token List Configuration (For Token Display)
Create a token list JSON file for MetaMask:
{
"name": "SMOM-DBIS-138 Token List",
"version": {
"major": 1,
"minor": 0,
"patch": 0
},
"tokens": [
{
"chainId": 138,
"address": "0x...", // Native ETH or WETH address
"symbol": "ETH",
"name": "Ether",
"decimals": 18,
"logoURI": "https://example.com/eth-logo.png"
}
]
}
Deploy Token List:
- Host on a public URL (e.g., GitHub Pages, IPFS)
- Add to MetaMask via Settings → Security & Privacy → Token Lists
- Or use in dApp:
tokenListUrl: "https://your-domain.com/token-list.json"
Deployment Steps for MetaMask Price Feed
Step 1: Deploy Oracle Contract
cd /home/intlc/projects/smom-dbis-138
forge script script/DeployOracle.s.sol:DeployOracle \
--rpc-url http://192.168.11.250:8545 \
--private-key $PRIVATE_KEY \
--broadcast --verify -vvvv
Extract Contract Address:
# From broadcast file
jq -r '.transactions[0].contractAddress' \
broadcast/DeployOracle.s.sol/138/run-latest.json
Step 2: Deploy Oracle Publisher Service
cd /opt/smom-dbis-138-proxmox
./scripts/deployment/deploy-services.sh
Configure Service:
pct exec 3500 -- bash -c "cat > /opt/oracle-publisher/.env <<EOF
RPC_URL_138=http://192.168.11.250:8545
WS_URL_138=ws://192.168.11.250:8546
ORACLE_CONTRACT_ADDRESS=<deployed-oracle-address>
PRIVATE_KEY=<oracle-publisher-private-key>
UPDATE_INTERVAL=60
METRICS_PORT=8000
DATA_SOURCE_1_URL=https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd
DATA_SOURCE_1_PARSER=coingecko
DATA_SOURCE_2_URL=https://api.binance.com/api/v3/ticker/price?symbol=ETHUSDT
DATA_SOURCE_2_PARSER=binance
EOF"
Step 3: Start Oracle Publisher Service
pct exec 3500 -- systemctl start oracle-publisher
pct exec 3500 -- systemctl enable oracle-publisher
Step 4: Verify Price Feed Updates
# Check service logs
pct exec 3500 -- journalctl -u oracle-publisher -f
# Query oracle contract directly
cast call <oracle-address> "latestRoundData()" --rpc-url http://192.168.11.250:8545
Step 5: Integrate with MetaMask/dApp
// Example: Get ETH price in dApp
const oracleAddress = "0x..."; // Your deployed oracle address
const oracleABI = [
"function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)",
"function decimals() external view returns (uint8)"
];
// In your dApp
const provider = new ethers.providers.Web3Provider(window.ethereum);
const oracle = new ethers.Contract(oracleAddress, oracleABI, provider);
async function getETHPrice() {
const roundData = await oracle.latestRoundData();
const decimals = await oracle.decimals();
const priceInUSD = Number(roundData.answer) / (10 ** Number(decimals));
return priceInUSD;
}
// Display in UI
const ethPrice = await getETHPrice();
console.log(`ETH Price: $${ethPrice.toFixed(2)}`);
Additional Components for Full MetaMask Integration
1. Network Configuration
MetaMask needs network configuration for Chain 138:
const networkConfig = {
chainId: '0x8a', // 138 in hex
chainName: 'SMOM-DBIS-138',
nativeCurrency: {
name: 'Ether',
symbol: 'ETH',
decimals: 18
},
rpcUrls: ['https://rpc-core.d-bis.org'], // Your public RPC endpoint
blockExplorerUrls: ['https://explorer.d-bis.org'] // When Blockscout is deployed
};
Add to MetaMask:
await window.ethereum.request({
method: 'wallet_addEthereumChain',
params: [networkConfig]
});
2. Token List (Optional)
For MetaMask to display custom tokens with prices:
- Create Token List JSON (see example above)
- Host on Public URL (GitHub Pages, IPFS, or your domain)
- Add to MetaMask:
- Settings → Security & Privacy → Token Lists
- Add custom token list URL
3. Price Feed Aggregator (Advanced)
For multiple price feeds (ETH/USD, BTC/USD, etc.):
- Deploy multiple oracle contracts (one per price pair)
- Configure Oracle Publisher to update all feeds
- Create aggregator contract that combines multiple feeds
📚 Related Documentation
- Smart Contract Connections & Next LXCs
- Contract Deployment Guide
- Deployed Smart Contracts Inventory
- Source Project Contract Deployment Info
- Remaining LXCs to Deploy
✅ Next Steps
-
Deploy Smart Contracts (Priority 1)
- Oracle Contract
- CCIP Router
- CCIP Sender
- LINK Token
-
Deploy Oracle Publisher Service (VMID 3500)
- Configure with deployed oracle address
- Set up data sources
- Start service
-
Deploy Additional Services (Priority 2)
- CCIP Monitor (3501)
- Keeper (3502)
- Financial Tokenization (3503)
-
Deploy Hyperledger Services (Priority 2)
- Firefly (6200)
- Cacti (5200)
- Fabric (6000)
- Indy (6400)
-
Deploy Monitoring Stack (Priority 2)
- Prometheus (3504)
- Grafana (3505)
- Loki (3506)
- Alertmanager (3507)
-
Deploy Explorer (Priority 2)
- Blockscout (5000)
-
Configure MetaMask Integration
- Deploy oracle contract
- Configure Oracle Publisher service
- Create token list (optional)
- Test price feed in dApp
Last Updated: $(date)
Status: Ready for deployment