Skip to content

Commit 2d3a621

Browse files
authored
Data Streams: Verifier Address Table + Supported Networks update (#3141)
* update table and feedlist to support accordian streams verifier table * update stream pages to default collapsed verifier table * update supported network page to show verifier address table, reflecting all supported networks * lint fix * reword * styling updates * table pagination update * refactor, make reusable for any table * ai-llm-gen * more styling changes * more styling changes * undo extra llm gen * fix warnings
1 parent dd0d4a3 commit 2d3a621

File tree

13 files changed

+433
-133
lines changed

13 files changed

+433
-133
lines changed

reports/llms-report.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"startedAt": "2025-11-05T17:13:26.623Z",
2+
"startedAt": "2025-11-07T22:17:19.661Z",
33
"siteBase": "https://docs.chain.link",
44
"sections": [
55
{
@@ -46,9 +46,9 @@
4646
"section": "data-streams",
4747
"pagesProcessed": 52,
4848
"outputPath": "src/content/data-streams/llms-full.txt",
49-
"bytes": 468050,
49+
"bytes": 467697,
5050
"prevBytes": 468050,
51-
"deltaBytes": 0
51+
"deltaBytes": -353
5252
},
5353
{
5454
"section": "dta-technical-standard",
@@ -63,8 +63,8 @@
6363
"pagesProcessed": 20,
6464
"outputPath": "src/content/datalink/llms-full.txt",
6565
"bytes": 136632,
66-
"prevBytes": 134572,
67-
"deltaBytes": 2060
66+
"prevBytes": 136632,
67+
"deltaBytes": 0
6868
},
6969
{
7070
"section": "chainlink-functions",
@@ -123,5 +123,5 @@
123123
"deltaBytes": 0
124124
}
125125
],
126-
"finishedAt": "2025-11-05T17:13:29.977Z"
126+
"finishedAt": "2025-11-07T22:17:22.917Z"
127127
}

src/content/data-streams/backed-streams/index.mdx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,9 @@ isIndex: true
1111

1212
import FeedPage from "@features/feeds/components/FeedPage.astro"
1313

14-
<FeedPage dataFeedType="streamsBacked" initialNetwork="arbitrum" />
14+
<FeedPage
15+
dataFeedType="streamsBacked"
16+
initialNetwork="arbitrum"
17+
allowNetworkTableExpansion={true}
18+
defaultNetworkTableExpanded={false}
19+
/>

src/content/data-streams/crypto-streams/index.mdx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,9 @@ isIndex: true
1111

1212
import FeedPage from "@features/feeds/components/FeedPage.astro"
1313

14-
<FeedPage dataFeedType="streamsCrypto" initialNetwork="arbitrum" />
14+
<FeedPage
15+
dataFeedType="streamsCrypto"
16+
initialNetwork="arbitrum"
17+
allowNetworkTableExpansion={true}
18+
defaultNetworkTableExpanded={false}
19+
/>

src/content/data-streams/exchange-rate-streams/index.mdx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,9 @@ isIndex: true
1111

1212
import FeedPage from "@features/feeds/components/FeedPage.astro"
1313

14-
<FeedPage dataFeedType="streamsExRate" initialNetwork="arbitrum" />
14+
<FeedPage
15+
dataFeedType="streamsExRate"
16+
initialNetwork="arbitrum"
17+
allowNetworkTableExpansion={true}
18+
defaultNetworkTableExpanded={false}
19+
/>

src/content/data-streams/llms-full.txt

Lines changed: 30 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ Automatic failover handles availability and traffic routing in the following sce
114114
# Data Streams Backed xStock streams
115115
Source: https://docs.chain.link/data-streams/backed-streams
116116

117-
<FeedPage dataFeedType="streamsBacked" initialNetwork="arbitrum" />
117+
<FeedPage dataFeedType="streamsBacked" initialNetwork="arbitrum" allowNetworkTableExpansion={true} defaultNetworkTableExpanded={false} />
118118

119119
---
120120

@@ -578,7 +578,7 @@ In these examples, Liquidity-Weighted Bid and Ask prices, along with the spread
578578
# Data Streams Crypto streams
579579
Source: https://docs.chain.link/data-streams/crypto-streams
580580

