Für Entwickler / Reale Vermögenswerte

Reale Vermögenswerte

Die Schicht ist eine Preisschicht. 33 Feeds, 19 davon reale Vermögenswerte, innerhalb des Protokolls veröffentlicht und mit einem Aufruf lesbar. Diese Seite zeigt, wie Sie die Liste bekommen; die nächste, wie Sie einen Preis lesen.

Was existiert

Die Dokumentation in klarer Sprache beschreibt drei Schichten. Genau eine davon hat Code in diesem Repository, und diese Referenz dokumentiert diese eine.

SchichtStand
A price, published in the protocolbuilt, and documented here33 feeds written by block production into a registry predeploy, with one Chainlink-shaped adapter per feed
Exposure to a priced assetdesigned, not present in this repositorya margin system denominated by a feed, with crypto collateral and crypto settlement. There is no contract to call
A registry admitting third-party tokenised assets as collateraldesigned, not present in this repositorywith risk parameters and haircuts. Pickle would admit such a token, not issue one

Also: Es gibt Preise, und es gibt Contracts, die sie halten und ausliefern. Es gibt keine Margin-Maschine, kein Sicherheitenregister und keinen Positions-Contract zum Aufrufen. Wenn es die gibt, werden sie hier als Aufrufoberflächen dokumentiert, nicht als Absichten.

Ein Preis, nicht der Vermögenswert

A feed is the PRICE of a real-world asset. It is not the asset.

The chain publishes a number describing what something trades at somewhere else. It issues no tokenised share, holds no underlying instrument, offers no redemption and keeps no custody. Exposure measured against one of these prices is a claim on a margin system, not on an issuer, and this reference does not call it a tokenised asset. Nothing about a feed confers a shareholder right, and there is nothing to redeem.

Name it accordingly in your own interface. A contract reading XAU/USD is reading the price of gold; it is not holding gold, and a user who reads otherwise has been told something untrue.

Das ist eine Aussage darüber, was die Chain tut, kein daran geschraubter Haftungsausschluss. Nichts im Register verweist auf einen Emittenten, einen Verwahrer oder eine Reserve, denn es gibt keine: Pickle gibt keinen realen Vermögenswert aus und hält keinen. Ein Feed namens AAPL/USD ist eine Zahl, die beschreibt, wozu diese Aktie auf einem Markt anderswo gehandelt wird, auf dieser Chain veröffentlicht und nichts weiter.

Die Vermögensliste bekommen

Drei Wege, und der erste ist fast immer der richtige. Er braucht keine ABI, keine Adresse und keinen Schlüssel.

WegAufruf
Over JSON-RPCpickle_pricesno params. Answers the whole registry: every feed with its symbol, feedId, adapter, decimals, class, policy, latest answer and age. One call, no ABI, no address
From a contractfeedCount() then feeds(offset, limit)on the price registry. limit is capped at 256; an offset past the end returns an empty array rather than reverting, so a reader can page blindly
From the sourceoracle/catalog.jsonthe live feed set in the repository: what the oracle service prints and what l2-feeds-init (scripts/sync-feeds.sh) reconciles the registry to. The authority for what the chain should hold after a sync, not proof of what it holds now
The genesis inputoracle/catalog-genesis.jsonthe frozen copy the genesis allocation was generated from, and the authority for what the chain was born with. It is never edited on its own: a change to it is a genesis regeneration, a new chain
bash
# Every feed the chain carries, with its adapter, decimals, answer and age.
curl -s $RPC_URL \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"pickle_prices","params":[]}' \
  | jq '.result.feeds[] | {symbol, feedId, adapter, decimals, price, statusName, staleOnchain}'

# The count alone, when you only want to know whether the catalog changed.
curl -s $RPC_URL \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"pickle_prices","params":[]}' \
  | jq '.result.feeds | length'

$RPC_URL ist der Endpunkt aus den Netzwerkparametern. Die Antwort trägt außerdem blockNumber, timestamp sowie den publisher und den owner, die das Register nennt - lesen Sie die, wenn Sie wissen wollen, wer hätte schreiben können, was Sie gerade gelesen haben.

