Skip to main content

Get Started

Install the public SDK, get test tokens, read the chain. Five minutes.

What exists today

@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.

Runtime prerequisites

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

FieldValue
NetworkOrbinum Testnet
Chain ID2700
Native currencyORB (18 decimals)
HTTP RPChttps://rpc-1.testnet.orbinum.io
WebSocketwss://rpc-1.testnet.orbinum.io
Explorerexplorer.testnet.orbinum.network
Test tokensfaucet.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

  1. Connect with OrbinumClient and read pool state, balances and chain data.
  2. Resolve addressesisEvmAddress, evmToSubstrate, formatBalance.
  3. Compose the payment — recipient privacy address, amount, asset.
  4. Hand off to a wallet, which performs the custody.
You do not need @orbinum/wallet-sdk

That 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 toRead
Hand a payment to a walletPayment Slips
Call a precompile from SolidityCalling a Precompile
Pay a Substrate-native accountBalances Precompile
Move value in the shielded poolShieldedPool Precompile
Know what the chain supportsEVM Compatibility