581-
<FeedPage dataFeedType="streamsCrypto" initialNetwork="arbitrum" />
581+
<FeedPage dataFeedType="streamsCrypto" initialNetwork="arbitrum" allowNetworkTableExpansion={true} defaultNetworkTableExpanded={false} />
582582

583583
---
584584

@@ -682,7 +682,7 @@ Developers are responsible for understanding and managing all additional risk fa
682682
# Data Streams Exchange Rate streams
683683
Source: https://docs.chain.link/data-streams/exchange-rate-streams
684684

685-
<FeedPage dataFeedType="streamsExRate" initialNetwork="arbitrum" />
685+
<FeedPage dataFeedType="streamsExRate" initialNetwork="arbitrum" allowNetworkTableExpansion={true} defaultNetworkTableExpanded={false} />
686686

687687
---
688688

@@ -822,7 +822,7 @@ For comprehensive guidance on managing risks related to market hours, market gap
822822
# Data Streams Net Asset Value streams
823823
Source: https://docs.chain.link/data-streams/nav-streams
824824

825-
<FeedPage dataFeedType="streamsNav" initialNetwork="arbitrum" />
825+
<FeedPage dataFeedType="streamsNav" initialNetwork="arbitrum" allowNetworkTableExpansion={true} defaultNetworkTableExpanded={false} />
826826

827827
---
828828

@@ -5310,7 +5310,7 @@ Chainlink NAV Data Streams streams adhere to the report schema outlined below.
53105310
# Data Streams Real World Asset streams
53115311
Source: https://docs.chain.link/data-streams/rwa-streams
53125312

5313-
<FeedPage dataFeedType="streamsRwa" initialNetwork="arbitrum" />
5313+
<FeedPage dataFeedType="streamsRwa" initialNetwork="arbitrum" allowNetworkTableExpansion={true} defaultNetworkTableExpanded={false} />
53145314

53155315
---
53165316

@@ -5366,14 +5366,11 @@ Source: https://docs.chain.link/data-streams/supported-networks
53665366

53675367
Chainlink Data Streams provides data access directly via API or WebSocket for offchain use cases. It involves [verifying report integrity](/data-streams/tutorials/evm-onchain-report-verification) against onchain verifier proxy contracts.
53685368

5369-
Data Streams is available on any network listed on the following pages, where you can find the necessary Verifier Proxy addresses:
5370-
5371-
- [Cryptocurrency Streams](/data-streams/crypto-streams)
5372-
- [Real World Asset (RWA) Streams](/data-streams/rwa-streams)
5369+
The table below lists all networks supported by Data Streams, each with verifier proxy contracts deployed for onchain report verification. All [Data Streams report types](/data-streams/reference/report-schema-overview) share these verifier addresses across supported networks. Click any verifier proxy address to view the contract in the block explorer.
53735370

53745371
## Streams Trade implementation (Onchain Lookup)
53755372

5376-
Streams Trade, the alternative implementation, allows smart contracts to access Data Streams onchain using the [`StreamsLookup`](/data-streams/getting-started) capability integrated with [Chainlink Automation](/chainlink-automation).
5373+
[Streams Trade](streams-trade), the alternative implementation, allows smart contracts to access Data Streams onchain using the [`StreamsLookup`](/data-streams/getting-started) capability integrated with [Chainlink Automation](/chainlink-automation).
53775374

53785375
Streams Trade is currently available on the following networks:
53795376

@@ -7704,11 +7701,13 @@ Before you begin, you should have:
77047701

77057702
To complete this tutorial, you'll need:
77067703

