Oracle Network, live state

AereOracle at 0xf0A1…F399, multi-reporter median price feed, 8-decimal precision. Every value below is a direct on-chain read.

Registered reporters
,
Active symbols
,
Max staleness
,
Decimals
,
Loading on-chain state…
Why isn't AERE/USD published? AERE has no CEX listing yet, and the only on-chain pool today is a 105-AERE demo seed, that is not a market price. We will only publish AERE/USD once there is real market liquidity (CEX order books, or a deep DEX pool whose price is set by arbitrage flow). The oracle is honest data only.
Loading symbols…
#
Address
Last submission
Submissions
Status
Loading reporters…

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).

Wallet not connected.

Solidity (read in your contract)

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
  }
}

JS / TypeScript (ethers v6)

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");

Python (web3.py)

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)

Reporter operator (write submissions)

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.

Median consensus

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:

  1. Iterates every reporter's submission for that symbol
  2. Drops any submission older than maxStaleness (default 5 minutes)
  3. Sorts the remaining values and returns the median as the canonical price
  4. Returns the newest contributor timestamp + count

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.

Staleness window

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.

Symbol naming

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.

Become a reporter

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.