Skip to content

Switchboard PullFeed Devnet Bug #183

@0xNike

Description

@0xNike

We are working on Streamflow Aligned Stream Programs which involves Price Oracles like Switchboard.
We are experiencing a critical bug when trying to update a PullFeed on Solana devnet. The fetchUpdateIx() method returns malformed instructions where the System Program is incorrectly marked as a signer, causing all update transactions to fail with "signature verification failure".

Environment

Network: Solana Devnet
SDK Version: @switchboard-xyz/on-demand (latest via npm)
Queue: EYiAmGSdsQTuCw413V5BzaruWuCCSDgTPtBGvLkXHbe7 (default devnet queue)
Gateway: https://141.94.193.169.xip.switchboard-oracles.xyz/devnet
Feed Pubkey: 8XUZByvSgBbnCzXNba6uRHrcFvAVLnCugnpxHBjpRh8w
FeedHash: 0x1e29fc0c8d15e8d0f569a53ed2aed6fed968098735ecd389b2a7f1a895a736be

What Works ✅

Feed Creation: Successfully created PullFeed on-chain
Job Storage: Successfully stored job on IPFS via crossbar.store()
Simulation: Job simulates correctly and returns expected price

Simulation Result: {"feedHash":"direct","results":["0.0003062499999997703125000002"]}
Price: 0.000306 SOL per token ✅

What Fails ❌
When calling fetchUpdateIx(), the returned instructions have incorrect account metadata.
Code Used
typescriptconst [updateIxs, responses, numSuccess, luts] = await pullFeed.fetchUpdateIx({
gateway: gatewayUrl,
crossbarClient: crossbar,
numSignatures: 1,
network: "devnet",
});
Debug Output - Instruction Accounts
Instruction 0 (Secp256k1):
Program: KeccakSecp256k11111111111111111111111111111
Accounts: 0

Instruction 1 (Switchboard Update):
Program: Aio4gaXjXzJNVLtzwtNVmSqGKpANtXhybbkhtAC94ji2
Accounts (12):
0: EYiAmGSdsQTuCw413V5BzaruWuCCSDgTPtBGvLkXHbe7 📖 READ-ONLY (Queue)
1: 4UFmCebEmzESoDTtHrmaftXj7YAsAH4HMios3yMWyVUT 📖 READ-ONLY
2: SysvarS1otHashes111111111111111111111111111 📖 READ-ONLY
3: 11111111111111111111111111111111 ✏️ WRITABLE 🔑 SIGNER ← BUG!
4: 11111111111111111111111111111111 📖 READ-ONLY
5: GDTsjg7yNCimJW5MuCe2nrwrzQcpyKNMZg1514bq4eqq ✏️ WRITABLE
6: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA 📖 READ-ONLY
7: So11111111111111111111111111111111111111112 📖 READ-ONLY
8: Sysvar1nstructions1111111111111111111111111 📖 READ-ONLY
9: 8XUZByvSgBbnCzXNba6uRHrcFvAVLnCugnpxHBjpRh8w ✏️ WRITABLE (Feed)
10: EqT5yWVWxuMdyqTToAobhAhBt7oWq2Wam9c4gTvYdjmq 📖 READ-ONLY
11: DdaoyaZTBec1DEWFFHEBiDsrNXud3HmKUcFNzcQ7YPCx ✏️ WRITABLE
The Problem
Account index 3 is the System Program (111...111) marked as isSigner: true.
This is impossible - the System Program cannot sign transactions. Additionally, our payer wallet (CVEZVjm43zN8iETF5JCQwVx1mBaCETpL2eGEo22e9fQr) is not present in the instruction accounts at all.
Error Message
Error: Simulation failed.
Message: Transaction signature verification failure.

Steps to Reproduce

Create a PullFeed with a custom job (httpTask querying Solana RPC for vault balances)
Store the job using crossbar.store(queue, jobs)
Initialize the feed on-chain with pullFeed.initIx()
Attempt to update using pullFeed.fetchUpdateIx()
Build transaction with sb.asV0Tx() or manual Transaction construction
Send transaction → Fails with signature verification error

Questions

Is this a known devnet gateway issue? Will mainnet have the same problem?
Is there a workaround? Can we manually fix the instruction accounts before sending?
Are there SDK version requirements? Should we use a specific version of @switchboard-xyz/on-demand?
Alternative approach? Should we use Managed Feeds or Switchboard Surge instead of PullFeed for custom price feeds? -- If Yes, could you help establish communications with Streamflow Finance? They are using this deprecated approach

Contact
We're happy to provide additional logs, test with specific SDK versions, or help debug further. This is blocking our integration with Streamflow's price-based vesting feature.
Thank you!
h

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions