Skip to main content

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​

FieldValue
NetworkOrbinum Testnet
Chain ID2700
Native currencyORB (18 decimals)
Runtimespec_version 20, transaction_version 7 — read the live values with state_getRuntimeVersion
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.


Chain constants​

ConstantValue
EVM chain IDTestnet 2700; a --dev node 42; 270 reserved for mainnet, which is not live
SS58 prefix42. The same number as the dev chain ID, unrelated to it
TokenORB, 18 decimals (1 ORB = 10¹⁸ planck, the same unit as wei)
Existential deposit0: no account is ever reaped for a low balance
Block time6 s
EVM rulesPectra. Differences from Ethereum are in EVM Compatibility
Weight fee50,000 wei per unit of ref_time: the default base fee (1 gwei) over WeightPerGas (20,000)
Length fee16 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.

LimitValue
HTTP requests500 per 10 s per IP
WebSocket upgrades30 per 60 s per IP
Calls on one WebSocket1200 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.