After setting up your project & installing dedot packages, let's connect to the network to make some on-chain interactions. You can connect to the network using a WebSocket (wss://) connection or via light client (smoldot).
Initializing DedotClient and interact with Polkadot network
import{ DedotClient, WsProvider }from'dedot';importtype{ PolkadotApi }from'@dedot/chaintypes';// Initialize providers & clientsconstprovider=newWsProvider('wss://rpc.polkadot.io');constclient=awaitDedotClient.new<PolkadotApi>(provider);// Call rpc `state_getMetadata` to fetch raw scale-encoded metadata and decode it.constmetadata=awaitclient.rpc.state_getMetadata();console.log('Metadata:', metadata);// Query on-chain storageconstbalance=awaitclient.query.system.account(<address>);console.log('Balance:', balance);// Subscribe to on-chain storage changesconstunsub=awaitclient.query.system.number((blockNumber)=>{console.log(`Current block number: ${blockNumber}`);});// Get pallet constantsconstss58Prefix=client.consts.system.ss58Prefix;console.log('Polkadot ss58Prefix:', ss58Prefix);// Call runtime apiconstpendingRewards=awaitclient.call.nominationPoolsApi.pendingRewards(<address>)console.log('Pending rewards:', pendingRewards);// Unsubcribe to storage changes & disconnect from the network// await unsub();// await client.disconnect();
Preparing a chainSpec.json file for the network that you want to connect to, you can find the chain spec for well-known chains by installing @dedot/chain-specs package.
Next, initialize SmoldotProvider and DedotClient instances to connect to network
Preparing a chainSpec.json file for the network that you want to connect to, you can find the chain spec for well-known chains by installing @dedot/chain-specs package.
Start a smoldot client within a WebWorker, then initialize SmoldotProvider & DedotClient to connect to the network
Note, for instruction on how to connect to a parachain, check out this example on Dedot repository.
Pick ChainApi interface for the network you're working with
We recommend specifying the ChainApi interface (e.g: PolkadotApi in the example above) of the chain that you want to interact with. This enable Types & APIs suggestion/autocompletion for that particular chain (via IntelliSense). If you don't specify a ChainApi interface, the default SubstrateApi interface will be used.
If you don't find the ChainApi for the network that you're working with in the list, you generate the ChainApi (Types & APIs) for it using dedot cli.
Or open a pull request to add your favorite Substrate-based network to the @dedot/chaintypes repo.
Caching metadata
In the bootstrapping/intialization process, clients have to download metadata from the network to prepare for on-chain interactions. Downloading a big metadata blob can take a large amount of time, depending on the JSON-RPC server that dapps are connecting to, it might potentially take longer if the connection is via a light client. For example, downloading Polkadot metadata (~500 kB) can take up to 500ms or ~1s or even longer depends on the network conditions.
Clients have an option to cache the downloaded metadata and using it again next time the dapp is loaded without having to download again. By default, Dedot save the cached metadata to localStorage in browser environment.
Enable caching metadata when initialize Dedot's clients:
Add a custom caching storage?
You can also add a custom cache storage for different environments:
Dedot supports CommonJS
Dedot supports CommonJS, so you can use require to import primitives & APIs.
Connect to network via legacy JSON-RPC APIs
If the JSON-RPC server doesn't support new JSON-RPC APIs yet, you can connect to the network using the legacy JSON-RPC APIs. Dedot provides a unified client interface for both new and legacy JSON-RPC specs.
When to use JSON-RPC v2 or legacy?
The new JSON-RPC APIs are not well implemented/unstable for RPC Nodes using Polkadot-SDK version < 1.11.0, so one should connect to the network using DedotClient.legacy() or DedotClient.new({ rpcVersion: 'legacy' }) in such cases. For nodes using Polkadot-SDK version >= 1.11.0, it's recommended to use DedotClient.new() to connect to the network (which uses JSON-RPC v2 by default).
You can easily check the current node's implementation version by calling RPC system_version
It's recommended to use DedotClient.new() for better performance when you connect to the network using smoldot light client via SmoldotProvider.