Pixa
GitHub

Oracle and Price Feed

Status: Live

PXS promises no price. 21 witnesses publish its feed, each with its own Big Mac and its own reading of the market: on 2026-11-03 their feeds ranged from 31.731 to 70.792 PIXA per PXS. Seven still published placeholder values, and the median that conversions use, 51.000, rested on them. Read at block 1,722,911.

PXS promises no price. What the chain has instead is a reference: the witnesses' statement of how many PIXA one Big Mac costs. The PXS design notes call this sensing part the Oracle (Glossary). This page explains what a feed states, how the feed software arrives at it, how the chain reduces many feeds to one median, how fast that median can move, what it reads today, and what it cannot do.

What a feed states

A feed is a price that a witness publishes with the feed_publish operation: one PXS against a number of PIXA.

PIXA per PXS = price of one Big Mac ÷ value of one PIXA, both in the Big Mac's currency

No currency is privileged. The feed software prices the Big Mac in the currency of the country where the witness runs, values PIXA on a market in whatever currency that market quotes, and converts the PIXA value into the Big Mac's currency at the day's rate. The currency then cancels out: what remains is a ratio of a Big Mac to PIXA, and routing it through the dollar, the franc or the euro gives the same number.

Three readings made with bigmac-feed v1.3.0 on 2026-11-03, between 08:49 and 08:58 UTC, from the same order book (below):

Where the witness runs Big Mac, July 2026 survey One PIXA, in that currency Feed
United States 6.22 USD 0.138513 USDT, counted as USD 44.906 PIXA per PXS
Switzerland 7.30 CHF 0.138513 USD × 0.81963 = 0.113529 CHF 64.301 PIXA per PXS
Japan 500 JPY 0.138513 USD × 157.9 = 21.8712 JPY 22.861 PIXA per PXS

The three differ because a Big Mac does not cost the same everywhere once its local prices are compared at market exchange rates, which is what The Economist's index measures. The chain's median then orients PXS toward the middle of the Big Macs its witnesses report: a median across places as well as across reporters (below).

In hived the field is Hive's hbd_exchange_rate. The public API shows it as pxs_exchange_rate (field renames).

How the feed values PIXA

PIXA has traded on one market since 2026-10-15, the PIXA/USDT pair on Coinstore (PIXAUSDT), and that is the market the feed software reads by default. The market is thin: on 2026-11-01 and 2026-11-02 together, 28.41 PIXA changed hands.

The last trade is not a price. On a thin book, one small order can print far from where buyers and sellers stand. On the morning of 2026-11-03 the last trade was still a sale of 1 PIXA at 0.100 USDT, made the evening before at 20:07 UTC, while the best bid was 0.1349 and the best ask 0.142. On 2026-10-30 a 1-PIXA sale printed at 0.0367 against a book at 0.1339 and 0.145 (README). A feed that follows the last trade lets anyone move it for a few cents.

Since v1.3.0 the feed reads the order book instead and values PIXA at its fair value (market.go:19-36):

  1. Impact prices. The average price of selling 1,000 PIXA (--impact-size) into the bids, and of buying as many from the asks. If a side holds less, the feed uses what that side holds. A dust order at the top of the book barely counts (market.go:105-118).
  2. Impact mid. The average of the two impact prices.
  3. Held within the spread. The impact mid is held between the best bid and the best ask, since a fair price outside them could be traded against at once. This also keeps a thin side, such as a few asks far above the market, from dragging the value away (market.go:79-101).

The book must hold orders on both sides and must not be crossed, and its spread must be at most 25% of the mid (--max-spread). Otherwise the market gives no fair value. With several markets (--pair, repeatable), each is converted into the Big Mac's currency and the median is used.

A worked reading. On 2026-11-03 between 08:49 and 08:58 UTC, selling 1,000 PIXA into the bids averaged 0.13402 USDT and buying 1,000 from the asks averaged 0.143006. Their mean, 0.138513, lies between the best bid and the best ask, so it is the fair value. The spread was 5.1% of the mid.

When no market gives a fair value, the feed publishes nothing that round, and the chain keeps the witness's previous feed for up to 7 days. A witness may set --token-price as a placeholder for that case; it is off by default (main.go:157-172).

Where the Big Mac comes from

