SSolon 中EN繁
Solon Docs

Build on Solon

EVM Full EVM compatibility: every Ethereum tool you know (MetaMask / ethers.js / web3.py / Remix / Hardhat) works out of the box — just point your RPC at Solon.

QuickstartJSON-RPCAll MethodsError CodesFaucet API Contract AddressesSDK ExamplesIssue compliance tokensNode info Compliance

QuickstartQuickstart

ParameterValue
Network nameSolon Chain Testnet
RPC Address…
Chain ID51051(hex 0xC76B)
Token symbolSLN · 18 decimals · test token, no value
Block / consensus1 s · Clique PoA · EVM London
Block ExplorerSolon Explorer

15-minute end-to-end acceptance (from zero to your first on-chain interaction)
  1. Connect to the network (1 min) — click 'Add to MetaMask' above, or point any EVM tool's RPC to this site's /solonrpc/, and eth_chainId should return 0xC76B.
  2. Get test tokens (1 min) — Faucet to claim 10 SLN, or claim programmatically via the Faucet API below.
  3. Send your first transfer (2 min) — use web wallet or MetaMask to send 0.1 SLN to any address — confirmed in a 1-second block.
  4. Verify in the explorer (1 min) — open Solon Explorer to look up the transaction hash and confirm success and expected gas usage.
  5. Deploy a contract (10 min) — deploy directly from Remix / Hardhat (compiler EVM version MUST be london), or follow the issuance guide to deploy your own compliance token.

JSON-RPCCalling the node directly

Standard Ethereum JSON-RPC interface, supporting the eth_* / net_* / web3_* / txpool_* namespaces.

cURL · Query latest block height
# Query latest block height
curl -X POST … \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

# Returns: {"jsonrpc":"2.0","id":1,"result":"0x7a13"}
cURL · Query address balance
curl -X POST … \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_getBalance",
       "params":["0xyour address","latest"],"id":1}'

Method ReferenceJSON-RPC Method Reference

Semantics are identical to Ethereum mainnet RPC — any code that works against a public Ethereum RPC runs on Solon by changing one URL.

MethodTypeNotes
eth_* · Chain data & transactions
eth_chainId / eth_blockNumberReadChain ID (0xC76B) / latest block height
eth_getBalance / eth_getTransactionCount / eth_getCode / eth_getStorageAtReadBalance / nonce / contract bytecode / storage slot
eth_getBlockByNumber / eth_getBlockByHashReadBlock details (incl. transaction list)
eth_getTransactionByHash / eth_getTransactionReceiptReadTransaction details / receipt (status, gas, logs)
eth_call / eth_estimateGasReadLocal simulation (no transaction) / gas estimation
eth_sendRawTransactionWriteBroadcast a signed transaction (the only write method — keys never touch the network)
eth_getLogs / eth_getFilterChanges and the filter familyReadEvent log queries (filter by address / topics)
eth_gasPrice / eth_feeHistory / eth_syncingReadGas price / fee history / sync status
net_* / web3_* / txpool_* · Node & utilities
net_version / net_peerCount / net_listeningReadNetwork ID (51051) / peer count / listening status
web3_clientVersion / web3_sha3ReadNode version / Keccak-256 hash utility
txpool_content / txpool_statusReadTxpool contents / queued & pending counts

⚠️ Administrative namespaces (admin_* / personal_* / miner_*) are not exposed publicly and will be further restricted before mainnet.

Error CodesError Code Quick Reference

Three families: JSON-RPC protocol errors (Ethereum standard), contract reverts (Solon compliance logic), and proof-of-reserve gate reason codes (SolonProof, 9 codes).

CodeMeaning & troubleshooting
JSON-RPC standard errors
-32700Parse error — request body is not valid JSON
-32600Invalid Request — missing jsonrpc:"2.0" or malformed structure
-32601Method not found — misspelled method, or the namespace is not exposed (e.g. admin_*)
-32602Invalid params — wrong count / type / block tag
-32000Server error — includes gas required exceeds allowance (gas limit), nonce too low (reused nonce), insufficient funds (insufficient balance) etc. — read the message to locate the cause
Compliance contract reverts (blocked by compliance rules)
not verifiedRecipient (or sender) not on the IdentityRegistry whitelist → complete KYC registration first
frozenAddress is compliance-frozen; all transfers in and out are blocked
pausedContract is under emergency pause; wait for official resumption (see the status page)
PUSH0-relatedUnknown opcode on deployment → recompile with EVM version london (cancun not yet supported on this chain)
SolonProof Gate reason codes (what gate(asset) returns as reason — consult when subscription / redemption is blocked)
0 / 1Manual pause — proactively paused by compliance, with an on-chain note
2No proof registered — the asset has never submitted a reserve proof
3Proof out of validity — outside the validFrom ~ validUntil window; proof must be renewed
4Proof revoked — revoked by issuer or compliance; disclosed on the asset page
5No attestation — multi-sig feed not yet reached (2-of-3 incomplete)
6Audit failed — attestation conclusion is negative
7Reserve ratio below threshold — measured ratio < the asset rule's minRatioBp
8Risk alert — an attester raised riskFlag; preventive block

Faucet APIFaucet (programmatic)

Besides the web version, the faucet also exposes an HTTP API: 10 SLN per address every 24 hours.

cURL · Claim test tokens
curl -X POST … \
  -H "Content-Type: application/json" \
  -d '{"address":"0xyour address"}'

# success:  {"ok":true,"tx":"0x…"} error:  {"ok":false,"error":"…"}

Official ContractsOfficial compliance contracts

Compliance infrastructure deployed and verified on-chain by Solon (a simplified ERC-3643 implementation). The official IdentityRegistry is whitelist-managed — only Solon registers addresses; to manage your own whitelist, use the self-deployment model。

ContractAddress
IdentityRegistry
on-chain KYC whitelist registry
0xd81991206354E7b954C286a264eB1f2D940fa736
STT(compliance token sample)
Solon Treasury Token · RWA bond-class
0x9182B8445614D76f8E30118c73256829a68e3516
SolonProof
Reserve proof registry + multi-sig feed + ReserveGuard gating
0x1B6aa6198DaFe8b6a373FC91026b4D80b0409b68
DividendPool
Dividend pool · corporate actions engine
0x8aC596e41db553BAE8B82d151A80dc10d9C98351
LimitBook
Limit order book · escrow + atomic settlement
0x86a60247Bdad0fE1b4fdFdeA231af996C8d5189c
SolonBridge
Bridge (Solon side) · limits / fast lane / emergency pause
0x36507aB96929181867CE406B7DcAE0114467474f
SolonOffering
Primary offering engine · fixed price + atomic DvP
0xf61Ed0E0964Ac3B2f7d872B03315972BfE97e816
GLD (gold share sample)
Commodity-class compliance token · multi-asset demo
0x0Fe35F9621969B4bBEed7C153660B91d00cC4094
ABI downloads (JSON, ready for ethers / web3.py)
ContractABI file
IdentityRegistryir.json
Compliance token (shared by STT / GLD)ct.json
SolonProof (proof of reserve)proof.json
DividendPooldividend.json
LimitBookorderbook.json
SolonBridgebridge.json
SolonOfferingoffering.json
Oracle PriceFeedfeed.json

Plug-and-play example scripts in assets/examples/ (01 price queries → 06 limit orders, 6 in total, run directly with Node); source-level ABIs and bytecode are bundled in assets/solon-contracts.js.

MethodAccessNotes
IdentityRegistry(whitelist)
isVerified(address)viewWhether an address is KYC-registered
register(address) / registerBatch(address[])ownerRegister single / batch addresses
remove(address)ownerRemove from whitelist
Compliance token (same logic as STT)
transfer(to, amount)both whitelistedrecipient unregistered or either frozen → reverts
mint(to, amount) / burn(amount)ownerMint / burn
freeze(addr) / unfreeze(addr) / frozen(addr)ownerCompliance freeze / unfreeze / status
forcedTransfer(from, to, amount)ownerForced transfer (court orders etc.)
pause() / unpause()ownerEmergency pause / resume all transfers
On-chain verification results (tested on deployment day, all passed)

SDK ExamplesSDK Examples

JavaScript · ethers v6
// npm i ethers ( or use this site's assets/ethers.umd.min.js)
import { ethers } from "ethers";

const provider = new ethers.JsonRpcProvider("…");
console.log("block:", await provider.getBlockNumber());

// Send SLN (MetaMask)
const signer = await new ethers.BrowserProvider(window.ethereum).getSigner();
const tx = await signer.sendTransaction({
  to: "0xrecipient address",
  value: ethers.parseEther("1.0")
});
console.log("tx:", tx.hash);

// Query STT balance
const stt = new ethers.Contract(
  "0x9182B8445614D76f8E30118c73256829a68e3516",
  ["function balanceOf(address) view returns (uint256)"],
  provider
);
console.log("STT:", ethers.formatUnits(await stt.balanceOf(signer.address), 18));
Python · web3.py
# pip install web3
from web3 import Web3

w3 = Web3(Web3.HTTPProvider("…"))
assert w3.is_connected()
print("block:", w3.eth.block_number)
print("balance:", w3.from_wei(w3.eth.get_balance("0xyour address"), "ether"), "SLN")

Issue Your TokenIssue compliance tokens

The official IdentityRegistry is whitelist-managed (official-only registration). To issue freely on testnet, use the self-deployment model: each issuer deploys their own IR + token pair, becomes the owner, and fully controls whitelists, minting and freezing.

Two ways to issue
  1. Web wizard (zero code) — open issuance platform,, connect a wallet and complete in one click: deploy your own IdentityRegistry → deploy the token → whitelist issuer and recipient → mint the initial supply. Four on-chain transactions in total.
  2. Programmatic deployment — Contract ABIs and bytecode are hosted at assets/solon-contracts.js(solc 0.8.26,evmVersion=london),deploy with ethers ContractFactory . ⚠️ When deploying, make sure to set the EVM version to london(cancun — this chain does not yet support the cancun PUSH0 opcode)。

InfrastructureNode info

Solon The testnet runs a dual-validator architecture: Singapore and Seoul seal blocks in turn, and the chain survives either node going down.

nodeRole
SingaporeBlock producer · faucet service
SeoulBlock producer · portal / RPC entry

On testnet the RPC is open for writes; before mainnet we will narrow management namespaces and open node applications.

Emergency PlaybookEmergency Playbook

Response procedures paired with the monitoring system (P1/P2/P3 tiered alerts) — every alert tier has a runbook; the status page evaluates the current tier in real time.

P1 · Critical (respond immediately, within 15 min)
ScenarioResponse steps
Single validator offline1) Confirm on the status page that the other validator keeps sealing (Clique fault tolerance — chain never stops) → 2) check the offline node's container and disk → 3) restart the container and watch it resync → 4) clear the alert once caught up
Sealing stalled > 30s1) Cross-check peer connectivity → 2) check validator unlock status and system time (NTP drift is the top cause of Clique stalls) → 3) restart the lagging node if needed → 4) announce to users
Abnormal bridge fund flow1) Multisig committee immediately executes setPaused(true) to halt the bridge (2-of-3 threshold, fully on-chain trail) → 2) freeze the abnormal addresses (compliance console) → 3) issue an incident report
P2 · Major (respond within 1 hour)
ScenarioResponse steps
Validator height gap > 10 blocksCheck the lagging node's network and disk IO; if it keeps widening, follow the P1 single-validator-offline runbook
Block interval P95 > 5sCheck validator load; expected during transaction bursts — investigate peer quality if it persists for 1 hour
Bridge pool liquidity lowWhen the fast-bridge pool falls below 20% of the daily limit, top it up from the treasury via a multisig proposal
P3 · Notice (handle same-day) & drills
ItemNotes
RPC latency > 1500msCheck Seoul gateway load; institutional users may switch to direct node RPC
Quarterly DR drillQuarterly single-region outage simulation: stop one validator and verify the chain keeps sealing, the status page shows the degraded banner, and tiered alerts fire correctly
Key rotationMultisig committee keys rotate every 6 months: add-member proposal → remove-member proposal → small treasury test payout

Compliance & Dual ProofCompliance: Dual Proof & Fraud Response

Solon's compliance has two layers: off-chain — regulatory approval & filing, audit and custody, legal opinions (the root of trust); on-chain — file-hash attestation, multi-sig feeds, automatic risk control (the verifiable proof). The chain enforces rules, it does not discover facts: it never auto-audits off-chain assets. Fraud is disproved and penalized by regulators (SFC / AFRC / HKMA / CCB / ICAC) and the judiciary; the chain delivers second-level stop-loss and evidence preservation.

Compliance panorama →Fraud response chain →PoR console →Dual-proof view →Asset disclosure example (GLD) →