Skip to content

Test partial fanout recovers funds with an unburned token - #2793

Draft
vrom911 wants to merge 1 commit into
masterfrom
vrom911/partial-fanout-burnt-tokens
Draft

Test partial fanout recovers funds with an unburned token#2793
vrom911 wants to merge 1 commit into
masterfrom
vrom911/partial-fanout-burnt-tokens

Conversation

@vrom911

@vrom911 vrom911 commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

  • CHANGELOG updated or not needed
  • Documentation updated or not needed
  • Haddocks updated or not needed
  • No new TODOs introduced or explained herafter

@github-actions

Copy link
Copy Markdown

Transaction cost differences

No cost or size differences found

@github-actions

Copy link
Copy Markdown

End-to-end benchmark differences

Comparing this PR (new) against master (old). Numbers come from cloud VMs, so changes under 5% are shown as and are likely run-to-run noise rather than a real regression or improvement. 🟢 = improvement, 🔴 = regression; uncolored rows are neutral measures reported for context.

Sustained load (3 nodes, 3x5000 txs)

Metric master PR Δ
End-to-end TPS (tx/s) 483.69 446.39 🔴 -37.30 (-7.7%)
Sustained TPS (tx/s) 902.35 914.02 ≈ +11.67 (+1.3%)
Backlog drain time (s) 30.30 32.90 🔴 +2.60 (+8.6%)
Snapshots per second (/s) 0.55 0.51 -0.04 (-7.3%)
Avg txs per snapshot 882.40 882.40 ≈ +0.00 (+0.0%)
Avg. Confirmation Time (s) 25.008 27.393 🔴 +2.386 (+9.5%)
P50 confirmation (s) 26.222 28.799 🔴 +2.577 (+9.8%)
P95 confirmation (s) 30.503 33.060 🔴 +2.557 (+8.4%)
P99 confirmation (s) 30.724 33.221 🔴 +2.498 (+8.1%)
Tx validation time p50 (s) 9.107 10.066 🔴 +0.959 (+10.5%)
Peak node RSS (MB) 432.90 428.50 ≈ -4.40 (-1.0%)
Invalid txs 0.00 0.00 ≈ +0.00 (n/a%)

Plateau 1000 UTxO (1 node, 4000 txs)

Metric master PR Δ
End-to-end TPS (tx/s) 246.70 231.40 🔴 -15.30 (-6.2%)
Backlog drain time (s) 16.10 17.20 🔴 +1.10 (+6.8%)
Snapshots per second (/s) 0.56 0.52 -0.04 (-7.1%)
Avg txs per snapshot 444.40 444.40 ≈ +0.00 (+0.0%)
Avg. Confirmation Time (s) 9.919 10.399 ≈ +0.481 (+4.8%)
P50 confirmation (s) 9.884 10.304 ≈ +0.420 (+4.3%)
P95 confirmation (s) 16.118 16.955 🔴 +0.837 (+5.2%)
P99 confirmation (s) 16.119 17.171 🔴 +1.051 (+6.5%)
Tx validation time p50 (s) 5.845 6.294 🔴 +0.449 (+7.7%)
Peak node RSS (MB) 382.90 339.40 -43.50 (-11.4%)
Invalid txs 0.00 0.00 ≈ +0.00 (n/a%)

Round-trip latency (3 nodes, closed-loop, 3x250 txs)

Metric master PR Δ
End-to-end TPS (tx/s) 105.33 101.81 ≈ -3.52 (-3.3%)
Sustained TPS (tx/s) 106.30 102.79 ≈ -3.51 (-3.3%)
Backlog drain time (s) 0.00 0.00 ≈ +0.00 (n/a%)
Snapshots per second (/s) 71.20 68.42 ≈ -2.78 (-3.9%)
Avg txs per snapshot 1.50 1.50 ≈ +0.00 (+0.0%)
Avg. Confirmation Time (s) 0.028 0.029 ≈ +0.001 (+3.5%)
P50 confirmation (s) 0.027 0.029 ≈ +0.001 (+4.4%)
P95 confirmation (s) 0.038 0.038 ≈ -0.000 (-1.0%)
P99 confirmation (s) 0.043 0.043 ≈ +0.000 (+0.5%)
Tx validation time p50 (s) 0.007 0.008 🔴 +0.000 (+5.5%)
Peak node RSS (MB) 149.30 149.20 ≈ -0.10 (-0.1%)
Invalid txs 0.00 0.00 ≈ +0.00 (n/a%)