Input Where it comes from Default
Price of a Big Mac In order of priority: a price the witness declares (--bigmac-price="7.30 CHF"); a country it names (--country=CH); the country of the server's public address, looked up once at start-up; the United States if that look-up fails. A country's price is its local price in the latest survey of The Economist's index. The server's country, July 2026 survey
Value of PIXA The fair value of one or more order books; the median if several coinstore:PIXAUSDT
Currency conversion Only when the two currencies differ: the European Central Bank's reference rates through Frankfurter, about 30 currencies, and ExchangeRate-API for the others, such as ARS, EGP or VND. A token that tracks a currency counts as that currency: USDT as USD, EURC as EUR, XCHF as CHF. If both sources are down, the last good rate is reused for up to 96 hours. Both sources; neither needs a key
  • The euro area. The index has one row for it, priced in EUR, and every member country uses that row (bigmac.go:29-55).
  • A country missing from the latest survey. A detected country falls back to the US price; a country named with --country makes the round fail (bigmac.go:161-174).
  • A new edition of the index. The default file is the July 2026 edition (bigmac.go:18-24). A later edition reaches a witness through a new release of the software or the --bigmac-url setting.
  • A declared price cannot be checked. A witness that states the Big Mac it pays states something no one else can verify on chain. The median limits what one such statement can do.

From the witnesses' feeds to the median

Once an hour, every 1,200 blocks, the chain does the following (database.cpp:2418-2533). The numbers are on Chain Parameters.

  1. Collect. It reads the feed of each scheduled witness and skips any feed older than 7 days (2425-2443).
  2. Count. It needs a quorum of the scheduled witnesses to have a current feed. With fewer, it takes no sample that hour, and the median in force stays as it was (2445).
  3. Take the middle feed. It sorts the feeds and keeps the middle one; with an even number, whichever of the two middle feeds names fewer PIXA per PXS. This is the hour's sample (2447-2448).
  4. Keep 84 samples. It adds the sample to the last 84, about 3.5 days, and drops the oldest (2459-2465).
  5. Take the median of the samples. The median of the 84 samples is the median feed that conversions use. The chain also records the lowest and the highest sample (2469-2474).
  6. Check the debt limit. If the PXS outside the treasury is too large against all PIXA, the chain corrects the median: the haircut (Haircut, Corridor and Settlement).

middle feed, once an hour

median

haircut, if the debt limit is passed

Up to 21 witness feeds, each under 7 days old

84 hourly samples

Median feed

Rate used by conversions

Scroll sideways to see the whole diagram.Open full size

The design notes call the two medians variety attenuators: the first, across witnesses, rejects a wrong reporter; the second, across time, rejects a short spike (Variety and Regulation).

How fast it can move

  • One witness can move it only a little. With 21 fresh feeds, the hour's sample is the eleventh from either end. One witness can shift it at most to the next feed above or below. To move it further, at least 11 of the 21 must move.
  • Fewer fresh feeds, fewer deciders. If only 3 witnesses have published in the last 7 days, the sample is the middle of those 3, and any 2 of them decide it.
  • About 42 hours of delay. The median changes only once about half of its 84 samples have changed. A change that every witness makes at once reaches conversions after about 42 hours, and a change that lasts less than that never reaches them.
  • The software adds no brake of its own. bigmac-feed publishes each hour what the book and the index give. Its protections act on what it reads: the fair value cannot leave the spread, a spread wider than 25% gives no value, and a failed input publishes nothing. The superseded agnostic feed also limited each publish to ±50% of the witness's current feed; v1.3.0 has no such limit.

These delays protect conversions from a false or sudden reading. They also mean that a real fall in PIXA's value reaches the median late: for up to about two days after it, conversions still use the older value.

What it reads today

On 2026-11-03 at block 1,722,911, the 21 scheduled witnesses published ten different feeds. The chain records each number, not how it was reached; the groups below follow from the arithmetic and from how each feed moved over the previous two days.

How the feed reads PIXA Witnesses Feeds, PIXA per PXS What the numbers show
A fixed placeholder 7 51.833 (six), 51.000 (one) A US Big Mac in dollars ÷ 0.12 USD; 51.000 still uses the January 2026 survey's 6.12 USD
The last trade 8 62.200 (five), 70.792 (two), 51.731 (one) A Big Mac in dollars ÷ 0.100 USDT, the 1-PIXA sale of the evening before; 62.200 is the US Big Mac. All eight changed together, at each witness's next publish, whenever a new trade printed
The order book 6 31.731, 50.123 (two), 42.056, 42.210, 43.082 31.731 and 50.123 equal what v1.3.0 computed that morning for a Big Mac in Brazil (23.90 BRL) and in the euro area (6.19 EUR). The other three were published between 08:23 and 08:27 UTC. Each of the six had stopped following the last trade or the placeholder between 2026-11-02 16:21 and 2026-11-03 08:27 UTC

