The Solana Write Capability

The Solana Write capability lets your CRE workflow submit cryptographically signed reports to Solana programs. Your workflow calls a single method while the underlying Decentralized Oracle Network (DON) handles consensus, report signing, and onchain submission through the Keystone Forwarder program.

How it works

The Solana Write capability shares the same conceptual model as EVM Write: your workflow generates a signed report, and the DON submits it to a Keystone Forwarder program onchain. The forwarder verifies the oracle signatures, then cross-program invokes (CPI) your receiver program's on_report instruction.

The secure write flow

  1. Payload encoding: Your workflow Borsh-encodes the data to deliver and wraps it in a ForwarderReport struct containing an account hash.
  2. Report generation: runtime.report() signs the encoded payload using the solana encoder (ecdsa + keccak256).
  3. DON consensus: Multiple DON nodes independently validate the report before any onchain submission.
  4. Forwarder submission: A DON node calls the Keystone Forwarder program with the signed report and the required accounts.
  5. Delivery to your program: The forwarder verifies the signatures and CPIs into your receiver program's on_report instruction.

Account layout

Every Solana write request includes a remainingAccounts list. The Keystone Forwarder expects accounts in the following order:

IndexAccountWritableDescription
0forwarderStateNoThe Keystone Forwarder's onchain state account
1forwarderAuthorityNoPDA derived from ["forwarder", forwarderState, receiverProgram] under the forwarder program ID
2+Receiver accountsAs neededAccounts your program's on_report instruction requires

The public keys of all accounts in this list are concatenated and SHA-256 hashed to produce the accountHash field in the report. The forwarder strips indices 0–1 before CPIing into your receiver, so they must be present and in the correct positions.

Key features

  • DON consensus: Reports are signed by multiple oracle nodes before submission.
  • Borsh encoding: Payloads use Borsh, the standard serialization format for Solana programs.
  • Type-safe bindings: The CLI binding generator creates typed writeReportFrom<StructName>() helpers from your Anchor IDL.
  • Configurable compute budget: Override the default 290,000 compute unit limit via ComputeConfig.
  • Chain selector support: Target Solana Mainnet or Devnet using Chainlink's chain selector system.

Learn more

Get the latest Chainlink content straight to your inbox.