Der Katalog ist Zustand des Registers, keine Konstante

Die Genesis-Menge unten ist das, womit die Chain geboren wurde. Feeds können nachträglich durch die Owner-Rolle hinzugefügt werden, ein Client, der die Liste fest verdrahtet, verpasst sie also. Blättern Sie durch das Register oder rufen Sie pickle_prices auf und arbeiten Sie mit der Antwort.

Die 33 Feeds

AnlageklasseAnzahl
crypto14 feedsclass 1. ETH, BTC, SOL, XRP, DOGE, LINK, ADA, XLM, BCH, TRX, BNB, HYPE, ZEC, XMR - all quoted in USD
equity9 feedsclass 2. AAPL, MSFT, NVDA, AMZN, GOOGL, META, TSLA, SPY, JPM
commodity2 feedsclass 3. XAU/USD and XAG/USD - gold and silver
fx5 feedsclass 4. EUR/USD, GBP/USD, USD/JPY, USD/CHF, USD/CNH
index3 feedsclass 5. PYTHOIL/USD, BRENT/USD, NATGAS/USD - energy indices, which trade around the clock

19 der 33 sind reale Vermögenswerte. Die im Betrieb entscheidende Aufteilung ist eine andere: 13 Feeds sind durch Spot-Handelsplätze gestützt und 20 kommen allein von Pyth - das ist jeder Feed auf einen realen Vermögenswert plus XMR/USD, das eine Krypto-Paar ohne Handelsplatz-Bein.

SymbolKlasseQuellenVeröffentlichungsregelMarkt
ETH/USDKrypto5 Handelsplätze + PytheveryBlockimmer offen
BTC/USDKrypto5 Handelsplätze + PytheveryBlockimmer offen
SOL/USDKrypto5 Handelsplätze + PytheveryBlockimmer offen
XRP/USDKrypto5 Handelsplätze + PytheveryBlockimmer offen
DOGE/USDKrypto5 Handelsplätze + PytheveryBlockimmer offen
LINK/USDKrypto5 Handelsplätze + PytheveryBlockimmer offen
ADA/USDKrypto5 Handelsplätze + Pyth10 bps / 60 simmer offen
XLM/USDKrypto5 Handelsplätze + Pyth10 bps / 60 simmer offen
BCH/USDKrypto5 Handelsplätze + Pyth10 bps / 60 simmer offen
TRX/USDKrypto5 Handelsplätze + Pyth10 bps / 60 simmer offen
BNB/USDKrypto5 Handelsplätze + PytheveryBlockimmer offen
HYPE/USDKrypto5 Handelsplätze + PytheveryBlockimmer offen
ZEC/USDKrypto5 Handelsplätze + Pyth10 bps / 60 simmer offen
XMR/USDKryptonur Pyth10 bps / 60 simmer offen
AAPL/USDAktiennur PytheveryBlockNYSE-Zeiten
MSFT/USDAktiennur Pyth10 bps / 300 sNYSE-Zeiten
NVDA/USDAktiennur PytheveryBlockNYSE-Zeiten
AMZN/USDAktiennur PytheveryBlockNYSE-Zeiten
GOOGL/USDAktiennur Pyth10 bps / 300 sNYSE-Zeiten
META/USDAktiennur PytheveryBlockNYSE-Zeiten
TSLA/USDAktiennur PytheveryBlockNYSE-Zeiten
SPY/USDAktiennur Pyth10 bps / 300 sNYSE-Zeiten
JPM/USDAktiennur Pyth10 bps / 300 sNYSE-Zeiten
XAU/USDRohstoffenur PytheveryBlockSitzung mit täglicher Pause
XAG/USDRohstoffenur Pyth5 bps / 300 sSitzung mit täglicher Pause
PYTHOIL/USDIndexnur Pyth10 bps / 300 simmer offen
BRENT/USDIndexnur Pyth10 bps / 300 simmer offen
NATGAS/USDIndexnur Pyth10 bps / 300 simmer offen
EUR/USDDevisennur Pyth2 bps / 300 sDevisenwoche
GBP/USDDevisennur Pyth2 bps / 300 sDevisenwoche
USD/JPYDevisennur Pyth2 bps / 300 sDevisenwoche
USD/CHFDevisennur Pyth2 bps / 300 sDevisenwoche
USD/CNHDevisennur Pyth2 bps / 300 sSitzung mit täglicher Pause
  • 5 Handelsplätze + Pyth. five spot venues, with a Pyth feed alongside as a cross-check and a stand-in
  • Nur Pyth. Pyth only - no venue is listed for this feed, so an absent Pyth credential leaves it unpublished

