Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions src/config/sidebar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,32 @@ export const SIDEBAR: Partial<Record<Sections, SectionEntry[]>> = {
},
],
},
{
title: "Solana Chain Interactions",
url: "cre/guides/workflow/using-solana-client/overview",
highlightAsCurrent: [
"cre/guides/workflow/using-solana-client/overview-ts",
"cre/guides/workflow/using-solana-client/overview-go",
],
children: [
{
title: "Generating Bindings",
url: "cre/guides/workflow/using-solana-client/generating-bindings",
highlightAsCurrent: [
"cre/guides/workflow/using-solana-client/generating-bindings-ts",
"cre/guides/workflow/using-solana-client/generating-bindings-go",
],
},
{
title: "Onchain Write",
url: "cre/guides/workflow/using-solana-client/onchain-write",
highlightAsCurrent: [
"cre/guides/workflow/using-solana-client/onchain-write-ts",
"cre/guides/workflow/using-solana-client/onchain-write-go",
],
},
],
},
{
title: "API Interactions",
url: "cre/guides/workflow/using-http-client",
Expand Down Expand Up @@ -572,6 +598,7 @@ export const SIDEBAR: Partial<Record<Sections, SectionEntry[]>> = {
highlightAsCurrent: ["cre/capabilities/confidential-http-ts", "cre/capabilities/confidential-http-go"],
},
{ title: "EVM Read & Write", url: "cre/capabilities/evm-read-write" },
{ title: "Solana Write", url: "cre/capabilities/solana-write" },
],
},
{
Expand Down Expand Up @@ -692,6 +719,11 @@ export const SIDEBAR: Partial<Record<Sections, SectionEntry[]>> = {
url: "cre/reference/sdk/evm-client",
highlightAsCurrent: ["cre/reference/sdk/evm-client-ts", "cre/reference/sdk/evm-client-go"],
},
{
title: "Solana Client",
url: "cre/reference/sdk/solana-client",
highlightAsCurrent: ["cre/reference/sdk/solana-client-ts", "cre/reference/sdk/solana-client-go"],
},
{
title: "HTTP Client",
url: "cre/reference/sdk/http-client",
Expand Down
16 changes: 14 additions & 2 deletions src/content/cre/capabilities/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,18 @@ Each capability is powered by its own independent Decentralized Oracle Network (

## Invoking Capabilities via the SDK

As a developer, you do not interact with these capability DONs directly. Instead, you invoke them through the developer-friendly interfaces provided by the **CRE SDKs** ([Go](/cre/reference/sdk/core-go) and [TypeScript](/cre/reference/sdk/core-ts)), such as the [`evm.Client`](/cre/reference/sdk/evm-client) or the [`http.Client`](/cre/reference/sdk/http-client). The SDK handles the low-level complexity of communicating with the correct DON and processing the consensus-verified result, allowing you to focus on your business logic.
As a developer, you do not interact with these capability DONs directly. Instead, you invoke them through the developer-friendly interfaces provided by the **CRE SDKs** ([Go](/cre/reference/sdk/core-go) and [TypeScript](/cre/reference/sdk/core-ts)), such as the [`evm.Client`](/cre/reference/sdk/evm-client), the [`solana.Client`](/cre/reference/sdk/solana-client), or the [`http.Client`](/cre/reference/sdk/http-client). The SDK handles the low-level complexity of communicating with the correct DON and processing the consensus-verified result, allowing you to focus on your business logic.

## Chain Families

CRE supports blockchain capabilities across multiple **chain families** — groups of networks that share the same virtual machine, serialization format, and address encoding. The chain family determines which SDK client you use and how payloads are encoded.

| Chain Family | Networks | SDK Client | Payload Encoding |
| ------------ | ------------------------------------------------------------------ | -------------------------------- | ------------------------ |
| EVM | Ethereum, Base, Arbitrum, and [many more](/cre/supported-networks) | `EVMClient` / `evm.Client` | ABI (viem / go-ethereum) |
| Solana | Solana Mainnet, Solana Devnet | `SolanaClient` / `solana.Client` | Borsh |

Additional chain families may be added in future releases.

## Available Capabilities

Expand All @@ -32,5 +43,6 @@ This section provides a high-level, conceptual overview of the capabilities curr
- **[HTTP](/cre/capabilities/http)**: Fetch and post data from external APIs with decentralized consensus.
- **[Confidential HTTP](/cre/capabilities/confidential-http)**: Make privacy-preserving API calls with enclave execution, secret injection, and optional response encryption.
- **[EVM Read & Write](/cre/capabilities/evm-read-write)**: Interact with smart contracts on EVM-compatible blockchains with decentralized consensus.
- **[Solana Write](/cre/capabilities/solana-write)**: Write verified workflow results to Solana programs via the Keystone Forwarder.

All execution capabilities (HTTP, Confidential HTTP, EVM) automatically use [built-in consensus](/cre/concepts/consensus-computing) to validate results across multiple nodes, ensuring security and reliability.
All execution capabilities automatically use [built-in consensus](/cre/concepts/consensus-computing) to validate results across multiple nodes, ensuring security and reliability.
59 changes: 59 additions & 0 deletions src/content/cre/capabilities/solana-write.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
section: cre
title: "The Solana Write Capability"
date: Last Modified
metadata:
description: "CRE Solana Write capability: write verified workflow results to Solana programs with built-in DON consensus and cryptographic verification."
datePublished: "2026-07-06"
lastModified: "2026-07-06"
---

import { Aside } from "@components"

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](/cre/capabilities/evm-read-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:

| Index | Account | Writable | Description |
| ----- | -------------------- | --------- | ------------------------------------------------------------------------------------------------ |
| 0 | `forwarderState` | No | The Keystone Forwarder's onchain state account |
| 1 | `forwarderAuthority` | No | PDA derived from `["forwarder", forwarderState, receiverProgram]` under the forwarder program ID |
| 2+ | Receiver accounts | As needed | Accounts 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.

<Aside type="note" title="Simulation support">
Write simulation (`--broadcast` flag) is available in the CLI. Simulation without broadcast performs a dry run and
validates the payload encoding. Full simulation with `--broadcast` submits a real transaction.

{/* TODO: Update when Solana devnet target is fully supported in the simulator */}

</Aside>

## Learn more

- **[Solana Chain Interactions Guide](/cre/guides/workflow/using-solana-client/overview)**: Learn how to write data to Solana programs using the `SolanaClient`
- **[Solana Client SDK Reference](/cre/reference/sdk/solana-client)**: Detailed API reference for `SolanaClient` and helper functions
- **[Supported Networks](/cre/supported-networks)**: Chain selector values and minimum SDK versions for Solana networks
Loading
Loading