BUILD WITH MONZERO
Developer resources
Start with the source and the website's bounded, read-only observations. This documentation describes the local website implementation; deployment of the new contracts to monzero.org is pending.
Source and protocol
- Official source repository
- Protocol whitepaper
- Coordinated vulnerability disclosure
- Reviewed contribution tasks
Use the source matching the wallet or daemon version you integrate. Website observations are not consensus validation and cannot establish transaction finality.
Recent mainnet block observations
GET /stats/api.php returns the monzero-chain-charts-v2 schema. It has no query parameters. The adapter checks a complete, linked window of up to 720 recent headers against its configured node's reported tip.
curl --fail-with-body http://127.0.0.1:8765/stats/api.phpThis example targets the local preview, which queries the public mainnet node at node.monzero.org:6175 when its cache needs refreshing. It does not contact a testnet or start mining.
| Field | Meaning |
|---|---|
| schema, network | monzero-chain-charts-v2 and mainnet |
| generated_at | Unix observation time in seconds; use it to assess freshness. |
| height | Reported chain height; the last returned block height is height − 1. |
| synchronized | Whether the source node reports synchronization. Even true does not independently prove it is on the current network tip. |
| target_seconds | 120; estimated hashrate is difficulty divided by this target. |
| blocks | Ordered records with height, timestamp, difficulty and transactions. Transactions exclude the miner reward. |
Block timestamps are miner-set. They can move backwards and are not arrival timestamps. Numeric observations must fit safe integers; unsupported values are rejected rather than rounded.
Successful responses have a short cache lifetime. Failed refreshes do not return stale success. Handle 502/503 responses as unavailable, respect Retry-After when present, and poll no faster than once per minute. Unsupported methods return 405 with Allow: GET. A single node's answer does not measure unique users, total nodes or decentralization.
Historical observations
GET /network/data/{range}.json accepts the fixed filenames 24h, 7d, 30d, 90d, 1y and all. Files use monzero-network-history-v1 and contain at most 721 aggregation buckets.
Each file includes its generation time, archive observation bounds, a sources array (empty for an empty archive), bucket width and points. Points contain sample/synchronization counts, difficulty and estimated hashrate means, exact decimal-string difficulty extrema, observed height bounds and tip-age bounds. Means are per observation, not time-weighted.
Missing periods are not filled. The archive records the tip of the website adapter's observation when collected, at most once per minute. Observations can be up to five minutes old at collection. These records are not rewritten after reorganizations. A recent export can still contain old observations: inspect both timestamps. Missing files are unavailable, not an empty network.
Inspect network history and methodologyMining integrations
The pool dashboard uses a fixed pool adapter and public-address lookup. Reported payouts mean the pool marked them sent; the website does not verify confirmations. The existing site adapter is POST /mining/dashboard/api.php. It accepts a JSON object with exactly one field, address, and a body no larger than 2,048 bytes. It rejects query parameters and browser requests marked cross-site. Address length/alphabet checks are an input boundary, not checksum verification. Use a public mining address only; never send a seed or private key.
fetch('/mining/dashboard/api.php', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({address: publicMiningAddress})
})This same-origin example requires your own public mining address in publicMiningAddress. A lookup sends that address to the configured pool. The site adapter returns Cache-Control: no-store; your application should avoid storing address-linked responses without explicit consent.
Successful responses use monzero-pool-miner-view-v1. observed_at is the adapter observation time; upstream generation time is unavailable. hashrate_hps is the pool's ten-minute estimate. pending_atomic, paid_atomic and payment amount_atomic values are decimal strings: divide by 100,000,000,000 to express XMZ, using exact decimal/integer arithmetic.
workers and payments can be null when unavailable. Null is not zero. Worker display names are generated connection labels; optional opaque label IDs are not proof of a unique person or machine. Payment records include a transaction ID, pool timestamp and pool-reported-sent status; confirmations is null. Share counts, worker uptime and historical hashrate are not supplied.
The adapter currently limits valid lookups to ten per client and sixty in total per approximately one-minute state window, including failed upstream lookups and cached responses. Reverse-proxy client-address configuration affects who shares a client limit. A 429 response carries Retry-After: 60. Other responses include 400 for invalid input, 403 for cross-site requests, 405 for unsupported methods, 413 for oversized bodies and 502/503 for unavailable or busy lookups. These are existing website-adapter conventions, not a versioned public API guarantee.
The benchmark catalog distinguishes reviewed measurements from community estimates. An empty catalog means no records have been published, not that mining is unsupported.
Existing explorer adapter
POST /explorer/api.php accepts a JSON object with an action field. The existing explorer uses this allowlist; clients cannot supply arbitrary RPC method names or node URLs. This adapter is not yet the hardened, versioned API planned below.
| Action | Parameters and response |
|---|---|
| info | No additional fields; returns the configured node's get_info response. |
| blocks | Optional limit, default 15 and capped at 25. Returns info and headers in newest-first order. |
| block | A nonnegative height or a 64-character hexadecimal block hash. Returns the node's get_block result. |
| transaction | A 64-character hexadecimal hash. Returns get_transactions data; absent transaction data yields HTTP 404. |
| pool | No additional fields; returns the transaction pool, not mining-pool statistics. |
| assets | Optional offset and count; count defaults to 25 and is capped at 100. The local adapter rejects RPC failures and malformed registry observations as unavailable; it does not infer unsupported features or an empty registry from a failure. |
| asset | A 64-character hexadecimal asset_id. Searches the first 1,000 asset records and returns up to 100 outputs. A not-found response is not proof that no such asset exists beyond that search window. |
fetch('/explorer/api.php', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({action: 'blocks', limit: 10})
})Responses use Cache-Control: no-store. Unsupported methods return 405, invalid requests or unknown actions return 400, selected not-found results return 404, and uncaught node failures return 502. Some results retain upstream fields rather than a stable website response schema. Do not infer finality, feature activation or a complete asset inventory from these presentation responses.
Before offering this route as a supported public integration API, request/response bounds, strict numeric inputs, throttling and source validation need further hardening. Avoid aggressive polling and do not build payment acceptance around this adapter.
Wallet and payment integration
The merchant integration guide covers a self-hosted, view-only wallet setup: per-invoice subaddresses, monzero: payment links, confirmation tracking, expiry and signed callbacks. The payment request tool validates addresses (base58, Keccak checksum, network prefix and public keys) and builds links in the browser, matching the wallet's make_uri/parse_uri. Do not treat public balance disclosures or pool payout reports as payment confirmation. No browser wallet, key collection, transaction signing or custodial payment service is provided here.
API and network roadmap
The read-only, rate-limited API v1 under /api/v1/ provides network statistics, recent and individual block headers, pools, benchmarks, exchange records and the ecosystem directory. It uses fixed node methods only; this site does not provide an unrestricted daemon RPC proxy. Transaction lookup and historical aggregates are not part of v1 yet.
The examples above use mainnet observations. Testnet connection details are not published here until verified and will be clearly separated from mainnet instructions.
Follow implementation and verification progress