Oracle and Price Feed
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):
- 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). - Impact mid. The average of the two impact prices.
- 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
--countrymakes 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-urlsetting. - 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.
- Collect. It reads the feed of each scheduled witness and skips any feed older than 7 days (2425-2443).
- 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).
- 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).
- Keep 84 samples. It adds the sample to the last 84, about 3.5 days, and drops the oldest (2459-2465).
- 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).
- 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).
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-feedpublishes 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-feedv1.3.0 at commit11f8ad1: 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 atc2de164, v1.0.3 atc88c43c, v1.1.0 atb39f3d7, v1.2.0 at7b03d87. Thewitnessrepository's switch:704a68f. - Readings of 2026-11-03, 08:49 to 08:58 UTC: the program built from
11f8ad1, run with--dry-run --oncefor the United States, Switzerland, Japan, Brazil and the euro area; Coinstore's public order book, trades and daily candles forPIXAUSDT(/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_historyfor each scheduled witness, filtered tofeed_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-agnosticat commit96b9d4a, 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.