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.
| Parameter | Value |
|---|---|
| Network name | Solon Chain Testnet |
| RPC Address | … |
| Chain ID | 51051(hex 0xC76B) |
| Token symbol | SLN · 18 decimals · test token, no value |
| Block / consensus | 1 s · Clique PoA · EVM London |
| Block Explorer | Solon Explorer |
/solonrpc/, and eth_chainId should return 0xC76B.london), or follow the issuance guide to deploy your own compliance token.Standard Ethereum JSON-RPC interface, supporting the eth_* / net_* / web3_* / txpool_* namespaces.
# 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 -X POST … \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getBalance",
"params":["0xyour address","latest"],"id":1}'
Semantics are identical to Ethereum mainnet RPC — any code that works against a public Ethereum RPC runs on Solon by changing one URL.
| Method | Type | Notes |
|---|---|---|
| eth_* · Chain data & transactions | ||
eth_chainId / eth_blockNumber | Read | Chain ID (0xC76B) / latest block height |
eth_getBalance / eth_getTransactionCount / eth_getCode / eth_getStorageAt | Read | Balance / nonce / contract bytecode / storage slot |
eth_getBlockByNumber / eth_getBlockByHash | Read | Block details (incl. transaction list) |
eth_getTransactionByHash / eth_getTransactionReceipt | Read | Transaction details / receipt (status, gas, logs) |
eth_call / eth_estimateGas | Read | Local simulation (no transaction) / gas estimation |
eth_sendRawTransaction | Write | Broadcast a signed transaction (the only write method — keys never touch the network) |
eth_getLogs / eth_getFilterChanges and the filter family | Read | Event log queries (filter by address / topics) |
eth_gasPrice / eth_feeHistory / eth_syncing | Read | Gas price / fee history / sync status |
| net_* / web3_* / txpool_* · Node & utilities | ||
net_version / net_peerCount / net_listening | Read | Network ID (51051) / peer count / listening status |
web3_clientVersion / web3_sha3 | Read | Node version / Keccak-256 hash utility |
txpool_content / txpool_status | Read | Txpool contents / queued & pending counts |
⚠️ Administrative namespaces (admin_* / personal_* / miner_*) are not exposed publicly and will be further restricted before mainnet.
Three families: JSON-RPC protocol errors (Ethereum standard), contract reverts (Solon compliance logic), and proof-of-reserve gate reason codes (SolonProof, 9 codes).
| Code | Meaning & troubleshooting |
|---|---|
| JSON-RPC standard errors | |
| -32700 | Parse error — request body is not valid JSON |
| -32600 | Invalid Request — missing jsonrpc:"2.0" or malformed structure |
| -32601 | Method not found — misspelled method, or the namespace is not exposed (e.g. admin_*) |
| -32602 | Invalid params — wrong count / type / block tag |
| -32000 | Server 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 verified | Recipient (or sender) not on the IdentityRegistry whitelist → complete KYC registration first |
frozen | Address is compliance-frozen; all transfers in and out are blocked |
paused | Contract is under emergency pause; wait for official resumption (see the status page) |
PUSH0-related | Unknown 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 / 1 | Manual pause — proactively paused by compliance, with an on-chain note |
| 2 | No proof registered — the asset has never submitted a reserve proof |
| 3 | Proof out of validity — outside the validFrom ~ validUntil window; proof must be renewed |
| 4 | Proof revoked — revoked by issuer or compliance; disclosed on the asset page |
| 5 | No attestation — multi-sig feed not yet reached (2-of-3 incomplete) |
| 6 | Audit failed — attestation conclusion is negative |
| 7 | Reserve ratio below threshold — measured ratio < the asset rule's minRatioBp |
| 8 | Risk alert — an attester raised riskFlag; preventive block |
Besides the web version, the faucet also exposes an HTTP API: 10 SLN per address every 24 hours.
curl -X POST … \
-H "Content-Type: application/json" \
-d '{"address":"0xyour address"}'
# success: {"ok":true,"tx":"0x…"} error: {"ok":false,"error":"…"}
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。
| Contract | Address |
|---|---|
| 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 |
| Contract | ABI file |
|---|---|
| IdentityRegistry | ir.json |
| Compliance token (shared by STT / GLD) | ct.json |
| SolonProof (proof of reserve) | proof.json |
| DividendPool | dividend.json |
| LimitBook | orderbook.json |
| SolonBridge | bridge.json |
| SolonOffering | offering.json |
| Oracle PriceFeed | feed.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.
| Method | Access | Notes |
|---|---|---|
| IdentityRegistry(whitelist) | ||
isVerified(address) | view | Whether an address is KYC-registered |
register(address) / registerBatch(address[]) | owner | Register single / batch addresses |
remove(address) | owner | Remove from whitelist |
| Compliance token (same logic as STT) | ||
transfer(to, amount) | both whitelisted | recipient unregistered or either frozen → reverts |
mint(to, amount) / burn(amount) | owner | Mint / burn |
freeze(addr) / unfreeze(addr) / frozen(addr) | owner | Compliance freeze / unfreeze / status |
forcedTransfer(from, to, amount) | owner | Forced transfer (court orders etc.) |
pause() / unpause() | owner | Emergency pause / resume all transfers |
// 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));
# 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")
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.
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)。Solon The testnet runs a dual-validator architecture: Singapore and Seoul seal blocks in turn, and the chain survives either node going down.
| node | Role |
|---|---|
| Singapore | Block producer · faucet service |
| Seoul | Block producer · portal / RPC entry |
On testnet the RPC is open for writes; before mainnet we will narrow management namespaces and open node applications.
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.
| Scenario | Response steps |
|---|---|
| Single validator offline | 1) 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 > 30s | 1) 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 flow | 1) 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 |
| Scenario | Response steps |
|---|---|
| Validator height gap > 10 blocks | Check the lagging node's network and disk IO; if it keeps widening, follow the P1 single-validator-offline runbook |
| Block interval P95 > 5s | Check validator load; expected during transaction bursts — investigate peer quality if it persists for 1 hour |
| Bridge pool liquidity low | When the fast-bridge pool falls below 20% of the daily limit, top it up from the treasury via a multisig proposal |
| Item | Notes |
|---|---|
| RPC latency > 1500ms | Check Seoul gateway load; institutional users may switch to direct node RPC |
| Quarterly DR drill | Quarterly 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 rotation | Multisig committee keys rotate every 6 months: add-member proposal → remove-member proposal → small treasury test payout |
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) →