Spalte Markt: immer offen - open every day, all day; NYSE-Zeiten - 09:30-16:00 New York, Monday to Friday, with the exchange holiday list; Devisenwoche - continuous Monday to Friday afternoon New York, closed Saturday, reopening Sunday evening; Sitzung mit täglicher Pause - a nearly-continuous session with a daily break and a closed Saturday. Die Zeitpläne sind das Thema der Handelszeiten, und sie zu behandeln ist nicht optional.

Fünf Veröffentlichungsregeln, nicht dreiunddreißig

RegelFeeds
everyBlock, no step capETH/USD, BTC/USD, SOL/USD, XRP/USD, DOGE/USD, LINK/USD, BNB/USD, HYPE/USDwritten on every EVM block the publisher can fill. No deviation trigger, no heartbeat, no step cap - the whole crypto class carries a step cap of 0 whether or not it is on this policy. Ring capacity 16,384 for ETH/USD and BTC/USD, 1,024 for the other six
everyBlock, with step capAAPL/USD, NVDA/USD, AMZN/USD, META/USD, TSLA/USD, XAU/USDthe six real-world feeds moved onto everyBlock still carry their class's step cap (2,000 bps for the equities, 1,000 bps for gold), so a move wider than that is skipped unless the market status changed in the same update. Ring capacity 1,024
10 bps / 60 sthe other 6 crypto feedsrepublished on a 10 bps move or after 60 s, whichever is first. No step cap. Ring capacity 1,024
10 bps / 300 s, step 2,000 bpsthe 4 remaining equities and the 3 energy indicesa move wider than 20 % is skipped by the contract unless the market status changed in the same update
5 bps / 300 s, step 1,000 bpsXAG/USDthe metal moves less, so the trigger is tighter and the implausible-move cap is 10 %. XAU/USD kept the same trigger shape until it moved to everyBlock
2 bps / 300 s, step 500 bpsthe 5 FX pairsthe tightest trigger in the set, and a 5 % cap - an FX pair that moves further in one update is not moving, it is wrong

Die Schrittobergrenze ist die Zeile, die am häufigsten falsch gelesen wird. Sie ist 0 und damit abgeschaltet auf jedem Krypto-Feed, und aktiv auf jedem Feed auf einen realen Vermögenswert - eine Aktualisierung eines realen Feeds, die sich in einem Schritt weiter bewegt als die Obergrenze, wird also vom Contract übersprungen statt geschrieben, es sei denn, der Marktstatus hat sich in derselben Aktualisierung geändert. Diese Ausnahme ist das, was eine Wochenendlücke landen lässt.

Was ein Feed-Eintrag trägt

