Integer conservation.
For each supplied row, miner paid + unused escrow + burned equals escrow. Amounts stay as integer strings. Block order is also checked.
minerPaid + unusedEscrow + burned = escrowFLOP for Kestra alpha
Read the devnet. Check settlement arithmetic. Pass dated outputs to the next task in your Kestra flow.
No FLOP key needed for the read-only flow.
Inspect the flow
Choose a node to see its task YAML and recorded output. The line tracks reading progress, not execution.
Separate flows · different evidence
Read the indexer's block height, accounts, active operators and proof count. Each output carries its source and measurement time.
- id: stats
type: io.kestra.plugin.flop.network.StatsFull task output. Zero operators and proofs are reported values from this capture.
A bounded read
Returned rows / reported tape total
100 / 336Source: https://mcp.flop.network/mcp#flop_list_settlements
. The feed can move between pages.
For each supplied row, miner paid + unused escrow + burned equals escrow. Amounts stay as integer strings. Block order is also checked.
minerPaid + unusedEscrow + burned = escrowThese checks do not verify inference, proofs, signatures, chain inclusion, finality or indexer truth. A PASS applies only to the returned rows.
Read the verification limits ↗Bring it to your Kestra instance
Build the plugin with Java 21 in Docker, install the JAR and restart Kestra. Paste this flow into the editor. Each network task returns its time, source and request count.
Execution 3F4DXszdAcK2iyIVBRarwv
The JSON is an excerpt of the local Kestra run, not a signed receipt.
# SPDX-License-Identifier: Apache-2.0
id: flop_observe
namespace: company.flop
tasks:
- id: stats
type: io.kestra.plugin.flop.network.Stats
- id: tape
type: io.kestra.plugin.flop.settlements.List
maxResults: 100
store: true
- id: verify
type: io.kestra.plugin.flop.settlements.Verify
settlements: "{{ outputs.tape.rows }}"
failOnMismatch: true
- id: models
type: io.kestra.plugin.flop.models.List