Get Started
Install the public SDK, get test tokens, read the chain. Five minutes.
@orbinum/protocol is published and works — everything on this page runs.
What is not there yet: a Solidity project template, an examples/ directory
in the package, and a documented transport for the dapp-to-wallet hand-off. The
worked examples that exist are the ones in these docs and in the package README.
Building now is welcome. Expect gaps, and tell us which ones hurt — that shapes what lands first.
1. Install
npm install @orbinum/protocol
Two peer dependencies, needed only if you talk to a Substrate node:
npm install polkadot-api @polkadot/util-crypto
Composing payment slips, verifying disclosure keys, encoding, address handling and tree geometry need neither.
There are no subpath exports — everything is imported from the package root.
crypto.getRandomValues is required; crypto.subtle is not.
atob must exist at import time — a dependency decodes constants at module
scope, so a runtime without it fails while loading the module, not on first call.
React Native hosts must install the polyfill before the import statement.
2. Point at the network
| Field | Value |
|---|---|
| Network | Orbinum Testnet |
| Chain ID | 2700 |
| Native currency | ORB (18 decimals) |
| HTTP RPC | https://rpc-1.testnet.orbinum.io |
| WebSocket | wss://rpc-1.testnet.orbinum.io |
| Explorer | explorer.testnet.orbinum.network |
| Test tokens | faucet.orbinum.network — 5 ORB per 24 h |
A node started with --dev uses Chain ID 42. Chain ID 270 is reserved for
mainnet in the runtime genesis presets, but mainnet is not live — do not
configure wallets or contracts against it.
3. Get test tokens
The faucet sends 5 ORB per address per 24 hours. You need them for anything that writes; reading the chain needs nothing.
4. Your first call
import { OrbinumClient } from '@orbinum/protocol';
const client = await OrbinumClient.connect({
substrateWs: 'wss://rpc-1.testnet.orbinum.io',
evmRpc: 'https://rpc-1.testnet.orbinum.io',
});
const stats = await client.privacy.getPoolStats();
console.log('root:', stats.merkleRoot, 'leaves:', stats.commitmentCount);
client.destroy();
That reads the shielded pool's current Merkle root and note count — public data, no keys involved.
evmRpc is optional. Without it client.evm is null and everything else still
works.
What a dapp does
- Connect with
OrbinumClientand read pool state, balances and chain data. - Resolve addresses —
isEvmAddress,evmToSubstrate,formatBalance. - Compose the payment — recipient privacy address, amount, asset.
- Hand off to a wallet, which performs the custody.
@orbinum/wallet-sdkThat package holds spending keys and is not publicly installable. If you are
building a dapp, a script or an automation, @orbinum/protocol is the whole
surface — your code never touches a key, which is what makes it a smaller
liability. See the custody boundary for why the split
exists.
Where to go next
| You want to | Read |
|---|---|
| Hand a payment to a wallet | Payment Slips |
| Call a precompile from Solidity | Calling a Precompile |
| Pay a Substrate-native account | Balances Precompile |
| Move value in the shielded pool | ShieldedPool Precompile |
| Know what the chain supports | EVM Compatibility |