7707-
- **Rust and Cargo**: Install the latest version using [rustup](https://rustup.rs/). Run rustc --version to verify your installation.
7704+
- **Rust and Cargo**: Install Rust 1.79.0 or later using [rustup](https://rustup.rs/). Run rustc --version to verify your installation.
77087705

7709-
- **Solana CLI tools**: Install the latest version following the [official guide](https://docs.solana.com/cli/install-solana-cli-tools). Run solana --version to verify your installation.
7706+
- **Solana CLI tools**: Install Solana CLI 2.0 or later following the [official guide](https://docs.solana.com/cli/install-solana-cli-tools). Run solana --version to verify your installation.
77107707

7711-
- **Anchor Framework**: Follow the [official installation guide](https://www.anchor-lang.com/docs/installation). Run anchor --version to verify your installation.
7708+
- **Anchor Framework**: Install Anchor 0.31.0 or later following the [official installation guide](https://www.anchor-lang.com/docs/installation). Run anchor --version to verify your installation.
7709+
7710+
**Important**: Using mismatched Anchor versions between your program and client can cause type incompatibilities and runtime errors.
77127711

77137712
- **Node.js and npm**: [Install Node.js 20 or later](https://nodejs.org/). Verify your installation with node --version.
77147713

@@ -7768,11 +7767,9 @@ In your program's manifest file (`programs/example_verify/Cargo.toml`), add the
77687767

77697768
```toml
77707769
[dependencies]
7771-
chainlink_solana_data_streams = { git = "https://github.com/smartcontractkit/chainlink-solana", branch = "develop", subdir = "contracts/crates/chainlink-solana-data-streams" }
7772-
data-streams-report = { git = "https://github.com/smartcontractkit/data-streams-sdk.git", subdir = "rust/crates/report" }
7773-
7774-
# Additional required dependencies
7775-
anchor-lang = "0.29.0"
7770+
anchor-lang = "0.31.0"
7771+
chainlink_solana_data_streams = { git = "https://github.com/smartcontractkit/chainlink-data-streams-solana" }
7772+
chainlink-data-streams-report = "1.0.3"
77767773
```
77777774

77787775
#### 4. Write the program
@@ -7788,7 +7785,7 @@ use anchor_lang::solana_program::{
77887785
instruction::Instruction,
77897786
};
77907787
// NOTE: Adjust for your report version
7791-
use data_streams_report::report::v3::ReportDataV3;
7788+
use chainlink_data_streams_report::report::v3::ReportDataV3;
77927789
use chainlink_solana_data_streams::VerifierInstructions;
77937790

77947791

@@ -7898,27 +7895,13 @@ Note how the `VerifierInstructions::verify` helper method automatically handles
78987895

78997896
#### 5. Deploy your program
79007897

7901-
1. Run the following command to build your program:
7898+
1. Build your program:
79027899

79037900
```bash
79047901
anchor build
79057902
```
79067903

7907-
**Note**: If you run into this error, set the `version` field at the top of your `cargo.lock` file to `3`.
7908-
7909-
```bash
7910-
warning: virtual workspace defaulting to `resolver = "1"` despite one or more workspace members being on edition 2021 which implies `resolver = "2"`
7911-
note: to keep the current resolver, specify `workspace.resolver = "1"` in the workspace root's manifest
7912-
note: to use the edition 2021 resolver, specify `workspace.resolver = "2"` in the workspace root's manifest
7913-
note: for more details see https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions
7914-
warning: .../example_verify/programs/example_verify/Cargo.toml: unused manifest key: dependencies.data-streams-report.subdir
7915-
error: failed to parse lock file at: .../example_verify/Cargo.lock
7916-
7917-
Caused by:
7918-
lock file version 4 requires `-Znext-lockfile-bump`
7919-
```
7920-
7921-
2. Deploy your program to a Solana cluster (devnet in this example) using:
7904+
2. Deploy your program to devnet:
79227905

79237906
```bash
79247907
anchor deploy
@@ -7965,11 +7948,7 @@ In this section, you'll write a client script to interact with your deployed pro
79657948
anchor.setProvider(provider)
79667949

79677950
// Initialize your program using the IDL and your program ID
7968-
const program = new Program<ExampleVerify>(
7969-
require("../target/idl/example_verify.json"),
7970-
"<YOUR_PROGRAM_ID>",
7971-
provider
7972-
)
7951+
const program = new Program<ExampleVerify>(require("../target/idl/example_verify.json"), provider)
79737952

79747953
// Convert the hex string to a Uint8Array
79757954
// This is an example report payload for a crypto stream
@@ -8079,7 +8058,14 @@ In this section, you'll write a client script to interact with your deployed pro
80798058
yarn add snappy
80808059
```
80818060

8082-
`snappy` is a compression library that is used to compress the report data.
8061+
Also ensure you have the required TypeScript dependencies:
8062+
8063+
```bash
8064+
yarn add @solana/web3.js
8065+
yarn add -D ts-node typescript @types/node
8066+
```
8067+
8068+
**Note**: `snappy` is a compression library used to compress the report data before sending it to the verifier.
80838069

80848070
4. Execute the test script to interact with your program:
80858071

@@ -8119,7 +8105,7 @@ In this section, you'll write a client script to interact with your deployed pro
81198105

81208106
#### Program Derived Addresses (PDAs)
81218107

8122-
The verification process relies on two important PDAs that are handled automatically by the [Chainlink Data Streams Solana SDK](https://github.com/smartcontractkit/chainlink-solana/tree/develop/contracts/crates/chainlink-solana-data-streams):
8108+
The verification process relies on two important PDAs that are handled automatically by the [Chainlink Data Streams Solana SDK](https://github.com/smartcontractkit/chainlink-data-streams-solana):
81238109

81248110
- **Verifier config account PDA**:
81258111
- Derived using the verifier program ID as a seed
@@ -8158,13 +8144,13 @@ When working with different versions of [Data Stream reports](/data-streams/refe
81588144
- For v3 schema (as used in this example):
81598145

81608146
```rust
8161-
use data_streams_report::report::v3::ReportDataV3;
8147+
use chainlink_data_streams_report::report::v3::ReportDataV3;
81628148
```
81638149

81648150
- For v8 schema:
81658151

81668152
```rust
8167-
use data_streams_report::report::v8::ReportDataV8;
8153+
use chainlink_data_streams_report::report::v8::ReportDataV8;
81688154
```
81698155

81708156
2. **Update the decode function to use the correct schema version.** Examples:

src/content/data-streams/nav-streams/index.mdx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,9 @@ isIndex: true
1111

1212
import FeedPage from "@features/feeds/components/FeedPage.astro"
1313

14-
<FeedPage dataFeedType="streamsNav" initialNetwork="arbitrum" />
14+
<FeedPage
15+
dataFeedType="streamsNav"
16+
initialNetwork="arbitrum"
17+
allowNetworkTableExpansion={true}
18+
defaultNetworkTableExpanded={false}
19+
/>

src/content/data-streams/rwa-streams/index.mdx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,9 @@ isIndex: true
1111

1212
import FeedPage from "@features/feeds/components/FeedPage.astro"
1313

14-
<FeedPage dataFeedType="streamsRwa" initialNetwork="arbitrum" />
14+
<FeedPage
15+
dataFeedType="streamsRwa"
16+
initialNetwork="arbitrum"
17+
allowNetworkTableExpansion={true}
18+
defaultNetworkTableExpanded={false}
19+
/>

src/content/data-streams/supported-networks.mdx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,22 @@ metadata:
88
---
99

1010
import DataStreams from "@features/data-streams/common/DataStreams.astro"
11+
import { StreamsNetworkAddressesTable } from "@features/feeds/components/Tables"
12+
import SectionWrapper from "~/components/SectionWrapper/SectionWrapper.tsx"
1113

1214
<DataStreams section="dsNotes" />
1315

1416
Chainlink Data Streams provides data access directly via API or WebSocket for offchain use cases. It involves [verifying report integrity](/data-streams/tutorials/evm-onchain-report-verification) against onchain verifier proxy contracts.
1517

16-
Data Streams is available on any network listed on the following pages, where you can find the necessary Verifier Proxy addresses:
18+
The table below lists all networks supported by Data Streams, each with verifier proxy contracts deployed for onchain report verification. All [Data Streams report types](/data-streams/reference/report-schema-overview) share these verifier addresses across supported networks. Click any verifier proxy address to view the contract in the block explorer.
1719

18-
- [Cryptocurrency Streams](/data-streams/crypto-streams)
19-
- [Real World Asset (RWA) Streams](/data-streams/rwa-streams)
20+
<SectionWrapper title="Streams Verifier Network Addresses" depth={2} client:idle>
21+
<StreamsNetworkAddressesTable client:idle allowExpansion={false} />
22+
</SectionWrapper>
2023

2124
## Streams Trade implementation (Onchain Lookup)
2225

23-
Streams Trade, the alternative implementation, allows smart contracts to access Data Streams onchain using the [`StreamsLookup`](/data-streams/getting-started) capability integrated with [Chainlink Automation](/chainlink-automation).
26+
[Streams Trade](streams-trade), the alternative implementation, allows smart contracts to access Data Streams onchain using the [`StreamsLookup`](/data-streams/getting-started) capability integrated with [Chainlink Automation](/chainlink-automation).
2427

2528
Streams Trade is currently available on the following networks:
2629

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/** @jsxImportSource preact */
2+
3+
/**
4+
* ExpandableTableWrapper - Internal component for making tables collapsible
5+
*
6+
* DEFAULT BEHAVIOR: Content is always visible with no header (allowExpansion=false)
7+
*
8+
* INTERNAL USAGE:
9+
* <ExpandableTableWrapper
10+
* allowExpansion={true}
11+
* defaultExpanded={false}
12+
* title="Table Title"
13+
* description="Expand to view contents"
14+
* >
15+
* {tableContent}
16+
* </ExpandableTableWrapper>
17+
*/
18+
import { useState } from "preact/hooks"
19+
import { clsx } from "~/lib/clsx/clsx.ts"
20+
import tableStyles from "./Tables.module.css"
21+
22+
interface ExpandableTableWrapperProps {
23+
title?: string
24+
description?: string
25+
allowExpansion?: boolean
26+
defaultExpanded?: boolean
27+
scrollable?: boolean
28+
children: preact.ComponentChildren
29+
}
30+
31+
export const ExpandableTableWrapper = ({
32+
title,
33+
description,
34+
allowExpansion = false,
35+
defaultExpanded = true,
36+
scrollable = false,
37+
children,
38+
}: ExpandableTableWrapperProps) => {
39+
const [isExpanded, setIsExpanded] = useState(defaultExpanded)
40+
41+
// If expansion is not allowed, still wrap content but without the header
42+
if (!allowExpansion) {
43+
return <div className={clsx(tableStyles.tableContainer, scrollable && tableStyles.scrollableTable)}>{children}</div>
44+
}
45+
46+
const handleToggle = () => {
47+
setIsExpanded(!isExpanded)
48+
}
49+
50+
return (
51+
<div
52+
className={clsx(tableStyles.expandableWrapper, !isExpanded && tableStyles.expandableWrapperCollapsed)}
53+
onClick={(e) => {
54+
// If expanded and clicking anywhere in the wrapper (not inside interactive elements)
55+
if (isExpanded && e.target === e.currentTarget) {
56+
handleToggle()
57+
}
58+
}}
59+
>
60+
<div
61+
className={tableStyles.expandableHeader}
62+
onClick={handleToggle}
63+
role="button"
64+
tabIndex={0}
65+
onKeyDown={(e) => {
66+
if (e.key === "Enter" || e.key === " ") {
67+
e.preventDefault()
68+
setIsExpanded(!isExpanded)
69+
}
70+
if (e.key === "Escape" && isExpanded) {
71+
setIsExpanded(false)
72+
}
73+
}}
74+
>
75+
<div className={tableStyles.expandableHeaderContent}>
76+
{title && <h2>{title}</h2>}
77+
{!isExpanded && description && (
78+
<p className={tableStyles.expandableDescription}>
79+
<em>{description}</em>
80+
</p>
81+
)}
82+
</div>
83+
<div className={clsx(tableStyles.expandableArrow, isExpanded && tableStyles.expandableArrowExpanded)} />
84+
</div>
85+
86+
{isExpanded && (
87+
<div className={clsx(tableStyles.tableContainer, scrollable && tableStyles.scrollableTable)}>{children}</div>
88+
)}
89+
</div>
90+
)
91+
}

0 commit comments

Comments
 (0)