FeldWert in der Genesis-Menge
symbolBASE/QUOTE^[A-Z0-9.]+/[A-Z]+$, at most 32 bytes, unique. The contract enforces the same shape
descriptionfree textthe Chainlink-style spaced form, "ETH / USD"; description() returns it and symbol() returns the canonical one
assetClasscrypto | equity | commodity | fx | indexstored as 1-5
decimals8every feed in the catalog. The field allows 0-18, so read it rather than assuming
capacityring length in rounds16,384 for ETH/USD and BTC/USD, 1,024 for every other feed - including the twelve other feeds now on everyBlock. Rounds older than this are overwritten
policypaused | everyBlock | deviationstored as 0, 1, 2. A paused feed is skipped rather than refused
deviationBps10, 5 or 2the move that triggers a republish. 0 on an everyBlock feed, which needs no trigger
heartbeatSecs60 or 300republish even without a move. 0 on an everyBlock feed
maxStepBps0, 500, 1,000 or 2,000the contract skips a move wider than this. 0 disables the check and is what every crypto feed carries; every real-world feed has it live. Bypassed whenever the status changed
minSources3 on an exchange-backed feed, 1 on a Pyth-only feedthe floor below which nothing is published
sources{ exchanges: {venue: productId}, pyth: id }the venue-native product id per venue, and the Pyth feed id without its 0x

Dieselben Felder sind die Konfiguration des Feeds on-chain, was Sie also aus pickle_prices oder aus feeds(offset, limit) lesen, ist dieser Eintrag plus die jüngste Runde. decimals ist heute auf jedem Feed 8, und das Feld erlaubt 0 bis 18: Lesen Sie es, statt es anzunehmen, denn der Preis eines Irrtums ist ein Preis, der um acht Größenordnungen danebenliegt.

Feed-IDs

Ein Feed wird über einen Hash seines Symbols geschlüsselt, nicht über einen Index und nicht über eine Adresse:

solidity
bytes32 feedId = keccak256(bytes("ETH/USD"));

The canonical symbol, upper case, with a single slash - keccak256("ETH/USD"), not "ETH-USD" and not "eth/usd". The same 32 bytes key the contract's mappings, name the feed on the RPC, and appear as the indexed topic of every FeedUpdated log. You can compute it offline with any keccak-256 implementation; nothing has to be fetched to know it.

The node and the service both accept ETH/USD, ETH-USD, eth-usd or 0x<64 hex feed id and normalise before looking up, so a URL-safe spelling costs nothing.

Die Adressen auflösen

Diese Referenz druckt keine Contract-Adresse

Das Register und die Adapter pro Feed sind kanonische Predeploys, bei der Genesis für die Lebensdauer der Chain festgelegt - und das ist genau der Fall, in dem das Drucken des Literals am schlimmsten ist. Ein EVM-CALL an ein Konto ohne Code gelingt: Eine vertippte Adresse revertet nicht, sie gibt nichts zurück und liest sich als Preis von null. Diese Website dokumentiert deshalb stattdessen den Auflösungsmechanismus.

The price registry and one adapter per feed are predeploys: their addresses are fixed at genesis and canonical for the life of the chain. That is precisely why this reference resolves them instead of printing them.

  • pickle_prices answers with the registry's address in core and each feed's adapter in feeds[].adapter, checksummed. That is the shortest path and it needs no ABI.
  • pickle_price(feed) carries that feed's adapter; pickle_ethUsdPrice carries the adapter, the registry and, under contract, the adapter again, which is what a Chainlink reader should be pointed at.
  • On chain, adapterOf(feedId) returns the deployed adapter and adapterAddress(feedId) recomputes it: the adapter is CREATE2 from the registry with salt = feedId, so its address is a pure function of the registry address and the symbol.
  • The first-party applications resolve every address they use at runtime rather than compiling one in - shared-ui/config.js merges the deployment's address files into config.addresses at load.
  • The explorer shows that address as an account, with its code and its activity, which is the human-readable cross-check that something is deployed there. It publishes no source and no ABI: the repository is not public yet, and the explorer verifies no contract.
bash
# The registry and one feed's adapter, resolved from the chain itself.
curl -s $RPC_URL \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"pickle_price","params":["ETH-USD"]}' \
  | jq '{adapter: .result.adapter, feedId: .result.feedId}'

# Then prove the address has code before you call it.
curl -s $RPC_URL \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_getCode","params":["<adapter>","latest"]}'

Verify a resolved address with an eth_getCode before your first call. A CALL to an account with no code succeeds and returns nothing, so a wrong address does not revert - it reads as a price of zero.