Skip to content

Commit 715a2dc

Browse files
authored
Data Streams: Februray Integrations + Quicklink improvement (#3480)
* integrations + quicklink direct to address * minor touches and changelog entry * lint fix * more fixes
1 parent 9f18953 commit 715a2dc

7 files changed

Lines changed: 161 additions & 57 deletions

File tree

.github/scripts/data/detect-data.sh

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,11 @@ node <<EOF
154154
155155
// === data-streams networks
156156
const STREAMS_NETWORKS = [
157-
"0g", "apechain", "aptos", "arbitrum", "avalanche", "base", "berachain", "bitlayer", "blast",
158-
"bnb-chain", "bob", "botanix", "celo", "ethereum", "gnosis-chain", "gravity", "hashkey", "hedera", "hyperliquid", "injective",
159-
"ink", "jovay", "katana", "lens", "linea", "mantle", "metis", "monad", "opbnb", "optimism", "polygon", "pharos", "plasma", "ronin",
160-
"scroll", "shibarium", "sei", "soneium", "sonic",
161-
"solana", "taiko", "unichain", "worldchain", "zksync"
157+
"0g", "apechain", "adi", "aptos", "arbitrum", "arc", "avalanche", "base", "berachain", "bitlayer", "blast",
158+
"bnb-chain", "bob", "botanix", "celo", "dogeos", "ethereum", "gnosis-chain", "gravity", "hashkey",
159+
"hedera", "hyperliquid", "injective", "ink", "jovay", "katana", "lens", "linea", "mantle",
160+
"metis", "monad", "opbnb", "optimism", "polygon", "perennial", "pharos", "plasma", "ronin", "scroll", "shibarium", "sei",
161+
"soneium", "sonic", "solana", "stable", "taiko", "unichain", "worldchain", "zksync"
162162
];
163163
164164
// === Build relatedTokens for FEEDS

public/assets/chains/perennial.svg

Lines changed: 6 additions & 0 deletions
Loading

public/changelog.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,10 @@
252252
"displayName": "OP",
253253
"iconUrl": "https://docs.chain.link/assets/chains/optimism.svg"
254254
},
255+
"perennial": {
256+
"displayName": "Perennial",
257+
"iconUrl": "https://docs.chain.link/assets/chains/perennial.svg"
258+
},
255259
"pharos": {
256260
"displayName": "Pharos",
257261
"iconUrl": "https://docs.chain.link/assets/chains/pharos.svg"
@@ -374,6 +378,14 @@
374378
}
375379
},
376380
"data": [
381+
{
382+
"category": "integration",
383+
"date": "2026-02-19",
384+
"description": "Chainlink Data Streams is available for new blockchains:\n\n- ADI Mainnet\n- Arc Testnet\n- DogeOS Chikyu Testnet\n- Perennial Mainnet\n- Stable Mainnet\n- Stable Testnet\n\nThe verifier proxy addresses and stream IDs are available on the [Supported Networks](https://docs.chain.link/data-streams/supported-networks) page.",
385+
"relatedNetworks": ["adi-network", "arc", "dogeos", "perennial", "stable"],
386+
"title": "Data Streams Expands to New Blockchains",
387+
"topic": "Data Streams"
388+
},
377389
{
378390
"category": "deprecation",
379391
"date": "2026-02-18",

src/components/QuickLinks/data/productChainLinks.ts

Lines changed: 52 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -168,51 +168,56 @@ export const productChainLinks: ProductChainLinks = {
168168
learnMoreLink: "data-streams",
169169
logo: dataStreamsLogo,
170170
chains: {
171-
"0g": "/data-streams/crypto-streams",
172-
apechain: "/data-streams/crypto-streams",
173-
aptos: "/data-streams/crypto-streams",
174-
arbitrum: "/data-streams/crypto-streams",
175-
avalanche: "/data-streams/crypto-streams",
176-
base: "/data-streams/crypto-streams",
177-
berachain: "/data-streams/crypto-streams",
178-
bitlayer: "/data-streams/crypto-streams",
179-
blast: "/data-streams/crypto-streams",
180-
"bnb-chain": "/data-streams/crypto-streams",
181-
bob: "/data-streams/crypto-streams",
182-
botanix: "/data-streams/crypto-streams",
183-
celo: "/data-streams/crypto-streams",
184-
ethereum: "/data-streams/crypto-streams",
185-
"gnosis-chain": "/data-streams/crypto-streams",
186-
gravity: "/data-streams/crypto-streams",
187-
hashkey: "/data-streams/crypto-streams",
188-
hedera: "/data-streams/crypto-streams",
189-
hyperevm: "/data-streams/crypto-streams",
190-
ink: "/data-streams/crypto-streams",
191-
injective: "/data-streams/crypto-streams",
192-
jovay: "/data-streams/crypto-streams",
193-
lens: "/data-streams/crypto-streams",
194-
linea: "/data-streams/crypto-streams",
195-
mantle: "/data-streams/crypto-streams",
196-
megaeth: "/data-streams/crypto-streams",
197-
metis: "/data-streams/crypto-streams",
198-
monad: "/data-streams/crypto-streams",
199-
opbnb: "/data-streams/crypto-streams",
200-
optimism: "/data-streams/crypto-streams",
201-
pharos: "/data-streams/crypto-streams",
202-
polygon: "/data-streams/crypto-streams",
203-
polygonkatana: "/data-streams/crypto-streams",
204-
plasma: "/data-streams/crypto-streams",
205-
ronin: "/data-streams/crypto-streams",
206-
sei: "/data-streams/crypto-streams",
207-
scroll: "/data-streams/crypto-streams",
208-
shibarium: "/data-streams/crypto-streams",
209-
solana: "/data-streams/crypto-streams",
210-
soneium: "/data-streams/crypto-streams",
211-
sonic: "/data-streams/crypto-streams",
212-
taiko: "/data-streams/crypto-streams",
213-
unichain: "/data-streams/crypto-streams",
214-
worldchain: "/data-streams/crypto-streams",
215-
zksync: "/data-streams/crypto-streams",
171+
"0g": "/data-streams/supported-networks?streamsNetwork=0g",
172+
"adi-network": "/data-streams/supported-networks?streamsNetwork=adi",
173+
arc: "/data-streams/supported-networks?streamsNetwork=arc",
174+
apechain: "/data-streams/supported-networks?streamsNetwork=apechain",
175+
aptos: "/data-streams/supported-networks?streamsNetwork=aptos",
176+
arbitrum: "/data-streams/supported-networks?streamsNetwork=arbitrum",
177+
avalanche: "/data-streams/supported-networks?streamsNetwork=avalanche",
178+
base: "/data-streams/supported-networks?streamsNetwork=base",
179+
berachain: "/data-streams/supported-networks?streamsNetwork=berachain",
180+
bitlayer: "/data-streams/supported-networks?streamsNetwork=bitlayer",
181+
blast: "/data-streams/supported-networks?streamsNetwork=blast",
182+
"bnb-chain": "/data-streams/supported-networks?bnb",
183+
bob: "/data-streams/supported-networks?streamsNetwork=bob",
184+
botanix: "/data-streams/supported-networks?streamsNetwork=botanix",
185+
celo: "/data-streams/supported-networks?streamsNetwork=celo",
186+
dogeos: "/data-streams/supported-networks?streamsNetwork=dogeos",
187+
ethereum: "/data-streams/supported-networks?streamsNetwork=ethereum",
188+
"gnosis-chain": "/data-streams/supported-networks?streamsNetwork=gnosis",
189+
gravity: "/data-streams/supported-networks?streamsNetwork=gravity",
190+
hashkey: "/data-streams/supported-networks?streamsNetwork=hashkey",
191+
hedera: "/data-streams/supported-networks?streamsNetwork=hedera",
192+
hyperevm: "/data-streams/supported-networks?streamsNetwork=hyperevm",
193+
ink: "/data-streams/supported-networks?streamsNetwork=ink",
194+
injective: "/data-streams/supported-networks?streamsNetwork=injective",
195+
jovay: "/data-streams/supported-networks?streamsNetwork=jovay",
196+
lens: "/data-streams/supported-networks?streamsNetwork=lens",
197+
linea: "/data-streams/supported-networks?streamsNetwork=linea",
198+
mantle: "/data-streams/supported-networks?streamsNetwork=mantle",
199+
megaeth: "/data-streams/supported-networks?streamsNetwork=megaeth",
200+
metis: "/data-streams/supported-networks?streamsNetwork=metis",
201+
monad: "/data-streams/supported-networks?streamsNetwork=monad",
202+
opbnb: "/data-streams/supported-networks?streamsNetwork=opbnb",
203+
optimism: "/data-streams/supported-networks?streamsNetwork=optimism",
204+
pharos: "/data-streams/supported-networks?streamsNetwork=pharos",
205+
perennial: "/data-streams/supported-networks?streamsNetwork=perennial",
206+
polygon: "/data-streams/supported-networks?streamsNetwork=polygon",
207+
polygonkatana: "/data-streams/supported-networks?streamsNetwork=katana",
208+
plasma: "/data-streams/supported-networks?streamsNetwork=plasma",
209+
ronin: "/data-streams/supported-networks?streamsNetwork=ronin",
210+
sei: "/data-streams/supported-networks?streamsNetwork=sei",
211+
scroll: "/data-streams/supported-networks?streamsNetwork=scroll",
212+
shibarium: "/data-streams/supported-networks?streamsNetwork=shibarium",
213+
solana: "/data-streams/supported-networks?streamsNetwork=solana",
214+
soneium: "/data-streams/supported-networks?streamsNetwork=soneium",
215+
sonic: "/data-streams/supported-networks?streamsNetwork=sonic",
216+
stable: "/data-streams/supported-networks?streamsNetwork=stable",
217+
taiko: "/data-streams/supported-networks?streamsNetwork=taiko",
218+
unichain: "/data-streams/supported-networks?streamsNetwork=unichain",
219+
worldchain: "/data-streams/supported-networks?streamsNetwork=worldchain",
220+
zksync: "/data-streams/supported-networks?streamsNetwork=zksync",
216221
},
217222
},
218223
Functions: {
@@ -435,12 +440,13 @@ export const chainNames: Record<string, string> = {
435440
everclear: "Everclear",
436441
abchain: "AB Chain",
437442
henesys: "Henesys",
443+
perennial: "Perennial",
438444
pharos: "Pharos",
439445
morph: "Morph",
440446
jovay: "Jovay",
441447
stable: "Stable",
442448
tempo: "Tempo",
449+
"adi-network": "ADI Network",
443450
arc: "Arc Network",
444451
dogeos: "DogeOS",
445-
"adi-network": "ADI Network",
446452
}

src/features/feeds/components/Tables.tsx

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -676,11 +676,34 @@ const SmartDataTr = ({ network, metadata, showExtraDetails, batchedCategoryData
676676
export const StreamsNetworkAddressesTable = ({
677677
allowExpansion = false,
678678
defaultExpanded = false,
679+
initialSearch = "",
679680
}: {
680681
allowExpansion?: boolean
681682
defaultExpanded?: boolean
683+
initialSearch?: string
682684
} = {}) => {
683-
const [searchValue, setSearchValue] = useState("")
685+
// null = untouched; string = user has set a value
686+
const [searchState, setSearchState] = useState<string | null>(null)
687+
688+
const urlSearch =
689+
typeof window !== "undefined" ? (new URLSearchParams(window.location.search).get("streamsNetwork") ?? "") : ""
690+
691+
// Priority: user-typed value → SSR prop (when Astro can pass it) → URL param (client fallback)
692+
const searchValue = searchState ?? (initialSearch || urlSearch)
693+
694+
const updateSearch = (value: string) => {
695+
setSearchState(value)
696+
if (typeof window === "undefined") return
697+
const params = new URLSearchParams(window.location.search)
698+
if (value) {
699+
params.set("streamsNetwork", value)
700+
} else {
701+
params.delete("streamsNetwork")
702+
}
703+
const queryString = params.toString()
704+
const newUrl = window.location.pathname + (queryString ? "?" + queryString : "") + window.location.hash
705+
window.history.replaceState({ path: newUrl }, "", newUrl)
706+
}
684707

685708
const normalizedSearch = searchValue.toLowerCase().replaceAll(" ", "")
686709

@@ -709,10 +732,10 @@ export const StreamsNetworkAddressesTable = ({
709732
placeholder="Search"
710733
className={feedList.filterDropdown_searchInput}
711734
value={searchValue}
712-
onInput={(e) => setSearchValue((e.target as HTMLInputElement).value)}
735+
onInput={(e) => updateSearch((e.target as HTMLInputElement).value)}
713736
/>
714737
{searchValue && (
715-
<button className={clsx(button.secondary, feedList.clearFilterBtn)} onClick={() => setSearchValue("")}>
738+
<button className={clsx(button.secondary, feedList.clearFilterBtn)} onClick={() => updateSearch("")}>
716739
Clear filter
717740
</button>
718741
)}
@@ -728,7 +751,7 @@ export const StreamsNetworkAddressesTable = ({
728751
</tr>
729752
</thead>
730753
<tbody>
731-
{filteredNetworks.length === 0 ? (
754+
{typeof window === "undefined" ? null : filteredNetworks.length === 0 ? (
732755
<tr>
733756
<td colSpan={3} style={{ textAlign: "center", padding: "2rem", fontStyle: "italic" }}>
734757
No results found

src/features/feeds/data/StreamsNetworksData.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,15 @@ export const StreamsNetworksData: NetworkData[] = [
3333
explorerUrl: "https://chainscan-galileo.0g.ai/address/%s",
3434
},
3535
},
36+
{
37+
network: "ADI Network",
38+
logoUrl: "/assets/chains/adi-network.svg",
39+
mainnet: {
40+
label: "ADI Mainnet",
41+
verifierProxy: "0x29b289DC5f840762FBF605FF4DF37df18FdA4e7a",
42+
explorerUrl: "https://explorer.adifoundation.ai/address/%s",
43+
},
44+
},
3645
{
3746
network: "Apechain",
3847
logoUrl: "/assets/chains/apechain.svg",
@@ -77,6 +86,15 @@ export const StreamsNetworksData: NetworkData[] = [
7786
explorerUrl: "https://sepolia.arbiscan.io/address/%s",
7887
},
7988
},
89+
{
90+
network: "Arc",
91+
logoUrl: "/assets/chains/arc.svg",
92+
testnet: {
93+
label: "Arc Testnet",
94+
verifierProxy: "0x72790f9eB82db492a7DDb6d2af22A270Dcc3Db64",
95+
explorerUrl: "https://testnet.arcscan.app/address/%s",
96+
},
97+
},
8098
{
8199
network: "Avalanche",
82100
logoUrl: "/assets/chains/avalanche.svg",
@@ -222,6 +240,15 @@ export const StreamsNetworksData: NetworkData[] = [
222240
explorerUrl: "https://sepolia.etherscan.io/address/%s",
223241
},
224242
},
243+
{
244+
network: "DogeOS",
245+
logoUrl: "/assets/chains/dogeos.svg",
246+
testnet: {
247+
label: "DogeOS Chikyu Testnet",
248+
verifierProxy: "0x72790f9eB82db492a7DDb6d2af22A270Dcc3Db64",
249+
explorerUrl: "https://blockscout.testnet.dogeos.com/address/%s",
250+
},
251+
},
225252
{
226253
network: "Gnosis",
227254
logoUrl: "/assets/chains/gnosis-chain.svg",
@@ -460,6 +487,20 @@ export const StreamsNetworksData: NetworkData[] = [
460487
explorerUrl: "https://sepolia-optimism.etherscan.io/address/%s",
461488
},
462489
},
490+
{
491+
network: "Perennial",
492+
logoUrl: "/assets/chains/perennial.svg",
493+
mainnet: {
494+
label: "Perennial Mainnet",
495+
verifierProxy: "0xC539169910DE08D237Df0d73BcDa9074c787A4a1",
496+
explorerUrl: "https://explorer.perennial.foundation/address/%s",
497+
},
498+
testnet: {
499+
label: "Perennial Testnet",
500+
verifierProxy: "0xF94Fc3DfD2875AECBEfDA8b7bFA05884fbF1E042",
501+
explorerUrl: "https://explorer-sepolia.perennial.foundation/address/%s",
502+
},
503+
},
463504
{
464505
network: "Pharos",
465506
logoUrl: "/assets/chains/pharos.svg",
@@ -607,6 +648,20 @@ export const StreamsNetworksData: NetworkData[] = [
607648
explorerUrl: "https://explorer.solana.com/address/%s?cluster=devnet",
608649
},
609650
},
651+
{
652+
network: "Stable",
653+
logoUrl: "/assets/chains/stable.svg",
654+
mainnet: {
655+
label: "Stable Mainnet",
656+
verifierProxy: "0x06034790F8b6c2573B91704BeC6Ab380cB590237",
657+
explorerUrl: "https://stablescan.xyz/address/%s",
658+
},
659+
testnet: {
660+
label: "Stable Testnet",
661+
verifierProxy: "0x72790f9eB82db492a7DDb6d2af22A270Dcc3Db64",
662+
explorerUrl: "https://testnet.stablescan.xyz/address/%s",
663+
},
664+
},
610665
{
611666
network: "Taiko",
612667
logoUrl: "/assets/chains/taiko.svg",

src/pages/datalink/pull-delivery/verifier-proxy-addresses.astro

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
---
2-
import { StreamsNetworkAddressesTable } from "@features/feeds/components/Tables"
2+
import { StreamsNetworkAddressesTable } from "@features/feeds/components/Tables.tsx"
33
import Layout from "~/layouts/DocsLayout.astro"
44
5+
const initialSearch = Astro.url.searchParams.get("streamsNetwork") ?? ""
6+
57
const frontmatter = {
68
section: "dataLink",
79
date: "Last Modified",
@@ -23,5 +25,5 @@ const frontmatter = {
2325
href="/datalink/pull-delivery/tutorials/onchain-verification-evm">Onchain Verification</a
2426
> guide.
2527
</p>
26-
<StreamsNetworkAddressesTable client:load />
28+
<StreamsNetworkAddressesTable client:load initialSearch={initialSearch} />
2729
</Layout>

0 commit comments

Comments
 (0)