The median still rests on the placeholder. The hour's sample is the middle of the 21 feeds, the eleventh, and on 2026-11-03 that was 51.833: the seven identical placeholder feeds sit between the lower order-book readings and the higher last-trade readings. The median in force, 51.000 PIXA per PXS, is the median of the last 84 such samples, and 76 of them are placeholder values, 44 at 51.000 and 32 at 51.833. The lowest and highest samples were 50.136 and 72.057 (condenser_api.get_feed_history).

  • The collateral ratio, the print rate and the haircut are therefore still computed mostly from the placeholder, not from what PIXA fetches on its market.
  • When most scheduled witnesses read the order book, the hour's sample becomes a market reading, and the median follows about 42 hours later (How fast it can move).
  • The readings disagree by more than a factor of two, from 31.731 to 70.792. Part of that is the design, which takes the median of different countries' Big Macs, and part is method: that morning the last trade stood 28% below the order book's fair value.

What it has read since genesis

Until mid-October every change in the feed came from software, not from a market:

When (UTC) Median feed Where it came from
from 2026-09-04 12:00 102.000 Set at genesis by the chain's code, so that PXS amounts had a PIXA value before any witness published (database_init.cpp:433-441). The first witnesses published the same value.
from 2026-09-04 17:39 51.000 6.12 USD ÷ 0.12 USD: the January 2026 edition of the index, through bigmac-feed v1.0.2
from 2026-09-07 12:37 51.833 6.22 USD ÷ 0.12 USD: the July 2026 edition, through v1.0.3
on 2026-11-03 51.000 The median of 84 hourly samples, 76 of them placeholder values (above)

The times in the first three rows are when witnesses began publishing each value. Each of those changes appeared at every witness then publishing within about a minute and a half. The median followed once about half of the samples in its window carried the new value. Since v1.1.0 of the software, released on 2026-10-16, witnesses' feeds can read a market, and they have diverged: on 2026-11-03 the 21 scheduled witnesses published ten different numbers.

The feed software

Witnesses choose their feed software: consensus accepts any price a witness publishes. The witness repository ships bigmac-feed:

Version Released Big Mac PIXA
v1.0.2 2026-09-04 the US price in dollars, January 2026 survey a fixed 0.12 USD
v1.0.3 2026-09-07 the US price in dollars, July 2026 survey a fixed 0.12 USD
v1.1.0 2026-10-16 same the last trade on Coinstore's PIXAUSDT; 0.12 USD only while the pair had not traded
v1.2.0 2026-10-21 the price in the server's country, converted to dollars at the survey's exchange rate the last trade
v1.3.0 2026-10-30 the price in the server's country, or a declared price, in its local currency the order book's fair value, converted at the day's rate; a placeholder only if one is set

The witness repository pinned v1.0.2 with the 0.12 USD placeholder until 2026-10-30, when it moved to the image pixarex/bigmac-feed:v1.3.0 and dropped the placeholder (commit 704a68f). Become a Witness gives the steps.

The agnostic feed is superseded. The separate bigmac-feed-agnostic program, last changed on 2026-09-07, first combined a local Big Mac, market pairings and currency conversion. v1.3.0 brings those into bigmac-feed, reads the order book instead of the last trade, and leaves out two of the agnostic feed's features: the bigmac.json file, replaced by --bigmac-price, and the ±50% limit per publish.

What the design asks that the software does not do:

  • A basket. The notes name "a Big Mac, a coffee". The software reads one good, the Big Mac.
  • No outside feed. The notes say "no external or commercial feed enters the loop". The software reads several outside sources: The Economist's index, an exchange's order book, two exchange-rate services and a service that locates the server. What the design achieves is narrower: the chain accepts no price except the witnesses' own feeds.
  • A replaceable basket, by consensus. The basket lives in each witness's software, not in the chain's rules. A witness can change what it reads without any vote; the median limits what one witness can do with that change.

Who the Oracle answers to

The design calls the Oracle self-referential: stakeholders elect the witnesses, so the network's own stake decides who reports. On 2026-11-03, 21 witnesses were scheduled, and 23 accounts had cast 182 witness votes between them (database_api.list_witness_votes; Decentralization and Safeguards). The feed is as independent as the witnesses are from one another, and as their software is: every order-book reading reads the same book.

What the feed cannot do

