TypeScript API Reference
Complete API documentation for Selendra TypeScript SDK v1.0.4
TypeScript SDK API Reference
Complete API documentation for @selendrajs/sdk v1.0.4.
Installation
npm install @selendrajs/sdk
SelendraSDK Class
Main SDK class for connecting to Selendra blockchain.
Creating an Instance
import { createSDK, SelendraSDK, ChainType } from "@selendrajs/sdk";
// Using factory function (recommended)
const sdk = createSDK({
endpoint: "wss://rpc.selendra.org",
chainType: ChainType.Substrate,
});
// Or using class directly
const sdk = new SelendraSDK({
endpoint: "wss://rpc.selendra.org",
chainType: ChainType.Substrate,
autoReconnect: true,
debug: false,
});
Configuration Options
interface SDKConfig {
endpoint?: string; // RPC endpoint URL
network?: string; // Network name
chainType?: ChainType; // Substrate or EVM
autoReconnect?: boolean; // Auto-reconnect on disconnect
retryAttempts?: number; // Number of retry attempts
debug?: boolean; // Enable debug logging
}
Core Methods
| Method | Returns | Description |
|---|---|---|
connect() | Promise<void> | Connect to blockchain |
disconnect() | Promise<void> | Disconnect from blockchain |
destroy() | Promise<void> | Cleanup and destroy instance |
getConnectionInfo() | ConnectionInfo | Get connection details |
getBalance(address) | Promise<bigint> | Get account balance |
getFormattedBalance(address) | Promise<number> | Get formatted balance |
getApi() | ApiPromise | Get Polkadot.js API instance |
getEvmProvider() | JsonRpcProvider | Get Ethers.js provider |
Events
sdk.on("connecting", () => console.log("Connecting..."));
sdk.on("connected", () => console.log("Connected!"));
sdk.on("disconnected", () => console.log("Disconnected"));
sdk.on("error", (error) => console.error("Error:", error));
Pallet API Pattern
The SDK organizes blockchain operations by pallet using a consistent pattern:
// Queries (read-only)
const result = await sdk.pallets.<pallet>.queries.<method>(params);
// Transactions (write operations)
const tx = sdk.pallets.<pallet>.manager.<method>(params);
await tx.signAndSend(signer);
Example: Balances Pallet
import { createSDK } from "@selendrajs/sdk";
const sdk = createSDK({ endpoint: "wss://rpc.selendra.org" });
await sdk.connect();
// Query balance
const balance = await sdk.pallets.balances.queries.account(address);
console.log("Free:", balance.free.toString());
console.log("Reserved:", balance.reserved.toString());
// Transfer tokens
const tx = sdk.pallets.balances.manager.transfer({
dest: recipientAddress,
value: "1000000000000000000", // 1 SEL in planck
});
// Sign and send
await tx.signAndSend(signer, {}, (result) => {
if (result.status.isFinalized) {
console.log("Transfer finalized!");
}
});
Pallet Managers
BalancesManager
Token transfers and balance operations.
import { BalancesManager } from "@selendrajs/sdk";
// Queries
const balance = await sdk.pallets.balances.queries.account(address);
const total = await sdk.pallets.balances.queries.totalIssuance();
const locks = await sdk.pallets.balances.queries.locks(address);
// Transactions
sdk.pallets.balances.manager.transfer({ dest, value });
sdk.pallets.balances.manager.transferKeepAlive({ dest, value });
sdk.pallets.balances.manager.transferAll({ dest, keepAlive: true });
StakingManager
Validator nomination and staking operations.
import { StakingManager, RewardDestination } from "@selendrajs/sdk";
// Queries
const validators = await sdk.pallets.staking.queries.validators();
const era = await sdk.pallets.staking.queries.activeEra();
const ledger = await sdk.pallets.staking.queries.ledger(address);
const nominators = await sdk.pallets.staking.queries.nominators(address);
// Transactions
sdk.pallets.staking.manager.bond({
value: "100000000000000000000",
payee: RewardDestination.Staked,
});
sdk.pallets.staking.manager.bondExtra({ maxAdditional: amount });
sdk.pallets.staking.manager.unbond({ value: amount });
sdk.pallets.staking.manager.nominate({ targets: [validator1, validator2] });
sdk.pallets.staking.manager.chill();
sdk.pallets.staking.manager.payoutStakers({ validatorStash, era });
DemocracyManager
Governance proposals and referendums.
import { DemocracyManager, Conviction } from "@selendrajs/sdk";
// Queries
const referendum = await sdk.pallets.democracy.queries.referendumInfoOf(index);
const proposals = await sdk.pallets.democracy.queries.publicProps();
const voting = await sdk.pallets.democracy.queries.votingOf(address);
// Transactions
sdk.pallets.democracy.manager.propose({ proposalHash, value });
sdk.pallets.democracy.manager.vote({ refIndex, vote });
sdk.pallets.democracy.manager.delegate({
to,
conviction: Conviction.Locked1x,
balance,
});
sdk.pallets.democracy.manager.removeVote({ index });
NominationPoolsManager
Staking pools for smaller nominators.
import { NominationPoolsManager } from "@selendrajs/sdk";
// Queries
const pool = await sdk.pallets.nominationPools.queries.bondedPools(poolId);
const member = await sdk.pallets.nominationPools.queries.poolMembers(address);
const metadata = await sdk.pallets.nominationPools.queries.metadata(poolId);
// Transactions
sdk.pallets.nominationPools.manager.join({ amount, poolId });
sdk.pallets.nominationPools.manager.bondExtra({
extra: { FreeBalance: amount },
});
sdk.pallets.nominationPools.manager.claimPayout();
sdk.pallets.nominationPools.manager.unbond({ memberAccount, unbondingPoints });
sdk.pallets.nominationPools.manager.withdrawUnbonded({
memberAccount,
numSlashingSpans,
});
EvmManager
EVM contract deployment and interaction.
import { EvmManager } from "@selendrajs/sdk";
// Queries
const account = await sdk.pallets.evm.queries.accountBasic(evmAddress);
const code = await sdk.pallets.evm.queries.accountCodes(contractAddress);
const storage = await sdk.pallets.evm.queries.accountStorages(address, slot);
// Deploy contract (CREATE)
sdk.pallets.evm.manager.create({
source: evmAddress,
init: bytecode,
value: 0n,
gasLimit: 1000000n,
maxFeePerGas: 1000000000n,
});
// Call contract
sdk.pallets.evm.manager.call({
source: evmAddress,
target: contractAddress,
input: encodedData,
value: 0n,
gasLimit: 100000n,
maxFeePerGas: 1000000000n,
});
Unified Accounts
Convert between Substrate (SS58) and EVM (0x) addresses.
import {
UnifiedAccountsManager,
calculateDefaultEvmAddress,
calculateDefaultSubstrateAddress,
isValidSubstrateAddress,
isValidEvmAddress,
} from "@selendrajs/sdk";
// Utility functions
const evmAddr = calculateDefaultEvmAddress(substrateAddress);
const subAddr = calculateDefaultSubstrateAddress(evmAddress);
// Validate addresses
const isSubstrate = isValidSubstrateAddress(address);
const isEvm = isValidEvmAddress(address);
// Using UnifiedAccountsManager
const manager = new UnifiedAccountsManager(api);
// Get mapping info
const evmMapping = await manager.getEvmAddressForSubstrate(substrateAddress);
const substrateMapping = await manager.getSubstrateAddressForEvm(evmAddress);
// Claim default EVM address
const claimTx = manager.claimDefaultEvmAddress();
await claimTx.signAndSend(signer);
Wallet Utilities
import { SelendraWallet, WalletUtils } from "@selendrajs/sdk";
// Create wallet from mnemonic
const wallet = SelendraWallet.fromMnemonic(mnemonic);
// Create wallet from private key
const wallet = SelendraWallet.fromPrivateKey(privateKey);
// Generate new wallet
const wallet = SelendraWallet.generate();
// Get addresses
const substrateAddress = wallet.substrateAddress;
const evmAddress = wallet.evmAddress;
// Sign transactions
const signature = await wallet.sign(message);
Logger Configuration
import { configureLogger, suppressNodeWarnings } from "@selendrajs/sdk";
// Suppress Node.js warnings (e.g., punycode deprecation)
suppressNodeWarnings();
// Configure logger
configureLogger({
level: "info", // 'debug' | 'info' | 'warn' | 'error' | 'silent'
prefix: "MyApp",
});
Type Exports
The SDK exports comprehensive TypeScript types:
// Core types
import type { SDKConfig, ConnectionInfo, SDKEvents } from "@selendrajs/sdk";
// Pallet types
import type {
AccountData,
TransferParams,
StakingLedger,
ValidatorPrefs,
ReferendumInfo,
BondedPoolInfo,
} from "@selendrajs/sdk";
// Enums
import {
ChainType,
Network,
RewardDestination,
Conviction,
} from "@selendrajs/sdk";
Error Handling
try {
const tx = sdk.pallets.balances.manager.transfer({ dest, value });
const result = await tx.signAndSend(signer);
// Check for errors in events
result.events.forEach(({ event }) => {
if (sdk.getApi().events.system.ExtrinsicFailed.is(event)) {
const [error] = event.data;
if (error.isModule) {
const decoded = sdk.getApi().registry.findMetaError(error.asModule);
throw new Error(`${decoded.section}.${decoded.name}: ${decoded.docs}`);
}
}
});
} catch (error) {
console.error("Transaction failed:", error);
}
Network Endpoints
| Network | WebSocket | HTTP | Chain ID |
|---|---|---|---|
| Mainnet | wss://rpc.selendra.org | https://rpc.selendra.org | 1961 |
| Testnet | wss://rpc-testnet.selendra.org | https://rpc-testnet.selendra.org | 1953 |
See Also
- Pallets Reference - Complete pallet documentation
- React Hooks - React integration
- CLI Reference - Command-line tools
Contribute
Found an issue or want to contribute?
Help us improve this documentation by editing this page on GitHub.