@github-actions

Copy link
Copy Markdown

Transaction costs

Sizes and execution budgets for Hydra protocol transactions. Note that unlisted parameters are currently using arbitrary values and results are not fully deterministic and comparable to previous runs.

Metadata
Generated at 2026-07-27 14:47:45.60753262 UTC
Max. memory units 14000000
Max. CPU units 10000000000
Max. tx size (kB) 16384

Script summary

Name Hash Size (Bytes)
νHead f2dd4ade71e19c2310a86215aa78aea06463aca2d8b818af8dc1b8a4 12805
μHead 4abb8dedbcd6a6f03f4fe227300e2713d73b7680d47baa898b60d27a* 4971
νDeposit c78e8c9205721eb3ef4410f3db9c6169fa6db497c24641d29c20529c 1615
νCRS 09db7ee6cf7a4b358dd5c8a2f19d2c048336ffc5a01ef35a47ca7072 2736
  • The minting policy hash is only usable for comparison. As the script is parameterized, the actual script is unique per head.

Init transaction costs

Parties Tx size % max Mem % max CPU Min fee ₳
1 5476 9.59 3.16 0.49
2 5569 9.82 3.22 0.50
3 5668 10.14 3.31 0.51
5 5861 11.76 3.86 0.53
10 6341 14.08 4.58 0.58
50 10187 35.74 11.36 0.97
100 14983 61.95 19.55 1.45
114 16326 69.84 22.04 1.59

Cost of Increment Transaction

Parties Tx size % max Mem % max CPU Min fee ₳
1 2322 21.15 7.52 0.48
2 2450 22.13 8.50 0.50
3 2583 22.62 9.31 0.51
5 2850 25.12 11.45 0.56
10 3501 29.43 16.14 0.66
50 8745 71.14 55.87 1.51
75 12017 97.04 80.62 2.04

Cost of Decrement Transaction

Parties Tx size % max Mem % max CPU Min fee ₳
1 643 18.46 6.68 0.38
2 774 19.43 7.65 0.40
3 904 20.35 8.61 0.42
5 1167 22.28 10.56 0.46
10 1822 27.05 15.41 0.56
50 7063 68.08 54.89 1.41
75 10338 93.35 79.45 1.93

Close transaction costs

Parties Tx size % max Mem % max CPU Min fee ₳
2 800 18.74 12.64 0.43
10 1845 26.55 20.47 0.59
50 7094 67.23 59.94 1.44
74 10234 91.80 83.67 1.95

Contest transaction costs

Parties Tx size % max Mem % max CPU Min fee ₳
1 697 21.48 14.90 0.46
2 832 22.64 15.93 0.48
3 964 23.81 16.97 0.51
5 1226 26.05 19.01 0.55
10 1880 31.81 24.17 0.66
50 7126 79.97 65.85 1.58
66 9217 98.57 82.34 1.95

FanOut transaction costs

Involves spending head output and burning head tokens. Uses ada-only UTXO for better comparability.

Parties UTxO UTxO (bytes) Tx size % max Mem % max CPU Min fee ₳
10 0 0 5645 23.29 42.87 0.90
10 1 57 5679 25.63 45.39 0.93
10 5 285 5815 35.88 55.71 1.10
10 10 570 5984 49.89 68.99 1.31
10 20 1137 6322 82.42 96.97 1.79
10 20 1140 6324 82.42 96.97 1.79

PartialFanOut transaction costs

Largest chunk of ada-only outputs that can be distributed in one partial fanout step, computed dynamically. The last row is the maximum total UTxO count where at least one output can still be distributed.

