개발자를 위한 문서 / 실물 자산
실물 자산
이 레이어는 가격 레이어입니다. 33개의 피드가 있고 그중 19개가 실물 자산이며, 프로토콜 안에서 발표되고 한 번의 호출로 읽힙니다. 이 페이지는 목록을 얻는 방법이고, 다음 페이지는 가격을 읽는 방법입니다.
존재하는 것
쉬운 말 문서는 세 개의 레이어를 설명합니다. 그중 정확히 하나가 이 저장소에 코드를 갖고 있으며, 이 레퍼런스는 그 하나를 문서화합니다.
| 레이어 | 상태 |
|---|---|
| A price, published in the protocol | built, and documented here33 feeds written by block production into a registry predeploy, with one Chainlink-shaped adapter per feed |
| Exposure to a priced asset | designed, 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 collateral | designed, not present in this repositorywith risk parameters and haircuts. Pickle would admit such a token, not issue one |
그러므로 가격이 있고, 그것을 보유하고 제공하는 컨트랙트가 있습니다. 마진 엔진도, 담보 레지스트리도, 호출할 포지션 컨트랙트도 없습니다. 그것들이 존재하게 되면 의도가 아니라 호출 표면으로서 여기에 문서화될 것입니다.
자산이 아니라 가격
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.
이것은 덧붙인 면책 문구가 아니라 체인이 하는 일에 대한 진술입니다. 레지스트리의 어느 것도 발행자나 수탁자나 준비금을 참조하지 않습니다. 그런 것이 없기 때문입니다. Pickle은 어떤 실물 자산도 발행하지 않고 보유하지 않습니다. AAPL/USD라는 이름의 피드는 그 주식이 다른 곳의 시장에서 얼마에 거래되는지를 서술하는 숫자이며, 이 체인에 발표될 뿐 그 이상이 아닙니다.
자산 목록 얻기
세 가지 방법이 있고, 첫 번째가 거의 언제나 옳은 방법입니다. ABI도, 주소도, 키도 필요하지 않습니다.
| 경로 | 호출 |
|---|---|
| Over JSON-RPC | pickle_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 contract | feedCount() 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 source | oracle/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 input | oracle/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 |
# 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은 네트워크 파라미터에 있는 엔드포인트입니다. 답에는 blockNumber, timestamp, 그리고 레지스트리가 지목하는 publisher와 owner도 실려 옵니다 - 방금 읽은 것을 누가 쓸 수 있었는지 알고 싶다면 그것들을 읽으십시오.
아래의 제네시스 집합은 체인이 태어날 때 갖고 있던 것입니다. 피드는 나중에 owner 역할이 추가할 수 있으므로, 목록을 하드코딩한 클라이언트는 그것을 놓칩니다. 레지스트리를 페이징하거나 pickle_prices를 부르고 그 답에서 작업하십시오.
33개의 피드
| 자산 분류 | 개수 |
|---|---|
| crypto | 14 feedsclass 1. ETH, BTC, SOL, XRP, DOGE, LINK, ADA, XLM, BCH, TRX, BNB, HYPE, ZEC, XMR - all quoted in USD |
| equity | 9 feedsclass 2. AAPL, MSFT, NVDA, AMZN, GOOGL, META, TSLA, SPY, JPM |
| commodity | 2 feedsclass 3. XAU/USD and XAG/USD - gold and silver |
| fx | 5 feedsclass 4. EUR/USD, GBP/USD, USD/JPY, USD/CHF, USD/CNH |
| index | 3 feedsclass 5. PYTHOIL/USD, BRENT/USD, NATGAS/USD - energy indices, which trade around the clock |
33개 중 19개가 실물 자산입니다. 운영상 중요한 구분은 다른 것입니다. 13개 피드는 현물 거래소가 뒷받침하고, 20개는 Pyth에서만 옵니다 - 즉 모든 실물 자산 피드에 거래소 다리가 없는 유일한 암호화폐 페어 XMR/USD를 더한 것입니다.
| 심볼 | 분류 | 소스 | 발표 정책 | 시장 |
|---|---|---|---|---|
| ETH/USD | 암호화폐 | 거래소 5곳 + Pyth | everyBlock | 항상 개장 |
| BTC/USD | 암호화폐 | 거래소 5곳 + Pyth | everyBlock | 항상 개장 |
| SOL/USD | 암호화폐 | 거래소 5곳 + Pyth | everyBlock | 항상 개장 |
| XRP/USD | 암호화폐 | 거래소 5곳 + Pyth | everyBlock | 항상 개장 |
| DOGE/USD | 암호화폐 | 거래소 5곳 + Pyth | everyBlock | 항상 개장 |
| LINK/USD | 암호화폐 | 거래소 5곳 + Pyth | everyBlock | 항상 개장 |
| ADA/USD | 암호화폐 | 거래소 5곳 + Pyth | 10 bps / 60 s | 항상 개장 |
| XLM/USD | 암호화폐 | 거래소 5곳 + Pyth | 10 bps / 60 s | 항상 개장 |
| BCH/USD | 암호화폐 | 거래소 5곳 + Pyth | 10 bps / 60 s | 항상 개장 |
| TRX/USD | 암호화폐 | 거래소 5곳 + Pyth | 10 bps / 60 s | 항상 개장 |
| BNB/USD | 암호화폐 | 거래소 5곳 + Pyth | everyBlock | 항상 개장 |
| HYPE/USD | 암호화폐 | 거래소 5곳 + Pyth | everyBlock | 항상 개장 |
| ZEC/USD | 암호화폐 | 거래소 5곳 + Pyth | 10 bps / 60 s | 항상 개장 |
| XMR/USD | 암호화폐 | Pyth만 | 10 bps / 60 s | 항상 개장 |
| AAPL/USD | 주식 | Pyth만 | everyBlock | NYSE 개장 시간 |
| MSFT/USD | 주식 | Pyth만 | 10 bps / 300 s | NYSE 개장 시간 |
| NVDA/USD | 주식 | Pyth만 | everyBlock | NYSE 개장 시간 |
| AMZN/USD | 주식 | Pyth만 | everyBlock | NYSE 개장 시간 |
| GOOGL/USD | 주식 | Pyth만 | 10 bps / 300 s | NYSE 개장 시간 |
| META/USD | 주식 | Pyth만 | everyBlock | NYSE 개장 시간 |
| TSLA/USD | 주식 | Pyth만 | everyBlock | NYSE 개장 시간 |
| SPY/USD | 주식 | Pyth만 | 10 bps / 300 s | NYSE 개장 시간 |
| JPM/USD | 주식 | Pyth만 | 10 bps / 300 s | NYSE 개장 시간 |
| XAU/USD | 원자재 | Pyth만 | everyBlock | 일일 휴장이 있는 세션 |
| XAG/USD | 원자재 | Pyth만 | 5 bps / 300 s | 일일 휴장이 있는 세션 |
| PYTHOIL/USD | 지수 | Pyth만 | 10 bps / 300 s | 항상 개장 |
| BRENT/USD | 지수 | Pyth만 | 10 bps / 300 s | 항상 개장 |
| NATGAS/USD | 지수 | Pyth만 | 10 bps / 300 s | 항상 개장 |
| EUR/USD | 외환 | Pyth만 | 2 bps / 300 s | 외환 주간 |
| GBP/USD | 외환 | Pyth만 | 2 bps / 300 s | 외환 주간 |
| USD/JPY | 외환 | Pyth만 | 2 bps / 300 s | 외환 주간 |
| USD/CHF | 외환 | Pyth만 | 2 bps / 300 s | 외환 주간 |
| USD/CNH | 외환 | Pyth만 | 2 bps / 300 s | 일일 휴장이 있는 세션 |
- 거래소 5곳 + Pyth. five spot venues, with a Pyth feed alongside as a cross-check and a stand-in
- Pyth만. Pyth only - no venue is listed for this feed, so an absent Pyth credential leaves it unpublished
시장 열: 항상 개장 - open every day, all day; NYSE 개장 시간 - 09:30-16:00 New York, Monday to Friday, with the exchange holiday list; 외환 주간 - continuous Monday to Friday afternoon New York, closed Saturday, reopening Sunday evening; 일일 휴장이 있는 세션 - a nearly-continuous session with a daily break and a closed Saturday. 그 일정들은 시장 개장 시간에서 다루며, 그것을 다루는 일은 선택이 아닙니다.
서른세 개가 아니라 다섯 개의 발표 정책
| 정책 | 피드 |
|---|---|
| everyBlock, no step cap | ETH/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 cap | AAPL/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 s | the 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 bps | the 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 bps | XAG/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 bps | the 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 |
가장 자주 잘못 읽히는 행은 스텝 상한입니다. 모든 암호화폐 피드에서는 0이고 따라서 꺼져 있으며, 모든 실물 자산 피드에서는 살아 있습니다 - 그래서 한 걸음에 상한보다 멀리 움직이는 실물 자산 업데이트는 같은 업데이트에서 시장 상태가 바뀌지 않는 한 기록되는 대신 컨트랙트가 건너뜁니다. 그 예외가 주말의 갭이 착지할 수 있게 하는 것입니다.
피드 레코드가 담는 것
| 필드 | 제네시스 집합에서의 값 |
|---|---|
| symbol | BASE/QUOTE^[A-Z0-9.]+/[A-Z]+$, at most 32 bytes, unique. The contract enforces the same shape |
| description | free textthe Chainlink-style spaced form, "ETH / USD"; description() returns it and symbol() returns the canonical one |
| assetClass | crypto | equity | commodity | fx | indexstored as 1-5 |
| decimals | 8every feed in the catalog. The field allows 0-18, so read it rather than assuming |
| capacity | ring 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 |
| policy | paused | everyBlock | deviationstored as 0, 1, 2. A paused feed is skipped rather than refused |
| deviationBps | 10, 5 or 2the move that triggers a republish. 0 on an everyBlock feed, which needs no trigger |
| heartbeatSecs | 60 or 300republish even without a move. 0 on an everyBlock feed |
| maxStepBps | 0, 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 |
| minSources | 3 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 |
같은 필드들이 온체인에서 그 피드의 설정이므로, pickle_prices나 feeds(offset, limit)에서 읽는 것은 이 레코드에 최신 라운드를 더한 것입니다. decimals는 오늘 모든 피드에서 8이고 필드는 0에서 18까지 허용합니다. 가정하지 말고 읽으십시오. 틀렸을 때의 대가가 여덟 자릿수만큼 어긋난 가격이기 때문입니다.
피드 id
피드는 인덱스도 주소도 아니라 자기 심볼의 해시로 키잉됩니다.
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.
주소 해석하기
이 레퍼런스는 어떤 컨트랙트 주소도 찍지 않습니다
레지스트리와 피드별 어댑터는 체인이 사는 내내 제네시스에 고정된 정식 사전 배포이며, 그것이야말로 리터럴을 공개하는 것이 가장 나쁜 경우입니다. 코드가 없는 계정으로 향하는 EVM CALL은 성공합니다. 잘못 입력한 주소는 revert하지 않고 아무것도 돌려주지 않으며 0이라는 가격으로 읽힙니다. 그래서 이 사이트는 대신 해석 메커니즘을 문서화합니다.
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.
# 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.