-
Notifications
You must be signed in to change notification settings - Fork 107
Use hedgehog generators for ByteString instead of arbitrary #2391
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Transaction costsSizes and execution budgets for Hydra protocol transactions. Note that unlisted parameters are currently using
Script summary
|
| Parties | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | 5834 | 10.38 | 3.29 | 0.51 |
| 2 | 6037 | 12.46 | 3.94 | 0.55 |
| 3 | 6238 | 14.71 | 4.65 | 0.58 |
| 5 | 6641 | 18.64 | 5.88 | 0.64 |
| 10 | 7651 | 29.14 | 9.19 | 0.79 |
| 43 | 14281 | 98.58 | 30.79 | 1.80 |
Commit transaction costs
This uses ada-only outputs for better comparability.
| UTxO | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | 558 | 2.44 | 1.16 | 0.20 |
| 2 | 743 | 3.38 | 1.73 | 0.22 |
| 3 | 923 | 4.36 | 2.33 | 0.24 |
| 5 | 1276 | 6.41 | 3.60 | 0.28 |
| 10 | 2176 | 12.13 | 7.25 | 0.40 |
| 54 | 10040 | 98.61 | 68.52 | 1.88 |
CollectCom transaction costs
| Parties | UTxO (bytes) | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|---|
| 1 | 57 | 525 | 24.42 | 7.12 | 0.42 |
| 2 | 113 | 640 | 32.31 | 9.40 | 0.51 |
| 3 | 171 | 747 | 41.28 | 11.92 | 0.60 |
| 4 | 226 | 858 | 50.89 | 14.63 | 0.70 |
| 5 | 282 | 969 | 58.24 | 16.88 | 0.79 |
| 6 | 339 | 1085 | 64.75 | 18.81 | 0.86 |
| 7 | 394 | 1192 | 72.82 | 21.15 | 0.94 |
| 8 | 450 | 1303 | 85.15 | 24.41 | 1.07 |
Cost of Increment Transaction
| Parties | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | 1823 | 24.29 | 7.69 | 0.48 |
| 2 | 1882 | 24.77 | 8.48 | 0.49 |
| 3 | 2013 | 25.91 | 9.48 | 0.52 |
| 5 | 2340 | 30.18 | 12.00 | 0.58 |
| 10 | 3100 | 39.66 | 17.99 | 0.74 |
| 40 | 7641 | 99.25 | 54.53 | 1.68 |
Cost of Decrement Transaction
| Parties | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | 618 | 22.80 | 7.38 | 0.41 |
| 2 | 703 | 22.62 | 7.97 | 0.42 |
| 3 | 895 | 25.10 | 9.32 | 0.46 |
| 5 | 1178 | 28.85 | 11.72 | 0.52 |
| 10 | 1953 | 37.51 | 17.46 | 0.67 |
| 41 | 6710 | 98.48 | 55.14 | 1.64 |
Close transaction costs
| Parties | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | 655 | 29.13 | 8.90 | 0.48 |
| 2 | 812 | 31.58 | 10.27 | 0.52 |
| 3 | 998 | 31.69 | 10.98 | 0.53 |
| 5 | 1282 | 37.62 | 13.96 | 0.61 |
| 10 | 1964 | 44.07 | 19.12 | 0.73 |
| 37 | 6101 | 98.83 | 52.49 | 1.60 |
Contest transaction costs
| Parties | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | 662 | 33.83 | 10.16 | 0.53 |
| 2 | 873 | 36.56 | 11.60 | 0.57 |
| 3 | 1032 | 38.59 | 12.82 | 0.60 |
| 5 | 1402 | 44.02 | 15.70 | 0.68 |
| 10 | 2132 | 55.51 | 22.26 | 0.85 |
| 29 | 4741 | 96.31 | 46.21 | 1.47 |
Abort transaction costs
There is some variation due to the random mixture of initial and already committed outputs.
| Parties | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | 5811 | 27.08 | 9.08 | 0.69 |
| 2 | 5917 | 34.91 | 11.68 | 0.78 |
| 3 | 6059 | 42.54 | 14.26 | 0.86 |
| 4 | 6135 | 50.64 | 16.96 | 0.95 |
| 5 | 6444 | 64.16 | 21.68 | 1.11 |
| 6 | 6587 | 70.89 | 23.89 | 1.19 |
| 7 | 6745 | 83.17 | 28.11 | 1.32 |
| 8 | 7015 | 91.79 | 30.99 | 1.42 |
| 9 | 7013 | 99.48 | 33.53 | 1.50 |
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 | 5834 | 19.19 | 6.41 | 0.61 |
| 10 | 1 | 57 | 5868 | 22.10 | 7.52 | 0.64 |
| 10 | 20 | 1140 | 6514 | 60.42 | 22.68 | 1.09 |
| 10 | 30 | 1706 | 6852 | 78.71 | 30.00 | 1.30 |
| 10 | 39 | 2218 | 7157 | 98.05 | 37.58 | 1.53 |
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 2025-12-08 09:50:18.627048306 UTC
Baseline Scenario
| Number of nodes | 1 |
|---|---|
| Number of txs | 300 |
| Avg. Confirmation Time (ms) | 5.787723213 |
| P99 | 10.95763691ms |
| P95 | 9.155660900000003ms |
| P50 | 5.2769705ms |
| Number of Invalid txs | 0 |
Three local nodes
| Number of nodes | 3 |
|---|---|
| Number of txs | 900 |
| Avg. Confirmation Time (ms) | 34.428522047 |
| P99 | 53.079831840000004ms |
| P95 | 45.98104465ms |
| P50 | 33.088426999999996ms |
| Number of Invalid txs | 0 |
Transaction cost differencesScript summary
|
| Parties | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | - | - | - | - |
| 2 | - | - | - | - |
| 3 | - | - | - | - |
| 5 | - | - | - | - |
| 10 | - | - | - | - |
| 43 | - | - | - | - |
Commit transaction costs
| UTxO | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | - | - | - | - |
| 2 | - | - | - | - |
| 3 | - | - | - | - |
| 5 | - | - | - | - |
| 10 | - | - | - | - |
| 54 | - | - | - | - |
CollectCom transaction costs
| Parties | UTxO (bytes) | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|---|
| 1 | - | - | - | - | - |
| 2 | - | - | - | - | - |
| 3 | - | - | - | - | - |
| 4 | - | - | - | - | - |
| 5 | - | - | - | - | - |
| 6 | - | - | - | - | - |
| 7 | - | - | - | - | - |
| 8 | - | - | - | - | - |
| 9 | - | - | - | - | - |
Cost of Increment Transaction
| Parties | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | - | - | - | - |
| 2 | - | - | ||
| 3 | - | +0.37 | +0.09 | - |
| 5 | - | - | - | - |
| 10 | - | - | - | - |
| 43 | - | - | - | - |
Cost of Decrement Transaction
| Parties | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | - | - | - | - |
| 2 | - | - | - | - |
| 3 | - | - | - | - |
| 5 | - | - | - | - |
| 10 | - | - | - | - |
| 40 | - | - | - | - |
Close transaction costs
| Parties | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | - | - | - | - |
| 2 | - | - | - | - |
| 3 | - | - | - | - |
| 5 | - | - | - | - |
| 10 | - | - | - | - |
| 34 | - | - | - | - |
Contest transaction costs
| Parties | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|
| 1 | - | - | - | - |
| 2 | - | - | - | - |
| 3 | - | - | - | - |
| 5 | - | - | - | - |
| 10 | - | - | - | - |
| 29 | - | - | - | - |
FanOut transaction costs
| UTxO, Parties | UTxO (bytes) | Tx size | % max Mem | % max CPU | Min fee ₳ |
|---|---|---|---|---|---|
| (0, 10) | - | - | - | - | - |
| (1, 10) | - | - | - | - | - |
| (5, 10) | - | - | - | - | - |
| (10, 10) | - | - | - | - | - |
| (20, 10) | - | - | - | - | - |
| (37, 10) | - | - | - | - | - |
3a44fc6 to
d006d9a
Compare
d006d9a to
22cf243
Compare
|
|
||
| genScriptData :: Gen ScriptData | ||
| genScriptData = oneof [ScriptDataBytes <$> arbitrary, ScriptDataNumber <$> arbitrary] | ||
| genScriptData = oneof [ScriptDataBytes <$> hedgehog (bytes $ Range.linear 1 1024), ScriptDataNumber <$> arbitrary] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see in the cardano-api they bound the range to 64, perhaps it is safe for us to do the same since I am not sure if there are any limitations on size here.
Using Arbitrary ByteString is introducing a conflict in cardano-api 10.18. This has since been resolved upstream in 10.19 but it's worth being precise here for our own benefit.