Distributed UTxO (bytes) Tx size % max Mem % max CPU Min fee ₳
11 570 987 34.91 66.33 0.95
25 1308 1427 68.24 99.40 1.48
30 1308 1427 68.24 99.40 1.48
40 1309 1428 68.24 99.40 1.48
50 1309 1424 68.24 99.40 1.48
100 1309 1428 68.24 99.40 1.48
150 1310 1425 68.24 99.40 1.48
200 1308 1427 68.24 99.40 1.48
200 1310 1429 68.24 99.40 1.48

PartialFanOut transaction costs (with native tokens)

Largest chunk of native-token outputs that can be distributed in one partial fanout step, computed dynamically. The last row is the maximum total UTxO count where at least one output can still be distributed.

Distributed UTxO (bytes) Tx size % max Mem % max CPU Min fee ₳
11 1060 1543 42.00 68.86 1.05
25 2520 2786 76.59 99.27 1.61
30 1953 2192 76.56 99.11 1.58
40 2184 2434 76.56 99.16 1.59
50 2331 2585 76.59 99.22 1.60
100 2520 2787 76.59 99.27 1.61
150 2037 2277 76.56 99.12 1.58
200 1974 2215 76.56 99.11 1.58
200 2436 2699 76.59 99.22 1.60

FinalPartialFanOut transaction costs (with native tokens)

Terminal partial fanout step (FanoutProgress → Final) with outputs carrying a native token. Burns all head tokens and proves accumulator exhaustion via BLS proof.

Distributed UTxO (bytes) Tx size % max Mem % max CPU Min fee ₳
1 106 5526 22.10 44.31 0.89
5 600 5935 35.70 55.86 1.10
10 930 6161 53.78 70.57 1.36
10 1150 6380 53.90 70.65 1.38

End-to-end benchmark results

This page is intended to collect the latest end-to-end benchmark results produced by Hydra's continuous integration (CI) system from the latest master code.

Please note that these results are approximate as they are currently produced from limited cloud VMs and not controlled hardware. Rather than focusing on the absolute results, the emphasis should be on relative results, such as how the timings for a scenario evolve as the code changes.

Generated at 2026-07-27 14:50:01.310668433 UTC

Baseline Scenario

Number of nodes 1
Number of txs 300
Avg. Confirmation Time (ms) 204.5
P99 208.6ms
P95 208.1ms
P50 204.5ms
Tx validation time p50 (ms) 127.9
End-to-end TPS 1406.90 tx/s
Backlog drain time (s) 0.2
Snapshots observed 3
Snapshots per second 14.07 /s
Avg txs per snapshot 100.0
Peak node RSS (MB) 144.9
Number of Invalid txs 0
Fanout outputs 2

Three local nodes

Number of nodes 3
Number of txs 900
Avg. Confirmation Time (ms) 1035.7
P99 1094.3ms
P95 1093.1ms
P50 1067.3ms
Tx validation time p50 (ms) 503.4
End-to-end TPS 815.24 tx/s
Backlog drain time (s) 1.1
Snapshots observed 3
Snapshots per second 2.72 /s
Avg txs per snapshot 300.0
Peak node RSS (MB) 147.6
Number of Invalid txs 0
Fanout outputs 4

Scenario benchmark results

This page collects results from the scenario matrix: every combination of cluster size, UTxO shape, and incremental-ops mode is exercised by CI from the latest master code and reported below.

Numbers are approximate. They come from cloud VMs rather than controlled hardware, so the useful signal is the relative change between cells and between commits, not the absolute throughput.

Generated at 2026-07-27 15:02:21.798363656 UTC

Summary across cells

TPS columns are rates (transactions per second); Wall clock (s) is the measured elapsed time from the first tx submission to the last confirmation. Times are rounded to one decimal.

