AereOracle at 0xf0A1…F399, multi-reporter median price feed, 8-decimal precision. Every value below is a direct on-chain read.
Connect a wallet to check if it's authorized as a reporter. Authorized reporters can submit price updates for any symbol.
Prices are scaled to 8 decimal places (e.g. 1.00 USD = 100000000). Symbols are bytes32, short ASCII works directly (e.g. AERE/USD).
interface IAereOracle { function getPrice(bytes32 symbol) external view returns (uint128 price, uint64 timestamp, uint256 contributors); } // 8-decimal price contract MyDApp { IAereOracle constant ORACLE = IAereOracle(0xf0A13823A4bFa86358Fe30aaf1f44A36AcbCf399); function aereUsd() external view returns (uint128) { (uint128 p, uint64 t) = ORACLE.getPrice("AERE/USD"); require(block.timestamp - t <= 5 minutes, "stale"); return p; // scaled by 1e8 } }
import { JsonRpcProvider, Contract, encodeBytes32String } from "ethers"; const ro = new JsonRpcProvider("https://rpc.aere.network"); const oracle = new Contract( "0xf0A13823A4bFa86358Fe30aaf1f44A36AcbCf399", ["function getPrice(bytes32) view returns (uint128, uint64, uint256)"], ro); const [price, ts, n] = await oracle.getPrice(encodeBytes32String("AERE/USD")); console.log("AERE/USD =", Number(price) / 1e8, "from", n, "reporters");
from web3 import Web3 w3 = Web3(Web3.HTTPProvider("https://rpc.aere.network")) oracle = w3.eth.contract( address="0xf0A13823A4bFa86358Fe30aaf1f44A36AcbCf399", abi=[{"name":"getPrice","type":"function","stateMutability":"view", "inputs":[{"name":"s","type":"bytes32"}], "outputs":[{"type":"uint128"},{"type":"uint64"},{"type":"uint256"}]}]) sym = b"AERE/USD".ljust(32, b"\\0") price, ts, n = oracle.functions.getPrice(sym).call() print(price/1e8, n)
import { JsonRpcProvider, Wallet, Contract, encodeBytes32String, parseUnits } from "ethers"; const w = new Wallet(process.env.REPORTER_KEY!, new JsonRpcProvider("https://rpc.aere.network")); const oracle = new Contract("0xf0A1…F399", ["function submit(bytes32 symbol, uint128 price)"], w); await oracle.submit(encodeBytes32String("AERE/USD"), parseUnits("1.234", 8)); // Run on a cron, e.g. every 60s, pulling from your data source.
Every authorized reporter can call submit(symbol, price) to record their latest reading. The oracle stores the most recent submission per (symbol, reporter) pair. When a consumer calls getPrice(symbol), the contract:
maxStaleness (default 5 minutes)
Median (rather than mean) makes the feed resistant to a single malicious or malfunctioning reporter publishing extreme values, they're outvoted by the rest. With n reporters, up to ⌊(n-1)/2⌋ can submit garbage without affecting the median, the same fault-tolerance bound as a Byzantine vote.
maxStaleness is owner-configurable between 30 seconds and 1 hour. Any consumer should also enforce its own freshness check after reading getPrice(), never trust a price whose timestamp is older than your application's tolerance.
Symbols are bytes32 identifiers, conventionally short ASCII strings: AERE/USD, BTC/USD, ETH/USD, EUR/USD, etc. Use ethers.encodeBytes32String("AERE/USD") or web3.toBytes(text="AERE/USD").ljust(32, b"\\0") when calling.
Reporter set is permissioned via onlyOwner addReporter(address). Open an issue at git.aere.network/aere-network/aerenew with operator profile, infra description, and price-source attribution. Reporters earn nothing on-chain currently, incentives will arrive via the DAO grant program once governance V2 has flowing budget.