Skip to main content

Source real time data from a portal

info

SQD Network portals are currently in beta. Please report any bugs or suggestions to the SQD Portal chat or to Squid Devs.

The newest version of SQD Network portal serves real time data. It can replace both gateways of the open private version of SQD Network and RPC endpoints. Currently it only supports Solana (more on Solana indexing in SQD).

Here are the steps to migrate:

Step 0: Procur a portal endpoint URL

TBA.

https://portal.tethys.sqd.dev/datasets/solana-beta

can be used in internal tests.

Step 1: Install @portal-api packages

A. Enter your squid's folder.

B. Remove both your lock file and the node_modules folder:

rm -r node_modules package-lock.json

C. Upgrade all SQD packages that have a @portal-api version to it:

npx --yes npm-check-updates --filter "@subsquid/*" --target "@portal-api" --upgrade

D. Freeze the versions of @portal-api packages by removing any version range specifiers (^, ~, <, >, >=, <=) preceding the package versions. Here's a script:

sed -i -e 's/[\^~=<>]*\([0-9\.]*-portal-api\.[0-9a-f]\{6\}\)/\1/g' package.json
You can also do it manually

Here's an example edit:

   "dependencies": {
- "@subsquid/batch-processor": "^1.0.0-portal-api.18ef40",
+ "@subsquid/batch-processor": "1.0.0-portal-api.18ef40",
"@subsquid/borsh": "^0.2.0",
- "@subsquid/solana-objects": ">=0.0.3-portal-api.18ef40",
- "@subsquid/solana-stream": "<1.0.0-portal-api.18ef40",
+ "@subsquid/solana-objects": "0.0.3-portal-api.18ef40",
+ "@subsquid/solana-stream": "1.0.0-portal-api.18ef40",
"@subsquid/typeorm-migration": "^1.3.0",
- "@subsquid/typeorm-store": "~1.6.0-portal-api.18ef40",
+ "@subsquid/typeorm-store": "1.6.0-portal-api.18ef40",
"dotenv": "^16.4.7",
"pg": "^8.13.1",
"typeorm": "^0.3.20"
},
"devDependencies": {
- "@subsquid/solana-typegen": "^0.4.1-portal-api.18ef40",
+ "@subsquid/solana-typegen": "0.4.1-portal-api.18ef40",
"@types/node": "^22.13.1",
"typescript": "~5.7.3"
}

E. Install the dependencies:

npm install

Step 2: Update your code

The changes will depend on your chain's ecosystem:

A. Replace all exising data sources with the portal:

+  .setPortal('https://portal.tethys.sqd.dev/datasets/solana-beta')
- .setGateway('https://v2.archive.subsquid.io/network/solana-mainnet')
- .setRpc({
- client: new SolanaRpcClient({
- url: process.env.SOLANA_NODE
- })
- })

Also, please remove any mentions of SolanaRpcClient, for example:

-import {DataSourceBuilder, SolanaRpcClient} from '@subsquid/solana-stream'
+import {DataSourceBuilder} from '@subsquid/solana-stream'

B. Replace any block height literals with slot number literals.

+  .setBlockRange({from: 325000000})
- .setBlockRange({from: 303262650})

TBA add a convenient converter

C. If you used the slot field of block headers anywhere in your code, replace it with .number:

-  slot: block.header.slot,
+ slot: block.header.number,

D. If you need the block height (for example to stay compatible with your old code) request it in the .setFields call:

   .setFields({
block: { // block header fields
timestamp: true,
+ height: true
},

Your squid is ready to use.

What's next?

You can run your squid locally or deploy it to the Cloud (TBA).