Scenario Txs Wall clock (s) End-to-end TPS (tx/s) Sustained TPS (tx/s) Avg conf (ms) P95 conf (ms)
Nodes=1, Constant, fire and forget 30 0.0 1245.76 n/a 23.4 23.8
Nodes=1, Constant, wait for tx valid 30 0.1 201.37 201.42 4.9 6.2
Nodes=1, Growing, fire and forget 30 0.0 1086.55 n/a 26.9 27.4
Nodes=1, Growing, wait for tx valid 30 0.2 140.18 142.93 7.1 9.2
Nodes=1, Mixed, fire and forget 30 0.0 1133.34 n/a 25.0 26.2
Nodes=1, Mixed, wait for tx valid 30 0.2 175.13 171.07 5.7 7.7
Nodes=2, Constant, fire and forget 60 0.1 991.96 n/a 59.1 59.9
Nodes=2, Constant, wait for tx valid 60 0.4 134.75 136.80 14.7 20.0
Nodes=2, Growing, fire and forget 60 0.1 735.47 n/a 79.2 81.1
Nodes=2, Growing, wait for tx valid 60 0.7 84.36 84.07 23.3 31.7
Nodes=2, Mixed, fire and forget 60 0.1 988.09 n/a 59.0 59.7
Nodes=2, Mixed, wait for tx valid 60 0.6 92.57 86.11 21.4 29.9
Nodes=3, Constant, fire and forget 90 0.1 704.73 n/a 124.6 126.8
Nodes=3, Constant, wait for tx valid 90 0.9 103.67 104.74 28.3 39.9
Nodes=3, Growing, fire and forget 90 0.2 591.57 n/a 148.8 151.1
Nodes=3, Growing, wait for tx valid 90 1.2 75.15 73.83 39.6 53.6
Nodes=3, Mixed, fire and forget 90 0.1 625.28 n/a 137.9 143.7
Nodes=3, Mixed, wait for tx valid 90 1.1 79.72 75.95 37.4 50.3

Nodes=1, Constant, fire and forget

Number of nodes 1
Number of txs 30
Avg. Confirmation Time (ms) 23.4
P99 23.9ms
P95 23.8ms
P50 23.6ms
Tx validation time p50 (ms) 9.1
End-to-end TPS 1245.76 tx/s
Backlog drain time (s) 0.0
Snapshots observed 2
Snapshots per second 83.05 /s
Avg txs per snapshot 15.0
Peak node RSS (MB) 144.1
Number of Invalid txs 0
Fanout outputs 2

Nodes=1, Constant, wait for tx valid

Number of nodes 1
Number of txs 30
Avg. Confirmation Time (ms) 4.9
P99 6.9ms
P95 6.2ms
P50 4.7ms
Tx validation time p50 (ms) 1.6
End-to-end TPS 201.37 tx/s
Sustained TPS 201.42 tx/s
Backlog drain time (s) 0.0
Snapshots observed 30
Snapshots per second 201.37 /s
Avg txs per snapshot 1.0
Peak node RSS (MB) 144.1
Number of Invalid txs 0
Fanout outputs 2

Nodes=1, Growing, fire and forget

Number of nodes 1
Number of txs 30
Avg. Confirmation Time (ms) 26.9
P99 27.4ms
P95 27.4ms
P50 27.1ms
Tx validation time p50 (ms) 10.6
End-to-end TPS 1086.55 tx/s
Backlog drain time (s) 0.0
Snapshots observed 2
Snapshots per second 72.44 /s
Avg txs per snapshot 15.0
Peak node RSS (MB) 144.5
Number of Invalid txs 0
Fanout outputs 31

Nodes=1, Growing, wait for tx valid

Number of nodes 1
Number of txs 30
Avg. Confirmation Time (ms) 7.1
P99 9.7ms
P95 9.2ms
P50 7.1ms
Tx validation time p50 (ms) 1.9
End-to-end TPS 140.18 tx/s
Sustained TPS 142.93 tx/s
Backlog drain time (s) 0.0
Snapshots observed 30
Snapshots per second 140.18 /s
Avg txs per snapshot 1.0
Peak node RSS (MB) 144.8
Number of Invalid txs 0
Fanout outputs 31

Nodes=1, Mixed, fire and forget

Each client first grows its UTxO set (1-in to 2-out) for half of its tx budget, then contracts it back (2-in to 1-out) for the remainder.

