Deploy Feed

How deployment works across Solana/SVM and EVM, and what "deploying a feed" actually means per chain.

“Deploying” a Switchboard feed means different things depending on the chain:

  • Solana/SVM: you create a real on-chain PullFeed account (an address) that references your feed definition and can be updated by oracle signatures.

  • EVM: feeds are identified by a deterministic bytes32 ID (derived from the job definition + queue). You generally do not create a dedicated on-chain “feed account”; instead, you submit oracle-signed updates to the Switchboard contract and read the latest update from storage.

This guide covers both paths and explains why Switchboard’s docs historically focused on Solana deployment: Solana requires an explicit on-chain initialization transaction, whereas EVM is closer to “publish + integrate + update”.


Prerequisites (all chains)

Before “deployment”, you should have:

  • a feed definition (jobs + tasks) you have simulated successfully

  • a clear understanding of:

    • what value your feed returns

    • decimal conventions (e.g., 1e8 vs 1e18)

    • which sources/jobs you trust and why

If you haven't designed and simulated your jobs yet, start here:


Solana / SVM: Deploy a PullFeed account

What you are doing

On Solana, deployment means:

  1. Choose a queue (oracle subnet).

  2. Optionally store/pin your job definition so it’s discoverable.

  3. Create a new PullFeed account on-chain and configure it with:

    • feed hash (the definition)

    • variance/quorum/staleness rules

    • authority and metadata

Requirements

  • A funded Solana keypair file (payer)

  • A Solana RPC URL

  • Your OracleJob[] definition

Create a keypair file if you don’t have one:

Install

Deployment flow (TypeScript)

Below is the canonical deployment flow as a single script outline. You can merge this into the same project where you built/simulated your jobs.

Choosing validation parameters

  • minResponses: raise this if you want stronger quorum guarantees.

  • maxVariance: lower this if you want tighter agreement across job outputs.

  • maxStalenessSlots: raise this if you can tolerate older data; lower it for strict freshness.

  • minSampleSize: determines how many samples are considered when reading.

If you’re coming from the UI, these correspond to the same concepts (Min Responses, Max Variance, Sample Size, Max Staleness).

Make it discoverable

Storing with Crossbar pins the feed definition to IPFS and makes it easier to view/debug in the Switchboard explorer.


EVM: “Deploying” is publishing a feed ID + updating via the Switchboard contract

Why there isn’t a dedicated “deploy feed” step on EVM

On EVM, a feed is identified by a deterministic bytes32 feed ID. You can treat deployment as:

  1. Obtain the feed ID (often from the Feed Builder / Explorer).

  2. Store that feed ID in your consumer contract or app.

  3. Fetch oracle-signed updates off-chain.

  4. Submit updates on-chain via updateFeeds.

There is no per-feed “account creation” transaction analogous to Solana’s PullFeed init.

On-chain: reading and updating

A typical Solidity integration looks like:

  • Store the Switchboard contract address + your feedId

  • When you need fresh data:

    • compute the required fee

    • submit updateFeeds(updates)

    • read latestUpdate(feedId)

Many feeds use int128 scaled by 1e18 to avoid floating point issues. Always consult the feed’s intended decimal convention.

Off-chain: fetch encoded updates with Crossbar (TypeScript)

Use Crossbar to fetch oracle-signed updates (encoded) for submission:


Do we need “deployment docs” for other chains?

Switchboard supports additional chains with chain-specific SDKs and verification flows (e.g., Move-based environments). Many of these integrations follow the EVM-style model: you fetch oracle consensus off-chain and include a verification/update step inside your transaction, rather than creating a dedicated on-chain “feed account”.

If you’re targeting a non-Solana chain, treat “deployment” as:

  1. Create/publish a feed definition and get its feed ID/address.

  2. Use the chain’s SDK to fetch and verify oracle results in your transaction flow.

Last updated