Start with Selendra SDK
5-minute quickstart for Selendra SDK
Get started with Selendra SDK in 5 minutes. Three paths: React, Substrate, or EVM.
Install
npm install @selendrajs/sdk
Requirements: Node.js ≥16, React ≥18 (for hooks)
Path 1: React Developer
Wrap App
import { SelendraProvider } from "@selendrajs/sdk/react";
function App() {
return (
<SelendraProvider endpoint="wss://rpc-testnet.selendra.org">
<YourComponents />
</SelendraProvider>
);
}
Use Hooks
import { useBalance, useTransaction } from "@selendrajs/sdk/react";
function WalletDisplay() {
const { balance, loading } = useBalance(
"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"
);
const { sendTransaction, status } = useTransaction();
const handleSend = async () => {
await sendTransaction({
to: "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty",
amount: "1000000000000",
});
};
return (
<>
<div>Balance: {balance} SEL</div>
<button onClick={handleSend} disabled={status === "pending"}>
Send 1 SEL
</button>
</>
);
}
Available: useSelendra, useBalance, useTransaction, useStaking, useContract, useEvents, and 9 more (docs)
Path 2: Substrate Developer
Connect & Query
import {
SelendraSDK,
ChainType,
Connection,
keypair_from_string,
} from "@selendrajs/sdk";
const sdk = new SelendraSDK({
endpoint: "wss://rpc-testnet.selendra.org",
chainType: ChainType.Substrate,
});
await sdk.connect();
// Get balance
const balance = await sdk.getBalance(
"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"
);
// Send transaction
await sdk.submitTransaction({
signer: "//Alice",
to: "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty",
amount: "1000000000000",
});
Staking
const conn = await Connection.new("wss://rpc-testnet.selendra.org");
const keypair = keypair_from_string("//Alice");
const signed = conn.sign(keypair);
await signed.stake_bond(1_000_000_000_000);
await signed.stake_nominate([
"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
"5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty",
]);
const info = await conn.get_staking_info(keypair.account_id());
Governance
const proposalsCount = await conn.get_treasury_proposals_count();
const validators = await conn.get_current_era_validators();
await signed.treasury_propose_spend(100_000_000_000_000, beneficiaryAddress);
Path 3: EVM (Beta)
Basic EVM operations. For full support, use web3.js.
const sdk = new SelendraSDK({
endpoint: "https://rpc-testnet.selendra.org",
chainType: ChainType.EVM,
});
const balance = await sdk.getBalance(
"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"
);
Limitations: Contract deployment, gas estimation, transaction history not ready. Use web3.js for production EVM.
Unified Accounts
import { UnifiedAccountManager } from "@selendrajs/sdk";
const manager = new UnifiedAccountManager(api);
const evmAddress = manager.substrateToEvm(substrateAddress);
const hasMapping = await manager.hasMappingOnChain(address);
await manager.claimDefaultEvmAddress(signer);
Network Endpoints
Testnet:
- WS:
wss://rpc-testnet.selendra.org - HTTP:
https://rpc-testnet.selendra.org - Chain ID: 1953
Mainnet:
- WS:
wss://rpc.selendra.org - HTTP:
https://rpc.selendra.org - Chain ID: 1961
Key Concepts
Decimals: Substrate uses 12, EVM uses 18
Formats: Substrate (SS58, starts with 5), EVM (hex, starts with 0x)
Status: pending → in_block → finalized (2-3s)
Error Handling
try {
await sdk.submitTransaction({...});
} catch (error) {
if (error.code === "INSUFFICIENT_BALANCE") {
console.log("Not enough balance");
} else if (error.code === "INVALID_ADDRESS") {
console.log("Address format invalid");
}
}
Troubleshooting
| Issue | Solution |
|---|---|
| "Cannot connect" | Check endpoint URL (wss:// or https://), try testnet |
| "Nonce too low" | Query: await sdk.getAccountInfo(address) |
| "Insufficient balance" | Get testnet SEL from faucet |
| "Module not found" | Check React ≥18.0.0 installed |
Examples
Clone and run: github.com/selendra/selendra-sdk/examples
git clone https://github.com/selendra/selendra-sdk
cd selendra-sdk/examples/simple-wallet
npm install && npm run dev
Next Steps
- React Hooks - All 15 hooks
- TypeScript API - Complete reference
- Status - What works now
Support: GitHub Issues | Discussions
Found an issue or want to contribute?
Help us improve this documentation by editing this page on GitHub.
