Network & Tooling
Every parameter a client needs to reach Orbinum, and the configuration for the usual Ethereum tools. The same URL serves the Substrate and the Ethereum JSON-RPC.
Testnet
| Field | Value |
|---|---|
| Network | Orbinum Testnet |
| Chain ID | 2700 |
| Native currency | ORB (18 decimals) |
| Runtime | spec_version 20, transaction_version 7 — read the live values with state_getRuntimeVersion |
| 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.
Chain constants
| Constant | Value |
|---|---|
| EVM chain ID | Testnet 2700; a --dev node 42; 270 reserved for mainnet, which is not live |
| SS58 prefix | 42. The same number as the dev chain ID, unrelated to it |
| Token | ORB, 18 decimals (1 ORB = 10¹⁸ planck, the same unit as wei) |
| Existential deposit | 0: no account is ever reaped for a low balance |
| Block time | 6 s |
| EVM rules | Pectra. Differences from Ethereum are in EVM Compatibility |
| Weight fee | 50,000 wei per unit of ref_time: the default base fee (1 gwei) over WeightPerGas (20,000) |
| Length fee | 16 gwei per encoded byte: 16 gas at the default base fee |
A Substrate extrinsic costs what the same weight and bytes would cost as EVM gas at the default base
fee, not the live EIP-1559 value: a balance transfer costs about 1.6 × 10⁻⁵ ORB, as it does over
EVM. Unsigned private spends pay their spend fee instead, at least MinSpendFee; see
Gasless Fees.
Public RPC
rpc-1.testnet.orbinum.io serves safe methods only. An unsafe method (author keys, pool
management, peering) answers RPC call is unsafe to be called externally. Besides the standard
Substrate and Ethereum methods, it serves the shielded pool's privacy_* methods, described in
Public RPC Node.
| Limit | Value |
|---|---|
| HTTP requests | 500 per 10 s per IP |
| WebSocket upgrades | 30 per 60 s per IP |
| Calls on one WebSocket | 1200 per minute |
An indexer or anything that replays history runs its own node: see Public RPC Node.
MetaMask
Add the network from a dApp with wallet_addEthereumChain:
await window.ethereum.request({
method: 'wallet_addEthereumChain',
params: [
{
chainId: '0xa8c', // 2700
chainName: 'Orbinum Testnet',
nativeCurrency: { name: 'ORB', symbol: 'ORB', decimals: 18 },
rpcUrls: ['https://rpc-1.testnet.orbinum.io'],
blockExplorerUrls: ['https://explorer.testnet.orbinum.network/evm'],
},
],
});
To add it by hand, use the same values. The explorer URL ends in /evm because the explorer
serves EVM transactions and addresses under that path, where wallets append /tx/<hash> and
/address/<address>.
The explorer's search also accepts a Solana address: the base58 form of a 32-byte ed25519 key,
which is the Orbinum account itself. The page of a native account shows its Solana form in a
Solana (ed25519) row.
viem
import { createPublicClient, defineChain, http } from 'viem';
export const orbinumTestnet = defineChain({
id: 2700,
name: 'Orbinum Testnet',
nativeCurrency: { name: 'ORB', symbol: 'ORB', decimals: 18 },
rpcUrls: {
default: {
http: ['https://rpc-1.testnet.orbinum.io'],
webSocket: ['wss://rpc-1.testnet.orbinum.io'],
},
},
blockExplorers: {
default: { name: 'Orbinum Explorer', url: 'https://explorer.testnet.orbinum.network/evm' },
},
testnet: true,
});
const client = createPublicClient({ chain: orbinumTestnet, transport: http() });
console.log(await client.getBlockNumber());
ethers v6
import { ethers } from 'ethers';
const provider = new ethers.JsonRpcProvider(
'https://rpc-1.testnet.orbinum.io',
{ chainId: 2700, name: 'orbinum-testnet' },
{ staticNetwork: true },
);
const signer = new ethers.Wallet(process.env.ORBINUM_PRIVATE_KEY!, provider);
staticNetwork skips the eth_chainId request ethers otherwise sends before its first call. For
subscriptions, new ethers.WebSocketProvider('wss://rpc-1.testnet.orbinum.io', 2700).
Hardhat
hardhat.config.ts for Hardhat 3:
import { configVariable, defineConfig } from 'hardhat/config';
export default defineConfig({
solidity: {
version: '0.8.30',
settings: { evmVersion: 'prague' },
},
networks: {
orbinumTestnet: {
type: 'http',
url: 'https://rpc-1.testnet.orbinum.io',
chainId: 2700,
accounts: [configVariable('ORBINUM_PRIVATE_KEY')],
},
},
});
Run against it with --network orbinumTestnet. evmVersion: 'prague' matches the chain's Pectra
rules.
Foundry
foundry.toml:
[profile.default]
evm_version = "prague"
[rpc_endpoints]
orbinum_testnet = "https://rpc-1.testnet.orbinum.io"
cast chain-id --rpc-url orbinum_testnet
forge create src/Payouts.sol:Payouts \
--rpc-url orbinum_testnet --chain-id 2700 \
--private-key "$ORBINUM_PRIVATE_KEY" --broadcast
--rpc-url also takes the URL itself. forge script simulates locally before it broadcasts; a
script that calls an Orbinum precompile needs --skip-simulation (see the next section).
Precompiles in local tooling
The ShieldedPool (0x…0801) and Balances (0x…0802) precompiles exist only in the Orbinum
runtime. They are in no tooling registry, and local EVMs do not implement them: the Hardhat
network, Anvil (forked or not) and the forge script simulation treat both addresses as empty
accounts, so a call to them succeeds and does nothing. Test code that calls them against the
testnet or a development node.
For how to call them, see Calling a Precompile.
Related
- EVM Compatibility — Pectra rules, fees, gas and precompile differences
- Precompile Addresses — every registered address
- Calling a Precompile — Balances from Solidity and ethers
- Official Links — every official URL
- Faucet — test ORB
- Public RPC Node — running your own endpoint