• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

iotaledger / iota / 29298811321
69%

Build:
DEFAULT BRANCH: develop
Ran 14 Jul 2026 02:28AM UTC
Jobs 1
Files 1121
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

13 Jul 2026 04:31PM UTC coverage: 68.351% (+0.02%) from 68.327%
29298811321

push

github

web-flow
fix(core): amortize checkpoint interval over a sliding window (#12118)

# Description of change

Checkpoint creation rate regressed after sliding-window block creation
(#11790) raised the block/commit rate: block rate rose to the 20 b/s
ceiling but checkpoint rate fell (~4.85 → ~4.25 c/s, worst on large
committees).

`min_checkpoint_interval_ms = 200` caps the checkpoint rate to bound the
storage and bandwidth cost of creating, certifying, and syncing
checkpoints; the rate also drives end-to-end latency for consumers that
wait on verified checkpoints. This PR keeps the same ~5 c/s asymptotic
cap while restoring the rate to it under the relaxed block-creation
rules.

## Root cause

`maybe_build_checkpoints` gated each checkpoint on the previous one,
then advanced the anchor to the *actual* triggering commit timestamp:

```
build when  current_commit_ts >= last_checkpoint_ts + min_checkpoint_interval_ms
then        last_checkpoint_ts = current_commit_ts
```

Commit timestamps are discrete, so the trigger overshoots the deadline
every time. Anchoring on the actual timestamp makes every checkpoint pay
that overshoot, pushing sustained spacing above `interval` — worse as
higher block rates coarsen the timestamp grid.

## Fix

Keep the strict adjacent check and add a windowed one; checkpoint `k`
builds when **either** holds:

```
adjacent:  current_commit_ts >= timestamp(checkpoint k−1) + interval
windowed:  current_commit_ts >= timestamp(checkpoint k−N) + N * interval
```

The windowed arm amortizes the overshoot over `N` checkpoints (paid once
per window, not per checkpoint), restoring the rate to the ceiling; the
adjacent arm keeps every gap — hence every coalesced checkpoint — within
one interval, avoiding the burst-then-jumbo clustering a window-only
rule drifts into. Both arms consume ≥ one interval of commit time per
checkpoint, so the sustained ~5 c/s cap is preserved. `N` is the new
protocol parameter `checkpoint_rate_window_size`.

## Determinism
... (continued)

163752 of 239575 relevant lines covered (68.35%)

456938.26 hits per line

Coverage Regressions

Lines Coverage ∆ File
294
82.25
-0.02% crates/iota-core/src/authority.rs
283
69.75
0.03% crates/iota/src/client_commands.rs
238
70.16
0.2% external-crates/move/crates/move-package/src/resolution/dependency_graph.rs
232
44.79
-0.03% crates/iota-replay/src/replay.rs
193
73.55
-1.57% crates/test-cluster/src/lib.rs
180
0.0
0.0% crates/iota-open-rpc/src/examples.rs
127
90.96
-0.08% crates/iota-core/src/authority/authority_per_epoch_store.rs
118
70.84
0.33% crates/iota-core/src/authority/authority_store.rs
101
0.0
0.0% crates/iota-indexer/src/ingestion/primary/prepare.rs
100
53.76
9.32% external-crates/move/crates/move-package/src/resolution/dependency_cache.rs
99
0.0
0.0% crates/iota-indexer/src/historical_fallback/client.rs
87
78.05
0.0% crates/iota-core/src/execution_cache.rs
81
0.0
0.0% crates/iota-indexer/src/apis/write_api.rs
75
0.0
0.0% crates/iota-storage/src/http_key_value_store.rs
74
7.8
0.0% crates/iota-indexer/src/types.rs
71
0.0
0.0% crates/iota-indexer/src/historical_fallback/reader.rs
66
0.0
0.0% crates/iota-indexer/src/apis/read_api.rs
64
80.5
0.0% iota-execution/latest/iota-adapter/src/execution_engine.rs
59
91.58
-0.05% crates/iota-core/src/execution_cache/writeback_cache.rs
59
16.04
0.0% crates/iota-replay/src/lib.rs
52
75.5
0.0% crates/iota-snapshot/src/reader.rs
49
79.37
1.05% crates/iota-sdk/src/lib.rs
49
77.27
-1.07% crates/iota-sdk/src/wallet_context.rs
49
83.55
0.0% crates/iota-transaction-checks/src/lib.rs
46
65.67
0.0% crates/iota-types/src/storage/mod.rs
41
84.83
0.0% iota-execution/latest/iota-adapter/src/temporary_store.rs
38
50.85
0.0% crates/iota-sdk/src/apis/read.rs
37
92.69
-0.03% crates/iota-core/src/authority/consensus_quarantine.rs
37
89.76
3.34% crates/iota-core/src/grpc_indexes.rs
36
79.57
0.33% crates/iota-sdk/src/iota_client_config.rs
32
79.68
-0.14% crates/iota-types/src/object.rs
29
78.87
0.0% iota-execution/latest/iota-move-natives/src/object_runtime/object_store.rs
24
97.03
0.0% crates/iota-core/src/authority/shared_object_congestion_tracker.rs
24
92.04
-0.05% crates/iota-core/src/transaction_driver/effects_certifier.rs
24
89.59
-0.88% crates/iota-protocol-config/src/lib.rs
23
71.43
0.0% crates/iota-types/src/move_authenticator.rs
22
59.26
0.0% crates/iota/src/signing.rs
21
0.0
0.0% crates/iota-graphql-rpc/src/test_infra/cluster.rs
21
66.82
0.0% crates/iota-json-rpc/src/authority_state.rs
21
89.71
0.0% iota-execution/latest/iota-move-natives/src/object_runtime/mod.rs
20
0.0
0.0% crates/iota-replay/src/types.rs
18
87.41
0.0% crates/iota-transactional-test-runner/src/args.rs
17
85.22
-4.14% iota-execution/latest/iota-move-natives/src/protocol_config.rs
16
84.06
-0.25% crates/iota-types/src/auth_context/fields_v1.rs
14
88.09
0.0% crates/iota-grpc-server/src/changes.rs
14
94.57
0.0% crates/iota-single-node-benchmark/src/benchmark_context.rs
14
93.78
0.0% iota-execution/latest/iota-move-natives/src/test_scenario.rs
13
73.05
1.29% crates/iota-types/src/iota_serde.rs
12
88.98
2.65% crates/iota-test-transaction-builder/src/lib.rs
12
93.77
-0.49% crates/starfish/core/src/authority_service.rs
10
94.05
0.0% crates/iota-json-rpc/src/balance_changes.rs
10
95.58
0.23% crates/iota-json-rpc-types/src/iota_primitives.rs
8
95.02
0.0% crates/iota-types/src/move_package.rs
7
58.97
0.0% crates/iota-cluster-test/src/cluster.rs
7
39.29
0.0% crates/iota-graphql-rpc/src/types/uint53.rs
7
91.5
-0.32% crates/starfish/core/src/header_synchronizer.rs
7
94.48
-0.52% crates/starfish/core/src/transactions_synchronizer.rs
6
95.92
0.09% crates/iota-cluster-test/src/lib.rs
6
97.44
0.0% crates/iota-json-rpc/src/coin_api.rs
6
74.89
-0.29% crates/iota-network/src/randomness/mod.rs
6
88.03
0.0% iota-execution/latest/iota-adapter/src/execution_value.rs
6
99.45
0.01% iota-execution/latest/iota-move-natives/src/lib.rs
4
88.73
0.0% crates/iota-types/src/gas_coin.rs
3
92.55
-2.1% crates/iota-cluster-test/src/test_case/coin_index_test.rs
3
80.61
0.42% crates/iota-core/src/checkpoints/mod.rs
3
78.68
-0.41% crates/iota-core/src/traffic_controller/mod.rs
3
77.05
-4.92% crates/iota-core/src/traffic_controller/nodefw_test_server.rs
3
88.46
-3.85% crates/iota-genesis-builder/src/stardust/types/address_swap_split_map.rs
3
46.9
-2.65% crates/iota-genesis-builder/src/stardust/types/snapshot.rs
3
79.46
-2.68% crates/iota-genesis-builder/src/validator_info.rs
3
75.73
-2.91% crates/iota-grpc-server/src/server.rs
3
72.2
-0.62% crates/iota-swarm/src/memory/swarm.rs
3
85.11
0.0% crates/simulacrum/src/store/mod.rs
2
96.3
-0.32% crates/iota-core/src/overload_monitor.rs
2
97.4
0.03% crates/iota-move/src/unit_test.rs
2
92.19
0.0% crates/iota-types/src/execution.rs
2
91.36
-0.41% crates/transaction-fuzzer/src/transaction_data_gen.rs
1
84.54
0.11% crates/iota-node/src/lib.rs
1
97.56
0.0% crates/iota-single-node-benchmark/src/tx_generator/move_tx_generator.rs
1
99.6
-0.0% crates/iota-types/src/effects/test_effects_builder.rs
Jobs
ID Job ID Ran Files Coverage
1 nextest+simtest - 29298811321.1 14 Jul 2026 02:28AM UTC 1121
68.35
GitHub Action Run
Source Files on build 29298811321
  • Tree
  • List 1121
  • Changed 150
  • Source Changed 126
  • Coverage Changed 102
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #29298811321
  • 977994b8 on github
  • Prev Build on develop (#29217649699)
  • Next Build on develop (#29381900237)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc