ONX Explorer

Open Network X · native currency Onyx

Source

Not connected. Nothing loaded.

Without wiring, you can open the files a node writes (onx-data/blocks/ and genesis.boc) or drop them anywhere on this page. Files stay in your browser.

How this page verifies

Everything runs in your browser. This page is one HTML file with no external scripts, fonts or trackers, and it makes no network requests until a source is wired in for the selected network. Read the source in order: the wiring (ONX_CONFIG), the source adapters, the verification core, then the interface.

Checked here
CheckRuleWhere the rule comes from
File structureMagic ONXBLK04, a 148-byte header, length-prefixed messages, a message count that matches the header, no trailing bytes. A file is accepted here exactly when onx replay would decode it.crates/tooling/onx/src/blockfile.rs
Message structureKind 0 (transfer) or 1 (contract call), payload of at most 65,535 bytes, no payload on transfers.docs/adr/0002, onx-stf/src/message.rs
HashesSHA-256 over a 32-byte zero-padded domain tag followed by the bytes: block hash ONX_BLOCK_HDR_V1, message hash ONX_MSG_EXT_V1, message root ONX_MSGS_ROOT_V1.docs/specification/protocol-primitives.md §4.5
Chain linksEach prev_hash is the hash of the previous block, logical time strictly increases, and the workchain never changes.onx-stf/src/stf.rs (apply_block)
Chain IDThe genesis hash (ONX_GENESIS_V1) equals block 1's prev_hash and the chain_id signed into every message.docs/adr/0005
SignaturesEd25519 over pad32("ONX_MSG_EXT_SIGN_V1") ‖ body. The key comes from genesis.boc or from the sender's first-spend key reveal, which must hash to the sender's address (ONX_ADDR_V1).docs/adr/0005, docs/adr/0006
NoncesEach sender's nonces run 0, 1, 2, … with no gap or repeat. Fully checkable when genesis.boc and every block from 1 are loaded.docs/adr/0007
Stateless wallet rulesTransfers move a non-zero amount, contract calls pay a non-zero fee, and amount plus fee fits in 128 bits.onx-stf/src/stf.rs (wallet_receive)
Execution resultsBlock hashes and state roots compared with onx replay output that you paste.crates/tooling/onx/src/main.rs
Not checked here
  • Balances, whether a sender could afford a message, deliveries, bounces and contract execution. Block files carry no receipts, so these need execution.
  • State roots, unless you paste onx replay output. Run onx replay --genesis <genesis.toml> --blocks <blocks dir> --data-dir <empty dir> on your own machine.
  • Ed25519 edge cases. The node verifies with ed25519-dalek verify_strict, which also rejects small-order keys. Your browser applies standard RFC 8032 verification. For any block the node accepted, the two agree.
  • Validator signatures and finality. ONX has no consensus layer yet: blocks come from a single producer.
Self-test

Before verifying anything, this page checks its own decoding and hashing against vectors that the ONX repository computed independently of the Rust code (Python with libsodium). If any of these fail, ignore every verdict on this page.

Wiring

Testnet and Mainnet start unwired: nothing is read and nothing is shown. To connect one, edit window.ONX_CONFIG, the first script in this file:

  • chainId: the network's genesis hash, 64 hex characters. onx-genesis prints it, and it is block 1's prev_hash. Data from any other chain is flagged.
  • source: { files: 'https://host/path/' } for a URL serving what onxd writes (genesis.boc, block-00000001.blk, …), or your own adapter with genesis(), block(seqno) and, optionally, latest(), each returning raw bytes. The contract is written out in the onx-sources script. A URL on another host must allow this page's origin (CORS).
  • pollSeconds: optional. How often to look for new blocks.
  • labels: optional names for known accounts, shown as off-chain names.

A source is never trusted. Every byte is verified here, so a source cannot alter a signed message or break a hash link without it showing. Until ONX has validator signatures, a source could still serve a different sequence of blocks; state roots are confirmed only against onx replay output.