LithosDocs
ProtocolPayoutsTokenStatsDocs
Start mining
Documentation home
Protocol
  • Lithos Protocol
  • LFSM
    • Rollups
    • NISPs
    • Emissions
    • Mining on Lithos
    • Candidate building
    • Ergo Voting
  • LithosDex
    • Trading with orders
    • Providing liquidity
Run Lithos
  • Startup guide
    • Setting up an Ergo testnet node
  • Configuration
    • Node connection and security
    • Stratum and difficulty
    • Block packages
    • Batching and orders
    • Collateral and emission
    • Wallet and consolidation
    • Statistics and web panels
    • Synchronization and storage
    • Tasks and dispatchers
    • Failure modes
    • Reporting issues
Client API
  • Overview
    • getLithos client information
    • getList UTXO ids for blocks
    • getUTXO ids by block height
    • getBlock info by UTXO id
    • postBlock info for multiple UTXO ids
    • getGet a block's miner set
    • getList all pool blocks
    • getGet Lithos payouts
    • getStatistics overview
    • getMining and payment totals
    • getMining statistics by hour or day
    • getEstimate Lithos hashrate
    • getNetwork difficulty by epoch
    • getThis client's own hashrate
    • getThis client's hashrate over time
    • getThis client's payouts and claims
    • getCollateral inventory
    • getLocal mining activity
    • getCollateral market snapshot
    • getList queue boxes
    • getList the active set
    • getPermit price history
    • getYour locked block rewards
    • postClaim unlocked block rewards
    • postQuote joining the queue
    • postJoin the collateral queue
    • getLithosDex pool state
    • getLithosDex fee vault state
    • getList your outstanding orders
    • postQuote a swap order
    • postPlace a swap order
    • postQuote a deposit order
    • postPlace a deposit order
    • postQuote a redeem order
    • postPlace a redeem order
    • postCancel an order
    • postQuote a swap
    • postQuote a swap by desired output
    • postExecute a swap
    • postQuote a liquidity deposit
    • postDeposit liquidity
    • postQuote a liquidity redemption
    • postRedeem liquidity
    • getList liquidity provisions
    • postClaim settled fees for a provision
    • postQuote a provision resize
    • postResize a provision
    • postCheck a pending fee flush
    • postFlush pending fees to the vault
    • getPool-wide fee history
    • getPool price history
    • getRecent pool activity
    • getFee history for one provision
    • getWallet balances and lending status
    • getGet Stratum information
    • getGet candidate settings
    • getGet difficulty commitment
    • postCommit a difficulty
    • getGet best NISP at height
Lithos

A decentralized mining pool protocol on Ergo. Miners build their own blocks; contracts pay them for proven work.

Live on Ergo mainnet
Protocol
  • How Lithos works
  • Mining on Lithos
  • NISPs
  • Emissions
  • LFSM contracts
Run Lithos
  • Startup guide
  • Configuration
  • LithosDex
  • Client API
  • Failure modes
Network
  • Live stats
  • Public stats API
  • Ergo Platform↗
  • SOAT Miner↗
Community
  • Telegram↗
  • X / Twitter↗
  • GitHub↗
Lithos
© 2026 Lithos Protocol. Open source under the MIT licence.λίθος — stone
Docs/Client API/Statistics

Statistics overview

get/stats

One snapshot of everything the collector tracks: the Stratum job being mined right now, DEX and storage collection status, and a short summary of recent mining and payment history.

Each section carries its own status and observation time. The active job is the last publication this client broadcast, which is not proof every worker received it. Payment totals here are gross — reward plus refunded bond — so use /stats/mining/totals when rewards and refunds have to be shown apart.

Responses

