# Welcome to Stork

Welcome to Stork!

Stork is an oracle protocol that enables ultra-low latency connections between data providers and both on-chain and off-chain applications. The most common use case for Stork is pulling and consuming market data in the form of real-time price feeds for DeFi.

The core technical principles of Stork are:

* Modularity
* Low latency / high throughput
* Cost efficiency
* Arbitrary data support
* Transparency, verifiability, and security

Stork is implemented as a [pull oracle](/introduction/core-concepts#docs-internal-guid-4b312e7b-7fff-1147-c04b-bbaadec1a82a) and supports automated on-chain delivery. Stork continuously aggregates, verifies, and audits data from trusted publishers, and makes that aggregated data available at sub-second latency and frequency. This data can then be pulled into any on or off-chain application as often as needed.

Stork was created with the principle of trustlessness in mind. As such, all data inputs and outputs to Stork are cryptographically verifiable. This includes the underlying publisher data as well as Stork’s aggregated results. Stork currently supports 500+ assets on 70+ chains, including[ EVM](/resources/contract-addresses/evm) chains, [Solana](/resources/contract-addresses/solana), [Sui](/resources/contract-addresses/sui), [Aptos](/resources/contract-addresses/aptos), and [more](/resources/contract-addresses), and is easily deployed on any other chain not yet supported.

Chain deployments and asset additions are available upon request. For a complete list of supported chains, see the [Contract Addresses](/resources/contract-addresses) page. For a complete list of supported assets, see the [Asset ID Registry](/resources/asset-id-registry) page.

To learn more about how Stork works, visit [Core Concepts](/introduction/core-concepts) and [How It Works](/introduction/how-it-works).

{% hint style="info" %}
Interested? Contact Stork Labs to determine appropriate feeds that meet your requirements. <sales@stork.network> or [X (formerly Twitter) DMs](https://x.com/StorkOracle) open.
{% endhint %}


# Core Concepts

Understanding oracle models, Stork-specific data primitives, and Stork's advantages.

## Push vs Pull Oracles <a href="#docs-internal-guid-4b312e7b-7fff-1147-c04b-bbaadec1a82a" id="docs-internal-guid-4b312e7b-7fff-1147-c04b-bbaadec1a82a"></a>

Oracles are essential for providing on-chain applications access to off-chain data. Push and pull are the two primary oracle models in use across blockchains. From price and derivatives feeds for DeFi, to weather data for insurance, or outcomes of real-world events for prediction markets, data from oracles is critical to the existence of many of the most popular decentralized apps.

Stork's implementation of the pull oracle is exemplified by the following attributes:

* Update Frequency — Pull oracles allow for updates as often as needed.
* Latency — Because the update can happen whenever needed, the price age or latency is reduced from minutes to milliseconds.
* Efficiency — Without the need to continuously push unused data, pull oracles achieve much better gas (cost) efficiency.
* Ease of use — Whereas push oracles introduce reliance on the oracle provider to get data on-chain, pull oracles allow anyone to put data on chain without having to rely on the provider.

### Push Oracles

The older of the two oracle models, push oracles operate by periodically pushing data onto the blockchain in regular intervals, often called 'heartbeats'. This data is submitted to the oracle contract on-chain where it is then stored for use in other smart contracts. This method ensures that a continuous and predictable flow of data is present on-chain, however offers little in the way of flexibility. Furthermore, they are considered inefficient due to the inevitable periods of time where data is being pushed on-chain but going unused between updates. The heartbeat of data in a traditional push oracle also does not allow for scaling the frequency of updates to the demand of many real time applications, resulting in data that can become too stale to be useful. Due to the gas fees associated with putting data on-chain, push oracles often operate on very slow heartbeats (ex: 1-2 updates per hour) to conserve gas fees and remain economically viable.

### Pull Oracles

Originally called a hybrid oracle, Stork created the pull oracle model as an answer to the issues with push oracles. Pull oracles operate by only putting data on-chain exactly when it’s needed. In contrast to the heartbeat of data being pushed on-chain by the oracle operator in push oracles, Stork’s pull oracle operates by allowing subscribers to listen to signed data updates in an off-chain application, and post those updates to the official Stork contract whenever they need to. Anyone is able to post updates to the Stork contract because Stork data updates are verified for both signatures and recency before being stored. Gas costs are also minimized on a per application basis, as the onus of placing data on-chain can be shared. Upon updating the Stork contract, the relevant application logic can then be called. This logic flow can be achieved within a single transaction, meaning the on-chain data is updated in the same transaction as it's consumed in your smart-contract.

## Temporal Numeric Values

The prominent use-case for oracles on blockchains is for price feeds. Oracles facilitate the ability to get the price of a cryptocurrency, real-world asset, or any other asset or derivative for use in DeFi applications on chain. In some instances, there have been application-specific custom built oracles for more niche purposes, like putting outcomes of real-world events on-chain for prediction markets, or getting verifiable randomness on-chain. Stork takes these common use cases and merges them with the generic "Temporal Numeric Value" primitive. This primitive contains:

* A UNIX timestamp with nanosecond precision
* A signed integer, multiplied by `10^18` for 18 decimal places of precision

Out of the box, Stork supports continuous real-time, ephemeral, or one time use data on-chain, so long as it can be represented as a timestamped number.

Stork supports price feeds for [all your favorite assets](/resources/asset-id-registry), but can also be used for unique cases, ex: putting your fitness data on-chain, or virality metrics from a social media platform. The data you can put on-chain with Stork is only limited by what you can think of.

## Sub-Second Latency

One of Stork’s key differentiators in the oracle landscape is its ultra-low latency. This latency is sub-second, and depending on the specific application often closer to just several 10ths of a second. This means when an update lands on-chain in the Stork contract for applications to consume, it’s close to as fresh as it could possibly be without eliminating chain-latency. Not only are Stork price updates exceptionally fresh on-chain, but Stork’s aggregators also have fresh data at minimum every 500ms. This allows applications using Stork data to ensure they always have the most recent data.

## Signatures

Signatures are one of the core cryptographic primitives used in computing, from the traditional internet to crypto. Using asymmetric cryptography, signatures allow one party to "sign" a message by applying a mathematical (encryption) function to it using a secret key as an input. The message can then be sent to anyone, who can verify the sender by checking the signature against the supposed sender's public key (a number that the sender lets everyone know). The mathematical relationship between the public and private keys is such that if and only if a message was signed with the matching private key, you can verify it with the public key.

Stork utilizes signatures to make assurances in a number of places. When sending data to the aggregators, publishers sign their messages first. After receiving and aggregating the publisher signed data, the Stork aggregator then signs the aggregated price to be consumed by subscribers. These signatures are then verified in Stork contracts on-chain to make the following assurances:

1. The original publisher data is coming from the correct publishers.
2. The Stork aggregated data is coming from a Stork aggregator.
3. The Stork aggregator is using the aggregation method asserted.

Stork utilizes ECDSA with `secp256k1` keypairs for signing, which is the same elliptic curve cryptography used by Ethereum. More information on Stork’s use of signatures can be found in [How It Works](/introduction/how-it-works#verifiability).

## Data Aggregation

Data aggregation is the process of collecting multiple discrete data streams representing the same asset and combining them deterministically to output a consolidated distinct output. Stork's data aggregation is resilient to failures of a single source.

Using just one data source leaves the consumer of that data vulnerable to:

* Interruptions in data flow due to unforeseen (or planned) issues in the publisher
* Inconsistencies and inaccuracies due to the publishers specific data collection methods
* Malicious manipulation of critical data, whether by the publisher themselves or a hostile actor who's gained access to the publishers systems

By using a network of independent decentralized data publishers and aggregating their feeds - much like using a network of independent nodes in a blockchain - the consumer of the data is protected against the pitfalls associated with a single source of truth and single point of failure.

## Asset IDs

Asset IDs are names for specific feeds of data. They are used throughout Stork to identify data, and are often seen in both plain-text and encoded form. An encoded asset ID is just the `keccak256` hash of the plaintext asset ID, and is commonly used to identify an asset on-chain. For example, the BTC/USD price pair would be identified as:

* Asset ID: `BTCUSD`
* Encoded Asset ID: `keccak256("BTCUSD") => 0x7404e3d104ea7841c3d9e6fd20adfe99b4ad586bc08d8f3bd3afef894cf184de`

For a full list of asset IDs and corresponding encodings, please see the[ Asset ID Registry](/resources/asset-id-registry).

## Prices

### Spot Prices

The spot price of an asset is the current price in the marketplace.

An example of this calculation (used in Storks in-house publisher) is:

1. Take the order book midpoint price of the asset from all of the highest volume exchanges
2. Calculate the median of those prices

### Perpetual Future Mark Price

The perpetual future mark price of an asset is the underlying mark price of the perp contract. This, like the spot price of an asset, is an aggregate of from the publisher calculated prices.

An example of this calculation (used in Storks in-house publisher) is:

$$
Mark Price\_{t} = \frac{median(Perp Price\_{0t},Perp Price\_{1t},...,Perp Price\_{nt})}{USDT/USD\_{t}}
$$

where:

* PerpPrice(it): Price of asset on exchange i at time t

and:

$$
USDT/USD\_{t} = median(SpotPrice\_{0t},SpotPrice\_{1t},...,SpotPrice\_{nt})
$$

where:

* SpotPrice(it): Price of USDT-USD exchange i at time t

### EMA Garman-Klass Volatility

[Garman-Klass](https://portfolioslab.com/tools/garman-klass) is a common estimator of price volatility based on OHLC prices, improving on the basic volatility by considering extreme prices within a period instead of just the start and end of a period.

Traditionally Garman-Klass volatility is computed over a fixed period and gives every period an equal weight. Since Stork deals with real time data we'd prefer to weigh recent volatility more heavily. We use the Garman-Klass formula's computation for each OHLC period, but rather than taking an average over a fixed number of periods, we apply an exponential moving average so that we can quickly report sudden increases in volatility.

We compute the EMA volatility for period n+1 given the EMA volatility for period n, the open, high, low and close prices for period n, and a fixed decay parameter lambda using the formula:

$$
\left(\hat\sigma^{GK}*{n+1}\right)^2 = \lambda \left\[\frac{1}{2}\log\left(\frac{H\_n}{L\_n}\right)^2-(\log(4)-1) \log \left( \frac{C\_n}{O\_n}\right)^2\right] + (1-\lambda)\left(\hat\sigma^{GK}*{n}\right)^2
$$

EMA Garman-Klass Volatility feed names are suffixed with `_VGK`.


# How It Works

Understanding the layers of Stork's core architecture and how they work together.

## Architecture <a href="#docs-internal-guid-847a2b18-7fff-81d7-ee61-fee4a32d94d3" id="docs-internal-guid-847a2b18-7fff-81d7-ee61-fee4a32d94d3"></a>

Stork can be cleanly divided into 4 core layers:

* [Publishers](#publishers)
* [Subscribers](#subscribers)
* [Aggregators](#aggregators)
* [On-Chain Contracts](#on-chain-contracts)

<div data-full-width="false"><figure><img src="/files/jfuyTLvmDj8qLUZXRLZo" alt=""><figcaption><p>Stork Architecture Diagram</p></figcaption></figure></div>

These layers all work together to make up the core architecture of Stork. At a high level, the interaction between these layers is as follows:

* Publishers provide signed streams of data via websocket to Aggregators.
* Aggregators listen to streams of Publisher data via websocket, aggregate and sign those streams, then push the aggregated data streams to Subscribers.
* Subscribers consume streams of data via websocket (or REST requests) from Aggregators based on their needs.
* Subscribers can then do whatever they want with the aggregated data, but most commonly use this data in smart-contracts by sending it to the Stork oracle contract on their chain of choice whenever necessary, or leverage it off-chain in a decentralized exchange.
* Signatures are verified in the Aggregator, in the on-chain contracts, and optionally by the subscribers.

Continue reading for more specifics on how these components work.

### Publishers

Where the data starts its journey, Publishers are decentralized independent firms and organizations that contribute data to Stork. Most often, Publishers are organizations that already have data that would be useful on-chain, and choose to contribute that data to Stork as a secondary outlet. Some examples of publishers are:

* High Frequency Trading firms
* Decentralized and Centralized Exchanges
* Predictions markets

Publishers make their data available to Aggregators, and by extension Subscribers, by running the[ Stork Publisher Agent](https://github.com/Stork-Oracle/stork-external/blob/main/apps/publisher_agent/README.md), an open-source application that can easily be deployed via a pre-built docker container. The publisher agent also handles signing and sending the data to Aggregators.

Have data you want to contribute? Check out[ Becoming a Publisher](/getting-started/becoming-a-publisher) for more information.

### Aggregators

If Stork was a sandwich, Aggregators would be the meat. This is where the heavy lifting happens, and data is consolidated into its final form to be sent along its way. Aggregators simply listen to data from relevant Publishers, aggregate this data using an aggregation function, sign the data (proving not only the source, but also the aggregation method), and then push data containing the aggregate, its signature, as well as all of the original publisher data and their signatures, to subscribers via websocket. They also make this data available via a REST endpoint.

For interacting with Aggregator APIs, see the[ websocket API](/api-reference/websocket-api) and[ REST API](/api-reference/rest-api) docs

Stork Aggregators can use one of several aggregation functions. The available functions are:

* Median - The median of the constituent Publisher data.
* Average - The average of the constituent Publisher data.
* Weighted Average - A custom weighted average of the constituent Publisher data.

The most commonly used aggregation method is median, which provides a good balance of simplicity, speed, and protections against subsets of errant Publishers.

Aggregators are run by Stork Labs in redundant sets. They are highly configurable to the specific needs of individual applications. Though configurable, Aggregators typically provide fresh data every 500ms, or whenever the aggregate data moves by 0.1%, whichever happens first. This achieves a blazingly fast sub-second update frequency.

### Subscribers

Subscribers are the consumers in the system. After selecting a suitable Aggregator with a specific method and Publishers of the necessary data feeds, the Subscriber listens to the Aggregator's [websocket](/api-reference/websocket-api) to continuously receive the latest data as soon as it's available. The latest data can also be retrieved in one-off calls to the Aggregator's [REST API](/api-reference/rest-api).

What the Subscriber does with this data is up to the Subscriber, however the common use-cases can be broadly categorized into two major categories: on-chain and off-chain.

#### **Off-Chain**

While oracles are typically thought of as being used for putting data on-chain, there is no rule that the data feeds must ultimately end up on a blockchain. Off-chain applications can benefit from low-latency, high-frequency, and high-accuracy data feeds as much as any smart-contract. Some examples of off-chain uses are:

* Decentralized exchanges
* Price analytics
* High frequency trading execution platforms
* Generation of derivatives to be repackaged in the form of a new Publisher on Stork

#### **On-Chain**

A common use of Stork data by a Subscriber is to put the data on-chain for use in smart contracts. Commonly, these are lending protocols, DEXes, or prediction markets.

To use data on-chain, there are two strategies.

* Running the open-source Chain Pusher
* Updating per-interaction in your dApp client

For more information on using these strategies to put data on-chain, please see [Putting Data On-Chain.](/getting-started/putting-data-on-chain)

Interested in becoming a subscriber? Check out [Becoming a Subscriber](/getting-started/becoming-a-subscriber) for more info.

### On-Chain Contracts

The official Stork contracts are the on-chain components of Stork. These contracts are responsible for the following:

* Maintaining a registry of [temporal numeric value](/introduction/core-concepts#temporal-numeric-values) (TNV) feeds that associate an [encoded asset ID](/introduction/core-concepts#asset-ids) with the most recent data for that asset.
* Accepting and verifying TNV updates for recency and signature validity.
* Updating relevant feeds upon submission and verification of a posted update.
* Providing public interface functions to easily read the latest value for a feed from another smart contract.

For more information on Stork’s smart-contracts, see the [API Reference](/api-reference/contract-apis), the[ stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains), or the [Contract Addresses](/resources/contract-addresses) page.

## Verifiability

Stork is built with the principles of trustlessness and decentralization enshrined, and as such, makes thorough use of cryptographic primitives throughout the system.

Stork follows the lead of Ethereum and Bitcoin in using `secp256k1` keypairs with ECDSA asymmetric signatures. Stork and its publishers sign messages using an implementation of the[ EIP-712](https://eips.ethereum.org/EIPS/eip-712) signing spec, and use official EVM keypairs for this purpose. This offers several advantages, including leveraging the extensive real world testing this method has gone through, as well as the near universal support by blockchain VMs, even in cases where it is not the primary curve or signature method on that chain.

Signatures in Stork are included in the following places:

1. [Publishers](#publishers) sign their data updates using their private key
2. [Aggregators](#aggregators) sign their data updates using their private key

It's important to remember that Aggregator signatures are signatures for the entire update, including the:

* Temporal Numeric Value (Data point in the form of timestamp + number)
* Aggregation Function
* Constituent Publisher data and their signatures

These signatures allow cryptographic verification in the following instances:

1. Aggregators verify the signatures of their constituent Publishers data to determine which updates to verify, maintaining trustlessness while optimizing for throughput
2. The [on-chain contracts](#on-chain-contracts) verify the Aggregators signatures to ensure only valid updates can ever be posted on-chain
3. [Subscribers](#subscribers) can optionally verify both the Aggregators and Publishers signatures before utilizing the data.

This series of signatures and verifications enables end-to-end trustlessness in Stork intrinsically.

## Scalability

Stork has been designed to scale virtually infinitely. Due to Stork’s architecture, and the ability to segregate aggregation responsibility between multiple Aggregators, Stork’s latency does not meaningfully change depending on the number of assets. Scaling of your application is not and will never be limited by Stork.

## Extensibility

As touched upon in the [TNV section of Core Concepts](/introduction/core-concepts#temporal-numeric-values), one of Stork’s unique traits is its Temporal Numeric Value primitive. This is primitive that includes a (unix) timestamp and a number. Commonly, this would be an asset price and timestamp of aggregation. It can also represent any sort of timestamped data, allowing for much greater extensibility than other oracles.

The specific data you want your app to use on-chain is not prescribed by Stork. Everything from real world prediction market data, personal data like fitness metrics, or social media metrics, and other first party data can and should go on-chain with Stork.


# Products

Stork for Real Time, Options, StarkEx, and the Composite Oracle Service.

### Stork for Real Time <a href="#docs-internal-guid-3dcde64a-7fff-735c-30d3-8dbb57e505e2" id="docs-internal-guid-3dcde64a-7fff-735c-30d3-8dbb57e505e2"></a>

Stork for Real Time is an ultra low-latency, decentralized off and on-chain price feed designed for any chain. Stork for Real Time is powered by a decentralized network of data publishers, and signed with a cross-chain compatible signature. Stork for Real Time prioritizes performance, using ultra-fast websockets to ensure data is available at the millisecond level, similar to the data used for trading in TradFi.

Using an off-chain, decentralized feed gives protocols the ability to perform initial processing off-chain, and elect to only push on-chain the price updates that are relevant to their product. Since prices are signed in a chain-compatible way, protocols can use Stork’s Contract, or their own smart contract, to verify the feed on-chain, proving that the data is legitimate.

### Stork for StarkEx

Stork maintains a first class partnership with StarkEx. This enables Stork to provide oracle services that are accepted natively by StarkEx. The key difference between Stork for Real Time and Stork for StarkEx is that the signatures used are compatible with StarkEx, and present only in the publisher messages. Also, publishers use StarkEX's native signatures when providing data for StarkEX users.

### Composite Oracle Service

A Composite Oracle Service (COS) allows for modular and configurable custom [Aggregators](/introduction/how-it-works#aggregators) enabled by Storks core architecture. A COS is a tuned oracle that provides aggregated data leveraging Stork's decentralized publisher network, while creating a composite of the specific assets and aggregation methods required by a [Subscriber](/introduction/how-it-works#subscribers).

For more information about how Stork’s core architecture enables COS, see [How It Works](/introduction/how-it-works).

### Auto Pushed Feeds

Stork provides a service to automatically push data to any supported chain based on a configurable schedule and delta tolerance threshold. Protocols that only require on-chain data and want the simplest plug-and-play experience can request new feeds by reaching out to <sales@stork.network>.

{% hint style="info" %}
Interested? Contact Stork Labs to determine appropriate feeds that meet your requirements. <sales@stork.network> or [Twitter DMs](https://twitter.com/StorkOracle) open.
{% endhint %}


# Becoming a Publisher

Contributing data to Stork.

Publishers on Stork are a decentralized network of data providers that are the origin of all data on Stork. For more information on publishers, see [How It Works](/introduction/how-it-works).

### Who Can Become a Publisher?

Anyone with high-frequency, high-accuracy, or first-party data can become a publisher on Stork. If you have data streams you feel would be useful on-chain or off-chain, don't hesitate to reach out about becoming a publisher.

### Setting up the Publisher Agent

The publisher agent is an open-source application that takes in your data and handles signing and communication with Stork Aggregators. It can be found in the[ stork-external github repo](https://github.com/Stork-Oracle/stork-external/blob/main/apps/publisher_agent/README.md), along with instructions for setting it up on your hardware via Docker.

{% hint style="info" %}
Interested in becoming a Publisher? Contact Stork Labs! Email: <publishers@stork.network> Twitter: [@StorkOracle](https://x.com/StorkOracle)
{% endhint %}


# Becoming a Subscriber

Consuming data from Stork.

Subscribers on Stork are the consumers of Stork aggregated data.

### Who Can Become a Subscriber?

Anyone who has a need for high-frequency, high-accuracy, low-latency data can become a Subscriber. Storks data feeds are measurably faster, more efficient and more stable than contemporary oracles.

### Using Data Off-Chain

Using data off-chain is as simple as listening to the [Aggregator](/introduction/how-it-works#aggregators) [websocket](/api-reference/websocket-api) or hitting its [REST API](/api-reference/rest-api), and then using the update data in your application. Both APIs respond with JSON messages that have a top level field called `data` with the following structure:

<pre class="language-json"><code class="lang-json"><strong>{
</strong><strong>    "data": [
</strong>        "&#x3C;plain-text asset id>": {
            "timestamp": &#x3C;unix timestamp>,
            "asset_id": "&#x3C;plain-text asset id>,
            "signature_type": "&#x3C;signature type - evm | stark>",
            "trigger": "&#x3C;trigger>",
            "price": "&#x3C;price multiplied by 10^18>",
            "stork_signed_price": {
                "public_key": "&#x3C;stork aggregator public key>",
                "encoded_asset_id": "&#x3C;keccak256 encoded asset id>",
                "price": "&#x3C;price multiplied by 10^18>",
                "timestamped_signature": {
                    "signature": {
                        "r": "&#x3C;r component of ECDSA secp256k1 signature>",
                        "s": "&#x3C;r component of ECDSA secp256k1 signature>",
                        "v": "&#x3C;s component of ECDSA secp256k1 signature"
                    },
                    "timestamp": &#x3C;unix timestamp>,
                    "msg_hash": "keccak256 message hash"
                },
                "publisher_merkle_root": "&#x3C;publisher merkle root",
                "calculation_alg": {
                    "type": "&#x3C;aggregation function name>",
                    "version": "&#x3C;aggregation function version",
                    "checksum": "&#x3C;checksum for aggregation function>"
                }
            },
            "signed_prices": [
                {
                    "publisher_key": "&#x3C;publishers public key>",
                    "external_asset_id": "&#x3C;plain-text asset id",
                    "signature_type": "&#x3C;signature type - evm | stark>",
                    "price": "price multiplied by 10^18",
                    "timestamped_signature": {
                        "signature": {
                            "r": "&#x3C;r component of ECDSA secp256k1 signature>",
                            "s": "&#x3C;r component of ECDSA secp256k1 signature>",
                            "v": "&#x3C;s component of ECDSA secp256k1 signature"
                        },
                        "timestamp": &#x3C;unix timestamp>,
                        "msg_hash": "&#x3C;keccak256 message hash>"
                    }
                },
                ...
            ]
        }
    }
}
</code></pre>

## Using Data On-Chain

For information on putting data on-chain and accessing it from your smart-contract, see the following sections:

{% content-ref url="/pages/t7HBOZv8dLBcB5PfdzDn" %}
[Putting Data On-Chain](/getting-started/putting-data-on-chain)
{% endcontent-ref %}

{% content-ref url="/pages/jLFEotnRzGOiWuXq0zpu" %}
[Accessing Data On-Chain](/getting-started/accessing-data-on-chain)
{% endcontent-ref %}

{% hint style="info" %}
Interested in becoming a Subscriber? Contact Stork Labs! Email: <sales@stork.network> Twitter: [@StorkOracle](https://x.com/StorkOracle)
{% endhint %}


# Putting Data On-Chain

Various methods for putting off-chain Stork signed data on-chain.

In order for Stork signed data feeds to be usable in on-chain smart contracts, the data must be written to the [Stork contract](/introduction/how-it-works#on-chain-contracts) on the relevant blockchain. There are two primary methods to achieve this:

* Running the open-source Chain Pusher
* Updating per-interaction in your dApp client

### Running the Chain Pusher

The Chain Pusher is an application that handles the communication with an Aggregator and the on-chain stork contract automatically. Using a simple [asset config](/api-reference/chain-pusher-configs/asset-config-yaml) that defines which assets to write, and the triggers for writing them (time intervals, price change %s), the Chain Pusher allows a continuous stream of updates to be put on-chain with a single command. The Chain Pusher, and instructions for getting it running, can be found in the[ stork-external github repo](https://github.com/Stork-Oracle/stork-external/blob/main/apps/chain_pusher/README.md).

It's important to note that when using the Chain Pusher, the Subscriber is responsible for the gas fees associated with putting Stork data on-chain. These gas fees are split between all Subscribers running the Chain Pusher for the same asset based on percentage of update volume. Depending on the popularity of the asset(s), gas fees may vary.

### Updating on a Per-Interaction Basis

The second method of using Stork data on-chain is baking the data feed update call into your smart contracts client interface. This is the most efficient usage of a [pull oracle](/introduction/core-concepts#pull-oracles), and follows this pattern:

1. User Interacts with your dApp front-end (client) that will call a smart-contract method that consumes Stork data.
2. The client hits the Stork [REST API](/api-reference/rest-api) for the latest update for the relevant data, or uses most recent data from the [websocket](/api-reference/websocket-api).
3. The client crafts a transaction that first includes an instruction to update the value on the Stork contract, then an instruction to interact with your smart-contracts method that will consume the price update. (for information on writing data to the Stork contract, see the [Contract APIs](/api-reference/contract-apis))

Because of atomic and ordered transaction processing, which is the standard for most blockchain architectures, the price the dApp's smart-contract uses is empirically as fresh as it possibly could be. If something is wrong with the price update (an invalid signature or contents), the Stork contract will catch this and refuse to update the price and the transaction will fail. If for some reason a newer update already exists on-chain (ex: a user tries to maliciously inject an old but validly signed price), the Stork contract will reject the update and the transaction will proceed with the most recent price.

In this model, the user interacting with your dApp is responsible for paying the gas fees associated with putting Stork data on-chain.


# Accessing Data On-Chain

Using Stork data in your smart-contract.

Stork's on-chain contracts are what ultimately allow leveraging Stork's low-latency trustless data on-chain. This involves calling the chain-specific contracts version of a `get_temporal_numeric_value` function with the appropriate information about the relevant [Asset ID.](/introduction/core-concepts#asset-ids)

To see which chains Stork currently supports, see the Contract Addresses section:

{% content-ref url="/pages/SZehC7l9p3TrecQGf1jo" %}
[Contract Addresses](/resources/contract-addresses)
{% endcontent-ref %}

For specific documentation and interacting with the on-chain contracts interface, see the Contract APIs section:

{% content-ref url="/pages/qPjCAuTxWm2SLbSLdqvl" %}
[Contract APIs](/api-reference/contract-apis)
{% endcontent-ref %}


# Websocket API

Stork [Aggregators](/introduction/how-it-works#aggregators) expose websocket endpoints for both [Publishers](/introduction/how-it-works#publishers) and [Subscribers](/introduction/how-it-works#subscribers). Publishers use this to continuously push their signed data to the Aggregators, while Subscribers can use this to listen to the ultra low-latency stream of signed aggregated data from Stork.\
\
These docs use wscat, a common CLI tool for interacting with websockets, for examples. This is just for legibility and the websockets can be interacted with using any tool or library that supports the standard websocket spec.\\

{% content-ref url="/pages/wCvhEEeDvx2YVztKDyd8" %}
[Publisher](/api-reference/websocket-api/publisher)
{% endcontent-ref %}

{% content-ref url="/pages/Uw2hyXbChhBXfbNQqLwG" %}
[Subscriber](/api-reference/websocket-api/subscriber)
{% endcontent-ref %}


# Publisher

Publishing data to a Stork Aggregator via WebSocket.

## Base Endpoint

The standard endpoint for interacting with Stork via websocket is:

```url
wss://api.jp.stork-oracle.network
```

## Authentication

All websocket connection requests must include an `Authorization` header with the value set as `Basic <token>` . For example:

```bash
wscat -c 'wss://api.jp.stork-oracle.network/evm/publish' -H "Authorization: Basic fakeToken123"
```

## Endpoints

### /evm/publish

Publish signed data updates using EVM-compatible signatures.

#### Example:

```bash
wscat -c 'wss://api.jp.stork-oracle.network/evm/publish' -H "Authorization: Basic fakeToken123"
```

### /stark/publish

Publish signed data updates using Stark-compatible signatures

#### Example:

```bash
wscat -c 'wss://api.jp.stork-oracle.network/stark/publish' -H "Authorization: Basic fakeToken123"
```

## Messages

### Publish Message

```json
{
  "type": "signed_prices",
  "trace_id": string,
  "data": {
    string: {
      "oracle_id": string,
      "asset_id": string,
      "trigger": string,
      "signed_price": {
        "publisher_key": string,
        "external_asset_id": string,
        "signature_type": string,
        "price": string,
        "timestamped_signature": {
          "signature": {
            "r": string,
            "s": string,
            "v": string
          },
          "timestamp": string,
          "msg_hash": string
        },
        "metadata": object // optional
      }
    }
  }
}
```

#### **Description:**

Publish signed price updates for one or more assets.

#### **Fields:**

* `"type"`: Type of the message. Always `"signed_prices"`.
* `"trace_id"`: A unique identifier for debugging purposes.
* `"data"`: An object containing updates for each asset. Each key represents an asset ID, and the value is the signed price update:
  * `"oracle_id"`: ID of the oracle.
  * `"asset_id"`: The asset being updated.
  * `"trigger"`: The event triggering this update.
  * `"signed_price"`:
    * `"publisher_key"`: The public key of the publisher.
    * `"external_asset_id"`: The external representation of the asset ID.
    * `"signature_type"`: Signature type (e.g., `evm` or `stark`).
    * `"price"`: The updated price.
    * `"timestamped_signature"`:
      * `"signature"`: The cryptographic signature of the update.
        * `"r"`: R-component of the signature.
        * `"s"`: S-component of the signature.
        * `"v"`: V-component of the signature (only for EVM signatures).
      * `"timestamp"`: Timestamp of the signed update.
      * `"msg_hash"`: The hash of the message being signed.
    * `"metadata"`: Any additional information related to the update. Optional.

#### **Example:**

<details>

<summary>EVM message</summary>

```json
{
  "type": "signed_prices",
  "trace_id": "a607510a-dd9e-4f3a-991e-79622da7705a",
  "data": {
    "BTCUSD": {
      "oracle_id": "anorith",
      "asset_id": "BTCUSD",
      "trigger": "delta",
      "signed_price": {
        "publisher_key": "0x99e295e85cb07c16b7bb62a44df532a7f2620237",
        "external_asset_id": "BTCUSD",
        "signature_type": "evm",
        "price": "65162563534000004000000",
        "timestamped_signature": {
          "signature": {
            "r": "0xce902399d68a0a28daace3ee18f91484331b18f420243f3421d34ba9f28f8e8a",
            "s": "0x7396001963580285b4d1d9dc58880ee447b89e118c89736d079dc56f52455353",
            "v": "0x1b"
          },
          "timestamp": 1711048112688000000,
          "msg_hash": "0x94d25a6173f3914ae4a9d728669460de5f2866a525d6718587929e6c669c033b"
        },
        "metadata": {}
      }
    }
  }
}
```

</details>

<details>

<summary>Stark message</summary>

```json
{
  "type": "signed_prices",
  "trace_id": "c8a91317-e9fb-450b-89b2-311f0f7ae6b4",
  "data": {
    "BTCUSD": {
      "oracle_id": "anorith",
      "asset_id": "BTCUSD",
      "trigger": "delta",
      "signed_price": {
        "publisher_key": "0x7884106fe3eb409b15060046ff09c8b12795c1e7b1dd5dce4356c73d460d0d3",
        "external_asset_id": "0x42544355534400000000000000000000616e6f72697468",
        "signature_type": "stark",
        "price": "65223032635000000000000",
        "timestamped_signature": {
          "signature": {
            "r": "0x42d558a94fa02c23cc2d7919db7da0f9e892f023f51b31f20cdf0be171ddbb4",
            "s": "0x79f718337da68f6157f008fc22d7678180c45f0ac158451e35571760b922c30"
          },
          "timestamp": 1711048368688000000,
          "msg_hash": "0x879028c00132d8e5ad03796bf684b918c61a6c625d76164c56fc910600762c"
        },
        "metadata": {}
      }
    }
  }
}
```

</details>


# Subscriber

Listening to data from a Stork Aggregator via WebSocket.

## Base Endpoint

The standard endpoint for interacting with Stork via websocket is:

```url
wss://api.jp.stork-oracle.network
```

## Authentication

All websocket connection requests must include an `Authorization` header with the value set as `Basic <token>` . For example if your token is `gmork123`:

```bash
wscat -c 'wss://api.jp.stork-oracle.network/evm/subscribe' -H "Authorization: Basic gmork123"
```

## Endpoints

### /evm/subscribe

Subscribe to listen to EVM signed data. This is data is signed using the Stork EVM private key, and is compatible with **any chain stork supports** other than StarkEx.

#### **Example:**

```bash
wscat -c 'wss://api.jp.stork-oracle.network/evm/subscribe' -H "Authorization: Basic fakeToken123"
```

### /stark/subscribe

Subscribe to listen to Stark signed data. This is data is signed to be natively compatible with StarkEx.

#### Example:

```bash
wscat -c 'wss://api.jp.stork-oracle.network/stark/subscribe' -H "Authorization: Basic fakeToken123"
```

## Messages

### Subscribe Message

```json
{
   "type": "subscribe"
   "trace_id": string
   "data": string[]
}
```

#### **Description:**

Subscribe to receive the stream of signed updates for assets.

#### **Fields:**

* `"type"`: Type of the message. In this case `"subscribe"`
* `"data"`: An array of plain-text [assets ids](/introduction/core-concepts#asset-ids).

#### **Example:**

```json
{
  "type": "subscribe", 
  "data": [
    "BTCUSD", 
    "ETHUSD", 
    "BTCUSDMARK"
  ]
}  
```

### **Subscribe Response**

```json
{
    "type": "oracle_prices"
    "trace_id": string
    "data": stork_signed_data[]
}
```

#### **Description:**

A response containing the data for subscribed assets.

#### **Fields:**

* `"type"` : Type of the message. In this case `"subscribe"`
* `"trace_id"`: Trace id for debugging
* `"data"`: An array of stork\_signed\_data updates, its structure can be found in [Becoming a Subscriber](/getting-started/becoming-a-subscriber#using-data-off-chain).

#### **Example:**

<details>

<summary>EVM Response</summary>

<pre class="language-json"><code class="lang-json"><strong>{
</strong>  "type": "oracle_prices",
  "trace_id": "b83cd210-d954-4851-9df8-c3561a8e764a",
  "data": {
    "BTCUSD": {
      "timestamp": 1734390439136872400,
      "asset_id": "BTCUSD",
      "signature_type": "evm",
      "trigger": "unspecified",
      "price": "105753153499499996000000",
      "stork_signed_price": {
        "public_key": "0x0a803F9b1CCe32e2773e0d2e98b37E0775cA5d44",
        "encoded_asset_id": "0x7404e3d104ea7841c3d9e6fd20adfe99b4ad586bc08d8f3bd3afef894cf184de",
        "price": "105753153499499996000000",
        "timestamped_signature": {
          "signature": {
            "r": "0x4b2fa6f575cb90e523af9638aae42ee1b6d62d61d8ca7bc4e8466c9c1e8543e6",
            "s": "0x584901b829ebe8210441d563e9bb2201c49963769702a03e4f72f72e380d3162",
            "v": "0x1c"
          },
          "timestamp": 1734390439161122000,
          "msg_hash": "0x207a6868e12c2cf210edd7cac9da34bd6e29a05cb2758abfc67dc8819998400c"
        },
        "publisher_merkle_root": "0x88b53be6a9df81c281153c157279be049ac7c26659cd44bc1222c13581be9656",
        "calculation_alg": {
          "type": "median",
          "version": "v1",
          "checksum": "9be7e9f9ed459417d96112a7467bd0b27575a2c7847195c68f805b70ce1795ba"
        }
      },
      "signed_prices": [
        {
          "publisher_key": "0xb91C675E0c0Ecfd4c16f97B110376C3C224061d8",
          "external_asset_id": "BTCUSD",
          "signature_type": "evm",
          "price": "105753153499499996000000",
          "timestamped_signature": {
            "signature": {
              "r": "0xa03f90bc38411d9d217058a3527b6178a9c777e741bc152eef98cd7d0584ccc4",
              "s": "0x5df3ba35f2cfdb7f0428c0efdfae6ea9977bf681908fe1021c3a8d4b8655e117",
              "v": "0x1b"
            },
            "timestamp": 1734390439136872400,
            "msg_hash": "0x76dd6821034b711949c88b1b780da7892df065aee26b40c04789666a89e1abfa"
          }
        },
        {
          "publisher_key": "0x51aa9e9C781F85a2C0636A835EB80114c4553098",
          "external_asset_id": "BTCUSD",
          "signature_type": "evm",
          "price": "105753153499499996000000",
          "timestamped_signature": {
            "signature": {
              "r": "0xb2c80fa3ef5319c33ff79ee889e0225905c17bb84e96f0813d04969ef7a08a25",
              "s": "0x2009c828ffd6785a7598bb0eac5c10b29bdbacfc240f3160e4411ee5133ef5bd",
              "v": "0x1c"
            },
            "timestamp": 1734390439091587000,
            "msg_hash": "0xd45c7ed8cd2aaaa588eb7b91e70ac41fd61e343523243c524f4769c7403e6b78"
          }
        },
        {
          "publisher_key": "0xa3C28D4e939cE2927D3B29b7bF53d3AeaAb09350",
          "external_asset_id": "BTCUSD",
          "signature_type": "evm",
          "price": "105748830591000005000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x67bd1a65b7eed016fba5ef0444eb9b29047018b3f875ba5a9cdbeaa43e1172ed",
              "s": "0x6708dd50d07e3a9ed9eda1b1ac274640c00bb1a55baf197d79770a42ecac736e",
              "v": "0x1b"
            },
            "timestamp": 1734390438743000000,
            "msg_hash": "0x05777a133448c88f745988e0e300c6f199260e8f60e16eba5f42f5366ae54d80"
          }
        },
        {
          "publisher_key": "0xF024A9AA110798e5CD0d698FBA6523113Eaa7FB2",
          "external_asset_id": "BTCUSD",
          "signature_type": "evm",
          "price": "105753153499499996000000",
          "timestamped_signature": {
            "signature": {
              "r": "0xf6977f9b912daaf9f675160a870000e1a905c90aac93950082f13a1618788ee4",
              "s": "0x59ac0878fc8316ed598a84b5425d1eb40aa5df7fb6384ce5c2dc179e63423bff",
              "v": "0x1b"
            },
            "timestamp": 1734390439091587000,
            "msg_hash": "0x0d9024136a7339801cb27c13e30e1ad0e4712446012846510eef4cea4b082aba"
          }
        }
      ]
    },
    "BTCUSDMARK": {
      "timestamp": 1734390439136874500,
      "asset_id": "BTCUSDMARK",
      "signature_type": "evm",
      "trigger": "unspecified",
      "price": "105742801326000015000000",
      "stork_signed_price": {
        "public_key": "0x0a803F9b1CCe32e2773e0d2e98b37E0775cA5d44",
        "encoded_asset_id": "0x6b5b1c26f98c489ea35e449ccba14d6153182646efc9d09e56b4302e41be548d",
        "price": "105742801326000015000000",
        "timestamped_signature": {
          "signature": {
            "r": "0x14821ceaf8188964687facf142b13a2ed1ada0067176746e6199236500ff4f44",
            "s": "0x57387011781b447be1818cf52f74b5f1fc55e3c014a0870b349c104e52b5e010",
            "v": "0x1c"
          },
          "timestamp": 1734390439164351700,
          "msg_hash": "0xe09a41f3cd8bfed6507a2c0cfe9aa542a450ecb297cd712392d3bb7c23a11571"
        },
        "publisher_merkle_root": "0x611104c9af0444461f49fd3b58f1a1e9ef3ca6c1c47abfa87cf4a8bd2cccb39d",
        "calculation_alg": {
          "type": "median",
          "version": "v1",
          "checksum": "9be7e9f9ed459417d96112a7467bd0b27575a2c7847195c68f805b70ce1795ba"
        }
      },
      "signed_prices": [
        {
          "publisher_key": "0xa3C28D4e939cE2927D3B29b7bF53d3AeaAb09350",
          "external_asset_id": "BTCUSDMARK",
          "signature_type": "evm",
          "price": "105722787702999994000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x9c999394eb2801985922eacdc3f22d74335f393d67936d426825758ab0312b7e",
              "s": "0x7f119dec7ca2c663b0d98d0c3ed43e4d9f11906eb557a196120c8b7122a0bd6c",
              "v": "0x1b"
            },
            "timestamp": 1734390438743000000,
            "msg_hash": "0xa0d2a518341beed15147340c6b46549c50cb93030d652392e61447466c0c84e4"
          }
        },
        {
          "publisher_key": "0x51aa9e9C781F85a2C0636A835EB80114c4553098",
          "external_asset_id": "BTCUSDMARK",
          "signature_type": "evm",
          "price": "105742801326000015000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x50415eab9570f915d926c84688f45412ba9f4b7031043f6f4cdac05dc849e914",
              "s": "0x036192d0ad8932836f8d7208d5d0688772a552bf53710c33b70ed50f5e3fbe57",
              "v": "0x1b"
            },
            "timestamp": 1734390439091594000,
            "msg_hash": "0x2e255da7afbe7aba7e3d9e0a2c3db1e0cec7ed95589a6d52c2da310659d8969f"
          }
        },
        {
          "publisher_key": "0xF024A9AA110798e5CD0d698FBA6523113Eaa7FB2",
          "external_asset_id": "BTCUSDMARK",
          "signature_type": "evm",
          "price": "105742801326000015000000",
          "timestamped_signature": {
            "signature": {
              "r": "0xa321f1a692df0ac77c60e77af7e5329f4d9121e94cd072d6cd280470c9159890",
              "s": "0x585ebb19dcdd87fb8ae7fd6c2be2f32e7e0da8a7d0d36be72fde8e626eaa5f95",
              "v": "0x1b"
            },
            "timestamp": 1734390439091594000,
            "msg_hash": "0xae28b7ae7a5724506e7ed5e27803300521be10154b9719b0a4e23f8e4a4486ca"
          }
        },
        {
          "publisher_key": "0xb91C675E0c0Ecfd4c16f97B110376C3C224061d8",
          "external_asset_id": "BTCUSDMARK",
          "signature_type": "evm",
          "price": "105742801326000015000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x5f5cf14ba3018204c94e061f1edaee83320e0d898a8e195d1ce470d863b3f937",
              "s": "0x5699b723cd9358375217085cc502da15371c500fdbe3389d91007837635fa35c",
              "v": "0x1c"
            },
            "timestamp": 1734390439136874500,
            "msg_hash": "0x4a80d94527189740799419b3846ac33dd560ee3804ad8b973de1f6b4440ffa73"
          }
        }
      ]
    },
    "ETHUSD": {
      "timestamp": 1734390439136875800,
      "asset_id": "ETHUSD",
      "signature_type": "evm",
      "trigger": "unspecified",
      "price": "4027870675250000000000",
      "stork_signed_price": {
        "public_key": "0x0a803F9b1CCe32e2773e0d2e98b37E0775cA5d44",
        "encoded_asset_id": "0x59102b37de83bdda9f38ac8254e596f0d9ac61d2035c07936675e87342817160",
        "price": "4027870675250000000000",
        "timestamped_signature": {
          "signature": {
            "r": "0xc5bc5f6b374e5941e07d90b0813229a9b1466c5a59d7703c0d7f2fcb8d4d798e",
            "s": "0x29f4fb3477062e6ab7d8997b0a0304160e887a4e21948fde49a27a4a696886eb",
            "v": "0x1b"
          },
          "timestamp": 1734390439163362600,
          "msg_hash": "0x9a34f99fc7d5739a3d0be92accafece840c82ca804ab875a684d8f54c112f14d"
        },
        "publisher_merkle_root": "0xa2f5ad766250f3375766b6c2a684a83d13c1cab6ebe7be16eb4808523551cae3",
        "calculation_alg": {
          "type": "median",
          "version": "v1",
          "checksum": "9be7e9f9ed459417d96112a7467bd0b27575a2c7847195c68f805b70ce1795ba"
        }
      },
      "signed_prices": [
        {
          "publisher_key": "0xF024A9AA110798e5CD0d698FBA6523113Eaa7FB2",
          "external_asset_id": "ETHUSD",
          "signature_type": "evm",
          "price": "4027870675250000000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x3bf00ef505251fe89615b8040c7771727569821eebca81f86a1d7a8bd100a58f",
              "s": "0x1abbf372f55e24b3375b5e55f0503cd2fd17e8e7bc05594fc4d94507884698ac",
              "v": "0x1b"
            },
            "timestamp": 1734390439091595500,
            "msg_hash": "0xa55e533e8ccdd548fad8f6033a3319b355a64bcdbf482680a89f3bb1da8f866b"
          }
        },
        {
          "publisher_key": "0xa3C28D4e939cE2927D3B29b7bF53d3AeaAb09350",
          "external_asset_id": "ETHUSD",
          "signature_type": "evm",
          "price": "4027554896999999000000",
          "timestamped_signature": {
            "signature": {
              "r": "0xfb7b8a57eb8ca0b65eb890e5a85b40c7d079a11b066196b0d7423f1107b4d6d4",
              "s": "0x33f16c274a77f6e795b23bc5183e0901010b8986bfaccb21e36d98d2df5343f2",
              "v": "0x1c"
            },
            "timestamp": 1734390438743000000,
            "msg_hash": "0xf9b21284cf80d7f031f1da35a4baafc20ba9a6d11be9563cb8ffb009b2fb591c"
          }
        },
        {
          "publisher_key": "0xb91C675E0c0Ecfd4c16f97B110376C3C224061d8",
          "external_asset_id": "ETHUSD",
          "signature_type": "evm",
          "price": "4027870675250000000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x77097de985dd2f45f7345589c3895e8d63bb6b75161d80d1b1c82eb618219cbf",
              "s": "0x5d1ea4313d1a43ced440724c3e1da707373db2b16c630c5834090fe53e85f5a5",
              "v": "0x1c"
            },
            "timestamp": 1734390439136875800,
            "msg_hash": "0x68e56181d07099b8e8e8d2ae09f3a4a1eb7b6b18d4507819080c2d7e5c7290bd"
          }
        },
        {
          "publisher_key": "0x51aa9e9C781F85a2C0636A835EB80114c4553098",
          "external_asset_id": "ETHUSD",
          "signature_type": "evm",
          "price": "4027870675250000000000",
          "timestamped_signature": {
            "signature": {
              "r": "0xef4f2fb85046c395d68b01d59e42df37c77825a4796844ad3b2787c55ca1b5ed",
              "s": "0x4d48ad4d80ec8d9c597039f43449039095372dd836c823690861c2337a5ae6a3",
              "v": "0x1c"
            },
            "timestamp": 1734390439091595500,
            "msg_hash": "0xe27a3e15a5d081df8a2e9697f7f6c3483f559dd7610c625fc3e5b0efc336c60e"
          }
        }
      ]
    }
  }
}
</code></pre>

</details>

<details>

<summary>Stark Response</summary>

```json
{
  "type": "oracle_prices",
  "trace_id": "1b90ac7f-da98-4c74-ab71-7c7a4aac5ea2",
  "data": {
    "BTCUSDMARK": {
      "timestamp": 1734390877237000000,
      "asset_id": "BTCUSDMARK",
      "signature_type": "stark",
      "trigger": "unspecified",
      "price": "105897536209874990000000",
      "signed_prices": [
        {
          "publisher_key": "0x1f191d23b8825dcc3dba839b6a7155ea07ad0b42af76394097786aca0d9975c",
          "external_asset_id": "0x4254435553444d41524b00000000000053746b6169",
          "signature_type": "stark",
          "price": "105897536209874990000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x227165075a3b85b346c210244c90166a291574639071a0338a261dd2db87d9b",
              "s": "0x387a3fa3612c55b342a05dc9e7aebfe3c630ac641ae44143c61253beba927bf"
            },
            "timestamp": 1734390877091601200,
            "msg_hash": "0x1ac738e06b388b97f7422134da036eab8c7768439146fc5151da46ffa995d28"
          }
        },
        {
          "publisher_key": "0xcc85afe4ca87f9628370c432c447e569a01dc96d160015c8039959db8521c4",
          "external_asset_id": "0x4254435553444d41524b00000000000053746f726b",
          "signature_type": "stark",
          "price": "105897536209874990000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x1cd69bad5dacf4686560a75db6344d74577509c0c8e15262a37b40787f48f24",
              "s": "0x228ae7421c03c3562140a7f51c0253ef4dbbc52c9f54da8d0ad59e921033367"
            },
            "timestamp": 1734390877091601200,
            "msg_hash": "0x48f4bc9eaeafeb2d781de784ee8ef3aa25ec797b168d235c24f996b5ee77277"
          }
        },
        {
          "publisher_key": "0x41dbe627aeab66504b837b3abd88ae2f58ba6d98ee7bbd7f226c4684d9e6225",
          "external_asset_id": "0x4254435553444d41524b0000000000005374437277",
          "signature_type": "stark",
          "price": "105897536209874990000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x75d144fe6cab2f7a43c7a225640ef25586038ce7d353f6b5410176af37495de",
              "s": "0x48754c536eac05423abe09bd080e063bd6508ad8daf7eecc220a55236bb2f49"
            },
            "timestamp": 1734390877136659200,
            "msg_hash": "0x5589d94799b72858c12f96c7f41b4f9668fa76c6718b5b67e83d2524546edd6"
          }
        },
        {
          "publisher_key": "0x6ee80350406f9e753797c3f0e1303a63ea2ae1f1adb86340e52722f41b31b64",
          "external_asset_id": "0x4254435553444d41524b0000000000006465787472",
          "signature_type": "stark",
          "price": "105876059122000006000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x3f09d5f01c78821eac28b229bd17db4d16950e10ebe55bb8927cc5dd201f19f",
              "s": "0x49e1e593afe189f5852bdaa8c26e9feaae060632508c8083e858c4acff0b7c1"
            },
            "timestamp": 1734390877237000000,
            "msg_hash": "0x6b7df61e6ee244a0c8451890f4953189a630b87c6520e7866f1e4b97e7d6475"
          }
        }
      ]
    },
    "ETHUSD": {
      "timestamp": 1734390877237000000,
      "asset_id": "ETHUSD",
      "signature_type": "stark",
      "trigger": "unspecified",
      "price": "4021139601187499000000",
      "signed_prices": [
        {
          "publisher_key": "0x41dbe627aeab66504b837b3abd88ae2f58ba6d98ee7bbd7f226c4684d9e6225",
          "external_asset_id": "0x455448555344000000000000000000005374437277",
          "signature_type": "stark",
          "price": "4021139601187499000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x6095485232570b1542511003cb0317c2eca891f913c079ccf1ad6823adc428e",
              "s": "0x406610914a813b101665f681c7a8207e22f7850b9ede5d504ae8927271154b3"
            },
            "timestamp": 1734390877136660700,
            "msg_hash": "0x692591526a6e8fe75042edcfee91b5b618bc50df6d7b62fb393bac8529a9bf0"
          }
        },
        {
          "publisher_key": "0x1f191d23b8825dcc3dba839b6a7155ea07ad0b42af76394097786aca0d9975c",
          "external_asset_id": "0x4554485553440000000000000000000053746b6169",
          "signature_type": "stark",
          "price": "4021139601187499000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x7ce01b6ef048f23b27a135c30e482feeab9506ab7adc2ead921c037680f1496",
              "s": "0x7a57496c674d8b23c39a2945c464406709cf0cb046c77e803118be171c89800"
            },
            "timestamp": 1734390877091606000,
            "msg_hash": "0x36b03ac79ef4b92a75cd53340b5efe8353a6ba57617e82af75cd14b13f4ec78"
          }
        },
        {
          "publisher_key": "0x6ee80350406f9e753797c3f0e1303a63ea2ae1f1adb86340e52722f41b31b64",
          "external_asset_id": "0x455448555344000000000000000000006465787472",
          "signature_type": "stark",
          "price": "4020807834000000000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x2f499d90a3975b400f489b4be35e74619b3ad9a454041417fe3781c6d31aa32",
              "s": "0x77cdb441ed66ece311490b710c2491255255a83abb05ed2e17b39a3da35cc32"
            },
            "timestamp": 1734390877237000000,
            "msg_hash": "0x62e7cb530499b2bfea2991f627bd400c73c84ff832587c0b1877f34973d7f7"
          }
        },
        {
          "publisher_key": "0xcc85afe4ca87f9628370c432c447e569a01dc96d160015c8039959db8521c4",
          "external_asset_id": "0x4554485553440000000000000000000053746f726b",
          "signature_type": "stark",
          "price": "4021139601187499000000",
          "timestamped_signature": {
            "signature": {
              "r": "0x75108318337aa45f5be5751efae4c73a02bebdb72e1369eef8b60d088d0b20e",
              "s": "0x2abe50ca49f5b17f8cacde3e22201b0b0c344592af4c7501ea8108dcec699ff"
            },
            "timestamp": 1734390877091606000,
            "msg_hash": "0xb23b72178cfad0ac3d44a2069492928afc44f0441ec3292a52c54897d70b1f"
          }
        }
      ]
    }
  }
}
```

</details>

### Unsubscribe Message

```json
{
  "type": "unsubscribe", 
  "data": string[]
  ]
}  
```

#### **Description:**

Unsubscribe from updates for a subset of subscribed assets.

#### **Fields:**

* `"type"`: Type of the message. In this case `"unsubscribe"`.
* `"data"`: An array of plain-text [asset ids](/introduction/core-concepts#asset-ids).

#### **Example:**

```json
{
  "type": "unsubscribe", 
  "data": [
    "BTCUSD", 
    "ETHUSD"
  ]
}  
```

### Unsubscribe Response

```
{
  "type": "unsubscribe",
  "data": {
    "subscriptions": string[]
  }
}

```

#### **Description:**

Response containing the resulting list of subscriptions.

#### **Fields:**

* `"type"`: Type of message. In this case `"unsubscribe"`.
* `"data"`:
  * `"subscriptions"`: Updated list of plain-text asset ids you are subscribed to.

#### **Example:**

```json
{
  "type": "unsubscribe",
  "data": {
    "subscriptions": [
      "BTCUSDMARK"
    ]
  }
}
```


# REST API

Real-Time and historical Data API for Stork signed data.

## Authentication

All REST requests must include an `Authorization` header with the value set as `Basic <token>` . For example if your token is `gmork123`:

```bash
curl -X GET 'https://rest.jp.stork-oracle.network/v1/prices/assets' -H "Authorization: Basic gmork123"
```

## Rate Limits

There is currently a universal rate limit of 5 requests/sec.

{% hint style="info" %}
Need a higher rate limit? Reach out to Stork. <sales@stork.network> or [Twitter DMs](https://x.com/storkoracle) open.
{% endhint %}

## Note

This tool is meant to illustrate the structure of REST api responses, but unfortunately due to third party limitations, some loss of precision on large numbers may be experienced in the browser. If you wish to test the verifiability of Stork prices from the REST api, we recommend using CURL to view the raw response.

## List Available Assets

> Get the list of available asset IDs.

```json
{"openapi":"3.0.3","info":{"title":"Stork Oracle API","version":"1.0"},"tags":[{"name":"Prices","description":"Stork for Real Time prices and assets"}],"servers":[{"url":"https://rest.jp.stork-oracle.network"}],"security":[{"token_auth":[]}],"components":{"securitySchemes":{"token_auth":{"description":"Enter your token in the format of \"Basic your-token\"","type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"AssetID":{"type":"string","description":"A unique identifier for an asset."}}},"paths":{"/v1/prices/assets":{"get":{"tags":["Prices"],"summary":"List Available Assets","description":"Get the list of available asset IDs.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AssetID"}}}}}}},"404":{"description":"Not Found"}}}}}}
```

## Get Latest Prices

> Get latest real-time prices for specified assets.

```json
{"openapi":"3.0.3","info":{"title":"Stork Oracle API","version":"1.0"},"tags":[{"name":"Prices","description":"Stork for Real Time prices and assets"}],"servers":[{"url":"https://rest.jp.stork-oracle.network"}],"security":[{"token_auth":[]}],"components":{"securitySchemes":{"token_auth":{"description":"Enter your token in the format of \"Basic your-token\"","type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"AggregatedSignedPrice":{"type":"object","properties":{"timestamp":{"$ref":"#/components/schemas/Timestamp"},"asset_id":{"$ref":"#/components/schemas/AssetID"},"signature_type":{"$ref":"#/components/schemas/SignatureType"},"trigger":{"type":"string"},"price":{"$ref":"#/components/schemas/QuantizedPrice"},"stork_signed_price":{"$ref":"#/components/schemas/StorkSignedPrice"},"signed_prices":{"type":"array","items":{"$ref":"#/components/schemas/PublisherSignedPrice"}}},"description":"Represents an aggregated signed price with multiple sources."},"Timestamp":{"type":"integer","format":"int64","description":"The UNIX nanosecond timestamp for the signature."},"AssetID":{"type":"string","description":"A unique identifier for an asset."},"SignatureType":{"type":"string","description":"The type of signature in use.","enum":["evm","stark"]},"QuantizedPrice":{"type":"string","description":"A price value multiplied by 10^18 represented as a string."},"StorkSignedPrice":{"type":"object","properties":{"public_key":{"type":"string"},"encoded_asset_id":{"$ref":"#/components/schemas/EncodedAssetID"},"price":{"$ref":"#/components/schemas/QuantizedPrice"},"timestamped_signature":{"$ref":"#/components/schemas/TimestampedSignature"},"publisher_merkle_root":{"type":"string","description":"Root hash for the Merkle tree of publishers."},"calculation_alg":{"$ref":"#/components/schemas/StorkCalculationAlg"}},"description":"A signed price from an aggregator."},"EncodedAssetID":{"type":"string","description":"A base64-encoded asset identifier."},"TimestampedSignature":{"type":"object","properties":{"signature":{"oneOf":[{"$ref":"#/components/schemas/EvmSignature"},{"$ref":"#/components/schemas/StarkSignature"}]},"timestamp":{"$ref":"#/components/schemas/Timestamp"},"msg_hash":{"type":"string","description":"A hash of the signed message."}},"description":"A signature with a timestamp and message hash."},"EvmSignature":{"type":"object","properties":{"r":{"type":"string","description":"r value of ECDSA secp256k1 signature."},"s":{"type":"string","description":"s value of ECDSA secp256k1 signature."},"v":{"type":"string","description":"v value of ECDSA secp256k1 signature."}},"description":"Represents an EVM compliant ECDSA secp256k1 signature with `r`, `s`, and `v` values."},"StarkSignature":{"type":"object","properties":{"r":{"type":"string"},"s":{"type":"string"}},"description":"Represents a Stark signature with `r` and `s` values."},"StorkCalculationAlg":{"type":"object","properties":{"type":{"type":"string","description":"The type of calculation algorithm.","enum":["median","average","weighted average"]},"version":{"type":"string","description":"Version of the calculation algorithm."},"checksum":{"type":"string","description":"Checksum for validation."}},"description":"Contains metadata about a calculation algorithm."},"PublisherSignedPrice":{"type":"object","properties":{"publisher_key":{"$ref":"#/components/schemas/PublisherKey"},"external_asset_id":{"$ref":"#/components/schemas/AssetID"},"signature_type":{"$ref":"#/components/schemas/SignatureType"},"price":{"$ref":"#/components/schemas/QuantizedPrice"},"timestamped_signature":{"$ref":"#/components/schemas/TimestampedSignature"},"metadata":{"$ref":"#/components/schemas/Metadata"}},"required":["publisher_key","external_asset_id","signature_type","price","timestamped_signature"],"description":"Contains signed price data from a publisher."},"PublisherKey":{"type":"string","description":"The key identifying the publisher."},"Metadata":{"type":"object","additionalProperties":true,"description":"A key-value map for additional metadata.","nullable":true},"ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/v1/prices/latest":{"get":{"tags":["Prices"],"summary":"Get Latest Prices","description":"Get latest real-time prices for specified assets.","parameters":[{"name":"assets","in":"query","description":"Comma-separated list of asset symbols (e.g. BTCUSD,ETHUSD)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AggregatedSignedPrice"}}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Get Recent Prices

> Get signed prices for specified assets at a specific timestamp within the last 10 minutes.

```json
{"openapi":"3.0.3","info":{"title":"Stork Oracle API","version":"1.0"},"tags":[{"name":"Prices","description":"Stork for Real Time prices and assets"}],"servers":[{"url":"https://rest.jp.stork-oracle.network"}],"security":[{"token_auth":[]}],"components":{"securitySchemes":{"token_auth":{"description":"Enter your token in the format of \"Basic your-token\"","type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"AggregatedSignedPrice":{"type":"object","properties":{"timestamp":{"$ref":"#/components/schemas/Timestamp"},"asset_id":{"$ref":"#/components/schemas/AssetID"},"signature_type":{"$ref":"#/components/schemas/SignatureType"},"trigger":{"type":"string"},"price":{"$ref":"#/components/schemas/QuantizedPrice"},"stork_signed_price":{"$ref":"#/components/schemas/StorkSignedPrice"},"signed_prices":{"type":"array","items":{"$ref":"#/components/schemas/PublisherSignedPrice"}}},"description":"Represents an aggregated signed price with multiple sources."},"Timestamp":{"type":"integer","format":"int64","description":"The UNIX nanosecond timestamp for the signature."},"AssetID":{"type":"string","description":"A unique identifier for an asset."},"SignatureType":{"type":"string","description":"The type of signature in use.","enum":["evm","stark"]},"QuantizedPrice":{"type":"string","description":"A price value multiplied by 10^18 represented as a string."},"StorkSignedPrice":{"type":"object","properties":{"public_key":{"type":"string"},"encoded_asset_id":{"$ref":"#/components/schemas/EncodedAssetID"},"price":{"$ref":"#/components/schemas/QuantizedPrice"},"timestamped_signature":{"$ref":"#/components/schemas/TimestampedSignature"},"publisher_merkle_root":{"type":"string","description":"Root hash for the Merkle tree of publishers."},"calculation_alg":{"$ref":"#/components/schemas/StorkCalculationAlg"}},"description":"A signed price from an aggregator."},"EncodedAssetID":{"type":"string","description":"A base64-encoded asset identifier."},"TimestampedSignature":{"type":"object","properties":{"signature":{"oneOf":[{"$ref":"#/components/schemas/EvmSignature"},{"$ref":"#/components/schemas/StarkSignature"}]},"timestamp":{"$ref":"#/components/schemas/Timestamp"},"msg_hash":{"type":"string","description":"A hash of the signed message."}},"description":"A signature with a timestamp and message hash."},"EvmSignature":{"type":"object","properties":{"r":{"type":"string","description":"r value of ECDSA secp256k1 signature."},"s":{"type":"string","description":"s value of ECDSA secp256k1 signature."},"v":{"type":"string","description":"v value of ECDSA secp256k1 signature."}},"description":"Represents an EVM compliant ECDSA secp256k1 signature with `r`, `s`, and `v` values."},"StarkSignature":{"type":"object","properties":{"r":{"type":"string"},"s":{"type":"string"}},"description":"Represents a Stark signature with `r` and `s` values."},"StorkCalculationAlg":{"type":"object","properties":{"type":{"type":"string","description":"The type of calculation algorithm.","enum":["median","average","weighted average"]},"version":{"type":"string","description":"Version of the calculation algorithm."},"checksum":{"type":"string","description":"Checksum for validation."}},"description":"Contains metadata about a calculation algorithm."},"PublisherSignedPrice":{"type":"object","properties":{"publisher_key":{"$ref":"#/components/schemas/PublisherKey"},"external_asset_id":{"$ref":"#/components/schemas/AssetID"},"signature_type":{"$ref":"#/components/schemas/SignatureType"},"price":{"$ref":"#/components/schemas/QuantizedPrice"},"timestamped_signature":{"$ref":"#/components/schemas/TimestampedSignature"},"metadata":{"$ref":"#/components/schemas/Metadata"}},"required":["publisher_key","external_asset_id","signature_type","price","timestamped_signature"],"description":"Contains signed price data from a publisher."},"PublisherKey":{"type":"string","description":"The key identifying the publisher."},"Metadata":{"type":"object","additionalProperties":true,"description":"A key-value map for additional metadata.","nullable":true},"ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/v1/prices/recent":{"get":{"tags":["Prices"],"summary":"Get Recent Prices","description":"Get signed prices for specified assets at a specific timestamp within the last 10 minutes.","parameters":[{"name":"timestamp","in":"query","description":"Unix timestamp in seconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"assets","in":"query","description":"Comma-separated list of asset symbols (e.g. BTCUSD,ETHUSD)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AggregatedSignedPrice"}}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Get Historical Price Metrics

> Get OHLC price data for a specific asset within a time range.

```json
{"openapi":"3.0.3","info":{"title":"Stork Oracle API","version":"1.0"},"tags":[{"name":"Trading View","description":"Historical price metrics"}],"servers":[{"url":"https://rest.jp.stork-oracle.network"}],"security":[{"token_auth":[]}],"components":{"securitySchemes":{"token_auth":{"description":"Enter your token in the format of \"Basic your-token\"","type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"AssetID":{"type":"string","description":"A unique identifier for an asset."},"TradingViewHistoryResponse":{"type":"object","properties":{"t":{"type":"array","items":{"type":"integer","description":"Unix timestamp in seconds"}},"o":{"type":"array","items":{"type":"number","format":"double","description":"Open price"}},"h":{"type":"array","items":{"type":"number","format":"double","description":"High price"}},"l":{"type":"array","items":{"type":"number","format":"double","description":"Low price"}},"c":{"type":"array","items":{"type":"number","format":"double","description":"Close price"}}},"description":"OHLC price data with timestamps"}}},"paths":{"/v1/tradingview/history":{"get":{"tags":["Trading View"],"summary":"Get Historical Price Metrics","description":"Get OHLC price data for a specific asset within a time range.","parameters":[{"name":"from","in":"query","description":"Start timestamp (Unix seconds)","required":true,"schema":{"type":"integer"}},{"name":"to","in":"query","description":"Start timestamp (Unix seconds)","required":true,"schema":{"type":"integer"}},{"name":"resolution","in":"query","description":"Time resolution in minutes, or 1 day, 1 week, or 1 month.","required":true,"schema":{"type":"string","enum":["1","2","5","15","30","60","120","240","360","720","D","1D","W","1W","M","1M"]}},{"name":"symbol","in":"query","description":"Asset ID","required":true,"schema":{"$ref":"#/components/schemas/AssetID"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TradingViewHistoryResponse"}}}}}}}}}}}
```

## Get Market State Change Info

> Get the current market status, next market status, and the time of the next status change for a given asset.\
> Returns three signed values keyed by synthetic asset IDs:\
> \- \`{asset\_id}\_CURRENT\_STATUS\` — current market status code\
> \- \`{asset\_id}\_NEXT\_STATUS\` — next market status code\
> \- \`{asset\_id}\_CHANGE\_TIME\` — Unix timestamp (seconds) of the next status change\
> \
> \*\*Status codes:\*\*\
> \| Code | Meaning |\
> \|------|---------|\
> \| 0 | Closed |\
> \| 1 | Regular Hours |\
> \| 2 | Extended Hours |\
> \| 3 | After Hours |\
> \
> Supported asset classes: US equities (e.g. \`AAPL\_24\_5\`, \`TSLA\_24\_5\`), forex pairs (e.g. \`EURUSD\`, \`USDJPY\`), and metals (\`XAUUSD\`, \`XAGUSD\`).\
> \
> This endpoint only applies to assets with variable trading schedules. Crypto and other 24/7 assets (e.g. \`BTCUSD\`, \`PAXGUSD\`) are \*\*not\*\* supported.

```json
{"openapi":"3.0.3","info":{"title":"Stork Oracle API","version":"1.0"},"tags":[{"name":"Market Status","description":"Market open/close status and schedule information for equities, forex, and metals"}],"servers":[{"url":"https://rest.jp.stork-oracle.network"}],"security":[{"token_auth":[]}],"components":{"securitySchemes":{"token_auth":{"description":"Enter your token in the format of \"Basic your-token\"","type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"MarketStatusAssetID":{"type":"string","description":"An asset with a variable trading schedule. Supported asset classes are US equities (e.g. AAPL_24_5), forex pairs (e.g. EURUSD), and metals (XAUUSD, XAGUSD). Crypto and other 24/7 assets are not supported."},"AggregatedSignedPrice":{"type":"object","properties":{"timestamp":{"$ref":"#/components/schemas/Timestamp"},"asset_id":{"$ref":"#/components/schemas/AssetID"},"signature_type":{"$ref":"#/components/schemas/SignatureType"},"trigger":{"type":"string"},"price":{"$ref":"#/components/schemas/QuantizedPrice"},"stork_signed_price":{"$ref":"#/components/schemas/StorkSignedPrice"},"signed_prices":{"type":"array","items":{"$ref":"#/components/schemas/PublisherSignedPrice"}}},"description":"Represents an aggregated signed price with multiple sources."},"Timestamp":{"type":"integer","format":"int64","description":"The UNIX nanosecond timestamp for the signature."},"AssetID":{"type":"string","description":"A unique identifier for an asset."},"SignatureType":{"type":"string","description":"The type of signature in use.","enum":["evm","stark"]},"QuantizedPrice":{"type":"string","description":"A price value multiplied by 10^18 represented as a string."},"StorkSignedPrice":{"type":"object","properties":{"public_key":{"type":"string"},"encoded_asset_id":{"$ref":"#/components/schemas/EncodedAssetID"},"price":{"$ref":"#/components/schemas/QuantizedPrice"},"timestamped_signature":{"$ref":"#/components/schemas/TimestampedSignature"},"publisher_merkle_root":{"type":"string","description":"Root hash for the Merkle tree of publishers."},"calculation_alg":{"$ref":"#/components/schemas/StorkCalculationAlg"}},"description":"A signed price from an aggregator."},"EncodedAssetID":{"type":"string","description":"A base64-encoded asset identifier."},"TimestampedSignature":{"type":"object","properties":{"signature":{"oneOf":[{"$ref":"#/components/schemas/EvmSignature"},{"$ref":"#/components/schemas/StarkSignature"}]},"timestamp":{"$ref":"#/components/schemas/Timestamp"},"msg_hash":{"type":"string","description":"A hash of the signed message."}},"description":"A signature with a timestamp and message hash."},"EvmSignature":{"type":"object","properties":{"r":{"type":"string","description":"r value of ECDSA secp256k1 signature."},"s":{"type":"string","description":"s value of ECDSA secp256k1 signature."},"v":{"type":"string","description":"v value of ECDSA secp256k1 signature."}},"description":"Represents an EVM compliant ECDSA secp256k1 signature with `r`, `s`, and `v` values."},"StarkSignature":{"type":"object","properties":{"r":{"type":"string"},"s":{"type":"string"}},"description":"Represents a Stark signature with `r` and `s` values."},"StorkCalculationAlg":{"type":"object","properties":{"type":{"type":"string","description":"The type of calculation algorithm.","enum":["median","average","weighted average"]},"version":{"type":"string","description":"Version of the calculation algorithm."},"checksum":{"type":"string","description":"Checksum for validation."}},"description":"Contains metadata about a calculation algorithm."},"PublisherSignedPrice":{"type":"object","properties":{"publisher_key":{"$ref":"#/components/schemas/PublisherKey"},"external_asset_id":{"$ref":"#/components/schemas/AssetID"},"signature_type":{"$ref":"#/components/schemas/SignatureType"},"price":{"$ref":"#/components/schemas/QuantizedPrice"},"timestamped_signature":{"$ref":"#/components/schemas/TimestampedSignature"},"metadata":{"$ref":"#/components/schemas/Metadata"}},"required":["publisher_key","external_asset_id","signature_type","price","timestamped_signature"],"description":"Contains signed price data from a publisher."},"PublisherKey":{"type":"string","description":"The key identifying the publisher."},"Metadata":{"type":"object","additionalProperties":true,"description":"A key-value map for additional metadata.","nullable":true},"ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/v1/market_status":{"get":{"tags":["Market Status"],"summary":"Get Market State Change Info","description":"Get the current market status, next market status, and the time of the next status change for a given asset.\nReturns three signed values keyed by synthetic asset IDs:\n- `{asset_id}_CURRENT_STATUS` — current market status code\n- `{asset_id}_NEXT_STATUS` — next market status code\n- `{asset_id}_CHANGE_TIME` — Unix timestamp (seconds) of the next status change\n\n**Status codes:**\n| Code | Meaning |\n|------|---------|\n| 0 | Closed |\n| 1 | Regular Hours |\n| 2 | Extended Hours |\n| 3 | After Hours |\n\nSupported asset classes: US equities (e.g. `AAPL_24_5`, `TSLA_24_5`), forex pairs (e.g. `EURUSD`, `USDJPY`), and metals (`XAUUSD`, `XAGUSD`).\n\nThis endpoint only applies to assets with variable trading schedules. Crypto and other 24/7 assets (e.g. `BTCUSD`, `PAXGUSD`) are **not** supported.","parameters":[{"name":"asset_id","in":"query","description":"The asset ID to get market status for (e.g. AAPL_24_5, EURUSD, XAUUSD)","required":true,"schema":{"$ref":"#/components/schemas/MarketStatusAssetID"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"A map of synthetic asset IDs to their signed price values representing market status info.","additionalProperties":{"$ref":"#/components/schemas/AggregatedSignedPrice"}}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## List EVM chain Deployments

> Get the list of EVM chain deployments and their details.

```json
{"openapi":"3.0.3","info":{"title":"Stork Oracle API","version":"1.0"},"tags":[],"servers":[{"url":"https://rest.jp.stork-oracle.network"}],"paths":{"/v1/deployments/evm":{"get":{"tags":["Deployments"],"summary":"List EVM chain Deployments","description":"Get the list of EVM chain deployments and their details.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Deployment"}}}}}}}}}}},"components":{"schemas":{"Deployment":{"type":"object","properties":{"chain_id":{"type":"integer","description":"The chain ID of the deployment."},"network":{"type":"string","description":"The network of the deployment."},"environment":{"type":"string","description":"The environment of the deployment."},"proxy_address":{"type":"string","description":"The proxy address of the deployment."},"block_explorer_url":{"type":"string","description":"The block explorer URL of the deployment."}},"description":"Represents an EVM chain deployment."}}}}
```

## \[Alpha] List assets being pushed on-chain by Stork

> \[Alpha] List assets and their configuration details being pushed on-chain by Stork Labs by chain and environment.

```json
{"openapi":"3.0.3","info":{"title":"Stork Oracle API","version":"1.0"},"tags":[],"servers":[{"url":"https://rest.jp.stork-oracle.network"}],"security":[{"token_auth":[]}],"components":{"securitySchemes":{"token_auth":{"description":"Enter your token in the format of \"Basic your-token\"","type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"PushedAsset":{"type":"object","properties":{"delta":{"type":"number","description":"The delta change percentage to trigger a price update."},"staleness":{"type":"number","description":"The maximum staleness in seconds to trigger a price update."}},"description":"Represents an asset being pushed on-chain by Stork."}}},"paths":{"/v0/deployments/stork_pushed_assets":{"get":{"tags":["Deployments"],"summary":"[Alpha] List assets being pushed on-chain by Stork","description":"[Alpha] List assets and their configuration details being pushed on-chain by Stork Labs by chain and environment.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/PushedAsset"}}}}}}}}}}}}}}
```


# Contract APIs

Th

This section contains an enumeration of the available smart-contract APIs that can developers can use in their applications on and off-chain. These functions are primarily useful for two functions:

* Writing Stork signed updates for specific assets to the contract - typically from off-chain applications
* Reading latest values for specific assets from the contract - typically from on-chain applications

The following APIs are available for supported chains:

{% content-ref url="/pages/u3hUplPxNL8x96NWbvjT" %}
[EVM](/api-reference/contract-apis/evm)
{% endcontent-ref %}

{% content-ref url="/pages/ZOXtpJw4wuRWWpxUQUFL" %}
[Solana / SVM](/api-reference/contract-apis/solana)
{% endcontent-ref %}

{% content-ref url="/pages/fEllyuC9aI3T4YIzwhl9" %}
[Sui](/api-reference/contract-apis/sui)
{% endcontent-ref %}

{% content-ref url="/pages/jI9doLhv5RK4343OrUwM" %}
[Aptos](/api-reference/contract-apis/aptos)
{% endcontent-ref %}

{% content-ref url="/pages/tNfwLC7bAUdM5S2JZxnA" %}
[CosmWasm](/api-reference/contract-apis/cosmwasm)
{% endcontent-ref %}

{% content-ref url="/pages/1hxelbk85ML5E8tMDEIk" %}
[Fuel](/api-reference/contract-apis/fuel)
{% endcontent-ref %}


# EVM

Programming API reference for the Stork EVM contract.

## SDK

EVM contracts can program against the [Stork contract'](https://github.com/Stork-Oracle/stork-external/tree/main/chains/evm/contracts/stork)s interface by using the stork-evm-sdk npm package available on [npmjs.com](https://www.npmjs.com/package/@storknetwork/stork-evm-sdk). This SDK provides an interface and useful struct for interacting with the Stork Contract.\
\
The Stork contract can also be used via the [Pyth and Chainlink](/resources/adapters) adapters.\
\
The Stork contract is built using [Hardhat](https://hardhat.org/).

## Getting Started

{% tabs %}
{% tab title="Solidity" %}
After setting up your Hardhat project, add the stork-evm-sdk to your project dependencies by adding the following line to the `"dependencies"` section of the programs `package.json`

```json
// package.json
"dependencies": {
    "@storknetwork/stork-evm-sdk": "^1.0.0"
  }
```

or with the following command:

```bash
npm i @storknetwork/stork-evm-sdk
```

You can now import the sdk's interface and types with:

```solidity
// YourContract.sol
import "@storknetwork/stork-evm-sdk/IStork.sol";
import "@storknetwork/stork-evm-sdk/StorkStructs.sol";
```

{% endtab %}
{% endtabs %}

## Concepts

### Upgradeability

The Stork contract is designed to be upgradeable using [OpenZeppelin's proxy pattern](https://docs.openzeppelin.com/contracts/5.x/learn/upgrading-smart-contracts). Ensure the proxy address remains consistent when interacting with the contract to avoid version mismatches.

## Methods

### Update Temporal Numeric Values V1

```solidity
function updateTemporalNumericValuesV1(
    StorkStructs.TemporalNumericValueInput[] calldata updateData
) public payable;
```

**Description**

Updates multiple temporal numeric values by verifying signatures and ensuring freshness.

**Parameters**

* `updateData`: Array of `TemporalNumericValueInput` structs containing feed updates.

**Behavior**

* Verifies the signature of each feed update using the stored EVM public key.
* Updates the feed value if the signature is valid and the value is fresher than the current state.
* Requires sufficient fee based on the number of updates.

**Errors**

* `InvalidSignature (0x8baa579f)`: If any feed update fails signature verification.
* `NoFreshUpdate (0xde2c57fa)`: If none of the provided updates are fresher than current values.
* `InsufficientFee (0x025dbdd4)`: If the provided fee is less than the required amount.

### Get Temporal Numeric Value V1

```solidity
function getTemporalNumericValueV1(
    bytes32 id
) public view returns (StorkStructs.TemporalNumericValue memory value);
```

**Description**

Retrieves the latest temporal numeric value for the specified feed ID. Checks for the staleness threshold set in the state, which varies between chains but is typically 3600 seconds.

**Parameters**

* `id`: The identifier of the feed.

**Returns**

* `value`: The latest `TemporalNumericValue` struct for the feed.

**Errors**

* `NotFound (0xc5723b51)`: If no value exists for the given feed ID.
* `StaleValue (0x24c4fe43)`: If the value is older than the valid time period.

### Get Temporal Numeric Value Unsafe V1

```solidity
function getTemporalNumericValueUnsafeV1(
    bytes32 id
) public view returns (StorkStructs.TemporalNumericValue memory value);
```

**Description**

Retrieves the latest temporal numeric value for the specified feed ID without checking its freshness.

**Parameters**

* `id`: The identifier of the feed.

**Returns**

* `value`: The latest `TemporalNumericValue` struct for the feed.

**Errors**

* `NotFound (0xc5723b51)`: If no value exists for the given feed ID.

### Get Update Fee V1

```solidity
function getUpdateFeeV1(
    StorkStructs.TemporalNumericValueInput[] calldata updateData
) public view returns (uint feeAmount);
```

**Description**

Calculates the total fee required for the given updates.

**Parameters**

* `updateData`: Array of `TemporalNumericValueInput` structs representing updates.

**Returns**

* `feeAmount`: The total fee required for the updates.

### Verify Publisher Signatures V1

```solidity
function verifyPublisherSignaturesV1(
    StorkStructs.PublisherSignature[] calldata signatures,
    bytes32 merkleRoot
) public pure returns (bool);
```

**Description**

Verifies multiple publisher signatures against the provided Merkle root.

**Parameters**

* `signatures`: Array of `PublisherSignature` structs.
* `merkleRoot`: The Merkle root to validate against.

**Returns**

* `bool`: True if all signatures are valid and match the Merkle root.

### Version

```solidity
function version() public pure returns (string memory);
```

**Description**

Retrieves the current version of the contract.

**Returns**

* `string`: The version string (e.g., "1.0.3").

## Examples

An example contract can be found in the the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/evm/examples/stork).


# Solana / SVM

Programming API reference for the Stork Solana contract.

## SDK

Solana contracts can program against [Stork's contract](https://github.com/Stork-Oracle/stork-external/tree/main/chains/solana/contracts) using the stork-solana-sdk rust crate available on [crates.io](https://crates.io/crates/stork-solana-sdk). This SDK provides useful methods and structs for **reading** from stork price feed account. The Stork contract and SDK are built on top of [Anchor](https://github.com/coral-xyz/anchor).

### Installation

{% tabs %}
{% tab title="Rust" %}
After setting up your Anchor project, add the stork-solana-sdk to your project dependencies by adding the following line to the `[dependencies]` section of the programs `Cargo.toml` :

```toml
// Cargo.toml
[dependencies]
stork-solana-sdk = ">0.0.7"
```

or the following command:

```bash
cargo add stork-solana-sdk
```

You can now import the sdk's interfaces with:

<pre class="language-rust"><code class="lang-rust"><strong>// your_module.rs
</strong><strong>use stork_solana_sdk::{&#x3C;...>};
</strong></code></pre>

{% endtab %}
{% endtabs %}

### Documentation

Documentation for the methods, structs, and constants provided by the stork-solana-sdk can be found on [doc.rs](https://docs.rs/stork-solana-sdk).

### Examples

Example usage of the stork-solana-sdk for consuming Stork prices can be found in the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/solana/examples).

## Contract

Stork's contract depends on the [stork-solana-sdk crate](https://crates.io/crates/stork-solana-sdk) and [Anchor](https://github.com/coral-xyz/anchor), and contains useful methods for **writing** to the Stork Config account, as well as Temporal Numeric Value Feed PDA accounts that represent Stork data feeds. The full source-code can be found in the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/solana/contracts). For the official deployments, please see the [Solana Contract Addresses](/resources/contract-addresses/solana).


# Sui

Programming API reference for the Stork Sui contract.

## SDK

Sui contracts can integrate with the [Stork contract](https://github.com/Stork-Oracle/stork-external/tree/main/chains/sui/contracts) by including it as a project dependency.

## Installation

{% tabs %}
{% tab title="Move" %}
After setting up your Sui Move project, add the Stork contract to your project dependencies by adding the following line to the `[dependencies]` section of your projects `Move.toml`:

```toml
// Move.toml
[dependencies]
stork = { git = "https://github.com/stork-oracle/stork-external.git", subdir = "chains/sui/contracts", rev = "main" }
```

You can now import the Stork interfaces with:

```rust
// your_module.move
use stork::{<...>}
```

{% endtab %}
{% endtabs %}

## Concepts

### Version Gating

Some functions, especially if they interact with the `StorkState` object, are considered "version gated". If the number in the version field if the passed `StorkState` is not the same as the `Version` constant in the code, the function will fail will `EIncorrectVersion`. This can occur when the Stork contract address being used is not pointing to the most recent update of the contract, and is a mechanism to protect against issues that may be present in old versions of the contract. Functions that are not directly version gated, but call version gated functions, are considered version gated.

### Stork State Object

Many functions require passing a reference to the `StorkState` object. We recommend deriving this address from the contract address in code, rather than hardcoding it anywhere. An example of this derivation can be found in the app in the example in [#examples](#examples "mention"). Though we recommend derivation, we also provide the address of the state object in the [Sui Contract Addresses page](/resources/contract-addresses/sui).

## stork::stork Methods

### Update Single Temporal Numeric Value EVM

```rust
public fun update_single_temporal_numeric_value_evm(
        // stork state object
        stork_state: &mut StorkState,
        // the input data
        update_data: UpdateTemporalNumericValueEvmInput,
        // fee
        fee: Coin<SUI>,
        // context
        ctx: &mut TxContext,
    )
```

**Description**

Updates the latest value in the relevant feed object based on the provided update data object.

**Parameters**

* `stork_state: &mut StorkState`: A mutable reference to the `StorkState` object.
* `update_data: UpdateTemporalNumericValueEvmInput`: Update data object for a single asset.
* `fee: Coin<SUI>`: The fee to pay for the update.
* `ctx: &mut TxContext`: Transaction context.

**Behavior**

* Verifies the update data's signature using the Stork EVM public key stored on the state object.
* Verifies that the update is more recent than the data currently in the feed object.
* If the signature is invalid, the function errors with `EInvalidSignature`.
* If the signature is valid but the update is not fresher, the function does not error but does not update the feed object.
* If both verifications pass, updates the feed object and emits a `TemporalNumericValueFeedUpdateEvent`

**Errors**

* `EInvalidSignature`: If the signature verification fails.
* `EInsufficientFee`: If the fee provided is less than the required amount.

This function is version gated.

### Update Multiple Temporal Numeric Values EVM

```rust
public fun update_multiple_temporal_numeric_values_evm(
        // stork state object
        stork_state: &mut StorkState,
        // the input data
        update_data: UpdateTemporalNumericValueEvmInputVec,
        // fee
        fee: Coin<SUI>,
        // context
        ctx: &mut TxContext,
    )
```

**Description**

Efficiently updates the latest values in multiple feed objects based on the provided update data object.

**Parameters**

* `stork_state: &mut StorkState`: A mutable reference to the `StorkState` object.
* `update_data: UpdateTemporalNumericValueEvmInputVec`: Update data object for multiple assets.
* `fee: Coin<SUI>`: The fee to pay for the updates.
* `ctx: &mut TxContext`: Transaction context.

**Behavior**

* Verifies the signature for each update using the Stork EVM public key.
* Verifies that each update is fresher than the current feed data.
* If any signature fails verification, the function errors with `EInvalidSignature` for all updates.
* If some updates are not fresher, those specific feed objects are skipped without erroring.
* Successfully verified and fresher updates are applied to their respective feed objects.
* Emits a `TemporalNumericValueFeedUpdateEvent` for each successful update.

**Errors**

* `EInvalidSignature`: If any update's signature verification fails.
* `EInsufficientFee`: If the fee provided is less than the required total amount.

This function is more efficient than multiple calls to [`Update Single Temporal Numeric Value EVM`](#update-single-temporal-numeric-value-evm) for updating multiple assets.

This function is version gated

### Get Temporal Numeric Value Unchecked

<pre class="language-rust"><code class="lang-rust">public fun get_temporal_numeric_value_unchecked(
    // stork state object
    stork_state: &#x26;StorkState,
    // encoded asset id
    feed_id: vector&#x3C;u8>
<strong>    ): TemporalNumericValue
</strong></code></pre>

**Description**

Retrieves the latest value for a specified feed without additional checks.

**Parameters**

* `stork_state: &StorkState`: A reference to the `StorkState` object.
* `feed_id: vector<u8>`: The [encoded asset ID](/introduction/core-concepts#asset-ids) of the feed to read.

**Returns**

* `TemporalNumericValue`: The latest value for the relevant feed.

**Errors**

* `EFeedNotFound`: If the specified feed ID does not exist.

This function is version gated.

## stork::state Methods

### Get Stork EVM Public Key

```rust
public fun get_stork_evm_public_key(
    stork_state: &StorkState
    ): EvmPubkey 
```

**Description**

Retrieves the stored EVM public key from the `StorkState`.

**Parameters**

* `stork_state: &StorkState`: A reference to the `StorkState` object.

**Returns**

* `EvmPubkey`: The value of the `stork_evm_public_key` field of the state.

This function is version gated.

### Get Single Update Fee in Mist

```rust
public fun get_single_update_fee_in_mist(
    stork_state: &StorkState
    ): u64
```

**Description**

Retrieves the fee required to update a single value from the `StorkState`.

**Parameters**

* `stork_state: &StorkState`: A reference to the `StorkState` object.

**Returns**

* `u64`: The value of the `single_update_fee_in_mist` field of the state.

This function is version gated.

### Get Stork Sui Address

```rust
public fun get_stork_sui_address(
    stork_state: &StorkState
    ): address
```

**Description**

Retrieves the stored Sui address of the Stork program from the `StorkState`.

**Parameters**

* `stork_state: &StorkState`: A reference to the `StorkState` object.

**Returns**

* `address`: The value of the `stork_sui_address` field of the state.

This function is version gated.

### Get Version

```rust
public fun get_version(
    stork_state: &StorkState
    ): u64
```

Retrieves the version of the `StorkState`.

**Parameters**

* `stork_state: &StorkState`: A reference to the `StorkState` object.

**Returns**

* `u64`: The value of the `version` field of the state.

This function is version gated.

## stork::temporal\_numeric\_value\_evm\_vec Methods

### New

```rust
public fun new(
        id: vector<u8>,
        temporal_numeric_value_timestamp_ns: u64,
        temporal_numeric_value_magnitude: u128,
        temporal_numeric_value_negative: bool,
        publisher_merkle_root: vector<u8>,
        value_compute_alg_hash: vector<u8>,
        r: vector<u8>,
        s: vector<u8>,
        v: u8,
    ): UpdateTemporalNumericValueEvmInput
```

**Description**

Constructs an object representing an update for a single asset for passing to [`Update Single Temporal Numeric Value EVM`](#update-single-temporal-numeric-value-evm).

**Parameters**

* `id: vector<u8>`: The asset ID to update.
* `temporal_numeric_value_timestamp_ns: u64`: Timestamp of the temporal numeric value.
* `temporal_numeric_value_magnitude: u128`: The magnitude of the numeric value.
* `temporal_numeric_value_negative: bool`: Indicates whether the value is negative.
* `publisher_merkle_root: vector<u8>`: The publisher's Merkle root.
* `value_compute_alg_hash: vector<u8>`: Hash of the compute algorithm.
* `r: vector<u8>`: R component of the signature.
* `s: vector<u8>`: S component of the signature.
* `v: u8`: V component of the signature.

**Returns**

* `UpdateTemporalNumericValueEvmInput`: The constructed update object.

## stork::temporal\_numeric\_value\_evm\_input Methods

### New

```rust
public fun new(
        ids: vector<vector<u8>>,
        temporal_numeric_value_timestamp_nss: vector<u64>,
        temporal_numeric_value_magnitudes: vector<u128>,
        temporal_numeric_value_negatives: vector<bool>,
        publisher_merkle_roots: vector<vector<u8>>,
        value_compute_alg_hashes: vector<vector<u8>>,
        rs: vector<vector<u8>>,
        ss: vector<vector<u8>>,
        vs: vector<u8>,
    ): UpdateTemporalNumericValueEvmInputVec
```

**Description**

Creates a vector of update objects, each representing an update for a specific asset, where the corresponding update data is keyed by index. For example:

* `ids[i]`
* `temporal_numeric_value_timestamp_nss[i]`
* `temporal_numeric_value_magnitudes[i]`
* ...

all belong to the same update.

**Parameters**

* `ids: vector<vector<u8>>`: Asset IDs for the updates.
* `temporal_numeric_value_timestamp_nss: vector<u64>`: Timestamps for the updates.
* `temporal_numeric_value_magnitudes: vector<u128>`: Magnitudes of the numeric values.
* `temporal_numeric_value_negatives: vector<bool>`: Indicates whether each value is negative.
* `publisher_merkle_roots: vector<vector<u8>>`: Publisher Merkle roots.
* `value_compute_alg_hashes: vector<vector<u8>>`: Hashes of the compute algorithms.
* `rs: vector<vector<u8>>`: R components of the signatures.
* `ss: vector<vector<u8>>`: S components of the signatures.
* `vs: vector<u8>`: V components of the signatures.

**Behavior**

* Constructs an `UpdateTemporalNumericValueEvmInput` object for each set of inputs and bundles them into one object.
* Validates that all input vectors have the same length.

**Errors**

* `EInvalidLengths`: If input vectors do not have the same length.
* `ENoUpdates`: If the input vector is empty.

**Returns**

* `UpdateTemporalNumericValueEvmInputVec`: The constructed object containing multiple updates.

## Examples

Example usage of the Stork Sui contract can be found in the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/sui/examples).


# Aptos

Programming API reference for the Stork Aptos contract.

## SDK

Aptos contracts can integrate with the [Stork contract](https://github.com/Stork-Oracle/stork-external/tree/main/chains/aptos/contracts) including it as a project dependency.

## Installation

{% tabs %}
{% tab title="Move" %}
After setting up your Aptos Move project, add the Stork contract to your project dependencies by adding the following lines to your projects `Move.toml` :

```toml
// Move.toml
[addresses]
// other addresses ...
stork = "<stork-address>"

[dependencies.stork]
git = "https://github.com/stork-oracle/stork-external.git"
rev = "main"
subdir = "chains/aptos/contracts"
```

For the official Stork contract addresses, see [Aptos Contract Addresses](/resources/contract-addresses/aptos).\
\
You can now import the Stork interfaces with:

```rust
// your_module.move
use stork::{<...>}
```

{% endtab %}
{% endtabs %}

## stork::stork Methods

### Update Single Temporal Numeric Value EVM

```rust
public entry fun update_single_temporal_numeric_value_evm(
        // signer of the transaction to pay the fee
        signer: &signer,
        // asset id
        asset_id: vector<u8>,
        // temporal numeric value timestamp ns
        temporal_numeric_value_timestamp_ns: u64,
        // temporal numeric value magnitude
        temporal_numeric_value_magnitude: u128,
        // temporal numeric value negative
        temporal_numeric_value_negative: bool,
        // publisher's merkle root
        publisher_merkle_root: vector<u8>,
        // value compute algorithm hash
        value_compute_alg_hash: vector<u8>,
        // signature r
        r: vector<u8>,
        // signature s
        s: vector<u8>,
        // signature v
        v: u8,
    ) 
```

#### Description

Updates the latest value in the relevant feed object based on the provided update values.

#### Parameters

* `signer: &signer`: A reference to the signer of the transaction, automatically provided by the MoveVM.
* `asset_id: vector<u8>`: Encoded asset ID as a byte vector for the update .
* `temporal_numeric_value_timestamp_ns: u64`: Timestamp of the temporal numeric value.
* `temporal_numeric_value_magnitude: u128`: The magnitude of the numeric value.
* `temporal_numeric_value_negative: bool`: Indicates whether the value is negative.
* `publisher_merkle_root: vector<u8>`: The publisher's Merkle root.
* `value_compute_alg_hash: vector<u8>`: Hash of the compute algorithm.
* `r: vector<u8>`: R component of the signature.
* `s: vector<u8>`: S component of the signature.
* `v: u8`: V component of the signature.

#### Behavior

* Verifies the update data's signature using the Stork EVM public key stored in the `StorkState` resource.
* Verifies that the update is more recent than the data currently in the feed.
* If the signature is invalid, the function errors with `E_INVALID_SIGNATURE`.
* If the update is not recent, the function does not error but does no update the feed object.
* If both verification pass, updates the `TemporalNumericValue` for the asset and emits a `TemporalNumericValueUpdateEvent`.

#### Errors

* `E_INVALID_SIGNATURE:` If the signature verification fails.

### Update Multiple Temporal Numeric Values EVM

```rust
public entry fun update_multiple_temporal_numeric_values_evm(
        // signer of the transaction to pay the fee
        signer: &signer,
        // asset ids
        ids: vector<vector<u8>>,
        // temporal numeric value timestamp ns
        temporal_numeric_value_timestamp_ns: vector<u64>,
        // temporal numeric value magnitude
        temporal_numeric_value_magnitude: vector<u128>,
        // temporal numeric value negative
        temporal_numeric_value_negative: vector<bool>,
        // publisher's merkle roots
        publisher_merkle_roots: vector<vector<u8>>,
        // value compute algorithm hashes
        value_compute_alg_hashes: vector<vector<u8>>,
        // signatures r
        rs: vector<vector<u8>>,
        // signatures s
        ss: vector<vector<u8>>,
        // signatures v
        vs: vector<u8>,
    )
```

#### Description

Efficiently updates the latest values for multiple assets based on the proved update data vectors, where the corresponding update data is keyed by index. For example:

* `ids[i]`
* `temporal_numeric_value_timestamp_nss[i]`
* `temporal_numeric_value_magnitudes[i]`
* ...

all belong to the same update.

#### Parameters

* `signer: &signer`: A reference to the signer of the transaction, automatically provided by the MoveVM.
* `ids: vector<vector<u8>>`: Asset IDs for the updates.
* `temporal_numeric_value_timestamp_nss: vector<u64>`: Timestamps for the updates.
* `temporal_numeric_value_magnitudes: vector<u128>`: Magnitudes of the numeric values.
* `temporal_numeric_value_negatives: vector<bool>`: Indicates whether each value is negative.
* `publisher_merkle_roots: vector<vector<u8>>`: Publisher Merkle roots.
* `value_compute_alg_hashes: vector<vector<u8>>`: Hashes of the compute algorithms.
* `rs: vector<vector<u8>>`: R components of the signatures.
* `ss: vector<vector<u8>>`: S components of the signatures.
* `vs: vector<u8>`: V components of the signatures.

#### Behavior

* Validates that all input vectors have the same length.
* Verifies the signature for each update using the Stork EVM public key.
* Verifies that each update is more recent than the current asset data.
* If any signature fails verification, the function errors with `E_INVALID_SIGNATURE` for all updates.
* If some updates are not recent, those updates are skipped without erroring.
* Successfully verified and recent updates are applied.
* Emits a `TemporalNumericValueUpdateEvent` for each successful update.

#### Errors

* `E_INVALID_SIGNATURE:` If any update's signature verification fails.
* `E_NO_UPDATES`: If the ids vector is empty
* `E_INVALID_LENGTHS`: If not all the input vectors are the same length.

### Get Temporal Numeric Value Unchecked

<pre class="language-rust"><code class="lang-rust"><strong>#[view]
</strong><strong>public fun get_temporal_numeric_value_unchecked(
</strong>        // The asset id
        asset_id: vector&#x3C;u8>,
    ): TemporalNumericValue {
        let encoded_asset_id = encoded_asset_id::from_bytes(asset_id);
        temporal_numeric_value_feed_registry::get_latest_canonical_temporal_numeric_value_unchecked(encoded_asset_id)
    }
</code></pre>

#### Description

View function that retrieves the latest value for a specified asset without additional checks.

#### Parameters

* `asset_id: vector<u8>`: The [encoded asset ID](/introduction/core-concepts#asset-ids) of the feed to read.

#### Returns

* `TemporalNumericValue`: The latest value for the relevant asset.

#### Errors

* `E_FEED_NOT_FOUND`: If the specified feed does exist.

## stork::state Methods

### Get Owner

```rust
#[view]
public fun get_owner(): address acquires StorkState
```

#### Description

View function that retrieves the stored address of the owner of the Stork contract from the the `StorkState` .

#### Returns

* `address`: The value of the `owner` field of the state.

### Get Stork EVM Public Key

```rust
#[view]
public fun get_stork_evm_public_key(): EvmPubKey acquires StorkState
```

#### Description

View function that retrieves the stored EVM public key from the `StorkState`.

#### Returns

* `EvmPubkey`: The value of the `stork_evm_public_key` field of the state.

### Get Single Update Fee in Octas

```rust
#[view]
public fun get_single_update_fee_in_octas(): u64 acquires StorkState
```

#### Description

View function that retrieves the fee required to update a single value from the StorkState.

#### Returns

* `u64`: The value of the `single_update_fee_in_octas` field of the state.

### State Exists

```rust
 #[view]
 public fun state_exists(): bool
```

#### Description

View function that checks whether or not the `StorkState` resource exists. This can be used as a proxy for whether or not the Stork contract has been initialized.

#### Returns

* `bool`: Whether or not the `StorkState` resource exists.

## Examples

Example usage of the Stork Aptos contract can be found in the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/aptos/examples).


# CosmWasm

Programming API reference for the Stork CosmWasm contract.

## SDK

CosmWasm contracts can integrate with the [Stork contract](https://github.com/Stork-Oracle/stork-external/tree/main/chains/cosmwasm/contracts) using the stork-cw rust crate available on [crates.io](https://crates.io/crates/stork-cw). This crate contains the full contract code, which can be used as an SDK by enabling the `library` feature. For more documentation, please also see the [docs.rs page](https://docs.rs/stork-cw/0.1.1/stork_cw/). The Stork contract / SDK are built on top of [Sylvia](https://docs.cosmwasm.com/sylvia).

## Installation

{% tabs %}
{% tab title="Rust" %}
After setting up your CosmWasm project, add the stork-cw crate to your project dependencies by adding the following line to the `[dependencies]` section of the programs `Cargo.toml`:

```toml
// Cargo.toml
[dependencies]
stork-cw = { version = ">0.1.2", features = ["library"]
```

or the following command:

```bash
cargo add stork-cw --features library
```

You can now import the stork-cw's interfaces with:

```rust
// contract.rs
use stork_cw::{<...>}
```

{% endtab %}
{% endtabs %}

## Query Messages

```rust
pub enum QueryMsg {
    GetLatestCanonicalTemporalNumericValueUnchecked {
        id: EncodedAssetId,
    },
    GetSingleUpdateFee {},
    GetStorkEvmPublicKey {},
    GetOwner {},
}
```

### Get Latest Canonical Temporal Numeric Value Unchecked

#### Description

Retrieves the latest value for a specified asset without additional checks.

#### Parameters

* `id: EncodedAssetId`: The [encoded asset ID](/introduction/core-concepts#asset-ids) of the feed to read.

#### Response

```rust
pub struct GetTemporalNumericValueResponse {
    pub temporal_numeric_value: TemporalNumericValue,
}
```

Contains a `TemporalNumericValue` instance representing the latest timestamped value for the relevant asset.

#### Errors

* `StorkError::FeedNotFound` : If the specified feed does not exist.

### Get Single Update Fee

#### Description

Retrieves the fee required to update a single feed.

#### Response

```rust
pub struct GetSingleUpdateFeeResponse {
    pub fee: Coin,
}
```

Contains a `Coin` instance representing the amount and denomination of the fee.

### Get Stork EVM Public Key

#### Description

Retrieves the stored EVM public key used for message verification.

#### Response

```rust
pub struct GetStorkEvmPublicKeyResponse {
    pub stork_evm_public_key: EvmPubkey,
}
```

Contains an `EvmPubkey`.

## Get Owner

#### Description

Retrieves the stored address of the owner of the Stork contract.

#### Response

```rust
pub struct GetOwnerResponse {
    pub owner: Addr,
}
```

Contains the `Addr` of the owner.

## Execution Messages

```rust
pub enum ExecMsg {
        UpdateTemporalNumericValuesEvm { update_data: Vec<UpdateData> },
        // admin functions ..
    }
```

### Update Temporal Numeric Values EVM

Update the latest value of one or more assets based on the provided update values.

#### Parameters

* `update_data: Vec<UpdateData>` : A vector of updates, where each update contains:
  * `id: EncodedAssetId` : Encoded asset ID (byte array) of the asset to update
  * `temporal_numeric_value: TemporalNumericValue` : Struct containing the value and timestamp of the update.
  * `publisher_merkle_root: [u8; 32]` : The publisher's Merkle root.
  * `value_compute_alg_hash: [u8; 32]`: Hash of the compute algorithm.
  * `r: [u8; 32]` : R component of the signature.
  * `s: [u8; 32]` : S component of the signature.
  * `v: u8`: V component of the signature.

#### Behavior

* Verifies the update data's signature using the Stork EVM public key stored in the contracts state.
* Verifies that the update is more recent than the data currently in the feed.
* If the signature is invalid, the function errors with `StorkError::InvalidSignature`.
* If the update is not recent, the function does not error but does no update the feed object.
* If both verification pass, updates the `TemporalNumericValue` for the asset and emits a `temporal_numeric_value_update` event.

#### Errors

* `StorkError::InsufficientFunds`: If an insufficient fee is included with the message for the number of updates.
* `StorkError::InvalidSignature`: If the signature verification fails.

## Examples

Example usage of the Stork CosmWasm contract in both Sylvia and CosmWasm Core contracts can be found in the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/cosmwasm/examples).


# Fuel

Programming API reference for the Stork Fuel contract.

## SDK

Fuel contracts can program against [Stork's contract](https://github.com/Stork-Oracle/stork-external/tree/main/chains/fuel/contracts) using the stork\_sway\_sdk rust crate available on [forc.pub](https://forc.pub/package/stork_sway_sdk). This SDK provides useful methods and structs for interacting with the stork contract. The Stork contract and SDK are built with [Sway](https://docs.fuel.network/docs/sway/).

## Installation

{% tabs %}
{% tab title="Sway" %}
After setting up your sway project, add the stork\_sway\_sdk to your project dependencies by adding the following line to the `[dependencies]` section of the programs `Forc.toml`

```toml
// Forc.toml
[dependencies]
stork_sway_sdk = "0.0.5"
```

or the following command:

```bash
forc add stork_sway_sdk@0.0.5
```

You can now import the stork sdk's interfaces with:

```rust
// your_contract.sw
use stork_sway_sdk::{<...>}
```

{% endtab %}
{% endtabs %}

## Methods

These methods are all defined in the contract abi, which is defined in the `interface` module of the stork\_sway\_sdk.

### Update Temporal Numeric Values V1

```rust
#[storage(read, write), payable]
fn update_temporal_numeric_values_v1(
    // vector of input data
    update_data: Vec<TemporalNumericValueInput>
)
```

#### Description

Updates multiple temporal numeric values by verifying signatures and ensuring freshness.

#### Parameters

* `update_data`: Vector of `TemporalNumericValueInput` structs containing feeding updates.

#### Behavior

* Verifies the signature of each feed update using the stored EVM public key.
* Updates the feed value if the signature is valid and the value is more fresh then the current state.
* Requires sufficient fee based on the number of updates (in the base asset).

#### Errors

* `InvalidSignature`: If any feed update fails signature verification.
* `NoFreshUpdate`: If none of the provided updates are fresher than current values.
* `IncorrectFeeAsset`: If the payed asset is not the base asset of the chain.
* `InsufficientFee`: If the provided fee is less than the required amount.

### Get Temporal Numeric Value Unchecked V1

```rust
#[storage(read)]
fn get_temporal_numeric_value_unchecked_v1(
    // encoded asset id
    id: b256
) -> TemporalNumericValue;
```

#### Description

Retrieves the latest temporal numeric value for the specified asset ID without checking its freshness.

#### Parameters

* `id`: The encoded asset id of the feed.

#### Returns

* `TemporalNumericValue` : The latest value for the relevant feed.

#### Errors

* `FeedNotFound`: If no value exists for the given asset ID.

### Get Update Fee V1

```rust
#[storage(read)]
fn get_update_fee_v1(
    // vector of input data
    update_data: Vec<TemporalNumericValueInput>
) -> u64;
```

#### Description

Calculates the total fee required for the given updates.

#### Parameters

* `update_data`: Array of 'TemporalNumericValueInput\` structs representing updates.

#### Returns

* `u64`: The total fee required for the updates.

### Version

```rust
fn version() -> String;
```

#### Description

Retrieves the current version of the contract.

#### Returns

* `String`: The version string (e.g. "1.0.0")

## Examples

Example usage of the Stork Fuel contract and sdk can be found in the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/fuel/examples).


# Initia

Programming API reference for the Stork Initia contracts.

{% content-ref url="/pages/VB5pS2r3YDL5zmSxGvKB" %}
[MiniMove](/api-reference/contract-apis/initia/minimove)
{% endcontent-ref %}


# MiniMove

Programming API reference for the Stork Initia MiniMove contract.

## SDK

Aptos contracts can integrate with the [Stork contract](https://github.com/Stork-Oracle/stork-external/tree/main/chains/initia_minimove/contracts) including it as a project dependency.

## Installation

{% tabs %}
{% tab title="Move" %}
After setting up your Initia MiniMove Move project, add the Stork contract to your project dependencies by adding the following lines to your projects `Move.toml` :

```toml
// Move.toml
[addresses]
// other addresses ...
stork = "<stork-address>"

[dependencies.stork]
git = "https://github.com/stork-oracle/stork-external.git"
rev = "main"
subdir = "chains/initia_minimove/contracts"
```

For the official Stork contract addresses, see [Initia MiniMove Contract Addresses](/resources/contract-addresses/initia/minimove).\
\
You can now import the Stork interfaces with:

```rust
// your_module.move
use stork::{<...>}
```

{% endtab %}
{% endtabs %}

## stork::stork Methods

### Update Single Temporal Numeric Value EVM

```rust
public entry fun update_single_temporal_numeric_value_evm(
        // signer of the transaction to pay the fee
        signer: &signer,
        // asset id
        asset_id: vector<u8>,
        // temporal numeric value timestamp ns
        temporal_numeric_value_timestamp_ns: u64,
        // temporal numeric value magnitude
        temporal_numeric_value_magnitude: u128,
        // temporal numeric value negative
        temporal_numeric_value_negative: bool,
        // publisher's merkle root
        publisher_merkle_root: vector<u8>,
        // value compute algorithm hash
        value_compute_alg_hash: vector<u8>,
        // signature r
        r: vector<u8>,
        // signature s
        s: vector<u8>,
        // signature v
        v: u8,
    ) 
```

#### Description

Updates the latest value in the relevant feed object based on the provided update values.

#### Parameters

* `signer: &signer`: A reference to the signer of the transaction, automatically provided by the MoveVM.
* `asset_id: vector<u8>`: Encoded asset ID as a byte vector for the update .
* `temporal_numeric_value_timestamp_ns: u64`: Timestamp of the temporal numeric value.
* `temporal_numeric_value_magnitude: u128`: The magnitude of the numeric value.
* `temporal_numeric_value_negative: bool`: Indicates whether the value is negative.
* `publisher_merkle_root: vector<u8>`: The publisher's Merkle root.
* `value_compute_alg_hash: vector<u8>`: Hash of the compute algorithm.
* `r: vector<u8>`: R component of the signature.
* `s: vector<u8>`: S component of the signature.
* `v: u8`: V component of the signature.

#### Behavior

* Verifies the update data's signature using the Stork EVM public key stored in the `StorkState` resource.
* Verifies that the update is more recent than the data currently in the feed.
* If the signature is invalid, the function errors with `E_INVALID_SIGNATURE`.
* If the update is not recent, the function does not error but does no update the feed object.
* If both verification pass, updates the `TemporalNumericValue` for the asset and emits a `TemporalNumericValueUpdateEvent`.

#### Errors

* `E_INVALID_SIGNATURE:` If the signature verification fails.

### Update Multiple Temporal Numeric Values EVM

```rust
public entry fun update_multiple_temporal_numeric_values_evm(
        // signer of the transaction to pay the fee
        signer: &signer,
        // asset ids
        ids: vector<vector<u8>>,
        // temporal numeric value timestamp ns
        temporal_numeric_value_timestamp_ns: vector<u64>,
        // temporal numeric value magnitude
        temporal_numeric_value_magnitude: vector<u128>,
        // temporal numeric value negative
        temporal_numeric_value_negative: vector<bool>,
        // publisher's merkle roots
        publisher_merkle_roots: vector<vector<u8>>,
        // value compute algorithm hashes
        value_compute_alg_hashes: vector<vector<u8>>,
        // signatures r
        rs: vector<vector<u8>>,
        // signatures s
        ss: vector<vector<u8>>,
        // signatures v
        vs: vector<u8>,
    )
```

#### Description

Efficiently updates the latest values for multiple assets based on the proved update data vectors, where the corresponding update data is keyed by index. For example:

* `ids[i]`
* `temporal_numeric_value_timestamp_nss[i]`
* `temporal_numeric_value_magnitudes[i]`
* ...

all belong to the same update.

#### Parameters

* `signer: &signer`: A reference to the signer of the transaction, automatically provided by the MoveVM.
* `ids: vector<vector<u8>>`: Asset IDs for the updates.
* `temporal_numeric_value_timestamp_nss: vector<u64>`: Timestamps for the updates.
* `temporal_numeric_value_magnitudes: vector<u128>`: Magnitudes of the numeric values.
* `temporal_numeric_value_negatives: vector<bool>`: Indicates whether each value is negative.
* `publisher_merkle_roots: vector<vector<u8>>`: Publisher Merkle roots.
* `value_compute_alg_hashes: vector<vector<u8>>`: Hashes of the compute algorithms.
* `rs: vector<vector<u8>>`: R components of the signatures.
* `ss: vector<vector<u8>>`: S components of the signatures.
* `vs: vector<u8>`: V components of the signatures.

#### Behavior

* Validates that all input vectors have the same length.
* Verifies the signature for each update using the Stork EVM public key.
* Verifies that each update is more recent than the current asset data.
* If any signature fails verification, the function errors with `E_INVALID_SIGNATURE` for all updates.
* If some updates are not recent, those updates are skipped without erroring.
* Successfully verified and recent updates are applied.
* Emits a `TemporalNumericValueUpdateEvent` for each successful update.

#### Errors

* `E_INVALID_SIGNATURE:` If any update's signature verification fails.
* `E_NO_UPDATES`: If the ids vector is empty
* `E_INVALID_LENGTHS`: If not all the input vectors are the same length.

### Get Temporal Numeric Value Unchecked

<pre class="language-rust"><code class="lang-rust"><strong>#[view]
</strong><strong>public fun get_temporal_numeric_value_unchecked(
</strong>        // The asset id
        asset_id: vector&#x3C;u8>,
    ): TemporalNumericValue {
        let encoded_asset_id = encoded_asset_id::from_bytes(asset_id);
        temporal_numeric_value_feed_registry::get_latest_canonical_temporal_numeric_value_unchecked(encoded_asset_id)
    }
</code></pre>

#### Description

View function that retrieves the latest value for a specified asset without additional checks.

#### Parameters

* `asset_id: vector<u8>`: The [encoded asset ID](/introduction/core-concepts#asset-ids) of the feed to read.

#### Returns

* `TemporalNumericValue`: The latest value for the relevant asset.

#### Errors

* `E_FEED_NOT_FOUND`: If the specified feed does exist.

## stork::state Methods

### Get Owner

```rust
#[view]
public fun get_owner(): address acquires StorkState
```

#### Description

View function that retrieves the stored address of the owner of the Stork contract from the the `StorkState` .

#### Returns

* `address`: The value of the `owner` field of the state.

### Get Stork EVM Public Key

```rust
#[view]
public fun get_stork_evm_public_key(): EvmPubKey acquires StorkState
```

#### Description

View function that retrieves the stored EVM public key from the `StorkState`.

#### Returns

* `EvmPubkey`: The value of the `stork_evm_public_key` field of the state.

### Get Single Update Fee

```rust
#[view]
public fun get_single_update_fee(): Fee acquires StorkState
```

#### Description

View function that retrieves the fee required to update a single value from the `StorkState`.

#### Returns

* `Fee`: The `Fee` object containing the `amount: u64` and `denom: String` .

### State Exists

```rust
 #[view]
 public fun state_exists(): bool
```

#### Description

View function that checks whether or not the `StorkState` resource exists. This can be used as a proxy for whether or not the Stork contract has been initialized.

#### Returns

* `bool`: Whether or not the `StorkState` resource exists.

## Examples

Example usage of the Stork Aptos contract can be found in the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/initia_minimove/examples).


# Chain Pusher Configs

This section contains the specifications for configurations for the [Chain Pusher.](https://github.com/Stork-Oracle/stork-external/tree/main/apps/chain_pusher)

## Configurations:

{% content-ref url="/pages/a6fwMxX5wf8G8qGJuf6J" %}
[Asset Config YAML](/api-reference/chain-pusher-configs/asset-config-yaml)
{% endcontent-ref %}


# Asset Config YAML

This document describes the structure of the YAML configuration file used to define assets and their associated parameters for the Chain Pusher.

## Overview

The `asset-config.yaml` configuration file contains a root key `assets`, which is a mapping of asset identifiers (`asset_id`) to their respective configurations. Each asset configuration includes essential metadata and thresholds required by the program.

## YAML Structure

```yaml
assets:
  <asset_id>:
    asset_id: <string>
    fallback_period_sec: <integer>
    percent_change_threshold: <float>
    encoded_asset_id: <string>
```

## Root Key: `assets`

* **Type**: Object
* **Description**: A mapping of `asset_id` to its configuration. Each entry is an Asset Entry keyed by the `asset_id`.

## Asset Entry

Each asset entry contains the following keys:

### **`asset_id`**

* **Type**: String
* **Description**: The plain-text identifier for the asset.
* **Example**: `BTCUSD`

### **`fallback_period_sec`**

* **Type**: Integer
* **Description**: The maximum time in seconds between updates if the `percent_change_threshold` is not met.
* **Example**: `60`

### **`percent_change_threshold`**

* **Type**: Float
* **Description**: The percentage change threshold required to trigger an update.
* **Example**: `1.0`

### **`encoded_asset_id`**

* **Type**: String
* **Description**: The Keccak256 hash of the plain-text `asset_id`. This is used as a unique, encoded identifier for the asset.
* **Example**: `0x7404e3d104ea7841c3d9e6fd20adfe99b4ad586bc08d8f3bd3afef894cf184de`

## Example Configuration

Below is an example YAML configuration file with a single asset entry:

```
assets:
  BTCUSD:
    asset_id: BTCUSD
    fallback_period_sec: 60
    percent_change_threshold: 1.0
    encoded_asset_id: 0x7404e3d104ea7841c3d9e6fd20adfe99b4ad586bc08d8f3bd3afef894cf184de
```

## Usage

This configuration file is read by the [Chain Pusher](https://github.com/Stork-Oracle/stork-external/blob/main/apps/chain_pusher/README.md) to determine which assets to pull from the aggregator and submit on-chain. Ensure that each `asset_id` is unique and correctly encoded using the Keccak256 hash to derive the `encoded_asset_id`. Supported Assets and their IDs are available in the [Asset ID Registry](/resources/asset-id-registry). Misconfiguration can lead to unexpected behavior.


# Publisher Agent Configs

This section contains the specifications for configurations for the [Publisher Agent.](https://github.com/Stork-Oracle/stork-external/tree/main/apps/publisher_agent)

## Configurations:

{% content-ref url="/pages/NikQ0Wt0ZgiBA0UT0H92" %}
[Config JSON](/api-reference/publisher-agent-configs/config-json)
{% endcontent-ref %}

{% content-ref url="/pages/OIOD4ugLJlXACBZBXOFN" %}
[Keys JSON](/api-reference/publisher-agent-configs/keys-json)
{% endcontent-ref %}


# Config JSON

This document describes the structure and usage of the config JSON file used by the Stork Publisher Agent.

## Overview

The `config.json` file contains non-secret configuration settings for the Publisher Agent.

## JSON Structure

```json
{
  "SignatureTypes": [<string>],
  "IncomingWsPort": <integer>,
  "SignEveryUpdate": <boolean>,
  "PullBasedWsUrl": <string>,
  "PullBasedWsSubscriptionRequest": <object>,
  "ClockPeriod": <string>,
  "DeltaCheckPeriod": <string>,
  "ChangeThresholdPercent": <float>,
  "StorkRegistryBaseUrl": <string>,
  "StorkRegistryRefreshInterval": <string>,
  "BrokerReconnectDelay": <string>,
  "PublisherMetadataRefreshInterval": <string>,
  "PublisherMetadataBaseUrl": <string>,
  "PullBasedWsReconnectDelay": <string>,
  "PullBasedWsReadTimeout": <string>,
}
```

## Configuration Fields

### **`SignatureTypes`**

* **Type**: Array of Strings
* **Description**: Specifies the signature types to be used. Valid values are `"evm"` and `"stark"`.
* **Example**: `["evm"]`
* **Required**: Yes

### **`IncomingWsPort`**

* **Type**: Integer
* **Description**: The port number on which the agent listens for incoming websocket connections.
* **Example**: `5216`
* **Required**: Conditional (required if `PullBasedWsUrl` is not set)

### **`SignEveryUpdate`**

* **Type**: Boolean
* **Description**: Enables signing and sending of every update received, bypassing clock and delta update logic.
* **Example**: `true`
* **Required**: No

### **`PullBasedWsUrl`**

* **Type**: String
* **Description**: The URL of an external websocket server used for pull-based updates.
* **Example**: `"wss://example.com/ws"`
* **Required**: Conditional (required if `IncomingWsPort` is not set)

### **`PullBasedWsSubscriptionRequest`**

* **Type**: Object
* **Description**: The subscription request payload sent to the external websocket server.
* **Example**: `{"type": "subscribe", "data": ["BTCUSD"]}`
* **Required**: No

### **`ClockPeriod`**

* **Type**: String
* **Description**: The interval for clock-based updates.
* **Default**: `"500ms"`
* **Example**: `"1s"`
* **Required**: No

### **`DeltaCheckPeriod`**

* **Type**: String
* **Description**: The interval for checking delta-based updates.
* **Default**: `"10ms"`
* **Example**: `"50ms"`
* **Required**: No

### **`ChangeThresholdPercent`**

* **Type**: Float
* **Description**: The percentage change required to trigger an update.
* **Default**: `0.1`
* **Example**: `1.5`
* **Required**: No

### **`StorkRegistryBaseUrl`**

* **Type**: String
* **Description**: The base URL for the Stork Registry.
* **Default**: `"https://rest.jp.stork-oracle.network"`
* **Required**: No

### **`StorkRegistryRefreshInterval`**

* **Type**: String
* **Description**: The interval for refreshing the Stork Registry.
* **Default**: `"10m"`
* **Example**: `"15m"`
* **Required**: No

### **`BrokerReconnectDelay`**

* **Type**: String
* **Description**: The delay interval for reconnecting to the broker.
* **Default**: `"5s"`
* **Required**: No

### **`PublisherMetadataRefreshInterval`**

* **Type**: String
* **Description**: The interval for refreshing publisher metadata.
* **Default**: `"1h"`
* **Required**: No

### **`PublisherMetadataBaseUrl`**

* **Type**: String
* **Description**: The base URL for fetching publisher metadata.
* **Default**: `"https://rest.jp.stork-oracle.network"`
* **Required**: No

### **`PullBasedWsReconnectDelay`**

* **Type**: String
* **Description**: The delay interval for reconnecting to the pull-based websocket.
* **Default**: `"5s"`
* **Required**: No

### **`PullBasedWsReadTimeout`**

* **Type**: String
* **Description**: The timeout interval for reading from the pull-based websocket.
* **Default**: `"10s"`
* **Required**: No

## Example `config.json`

```json
{
  "SignatureTypes": ["evm"],
  "IncomingWsPort": 5216,
  "SignEveryUpdate": true,
  "PullBasedWsUrl": "wss://example.com/ws",
  "PullBasedWsSubscriptionRequest": {"type": "subscribe", "data": ["BTCUSD"]},
  "ClockPeriod": "500ms",
  "DeltaCheckPeriod": "10ms",
  "ChangeThresholdPercent": 0.1,
  "StorkRegistryBaseUrl": "https://rest.jp.stork-oracle.network",
  "StorkRegistryRefreshInterval": "10m",
  "BrokerReconnectDelay": "5s",
  "PublisherMetadataRefreshInterval": "1h",
  "PublisherMetadataBaseUrl": "https://rest.jp.stork-oracle.network",
  "PullBasedWsReconnectDelay": "5s",
  "PullBasedWsReadTimeout": "10s",
}
```


# Keys JSON

This document describes the structure and usage of the keys. JSON file used by the Stork Publisher Agent.

{% hint style="info" %}
The fields in `keys.json` can be overridden or substituted with environment variables.
{% endhint %}

## Overview

The `keys.json` file contains sensitive configuration settings, including private and public keys, and is used for signing updates and identifying the publisher.

## JSON Structure

```json
{
  "EvmPrivateKey": <string>,
  "EvmPublicKey": <string>,
  "StarkPrivateKey": <string>,
  "StarkPublicKey": <string>,
  "OracleId": <string>,
  "PullBasedAuth": <string>
}
```

## Configuration Fields

### **`EvmPrivateKey`**

* **Type**: String
* **Description**: The private key for signing updates on the Ethereum Virtual Machine (EVM).
* **Required**: Yes (if `evm` is included in `SignatureTypes` in `config.json`)
* **Example**: `"0x8b558d5fc31eb64bb51d44b4b28658180e96764d5d5ac68e6d124f86f576d9de"`

### **`EvmPublicKey`**

* **Type**: String
* **Description**: The public key corresponding to the EVM private key.
* **Required**: Yes (if `evm` is included in `SignatureTypes` in `config.json`)
* **Example**: `"0x99e295e85cb07c16b7bb62a44df532a7f2620237"`

### **`StarkPrivateKey`**

* **Type**: String
* **Description**: The private key for signing updates on the Starkware platform.
* **Required**: Yes (if `stark` is included in `SignatureTypes` in `config.json`)
* **Example**: `"0x66253bdeb3c1a235cf4376611e3a14474e2c00fd2fb225f9a388faae7fb095a"`

### **`StarkPublicKey`**

* **Type**: String
* **Description**: The public key corresponding to the Stark private key.
* **Required**: Yes (if `stark` is included in `SignatureTypes` in `config.json`)
* **Example**: `"0x418d3fd8219a2cf32a00d458f61802d17f01c5bcde5a4f82008ee4a7c8e9a06"`

### **`OracleId`**

* **Type**: String
* **Description**: The 5 character unique identifier for the oracle.
* **Required**: Yes
* **Example**: `"oracl"`

### **`PullBasedAuth`**

* **Type**: String
* **Description**: The authentication token or key used to access pull-based websocket servers.
* **Required**: No
* **Example**: `"Bearer abc123"`


# Asset ID Registry

The following price feeds are available on each chain Stork supports:

{% hint style="info" %}
Want a price feed that isn't listed here? Reach out to Stork and let us know what assets you need so we can integrate them in as little as 24 hours. <sales@stork.network> or [Twitter DMs](https://x.com/StorkOracle) open
{% endhint %}

More information on the types of feeds we support is available [here](/introduction/core-concepts#prices)

| Asset ID                      | Encoded Asset ID                                                   |
| ----------------------------- | ------------------------------------------------------------------ |
| 0GUSD                         | 0xdd4c19a4994531bed40a574abfbdb38c84125e0ddbd5fec8889768f3b49d826d |
| 1000000BONKUSD                | 0xdca96d03da5fd6aeea354d15a23dcc9ed4b1885599ff0c97a86dc28afc82ecf5 |
| 1000000BONKUSDMARK            | 0x17be9ada1668fd916294c79b86164b15e9f5e408b86df90e86f1ae30f62e6e64 |
| 1000000MOGUSD                 | 0xc30907c508055b085ddd04233831a714ec405ab28b423db7dd03761e5113df31 |
| 1000000MOGUSDMARK             | 0x9d788ce56663ebf20839da325e6435516673db7f57d6bae1e8f2521828241609 |
| 1000000PEPEUSD                | 0x0a4c41a6716a63437bae7ffcf18f60ebf58683f16fd178960773a804f08f8178 |
| 1000000PEPEUSDMARK            | 0xc8b7e1256c58483900ebb79d06d99ac8f192c3993317c4e5fd7abef38c9773c5 |
| 1000BONKUSD                   | 0xb6948b31bd00eb7464a1fbfc7c86d6f4f79112ccd6e319585e428c926b85e610 |
| 1000BONKUSDMARK               | 0x2e129b347eb00d2d36150adaf4f9673c3fae8b20e120fb08f87603f38f653568 |
| 1000FLOKIUSD                  | 0xfa5be34cd39e6ee78fa7ee87d90eb7f6772486d6fc1634d6c5e01a82704e9790 |
| 1000NEIROUSDMARK              | 0x2722fdfff47967ba92f99f4cf31bac17607ba821693d07292ad5b5abd091774b |
| 1000PEPEUSD                   | 0x57ece644db2d4561560fe7b109b505111ca3a3831e11cdeacbd0059d2b678668 |
| 1000PEPEUSDMARK               | 0x4430539044dc778542d0961e58863e4efbb4a7dc6a3cfe0b483ee301c504a5db |
| 1000SATSUSDT                  | 0x690a79b6ffa763f42234dbf058c283ac1d7fe56609dcce4b3e645198afb645c3 |
| 1000SHIBUSD                   | 0x0793e25bc3033f86471ead04aca141908ecd0ac6b813f31e48162697f5d8af40 |
| 1000SHIBUSDMARK               | 0x1ed7d19406a1dc04358677c8a0932db2d181affe38b2a1a35c724af99d7f5a5c |
| 1INCHUSD                      | 0xa40e719d5a2e54bc4979e2b55e55da90688cd68875c7933d7bb89191733ed117 |
| 2ZUSD                         | 0xc33f41c0af1d6875c8c3c15f680a0cdaa0a0e0749439b83d31382af86e978bf2 |
| 4USD                          | 0x101931596b73760a357157bc9b39c1295a2c18531ebd81880933d5bbb4916f89 |
| 4USDMARK                      | 0x2d856be071003c9e386d3f65a5c23c3504fb717e64612277b925673b3b6fb8e7 |
| AAPLXUSD                      | 0x15a8aaea827dfa9992fea9933832f6ce410f121b0e7c3f163cb858c211201af6 |
| AAPL\_24\_5                   | 0xf501182a746e15d1abc2e68f605a4d3b2d0880d10470bd4542e5eb4970fa17ec |
| AAVEUSD                       | 0x029ff4e5b838907c663ddd7b03d9a7f56b1d8cb32cfc0662c37f2632c64b52a4 |
| AAVEUSDC                      | 0x5dc1b199a28f725383cded4cb27d71c4e170e6b1b54a0dcf5b9a46b9acd6fdd3 |
| AAVEUSDCMARK                  | 0x8344805f4d9d519a0869044c5da98083e50c318527e67c6ccadd7a3143f360d1 |
| AAVEUSDMARK                   | 0x9d7042b052e3fd80ec2a9d48cbcb0234961e4489851c687b35882b66565ce76e |
| ADAUSD                        | 0x3cfdbed8f424d2c7113c47bb0775876d7a34cf04c48fcd15fc7bc2e8be85f3ed |
| ADAUSDMARK                    | 0xf7174efacdbd0a7704160afe32aababba5081bcd5982f888a37ec012aebd0a35 |
| ADBE\_24\_5                   | 0x07d1b1b2b7d726ac6baa3c38b3b29cf915a574f76d9c9c6920acac2c9dd86cfb |
| ADI\_24\_5                    | 0xf54dddee1440be77b0d99896cf6233b58ef6bea9fa1fd721476f1a0bbd63c872 |
| ADSK\_24\_5                   | 0xfa34e35dd9dd98db6c53b98dca2bcdb6da709a2e7af9ab6f3b18617a916f4d56 |
| AEHR\_24\_5                   | 0x06b4c12bf33b836b4c7633c05538e0149f86a91c15c5951ec1b67739fcccfb07 |
| AEROUSD                       | 0xc14741846e6b06d4e0eb4a7a8c35abb6c510d2ea3eb9a4fe11f8a4c203b2e432 |
| AEROUSDC                      | 0x5089e2d19b1a0ff6a9e34e65a14fa3cd55ead1691e9b964cb7e36c7ad06d9e26 |
| AEROUSDCMARK                  | 0xbf6bc15e384166b6ca6ff732970419766c6e5a0c660ae001e411fafb55978bcb |
| AEROUSDMARK                   | 0xfddc912ec2bc077f818893ffed22fdd37299cc275df958d61a2e54e181009006 |
| AEVOUSD                       | 0x9d17ac4fc6fd452644d964e55244872ff0b134c75ef3b577627f9634c9dcf2a5 |
| AEVOUSDMARK                   | 0xe4efd10830d0ddf9a4fbb709a0c7fba8462ca0d4220ba5a27b2b6deaf2fb49d6 |
| AI16ZUSD                      | 0x940e5c5516767bc20be3dcaa9e39fc83a274429a22b207f13ed19da7bf5812e7 |
| AI16ZUSDMARK                  | 0xec813c70fbbb831eab6f908ed36329004a7768993d1560ed7d3c491b93e6506a |
| AIXBTUSD                      | 0x4bda38e9b1d58eb68c3c39a5a4c9ac93d4e9628fbcb75a5c8dd1da405188b856 |
| AIXBTUSDMARK                  | 0x6782876eee9f63b69d42fa6a72dcb83c8146a550c17f3afdd43471e77bbea48c |
| AKTUSD                        | 0x8ce8b504da1396eebe86949954153ea0c29cb45f81f933626425a400d23f0208 |
| ALAB\_24\_5                   | 0xd0863192aef5cf3ca0975cf396047f871efcfa064c90622a18f3d6d8694d347e |
| ALB\_24\_5                    | 0x279ef23ce7ebc1accfa4fb30426a4c34b4163dffa2ee028c592aaf4deac9f38a |
| ALCHUSD                       | 0x8bdd97d837861783de54fb3106335b7bbd4b0861f75b198647e5aecd86ab9d9d |
| ALGOUSD                       | 0xef118d925d72ee5601eb7fdb5b225fa83af2a41e7191d9bfe39fe72d04f48284 |
| ALICEUSD                      | 0xbfcff59c32612acaa002383a9ef01cff199e4734663281a73fdeb01d9f5cc962 |
| ALNY\_24\_5                   | 0xa4e70d4b1529be73ceb8544ff9aa4469b3dc6b6b155b7c7bdd07b9fc77f7385c |
| AMAT\_24\_5                   | 0xb062d74f5abc9f5a9dae22bd82443542f37df6837ddcd76808d6a4d67bf49dc3 |
| AMD                           | 0x7dc334e1540f8915732d66591fe866306abf9102ccd56a9c3bebab2f76f305fb |
| AMD\_24\_5                    | 0x0d0d7a2de502353688f32203780feed41a62c2678ee61eec459d71f4807c4f87 |
| AMZN                          | 0x6c755094f1cdd95e2e4170549dc12e7555151536b32029b8d94678134de2ef0d |
| AMZNXUSD                      | 0xd4158d10084b7abe13430d8b284cd85ce4c1854468d73ff813157913fd0e33f2 |
| AMZN\_24\_5                   | 0xf2edafd6d6075b5868eb1c633150ca6a1c7887206221c71b7e4e4d4f1669c6e2 |
| ANET\_24\_5                   | 0xc2beff3b4199f24ef53a47efaae0732613d82203d42422d4b20f04ead770df8b |
| ANIMEUSD                      | 0x2b491b09819a6720f010f3a58a0e66a53c0790d6ef1e9857facb0006eee924c3 |
| APD\_24\_5                    | 0x7951f133f9eda3cf80eb26239b9d610f37ae02ab3a127d1ffd20ced86025eed0 |
| APEUSD                        | 0x5d49dff58add3a47b71d5a3368ccf2304975c32fb813e5a40aad414a0a2608ff |
| APEUSDMARK                    | 0x52e5468fbf595a1d72b34595e8f10f8fc7bbc1c62646ac4c862a5380eab11e9e |
| APEXUSD                       | 0x48628de2e4de7fb3da59bb352571e4cc655032fc83765c142d2c695151353db1 |
| APO\_24\_5                    | 0x66eb904126258592481f2d7c3ceff4cd80e86f4e8a1240aba77bcdca3b0b54fe |
| APP\_24\_5                    | 0x7d88f8cc9eea2e35bc2659d9143d879629ef189ff2af2f4dff538d31a9e91e8b |
| APTUSD                        | 0x90f4b4c95f9dee30278d7a62dab1916915c1472a51d03d39089f8492136b04aa |
| APTUSDMARK                    | 0x43aaaed2722d85b5312245eef3a728db6635413e1d7ee1d46725381e6a43d980 |
| ARBUSD                        | 0x365f8b30df22d80f2e0b406679ef53f75e49d6cad9c1c9e6bc1df7b092658a20 |
| ARBUSDMARK                    | 0xad7687ab7bb2afe538fde015498c721ef7f9847f8e7f2da49b3c5e728e1d74b0 |
| ARCUSD                        | 0x7557474ddf64a5ed2b3739374f74d2c6be2eba71dc3d9adff7a4dcd41c99db82 |
| ARGT\_24\_5                   | 0xb4ac545287995800004d9ff7737142029712095cd517de6abd3d402e83f9c173 |
| ARUSD                         | 0xf8aa27affb6fafd349c4838d42777880387a4a771ec6318952df935a0196cd2e |
| ASTERUSD                      | 0x959791a4878a2715ed51f7e62ae3eddf847edf81fea18dbe3d81a8f7932b7646 |
| ASTERUSDMARK                  | 0xafe3d177fd957f728f20cca43054e616814d82561ff81afb7b7febfe42894fb9 |
| ATHUSD                        | 0x57744b683b8f4f907ef849039fc12760510242140bd5733e2fc9dc7557653f3e |
| ATOMUSD                       | 0x6bc94aac292474134d4c5b0e1a260215b86b829597941dad321c0966e1dcff7a |
| ATOMUSDMARK                   | 0x402e5f148c84399665eccc68d122f33ad11d8d7ac4ac128e740fb5172d48e760 |
| AUCTIONUSD                    | 0xa3e34e83e31d497c73e15cf43d16fe6eeb68f263f1cf326ac288d29fd0560074 |
| AUDUSD                        | 0x5577fa17b1be8ae0f1517fe1864ea534d6992f3721000cdb6585b11e7046d5ec |
| AUSDUSD                       | 0xf0f5bc7822329038ac4dbc4c6e6a4453c1980612111a87ff67d3624c8b2e0b2e |
| AVAXUSD                       | 0x0c26b653bce6116d26804ec1e9815465af19aaf56c39eaaf001816375fdf8a1d |
| AVAXUSDMARK                   | 0x358844449d5f58e54f2c5bc011db4304111e01c78048a8b7345b33e32779ee9c |
| AVGO\_24\_5                   | 0xff0dbb4d06bbd33211c14103806f1df71a5802c83c792062ee09287626938d16 |
| AVNTUSD                       | 0xa1b78576b4dfd5a1a9d26a3d855b474370d68371c7ff1330e9c2e5d3e1a87d7e |
| AVNTUSDMARK                   | 0xdba16d93869a497a702a918ba5678d638a7d8b57c3294dadc7e967c517c7196f |
| AXON\_24\_5                   | 0xb963e3491c6d7a06b2fce090fc7848d3f8b1b3d8e7b6696cde9aa8a2bef6c3b2 |
| AXP\_24\_5                    | 0x29bfc4e7bd3c35fe246958696ca69c8f9a0267d79e5b87bde74e8be3eee3fb89 |
| AXSUSD                        | 0x2ed39f18a36895cd9e8ed10a808db21c3d7ec7e78bdc2d0d6135c06034829c0f |
| AXSUSDMARK                    | 0x12e72b375db7c187c94cb37a37445375676609d832b32542092e814954d904e2 |
| AZTECUSD                      | 0x2b479f53514944c1601ceaf319c501467f9b941abbb0aa874912b13f772ffb58 |
| AZTECUSDMARK                  | 0xe74bed0e0a26b925d8bd009539d0667a6b792f545cb09eeaa61bf71d0be8d062 |
| AZURUSD                       | 0xcd4bc8c9ccfd4a5f6d4369d06be0094ea723b8275ac7156dabfd5c6454aee625 |
| B3USD                         | 0x3d0508474c9e8a5994e3ab46c44c7bb03b984ec9f66218ae96afb32eace9248c |
| BABA\_24\_5                   | 0x55b1e31c556fd51c7c4ca92b24c164659cbc7000915a241a97765f906ccd5c5f |
| BANANAUSD                     | 0x75a0dcaf4f3249a7e20c37ac7b3a87ae99494bbf0942b00d78663cbb27805ec0 |
| BCHUSD                        | 0xe4fef2d7ba0f6de78e22aa1517ee9e48c28747ce278f4c6c27ea29936d6cc67c |
| BCHUSDMARK                    | 0x96eb88c2579738acf680b8c264d6acbd4dca3b7f6fa123391ab6c2bdf9250b53 |
| BEAMUSD                       | 0x7a103d78776b2ff5b0221e26ca533850e59f16be7381ccc952ada02e73beeef7 |
| BERAUSD                       | 0x9c7a8f90aa21b1e368d1a5f7b4d75aa03fec9abb903d84946ef76fd6fd79b312 |
| BERAUSDMARK                   | 0x83235075a39fa7365007e1f92172cd6f5fa6d5b7ce7037a7285889c1988d2460 |
| BINANCELIFEUSD                | 0xc9e7c8336eecc6dfbfae928db198f56177478ea6de7bc987f92881fbafa06dca |
| BIRBUSD                       | 0x8270a93c52687fcde2d8171e2da965f345c9c0bc637ce7ba9bb36d93c3e02fe3 |
| BKNG\_24\_5                   | 0x82632fe7944df6afb226334167b225d692b6a8963069ca47056447bf424c85f7 |
| BKR\_24\_5                    | 0x68b9c6a6b18fde6172ea21c91db77a6aeb6035dd81fdf4554eb9a861389ad242 |
| BLURUSD                       | 0xc0ee16a7b73f7a04e897bfe17a78804f0dafdd08751120e046485be8fd0cb9c0 |
| BLURUSDMARK                   | 0xc76cf80e1e48a8e8054f687259a4df862a9e42e5cd5c76a8a496aae1ec28079a |
| BMNR\_24\_5                   | 0x6357f6dc58e7303cad11730ee57e46241d3185be6b40117e76c8d35d8297804f |
| BMTUSD                        | 0x02507c0717b8e63ac9475d0c27b4ef9b28ddc7838bd49a7f694bc51a49512c77 |
| BNBUSD                        | 0x1bc6d6279e196b1fa7b94a792d57a47433858940c1b3500f2a5e69640cd12ef4 |
| BNBUSDC                       | 0xee318029bdf198b1b4ee071824ae96718233f67f93d3c60dbbff63aa5978db6a |
| BNBUSDCMARK                   | 0x64ebc686a344d4b7ab5cafefcf0058287a3333689e5ce89333f538401c2212e7 |
| BNBUSDMARK                    | 0xe61707f4e53487e068ebc9ee976e64b9cc7e7e0e7dac8ec9b269f5d8ff747819 |
| BNC\_24\_5                    | 0xfbcad7d2c59d0b95ca8d6c6d96ee20c8b1b3d245ff6f0f890c0654e14e28261f |
| BOMEUSD                       | 0xfc870e866e3dbef8708aeeb2e09ace29a9014a200a4f14f343df6c5e7c520e7c |
| BOT\_24\_5                    | 0x3ddf12a0b415969e2a55f5a58451fad01a6afb343b63683f10471f2846536e23 |
| BPUSD                         | 0xd964e361ac54b4f9c7bd68c11f49503ecaff911a89e339a4b21773d4a32a81f7 |
| BRETTUSD                      | 0x95e86a2c07389fba72acbd758d1069c9bb9c17c3f4b483fc64ee2e8a2f1f8144 |
| BRETTUSDMARK                  | 0xeaacd06335fca0365595dcc15299d3f21c40b3f5f61a0e8d0fca1854f1b31ee1 |
| BROCCOLIUSD                   | 0x3bd82d50239da59b6f63af5b6a102c4ea6bc97fbff3b5c4af08d4c8be784832a |
| BTCUSD                        | 0x7404e3d104ea7841c3d9e6fd20adfe99b4ad586bc08d8f3bd3afef894cf184de |
| BTCUSDC                       | 0x7321ce442e8814b638e0cd241a8838e7d8222a43cbaaca78adcc2337bfa3185d |
| BTCUSDCMARK                   | 0x98848cd117152974f79fb357720f794415ab653bc2c2dd4548395dc2c4123440 |
| BTCUSDMARK                    | 0x6b5b1c26f98c489ea35e449ccba14d6153182646efc9d09e56b4302e41be548d |
| BTCUSDT                       | 0xcd423b16b64109a0492eab881d06ef1d6470d25f8e3d6f04f5acc111f176939c |
| BUIDLUSD                      | 0xf66a21fa5ffbc33aca6789dd9e4a8521f702bb60db3d4a4a5375303c416ef57c |
| BX\_24\_5                     | 0xc7ff7b55aa69b8fa9779ed8f4757f14dfb8c7f22f746c55cc326dc0451705196 |
| CAKEUSD                       | 0x4cdec5681c52113a81c288e66a15ad09ceb2136a349c1d5b1f18c0c54b74f22a |
| CAKEUSDMARK                   | 0x85f69a12ac27779bfc3d2d7fbc8ba6ae38ef259a48b26ccb7a79975b43439d40 |
| CAR\_24\_5                    | 0xf547ff62a598401b0ac6b1314703f86bc0f3a3205e9dde874abc0568f89806bc |
| CATIUSD                       | 0x338dbd86afea02779a64ad2f484b26b225aad4ca33a43ae3e9336ea3655c61e7 |
| CBETHUSD                      | 0x3eb7260e53919429b86bdd062c004244a3b193d85a0a73874de2f59175de1c25 |
| CBRS\_24\_5                   | 0x93f66a34d768793b95dcf517964b74ebaebf017d63003c77263c1bd1856d2dd1 |
| CCUSD                         | 0x259bbe207aff4c5de769d1dfb3f3303e0d879bed7ee210caf891018823475381 |
| CCUSDMARK                     | 0xd019187f9fad6150be40a2fa7e28143e21ebd5b91cf3b35c0c35658cca6d5cd5 |
| CDNS\_24\_5                   | 0x7daedb9d277b6ce59381a74bf4fe2b825fea99dc59f0e63aa6a401d0e5baf481 |
| CDW\_24\_5                    | 0x70e5c3e96042adbf3826eb4f8784bcd037d3457c09df5e40da70386fe80b25be |
| CEG\_24\_5                    | 0x727f81409e3bbe678f85ed4fec57f653ef90133f929180c688bd57bd5f80c201 |
| CFXUSD                        | 0x8a44d23c0ba68f33411be89c4780fe49d20ce1279ff1ecd509eead2a7f67444e |
| CHILLGUYUSD                   | 0x4c5352942bb5f3f8b26d63cd9d70850efa1c67da186988a94e9f0928d58b8ff1 |
| CHILLGUYUSDMARK               | 0x7fdb157067aeb91b3b785f524140394a5913f42c7554a0faaf563b25d3ef2791 |
| CHIPUSD                       | 0x1018ce88dbf07a6c9d61a8a721550b7a3f2e596a4b0e492c772569ef675b5488 |
| CHIPUSDMARK                   | 0x47cdcb56ee6b9e11eb116ad5184d8086dce5b9ee8aa3b64ad8f9ff20ccf2229a |
| CHRUSD                        | 0xc89867f3532b9693faa313b44eeab638652b9b97be3a16318f20b277b5d402d9 |
| CLANKERUSD                    | 0x9a451f9745b80843297eec425ff29097160bc8235e97f574e53d963ec92832c0 |
| CLSK\_24\_5                   | 0x9a4e4d88d02b3329a0686ebad2153a8b9d4f9df21fb694bcc0c3a946e4cb6098 |
| COAIUSD                       | 0x02f7fbec9f00e165fa8a85746b0949adc95715b2d18a058605b8d324e0e73aa4 |
| COF\_24\_5                    | 0x42f6f9ccb20166e2d494754646ac431fbff14a956837aed9d3b156254894e9dc |
| COIN                          | 0x94d28cfe178ae84130ce540d5dadabd088b301735941a744d121b4926572ece0 |
| COIN50USDMARK                 | 0x3897f4f7dbe0ee20f9cbddce521b3dbbf2c6fb23d75cab4a5816287e53db61b5 |
| COIN\_24\_5                   | 0x8fb8291c1a7ba902592896cd54fba620da95efc350da37f2ed6ac29dade0d067 |
| COIN\_24\_5\_USDC             | 0x6b2397559c9c2dee21d57eb0dca2ca0ca7f639a332fb54075641e8cb4b868657 |
| COMPUSD                       | 0xebc1a647f05c72fa51065611f17280418055233b6c348b6af9dacac0f31712f2 |
| COMPUSDMARK                   | 0x9b412a7f440065b58efb5cde2bd68b7381a4c127f594141c4d481865d03ea155 |
| CRCL\_24\_5                   | 0xe2de5db121548afcc069f5021c24d0609544ad3f1bdeb2983cf21546348ea147 |
| CRDO\_24\_5                   | 0x2fd917a7664c605c6c6fea9b45f652928e25b1bf070510682322bd0a27e8d9ad |
| CROUSD                        | 0x5602e57507d062013ad369c7fd715b72c1eae1e6132e4d566bed9593382aea11 |
| CRVUSD                        | 0x36060ea82ed65a784893bff936af31d2c85fef4c456fd2e9d2110849517d80c3 |
| CRVUSDMARK                    | 0x8e301804b50b7a33a78e944b95433b8c8a711c7df8e365ffbe6c1c2ba201b0e2 |
| CRWD\_24\_5                   | 0x5935c463855126fbda376c04bcc8b49ed96073291fe8bd7e02a40b7ba18c156c |
| CRWV\_24\_5                   | 0xbf6799e2b012f537c8cd42d3262963901f99d41c6e428c5dd703048dae06143f |
| CSCO\_24\_5                   | 0x60770fb3d6916163208c1196b71a5e9047fc0e084104a88cfc1c69bffc151b45 |
| CTUSDUSDC\_RR                 | 0xb6ff817c4844d5b64f9b2bdf5148be092ee992790b5cc3b44657086415c24cbf |
| CUSDOUSD                      | 0x35bae1d2c3de992ee0eb1760a32cacd5c1cc61080fde21e585f206714945df1f |
| DASH\_24\_5                   | 0xa43b969e1e0dbd71262601918e2ac38ee680ae18801f7fc0e72a56fc73747c92 |
| DDOG\_24\_5                   | 0xdb28f94ae41e4158c4bde2bde6539512c49bfb132d34b44ae9dfd756526d207f |
| DEGENUSD                      | 0x31e43b8ae0d55055fc739f7cdecd67f5b17c9f614024aa6f3694565b858b4e1a |
| DEUSDUSD                      | 0x21d3841e1de6f97192ee771d91ba198c2656ad3a1f4edb72aee396e1d40a6032 |
| DFDV\_24\_5                   | 0xb144dd2e9e77b595a7bcc48a950aefe4861928fc9d691ecc63eab97336a3108e |
| DIA                           | 0x35c102b36b135cb40ee2a5ddea9fd40d9109174f96b3520a659e024fd80c5413 |
| DIA\_24\_5                    | 0x354733c0a65cd5794157a6bf8eb3e52515f83ebcb7ee4549d1130dbef8666723 |
| DIMEUSD                       | 0x36c5bcc0b726b42e935bf3a38d2c1fdb1663fde596faceb6fd7f2efd33f3035b |
| DKNG\_24\_5                   | 0x1e97b664f9ef0215c090f3927ef87f0a01090867a3845ee8b76a78676875666e |
| DOGEUSD                       | 0xaf3aa213a005c9a693262f7bd09dff6e39069392dea742922b0ecb61b5201751 |
| DOGEUSDC                      | 0xb0db2c0e6d6931626b34e4cdd38ab12a62e6a2eeadbb553dd37b4f9f6bff0368 |
| DOGEUSDCMARK                  | 0x5ddb4ebe2565a5b48d4c55e80be1ed034725b8f2bde3bc5adfea96dfb2cac55b |
| DOGEUSDMARK                   | 0x74d62b531207d0df96b54cb373d8148ee7f15a590b1ca519c012a736440f84cd |
| DOGSUSD                       | 0x1e8d9423b30d22e15a765bbbd2aa1de09b77b0ce88eb8241747ecc352cb4ae11 |
| DOLOUSD                       | 0x4dcff41caaba4abd0beeb982e944652d6077ac0a0100960f2eae6da7b7962892 |
| DOTUSD                        | 0x859180855bc92e8ad2446eb3fe2966f834e5baaa25b83cbbef02cf53c8d1eb16 |
| DOTUSDMARK                    | 0x2024c24fd87705b00217174fc117465df325c2428d83a1b25565adc272cb5d32 |
| DRAM\_24\_5                   | 0xbe1281e7f411eec69bee1984d156c92ccce4d264de9e87aa5188c303f4cc7148 |
| DUSD                          | 0xb5a2d780925236f5bfea61107e924aee1063d3bd844416a64826b7188a75681c |
| DYDXUSD                       | 0xb42ae0a7754463279cdf2d408fb66115a1170cfdc6d5e507e37a808b7972cc1a |
| DYDXUSDMARK                   | 0x693fc96e9f38ade5be0ea14ee561913dd007579430ac076195330d17a4f5f61d |
| DYMUSD                        | 0xfda530b2edfc14e15f1b619df9a955beb6dbb8d80de5797c6b3d1a5e876568dd |
| EARNAUSDAUSD\_RR              | 0xe904b211ca1fdc78d094550c6c43d86f391a94277b71f1d84221835469acc8e0 |
| EBAY\_24\_5                   | 0x6123b21ceb3610ee9857ec70c19d39730f8897ae088c610f180e013c78348fc9 |
| EDENUSD                       | 0x80f87d9c0d16b751f85661d32930d9f0abacb566ba8bf02352bbd7aa846124ab |
| EDENUSDMARK                   | 0x9d461422218b18b1140c3dcbe967b433c0d0fd73a7b70d20f3ab6b5ee9875925 |
| EDGEUSD                       | 0x3768a7cd63d88c9b9d25f36470dcaa153bca77e37a909af160be5fadd1fa591a |
| EDGEUSDMARK                   | 0x7d0168e0dbe54467d2a58195cc3d58393f87d21f98e14c1c36411b7a9b79fd03 |
| EDUUSD                        | 0x6ee0e88f0bfb4b16b8f3eff7a0480b3338eed0367c7343ebf55b8bde53c620ca |
| EIGENUSD                      | 0xa376e469a15ea805b1ff8a759a0c59b123ce40e18c43d5e970bee497a5869ed5 |
| EIGENUSDMARK                  | 0x9eab79701bf667b2aa5d21c3bb18c1c63cb8ce765223d4f978f4b195cffcdc82 |
| ENAUSD                        | 0x670ec7135de034b07d16505bb7ccb3b04dba106c301ffaa1b63351c9c52cd790 |
| ENAUSDMARK                    | 0xd61f24e1ac0fee19a3bc2a1b435b3729f0a6509e04548b69344449009e06bf7f |
| ENSUSDT                       | 0x20a53830fdb4c1d031bd33fa18b503feb58578d1a3714740b4ab9e6d20f88b61 |
| EOG\_24\_5                    | 0xbb78b9061d904818cf9e325d658f950c86bfba07a8cad43ccfd41d31da83b84e |
| ERAUSD                        | 0xc65cb952e132610004e90216b18db155e925e6e8c6742230cb2572557fac4657 |
| ETCUSD                        | 0xd65a36e7a8a4f4a927fb944cbf9e44df705a5ce4a6e5d635b01022d48fd32b81 |
| ETCUSDMARK                    | 0xa06c06b2e2d2d1d06c44e5e11fe689d3398db124339f1caa8ffb364a87f0a67b |
| ETHFIUSD                      | 0xf72a09dfb4d5a139554ce4a9bf39d48235db06da558f5b0da8531a47a771a8b0 |
| ETHUSD                        | 0x59102b37de83bdda9f38ac8254e596f0d9ac61d2035c07936675e87342817160 |
| ETHUSDC                       | 0x7965e1bfc07a34caf0c3aa8146b200264fbb7a0eb85b1d3b1fdceecffd736b02 |
| ETHUSDCMARK                   | 0xda569051437902cb45839186e4a76dcd2dae9af3bd3b2c586661d302a51f45cf |
| ETHUSDMARK                    | 0x88b5ddc4478c20d8a6b5383e636e88dcf767606de596977d8f2acbbe2b4cb89f |
| ETHUSDT                       | 0xaeb17180ec6df0d643751cbbe82ac67166a910f4092c23f781cd39e46582ec9c |
| EURCUSD                       | 0x64ffe1382a02f37d4e16872cde1e7379679aa83bba98d99036921942203afafb |
| EURUSD                        | 0x0730076c3c0f5da594eb635c5d5a22116233bdb2a9c2977279cc348b8b8ce917 |
| EWA\_24\_5                    | 0x83d6d35fe95a3e6260d1f25d29d9883c450de94ee7e1d76ba4e7140ea3419595 |
| EWG\_24\_5                    | 0xb3a927701b86a1e337a71eda826172338398a3daf8e5af16bbc2e34cd0d003f6 |
| EWH\_24\_5                    | 0x6031f8a52109e4018f67b03fc3b1b5411c04e28e7b9ba17cef4692911c4bec2f |
| EWJ                           | 0xbe02791fbd3991a30cfb40f8806a905925f855f14b80a65c53339b1d6db09ea2 |
| EWJ\_24\_5                    | 0x88ecac77333be5552d91fc5364192af60fbb92cf507637a04ea2ea85fdacf124 |
| EWU\_24\_5                    | 0x5e04269c16769085936f72e2a7645dc4ea9b42ab7429f42813b0a6f800e98d32 |
| EWW\_24\_5                    | 0xde54ead364796a73f21a648ca439a820a036a0c3c44f7d2051850881460a26b1 |
| EWY\_24\_5                    | 0x4a691a9dce3fd9833aa498b7948bfbe3cef2377db69b435426a820cf7e83df1e |
| EWZ\_24\_5                    | 0xfe26f8c04cba9cd31f43e5b5e95bb1601b491e9a225edbf374f562420c60b037 |
| FANG\_24\_5                   | 0xb1dd31a2fb6182a6a8710671295e013975d8c0961548753a83cac857462ee6b1 |
| FARTCOINUSD                   | 0x9e4b892be0df8546504b7042b60e883e37b7961fe4d6d079293d7e6f3b1047fb |
| FARTCOINUSDMARK               | 0xbf7d6f49d9c18e8c4768302c0d50f7555c6353da3e3a7228bc8f80efef3f686e |
| FCX\_24\_5                    | 0x8b42164abe25555a2e5aaed4a55ae8a6a8291f7182fa01628404d7c85af5e71b |
| FETUSD                        | 0x5e0957e2704abddb81765aadb6dee0d191e2f1b0fed3ea40280c1880a4672a36 |
| FETUSDMARK                    | 0xff4c52ebd06d6e6d452bf36d90ee3b3bc8e9c2adc1d2d21548d292a5ac6f34fe |
| FETUSDT                       | 0xb86e12c63c1bd9ac65b7208b5a38d2590999453ab4eb3a5b32eb007e6274c2b9 |
| FFUSD                         | 0xc633a2a83c6408b8130c50b56240911452efd650f092b300eeb65d38f442590c |
| FILUSD                        | 0x3ea26626be58fe8b414bf03daabf6f0892a5de56488c8516d9497a6d67a32215 |
| FILUSDMARK                    | 0x0eb509a587a4b63976b47dd8b9f3d38745cad7fc5a523eec539c162d1914c482 |
| FLIPUSD                       | 0x28241e39d85d2043b771337ed36e16c293ba2a96dcfe849925d7199b2bee92c5 |
| FLUIDUSD                      | 0x05513f182caab54a04c3e4f32106a457b313b5f964267c0e4ca1cbb63ca228be |
| FRXUSDUSD                     | 0x57539e247a2c49ecc5fe2765754dbdbe74eb263a6a1f0db5c317c422cd00b8d6 |
| FUELUSD                       | 0x670b7091d54af59331f97a1ce4a321eab14fd257a8b57b75ce4d4a5afc9186f4 |
| GALAUSD                       | 0x140aa0e5abff02947265a40b94dcb78afbea3dcc51b7d46a54ad2caca5ed1aee |
| GALAUSDMARK                   | 0x682de9105ebefea705e14998bb8c303a06b1ff60a0729773873fa579f499c37e |
| GBPUSD                        | 0xd30842147b60fe333c2700bcae5eee6815b8529847955d19522858806bca8217 |
| GEHC\_24\_5                   | 0x03ae968eb569e08421e0d935b060742cc4e73e14f8390ec9d42118836ebe3d2d |
| GEV\_24\_5                    | 0x8d42d87db5fe0194d160621ea78e189c754a2b653120276bd0724567c24ec61f |
| GFS\_24\_5                    | 0x85ae5bdfee78ce94485c83b4474b9b4ad326f31cf8e5c8f72eb21a0db9688d2e |
| GME\_24\_5                    | 0x9c09bb4950915a9e93e7df5ff4f71e2301c533dff52064fc95499d203d365afa |
| GOATUSD                       | 0x8d033706884804a8bc1bb79105b14b1ebf518658b649cde0f21ea9b9603b50dc |
| GOATUSDMARK                   | 0x8b1d11c4e3e594654d90bd844b394aaba7b1014c8d167ca228dd7f763a5f55fd |
| GOOG                          | 0x9a4f772de1a5f6df5913fa2c98dd7177eaa23dc2a562d00011dbbd1c29669627 |
| GOOGL                         | 0x5480d4740314d9a5fa65eac6dab758c3c95d65be45311b45c3551575d760e7d8 |
| GOOGL\_24\_5                  | 0x0d91b6ee0ac4482cdbf3d2be63ad822954ea45d2a57694bacf38087fb0a9444c |
| GOOG\_24\_5                   | 0x671ac04588d80470d5052eaf05a9df4cb95435c65f59009b45308b873976f326 |
| GRAMUSD                       | 0x32339e2b10f8f0a2c78c0f2669d6cf076208d29957d52aaa4dc243de2b36e444 |
| GRAMUSDC                      | 0x12de2e755d7619bf755e3e9928e3b406b4b40eeea6b6e3c1b87a0539a3c59c28 |
| GRAMUSDCMARK                  | 0xd5616d8ec2ca7087c8d1b6aa8d07a5c93521b067596e625a6069bb2aab459d3e |
| GRAMUSDMARK                   | 0x7e2b92880549e4116e841013cf8c5a0ea80c680cbefbf86941aed469ca046bda |
| GRASSUSD                      | 0x716222a4d486aeb689e89bfcec614dbbdd472ea15369382873c6ed1828d0d12c |
| GRASSUSDMARK                  | 0x64018b856fcfdb9239d096dedb8380dbed1f08dd4ae287135b2a4ac29825eb80 |
| GRIFFAINUSD                   | 0x57c2dc5c695f71d78b5139edd49cb7d7a5981beff2828fdb904b918a6032440a |
| GRIFFAINUSDMARK               | 0xf91a6a8e545459997709a6f7190bb987b5b03373b9c6e7ac7412479abd03f070 |
| HAL\_24\_5                    | 0x54f3bea1d7f1c655bd97c765072d8676009687221999aa646d697ff16e2d24bd |
| HBARUSD                       | 0x6b1ecfde0d4ddebcc89df72e5d801ec803ccd2f2d455075b50c8d287b603c6e5 |
| HEIUSD                        | 0x99e7011dab8d19528c29d306516c0715ff0d1f5af2d2213a403b4ff5efbe15fe |
| HKDUSD                        | 0x4f6d20d5c86c85d26af1fa9f453df0cdbec90ebaa77a301f465e6cd66afdfaf6 |
| HL\_ANTHROP\_CURRENT\_FUNDING | 0x37b08205c92c58cb163bfdeb9403998f9e5e0ac0fefa5445817b38544bd185af |
| HL\_ENA\_CURRENT\_FUNDING     | 0x7395b7ceb9b450551a53bbaef9c3699112302e459a4736006f59bd4ca1a5b8ad |
| HL\_OPENAI\_CURRENT\_FUNDING  | 0xa0e6e8a5087489074fab19e793b88a5b2551bf5aec4c4897e18a89f9f41669fb |
| HL\_PUMP\_CURRENT\_FUNDING    | 0x0b29a90756c5261c2b1382abd74b92086204213d8fabfc5fcb5372d56018f56e |
| HL\_SPACEX\_CURRENT\_FUNDING  | 0xbc21e2df1b00e498453934c53059ca71b613d079689c6fdafdd2d00091a5502f |
| HMSTRUSD                      | 0x700734892f8748f8bbe393df08ef254b73311de1616010702ac4bcb1f6f19ac0 |
| HOLOUSD                       | 0x157b025173e74e97526f5edc5cf5bd35a6f0cac5b211bce1fe9c31cf7dcef48d |
| HON\_24\_5                    | 0x81ac9bb597a2fc9bee213409059f269f0c5321d3950da306efca0e9bc8475403 |
| HOOD                          | 0xc72abec7fca8547f25e527c4454eab0d797478d853b33356c73f6bfa685a411c |
| HOOD\_24\_5                   | 0x5fb415dea7781c11c5869ebcafec913ed1f044bff66068de33e15d859f7b441a |
| HOOD\_24\_5\_USDC             | 0x723137d4de1e48e9590357f9c14101864a223d2e42617e9b3906cefc58ea8654 |
| HPE\_24\_5                    | 0x16db263da758a8ff2267914250c2e383ee1e56297170f19aac9e098e0c2a24d6 |
| HSKUSD                        | 0x59a2e86cc615ec06254fa5672d67ff722650698b0f6a55455548b6ad8691feb3 |
| HUMAUSD                       | 0x8188660d8f8a887416425329896b31cf8d21303832b951db4fd01fac19728c19 |
| HUSD                          | 0x25eb6a5ad88333a884e924c7369654ade4add95f7ae57e8eb99bbb51be338fbb |
| HYPERUSD                      | 0x950079dadbb223ea79a6a4857ed157e5c88bde9cf2c38d1452bde187c62badfc |
| HYPEUSD                       | 0x4458c4980d94bc7fef3ade260b034fb575f04ce6ce4abb20b9c1dbc4b0b9d169 |
| HYPEUSDC                      | 0x46b81bfae29628bc20cac94da2b46a302f441cafd255bdbdbb7f6ef6be6860c5 |
| HYPEUSDCMARK                  | 0x8ffc40e3f34342da2893de02ed411882d7d95bbad7781fad05a5de5b0f60ad12 |
| HYPEUSDMARK                   | 0x29a1ff67e425ea56ef0bdc3521926633cefc375a6ef35f366e12745660a4b014 |
| IAU                           | 0x49215ba7efc040fbffec0123a42f5f451c80cdfef50bafb2dfd7f77d1c6c03c2 |
| IAU\_24\_5                    | 0xaf3b8dddc7bb3f794060b269c35cf68be31182350933c1c9d2a77de9184e4e1e |
| ICPUSD                        | 0x1fbde2244b7e1613026c46138f36d9b44fd197291cb94f6dc8ec3983eefaf8c5 |
| ICPUSDMARK                    | 0x81e60f21a0ee60b6e8b1078492c41343b69c1bc8af2378c85a8be8b8d2aea12d |
| IEF\_24\_5                    | 0xffd3d9d2c8007bf2bd1672a8086eefb64214e90cd1eea7b74d5ce8f43957fc12 |
| IEMG                          | 0x947502293e7e51c251cd8eb68d4300ad0999261fc2f00754811805bbe727aa04 |
| IEMG\_24\_5                   | 0x3aa75f0015d989dd2a0f8a80030c59a803e6515b54b0a13d2ae5f80321ac32ad |
| IMXUSD                        | 0xf53ec570f3e305d485b08a353cbb96a87b57b2abaa2e808dacb82f595632be76 |
| IMXUSDMARK                    | 0xb7beb9c524d7b0ed213f8d1a127caa8d7a3ebb26f0eb0e35aee7b666143eb521 |
| INDA\_24\_5                   | 0xfc69536334247b43b9483fa576afdec9721573e51db48fd58941dca6592cf379 |
| INITUSD                       | 0x5172f236f7bc67b39199235125b69c8e8ef65687089f1882721437c9d68ef5b0 |
| INITUSDMARK                   | 0xcb26a488dbad9386caf0155f4df1dde44912c5309fafe33e40dc2fc981b8b034 |
| INJUSD                        | 0x6329fe4613c35c8a32812e93c0d3f4c26c96b1dcc715ee91cca2774991f8dba4 |
| INJUSDMARK                    | 0xcca4ec10bea24be82d680e5c41232051cf7384c3460a39fac079e307e2c39980 |
| INTC                          | 0x26679c568ac4e46a6321cf887bb7b568b774c87625d9c2ae109700480979178e |
| INTC\_24\_5                   | 0x3d91331af548c01564541b6d048dbb3f7f3f90fc0b816b152208a8cb64edfc56 |
| IONQ\_24\_5                   | 0x73ade57fba1fbf39a68b7e6e29d273cfb99f429047abb3ef86174015221abda0 |
| IPUSD                         | 0x3b6bf6e03eb4bfe03cee788827c7b10b9bf904ce8e1236c8f3426806fbc8f2d7 |
| IPUSDMARK                     | 0x5a0b05a85b52cab92acbc2231977af817498fb651a479d219420ab803dd95420 |
| IREN\_24\_5                   | 0x534a5a26e17343d3e611c1cdc26189f5f992115fdfb059f8456d240921a65223 |
| ISRG\_24\_5                   | 0xc3ba91e065310a1723f5379d0159518aa954afc4c9e2849978347f6e2934ff94 |
| ITALIANROTUSD                 | 0x5c2fac9e56a0158086cfd857ae6646eeefa25ed0bad398ba9ea9c1869fb1fd16 |
| IWM                           | 0x256480c948595bb89bdc1adc61ccc91c142d8633661d99550cf5d3fc50a0a753 |
| IWM\_24\_5                    | 0x0cd7fb3d8e81d62fba540bcb340e2a2ee43f8f5fdac1a1ca1d2e00a00e9413f2 |
| JBL\_24\_5                    | 0x07ab20a0bc1929f973a71b80e31b0790234d3e0a19cea594020afac3907f6baa |
| JELLYJELLYUSD                 | 0xa6a3934ca2bd07011724ebfabce0773cd948f18dc8e51a2424a0de8c31653637 |
| JPYUSD                        | 0x2bc1cdf3ae33a48f4c9b20bb403ea4186ce479ff162636c37fdf4086bd286f8c |
| JTOUSD                        | 0xde202dc47a2178460754604eda889ac9f770e5142cc7760c18bc2171671176ca |
| JTOUSDMARK                    | 0x2c1ba2aff751ae34f004400fea57794bc9d7168fa2b037bf56e228a6b23a61d0 |
| JUPUSD                        | 0x41fbd6ec353629658604fb77381bdd8a1218d757537cd1ac2b7f6517cd953aab |
| JUPUSDMARK                    | 0x85bc9d97bceb8a85bab93d2f2008840a86a1ab675dc8ae7af3170fb9078bfdcf |
| KAITOUSD                      | 0x6362ca1369b41de418dc5dfdd8e10aab1d99f266b5a1a5ce4bfc12f65b4a6e25 |
| KAITOUSDMARK                  | 0x8a8b4591998c1b3eaae5204d9a9010fbc8e6e93be0ae81c931bb405fe5468240 |
| KAVAUSD                       | 0x34cfca4bd4dde67649805b738b89998edac95a249dda4111ff94f888ad08d417 |
| KAVAUSDMARK                   | 0xcca52e78954de8af19bf3c903ff8511e8acc96c00ba22bc4b21797c65738ef6c |
| KHYPEUSD                      | 0xdc6d599ba52e7bba537aecefecd70489f5721f2653aa9a65116dccff5eb8054b |
| KLAC\_24\_5                   | 0xfc8101e49b523dbb12a7317eecdbab6e12678516e29fa494a808dcf5b0efd705 |
| KRWUSD                        | 0xf20f7b33b1cfc1b4d43eb6313eb8dfd957827aafdc18369b6e331327ec633a16 |
| KWEB                          | 0x1c2d79bea7efa7da44ef9be4fe0b7d9ec2a312e843986275e2d5877654a70277 |
| KWEB\_24\_5                   | 0x493cee4a2a56f346e924d3aea0be397264bddc795b721eb6faa2b6ae3ab0cf7f |
| LABUSD                        | 0xcea7ffb84df5fbe228f464e40f471a25c2f7784971b1cf4c9d0ec7fa60bed245 |
| LABUSDMARK                    | 0x7c28b66f249a2d8b3444c4e4cf3fb739c953874431ec254896418512636db1d0 |
| LAUNCHCOINUSD                 | 0x529135e2f843d99a80ec9edec83714a7f7d630cf3f81d0b611b8cc4811bf8721 |
| LAYERUSD                      | 0xb93bf3943dee3812886335f64ca6a155521a26b59d38f4b7e2dbafa60de8e4c0 |
| LAYERUSDMARK                  | 0x4f5da773b11113008cb1598ec397e6d7db6c5585401dacffb1441c33763a0c5f |
| LBTCBTC\_RR                   | 0x8f7ccead011eb7e12bbf521a9c8823d37783637b64272c0f32f3eae1f8deea37 |
| LDOUSD                        | 0xb8f3dd7373f5aac405b063aee8800cc7f43fbb8c9b53b0d29de58bff2309e9d8 |
| LDOUSDMARK                    | 0x663c2d2c32507b7c8a5d9ac519e036f69934fde678bc4cd5bfc2ac30ecebca69 |
| LINEAUSD                      | 0x847f789fb234ac797d8a037b4b7c5b74e8cd20411d7ca098490db957c84b6187 |
| LINEAUSDMARK                  | 0x23245af3cae9b0167b88603ba7ceb032dcc69af4105ef9535d5abfc153b85d7a |
| LINKUSD                       | 0x694cad6038bcbefcc30e11862e412bb58f9c4ac3c9e0f9ed02d3e38b16829263 |
| LINKUSDMARK                   | 0xcf2ddf41f42001cfba3bc6ea99d19e6e45e1bcbe02960fb8c02a7bc2b926f4ca |
| LINKUSDT                      | 0xd539aa86bfdb7866021d9acb33f386154ce8e1719fb92d9179a1d314238b9ad0 |
| LIN\_24\_5                    | 0xfce7f116ce2db25fabe104f9b43814490a91d2555e7220c4dee3474ad01a3d80 |
| LITS\_24\_5                   | 0x9e17e3776c584bc98d6663d0cb433045187452864a291c0984f01e39117678fd |
| LITUSD                        | 0xe3992e5abf0581a35aff1f9729d3d8aae89cbc591f4011605a01a4e0b0a788c1 |
| LITUSDC                       | 0xb57cbb1082200a115403f6bd4b633a4392f86623f8ccb5d87143a95119ce500b |
| LITUSDCMARK                   | 0x7f8f9dabb2220b6d771e19eed60d7691025e54a2dda48345939680f38bda231d |
| LITUSDMARK                    | 0x3a844d796e5f2b5e3780087cfd8ba60cbb4c14672c9cff32915a0e9c5c41142e |
| LLY\_24\_5                    | 0xb234534268859245dc65f4d718b697089c98669fe9b0b629fdebcd5c0bf1b666 |
| LMT\_24\_5                    | 0x42fcd64480a08f4fce4274040ab574cab6c2666454c5413dbd20225e5b4e58fb |
| LRCX\_24\_5                   | 0xb4084682501cb0c0e06b43fc3bead1a7230129b3802fb6c4901aa638fb6d8d0a |
| LTCUSD                        | 0x2fcf07344e775706d1880f801dfac9f69053dcb1b1b7832270111ec6c368a023 |
| LTCUSDMARK                    | 0x114d28daedf0b4ec6280d98a224a81a5f4c3a5905edda0b78b44dd69f069f73f |
| LUMOUSD                       | 0xdf8a4eafdf1e1aabdf9f0442918284b897b1d7591577c2b6eeb57d339695e212 |
| MANTRAUSD                     | 0x28a93456ad7703fd6475dfb9dc4fea7caafc5269bd640ae33f4ffffcaa127753 |
| MANTRAUSDMARK                 | 0xc361a59c685dc902161fbcfd6a0b1d85c57c89ec85a3fed9c2c1092334eaca3f |
| MARA\_24\_5                   | 0x2086f109e1f8f67981d46f8cc94e690a13db55ea7fca0e7c87719bf353c8e007 |
| MAUSDTLISTAUSD\_RR            | 0x06d9353dff928a252fbb2697fe4897752613ef4dfb77092bd77b8d3853388e83 |
| MA\_24\_5                     | 0x585550743a375393baf1ca0db03da495909e8986f8425a7d4bc96131691b4931 |
| MCHI\_24\_5                   | 0x93392583c1c17e09d6834d12cf4d40b84e21c238aa3b72c3be2e1a93234d31b5 |
| MCHP\_24\_5                   | 0xdc1382ec76e91ee8e38968ce4c5eba8ca024968e6928f19aee8b7f78b6ef05b9 |
| MEGAUSD                       | 0xad33b41d384df2c519a9ee83507e6d5ec3a30d61522736505bacd75e3ae623ec |
| MEGAUSDMARK                   | 0x8727a2f41559b48599a7d3bdb77fdb470a4a79b2f76978e1ece38c4259bd0ce2 |
| MELANIAUSD                    | 0xd91b02104eb6aca98645611c9deebe50f513aa7d32e2c0f36c2654455ea334e2 |
| MELANIAUSDMARK                | 0xecf853833bca6ed2171782bf318a6959f78e1ac40465a48d7a3f86224003e150 |
| MELI\_24\_5                   | 0x7659211ed6708db6227b88527701370a0fa66c9d18f437fd90fe3cfafd5bdfb3 |
| MEMEUSD                       | 0x1048c89efb170e969950d1fabbd79a10fa4dcb7fb75f55c5c388b66536ac774c |
| MEMEUSDMARK                   | 0x680ab4acca473aa91d7be9c4b5ec45134d6357cc91894afbb415100e9bea7747 |
| METAXUSD                      | 0xea4f553f6ffa2247b48aa97a968215fa6f63c97e8a983ed8eb5ba8c7f408e720 |
| META\_24\_5                   | 0x688207acc5bf653c4ca4676bb2715ff9dffd04873686d5a96316f607d419d622 |
| METUSD                        | 0x667d598b91864a853ca234f5aa4230703a9fe2a3d3b1fb1f536b06ce822e6396 |
| MEUSD                         | 0xeb86ec2ecc7ca8f1210effcd33d0fbefab1238e76b5c0d19d6114a43b914644e |
| MEUSDMARK                     | 0x93f5be9aba36ca686f1f93c4c3a57b84c4258d1aef870e5cc41f93be5c29e48a |
| MIBNBUSD\_RR                  | 0xc11353274ef1bf42cd3476031e93ede567e9baa96d42c1423e285ab0e5c6faa2 |
| MIETHUSD\_RR                  | 0x91ccdbe8da3b9dddf432f3eae0e700bdd7af249640736529d547371527fd0303 |
| MITOUSD                       | 0x676e68664777355c00a9717c8bdfe8f55e98abfd159cce18051d01262b73f6a4 |
| MIUSDCUSD\_RR                 | 0xe5fa6ce29b72da607ae16fc8932ec646a863ef0e6cb50e2a04a912ce8934b16c |
| MKRUSD                        | 0x0bdffb82e27f53e70053dfedbb62d27754de3567d1ff23ada46e2e1c464bddf4 |
| MKRUSDMARK                    | 0x7e3b536beed6733ac15ec103f2a079495869952d9fd942c0c17965a6b3d36a4c |
| MNDY\_24\_5                   | 0xd85d8c00b176758a6ab0880952b765fbb683584d78606c23c35474d431520e89 |
| MNTUSD                        | 0x32e66d3cbff97cc889e739de1a771bd983c9257e0cb057f628d3e03739fdd4d9 |
| MNTUSDMARK                    | 0x034b54e3751150a8df2b5411d8209b27516a2fa034731736b99b3a3f6a9f471f |
| MOH\_24\_5                    | 0xb441547243fa805f163bd989def99ec3350d74b6ef7d95661de2ab532a79a11b |
| MONUSD                        | 0xa4f6b07ae0c89e3f3cc03c1badcc3e9adffdf7206bafcd56d142979800887385 |
| MONUSDMARK                    | 0x40c6eb388c96d21a7b6e60100c042983aa5218007b724a03628eface479f08cc |
| MOODENGUSD                    | 0x9b6dfc361648776e5419b53d4b40c3ea9d1bd0c121fec2e18dc107f957b204f7 |
| MOODENGUSDMARK                | 0xd37a765590ff2084f274f2a311d0ed44888895dade8aa96b6ede4a33fb0cff7e |
| MORPHOSPARKUSDC\_RR           | 0x0bfe860cd0a397cacbf4a26d57af9716e3e700ee9da6d6e8f04d8aadb65d25df |
| MORPHOUSDMARK                 | 0xb4b72d1234fdea72aa1d44f30bc71678579257fe6d1114d97ddebef2227886d3 |
| MOVEUSD                       | 0x2b2985a1e9634d7755ebcf0a80e72df2a772ec710559c8f24b2f6daca9a58ae3 |
| MOVEUSDMARK                   | 0x7903e094382da46c6c3d19718d2049a793456e938dee93d99b8df3e4af5f7733 |
| MSFT                          | 0xb2023082f01404dd0ce6937cab03c4f5d6db9ba8b1fac7e7ee6d8d6d899f4e3d |
| MSFT\_24\_5                   | 0xc4c0260803283f37c4943741482ad2f6813a5659af4a17139616e262fa3133fe |
| MSTR\_24\_5                   | 0x3ccd7e1523cc9392aff7f0940b05de496e0392ccb385d49efe30ccc3c17238bf |
| MU                            | 0xea7fe6b99436d1c2bfcea4d32606073356300ec2d4ecf9c08796366c2b86e157 |
| MUBARAKUSD                    | 0x889b8f4d083f380723f82514f429a6fae3d82ba8fc605b46a2f271dc95b52e34 |
| MU\_24\_5                     | 0xa9c75c8a370897a85da01c365137ca12069da3af4e6b492863ae28087ad2138e |
| MYXUSD                        | 0x9287ba5756e5ece7135235c15c5ff6d2ae56ae29e14171e74f9a44ecb1bb9d85 |
| NACREDXUSD                    | 0x689dfb3251e38b997e3d82f681d088374ac80275fb1333a6759ae8f24afb87cf |
| NALPHAUSD                     | 0x23a8a51db3a3da40db90c068e84d120bfc3dd4f8f5975cf4f4a7413826e1bbf8 |
| NAXIUSD                       | 0x528e190c898268aaca44a523aadffde4f2fc362bf5b1e9283b29d87a4e263b3c |
| NBASISUSD                     | 0xf368c145faa5cac6eaf4e41eff80fd168211e4daa231a1b289fdab29b69c6623 |
| NCLOAUSD                      | 0x3e891679471eb1b082ac82752aa6fad881e4f0fd32625c0d759f9673e5ceacfd |
| NCREDITUSD                    | 0xcd880ab078cf241d0685bd8f1dcee7da147295c44f5646ba178f7dc92cb22159 |
| NEARUSD                       | 0x9eae339210f44449fd65223e91838d70b77a10badfbd999dc174ea65f866c52d |
| NEARUSDC                      | 0x51d719d0729c22e788710e2587d43bcbf22307085c3f040f5dceb86fba1c542d |
| NEARUSDCMARK                  | 0x1c6479b04d0bfb05a7ea267a98e16b8ef5e6acc0aab3ba2f25aa67b624525f4b |
| NEARUSDMARK                   | 0xe070adbddb1efdecb386b45c006c81ec3b9d3f592fce9b941492f6b501ce5a3d |
| NEIROUSD                      | 0x5c9e492d1d1a12d0ee0c57b4e186849f2aa0178908cf6fbc3821ad496505f1d9 |
| NELIXIRUSD                    | 0xdb3e876d4b971ba580b45ee4e1b3ab04c6584048ed4c151bd1148b73e43646ca |
| NETFUSD                       | 0x1a253fdb61a6b1dddce283bfe52f87b226fcbf03397de0105057cf686e5b5f20 |
| NETHERFIUSD                   | 0xa6daebb1a42991a8a7fff5ae2dc7ca403cfc606682f6089b5a6dbb610df32644 |
| NEWTUSD                       | 0xea1d5de4f407597fc92b0f533d97e655cca8daeedd23571c7fb5deba7f920073 |
| NFALCONUSD                    | 0x6213d0021766a063221c220c982ee46e4c7aa43f28441386467ae01a8c9e26c2 |
| NFBNDUSD                      | 0xf92bac857b022950a8fc1af8d8c61d5cd0372e26d2989728430ac3f27ae8c5f8 |
| NFLX\_24\_5                   | 0x6bbf5ad1fa30ee2a9702afe637be992a0ee90af870a13e8241f84ef4bf578f8e |
| NIGHTUSD                      | 0xc37fcceb307aeb7342c111e024d51679e5b2e9e7f9fc8665332f1c7bc3b6092d |
| NILUSD                        | 0xf183ac06fa0b1441e16e4f0bebd9cc418147404dcc832ab0129ed2ee9f2320ce |
| NINSTOUSD                     | 0xc31d5c25cd679100c1dff585834d7dca409026e232b37818c6723b812892c07d |
| NIO\_24\_5                    | 0x4afd1923455dfc098e8f3645ccb6b693e2be33c2f73d1e6a972af690417d81c1 |
| NLCRDUSD                      | 0x31a86136bc8f1c29aa9c558223ee8a5dc9f4e529136016e1403553bbe51ebf4b |
| NMRUSD                        | 0x6d47c7391f11456b0cdc61711ad0291f8f817827ef3210699d6f7f861e5fe597 |
| NOPALUSD                      | 0xc4fd7cb87179f5c5f727ae36d416181bc2bcbbf4b99776ce59445f8370c3c13a |
| NOTUSD                        | 0x49796c313dcb3c8d747c0e452296425aedd2b0b8ccce1035898a7dbe30326894 |
| NOW\_24\_5                    | 0x80f7b95baf90c341e3767a9403fee98c9c145d9de19354aeba83f223bb0607ca |
| NPAYFIUSD                     | 0xc8013a55e8bc03a72fa9a306bc9014dc7754e5c686e8959982efc5d3c0620d67 |
| NPERENAUSD                    | 0x52ca6f870b0100a4062f0852636542411f3176fc03c66b95e4b010144e8d6cd5 |
| NTBILLUSD                     | 0x2647985caf5516af21b0304b2acb77986d1eeea2c8bf3a5866cd5ae8d8e59926 |
| NUSDYUSD                      | 0x4977a819b788c1d318b1de4fd8cec0e3dde380762a2780739daa584f3a5dbb35 |
| NVDA\_24\_5                   | 0xf6ca4c26ee2527432d22bf6ef9429db0d082b9a0da6ee461283dd01f55f7b61b |
| NVDA\_24\_5\_USDC             | 0x7d68b8e55387605f562563ee6d95e2d9cdb93dbe01690cd15d231ac132bb2889 |
| NWISDOMUSD                    | 0x4530f38efa1b2d9153a159470e7146e596c06bb5e802ade53c718d88bcfa1098 |
| NXPCUSD                       | 0xd3966eed9a01531e235cdfd4fb727710fd7476dd0356675357b8a91808df303d |
| NXPI\_24\_5                   | 0x81b238899bb636b77387a72e220a3566dd0e47f8229fd06cb8e4a617ec6a7bd8 |
| NYIELDUSD                     | 0x18fddef43d68963e9041e7a0c0a33379841cc97b553988c84eb1e28fba6fe2c7 |
| NZDUSD                        | 0x5c83ff2c5c301789d772187c9178d16ea59290f8db90b5ee5a640c330cdaf110 |
| ODFL\_24\_5                   | 0xa4767b2648e1ffef427b9ebf6b562ac46ce1a669f02723e80dd5f721f0faf692 |
| OKBUSD                        | 0xf047ca5be1e37afacba58eb1acb608ecdd1dbadaad41757dd441ff81d9b51d3b |
| OKLO\_24\_5                   | 0x08eb27ec3901afb8e8c3c44438ae72c319e3e260edf3d06ace30e6c4475f3679 |
| ONDOUSD                       | 0xb1ee6ff0c33a677732c3ed267431a18abf0b34f3759a48ff95dbc43c9d54b5d3 |
| ONDOUSDC                      | 0x0bf0ae803906a2b5805e60aa3919bac6863cf6d928acf73ebb7189504e6bca06 |
| ONDOUSDCMARK                  | 0xfee434a2dbdf2fe56ed5dbb908cd1eccbea3f21211af13bec51eb9701004e182 |
| ONDOUSDMARK                   | 0xaad6e3aa92fff98d98a70379417a12092fad9c381efaa12ca36742b992c1eabe |
| ONDS\_24\_5                   | 0xe74ec1b435d10ebc9af0411220053052fd2877b839c0fd02df64bcfea4a96249 |
| ON\_24\_5                     | 0x9ae6985d02a55293f2f12d235392708e64d3bd56e71118cf4c53f002567de323 |
| OPEN                          | 0xf76fe33b8a0ebf7aa05740f479d10138c7c15bdc75b10e047cc15be2be15e5b4 |
| OPENUSD                       | 0xb5b5cbb5dc53988fabac7f886cc2bc5e942e6accd53124c3810675274ebc2ce1 |
| OPEN\_24\_5                   | 0xd4f4d5cb79616e81a68d9e0e86bc422ebd1203e0b120372261750b4de2631769 |
| OPUSD                         | 0x2316c275dd635566dd979f717711dcb9fef72e5b70bb46b28ed03958eb7a0e85 |
| OPUSDMARK                     | 0xb4c839193f34a1c727ef1b8afeb63190d3690b2c17bd2a83bba89180559c8701 |
| ORCL\_24\_5                   | 0x7f1db10037593d175cb3619b51febc8e0f83850686c6b69675435c36083767ae |
| ORDERUSD                      | 0x57dd53749d389d4a65495b2fb4f73850abcdd1fdd255a37aa477851fe2187714 |
| ORDIUSD                       | 0x7e2f585494791d546455f474b2587061f20630242286ab5cbcd0bc24fd346aff |
| ORDIUSDMARK                   | 0x959a6c39da3db0a4d89a1dbaf73242085a33966c484458c5dce9679ed81a6388 |
| PAXGUSD                       | 0x803ccbfd4257c66f840694fb5748a53b343625e142caf2be108b88bac8a6c97b |
| PAXGUSDMARK                   | 0x554599d88ba38586ff956fac4e33c86a4eb98ec5b7968438f8be1f0b7833c633 |
| PDD\_24\_5                    | 0x45232b83ba7221acd03a546aa7976f7091fd9980e92b64cf6f12d6de1bf84932 |
| PENDLEUSD                     | 0xf5b5e029928185ab50dcad8053f3ccd0762a920dd6d31e2fc5ac27e57d67ed18 |
| PENDLEUSDMARK                 | 0x3ed70bfe191facfd523d08277a8933e2f5b1614a26bb6fe7024bd402c3073d5c |
| PENDLEUSDT                    | 0x2f78906d899cd30677ca06dd5ee1720ce98dd16178f3a1458e54ce407f40a068 |
| PENGUUSD                      | 0xa8e7df0747a187acd6b857d25b70344056ce389de6e6926a2542e04aad5d62c1 |
| PENGUUSDMARK                  | 0x60b46708671fc82336d508436162fe3605f5f2de18145dc18f9d39aadd278a68 |
| PEOPLEUSD                     | 0xb1e4e96d64506fb3d56876e3160fd289025b41a131e9ea5010356bcc14330721 |
| PEPEUSD                       | 0x7740d9942fd36998a87156e36a2aa45d138b7679933e21fb59e01a005092c04f |
| PETHUSD\_RR                   | 0xe4230bc1e94312c4b57a311c5e3bf5b6a42564ddc1ea7e7edb004180036341c2 |
| PIEVERSEUSD                   | 0x2ffa5feb650a2868e53304b9a345240d4fe5a023af2c449786e52f976bcdb0a2 |
| PIEVERSEUSDMARK               | 0x6d8d5830ba08a905b610d577ee89eb83c9428ae5695ceb659774b674bf3982c6 |
| PIPPINUSD                     | 0xf879f349f1a4bd76e6dd7abf25d09d707bbe9d2274232892e92f4264fc118284 |
| PIUSD                         | 0x35b84193d33e7d2de0345ed0d0f4c2d9825bfb2047b754a7516374dcbf5333b9 |
| PLTR\_24\_5                   | 0x3c0538d9e7f01a81176959d6d4314d91a0a9baf8b670abd00fe59ec0897683f0 |
| PLUMEUSD                      | 0xfd8d4fb833e9a2ee44167d8fd258e6d0019a2994e1c863382b9bcd567b52810b |
| PM\_517020\_PY                | 0xb221514d922ef67ced1ada0b26092f5d1011cb9da9bdbcc00a210508db82dc17 |
| PM\_518509\_PY                | 0x5bde2aa360177b16c072642ba8445ceca2b955717d78b486155a047504c138f3 |
| PM\_518510\_PY                | 0x22cdbec13707e933d2abd1d7e52e359ca746dd52ec746cb5933438b5a4d84885 |
| PM\_525364\_PY                | 0x36f0a8e4b1fd38f9145037de0bf82866f33da114af562e482b8b7e882c7c1cbb |
| PM\_540221\_PY                | 0xff8671ca89f42f28a3f8875e4451f7a622586382f1bd7294f14517e1702a56b8 |
| PM\_545879\_PY                | 0x102ea64570240d8962f9a7debc5c9cf150e063c1962edbd962c59151ceb03e0b |
| PM\_HDG\_25\_AMM\_Y           | 0x765299f2b3bf1f9c5316f2505a05f0cc4bafc273fd8fbb13aaacf9b76cbe21db |
| PM\_TOWD\_25\_AMM\_Y          | 0xf3192da6d01a7dcf4922bd4127293bf2a717cc437481e21f7b2e620495a19482 |
| PNUTUSD                       | 0x170615f1580f264271d79da0ff83aa279d0fd0e2f37f7fdac8c1fa2138a16d04 |
| PNUTUSDMARK                   | 0xb16f1cf4a4c49364a86b56437c7646908c9c1e7b2c2a0c9916e1347bd51d0f19 |
| POLUSD                        | 0x3677639ed5e5918f1a5fdf6848a3a197d562a51fb309aac07903bd911d4e4eba |
| POLUSDMARK                    | 0x59eb5a5ebd1740e13480025341bfa05a8a4395e5e61169a2bd49f0f6e5d5ab4a |
| POLUSDT                       | 0x7f88da7877b628446eaca140f0b060a38cf20f0484fc99d2d7ecc9de8dbe4501 |
| POPCATUSD                     | 0x008963a257366e9c3cfa99ea53733a85b005ebcffe6244e1c7b0a20543f480ce |
| POPCATUSDMARK                 | 0x2842e4030e6cb0ae6fd5ad96e32b5a20967aa48856b8467a12b2beb2124a765b |
| PROVEUSD                      | 0x711ec33dad309f9b2673e90d6af2695a9de1bf06f27bebaf545c53f99977ead2 |
| PROVEUSDMARK                  | 0x41e129dfaa9205dc56b80681f237f5b416d0faa7b447f740bb324d937372202e |
| PUMPUSD                       | 0xaba876a0d4893e162ed60a514538df63a2419f4dcd459608bacf90817d32f74b |
| PUMPUSDMARK                   | 0x21812021de16fd13b38bb2f85997d01ff16b624791abdbc4cf0759f218f4c547 |
| PURRUSD                       | 0x5747a3e950139efe8f6db3ccd8ae979cab97972cf7ed02782aa391e2a3a6a2d9 |
| PUSDUSD                       | 0xe78fbac639b951bb7d4d8a6a7e4e3be7be423f4056b225ec071544c48dc303ef |
| PYPL\_24\_5                   | 0x31bdf9311d1496068f37bd9eb5b433f79557a1522bfea2a5359349897738f086 |
| PYTHUSD                       | 0xcf7965bf4ad8d01e1b4eeae12c41695dfa3c70c18de932ee0cfecf7235cfb48f |
| PYTHUSDMARK                   | 0x448cdb0e2695692035239e622ccd373c87ee4fdeb9295260a028e3a401a55a70 |
| QBTS\_24\_5                   | 0x331628a68f51e739010383b8c6a32d90dd1f3e82e126e2a77277d5bdfe252488 |
| QQQ                           | 0x3192e549b876a689e8727f4a2e0d4fa13b8456aa0a01f6008ad18fd992e3b532 |
| QQQM                          | 0xc86fba274bd8fae846cdb1311d7a37e5b5b279aab1168d64d69138e476fa5ef3 |
| QQQM\_24\_5                   | 0x831d12d13cdf7a8ba2604f66434ec115a011676d00b8dff4dad77ea479ea545d |
| QQQ\_24\_5                    | 0x7807e0d0300a7eafb097367787b5b026e0e70224bc8b2e22d39ef7e209781c1c |
| RAILSUSD                      | 0x9e5d891768fe9cc4e9f5092386ebe782fed41d826a0e7d295c7de68b80ca5416 |
| RAYUSD                        | 0xfeabad5f3abe0762d4cb348300df1f211a13d7e7fc6d88d59028b5fb9f5d5525 |
| REDUSD                        | 0x7dfc788a1dc29f8559bcbf976dba1921ea21f3c18811aec678bd350f42229e38 |
| REGN\_24\_5                   | 0xf6b6e10115c5447907bf20aa94d054e7b2e8b6b0531547609c1ae54ec57215b1 |
| RENDERUSD                     | 0xec1b3b6672fd8a1be34c0a7f392657f26a0e4c41f553053169cb1ddcd9a14b57 |
| RENDERUSDMARK                 | 0x60e0e2c7587550cf3adbe4b81705018b868f0f4fbb23d12c04a6bf22a657de0d |
| RESOLVUSD                     | 0xc0ca444e42d41c3201873a8adf4dc97fd9985594c13e945b72b0f92977e1cdfd |
| RESOLVUSDMARK                 | 0x0dd0b1cb4398acd229b8cf00850086e66325f5cd4d7cccc625879ed0696696f3 |
| RGTI\_24\_5                   | 0x7938be68d84d24e302a7e4044d861d0e85c851dbf69669322a16e5cb58a4cbf8 |
| RIOT\_24\_5                   | 0x65e30ff4a3d08165cc6534f3dea9f648196062cba431a5fdae92179973e90089 |
| RIVERUSD                      | 0x2efd905679eefab6c3c012c63167f94d7ad81955990191f74e13aa0e61fcc3c3 |
| RLUSDUSD                      | 0x3463419d412c4b12b13d3279ee9f94c459cab44084932d4dda3e3fb83064ed27 |
| RNDRUSDMARK                   | 0x00d9335f704c152ddba59ec40ec62840f9ab8a11bd14d9a73020c3937b0c2bec |
| SANDUSD                       | 0x6022f12a3fdbe0df42dcaf4bd543a90261fc2a5d0a39e2451f9395dfe011e1af |
| SBET\_24\_5                   | 0x2cae459a7ed3df3dc62e8112343f76e0a777564dacd6a0398e3284571879d570 |
| SBTCUSD                       | 0x08fc8780f52cb9e9b6c835e55c4c083d9fe2d67470c1eb5207021292f95e5052 |
| SBUX\_24\_5                   | 0x4b154325d1da4b869ee71fa0b00bc1c3c3d6095353d72679b90a592f8d31ec27 |
| SCETHUSD\_RR                  | 0xe7380ea44d6ebe5f332a3a68b55dabf1aff95b9fc5d58468ca61f8cfdf80c693 |
| SCRUSD                        | 0xf78a2bdc1e9e3e4f70e74ac13bd4dfd8dcbe477966f76d8a8f1c77cb8a82a2ee |
| SCUSDUSD\_RR                  | 0xc5d44e1060cfb6c0f15f6cf65fed21d1bb790e87ac3de745e45f4c633eff5e6e |
| SDAIUSD                       | 0xf31e0ed7d2f9d8fe977679f2b18841571a064b9b072cf7daa755a526fe9579ec |
| SDEUSDDEUSD                   | 0xce753e5118248ee505e80ee707fe971392e48350bdc233f374e9a6cda16c9094 |
| SEIUSD                        | 0x7dd60a3246f0df98f307775ca3856eb28872e2d36d044d307fe39768b2be208b |
| SEIUSDMARK                    | 0xd995299d0498304f1e54d95c9583480d40e900fa492f887504b7951ec205cd50 |
| SEIUSDT                       | 0x87c1794467c0955e48bcad17dee3774ac33ac619dae6eb63624c1bfff571a95b |
| SHELLUSD                      | 0x7809efbf68b725cc209ab819cd3c254dc70b0ef6a4a42c9236c1c75bcacd72b5 |
| SHIBUSD                       | 0xb39f98df3f03608241d2e0ef2b566f78d5c7d31b376f298cf7e115cbf006f92d |
| SHOP\_24\_5                   | 0xc7908e7cd4b2e02f5470ff1a67cf3a7bf1d4ce228ef6d83e1b33c956a4051dfc |
| SKRUSD                        | 0x0bde3a0e8c924ce8b027a35bb84732a0253376c06833aeaf4d847352accb09fd |
| SKRUSDMARK                    | 0x318d2e0d867535530de46fd2d2455b6ab417a4ddad21a435dca4e2070b1a32d4 |
| SKYAIUSD                      | 0xac6e9247da60802205e367393d33c878d16eb43ad51889c31fcc1a41bd76e863 |
| SKYUSD                        | 0xab6ddad201a278dae52ec1b231c54394fa7e798d763a7c18e62b35704bea2cf7 |
| SKYUSDMARK                    | 0xc914a9fe581f22d8b5016d058d21648669a20167123cb20e93fea46754b76df7 |
| SLV                           | 0xd7d6203ca11291c3cf69cc62195c0df787763ab768ca3645e98525c1bb827201 |
| SLV\_24\_5                    | 0x6664dffa6f9a3d1d9cd8b66f43e205ee4a3673da89461a7509488a02990f60bf |
| SMCI\_24\_5                   | 0x4cc8f3888bed2c9b7a0e4417d5f302bf4a6b0e02948a562353728d459dcb2fa9 |
| SNDK                          | 0x65448db112bae0530d0a664c8eec66023ff591999e2d782fa1175750374321a1 |
| SNDK\_24\_5                   | 0x14cbafd3e659a170d4419efe6c1929be3b895db33ce30e2139f30837a88e184d |
| SNPS\_24\_5                   | 0x8e68e97aa94f5b65dcbe42f18a287dc239a7c42bba29fd742fed24c15d98f4f7 |
| SNXUSD                        | 0xef5ae37e630ac30404e463bf9f56e2e7a40c4610f4d01426b6bd20b184c34f93 |
| SNXUSDMARK                    | 0xa895ba8ec91eff33431d6e4bfa21e4f604d298ad0968539f089ce44eb33f847c |
| SOLUSD                        | 0x1dcd89dfded9e8a9b0fa1745a8ebbacbb7c81e33d5abc81616633206d932e837 |
| SOLUSDC                       | 0x44f13af03a1774254fc6ce9e732313200accea8e6855ab16641364832acd91d8 |
| SOLUSDCMARK                   | 0x0efff0986c5a94d5b4f3c71d06e9b8bdd7a8d835759742a55d906d1ae8bd12ff |
| SOLUSDMARK                    | 0x36a23533d9e287556851eea5493e66c0cd66529ca015166498e230588985351d |
| SOLUSDT                       | 0x3db5e9fb22b6f66ce6550ab2b9d3872f875f575780c6abb9c95f9ce03845a83e |
| SOPHUSD                       | 0xc2178fe36253d9d39914fe135304530ac3b0f5305ce43d208332e9fd20c70ddb |
| SPCX                          | 0x958d557610fc21e4bcebb25b1833d83d923ade2e9f912e780ced2144c5abc42c |
| SPCX\_24\_5                   | 0xcb5f772f55ab4a095425630af7c015974e2642b38a494191725abc6456493a0d |
| SPLUMEUSD                     | 0x12b5f77572b7781fd674853d9949a4b86a194eaa05c7bb799a7fa3b879da9f83 |
| SPXUSD                        | 0x051a9d682677ed7ea03763668f7e2098163e3e21f893fbe29016776fc394bd07 |
| SPXUSDMARK                    | 0xc3782da7032720edebba5584c61f5dc56e8cec6a2391301d08ab676b2d2b15b1 |
| SPY                           | 0xcea23e8f56b5ac447ac08d57e0808e35f468a65f29bb659b3d48934481e7c67a |
| SPY\_24\_5                    | 0x01ef2ebdefa4a9fbd6f75da48007552e7a56dfd99247197a38205efb3bae634e |
| SPY\_24\_5\_USDC              | 0x5760aee7a0ebc6c24df00064ea13b085f81c0ea2e97224847d52855dd798f9b3 |
| SRUSDRUSD\_RR                 | 0x9d5f2a383ef9228a49af74186c777b5683c33c0deae2c038f10a0b9b81fc8dd9 |
| STBLUSD                       | 0xe54f2a94cfc30bc25388b375659a35620c966f71e69fea0b3840c83301bde84e |
| STETHETH                      | 0x1637900fc6a4be3360a37c7a469972200180efeb9f3ce7142081ef50133bc714 |
| STFUELUSD\_RR                 | 0xa3ed2e58076f53e8dd15c8463ee49e6ce547355c34c639777c5dace3728e2ded |
| STLD\_24\_5                   | 0xdcb0ba51201fc00f90fcc05c692106aef12d91c2daf1cb54b6114d94b1cbd683 |
| STONEUSD\_RR                  | 0x03dc21360613cf5a4dc6e10336668aaa4e1d2fcd6951317da5de8760bc462c56 |
| STRKUSD                       | 0x06abf0d31fda4af02fd51daedd6b0e731fe195454d627e54afe4ff9ac0189d67 |
| STRKUSDMARK                   | 0x0ed4b291f487fbd55c70ef5dd4bc76d0cd4b9aa9e6c065566af7f60560edcc43 |
| STSUSD\_RR                    | 0x814aad7fcf7e5abd8e408da3d51133dc5fd4adda4ead46281b880d9dec5e62af |
| STXUSD                        | 0x4ac60eef00a0b5b33347d79125a5b723ab0d3f9bd21c6c997837533cc7d4bc7a |
| STXUSDMARK                    | 0x22528c1b8ad8b31a3755a11d9855dfabb73cace1669e4642fedf85ea10b15871 |
| STZIGUSD\_RR                  | 0x0476525319b4102ac0c03df5c1f94aef1b210dc01985b1743e3b4ba173e9e7cf |
| SUIG\_24\_5                   | 0x509963b9c089b6670509220ea4e4860a1ac161a344942fbb21d2aa45c11d1d45 |
| SUIUSD                        | 0xa24cc95a4f3d70a0a2f7ac652b67a4a73791631ff06b4ee7f729097311169b81 |
| SUIUSDMARK                    | 0x5ac3e3750d518f96d2314f1708a43f934dd79027973b38a1a43261c2c5d6fb89 |
| SUNUSD                        | 0xf3a0dfad9e2de26a81a8f8fedc0e253e22a22395cb01f3fd2e0d7c036eb64e2a |
| SUPEROETHPWETH\_RR            | 0x1a623bb0b7eaa0dafff6122ecf16d0d3b66bae63bd0bfee833ee050f5d029389 |
| SUSD                          | 0xe18df262d6d0bec60a8d935280235a1a1ee38eabbe83ca3eb9a1ed48b31ac8cb |
| SUSDEUSD                      | 0xf287ddec9700e4ab1db93dbfa5f0e125ee87f8a9eda635f76895e923408d8105 |
| SUSDMARK                      | 0x067948263411211a9dfe0cfbfbb1532eb3cf913423795534f5a22545ca16a18b |
| SUSNUSD                       | 0x4fad14ab0b3793942fa6b796f40b263f0bb67815685625f9061f804cc4f7968f |
| SUSNUSN\_RR                   | 0xd29a4f8c6bfaab3bb2d1892248996a33db942d8af100aef635ba25b15a5013f0 |
| SWARMSUSD                     | 0x749d9820fd8ec933c3e504043f8c87bbf15d5302c023087e804e7381e2e90221 |
| SXTUSD                        | 0x0618a49a980992519f6f3af059d6b9c8170a0b22238a12aadee576802b369933 |
| SYF\_24\_5                    | 0x0522811b5124c160c6926041979101fb44eeb160dbb00f57e9fa8c8d13c9f405 |
| SYRUPUSD                      | 0x837cdb269247e52675b11d90793f5d6591d50af35426018e96ec3e212b8535e0 |
| SYRUPUSDMARK                  | 0x0ea684c91732ba70cf81860535ad0d5f66e8bb9b1221a157482ca44cb596d6d7 |
| TACUSD                        | 0x1bee61267e1e183fc0e5ae456be79517226eff11580bd1fe3fb62a5f5b6da76c |
| TAKEUSD                       | 0xfba15967ee798c21c01245cffe5770f48afd86c0db38dd5f552d61331b6e946a |
| TAOUSD                        | 0xf7121cb96812fec972c9876317f1c5a76e2659feb7bbfa82eb623ff8dd825c91 |
| TAOUSDC                       | 0xc5667cf0dfd2bec9db8caad645eddc95b7ff22f6db77ec38e6452203a31c0037 |
| TAOUSDCMARK                   | 0x93c1a558a68835531f29a4657d57e1bc3f675f41db97dc9239affc61e484d593 |
| TAOUSDMARK                    | 0x120644dd49acc927a3a48d45128c3fccc4b5bf5370f41f4910bf13fde76e537a |
| TER\_24\_5                    | 0x3a87359e596b76a561380ae9226685a4a58ae2b7a5da78073bbc29cb0f5a097d |
| TIAUSD                        | 0xc45bed07b2865e75808c5b94bf1720502a8d22ebcacb0a8d435d244e2ea1bd07 |
| TIAUSDMARK                    | 0x5ffb2531cf9423984d2527c5acd735c088435c708a3b8cc58942b8909a4cb177 |
| TLT                           | 0x4abd434857e07567d49487ccf888348e55d5cfc15498c09a9dbcba2820e40ee4 |
| TLT\_24\_5                    | 0x3d2ac0a86f99358204e21e74ec1f042cd1ae59ea2fc64809dc61a7b8abad810e |
| TMUS\_24\_5                   | 0x3e3fa38db726f87357482599ebee6480ec85c273fd236ec30296549a240179d2 |
| TONUSD                        | 0xf9b6588474de3e3c87da6f54a5184ab7f76e01bb3405946558a50173583e2211 |
| TONUSDC                       | 0x2badf3fa9ee0a474e635e423880c4eb2783ecbf9e3a043fa74fc2736922721fc |
| TONUSDCMARK                   | 0xde78a9f8ef401d583adeed00bf615ac25b44d1635b29ca4a8f31d754f0f24b6d |
| TONUSDMARK                    | 0x588d0a0abeb1812a32f7680404a31cf149b1f919d13f08d52ebc08ed3b615423 |
| TOSHIUSD                      | 0xa1b9f435aacc60b1d8e00b47863f591ddace417e5714b50d67c9885387750194 |
| TREEUSDMARK                   | 0x7dd43560548c6b9e241d0b9b66872766dc7f84c1108442ec04c8fe420dcbfd5b |
| TRON\_24\_5                   | 0x9092a0045a90314720cb89db6b1d2b8e9bbe252838f2a8022eb2e4c1551b2371 |
| TRUMPUSD                      | 0x1cd0600d8851cd5c94eec564ec4ef85108d0a8b7827e27a886219e80b378c25f |
| TRUMPUSDMARK                  | 0xf0989a7f28d4e3b2178b337567bf01f32d4771488a3f1cb740e469201092d41c |
| TRXUSD                        | 0xd0dd12aa405d755be03ac07428f11ecc33545698a59491c235265843e61630e5 |
| TRXUSDMARK                    | 0x4f009d5ba196a03d92f26a1c27e67c3735372f26cf0f46849ec8e3bf63ce2a28 |
| TSLA\_24\_5                   | 0x0e35d7674cd4fc1cc43725020161aae451b5116ddcd693309d80356f31f66575 |
| TSLA\_24\_5\_USDC             | 0xff52e5c3f61f5c00f5d0bd32a0ecc947fee924c2ec3566bf531a0988c09452a7 |
| TSM\_24\_5                    | 0xaeee11efd476830a6ac673f24d5e104a50a6293b82352aed90524851d7804528 |
| TSTUSD                        | 0xc2c8721f60b7127d7158abfc95de0ac18a2fa826de84a13c284fef1bba284fb7 |
| TTD\_24\_5                    | 0xe47f77173fdff1cb1fe0e13f90f2a20e30c54e04630345984a9a0dbd2b44fbd2 |
| TTWO\_24\_5                   | 0x918319f6d768aeceb960a2d84e26ca1e6926f10983df71b8d3bd38011a28b34b |
| TUTUSD                        | 0xe55cf73a43cba7077d5788a0048df62f5250d38b0b77fcb22b1a0aef9770c1fe |
| TWTUSD                        | 0x8cbf36a616f2fb48c0b94e6a5dacd37b235dd815511ea3206b0ac3b7fe7fa7bf |
| TXN\_24\_5                    | 0xa842c808ce0b1f73862a8ab36ffbd2948909284c5bdfbc2f81ab25e5319a60a1 |
| UBER\_24\_5                   | 0xfa6daf7210ec0968cfab36b411e0297e4b2e46e72c1dbf472e14f015b12f7877 |
| UBTCUSD                       | 0xa6687b1dbdc69f7c79e9866f3c9ef85a9e81f311ffab53995aa8934e0a80b825 |
| UBUSD                         | 0xca6437408ab3415039d28697aa9287c7f91ba51d8478e508abefa54f9c4d0b51 |
| UNIUSD                        | 0x9e6266a76df39a05a79ea6566fb4780787a70d8bd92ac5e8d5227ee526d20554 |
| UNIUSDMARK                    | 0xc7a0f5ca678e7296205a1e0563de88ff2fd8a9cf2ad6fba7cd11b9fcff53dad9 |
| UPAUSDUSD\_RR                 | 0x7664e34630226a83a35b75e6237c70cf9cb13dae125c9db97e83871bd2304ff7 |
| UPAVAXUSD\_RR                 | 0xf70d6c89ebc5790a03b353bc5f093e47accd00896bcd4d39450e4fea85365dd8 |
| UPXI\_24\_5                   | 0x36b4f6e5881e257696101b0543e4a6da31f97017070bd21e94adc41143c4b372 |
| URA                           | 0x74d061bbc46a447f917b12ae2e8c5eee43b54b3819e78d8bdfdf6e15a7994cfc |
| URA\_24\_5                    | 0xd9dd9c51e84aeedea5f627a9b7f6dcc36fb8db1d4c9b37f6c336ce9d76ebe029 |
| USDCAD                        | 0xa36f6cf3195abb4e93bf276660acee423f78878e6cfdbad0eab36e455afca97e |
| USDCHF                        | 0xd85af9ebd6fec6b317a7ac07f6d6455c4fc915cc8e1cfe19471faca002582907 |
| USDCNH                        | 0x539c21c64bc4fba522c7e7db8ddfbe23f76460e385672ec31dbf5ae140aa9eba |
| USDCUSD                       | 0x7416a56f222e196d0487dce8a1a8003936862e7a15092a91898d69fa8bce290c |
| USDEUSD                       | 0xa794a3432ecbe502ac5e44b28475b66b948cbd938ddae5005515133d328dad04 |
| USDJPY                        | 0x3d6c40e9d821c10e442cb3fc6cb1c589ffd8b906e734a1ab3b3f7d213ac395d6 |
| USDKRW                        | 0x4e90cb857a2d0313d53432f883ca8991d668468b8986b954e218b0c49f04e715 |
| USDNGN                        | 0xc4ae3d256d8c1d6c36dd406ea9a0c5ad04b76da826d04c356c625222980a0a2c |
| USDSGD                        | 0x8a1375bd16e33aff9be7037f83e076defe9df6efea6d39a51d0b08f17ac9bc6d |
| USDTRY                        | 0x102648d8be62bc2214e50c9287709d70eaf36e342ac23cac063c976e2c3e87f0 |
| USDTUSD                       | 0x6dcd0a8fb0460d4f0f98c524e06c10c63377cd098b589c0b90314bfb55751558 |
| USDUSDC                       | 0x883e6be4c78ebaea9e63cb21f9cece93837607822355cccc100b9a3dce566a73 |
| USDZAR                        | 0x4b4a29536013541496194cf67395ef0fa5c9bf25eb93959e4f6ef4ca3d4d315d |
| USELESSUSD                    | 0xd85a6ade41bf734dec35c346bcb21cb70ffac1f89d404e393e15546d67eb4dd4 |
| USELESSUSDMARK                | 0x88669dccca6c8358f5c8d1cbc332d133ac9982a2646577a86db861e3df8a9b8d |
| USNUSD                        | 0x810c0f50dc3af1ab1f99a766364531d36ec597530fe669bd313f8e1799afea99 |
| USNUSDC\_BUNNI\_LP            | 0x18018830349cdcfdaa6feee8db9bbc62ad0eec5e775c5b1a70639ac6ac86c3e3 |
| USO                           | 0x7fb88338213d5e63de83398ed2ef1ecf76f622ab047d38b26b89f59077a7d08b |
| USO\_24\_5                    | 0xdc6481e504e31e596e456e65ae49d5ca3c9068444badccb8f8c2aca1dc261949 |
| USUALUSD                      | 0x0141469a209c9c5dc8842571dfec85c6b7ddfa5ce56a659f840fef02747997d1 |
| VHYPEUSD\_RR                  | 0x431c10a9ec8ea986a0d1eafa846ce26a03368291894ed0d87a5e1277b4d2fae3 |
| VICUSD                        | 0x6bb5549c984bcd6dc2f0121bb2bc13dc315b4d1d2af0076df2d8ff010cfd9572 |
| VINEUSD                       | 0xe4c5ecb28acb9e56836c0c5d3abab08b20eda7c695f3605304be88bd3a64d4ec |
| VIRTUALUSD                    | 0xe5d90ce1ab0dd4994319520c2007649adf5212da07240f39d3b0d1887def10cd |
| VIRTUALUSDMARK                | 0xa03cb1f0bbf50dd1d00f1a3c5a19b8cef8174bd8d5b42a6fb326481ef169f275 |
| VKHYPEUSD\_RR                 | 0xe36e504466c28b5d5d5acfd5d8535bc6bca7fab8555bbc83d24bd8539d095392 |
| VNTL\_ANTHROPIC\_USDH         | 0x81635b337a135df2cca424ea66894a132029a8cedc634260dcaafcafcd6492f1 |
| VRTX\_24\_5                   | 0xb4a0e5d88fed5ca9b4c9367b7951a556025a20176441f2533296523ad8ba9381 |
| VST\_24\_5                    | 0x1e44a5f9ff4964050bb35c3681d26e7e191613cb81f7aabf78da09b0a74f76b2 |
| VVAULTCIUSD                   | 0x4b5d4452646fb8995a6443686f56a4e09922ceaa1721e3aa284443ad274a7e02 |
| VVAULTOCUSD                   | 0x83439a4857e04bc72111c954093637c558d43d3225bacc40115234fd330dca93 |
| VVAULTQSUSD                   | 0x5fe231373bc98b2491cc519e2cca1fe63b7fe773eef6163b79f78910f7596703 |
| VVAULTSXUSD                   | 0xbd727dfaca08a650a3ecf789582b0d8847b016e56dba185f2d884b36842eff0c |
| VVAULTSYUSD                   | 0xbd15d7a66027e2deefc4ca1ea63d1da9b1ad0180ecaa6c4faeead75cdfbd9a92 |
| VVVUSD                        | 0xb93b68e6f146d8fbf2b3ad8eecff2989e2480f1f2ea5b68e9bb42f7f84f81436 |
| VVVUSDC                       | 0x3d9f86d401564688eee8ce8848944ec3b0de8b1e008939a48027df4928bc324b |
| VVVUSDCMARK                   | 0xf7858d7fa6e4a7e24369e22f5718439a7b0e514986a99869f1e1dd83337ec908 |
| VVVUSDMARK                    | 0xa68c9fe4deacc6726fc6564897a918aced499b4b8f2146af1b61f801ecef4d24 |
| WALUSD                        | 0x6fea54310387623e9b00f085cfaa9a764ed684b47f06acc1fed37d794323bdd4 |
| WALUSDMARK                    | 0x12cc57adb480563954be0ebb29fd7908dd204b80e3520998c05f2cb73252f425 |
| WBNBUSD                       | 0x43a83fb6f275dcf9f6ae0f302246085b8033bae29dbe5bc737d1bc8e9f4f5b17 |
| WBTCUSD                       | 0x1ddeb20108df88bf27cc4a55fff8489a99c37ae2917ce13927c6cdadf4128503 |
| WBTCUSDC                      | 0x22af1f22a15a1c71c01d03f95250d8ad79594b0227c2ecf43bfb6226d88fd7ed |
| WCTUSD                        | 0xc1fc5fbec000ee88438a26561863ca23bea7b719d8cacddb80ee8d2847c09735 |
| WEETHUSD                      | 0x2778ff4ef448d972c023c579b2bff9c55d48d0fde830dcdd72fff8189c01993e |
| WETHUSD                       | 0x8afba5f1a5d4969d23c3b42db1b88f8a9c8176392de5bf066752260478ce82b8 |
| WETUSD                        | 0x6086716c59acd7eca6e430b587280b442be2dc6f7b7645fd33594ecd1977d6c7 |
| WIFUSD                        | 0x32e758e720de0179b431f98d855a239092030e0ea74bd3cccfa3f10b8350954f |
| WIFUSDMARK                    | 0x4e9195b2b18ab81cbfa66ca3c7ab603776c39c121da085d2069cf319fc6c6444 |
| WLDUSD                        | 0xafcb7de36907573651e8665249d28c1db4ffa003fe173ad15a8be643c0941f06 |
| WLDUSDMARK                    | 0xc7714bf7f08401ddb0b7fe99bf58193d2b0e0beee7f0ae63ca5f2103d2fc85e9 |
| WLFIUSD                       | 0x9d068e22b44ab8375c3bf5b58acb8cde26e3d54915306245b759c548373b9255 |
| WLFIUSDMARK                   | 0x4f4252ffec6ef2008eb7593374e9351f3805b1f3e1cffeb41ad8188a95645487 |
| WOSS\_RR                      | 0x6c22e6bdd6c47836a80be3ebd8159374b6b3ef8de0302a6c53de3728bcdc0b7b |
| WSTETHUSD                     | 0x56dd6ca223192c3f415d95b0e6812b9405845c7853522975239c88b6f4f34cbd |
| XAGUSD                        | 0x67107df7f0e95594d9bf8ad8840bbb2ff95617123c227e10aab4d161dd6959b6 |
| XAGUSDC                       | 0x6ed521927121d7c5e9cc6b3feee0bfc3c705b073c46bef7740f62f4b005123b7 |
| XAIUSD                        | 0x1311c247912279e109683789ea99434f7ff296616a562b344d72af48d4c3b553 |
| XAIUSDMARK                    | 0x720cb1cd4e8660b3673daa4d2b4ca65739773a102858dcf5c214f5bb70618a93 |
| XAUMUSD                       | 0x5830a4bf67569f9de641c0114daf165c186efc272597a6570aabc4f7b02fd647 |
| XAUTUSD                       | 0x3abdbe017918bce2673c54bcb9dcd228da411a52dac2d75a50f99138d176ceb3 |
| XAUTUSDMARK                   | 0x77d9159ee102ca63fc01ef12a870d38aca09de6fce24623c43ca75f03f4054cc |
| XAUUSD                        | 0xe21c86d8b6a127bfef214d88fdb0c279e55d27dd8c443733e46c8d3de3c98cd6 |
| XAUUSDC                       | 0xe6bef33a8bd936ac632ac54e9b1b722dabf20941fb6319631dfbdcec36819b01 |
| XEL\_24\_5                    | 0x028fde34fc8115bc3bb187bab3b93e495074e36bc00dc95778a1b91962d7ab4a |
| XLMUSD                        | 0x26822bf8ce1a13a40805c6e26f822511cbb268b86ef217a1f86f31773869e2f0 |
| XLMUSDMARK                    | 0xabff01045c5830275862e35bf78e3a11028fa3e5c8110551b7d33f688d601d39 |
| XMRUSD                        | 0x3828e0d4a3e15eeda41380ca118696b5ce27df4f50c523ecf288118421472b3d |
| XMRUSDMARK                    | 0x964c0b2dc335ec02638085bd0c4281445f8b85409005f305e9030a1cc77656c4 |
| XPDUSD                        | 0x85e920d33b0f446bae4b7d34af51db12f6c920e15133399efe7b3f024e881675 |
| XPLUSD                        | 0x27f439c6675b621c2bff7bce0fe34cc5ecc5bdc177093845222f93a6b1f591b3 |
| XPLUSDMARK                    | 0xc42998186501884f2ef49fa1676466cfe0875b72b9b103fff2a9b381c526ad12 |
| XPTUSD                        | 0x942ae8007d969b6c6caa6a37f2bf5ed39862b03ee8285d52c443388c69bfe5f1 |
| XRPUSD                        | 0x49139a167820038c145d3069c93650bc8e58e050592ba1095de576411ddf693d |
| XRPUSDC                       | 0xc37b712464013d69a37ad9cd00872a7744ac8e23460da4911bee51c5fd99adb0 |
| XRPUSDCMARK                   | 0xcec374c052bc1b19b227ff9d292442f2edbe0f75d873cc1ebf7b8fb341f22703 |
| XRPUSDMARK                    | 0x0cec46730dec92ad5f42dd3aec38c3f173aa30e3786a5de1ee17c68c700a4c45 |
| XTZUSD                        | 0x98f5edab029a7c839910b85accde81b2beeda95507812db9c42c117e9b445106 |
| XYZSPCX\_ORCLPX               | 0xcc3a6172bfe6b8495f8b8828b608f753e1fa3146c7a96b7179358f14fcefec0f |
| XYZ\_24\_5                    | 0x367d1cff1aa5cc0b5baa0d1699171aa89c503f9985283508a264c85ba2305409 |
| YZYUSD                        | 0xc068eed87222cb331c92fcb7f113a6f1818dbb3efafa52f667bed4f9dd3c83b8 |
| YZYUSDMARK                    | 0x041aca5a7fa22cfc954a9e14026f5d96d6b18a89043ffcda04a9535525148ea6 |
| ZECUSD                        | 0x86128514d8036ecddd4d3215dd471390b57eab271e08c21888d73d21a2c2f0d7 |
| ZECUSDC                       | 0xacfbc7f251eee11bc45ecbf7dd2fab91a308d6c3e20858238143af84a07a70ee |
| ZECUSDCMARK                   | 0x3c80aed5536c46cecf673f4ee9a7979db5b4cb9118316aab7f4b91f942aa7459 |
| ZECUSDMARK                    | 0xeb0c804103f097c6dbc025b8c4016751b2c48331ba569c5f8b5ca87dcc1ec7b0 |
| ZIGSTZIG\_RR                  | 0x9c06e52226d5f2977b3351e4390af6b0d26e67fa23255b1ef90e687ae383171c |
| ZIGUSD                        | 0xfddfa7c9735f01abfc23e193845ea9e00895ef105e5dc0f71835bd697a6074c5 |
| ZKUSD                         | 0x009f759c0ba24ed921584fc705c08bd8ae4788c94ca77a3f58d59e92588e23b0 |
| ZM\_24\_5                     | 0xb9debdfaf4351a20b70bd8298c3eaab735c92eb072bbecb518dc52e7b5a41d2a |
| ZORAUSD                       | 0x5adde3e99987af0ecafc4c7a5f2dac94fa36f2cd2f6ece6bfa60a756903babe7 |
| ZORAUSDMARK                   | 0x6f8924d948b632638446e10d5a71485f3efd5d816be1232b41e9b9a40bbe8e58 |
| ZROUSD                        | 0xeab1f0a597440f80e490a45615f860cae60e8c85c615d96922a38a41ef99155e |
| ZROUSDMARK                    | 0x8e590fd47437fd268158f14a7a8e805900c86c34ee88782669b48391a3d8c607 |


# Stork Pushed Assets

Price feeds made available on-chain by Stork

Stork regularly pushes a set of price feeds on-chain across multiple chains. These feeds are accessible by [querying the Stork contract](/getting-started/accessing-data-on-chain). This page lists the available assets, along with their push triggers (maximum staleness and minimum price change percentage).

{% hint style="info" %}
Want access to a price feed on-chain that we're not pushing? See the [Putting Data On-Chain](/getting-started/putting-data-on-chain) to push it yourself, or reach out to Stork so we can get it pushed for you in as little as 24 hours. <sales@stork.network> or [Twitter DMs](https://x.com/storkoracle) open.
{% endhint %}

## Base

### Mainnet

| Asset       | Max Staleness | Delta |
| ----------- | ------------- | ----- |
| SUSNUSN\_RR | 3600s         | 0.5%  |

## Berachain

### Mainnet

| Asset       | Max Staleness | Delta |
| ----------- | ------------- | ----- |
| SUSNUSN\_RR | 3600s         | 0.5%  |

## Citrea

### Mainnet

| Asset         | Max Staleness | Delta |
| ------------- | ------------- | ----- |
| BTCUSD        | 21600s        | 0.5%  |
| CTUSDUSDC\_RR | 21600s        | 0.5%  |
| SUSNUSN\_RR   | 3600s         | 0.5%  |

## EDU Chain

### Mainnet

| Asset   | Max Staleness | Delta |
| ------- | ------------- | ----- |
| BTCUSD  | 3600s         | 0.5%  |
| EDUUSD  | 3600s         | 0.5%  |
| ETHUSD  | 3600s         | 0.5%  |
| USDCUSD | 3600s         | 0.5%  |
| USDTUSD | 3600s         | 0.5%  |

## Fuel

### Mainnet

| Asset         | Max Staleness | Delta |
| ------------- | ------------- | ----- |
| BTCUSD        | 3600s         | 0.5%  |
| ETHUSD        | 3600s         | 0.5%  |
| FUELUSD       | 3600s         | 0.5%  |
| STFUELUSD\_RR | 3600s         | 0.5%  |
| USDCUSD       | 3600s         | 0.5%  |
| USDTUSD       | 3600s         | 0.5%  |

## HyperEVM

### Mainnet

| Asset       | Max Staleness | Delta |
| ----------- | ------------- | ----- |
| SUSNUSN\_RR | 3600s         | 0.5%  |

## Mitosis

### Dognet

| Asset   | Max Staleness | Delta |
| ------- | ------------- | ----- |
| ETHUSD  | 3600s         | 0.5%  |
| USDCUSD | 3600s         | 0.5%  |
| USDTUSD | 3600s         | 0.5%  |

### Mainnet

| Asset              | Max Staleness | Delta |
| ------------------ | ------------- | ----- |
| MAUSDTLISTAUSD\_RR | 3600s         | 0.5%  |
| MIBNBUSD\_RR       | 3600s         | 0.5%  |
| MIETHUSD\_RR       | 3600s         | 0.5%  |
| MITOUSD            | 3600s         | 0.5%  |
| MIUSDCUSD\_RR      | 3600s         | 0.5%  |
| USDCUSD            | 3600s         | 0.5%  |
| USDTUSD            | 3600s         | 0.5%  |
| WBNBUSD            | 3600s         | 0.5%  |
| WEETHUSD           | 3600s         | 0.5%  |
| WETHUSD            | 3600s         | 0.5%  |

## Monad

### Mainnet

| Asset            | Max Staleness | Delta |
| ---------------- | ------------- | ----- |
| AAVEUSD          | 3600s         | 0.05% |
| ADAUSD           | 3600s         | 0.05% |
| APTUSD           | 3600s         | 0.05% |
| ARBUSD           | 3600s         | 0.05% |
| AUSDUSD          | 3600s         | 0.05% |
| AVAXUSD          | 3600s         | 0.05% |
| BERAUSD          | 3600s         | 0.05% |
| BNBUSD           | 3600s         | 0.05% |
| BTCUSD           | 3600s         | 0.02% |
| CAKEUSD          | 3600s         | 0.05% |
| DOGEUSD          | 3600s         | 0.05% |
| EARNAUSDAUSD\_RR | 3600s         | 0.5%  |
| ETHUSD           | 3600s         | 0.02% |
| HYPEUSD          | 3600s         | 0.05% |
| LINKUSD          | 3600s         | 0.05% |
| MONUSD           | 3600s         | 0.02% |
| OPUSD            | 3600s         | 0.05% |
| POLUSD           | 3600s         | 0.05% |
| PYTHUSD          | 3600s         | 0.05% |
| REDUSD           | 3600s         | 0.05% |
| SBTCUSD          | 3600s         | 0.05% |
| SEIUSD           | 3600s         | 0.05% |
| SOLUSD           | 3600s         | 0.05% |
| SUIUSD           | 3600s         | 0.05% |
| SUSD             | 3600s         | 0.05% |
| SUSDEUSD         | 3600s         | 0.05% |
| TIAUSD           | 3600s         | 0.05% |
| UNIUSD           | 3600s         | 0.05% |
| USDCUSD          | 3600s         | 0.05% |
| USDEUSD          | 3600s         | 0.05% |
| USDTUSD          | 3600s         | 0.05% |
| WBTCUSD          | 3600s         | 0.05% |
| WEETHUSD         | 3600s         | 0.05% |
| WETHUSD          | 3600s         | 0.05% |
| WSTETHUSD        | 3600s         | 0.05% |
| XAUUSD           | 3600s         | 0.05% |
| XRPUSD           | 3600s         | 0.05% |
| ZROUSD           | 3600s         | 0.05% |

### Testnet

| Asset     | Max Staleness | Delta |
| --------- | ------------- | ----- |
| AAVEUSD   | 3600s         | 0.05% |
| ADAUSD    | 3600s         | 0.05% |
| APTUSD    | 3600s         | 0.05% |
| ARBUSD    | 3600s         | 0.05% |
| AVAXUSD   | 3600s         | 0.05% |
| BERAUSD   | 3600s         | 0.05% |
| BNBUSD    | 3600s         | 0.05% |
| BTCUSD    | 3600s         | 0.02% |
| DOGEUSD   | 3600s         | 0.05% |
| ETHUSD    | 3600s         | 0.02% |
| HYPEUSD   | 3600s         | 0.05% |
| LINKUSD   | 3600s         | 0.05% |
| MONUSD    | 3600s         | 0.02% |
| OPUSD     | 3600s         | 0.05% |
| POLUSD    | 3600s         | 0.05% |
| PYTHUSD   | 3600s         | 0.05% |
| REDUSD    | 3600s         | 0.05% |
| SBTCUSD   | 3600s         | 0.05% |
| SEIUSD    | 3600s         | 0.05% |
| SOLUSD    | 3600s         | 0.05% |
| SUIUSD    | 3600s         | 0.05% |
| SUSD      | 3600s         | 0.05% |
| SUSDEUSD  | 3600s         | 0.05% |
| TIAUSD    | 3600s         | 0.05% |
| UNIUSD    | 3600s         | 0.05% |
| USDCUSD   | 3600s         | 0.05% |
| USDEUSD   | 3600s         | 0.05% |
| USDTUSD   | 3600s         | 0.05% |
| WBTCUSD   | 3600s         | 0.05% |
| WEETHUSD  | 3600s         | 0.05% |
| WETHUSD   | 3600s         | 0.05% |
| WSTETHUSD | 3600s         | 0.05% |
| XAUUSD    | 3600s         | 0.05% |
| XRPUSD    | 3600s         | 0.05% |
| ZROUSD    | 3600s         | 0.05% |

## Plume

### Mainnet

| Asset              | Max Staleness | Delta |
| ------------------ | ------------- | ----- |
| NACREDXUSD         | 3600s         | 0.5%  |
| NALPHAUSD          | 3600s         | 0.5%  |
| NAXIUSD            | 3600s         | 0.5%  |
| NBASISUSD          | 3600s         | 0.5%  |
| NCLOAUSD           | 3600s         | 0.5%  |
| NCREDITUSD         | 3600s         | 0.5%  |
| NELIXIRUSD         | 3600s         | 0.5%  |
| NETFUSD            | 3600s         | 0.5%  |
| NETHERFIUSD        | 3600s         | 0.5%  |
| NFALCONUSD         | 3600s         | 0.5%  |
| NFBNDUSD           | 3600s         | 0.5%  |
| NINSTOUSD          | 3600s         | 0.5%  |
| NLCRDUSD           | 3600s         | 0.5%  |
| NOPALUSD           | 3600s         | 0.5%  |
| NPAYFIUSD          | 3600s         | 0.5%  |
| NPERENAUSD         | 3600s         | 0.5%  |
| NTBILLUSD          | 3600s         | 0.5%  |
| NUSDYUSD           | 3600s         | 0.5%  |
| NWISDOMUSD         | 3600s         | 0.5%  |
| NYIELDUSD          | 3600s         | 0.5%  |
| PETHUSD\_RR        | 3600s         | 0.5%  |
| PLUMEUSD           | 3600s         | 0.5%  |
| PUSDUSD            | 3600s         | 0.5%  |
| SPLUMEUSD          | 3600s         | 0.5%  |
| SUPEROETHPWETH\_RR | 3600s         | 0.5%  |
| WETHUSD            | 3600s         | 0.5%  |
| XAUMUSD            | 3600s         | 0.5%  |

## RISE

### Mainnet

| Asset           | Max Staleness | Delta |
| --------------- | ------------- | ----- |
| 1000PEPEUSD     | 0.5s          | 0.5%  |
| 1000PEPEUSDMARK | 0.5s          | 0.5%  |
| AAVEUSD         | 0.5s          | 0.5%  |
| AAVEUSDC        | 0.5s          | 0.5%  |
| AAVEUSDCMARK    | 0.5s          | 0.5%  |
| AAVEUSDMARK     | 0.5s          | 0.5%  |
| AEROUSDC        | 0.5s          | 0.5%  |
| AEROUSDCMARK    | 0.5s          | 0.5%  |
| BNBUSD          | 0.5s          | 0.5%  |
| BNBUSDC         | 0.5s          | 0.5%  |
| BNBUSDCMARK     | 0.5s          | 0.5%  |
| BNBUSDMARK      | 0.5s          | 0.5%  |
| BTCUSD          | 0.5s          | 0.5%  |
| BTCUSDC         | 0.5s          | 0.5%  |
| BTCUSDCMARK     | 0.5s          | 0.5%  |
| BTCUSDMARK      | 0.5s          | 0.5%  |
| COIN\_24\_5     | 0.5s          | 0.5%  |
| DOGEUSD         | 0.5s          | 0.5%  |
| DOGEUSDC        | 0.5s          | 0.5%  |
| DOGEUSDCMARK    | 0.5s          | 0.5%  |
| DOGEUSDMARK     | 0.5s          | 0.5%  |
| ETHUSD          | 0.5s          | 0.5%  |
| ETHUSDC         | 0.5s          | 0.5%  |
| ETHUSDCMARK     | 0.5s          | 0.5%  |
| ETHUSDMARK      | 0.5s          | 0.5%  |
| HOOD\_24\_5     | 0.5s          | 0.5%  |
| HYPEUSD         | 0.5s          | 0.5%  |
| HYPEUSDC        | 0.5s          | 0.5%  |
| HYPEUSDCMARK    | 0.5s          | 0.5%  |
| HYPEUSDMARK     | 0.5s          | 0.5%  |
| LINKUSD         | 0.5s          | 0.5%  |
| LINKUSDMARK     | 0.5s          | 0.5%  |
| LITUSD          | 0.5s          | 0.5%  |
| LITUSDC         | 0.5s          | 0.5%  |
| LITUSDCMARK     | 0.5s          | 0.5%  |
| LITUSDMARK      | 0.5s          | 0.5%  |
| LTCUSD          | 0.5s          | 0.5%  |
| LTCUSDMARK      | 0.5s          | 0.5%  |
| MNTUSD          | 0.5s          | 0.5%  |
| MNTUSDMARK      | 0.5s          | 0.5%  |
| NEARUSDC        | 0.5s          | 0.5%  |
| NEARUSDCMARK    | 0.5s          | 0.5%  |
| NVDA\_24\_5     | 0.5s          | 0.5%  |
| ONDOUSDC        | 0.5s          | 0.5%  |
| ONDOUSDCMARK    | 0.5s          | 0.5%  |
| PENGUUSD        | 0.5s          | 0.5%  |
| PENGUUSDMARK    | 0.5s          | 0.5%  |
| PUMPUSD         | 0.5s          | 0.5%  |
| PUMPUSDMARK     | 0.5s          | 0.5%  |
| SOLUSD          | 0.5s          | 0.5%  |
| SOLUSDC         | 0.5s          | 0.5%  |
| SOLUSDCMARK     | 0.5s          | 0.5%  |
| SOLUSDMARK      | 0.5s          | 0.5%  |
| SPY\_24\_5      | 0.5s          | 0.5%  |
| TAOUSD          | 0.5s          | 0.5%  |
| TAOUSDC         | 0.5s          | 0.5%  |
| TAOUSDCMARK     | 0.5s          | 0.5%  |
| TAOUSDMARK      | 0.5s          | 0.5%  |
| TONUSDC         | 0.5s          | 0.5%  |
| TONUSDCMARK     | 0.5s          | 0.5%  |
| TSLA\_24\_5     | 0.5s          | 0.5%  |
| USDCUSD         | 0.5s          | 0.5%  |
| VVVUSDC         | 0.5s          | 0.5%  |
| VVVUSDCMARK     | 0.5s          | 0.5%  |
| WBTCUSD         | 3600s         | 0.5%  |
| WBTCUSDC        | 0.5s          | 0.5%  |
| WETHUSD         | 0.5s          | 0.5%  |
| XAGUSD          | 0.5s          | 0.5%  |
| XAUUSD          | 0.5s          | 0.5%  |
| XMRUSD          | 0.5s          | 0.5%  |
| XMRUSDMARK      | 0.5s          | 0.5%  |
| XRPUSD          | 0.5s          | 0.5%  |
| XRPUSDC         | 0.5s          | 0.5%  |
| XRPUSDCMARK     | 0.5s          | 0.5%  |
| XRPUSDMARK      | 0.5s          | 0.5%  |
| ZECUSD          | 0.5s          | 0.5%  |
| ZECUSDC         | 0.5s          | 0.5%  |
| ZECUSDCMARK     | 0.5s          | 0.5%  |
| ZECUSDMARK      | 0.5s          | 0.5%  |

### Testnet

| Asset             | Max Staleness | Delta |
| ----------------- | ------------- | ----- |
| 1000PEPEUSD       | 1s            | 0.5%  |
| 1000PEPEUSDMARK   | 1s            | 0.5%  |
| AAVEUSD           | 1s            | 0.5%  |
| AAVEUSDC          | 1s            | 0.5%  |
| AAVEUSDCMARK      | 1s            | 0.5%  |
| AAVEUSDMARK       | 1s            | 0.5%  |
| AEROUSDC          | 1s            | 0.5%  |
| AEROUSDCMARK      | 1s            | 0.5%  |
| BNBUSD            | 1s            | 0.5%  |
| BNBUSDC           | 1s            | 0.5%  |
| BNBUSDCMARK       | 1s            | 0.5%  |
| BNBUSDMARK        | 1s            | 0.5%  |
| BTCUSD            | 1s            | 0.5%  |
| BTCUSDC           | 1s            | 0.5%  |
| BTCUSDCMARK       | 1s            | 0.5%  |
| BTCUSDMARK        | 1s            | 0.5%  |
| COIN\_24\_5\_USDC | 1s            | 0.5%  |
| DOGEUSD           | 1s            | 0.5%  |
| DOGEUSDC          | 1s            | 0.5%  |
| DOGEUSDCMARK      | 1s            | 0.5%  |
| DOGEUSDMARK       | 1s            | 0.5%  |
| ETHUSD            | 1s            | 0.5%  |
| ETHUSDC           | 1s            | 0.5%  |
| ETHUSDCMARK       | 1s            | 0.5%  |
| ETHUSDMARK        | 1s            | 0.5%  |
| HOOD\_24\_5\_USDC | 1s            | 0.5%  |
| HYPEUSD           | 1s            | 0.5%  |
| HYPEUSDC          | 1s            | 0.5%  |
| HYPEUSDCMARK      | 1s            | 0.5%  |
| HYPEUSDMARK       | 1s            | 0.5%  |
| LINKUSD           | 1s            | 0.5%  |
| LINKUSDMARK       | 1s            | 0.5%  |
| LITUSD            | 1s            | 0.5%  |
| LITUSDC           | 1s            | 0.5%  |
| LITUSDCMARK       | 1s            | 0.5%  |
| LITUSDMARK        | 1s            | 0.5%  |
| LTCUSD            | 1s            | 0.5%  |
| LTCUSDMARK        | 1s            | 0.5%  |
| MNTUSD            | 1s            | 0.5%  |
| MNTUSDMARK        | 1s            | 0.5%  |
| NEARUSDC          | 1s            | 0.5%  |
| NEARUSDCMARK      | 1s            | 0.5%  |
| NVDA\_24\_5\_USDC | 1s            | 0.5%  |
| ONDOUSDC          | 1s            | 0.5%  |
| ONDOUSDCMARK      | 1s            | 0.5%  |
| PENGUUSD          | 1s            | 0.5%  |
| PENGUUSDMARK      | 1s            | 0.5%  |
| PUMPUSD           | 1s            | 0.5%  |
| PUMPUSDMARK       | 1s            | 0.5%  |
| SOLUSD            | 1s            | 0.5%  |
| SOLUSDC           | 1s            | 0.5%  |
| SOLUSDCMARK       | 1s            | 0.5%  |
| SOLUSDMARK        | 1s            | 0.5%  |
| SPY\_24\_5\_USDC  | 1s            | 0.5%  |
| TAOUSD            | 1s            | 0.5%  |
| TAOUSDC           | 1s            | 0.5%  |
| TAOUSDCMARK       | 1s            | 0.5%  |
| TAOUSDMARK        | 1s            | 0.5%  |
| TONUSDC           | 1s            | 0.5%  |
| TONUSDCMARK       | 1s            | 0.5%  |
| TSLA\_24\_5\_USDC | 1s            | 0.5%  |
| USDCUSD           | 1s            | 0.5%  |
| VVVUSDC           | 1s            | 0.5%  |
| VVVUSDCMARK       | 1s            | 0.5%  |
| WBTCUSDC          | 1s            | 0.5%  |
| WETHUSD           | 1s            | 0.5%  |
| XAGUSDC           | 1s            | 0.5%  |
| XAUUSDC           | 1s            | 0.5%  |
| XMRUSD            | 1s            | 0.5%  |
| XMRUSDMARK        | 1s            | 0.5%  |
| XRPUSD            | 1s            | 0.5%  |
| XRPUSDC           | 1s            | 0.5%  |
| XRPUSDCMARK       | 1s            | 0.5%  |
| XRPUSDMARK        | 1s            | 0.5%  |
| ZECUSD            | 1s            | 0.5%  |
| ZECUSDC           | 1s            | 0.5%  |
| ZECUSDCMARK       | 1s            | 0.5%  |
| ZECUSDMARK        | 1s            | 0.5%  |

## TAC

### Mainnet

| Asset       | Max Staleness | Delta |
| ----------- | ------------- | ----- |
| LBTCBTC\_RR | 3600s         | 0.5%  |
| SUSNUSD     | 21600s        | 1%    |

## ZIGChain

### Mainnet

| Asset        | Max Staleness | Delta |
| ------------ | ------------- | ----- |
| ATOMUSD      | 3600s         | 0.5%  |
| BTCUSD       | 3600s         | 0.5%  |
| ETHUSD       | 3600s         | 0.5%  |
| STZIGUSD\_RR | 1800s         | 0.5%  |
| USDCUSD      | 3600s         | 0.5%  |
| ZIGSTZIG\_RR | 3600s         | 0.5%  |
| ZIGUSD       | 1800s         | 0.5%  |


# Contract Addresses

This section lists the addresses of the official Stork pull oracle contracts across currently deployed to chains. The contracts are split between the following ecosystems:

{% content-ref url="/pages/skXCkdPS6ksI76nfNBn7" %}
[EVM](/resources/contract-addresses/evm)
{% endcontent-ref %}

{% content-ref url="/pages/Vzx3CX0rL2XFd6WAn5JE" %}
[Solana / SVM](/resources/contract-addresses/solana)
{% endcontent-ref %}

{% content-ref url="/pages/eE4lezlnEKT5XcIPaqJD" %}
[Sui](/resources/contract-addresses/sui)
{% endcontent-ref %}

{% content-ref url="/pages/W7waG7I8PqkcY44uxIPL" %}
[Aptos](/resources/contract-addresses/aptos)
{% endcontent-ref %}

{% content-ref url="/pages/kVETip4Y8DTUskY8nIpn" %}
[CosmWasm](/resources/contract-addresses/cosmwasm)
{% endcontent-ref %}

{% content-ref url="/pages/rW9MqkFIlu2z0s877e0q" %}
[Fuel](/resources/contract-addresses/fuel)
{% endcontent-ref %}

{% content-ref url="/pages/3VNLWKScsNuqEu9BBxfs" %}
[Initia](/resources/contract-addresses/initia)
{% endcontent-ref %}


# EVM

Contract Addresses for EVM chains

For documentation on interacting with these contracts in your contract, please see the [EVM API reference](/api-reference/contract-apis/evm).

## Abstract

| Network | Address                                                                                                                           |
| ------- | --------------------------------------------------------------------------------------------------------------------------------- |
| Testnet | [0xedea47572301271280a39F8A7378C7dc54fe5F1E](https://explorer.testnet.abs.xyz/address/0xedea47572301271280a39F8A7378C7dc54fe5F1E) |

## Apechain

| Network | Address                                                                                                             |
| ------- | ------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://apescan.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Arbitrum

| Network | Address                                                                                                                      |
| ------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://arbiscan.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)         |
| Sepolia | [0x7Bb9740FdcbD91866CaFEd099C36445Ea8140627](https://sepolia.arbiscan.io/address/0x7Bb9740FdcbD91866CaFEd099C36445Ea8140627) |

## Arc

| Network | Address                                                                                                                      |
| ------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://testnet.arcscan.app/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Avalanche

| Network | Address                                                                                                               |
| ------- | --------------------------------------------------------------------------------------------------------------------- |
| C-Chain | [0x647DFd812BC1e116c6992CB2bC353b2112176fD6](https://snowtrace.io/address/0x647DFd812BC1e116c6992CB2bC353b2112176fD6) |

## BNB Smart Chain

| Network | Address                                                                                                                      |
| ------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0x7D06cc8210228365896A3cc8Aac88c5551529112](https://bscscan.com/address/0x7D06cc8210228365896A3cc8Aac88c5551529112)         |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://testnet.bscscan.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Base

| Network | Address                                                                                                                       |
| ------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0x647DFd812BC1e116c6992CB2bC353b2112176fD6](https://basescan.org/address/0x647DFd812BC1e116c6992CB2bC353b2112176fD6)         |
| Sepolia | [0x647DFd812BC1e116c6992CB2bC353b2112176fD6](https://sepolia.basescan.org/address/0x647DFd812BC1e116c6992CB2bC353b2112176fD6) |

## Berachain

| Network | Address                                                                                                               |
| ------- | --------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://berascan.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Bitlayer

| Network | Address                                                                                                                      |
| ------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://testnet.btrscan.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Bob

| Network | Address                                                                                                                                 |
| ------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Sepolia | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://bob-sepolia.explorer.gobob.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Bsquared

| Network | Address                                                                                                                            |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.bsquared.network/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Camp

| Network | Address                                                                                                                                |
| ------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://basecamp.cloud.blockscout.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Citrea

| Network | Address                                                                                                                              |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.mainnet.citrea.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.testnet.citrea.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Core

| Network | Address                                                                                                                   |
| ------- | ------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://scan.coredao.org/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Cronos ZkEvm

| Network | Address                                                                                                                                    |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| Mainnet | [0x6a2ab154d7c5Ba9fdea6d8A0C79818A4463a63f9](https://explorer.zkevm.cronos.org/address/0x6a2ab154d7c5Ba9fdea6d8A0C79818A4463a63f9)         |
| Testnet | [0x6a2ab154d7c5Ba9fdea6d8A0C79818A4463a63f9](https://explorer.zkevm.cronos.org/testnet/address/0x6a2ab154d7c5Ba9fdea6d8A0C79818A4463a63f9) |

## CrossFi

| Network | Address                                                                                                              |
| ------- | -------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://xfiscan.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## EDU Chain

| Network | Address                                                                                                                          |
| ------- | -------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://educhain.blockscout.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Ethereum

| Network | Address                                                                                                               |
| ------- | --------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0x035B5438444f26e6Aab81E91d475b7B1Ac4Fb22b](https://etherscan.io/address/0x035B5438444f26e6Aab81E91d475b7B1Ac4Fb22b) |

## Filecoin

| Network     | Address                                                                                                                             |
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| Calibration | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://calibration.filfox.info/en/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Flow EVM

| Network | Address                                                                                                                  |
| ------- | ------------------------------------------------------------------------------------------------------------------------ |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://evm.flowscan.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Goat

| Network | Address                                                                                                                                 |
| ------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.goat.network/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)          |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.testnet3.goat.network/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Gravity

| Network       | Address                                                                                                                       |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Alpha Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.gravity.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Hemi

| Network | Address                                                                                                                    |
| ------- | -------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.hemi.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Horizen

| Network | Address                                                                                                                                       |
| ------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://horizen.calderaexplorer.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)          |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://horizen-testnet.explorer.caldera.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## HyperEVM

| Network | Address                                                                                                                      |
| ------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://hyperevmscan.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)     |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://testnet.purrsec.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Ink

| Network | Address                                                                                                                                  |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| Sepolia | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer-sepolia.inkonchain.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Lightlink

| Network         | Address                                                                                                                       |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Pegasus Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://pegasus.lightlink.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |
| Phoenix Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://phoenix.lightlink.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Lisk

| Network | Address                                                                                                                              |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Sepolia | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://sepolia-blockscout.lisk.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Manta Pacific

| Network         | Address                                                                                                                                                 |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet         | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://pacific-explorer.manta.network/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)                 |
| Sepolia Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://pacific-explorer.sepolia-testnet.manta.network/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## MegaETH

| Network   | Address                                                                                                                                    |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| Mainnet   | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://megaeth.blockscout.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)            |
| TestnetV2 | [0x266795f5A45AEc26aBF7E1c923dC15Cbb1A4Ed96](https://megaeth-testnet-v2.blockscout.com/address/0x266795f5A45AEc26aBF7E1c923dC15Cbb1A4Ed96) |

## Merlin

| Network | Address                                                                                                                              |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://scan.merlinchain.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)         |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://testnet-scan.merlinchain.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Mezo

| Network         | Address                                                                                                                         |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Matsnet Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.test.mezo.org/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Mitosis

| Network | Address                                                                                                                                |
| ------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Dognet  | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://blockscout.dognet.mitosis.org/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://mitoscan.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)                   |

## Monad

| Network | Address                                                                                                                            |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://mainnet-beta.monvision.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://testnet.monadexplorer.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## OP

| Network | Address                                                                                                                                |
| ------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.optimism.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)          |
| Sepolia | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://sepolia-optimism.etherscan.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Open Campus

| Network | Address                                                                                                                                   |
| ------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://edu-chain-testnet.blockscout.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Perennial

| Network | Address                                                                                                                                                                  |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer-perennial-lsv53i0ed8.t.conduit.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)                     |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer-perennial-testnet-op-base-tia-dphnnr04wr.t.conduit.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Plume

| Network | Address                                                                                                                                    |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://phoenix-explorer.plumenetwork.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://testnet-explorer.plumenetwork.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Polygon

| Network | Address                                                                                                                       |
| ------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Amoy    | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://amoy.polygonscan.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://polygonscan.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)      |

## Quai

| Network                 | Address                                                                                                                      |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Mainnet Cyprus1         | [0x00225fCCCC774e25606bB34821e9Db52af433963](https://quaiscan.io/address/0x00225fCCCC774e25606bB34821e9Db52af433963)         |
| Orchard Testnet Cyprus1 | [0x00754b866956D338bEA6CEc98D0D2aB4508085ff](https://orchard.quaiscan.io/address/0x00754b866956D338bEA6CEc98D0D2aB4508085ff) |

## RISE

| Network | Address                                                                                                                                |
| ------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.risechain.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)        |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.testnet.riselabs.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Robinhood

| Network | Address                                                                                                                                       |
| ------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://robinhoodchain.blockscout.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)        |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.testnet.chain.robinhood.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Rootstock

| Network | Address                                                                                                                                   |
| ------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://rootstock-testnet.blockscout.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## SKALE

| Network        | Address                                                                                                                                                          |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Europa Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://juicy-low-small-testnet.explorer.testnet.skalenodes.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Scroll

| Network | Address                                                                                                                         |
| ------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://scrollscan.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)         |
| Sepolia | [0xbB4105F349072B15e300f3dAeB701EF986ae5372](https://sepolia.scrollscan.com/address/0xbB4105F349072B15e300f3dAeB701EF986ae5372) |

## Somnia

| Network | Address                                                                                                                                  |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://shannon-explorer.somnia.network/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Soneium

| Network | Address                                                                                                                         |
| ------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://soneium.blockscout.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Sonic

| Network | Address                                                                                                                         |
| ------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.soniclabs.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Sophon

| Network | Address                                                                                                               |
| ------- | --------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0x6a2ab154d7c5Ba9fdea6d8A0C79818A4463a63f9](https://sophscan.xyz/address/0x6a2ab154d7c5Ba9fdea6d8A0C79818A4463a63f9) |

## Story

| Network | Address                                                                                                               |
| ------- | --------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://storyscan.io/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Superseed

| Network | Address                                                                                                                         |
| ------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.superseed.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## TAC

| Network                  | Address                                                                                                                         |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet                  | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://explorer.tac.build/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62)     |
| Saint Petersburg Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://spb.explorer.tac.build/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Umi

| Network | Address                                                                                                                                |
| ------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Devnet  | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://devnet.explorer.moved.network/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## Unichain

| Network | Address                                                                                                                      |
| ------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Sepolia | [0x266795f5A45AEc26aBF7E1c923dC15Cbb1A4Ed96](https://sepolia.uniscan.xyz/address/0x266795f5A45AEc26aBF7E1c923dC15Cbb1A4Ed96) |

## Viction

| Network | Address                                                                                                                  |
| ------- | ------------------------------------------------------------------------------------------------------------------------ |
| Mainnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://www.vicscan.xyz/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |

## ZKsync

| Network | Address                                                                                                                             |
| ------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0xedea47572301271280a39F8A7378C7dc54fe5F1E](https://explorer.zksync.io/address/0xedea47572301271280a39F8A7378C7dc54fe5F1E)         |
| Sepolia | [0xa4EdaB501dD4B3aD9Ad6d30dE1B3a29b8d9a9858](https://sepolia.explorer.zksync.io/address/0xa4EdaB501dD4B3aD9Ad6d30dE1B3a29b8d9a9858) |

## Zetachain

| Network | Address                                                                                                                                   |
| ------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| Testnet | [0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62](https://zetachain-testnet.blockscout.com/address/0xacC0a0cF13571d30B4b8637996F5D6D774d4fd62) |


# Solana / SVM

Contract Addresses for Solana/SVM chains

For documentation on interacting with these contracts in your contract, please see the [Solana API reference](/api-reference/contract-apis/solana).

## Solana

| Network | Address                                                                                                                                       |
| ------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [stork1JUZMKYgjNagHiK2KdMmb42iTnYe9bYUCDUk8n](https://explorer.solana.com/address/stork1JUZMKYgjNagHiK2KdMmb42iTnYe9bYUCDUk8n)                |
| Devnet  | [stork1JUZMKYgjNagHiK2KdMmb42iTnYe9bYUCDUk8n](https://explorer.solana.com/address/stork1JUZMKYgjNagHiK2KdMmb42iTnYe9bYUCDUk8n?cluster=devnet) |

## Atlas

| Network | Address                                                                                                                       |
| ------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Testnet | [stork1JUZMKYgjNagHiK2KdMmb42iTnYe9bYUCDUk8n](https://explorer.atlas.xyz/address/stork1JUZMKYgjNagHiK2KdMmb42iTnYe9bYUCDUk8n) |


# Sui

Contract Addresses for Sui chains

For documentation on interacting with these contracts in your contract, please see the [SUI API reference](/api-reference/contract-apis/sui).

| Network | Package ID                                                                                                                                                                            | StorkState Object ID                                                                                                                                                                  |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0x1ec537522efd3567cacc4e2f65d38f3db77c9c5353c682d9fe95e41f15a15d70](https://suiscan.xyz/mainnet/object/0x1ec537522efd3567cacc4e2f65d38f3db77c9c5353c682d9fe95e41f15a15d70/tx-blocks) | [0x88ca8f0ce0f6b30a39bdf71be27ffd0c5571adba28c49a1a3bd530e8fcffb29a](https://suiscan.xyz/mainnet/object/0x88ca8f0ce0f6b30a39bdf71be27ffd0c5571adba28c49a1a3bd530e8fcffb29a/tx-blocks) |
| Testnet | [0xbd064a6c398e9752270209e54a164ccb86760cc11efb53f9a3fbf89201165c3c](https://suiscan.xyz/testnet/object/0xbd064a6c398e9752270209e54a164ccb86760cc11efb53f9a3fbf89201165c3c/tx-blocks) | [0x3c7d6f27048538f8484142c59cff680c9b31c5353d15470a5a526177f781d1da](https://suiscan.xyz/testnet/object/0x3c7d6f27048538f8484142c59cff680c9b31c5353d15470a5a526177f781d1da/tx-blocks) |


# Aptos

Contract Addresses for Aptos chains

For documentation on interacting with these contracts in your contract, please see the [Aptos API reference](/api-reference/contract-apis/aptos).

| Network | Address                                                                                                                                                                                                     |
| ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0x68ba7261bf09152006999d7f53432ed540e238d8f1050e1fe739738309f58217](https://explorer.aptoslabs.com/object/0x68ba7261bf09152006999d7f53432ed540e238d8f1050e1fe739738309f58217/transactions?network=mainnet) |
| Testnet | [0x68ba7261bf09152006999d7f53432ed540e238d8f1050e1fe739738309f58217](https://explorer.aptoslabs.com/object/0x68ba7261bf09152006999d7f53432ed540e238d8f1050e1fe739738309f58217/transactions?network=testnet) |


# CosmWasm

Contract Addresses for CosmWasm chains

For documentation on interacting with these contracts in your contract, please see the [CosmWasm API Reference](/api-reference/contract-apis/cosmwasm).

## ZIGChain

| Network | Address                                                                                                                                                                 |
| ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [zig1g4xlpqy29m50j5y69reguae328tc9y83l4299pf2wmjn0xczq5js0p4aju](https://app.range.org/address/zigchain/zig1g4xlpqy29m50j5y69reguae328tc9y83l4299pf2wmjn0xczq5js0p4aju) |
| Testnet | [zig1nhy836nyxckdykea6rqg8lxg9l6qgyeejcjzfzkapa6j9s79pywsxjr7sr](https://app.range.org/address/zig/zig1nhy836nyxckdykea6rqg8lxg9l6qgyeejcjzfzkapa6j9s79pywsxjr7sr)      |


# Fuel

Contract Addresses for Fuel chains

For documentation on interacting with these contracts in your contract, please see the [FUEL API Reference](/api-reference/contract-apis/fuel).

| Network | Address                                                                                                                                                                                 |
| ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | [0x9c118ae13927dd51ba59c0370dc8c272a3b64ccd675950750c8840a649c81149](https://app.fuel.network/contract/0x9c118ae13927dd51ba59c0370dc8c272a3b64ccd675950750c8840a649c81149/transactions) |
| Testnet | [0x09c88f50d535ac5ce8945e34c418233b1e3834be9a88effb57cb137321fbae0c](https://app-testnet.fuel.network/contract/0x09c88f50d535ac5ce8945e34c418233b1e3834be9a88effb57cb137321fbae0c)      |


# Initia

Contract Address for Initia, sectioned by VM type.

For documentation on interacting with these contracts in your contract, please see the [Initia API References](/api-reference/contract-apis/initia).

{% content-ref url="/pages/6rl2Z2iBtmswpqSVXxgW" %}
[MiniMove](/resources/contract-addresses/initia/minimove)
{% endcontent-ref %}


# MiniMove

Contract Addresses for Initia MiniMove chains

For documentation on interacting with these contracts in your contract, please see the [Initia MiniMove API Reference](/api-reference/contract-apis/initia/minimove).

| Network | Address                                                                                                                                                                                        |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | Coming soon...                                                                                                                                                                                 |
| Testnet | [0xB70471C1EC497BBE45FF1026503F71B8B37DEAD670BEC165F3DAC5B9C2F0D227](https://scan.testnet.initia.xyz/initiation-2/accounts/0xB70471C1EC497BBE45FF1026503F71B8B37DEAD670BEC165F3DAC5B9C2F0D227) |


# Adapters

Adapters for other standard oracle interfaces for Stork

For convenience, Stork has adapter contracts to make it easy to interact with Stork on chain if a contract is already using another oracle and wants to switch or use Stork in parallel.

## EVM

### Chainlink

Stork provides a Chainlink adapter SDK that exposes interface functions for interacting with Stork's contract in the same way you would with Chainlink. This contract can be found in the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/evm/contracts/stork_chainlink_adapter). Example usage of this contract can be found in the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/evm/examples/stork_chainlink_adapter).

### Pyth

Stork provides a Pyth adapter SDK that exposes interface functions for interacting with Stork's in the same way you would with Pyth. This contract can be found in the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/evm/contracts/stork_pyth_adapter). Example usage of this contract can be found in the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/evm/examples/stork_pyth_adapter).

{% hint style="info" %}
Looking for an adapter for your current oracle and/or chain? Contact Stork Labs. <sales@stork.network> or [Twitter DMs](https://twitter.com/StorkOracle) open.
{% endhint %}


# 24/7 Price Feeds

Traditional markets for assets underlying RWA perps open and close on various set schedules. For example, metals and energy commodities are open 23 hours weekdays (closed 5pm-6pm), starting Sunday night at 6pm and ending Friday night at 5pm (excluding holidays).

A single price feed can be constructed by relying primarily on traditional venues during open hours and using some combination of traditional venue closing prices and various non-traditional venues during off hours. Constructing this feed is an opinionated process that changes with use case, risk profile, and other factors. Stork has investigated the pricing algorithms of the major RWA perp exchanges and offers a modular methodology, which can be customized to each user.

## Framework

When traditional markets are closed, Stork's 24/7 oracles do a cutover to a Perpetual Swap Oracle Price Feed. This feed is computed by:

1. Calculating an order book price based on impact prices for multiple constituent perpetual markets.
2. Applying an exponential moving average for flash manipulation resistance (smoothing).
3. Taking a median of the smoothed feeds (venue-level manipulation resistance).
4. Weighting order book impact price divergence vs. the traditional venue close.
5. Applying a cap function on top of the final adjusted price, limiting drift from the traditional market close.

<figure><img src="/files/JHLHMNEYOs5o2G35AL2S" alt=""><figcaption></figcaption></figure>

The oracle listens to multiple constituent venues, calculating an Impact Bid and Impact Ask price for each, and updating a Venue Price for each market, whenever the Impact Bid and Ask differ materially from the current Venue Price.

For each constituent market, the update logic looks like this:

* On the very first deploy, compute the Impact Bid and Impact Ask prices for the configured impact size. Set the initial Venue Price to:

  $$Venue\_{0} = (ImpactBid\_{0} + ImpactAsk\_{0}) / 2$$
* Each time the order book changes, update the Venue Price based on the updated Impact Bid and Impact Ask prices as well as the last Venue Price:
  * $$\text{if } ImpactBid\_{i} > Venue\_{i-1} \text{ then } Venue\_{i} = ImpactBid\_{i}$$
  * $$\text{else if } ImpactAsk\_{i} < Venue\_{i-1} \text{ then } Venue\_{i} = ImpactAsk\_{i}$$
  * $$\text{else } Venue\_{i} = Venue\_{i-1}$$

This process runs 24/7: even when traditional markets are open and Stork is not reporting the perp Venue Prices, perp Venue Prices will update continuously in the background to ensure a previous Venue Price is always available.

Whenever traditional markets are open, each Stork 24/7 feed bypasses these steps, sourcing data directly from traditional markets.

## Off-Hours Venue Selection

For the most liquid markets, Stork Oracle Price data is primarily sourced from a subset of five constituent venues: Binance, Bitget, Hyperliquid, Lighter, and OKX. Other 24/7 RWA perpetual market data is monitored.

Stork also supports integrating with subscriber exchanges' own order books as a source. Custom venue selection is available for exchanges setting up perps on more thinly traded underlying assets.

## Responsiveness

Stork's 24/7 Perpetual Swap Oracle Price Feeds are configurable to be more or less responsive or restrictive, relative to live order book data. Too responsive, and prices may be vulnerable to manipulation on underlying markets. Too restrictive, and prices may ignore market-moving events. Either extreme can contribute to unexpected liquidations.

The following parameters control Oracle Price responsiveness to changes in the constituent order books.

1. Impact Size ($$N$$): a manipulation-resistant alternative to the midpoint price, the live order book Impact Price $$P\_{Impact}$$ is equal to the price at which a given notional size $$N$$ can be executed in the existing order book. A lower $$N$$ heightens the oracle's responsiveness to order book activity.

   $$P\_{impactBid}(N) = \frac{N}{Q\_{bid}(N)}$$

   $$P\_{impactAsk}(N) = \frac{N}{Q\_{ask}(N)}$$
2. EMA Window ($$\tau$$): The oracle applies a time-decay EMA with a configured time constant $$\tau$$ on top of each live order book Impact Price from constituent markets.

   a. On the very first deploy, this value is initialized to the starting Venue Price:

   $$ImpactEMA\_{0} = Venue\_{0}$$

   b. Any time the live order book Impact Price changes after the very first deploy, update the EMA with a decay based on the difference between the time of this update and the time of the previous impact venue change:

   $$\alpha = e^{-(t\_{i} - t\_{i-1})/\tau}$$

   $$VenueEMA\_{i} = \alpha \cdot VenueEMA\_{i-1} + (1 - \alpha) \cdot Venue\_{i}$$

   Shorter windows are more responsive to order book activity; an EMA over any time window improves the price's resistance to manipulation on the underlying market.
3. Traditional Venue Price Weight ($$W$$): A more restrictive oracle sets a greater Traditional Venue Price $$P\_{trad}$$ weight $$W$$, muting Oracle Price $$P\_{oracle}$$ responsiveness to the off-hours Venue Price $$P\_{off\text{-}hours}$$.

   $$P\_{oracle} = W \cdot P\_{trad} + (1 - W) \cdot P\_{off\text{-}hours}$$
4. Deviation Cap ($$C$$): a maximum percent change versus the traditional market close price limits the potential damage of manipulation in underlying markets. The Oracle Price will go flat once it moves more than $$C$$ basis points higher or lower than the traditional market close. Deviation Cap can be set fairly large as a backstop against extreme cases; if real world events occur which cause true large price changes, caps may unfairly increase funding for smart traders.

## A Note on Customization

This modular methodology is built to allow opinionated construction of Oracle Price feeds for various use cases and risk appetites. It is not intended to define a single price for any specific asset. Parameters defined here can be set by each subscriber, based on these considerations.


# First Party

Directly push self-sourced data on-chain with Stork tools.

## What Is It?

Want to run everything in-house? Stork First Party allows anyone to push custom data to a First Party Contract by running Stork tools themselves. With no code and minimal configuration, anyone can easily sign and push their own data on-chain. From there, it becomes publicly readable and verifiable by anyone.

## How It Works

Stork First Party ingests [temporal numeric](/introduction/core-concepts#temporal-numeric-values) data — such as prices, metrics, or analytics — and pushes it on-chain. Each data point is [signed](/introduction/core-concepts#signatures), validated, batched, and stored immutably for downstream consumption. What differentiates First Party from our other offerings is independence. Users can run Stork tools themselves to push data directly on-chain, without relying on Stork Network's live infrastructure.

### Under the Hood

To run First Party Stork, the user must provide their own custom data feed. The user then runs two distinct processes:

1. Publisher Agent
   1. Ingests data from the provided custom data stream via WebSocket
   2. Signs each message with a private key
   3. Forwards signed messages to local First Party Pusher sibling process
2. First Party Pusher
   1. Receives signed updates from Publisher Agent via WebSocket
   2. Pushes signed updates to the configured chain based on customizable staleness and delta thresholds

Finally, the FirstPartyStork Contract verifies the signature, checks if the Publisher's public key is authorized, and stores the temporal numeric values. These values are keyed by the publisher's public key and the Keccak-256 hash of the asset name.

## Get Started

### Running Stork First Party

Stork First Party is an application that bundles the [Publisher Agent](https://github.com/Stork-Oracle/stork-external/blob/main/apps/publisher_agent/README.md) and the First Party Pusher.

Configuration is simple:

* `publisher-config.json`: defines the data source port and where signed data is forwarded
* `pusher-asset-config.yaml`: defines expected assets-publisher pairs and triggers (intervals, % changes)
* `.env`: defines keys, oracle identifiers, and blockchain connection details

An `.env.example` is included for reference.

It is recommended to run Stork First Party via Docker. All components are split into separate services. Docker profiles are included for convenience in the `docker-compose.yml`:

* `first-party`: runs a Publisher and Pusher
* `local`: runs a toy Data Provider, Publisher, Pusher, and local Contract

### Using Stork First Party Data

Stork provides a [Solidity SDK](https://www.npmjs.com/package/@storknetwork/first-party-stork-evm-sdk) for working directly with First Party Contracts. Access to the on-chain data will involve calling `getLatestTemporalNumericValue` with the appropriate publisher and asset information.

*Full chain support documentation coming soon.*

*Expanded contract interaction guide coming soon.*

{% hint style="info" %}
Want to get started with First Party? Push data to a new chain? Learn more?

Email us at <sales@stork.network> or DM us on [X (formerly Twitter)](https://x.com/StorkOracle)
{% endhint %}


# Stork Fast

Ultra high-frequency low-latency oracle

Stork Fast is a best-in-class oracle protocol enabling high-accuracy, high-frequency, low-latency financial data streams. Inheriting primitives and data aggregation techniques established by [Stork Core](/introduction/core-concepts), Fast takes Stork’s battle-tested data feeds and ramps up performance by an order of magnitude, targeting millisecond level frequencies and latency.

A range of parameters, including frequency, as well as payload signature schemes, allow for fine-tuning Fast to suit the needs of any off or on-chain application out of the box, ensuring maximum performance for any specific use-case. Cryptographic verifiability allows for similar trustlessness guarantees as [Core](/introduction/core-concepts#signatures).

Fast is also available as a bespoke oracle, and can be configured to provide specific data feeds with hand-tailored sources and aggregation parameters upon request. For a complete list of currently supported assets, please reach out.

{% hint style="info" %}
Interested in a bespoke Fast instance or custom assets? Contact Stork Labs to configure Fast to meet your requirements. <sales@stork.network> or [X DMs](https://x.com/StorkOracle) open
{% endhint %}

<br>


# Core Concepts

Understanding  Fast-specific primitives and advantages.

Built with backwards compatibility in mind, Fast reuses a number of concepts from [Stork Core.](/introduction/core-concepts) Critically, Fast reuses [Temporal Numeric Values](/introduction/core-concepts#temporal-numeric-values), allowing for existing code integrations - including on-chain contracts - to largely reuse existing code if switching from Core to Fast. The [Push vs Pull Oracles](/introduction/core-concepts#docs-internal-guid-4b312e7b-7fff-1147-c04b-bbaadec1a82a), [Data Aggregation,](/introduction/core-concepts#data-aggregation) and [Prices](/introduction/core-concepts#prices) sections are also all largely relevant to Fast.

## Asset IDs

Asset IDs in Fast are 16-bit unsigned integers acting as an ID for a data feed. They are used throughout Fast to identify data. Bounded size numeric IDs were chosen over text or hex-encoded hashed IDs for efficiency. Due to the extreme frequencies Fast operates at, minimizing data footprint is critical for over-the-wire efficiency, both to and from Fast and to and from any downstream recipients (e.g. an RPC node when submitting data on-chain). Reducing data size is also critical for maximizing memory, computational, and on-chain gas efficiency when working with Fast data.&#x20;

The 16-bit unsigned integer provides an ID space of 0-65536, inclusive. Example Asset IDs are:

* BTC/USD: 1
* JPY/USD: 12001

These are hypothetical examples, For a full list of asset IDs and corresponding encodings, please reach out to Stork.

## Taxonomies

Designed for both general use and bespoke applications, Fast uses Taxonomy to logically separate Asset ID spaces. A Taxonomy is a mapping of assets to Asset IDs (see above) uniquely identified by a numerical Taxonomy ID.  Fast Taxonomy IDs, like Asset IDs, are 16-bit unsigned integers.

Ultimately, in Fast, an asset can be uniquely identified by the (Taxonomy ID, Asset ID) pair. Any given Asset ID may correspond to a different asset on any given Taxonomy,  and thus both are necessary to globally identify an asset within Fast.&#x20;

The benefit of the Taxonomy system is to enable flexible and bespoke use-cases. While 65536 unique Asset IDs is a large space, and has room to spare for traditional asset classes (crypto, equities, RWA, etc..), there are instances where having distinct Asset ID spaces can provide additional flexibility.

## Millisecond Latency&#x20;

Fast is fast. Really Fast. The latency between data entering fast, undergoing aggregation, and being ready for delivery to a subscriber is on the order of 1 millisecond. Even at slower frequencies, when requested by the subscriber, the latency through Fast remains unchanged. Fast continues to aggregate new data to ensure any data delivered has the same latency guarantees regardless of frequency or channel.

## Message Types and Signatures <a href="#docs-internal-guid-8ba37e95-7fff-6e92-1819-f1b365a60d1a" id="docs-internal-guid-8ba37e95-7fff-6e92-1819-f1b365a60d1a"></a>

Fast is capable of packaging the same data in a number of different ways. These are called message types and define the structure and contents of the message. Messages can include fields like:

* signatures for verifiability
* bit-packed payloads for maximum on-chain efficiency
* pricing data in a human-readable message

Message type is determined by the subscriber at subscribe time. This system allows for flexibility when interacting with Fast and ensures subscribers get data as it suits them.

For currently available Message Types, see the Websocket API Documentation.

## Subscription Channels

For data delivery Fast uses websockets and offers multiple channels of two primary types:

* &#x20;Fixed
* &#x20;Real Time

Fixed channels are channels in which updates are pushed out by Fast at fixed intervals. Fixed channels are flexible, and can range down from the millisecond level up to seconds, depending on subscriber needs. Fixed channels are simply named as the period of updates, so the channel for receiving a message every 10ms is called "10ms".

The real time channel, designated "real\_time", is a major efficiency gain in Fast where messages are only sent when new prices are available. Critically, latency guarantees for real time are identical to fixed, meaning real time is strictly more efficient than fixed. Rather than receiving the latest values at a fast fixed interval, where many updates may have duplicated data due to no upstream price movement, real time allows for only receiving new data when it's relevant, without adding any lag time.

<br>


# Websocket API

Listening to Fast data via Websocket

## Base URL <a href="#docs-internal-guid-d4cb22e5-7fff-2fca-bda6-6ebbd048997a" id="docs-internal-guid-d4cb22e5-7fff-2fca-bda6-6ebbd048997a"></a>

The base URL for Fast is dependent on which Fast instance you're using. The URL will be in the form:

```
wss://<fast-identifier>.fast.jp.stork-oracle.network
```

The main instance of fast is:

```
wss://fast.jp.stork-oracle.network
```

## Authentication <a href="#docs-internal-guid-f0db63fb-7fff-3116-d4a7-e3b22d6d2087" id="docs-internal-guid-f0db63fb-7fff-3116-d4a7-e3b22d6d2087"></a>

All WebSocket connection requests must include an Authorization header with the value set as `Basic <token>`. For example, if your token is gmork123:

```bash
wscat -c 'wss://fast.jp.stork-oracle.network/ws' -H "Authorization: Basic gmork123"
```

## Endpoints <a href="#docs-internal-guid-1e5f604e-7fff-dc92-44c2-ff9a56912358" id="docs-internal-guid-1e5f604e-7fff-dc92-44c2-ff9a56912358"></a>

### /ws

#### Description

Subscribe to listen to Stork Fast data streams.

#### Query Parameters

Stork Fast supports a number of query parameters to configure messages coming from Stork Fast.

**Channel**

The `channel` query parameter specifies the channel Fast should send data to you on. Latency does not differ between channels. The following channels are generally available:<br>

* `10ms`: Fixed rate messages every 10ms
* `20ms`:  Fixed rate messages every 20ms
* `50ms`: Fixed rate messages every 50ms
* `100ms`: Fixed rate messages every 100ms
* `500ms`: Fixed rate messages every 500ms
* `1s`: Fixed rate messages every 1s
* `real_time`: Messages only on value change, no faster than 1ms

**Message Type**

The `message_type` query parameter determines the structure of the data coming from Fast. Fast currently supports two message types:<br>

* `unsigned`: An unsigned message type, primarily intended for human readability
* `signed_ecdsa`: A verifiable message type including an ECDSA signature. Comprised of a single bit-packed payload for maximum on-chain efficiency. Not human-readable.

## Messages <a href="#docs-internal-guid-b8749ed2-7fff-8573-9566-41fd1c1d5fbb" id="docs-internal-guid-b8749ed2-7fff-8573-9566-41fd1c1d5fbb"></a>

### Subscribe Message

```json
{
    "type": "subscribe",
    "assets": int[]
}
```

#### Description

Subscribe to receive updates for the specified assets.

**Fields**

* `type`: Type of the message. In this case, `subscribe`
* `assets`: An array of uint16 asset IDs

#### Example

```json
{
    "type": "subscribe",
    "assets": [1,2,10,34]
}
```

### Unsubscribe Message

```json
{
    "type": "usubscribe",
    "assets": int[]
}
```

#### Description

Unsubscribe from updates for a subset of subscribed assets.

#### Fields

* `type`: Type of the message. In this case, `unsubscribe`
* `data`: An array of uint16 asset IDs

#### Example

```json
{
    "type": "unsubscribe",
    "assets": [1,2,10]
}
```

### Unsigned Message

```json
{
    "type": "unsigned",
    "tax": int,
    "ts": int,
    "a": asset_value_pairs[]
}
```

#### Description

An unsigned non-verifiable message type containing human-readable asset updates.

#### Fields

* `type`: Type of the message. In this case, `unsigned`
* `tax`: Taxonomy ID the Fast instance is using
* `ts`: The UNIX nanosecond timestamp for the message
* `a`: An array of asset value pairs in the form of `{"id": int, "v": string}`&#x20;
  * `id`: uint16 asset ID
  * `v`: 10^18 scaled value as a string

#### Example

```json
{
    "type": "unsigned",
    "tax": 1,
    "ts": 1764608698685038908,
    "a": [
        {
            "id": 1,
            "v": "999875000000000069"
        },
        {
            "id": 2,
            "v": "999825006250000036"
        },
        {
            "id": 10,
            "v": "12693413125000001073"
        },
        {
            "id": 34,
            "v": "2739391501743055414408"
        }
    ]
}
```

### Signed ECDSA Message

```json
{
    "type": "signed_ecdsa",
    "p": string
}
```

#### Description

An ECDSA signed verifiable message type containing a bitpacked payload for submission on-chain.

#### Fields

* `type`: Type of the message. In this case, `signed_ecdsa`
* `p`: The bitpacked verifiable payload in the form of a hex string. The first 65 bytes of this payload are the signature

#### Example

```json
{
    "type": "signed_ecdsa",
    "p": "0x435766eac9298f4dcbfe8bdfe46361161d6eeca88f783e3cd215db90c0581cd1511382180840e70bfd43e5382aa4e4c2910aca251ee2c3a5e27d5343fb105556010001187d265fe630404b000100000000000000000de029bae7734fef000200000000000000000ddffc432d25cd5c000a0000000000000000b02db33d2f95811c0022000000000000009480fc8e62b51ff1ac"
}
```


# REST API

## Get FAST Taxonomy

> Get the taxonomy id and the list of assets the authenticated user is\
> authorized to receive. The numeric \`asset\_id\` returned for each asset\
> is scoped to the returned \`taxonomy\_id\`.

```json
{"openapi":"3.0.3","info":{"title":"Stork FAST Distributor API","version":"1.0"},"tags":[{"name":"Taxonomy","description":"Asset taxonomy used to decode FAST messages"}],"servers":[{"url":"https://fast.jp.stork-oracle.network"}],"security":[{"token_auth":[]}],"components":{"securitySchemes":{"token_auth":{"description":"Enter your token in the format of \"Basic your-token\"","type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"TaxonomyResponse":{"type":"object","properties":{"taxonomy_id":{"$ref":"#/components/schemas/TaxonomyID"},"assets":{"type":"array","items":{"$ref":"#/components/schemas/TaxonomyAsset"}}},"required":["taxonomy_id","assets"]},"TaxonomyID":{"type":"integer","format":"int32","minimum":0,"maximum":65535,"description":"Identifier for a FAST taxonomy. Stable for the lifetime of a deployment."},"TaxonomyAsset":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/PriceID"},"asset_id":{"$ref":"#/components/schemas/AssetID"}},"required":["name","asset_id"],"description":"Mapping between a human-readable price id and its numeric asset id within a taxonomy."},"PriceID":{"type":"string","description":"Human-readable price identifier (e.g. `BTCUSD`)."},"AssetID":{"type":"integer","format":"int32","minimum":0,"maximum":65535,"description":"Compact numeric asset id used inside FAST messages."},"ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/v1/taxonomy":{"get":{"tags":["Taxonomy"],"summary":"Get FAST Taxonomy","description":"Get the taxonomy id and the list of assets the authenticated user is\nauthorized to receive. The numeric `asset_id` returned for each asset\nis scoped to the returned `taxonomy_id`.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxonomyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Get Latest Prices

> Get the most recent prices for one or more assets as a FAST message.\
> Assets are identified by their numeric FAST asset ids (scoped to the\
> current taxonomy returned by \`/v1/taxonomy\`). The response is the FAST\
> wire payload encoded as JSON.\
> \
> The \`message\_type\` query parameter selects the wire format:\
> \- \`unsigned\` \*(default)\* — taxonomy, timestamp, and quantized values per asset.\
> \- \`signed\_ecdsa\` — same as \`unsigned\` plus a hex-encoded ECDSA payload (\`p\`)\
> &#x20; covering the assets list, taxonomy id, and timestamp.\
> \
> Quantized values (\`v\`) are decimal strings scaled by 1e18.

```json
{"openapi":"3.0.3","info":{"title":"Stork FAST Distributor API","version":"1.0"},"tags":[{"name":"Prices","description":"Latest FAST price reads"}],"servers":[{"url":"https://fast.jp.stork-oracle.network"}],"security":[{"token_auth":[]}],"components":{"securitySchemes":{"token_auth":{"description":"Enter your token in the format of \"Basic your-token\"","type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"LatestPricesUnsignedResponse":{"type":"object","properties":{"type":{"type":"string","enum":["unsigned"]},"tax":{"$ref":"#/components/schemas/TaxonomyID"},"ts":{"type":"integer","format":"int64","description":"Response timestamp in nanoseconds since the Unix epoch."},"a":{"type":"array","items":{"$ref":"#/components/schemas/LatestPricesAsset"}}},"required":["tax","ts","a"]},"TaxonomyID":{"type":"integer","format":"int32","minimum":0,"maximum":65535,"description":"Identifier for a FAST taxonomy. Stable for the lifetime of a deployment."},"LatestPricesAsset":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/AssetID"},"v":{"type":"string","description":"Quantized price value as a decimal string (scaled by 1e18)."}},"required":["id","v"]},"AssetID":{"type":"integer","format":"int32","minimum":0,"maximum":65535,"description":"Compact numeric asset id used inside FAST messages."},"LatestPricesSignedECDSAResponse":{"type":"object","description":"Signed ECDSA response. The taxonomy id, timestamp, and asset values are\npacked into the binary payload (`p`), not into the outer JSON.","properties":{"type":{"type":"string","enum":["signed_ecdsa"]},"p":{"type":"string","description":"Hex-encoded (0x-prefixed) binary payload covering the ECDSA signature\nand the taxonomy id, timestamp, and assets. Layout:\n65-byte signature + 2-byte taxonomy id + 8-byte timestamp +\nN × (2-byte asset id + 16-byte quantized value)."}},"required":["type","p"]},"ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/v1/prices/latest":{"get":{"tags":["Prices"],"summary":"Get Latest Prices","description":"Get the most recent prices for one or more assets as a FAST message.\nAssets are identified by their numeric FAST asset ids (scoped to the\ncurrent taxonomy returned by `/v1/taxonomy`). The response is the FAST\nwire payload encoded as JSON.\n\nThe `message_type` query parameter selects the wire format:\n- `unsigned` *(default)* — taxonomy, timestamp, and quantized values per asset.\n- `signed_ecdsa` — same as `unsigned` plus a hex-encoded ECDSA payload (`p`)\n  covering the assets list, taxonomy id, and timestamp.\n\nQuantized values (`v`) are decimal strings scaled by 1e18.","parameters":[{"name":"assets","in":"query","description":"Comma-separated list of FAST asset ids to fetch (e.g. `1,2,3`).","required":true,"schema":{"type":"string"}},{"name":"message_type","in":"query","description":"Wire format for the response payload.","required":false,"schema":{"type":"string","enum":["unsigned","signed_ecdsa"],"default":"unsigned"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/LatestPricesUnsignedResponse"},{"$ref":"#/components/schemas/LatestPricesSignedECDSAResponse"}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Get Market Status

> Get the current market status, next market status, and the time of the\
> next status change for a FAST-tracked asset, identified by its numeric\
> FAST asset id.\
> \
> The response is an \*\*unsigned\*\* JSON object with Fast-style short keys:\
> \- \`a\` — the requested FAST asset id\
> \- \`ts\` — request timestamp in nanoseconds\
> \- \`cs\` — current status code\
> \- \`ns\` — next status code\
> \- \`chts\` — timestamp of the next status change in nanoseconds\
> \
> \*\*Status codes:\*\*\
> \| Code | Meaning |\
> \|------|---------|\
> \| 0 | Closed |\
> \| 1 | Regular Hours |\
> \| 2 | Extended Hours |\
> \| 3 | After Hours |\
> \
> Supported asset classes: US equities (e.g. \`AAPL\_24\_5\`, \`TSLA\_24\_5\`),\
> forex pairs (e.g. \`EURUSD\`, \`USDJPY\`), and metals (\`XAUUSD\`, \`XAGUSD\`).

```json
{"openapi":"3.0.3","info":{"title":"Stork FAST Distributor API","version":"1.0"},"tags":[{"name":"Market Status","description":"Market status for FAST-tracked assets"}],"servers":[{"url":"https://fast.jp.stork-oracle.network"}],"security":[{"token_auth":[]}],"components":{"securitySchemes":{"token_auth":{"description":"Enter your token in the format of \"Basic your-token\"","type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"AssetID":{"type":"integer","format":"int32","minimum":0,"maximum":65535,"description":"Compact numeric asset id used inside FAST messages."},"MarketStatusResponse":{"type":"object","properties":{"a":{"$ref":"#/components/schemas/AssetID"},"ts":{"type":"integer","format":"int64","description":"Request timestamp in nanoseconds since the Unix epoch."},"cs":{"$ref":"#/components/schemas/MarketStatusCode"},"ns":{"$ref":"#/components/schemas/MarketStatusCode"},"chts":{"type":"integer","format":"int64","description":"Timestamp of the next status change in nanoseconds since the Unix epoch."}},"required":["a","ts","cs","ns","chts"]},"MarketStatusCode":{"type":"integer","format":"int32","enum":[0,1,2,3],"description":"Market status code:\n* 0 — Closed\n* 1 — Regular Hours\n* 2 — Extended Hours\n* 3 — After Hours"},"ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/v1/market_status":{"get":{"tags":["Market Status"],"summary":"Get Market Status","description":"Get the current market status, next market status, and the time of the\nnext status change for a FAST-tracked asset, identified by its numeric\nFAST asset id.\n\nThe response is an **unsigned** JSON object with Fast-style short keys:\n- `a` — the requested FAST asset id\n- `ts` — request timestamp in nanoseconds\n- `cs` — current status code\n- `ns` — next status code\n- `chts` — timestamp of the next status change in nanoseconds\n\n**Status codes:**\n| Code | Meaning |\n|------|---------|\n| 0 | Closed |\n| 1 | Regular Hours |\n| 2 | Extended Hours |\n| 3 | After Hours |\n\nSupported asset classes: US equities (e.g. `AAPL_24_5`, `TSLA_24_5`),\nforex pairs (e.g. `EURUSD`, `USDJPY`), and metals (`XAUUSD`, `XAGUSD`).","parameters":[{"name":"asset","in":"query","description":"The numeric FAST asset id to get market status for.","required":true,"schema":{"$ref":"#/components/schemas/AssetID"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketStatusResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```


# Contract API

Programming API reference for the Stork Fast EVM contract.

### SDK <a href="#sdk" id="sdk"></a>

EVM contracts can program against the [Stork Fast contract'](https://github.com/Stork-Oracle/stork-external/tree/main/chains/evm/contracts/stork_fast)s interface by using the stork-fast-evm-sdk npm package available on [npmjs.com](https://www.npmjs.com/package/@storknetwork/stork-fast-evm-sdk). This SDK provides an interface and useful struct for interacting with the Stork contract. The Stork contract is built using [Hardhat](https://hardhat.org/).

### Getting Started <a href="#getting-started" id="getting-started"></a>

Solidity

After setting up your Hardhat project, add the stork-fast-evm-sdk to your project dependencies by adding the following line to the `"dependencies"` section of the programs `package.json`

<a class="button secondary">Copy</a>

```json
// package.json
"dependencies": {
    "@storknetwork/stork-fast-evm-sdk": "^1.0.0"
}
```

or with the following command:

<a class="button secondary">Copy</a>

```bash
npm i @storknetwork/stork-fast-evm-sdk
```

You can now import the SDK's interface and types with:

<a class="button secondary">Copy</a>

```solidity
// YourContract.sol
import "@storknetwork/stork-fast-evm-sdk/IStorkFast.sol";
import "@storknetwork/stork-fast-evm-sdk/StorkFastStructs.sol";
```

### Concepts <a href="#concepts" id="concepts"></a>

#### Upgradeability <a href="#upgradeability" id="upgradeability"></a>

The Stork contract is designed to be upgradeable using [OpenZeppelin's proxy pattern](https://docs.openzeppelin.com/contracts/5.x/learn/upgrading-smart-contracts). Ensure the proxy address remains consistent when interacting with the contract to avoid version mismatches.

#### Usage

In contrast to the Stork Core contract, there is no expectation that users store data on the StorkFast contract. Instead, users should verify a stork update as part of the same transaction used in their application, and only proceed if verification is successful.

### Methods <a href="#methods" id="methods"></a>

#### Verify Signed ECDSA Payload <a href="#update-temporal-numeric-values-v1" id="update-temporal-numeric-values-v1"></a>

```solidity
function verifySignedECDSAPayload(
    bytes calldata payload
) external payable returns (bool);
```

**Description**

Receives a stork batch update and returns a `bool` whether the update is verified or not.

**Parameters**

* `payload`: Packed bytes receivable via the StorkFast [websocket](https://docs.stork.network/resources/stork-fast/websocket-api#signed-ecdsa-message).

**Behavior**

* Verifies the signature of the update batch using the stored EVM public key.
* Only requires one signature verification as the entire batch is signed once.
* Requires sufficient fee based on the number of updates.

**Errors**

* `InvalidPayload (``0x7c6953f9)`: If the update itself is malformed.
* `InsufficientFee (0x025dbdd4)`: If the provided fee is less than the required amount.

#### Verify And Deserialize Signed ECDSA Payload

**Description**

Receives a stork batch update and returns deserialized `StorkAssets` if the update is verifiable.

**Parameters**

* `payload`: Packed bytes receivable via the StorkFast [websocket](https://docs.stork.network/resources/stork-fast/websocket-api#signed-ecdsa-message).

**Behavior**

* Same as Verify Signed ECDSA Payload
* Also returns deserialized data, but reverts on verification failure

**Errors**

* `InvalidPayload (0x7c6953f9)`: If the update itself is malformed.
* `InvalidSignature (0x8baa579f)` : If the signature verification failes.
* `InsufficientFee (0x025dbdd4)`: If the provided fee is less than the required amount.

#### Version <a href="#version" id="version"></a>

```solidity
function version() public pure returns (string memory);
```

**Description**

Retrieves the current version of the contract.

**Returns**

* `string`: The version string (e.g., "1.0.0").

### Examples <a href="#examples" id="examples"></a>

An example contract can be found in the the [stork-external github repo](https://github.com/Stork-Oracle/stork-external/tree/main/chains/evm/examples/stork_fast).


# Public Keys

## EVM

### Stork

| Component  | Public Key                                   |
| ---------- | -------------------------------------------- |
| Aggregator | `0x0a803F9b1CCe32e2773e0d2e98b37E0775cA5d44` |

## Stark

The following publishers are active on Stork as of Nov 6, 2022. Note that not all assets may be available from all publishers.

### Publishers

<table><thead><tr><th width="141">Publisher</th><th>Public Key</th></tr></thead><tbody><tr><td>Dexterity Capital</td><td><code>0x2af704df5467285c5d1bd7c08ee33c49057fb2a05ecdc4f949293190f28ce7e</code></td></tr><tr><td>dxFeed</td><td><code>0x63f0f8507cc674ff668985a1ea854d3b73835a8181bfbb4564ae422bf68a2c0</code></td></tr><tr><td>Infstones</td><td><code>0x41dbe627aeab66504b837b3abd88ae2f58ba6d98ee7bbd7f226c4684d9e6225</code></td></tr><tr><td>Stork</td><td><code>0xcc85afe4ca87f9628370c432c447e569a01dc96d160015c8039959db8521c4</code></td></tr></tbody></table>


# FAQ

<details>

<summary>What kind of data can I use with Stork?</summary>

Stork is designed to be used with any data that can be represented as a number and timestamp. For more information on this, please see [Core Concepts](/introduction/core-concepts#temporal-numeric-values).

</details>

<details>

<summary>How can I estimate gas fees for running the Chain Pusher?</summary>

Estimating gas fees for putting data on chain with the Chain Pusher can be difficult. This is due to a couple reasons:

* Gas prices vary chain-to-chain, even Testnet-to-Mainnet of the same chain.
* Gas prices can vary based on block-to-block or epoch-to-epoch network conditions on some chains.

That being said, Stork has written our contracts to be optimized for gas efficiency, so you can be sure the gas to put an update on-chain is the lowest you can get with any oracle.

</details>

<details>

<summary>How does Stork ensure data security and integrity?</summary>

Stork ensures data security and integrity via two methods.

Firstly, Stork uses a series of signatures and verifications to validate that data is always coming from where it says it is, ensuring security. For more information, see [How It Works](/introduction/how-it-works#verifiability).

Secondly, Stork uses multiple decentralized publishers feeding data to the Aggregator, which are then aggregated in a way to protect against errant publishers feeding bad or malicious data. For More information, see [How It Works](/introduction/how-it-works#aggregators).

</details>

<details>

<summary>How often do price feeds update in the Aggregator?</summary>

Stork Aggregators are blazingly fast. Though configurable through the [COS](/introduction/products#composite-oracle-service), Aggregators typically update every 500ms at the slowest, and on the order of sub 10ms at the fastest during periods of high volatility. For more information, see [How It Works.](/introduction/how-it-works#aggregators)

</details>

<details>

<summary>How is Stork decentralized?</summary>

Stork uses a decentralized network of independent publishers that contribute data to Stork. This enables decentralization and protects against pitfalls of a single point of failure.

Stork also supports direct access to publisher data in the unlikely event of downtime. For details, please reach out to <sales@stork.network>.

For more information, see [How It Works](/introduction/how-it-works#publishers).

</details>


