Skip to main content

Getting Started

Install using your package manager of choice.

yarn add @zeitgeistpm/sdk @polkadot/api @polkadot/util
# or
npm i @zeitgeistpm/sdk @polkadot/api @polkadot/util

Initialization

The Zeitgeist SDK can be initialized in one of three different modes.

Code Snippets for Initialization

Full(default)

The full mode has access to both the zeitgeist indexer and chain rpc apis, it has a certain opinionative preference when querying for data and has access to rpc transaction methods for submitting extrinsic´s to the chain.

import type { FullContext, Sdk } from "@zeitgeistpm/sdk";
import { create, mainnet } from "@zeitgeistpm/sdk";

const sdk: Sdk<FullContext> = await create(mainnet());
信息

This is the preferred mode for full applications that need to both query data in a more optimized way and also need to interact with the chain itself.

信息

If you are trying to import dependencies using CommonJS require("") syntax with const { create, mainnet } = require("@zeitgeistpm/sdk"), then it will not work. Instead you need to import with Modules (ESM) await import("") syntax. For example:

(async () => {
const { create, mainnet } = await import("@zeitgeistpm/sdk")`
})().catch(console.error).finally(() => process.exit());

Rpc Mode

The rpc mode connects only to the rpc chain node and has a bit more limitations when querying for data.

import type { RpcContext, Sdk } from "@zeitgeistpm/sdk";
import { create, mainnetRpc } from "@zeitgeistpm/sdk";

const sdk: Sdk<RpcContext> = await create(mainnetRpc());
信息

Prefer this mode when need to make sure you are only interacting with the latest chain data for verification purposes or only need to submit transactions.

Indexer Mode

The indexer mode is only interacting with the indexed data and has no transaction or chain query capabilities. It boots up quicker than the rpc or full sdk.

import type { IndexerContext, Sdk } from "@zeitgeistpm/sdk";
import { create, mainnetIndexer } from "@zeitgeistpm/sdk";

const sdk: Sdk<IndexerContext> = await create(mainnetIndexer());
信息

Prefer this mode when working with slightly stale(1-2 minutes) data is ok. Perfect for static sites or analytics tools.

Testnet Graphql Explorer

You can access the testnet Graphql explorer if you want to look at the indexed data and get more info on the indexed data types here:

https://processor.bsr.zeitgeist.pm/graphql

Battery Station

You can also connect to our test net using the sdk.

import type { FullContext, Sdk } from "@zeitgeistpm/sdk";
import { create, batterystation } from "@zeitgeistpm/sdk";

const sdk: Sdk<FullContext> = await create(batterystation());

Local Dev Node

You can also connect to a locally running development node.

备注

Just note that if you don't have the zeitgeist Subsquid node also running locally you have to boot it in rpc mode.

Starting a local Zeitgeist Node with Docker.

1. First lets pull the IPFS image and zeitgeist image.

docker pull ipfs/go-ipfs:latest
docker pull zeitgeistpm/zeitgeist-node

2. Then we can boot up the IPFS daemon image and zeitgeist node.

docker run \
-p 4001:4001 \
-p 127.0.0.1:8080:8080 \
-p 127.0.0.1:8081:8081 \
-p 127.0.0.1:5001:5001 \
ipfs/go-ipfs

docker run \
-p 30333:30333 \
-p 9933:9933 \
-p 9944:9944 \
zeitgeistpm/zeitgeist-node \
--dev \
--rpc-external \
--ws-external \
--rpc-cors=all \
--pruning=archive

3. Connecting the SDK to the dev environment.

import type { RpcContext, Sdk } from "@zeitgeistpm/sdk";
import { create, createStorage } from "@zeitgeistpm/sdk";
import { IPFS } from "@zeitgeistpm/web3.storage";

const sdk: Sdk<RpcContext> = await create({
provider: "ws://localhost:9944",
storage: createStorage(
IPFS.storage({
node: { url: "localhost:5001" },
})
),
});
备注

In production you are recommended to use wss (WebSocket Secure) instead of ws