200The current snapshot, or the last one with a stale status.StatsView▶
  • enabledbooleanrequired
  • ▶
    localobjectrequired
    • ▶
      stratumStratumStatsViewrequired
      • statusstringrequired

        A stale snapshot can still show its last job. That job is not known to be live.

        one ofdisabledwaitingactivestalestopped
      • observedAtinteger · int64

        When the producer last reported, in Unix milliseconds. Periodic refreshes count.

      • connectedConnectionsintegerrequired

        Open Stratum connections, not unique miners.

      • ▶
        activeJobActiveStratumJob
        • jobIdstringrequired
        • heightintegerrequired
        • parentIdstringrequired
        • workMessagestringrequired

          Hex-encoded work message identifying the candidate.

        • publicationIdstring · uuidrequired
        • publishedAtinteger · int64required

          When the job was published, in Unix milliseconds. Periodic observations do not move it.

        • modestringrequired
          one ofsologenesisaugmented
        • ▶
          blockPackageBlockPackageView

          The transactions this client put into the job being served. The node can add mempool transactions on top that the client cannot see, so this is not the whole block. Expected revenue is what the package proposes to earn, not confirmed income, and the totals cover only the transactions whose size and cost are known — the rest report null.

          • genesisIdstringrequired
          • collateralBoxIdstringrequired

            The collateral box the genesis transaction spends.

          • lenderAddressstringrequired

            The collateral box's lender, who receives this block's coinbase.

          • collateralPriorityFeeNanoErgstringrequired

            nanoERG the collateral box carries above the principal floor. '0' means it was posted at the floor.

            decimal string
          • collateralFinderFeeNanoErgstringrequired

            The part of collateralPriorityFeeNanoErg the genesis transaction pays to this client's wallet: a fifth of it, or '0' when the genesis transaction has no finder output to carry it and it stays with the pool.

            decimal string
          • revisionintegerrequired
          • expectedRevenueNanoErgstringrequired

            nanoERG as a decimal string.

          • sourcesstring[]required

            Names of the subsystems that got at least one transaction into this package.

          • lateSourcesstring[]required

            Subsystems that missed the collection deadline, so nothing of theirs is in this package.

          • ▶
            transactionsPackageTransactionView[]required

            The genesis first, then the client's additions in order.

            • idstringrequired
            • kindstringrequired
            • sizeBytesintegerrequirednullable
            • coststringrequirednullable

              Execution cost as a decimal string, when it is known.

            • revenueNanoErgstringrequired

              Unspent nanoERG this transaction left for the holding top-up to collect. An output a later member of the package spent was carried forward rather than earned twice, so it is credited to neither and these sum to expectedRevenueNanoErg. Members that create no spendable output — the genesis, a carried mempool ancestor, the top-up itself — are zero, which is a fact about them rather than a missing value.

              decimal string
            • proofLeafMatchedbooleanrequired

              Whether this transaction's leaf matched one the node returned. It is a correspondence check, not full Merkle-proof validation. False on an ordinary member only means the match is unproven, not that the node dropped the transaction. False on the genesis or the holding top-up drops the package's extras, since everything else hangs off those two.

          • transactionScopestringrequired
            one ofclient-supplied
          • knownSizeBytesstringrequired

            Bytes across the transactions above, as an exact decimal integer.

          • knownCoststringrequired

            Validation cost across the transactions above, as an exact decimal integer.

          • allSizesKnownbooleanrequired
          • allCostsKnownbooleanrequired
          • blockMaxSizeBytesstring

            The node's active block size limit. Absent when its parameters could not be read, in which case the packing ran unbounded and there is no denominator to compare against.

            decimal string
          • blockMaxCoststring

            The node's active block cost limit. Absent on the same terms as blockMaxSizeBytes.

            decimal string
          • packageMaxSizeBytesstring

            The share of the block's size limit one Lithos package may occupy, which is the budget admission actually measured against. Space under the block limit but over this is left for the node to fill from its own mempool.

            decimal string
          • packageMaxCoststring

            The same share of the block's cost limit.

            decimal string
      • ▶
        difficultyStratumDifficulty

        The difficulties this stratum works with, each as a score — the number a diff setting names, as an exact decimal string. The configured diff is on /mining.

        • servedstringrequired

          What jobs are built on: the commitment in force, or the config diff when forcedConfig is true. A pending score higher than committed is served from two blocks before its declared height, 62 blocks before it binds, so the super shares its first rollups draw on are found at it.

          decimal string
        • advertisedstringrequired

          What mining software is sent. served times reductionMultiplier under reduced reporting, otherwise served. Equals superShare at a multiplier of 10000.

          decimal string
        • superSharestringrequired

          The difficulty a share must clear to count toward a NISP, 10,000 times served.

          decimal string
        • reducedReportingbooleanrequired

          Whether miners are sent advertised instead of served.

        • reductionMultiplierintegerrequired

          The factor advertised sits above served while reducedReporting is true. Only a multiplier of 10000 makes every share a miner sends a super share.

          one of10100100010000
        • forcedConfigbooleanrequired

          Whether forceConfigDiff makes the stratum serve the config diff instead of the commitment.

        • committedstring

          The committed score NISPs are judged against now. Absent until a commitment is in force or before the first read.

          decimal string
        • pendingstring

          A newer commitment still waiting out the NISP window. Absent when there is none.

          decimal string
        • pendingFromHeightinteger

          The height pending takes effect at.

        • checkedHeightinteger

          The chain height the commitments were last read at.

  • ▶
    dexDexStatsViewrequired
    • statusstringrequired

      Freshness only. Coverage is a separate question — read historyComplete and a graph's partial.

      one ofdisabledloadingreadystaleunavailable
    • updatedAtinteger · int64

      When the last successful refresh began, in Unix milliseconds, before it read the node.

    • sourceHeightinteger · int32
    • sourceBlockIdstring

      The chain tip checked before and after the read. Current price and activity can also include the mempool.

    • windowStartHeightinteger · int32

      Earliest height you can ask for, max(0, sourceHeight - 21600).

    • coverageStartHeightinteger · int32

      Oldest retained pool snapshot, including a predecessor where one exists.

    • historyCompleteboolean

      Whether the history read reached the start of the index, or a predecessor, before the requested window.

    • refreshingbooleanrequired
    • restoredbooleanrequired

      Loaded from disk. Stale until a node read succeeds, and never overwrites newer live data.

    • errorstring

      Short refresh failure message. Details stay in the client log.

  • ▶
    storageStatsStorageViewrequired

    Whether DEX snapshots are being saved. Mining history reports its own storage failures through mining.status.

    • statusstringrequired
      one ofdisabledloadingreadyerror
    • busybooleanrequired

      A write is running. No second writer starts until it finishes.

    • pendingbooleanrequired

      One newer snapshot is queued behind the running write.

    • lastSavedObservationAtinteger · int64

      Observation time of the last snapshot saved or restored, in Unix milliseconds.

    • lastPrunedAtinteger · int64

      Last successful pruning pass, in Unix milliseconds. A backlog can remain after one.

    • coalescedSnapshotsinteger · int64required

      Queued snapshots dropped in favour of a newer one since the client started.

    • errorstring

      Short storage failure message. Details stay in the client log.

  • ▶
    miningMiningStatsViewrequired

    A summary of canonical mining history, held in memory. Counts cover retained history, not everything that ever happened. Only ready has caught up to the checked chain tip; other statuses can hold older or partial data. A reorg removes the displaced contributions before the status goes back to ready.

    • statusstringrequired
      one ofdisabledloadingreadystaleunavailablecatching-uprecovering
    • observedAtinteger · int64

      When the last replay cycle started, in Unix milliseconds. Absent after a disk restore with no replay yet.

    • persistentbooleanrequired

      False when storage is off, in which case history lives only in process memory.

    • sourceHeightinteger

      Last processed height, or the starting anchor if nothing has been collected yet.

    • sourceBlockIdstring
    • targetHeightinteger

      Last checked chain height. It can run ahead of what is indexed and readable.

    • fromHeightinteger

      First retained height. Higher than sourceHeight while the history is empty.

    • fromTimestampinteger · int64

      Timestamp of the first retained block. Retention keeps a 256-block rollback buffer.

    • recentFromHeightinteger

      The recent lists below cover the latest 120 retained chain blocks, capped at 50 records each.

    • totalsScopestringrequired
      one ofretained-history
    • blockScopestringrequired

      Genesis transactions under this client's configured protocol contracts.

      one ofconfigured-protocol
    • paymentScopestringrequired
      one ofprimary-mining-address
    • paymentAmountScopestringrequired

      Payout amounts are gross — reward plus refunded bond plus any surplus. Not net earnings.

      one ofgross-output-including-bond-refund
    • ▶
      totalsMiningTotalsrequired
      • blocksinteger · int64required

        Distinct chain blocks in retained history that carried a Lithos genesis transaction.

      • paymentsinteger · int64required

        Payout outputs to the primary mining address in retained history.

      • grossPaidNanoErgstringrequired

        Exact decimal integer. Includes bond refunds and any surplus, so it is not net earnings.

    • ▶
      blocksLithosBlockRecord[]required

      Recent Lithos genesis records, newest first.

      • blockIdstringrequired
      • heightintegerrequired
      • timestampinteger · int64required
      • transactionIdstringrequired
      • holdingBoxIdstringrequired
      • collateralBoxIdstringrequired
      • collateralNanoErgstringrequired

        Exact value of the collateral box that was spent.

      • initialHoldingNanoErgstringrequired

        Exact value of genesis output zero, before any top-ups. Not the block's final revenue.

    • ▶
      paymentsMiningPaymentRecord[]required

      Recent confirmed payouts to this client, newest first. Wallet change and empty-tree drains are left out.

      • transactionIdstringrequired
      • outputIdstringrequired
      • payoutBoxIdstringrequired
      • rollupNftstringrequired

        NFT minted from the original collateral box id.

      • minedBlockIdstringrequired

        The block holding the rollup genesis, even when that block is older than retained history.

      • minedHeightintegerrequired
      • minedTimestampinteger · int64required

        Timestamp of minedBlockId, in Unix milliseconds. With timestamp, how long the payout took.

      • blockIdstringrequired

        The block holding this payout transaction.

      • heightintegerrequired
      • timestampinteger · int64required
      • grossNanoErgstringrequired

        Exact output value, including the refunded bond and any surplus.

    • difficultystringrequired

      Network difficulty at sourceHeight, as an exact decimal integer. For the curve over time use /stats/mining/difficulty.

    • errorstring

      Short failure message. Details stay in the client log.

