Mining statistics by hour or day
/stats/mining/bucketsThe totals from /stats/mining/totals split into UTC hour or day buckets — the shape a
graph wants, for block counts, payments, fees, participation and difficulty. Buckets hold
exact sums and counts, so averages are yours to compute: chain.difficultySum / chain.blocks
for mean network difficulty, or batching.lithosdex.grossNanoErg / batching.lithosdex.orders
for the mean LithosDex executor fee. A zero denominator has no average.
from is inclusive, until is exclusive, both must sit on a boundary of the chosen
interval, and the range can cover at most 500 buckets. Buckets come oldest first, and a
missing one means nothing was retained for it. Past the reported coverage a gap means the
history is not available, not that nothing happened — check partial, retainedFrom and
source.timestamp, since the first and last bucket may also be incomplete.
The query reads collected history and never contacts the node. A busy or unavailable
history worker returns 503; retry after the delay it gives.
Query parameters
frominteger · int64requiredInclusive start in Unix milliseconds, on a UTC hour or day boundary to match
interval.untilinteger · int64requiredExclusive end in Unix milliseconds. On the same boundary, later than
from, and at most 500 intervals after it.intervalstringdefault "hour"hour | dayBucket size. Both range boundaries must be a whole number of these since the Unix epoch.
Responses
200Graph data for the requested range, with source status and coverage.MiningBucketHistory▶
▶
sourceMiningCursorrequiredThe processed chain point a statistics result was read from.
heightintegerrequiredblockIdstringrequiredparentIdstringrequiredtimestampinteger · int64requiredThe block's own timestamp in Unix milliseconds, not the time the client read it.
retainedFrominteger · int64Timestamp of the block before the first retained one. Absent when no block records remain.
frominteger · int64requiredThe inclusive start you asked for, in Unix milliseconds.
untilinteger · int64requiredThe exclusive end you asked for, in Unix milliseconds.
widthMsinteger · int64requiredone of360000086400000▶
bucketsMiningBucket[]requiredBuckets with retained activity, oldest first. Use the coverage fields to tell a gap in history from a quiet hour.
startinteger · int64requiredInclusive UTC bucket start in Unix milliseconds.
widthMsinteger · int64requiredBucket duration in milliseconds.
one of360000086400000totalsMiningAccountingMetricsrequiredExact sums and counts for the period, as decimal strings. A missing key means nothing was collected for it, which is not evidence that nothing happened outside the coverage. Amounts ending in
NanoErgare nanoERG and LIT amounts are base units. New keys get added over time, so ignore ones you do not recognise.Payout families hold
outputs,grossNanoErg,rewardNanoErg,bondNanoErg,surplusNanoErg,rewardLitandreceivedLit. Gross ERG is reward plus refunded bond plus any surplus.rewardLitis what the protocol owes;receivedLitis what the outputs actually carried. Network totals already contain the local ones — never add the two together.Batching families hold
orders,grossNanoErg,transactionFeeNanoErgandafterTransactionFeesNanoErg, counting recognised execution layouts only, not all pool activity. Gross is newly earned executor fees and excludes takings carried in from earlier. Liquidity-provider fees are a different thing and live on the DEX API.pool.batchingpays no transaction fee, so it holds onlyordersandgrossNanoErg. It andlocal.batchingnever count the same execution.Rollup families hold
count,miners,claimedScore,bondNanoErgandvalueNanoErg, pluslocalCount,localValueNanoErg,localBondNanoErgandlocalClaimedScorewhere the local miner is identifiable — the submitting miner for submissions, the prover input for fraud proofs. Sorollup.submission.localBondNanoErgis the bond this client posted, androllup.fraudProof.localValueNanoErgis the slashed bonds it was paid for proving fraud.minerscounts entries at that transition, not unique people.valueNanoErgmeans a different thing per kind: added holding value for a top-up, zero for a submission, the full box value at evaluation, the slashed bond for a fraud proof, and distributable ERG excluding bonds at payout readiness. These are stages of the same funds, so summing them is not income.transaction.<kind>coversgenesis, the rollup kinds above,payout,registration,ergodex,lithosdex,ergodexOtherPoolSpendandlithosdexOtherPoolSpend. Those fees overlap the block fee totals.Priority fees.
lithos.priorityFeeNanoErg / lithos.blocksis the mean fee across every Lithos block; divide bylithos.blocksWithPriorityFeeinstead for the mean across the blocks that carried one. The amount is the WHOLE fee the lender posted, not the share the block's finder keeps out of it. The pool's share went into the holding box and is already insideholding.genesisNanoErg, so there is deliberately no separate key for it.Divide a sum by its matching count for an average.
claimedScoreis protocol accounting, not measured hashrate. A transaction fee is a transaction's cost and not automatically this client's expense, holding top-ups and executor fees can describe the same proceeds, and no key here is a net-income figure.
partialbooleanrequiredTrue when retained coverage does not span the whole requested range, including when the history is empty.
statusstringrequiredHow far collection has got.
readymeans it reached the last checked chain tip.catching-upandrecoveringmean replay or reorg work is still running,stalemeans the last successful check is too old, andunavailablemeans collection failed. Ondisabledorloadingthe numbers are not evidence that the period was quiet.one ofdisabledloadingreadystaleunavailablecatching-uprecovering
400A timestamp is missing, malformed, off a bucket boundary, or the range is too long; or `interval` is not hour or day.ApiError▶
errorintegerrequiredError code
reasonstringrequiredError message explaining the reason of the error
detailstringrequirednullableDetailed error description
503History is loading, disabled, busy, or unreadable. Check `mining.status` in /stats before retrying.ApiError▶
errorintegerrequiredError code
reasonstringrequiredError message explaining the reason of the error
detailstringrequirednullableDetailed error description