Skip to content

Latest commit

 

History

History

oracle

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

SteemVM oracle clients

Three interchangeable implementations of the same validator oracle duties — pick the language you're comfortable operating. They share one config file and are mutually exclusive: run exactly one at a time per validator (they'd race on the same signing key and scan cursor otherwise).

Client Directory Status
Go go/ Reference implementation
Python python/ See python/README.md
JS / Node js/ See js/README.md

What they do

Each client performs the full validator oracle duty set:

  1. Bridge attestation — scans Steem for gateway transfers and payouts, submits MsgAttestDeposit / MsgAttestWithdrawalPayout / MsgSubmitNameRegistration to SteemVM.
  2. Price feed — sources STEEM/USD_External + SBD/USD_External from CoinMarketCap or CoinGecko (operator-selected via ORACLE_PRICE_SOURCE) and STEEM/SBD_Internal + Price_Feed (Steem's own witness-median feed price) from the same Steem RPC node, and runs the commit-reveal MsgAggregateExchangeRatePrevote / MsgAggregateExchangeRateVote cycle.

See Instructions/ORACLE_COMMANDS.md for the manual steemvmd tx ... equivalents (useful for one-off attestation or debugging without running a client), and PROTOCOL.md for the exact signing/hashing/formatting rules every client implements — read that first if you're porting this to a fourth language.

Running one

cp oracle/.env.example oracle/.env    # then edit oracle/.env
docker compose --profile go up -d       # or: --profile python / --profile js

Never bring up more than one profile at once against the same validator key.