← PreviousGet Lithos payoutsNext →Mining and payment totals
Request
curl -X GET "http://localhost:9000/stats"
Response
{
  "enabled": true,
  "local": {
    "stratum": {
      "status": "disabled",
      "observedAt": 0,
      "connectedConnections": 0,
      "activeJob": {
        "jobId": "string",
        "height": 0,
        "parentId": "string",
        "workMessage": "string",
        "publicationId": "string",
        "publishedAt": 0,
        "mode": "solo",
        "blockPackage": {
          "genesisId": "string",
          "collateralBoxId": "string",
          "lenderAddress": "string",
          "collateralPriorityFeeNanoErg": "0",
          "collateralFinderFeeNanoErg": "0",
          "revision": 0,
          "expectedRevenueNanoErg": "string",
          "sources": [
            "string"
          ],
          "lateSources": [
            "string"
          ],
          "transactions": [
            {
              "id": "string",
              "kind": "string",
              "sizeBytes": 0,
              "cost": "string",
              "revenueNanoErg": "0",
              "proofLeafMatched": true
            }
          ],
          "transactionScope": "client-supplied",
          "knownSizeBytes": "string",
          "knownCost": "string",
          "allSizesKnown": true,
          "allCostsKnown": true,
          "blockMaxSizeBytes": "0",
          "blockMaxCost": "0",
          "packageMaxSizeBytes": "0",
          "packageMaxCost": "0"
        }
      },
      "difficulty": {
        "served": "0",
        "advertised": "0",
        "superShare": "0",
        "reducedReporting": true,
        "reductionMultiplier": 10,
        "forcedConfig": true,
        "committed": "0",
        "pending": "0",
        "pendingFromHeight": 0,
        "checkedHeight": 0
      }
    }
  },
  "dex": {
    "status": "disabled",
    "updatedAt": 0,
    "sourceHeight": 0,
    "sourceBlockId": "string",
    "windowStartHeight": 0,
    "coverageStartHeight": 0,
    "historyComplete": true,
    "refreshing": true,
    "restored": true,
    "error": "string"
  },
  "storage": {
    "status": "disabled",
    "busy": true,
    "pending": true,
    "lastSavedObservationAt": 0,
    "lastPrunedAt": 0,
    "coalescedSnapshots": 0,
    "error": "string"
  },
  "mining": {
    "status": "disabled",
    "observedAt": 0,
    "persistent": true,
    "sourceHeight": 0,
    "sourceBlockId": "string",
    "targetHeight": 0,
    "fromHeight": 0,
    "fromTimestamp": 0,
    "recentFromHeight": 0,
    "totalsScope": "retained-history",
    "blockScope": "configured-protocol",
    "paymentScope": "primary-mining-address",
    "paymentAmountScope": "gross-output-including-bond-refund",
    "totals": {
      "blocks": 0,
      "payments": 0,
      "grossPaidNanoErg": "string"
    },
    "blocks": [
      {
        "blockId": "string",
        "height": 0,
        "timestamp": 0,
        "transactionId": "string",
        "holdingBoxId": "string",
        "collateralBoxId": "string",
        "collateralNanoErg": "string",
        "initialHoldingNanoErg": "string"
      }
    ],
    "payments": [
      {
        "transactionId": "string",
        "outputId": "string",
        "payoutBoxId": "string",
        "rollupNft": "string",
        "minedBlockId": "string",
        "minedHeight": 0,
        "minedTimestamp": 0,
        "blockId": "string",
        "height": 0,
        "timestamp": 0,
        "grossNanoErg": "string"
      }
    ],
    "difficulty": "string",
    "error": "string"
  }
}