If Then
One witness publishes a wrong value It moves the hour's sample at most to the neighbouring feed.
Most witnesses publish a wrong value The median follows after about 42 hours. Stakeholders can vote the witnesses out before that.
Too few witnesses have fresh feeds No new sample is taken; the median freezes at its last value.
A trade prints at an absurd price A feed that reads the last trade follows it. bigmac-feed v1.3.0 does not: it reads the order book.
Someone places small orders far from the market The 1,000-PIXA impact price barely counts them, and the fair value cannot leave the spread.
The order book is thin, one-sided or wider than 25% v1.3.0 finds no fair value and publishes nothing; the chain keeps the witness's previous feed for up to 7 days.
Someone moves the book itself with real orders Every order-book reading moves with it, so the median across witnesses does not filter it. Only the median over 84 hours does, by delaying it about 42 hours.
An outside source fails v1.3.0 publishes nothing that round. A cached exchange rate bridges up to 96 hours, and the witness's last feed stays valid for 7 days.
Placeholder feeds sit in the middle The median stays on placeholder values, whatever the market reads (today).

Read it yourself

Shellrpc() { curl -s -X POST https://api.pixagram.com -H 'Content-Type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"method\":\"$1\",\"params\":$2,\"id\":1}"; }

rpc condenser_api.get_feed_history '[]'          # the 84 samples, the median, the lowest and highest
rpc condenser_api.get_witness_schedule '[]'      # the scheduled witnesses
rpc condenser_api.get_witness_by_account '["rex"]'   # one witness's feed and when it last published

A witness's feed is the pxs_exchange_rate field, and last_pxs_exchange_update is the time it was published.

To see what bigmac-feed v1.3.0 would publish now for a given country, without a key and without broadcasting anything:

Shelldocker run --rm pixarex/bigmac-feed:v1.3.0 --dry-run --once --witness=anyone --country=CH

Inherited → changed

Aspect Steem / Hive Pixa
What a feed states HIVE per HBD, one US dollar PIXA per PXS, one Big Mac
Currency of the reference the US dollar none privileged: each witness prices the Big Mac in its own currency
Feeds needed for a sample 7 a quorum of the scheduled witnesses
Samples in the median 84 hourly samples since Steem's hardfork 16 (2016); 168 before 84
Median at genesis none 102 PIXA per PXS, set by the chain's code
Feed software Each witness's choice, reading exchange prices Each witness's choice; the witness repository ships bigmac-feed v1.3.0, which reads a local Big Mac and the order book's fair value
Where the reference is defined in the witnesses' software same

Sources

  • Code, at commit 48f75a2: the median, database.cpp:2418-2533; the genesis seed, database_init.cpp:433-441; the window and feed age, config.hpp:192-195.
  • Feed software: bigmac-feed v1.3.0 at commit 11f8ad1: README; the fair value, market.go:19-36, 79-101 and 105-118; the Big Mac, bigmac.go:18-24, 29-55, 161-174 and main.go:89-121; currency conversion, fx.go:14-47 and 141-177; the ratio, feed.go:7-59; a round with no fair value, main.go:157-172. Earlier versions: v1.0.2 at c2de164, v1.0.3 at c88c43c, v1.1.0 at b39f3d7, v1.2.0 at 7b03d87. The witness repository's switch: 704a68f.
  • Readings of 2026-11-03, 08:49 to 08:58 UTC: the program built from 11f8ad1, run with --dry-run --once for the United States, Switzerland, Japan, Brazil and the euro area; Coinstore's public order book, trades and daily candles for PIXAUSDT (/api/v1/market/depth/PIXAUSDT, /api/v1/market/trade/PIXAUSDT, /api/v1/market/kline/PIXAUSDT), read in the same minutes; the ECB rates of 2026-11-02, through Frankfurter.
  • Live values, read at block 1,722,911 on 2026-11-03: condenser_api.get_feed_history, condenser_api.get_witness_schedule, condenser_api.get_witnesses_by_vote; the votes, database_api.list_witness_votes.
  • Feed history: condenser_api.get_account_history for each scheduled witness, filtered to feed_publish: from 2026-11-01 to 2026-11-03, read on 2026-11-03; before that, as read on 2026-10-06.
  • The index: The Economist's Big Mac index data.
  • Superseded: bigmac-feed-agnostic at commit 96b9d4a, 2026-09-07.
  • Hive whitepaper, §III.4 "Price Feed Consensus"; Steem whitepaper, March 2016 edition, "Minimizing Fraudulent Feeds".
  • PXS design notes (Pixagram, June 2026), §4.2 and the table of technical parameters.