3.6 KiB
3.6 KiB
MetaMask Oracle Integration Guide
Date: Mon Dec 22 00:17:03 PST 2025
ChainID: 138
Oracle Address: 0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6
📋 Overview
This guide explains how to integrate the deployed Oracle contract with MetaMask for ETH/USD price feeds.
🔗 Contract Information
- Oracle Proxy Address:
0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 - ChainID: 138
- RPC Endpoint:
https://rpc-core.d-bis.org - Price Feed: ETH/USD
- Decimals: 8
- Update Frequency: 60 seconds (heartbeat)
📝 MetaMask Network Configuration
Method 1: Manual Configuration
- Open MetaMask
- Click network dropdown → "Add Network" → "Add a network manually"
- Enter the following:
- Network Name: SMOM-DBIS-138
- RPC URL:
https://rpc-core.d-bis.org - Chain ID: 138
- Currency Symbol: ETH
- Block Explorer: https://explorer.d-bis.org (optional)
Method 2: Import Configuration
Use the configuration file: docs/METAMASK_NETWORK_CONFIG.json
💰 Reading Price from Oracle
Using Web3.js
const Web3 = require('web3');
const web3 = new Web3('https://rpc-core.d-bis.org');
// Oracle Proxy ABI (simplified)
const oracleABI = [
{
"inputs": [],
"name": "latestRoundData",
"outputs": [
{"name": "roundId", "type": "uint80"},
{"name": "answer", "type": "int256"},
{"name": "startedAt", "type": "uint256"},
{"name": "updatedAt", "type": "uint256"},
{"name": "answeredInRound", "type": "uint80"}
],
"stateMutability": "view",
"type": "function"
}
];
const oracleAddress = '0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6';
const oracle = new web3.eth.Contract(oracleABI, oracleAddress);
// Get latest price
async function getPrice() {
const result = await oracle.methods.latestRoundData().call();
const price = result.answer / 1e8; // Convert from 8 decimals to USD
console.log(`ETH/USD Price: $${price}`);
return price;
}
getPrice();
Using Ethers.js
const { ethers } = require('ethers');
const provider = new ethers.providers.JsonRpcProvider('https://rpc-core.d-bis.org');
// Oracle Proxy ABI (simplified)
const oracleABI = [
"function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)"
];
const oracleAddress = '0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6';
const oracle = new ethers.Contract(oracleAddress, oracleABI, provider);
// Get latest price
async function getPrice() {
const result = await oracle.latestRoundData();
const price = result.answer.toNumber() / 1e8; // Convert from 8 decimals to USD
console.log(`ETH/USD Price: $${price}`);
return price;
}
getPrice();
🔄 Oracle Publisher Service
The Oracle Publisher service (VMID 3500) automatically updates the Oracle contract with price feeds.
Configuration:
- Service: Oracle Publisher
- VMID: 3500
- Update Interval: 60 seconds
- Price Source: External API (e.g., CoinGecko, CoinMarketCap)
✅ Verification
Check Oracle is Updating
# Query latest round data
cast call 0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 "latestRoundData()" --rpc-url https://rpc-core.d-bis.org
Check Update Frequency
The Oracle should update every 60 seconds (heartbeat). Monitor the updatedAt timestamp to verify.
📚 Additional Resources
- Oracle Contract:
0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6 - Network Config:
docs/METAMASK_NETWORK_CONFIG.json - Token List:
docs/METAMASK_TOKEN_LIST.json
Last Updated: Mon Dec 22 00:17:03 PST 2025