Number of nodes 1
Number of txs 30
Avg. Confirmation Time (ms) 25.0
P99 26.2ms
P95 26.2ms
P50 25.9ms
Tx validation time p50 (ms) 9.1
End-to-end TPS 1133.34 tx/s
Backlog drain time (s) 0.0
Snapshots observed 2
Snapshots per second 75.56 /s
Avg txs per snapshot 15.0
Peak node RSS (MB) 143.1
Number of Invalid txs 0
Fanout outputs 2

Nodes=1, Mixed, wait for tx valid

Each client first grows its UTxO set (1-in to 2-out) for half of its tx budget, then contracts it back (2-in to 1-out) for the remainder.

Number of nodes 1
Number of txs 30
Avg. Confirmation Time (ms) 5.7
P99 9.6ms
P95 7.7ms
P50 5.4ms
Tx validation time p50 (ms) 1.6
End-to-end TPS 175.13 tx/s
Sustained TPS 171.07 tx/s
Backlog drain time (s) 0.0
Snapshots observed 30
Snapshots per second 175.13 /s
Avg txs per snapshot 1.0
Peak node RSS (MB) 143.3
Number of Invalid txs 0
Fanout outputs 2

Nodes=2, Constant, fire and forget

Number of nodes 2
Number of txs 60
Avg. Confirmation Time (ms) 59.1
P99 60.0ms
P95 59.9ms
P50 59.5ms
Tx validation time p50 (ms) 23.7
End-to-end TPS 991.96 tx/s
Backlog drain time (s) 0.1
Snapshots observed 2
Snapshots per second 33.07 /s
Avg txs per snapshot 30.0
Peak node RSS (MB) 145.1
Number of Invalid txs 0
Fanout outputs 3

Nodes=2, Constant, wait for tx valid

Number of nodes 2
Number of txs 60
Avg. Confirmation Time (ms) 14.7
P99 21.2ms
P95 20.0ms
P50 13.3ms
Tx validation time p50 (ms) 4.0
End-to-end TPS 134.75 tx/s
Sustained TPS 136.80 tx/s
Backlog drain time (s) 0.0
Snapshots observed 60
Snapshots per second 134.75 /s
Avg txs per snapshot 1.0
Peak node RSS (MB) 144.3
Number of Invalid txs 0
Fanout outputs 3

Nodes=2, Growing, fire and forget

Number of nodes 2
Number of txs 60
Avg. Confirmation Time (ms) 79.2
P99 81.2ms
P95 81.1ms
P50 79.6ms
Tx validation time p50 (ms) 27.9
End-to-end TPS 735.47 tx/s
Backlog drain time (s) 0.1
Snapshots observed 2
Snapshots per second 24.52 /s
Avg txs per snapshot 30.0
Peak node RSS (MB) 145.2
Number of Invalid txs 0
Fanout outputs 62

Nodes=2, Growing, wait for tx valid

Number of nodes 2
Number of txs 60
Avg. Confirmation Time (ms) 23.3
P99 33.1ms
P95 31.7ms
P50 22.9ms
Tx validation time p50 (ms) 7.2
End-to-end TPS 84.36 tx/s
Sustained TPS 84.07 tx/s
Backlog drain time (s) 0.0
Snapshots observed 60
Snapshots per second 84.36 /s
Avg txs per snapshot 1.0
Peak node RSS (MB) 147.5
Number of Invalid txs 0
Fanout outputs 62

Nodes=2, Mixed, fire and forget

Each client first grows its UTxO set (1-in to 2-out) for half of its tx budget, then contracts it back (2-in to 1-out) for the remainder.

Number of nodes 2
Number of txs 60
Avg. Confirmation Time (ms) 59.0
P99 59.7ms
P95 59.7ms
P50 59.3ms
Tx validation time p50 (ms) 19.9
End-to-end TPS 988.09 tx/s
Backlog drain time (s) 0.1
Snapshots observed 2
Snapshots per second 32.94 /s
Avg txs per snapshot 30.0
Peak node RSS (MB) 144.4
Number of Invalid txs 0
Fanout outputs 3

Nodes=2, Mixed, wait for tx valid

Each client first grows its UTxO set (1-in to 2-out) for half of its tx budget, then contracts it back (2-in to 1-out) for the remainder.

