Zecnero

JSON API

Testnet

A public, read-only JSON API over the chain this explorer has indexed. Every answer is the explorer's own JSON, built from its index: nothing is passed through from the node, and no request reaches the node. Amounts are integers in nero (1 ZMR = 100,000,000 nero), with a _zat suffix; hashes are lowercase hex.

Rules

GET /api/stats

The indexed tip, the hashrate over the last 120 blocks (with the window it was worked out over), the next block's difficulty and the hashes it takes, the supply mined so far against the total the schedule will ever issue, and the founder stream rule.

curl https://explorer.zecnero.org/api/stats

{
  "network": "testnet",
  "height": 1200,
  "tip_hash": "…",
  "tip_time": 1790300000,
  "hashrate": {
    "hashes_per_second": 1234.5,
    "window_blocks": 120,
    "first_height": 1081,
    "last_height": 1200,
    "window_seconds": 9000
  },
  "difficulty": {
    "value": 1.0,
    "unit": "multiple of the minimum difficulty (PoWLimit)",
    "expected_hashes_per_block": 1048576.0,
    "tip_bits": "1e100000",
    "tip_target": "0000100000000000000000000000000000000000000000000000000000000000"
  },
  "supply": {
    "mined_zat": 750000000000,
    "total_zat": 2099999356520000,
    "mined_zmr": "7500",
    "total_zmr": "20999993.5652",
    "mined_percent": 0.036,
    "halving_interval": 1680000
  },
  "founder_stream": { "percent_of_subsidy": 3, "end_height": 1680000 }
}

hashrate is null until there are two blocks with different times. Difficulty is how much harder a block is to find than at the network's easiest target, so it is a pure multiple; expected_hashes_per_block is what it means in RandomX hashes.

GET /api/block/{height|hash}

curl https://explorer.zecnero.org/api/block/822
curl https://explorer.zecnero.org/api/block/<64 hex digits>

{
  "height": 822,
  "hash": "…",
  "previous_hash": "…",
  "time": 1790290000,
  "size": 314,
  "difficulty": 1.0,
  "bits": "1e100000",
  "target": "0000100000…",
  "confirmations": 379,
  "coinbase": {
    "subsidy_zat": 625000000,
    "miner": { "address": "nm…", "amount_zat": 606250000 },
    "fees_zat": 0,
    "founder": { "address": "n2…", "amount_zat": 18750000 },
    "founder_required_zat": 18750000
  },
  "txids": ["…"]
}

founder is null where the block pays no founder stream (genesis, and from height 1,680,000 on Mainnet and Testnet). The founder stream is floor(subsidy × 3 / 100); the miner receives the rest of the subsidy plus the block's fees.

GET /api/tx/{txid}

curl https://explorer.zecnero.org/api/tx/<64 hex digits>

{
  "txid": "…",
  "kind": "transparent",
  "block_height": 822,
  "block_hash": "…",
  "time": 1790290000,
  "confirmations": 379,
  "size": 288,
  "fee_zat": 10000,
  "transparent_input_count": 1,
  "transparent_output_count": 2,
  "transparent_inputs": [{ "n": 0, "address": "nm…", "value_zat": 606250000 }],
  "transparent_outputs": [{ "n": 0, "address": "nm…", "value_zat": 500000000 }, …],
  "transparent_value_out_zat": 606240000,
  "sapling_spends": 0,
  "sapling_outputs": 0,
  "orchard_actions": 0
}

kind is coinbase, shielded or transparent. A coinbase's outputs carry a role of miner or founder. A shielded transaction has empty input and output lists, a null value and fee, and its counts.