Number of nodes 2
Number of txs 60
Avg. Confirmation Time (ms) 21.4
P99 31.3ms
P95 29.9ms
P50 21.4ms
Tx validation time p50 (ms) 5.9
End-to-end TPS 92.57 tx/s
Sustained TPS 86.11 tx/s
Backlog drain time (s) 0.0
Snapshots observed 60
Snapshots per second 92.57 /s
Avg txs per snapshot 1.0
Peak node RSS (MB) 145.9
Number of Invalid txs 0
Fanout outputs 3

Nodes=3, Constant, fire and forget

Number of nodes 3
Number of txs 90
Avg. Confirmation Time (ms) 124.6
P99 126.9ms
P95 126.8ms
P50 124.3ms
Tx validation time p50 (ms) 44.0
End-to-end TPS 704.73 tx/s
Backlog drain time (s) 0.1
Snapshots observed 2
Snapshots per second 15.66 /s
Avg txs per snapshot 45.0
Peak node RSS (MB) 146.3
Number of Invalid txs 0
Fanout outputs 4

Nodes=3, Constant, wait for tx valid

Number of nodes 3
Number of txs 90
Avg. Confirmation Time (ms) 28.3
P99 50.0ms
P95 39.9ms
P50 27.0ms
Tx validation time p50 (ms) 7.1
End-to-end TPS 103.67 tx/s
Sustained TPS 104.74 tx/s
Backlog drain time (s) 0.0
Snapshots observed 62
Snapshots per second 71.42 /s
Avg txs per snapshot 1.5
Peak node RSS (MB) 145.5
Number of Invalid txs 0
Fanout outputs 4

Nodes=3, Growing, fire and forget

Number of nodes 3
Number of txs 90
Avg. Confirmation Time (ms) 148.8
P99 151.2ms
P95 151.1ms
P50 149.0ms
Tx validation time p50 (ms) 43.2
End-to-end TPS 591.57 tx/s
Backlog drain time (s) 0.1
Snapshots observed 2
Snapshots per second 13.15 /s
Avg txs per snapshot 45.0
Peak node RSS (MB) 145.1
Number of Invalid txs 0
Fanout outputs 0

Nodes=3, Growing, wait for tx valid

Number of nodes 3
Number of txs 90
Avg. Confirmation Time (ms) 39.6
P99 66.8ms
P95 53.6ms
P50 38.1ms
Tx validation time p50 (ms) 11.0
End-to-end TPS 75.15 tx/s
Sustained TPS 73.83 tx/s
Backlog drain time (s) 0.0
Snapshots observed 62
Snapshots per second 51.77 /s
Avg txs per snapshot 1.5
Peak node RSS (MB) 148.1
Number of Invalid txs 0
Fanout outputs 0

Nodes=3, Mixed, fire and forget

Each client first grows its UTxO set (1-in to 2-out) for half of its tx budget, then contracts it back (2-in to 1-out) for the remainder.

Number of nodes 3
Number of txs 90
Avg. Confirmation Time (ms) 137.9
P99 143.7ms
P95 143.7ms
P50 137.3ms
Tx validation time p50 (ms) 49.1
End-to-end TPS 625.28 tx/s
Backlog drain time (s) 0.1
Snapshots observed 2
Snapshots per second 13.90 /s
Avg txs per snapshot 45.0
Peak node RSS (MB) 145.5
Number of Invalid txs 0
Fanout outputs 4

Nodes=3, Mixed, wait for tx valid

Each client first grows its UTxO set (1-in to 2-out) for half of its tx budget, then contracts it back (2-in to 1-out) for the remainder.

Number of nodes 3
Number of txs 90
Avg. Confirmation Time (ms) 37.4
P99 58.2ms
P95 50.3ms
P50 36.8ms
Tx validation time p50 (ms) 10.2
End-to-end TPS 79.72 tx/s
Sustained TPS 75.95 tx/s
Backlog drain time (s) 0.0
Snapshots observed 61
Snapshots per second 54.03 /s
Avg txs per snapshot 1.5
Peak node RSS (MB) 147.1
Number of Invalid txs 0
Fanout outputs 4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant