Skip to content

feat(bench): add zones and vaults to public mix - #7569

Open
decofe wants to merge 9 commits into
mainfrom
centaur/public-mix-zones-vaults-1788961139
Open

decofe wants to merge 9 commits into
mainfrom
centaur/public-mix-zones-vaults-1788961139

Conversation

@decofe

@decofe decofe commented Sep 9, 2026

Copy link
Copy Markdown
Member

Adds zone deposits/withdrawals at 5%/4% and vault deposits/withdrawals at 6%/4% to public-mix, matching the requested table; transfers, memo transfers, mints, and open-only MPP remain at 25%/40%/1%/15%. Reuses the zone fixtures merged in #7537 and adds the fixture setup, funding, and per-user/portal weighting needed to compose the workloads.

Also leaves the zone account-range placeholder unquoted so environment expansion yields an integer when the multi-region runner loads the preset directly. This corrects the invalid type: string "1000", expected u32 error in the failed comparison.

Updated against main to include the merged compact metadata producer from #7663. Preserves this PR’s existing allocation, including memo transfers, as requested. Metadata is extracted after fixture expansion and reports aggregate category weights; the merged perf reader and multi-region sender already support these categories, so no companion changes are needed.

Declares explicit vault and neobank setup dependencies for txgen #214. Independent Zone deployment/funding and per-user approvals can overlap vault initialization, while receipt dependencies protect registry publication, engine binding, factory calls, and neobank position seeding. Use txgen-ref=c70b70230f37ca5fee2851224b48170a5ca9d269 to exercise the new scheduler; this PR depends on that breaking txgen change.

The existing bench-e2e.nu render-txgen-spec command composes public-mix using the supplied accounts, TPS, and duration; preparation reuses that rendered file unchanged. Other presets retain their existing rendering and pipeline behavior.

Validation: rendered and generated setup for 3 users/2 zones and 1,000 users/715 zones (3,451 setup transactions). Compared the original and migrated renderings: transaction definitions, senders, ordering, templates, and exact eight-category weights are unchanged; only dependency metadata differs. The public-mix render command produces identical specifications at both sizes (31 and 3,451 setup transactions), and already-rendered files are reused unchanged. Two mocked-RPC public-mix pipeline repetitions preserve the input and generate workload successfully.

The matched multiregion benchmark reduced mean setup time from 729.81 s to 145.66 s: 5.01× faster, an 80.0% reduction, saving 584.15 s (9m 44s) per setup.

Scheduler Repetition 1 Repetition 2 Mean setup time
Heuristic baseline 729.69 s 729.94 s 729.81 s
Explicit dependencies 145.75 s 145.57 s 145.66 s

All four measurements completed 3,451 setup transactions successfully, with zero setup failures. Both workflows and their infrastructure teardown completed successfully. Timings come from Setup transactions completed ... elapsed=... in each phase's txgen.out; they include setup input reading, validation, submission, and receipt waits, and exclude infrastructure provisioning and subsequent workload execution.

Inputs: 10 validators across us-east-1,eu-central-1, 1,000 users, 715 zones, bloat=1 (reported as 1,000 MiB), target 50k TPS, 5,000 concurrent requests, a 30 s workload generation limit, and --defer-signing. Both runs use Tempo node commit 8e4c039b96c3e8feb7a59f171d17504de909679f and benchmark runner 67ab5444bf0fdf4ff2d4b28eab46e72ead38d3a9. Baseline txgen is 466fca39ca26d276c917878b7c34d25523772baa; explicit-dependency txgen is c70b70230f37ca5fee2851224b48170a5ca9d269.

Artifact verification confirmed identical rendered transaction definitions and workload weights after removing dependency metadata and normalizing the per-run temporary include directory. Each repetition sent 75–76 workload transactions after setup, all successful, so these measurements establish setup-time improvement for this configuration; they do not establish sustained throughput.

Prompted by: @shekhirin

@shekhirin
shekhirin changed the base branch from main to centaur/zone-txgen-preset-1788858986 September 9, 2026 13:45
@decofe
decofe force-pushed the centaur/public-mix-zones-vaults-1788961139 branch 3 times, most recently from 02b1033 to c8bc43a Compare September 9, 2026 14:40
@shekhirin

Copy link
Copy Markdown
Member

derek bench run-pairs=1 run-side=feature preset=public-mix

@tempo-github-sts

tempo-github-sts Bot commented Sep 9, 2026

Copy link
Copy Markdown

cc @shekhirin

❌ Benchmark failed. View logs

1 similar comment
@tempo-github-sts

tempo-github-sts Bot commented Sep 9, 2026

Copy link
Copy Markdown

cc @shekhirin

❌ Benchmark failed. View logs

Base automatically changed from centaur/zone-txgen-preset-1788858986 to main September 9, 2026 15:01
shekhirin and others added 4 commits September 9, 2026 15:04
Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>
Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>
Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>
Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>
@decofe
decofe force-pushed the centaur/public-mix-zones-vaults-1788961139 branch from bc16f39 to f56a26e Compare September 9, 2026 15:05
Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>
@tempo-github-sts

Copy link
Copy Markdown

cc @decofe

🚀 Benchmark started! View job

Status: Running benchmark...

Config: mode: e2e, preset: public-mix, duration: 30s, bloat: 100 GiB, token-count: 4, tps: 50000, accounts: 1000, max-concurrent-requests: 100, gas-limit: 1000000000000, general-gas-limit: 1000000000000, run-pairs: 1, baseline: a6d5349978b07a6d86faeea602f3f3c238e74c75, feature: 75fb3a997cf8749f36792c5f6725e8760adeb482, txgen-ref: default, otlp: enabled, valscope: disabled

@tempo-github-sts

tempo-github-sts Bot commented Sep 14, 2026

Copy link
Copy Markdown

cc @onbjerg

⚠️ Benchmark cancelled. View logs

@tempo-github-sts

tempo-github-sts Bot commented Sep 14, 2026

Copy link
Copy Markdown

cc @onbjerg

❌ Benchmark failed. View logs

@tempo-github-sts

tempo-github-sts Bot commented Sep 14, 2026

Copy link
Copy Markdown

cc @onbjerg

⚪ Benchmark complete: No Difference View job

⚪ Bench Comparison: No Difference

Refs: a6d5349 vs 75fb3a9
Criteria: 95% run-bootstrap CI must clear floor; cells show delta (+/-CI/floor).

Configuration

  • Derek command: derek bench mode=e2e preset=public-mix duration=30 bloat=100 token-count=4 tps=50000 accounts=1000 max-concurrent-requests=100 baseline=a6d5349978b07a6d86faeea602f3f3c238e74c75 feature=75fb3a997cf8749f36792c5f6725e8760adeb482 baseline-hardfork="" feature-hardfork="" gas-limit=1000000000000 run-pairs=1 run-side=comparison otlp=true metrics=false no-cache=false force-bloat=false general-gas-limit=1000000000000 txgen-ref=8817d90a903ec321d59dacb260400aee938ec81f
  • Bloat: 100000 MiB
  • Token count: 4
  • Preset: public-mix
  • Target TPS: 50000
  • Duration: 30s
  • Run pairs: 1
  • Baseline blocks: 56
  • Feature blocks: 56

Tempo Metrics

Metric Baseline Feature Delta
TPS Mean 2920 2912 -0.27% ⚪
Gas Throughput [Mgas/s] 468.3 467.0 -0.28% ⚪
Block Time Mean [ms] 505.9 506.5 +0.12% ⚪
Block Time P50 [ms] 511.0 511.0 +0.00% ⚪
Block Time P90 [ms] 518.0 521.0 +0.58% ⚪
Block Time P99 [ms] 524.0 528.0 +0.76% ⚪

Builder

Metric Baseline Feature Delta
Gas Throughput [Mgas/s] 551.4 552.4 +0.17% ⚪
P50 [ms] 432.4 430.4 -0.46% ⚪
P90 [ms] 437.2 436.2 -0.23% ⚪
P99 [ms] 439.1 439.3 +0.05% ⚪
Builder details
Metric Baseline Feature Delta
Finish P50 [ms] 0.9 0.9 +0.00%
Finish P90 [ms] 1.2 1.2 +0.00%
Finish P99 [ms] 2.3 1.9 -17.39%
Pool Fetch P50 [ms] 0.5 0.4 -20.00%
Pool Fetch P90 [ms] 0.8 0.8 +0.00%
Pool Fetch P99 [ms] 2.1 1.1 -47.62%
Invalid Tx Attempts P90 293.0 295.0 +0.68%
Invalid Tx Attempts P99 306.0 310.0 +1.31%
Reverted Txs 7239 7322 +1.15%
Nonce Too Low Skips 6718 7019 +4.48%
Stop Reason — Build Budget 54 55 +1.85%
Serialized Block Size P50 [KiB] 466.7 467.7 +0.20%
Serialized Block Size P90 [KiB] 486.0 487.6 +0.32%
Serialized Block Size P99 [KiB] 499.4 504.3 +0.99%
Serialized Block Size / Tx P50 [B/tx] 323.4 323.6 +0.06%
Serialized Block Size / Tx P90 [B/tx] 327.8 328.0 +0.06%
Serialized Block Size / Tx P99 [B/tx] 332.8 333.0 +0.06%
Fill Idle P50 [ms] 337.0 334.0 -0.89%
Fill Idle P90 [ms] 348.0 349.0 +0.29%
Fill Idle P99 [ms] 360.0 360.0 +0.00%

Validator

Metric Baseline Feature Delta
Gas Throughput [Mgas/s] 3820.5 3720.3 -2.62% ⚪
P50 [ms] 61.4 63.7 +3.75% ⚪
P90 [ms] 68.7 71.9 +4.66% ⚪
P99 [ms] 74.4 79.2 +6.45% ⚪

Observability

@tempo-github-sts

tempo-github-sts Bot commented Sep 14, 2026

Copy link
Copy Markdown

cc @onbjerg

⚪ Benchmark complete: No Difference View job

⚪ Bench Comparison: No Difference

Refs: a6d5349 vs 75fb3a9
Criteria: 95% run-bootstrap CI must clear floor; cells show delta (+/-CI/floor).

Configuration

  • Derek command: derek bench mode=e2e preset=public-mix duration=30 bloat=100 token-count=4 tps=50000 accounts=1000 max-concurrent-requests=100 baseline=a6d5349978b07a6d86faeea602f3f3c238e74c75 feature=75fb3a997cf8749f36792c5f6725e8760adeb482 baseline-hardfork="" feature-hardfork="" gas-limit=1000000000000 run-pairs=1 run-side=comparison otlp=true metrics=false no-cache=false force-bloat=false general-gas-limit=1000000000000 txgen-ref=de4badfcc4997c3134e4cffebeeacbd45e6d69e9
  • Bloat: 100000 MiB
  • Token count: 4
  • Preset: public-mix
  • Target TPS: 50000
  • Duration: 30s
  • Run pairs: 1
  • Baseline blocks: 110
  • Feature blocks: 101

Tempo Metrics

Metric Baseline Feature Delta
TPS Mean 8817 8902 +0.96% ⚪
Gas Throughput [Mgas/s] 1448.6 1467.5 +1.30% ⚪
Block Time Mean [ms] 503.5 523.8 +4.03% ⚪
Block Time P50 [ms] 518.0 534.0 +3.09% ⚪
Block Time P90 [ms] 597.0 606.0 +1.51% ⚪
Block Time P99 [ms] 626.0 653.0 +4.31% ⚪

Builder

Metric Baseline Feature Delta
Gas Throughput [Mgas/s] 2938.1 2966.0 +0.95% ⚪
P50 [ms] 246.7 254.8 +3.28% ⚪
P90 [ms] 290.9 304.0 +4.50% ⚪
P99 [ms] 292.7 306.1 +4.58% ⚪
Builder details
Metric Baseline Feature Delta
Finish P50 [ms] 1.9 3.7 +94.74%
Finish P90 [ms] 30.2 28.6 -5.30%
Finish P99 [ms] 54.6 52.0 -4.76%
Pool Fetch P50 [ms] 6.7 6.8 +1.49%
Pool Fetch P90 [ms] 10.7 11.1 +3.74%
Pool Fetch P99 [ms] 14.3 20.4 +42.66%
Invalid Tx Attempts P90 1326.0 1510.0 +13.88%
Invalid Tx Attempts P99 1907.0 2133.0 +11.85%
Reverted Txs 45291 43660 -3.60%
Nonce Too Low Skips 34143 33928 -0.63%
Stop Reason — Build Budget 109 100 -8.26%
Serialized Block Size P50 [KiB] 916.1 1584.3 +72.94%
Serialized Block Size P90 [KiB] 2417.8 2511.3 +3.87%
Serialized Block Size P99 [KiB] 2809.3 2753.2 -2.00%
Serialized Block Size / Tx P50 [B/tx] 457.2 318.7 -30.29%
Serialized Block Size / Tx P90 [B/tx] 467.9 468.5 +0.13%
Serialized Block Size / Tx P99 [B/tx] 475.2 475.7 +0.11%
Fill Idle P50 [ms] 0.0 0.0 0.00%
Fill Idle P90 [ms] 0.0 0.0 0.00%
Fill Idle P99 [ms] 0.0 0.0 0.00%

Validator

Metric Baseline Feature Delta
Gas Throughput [Mgas/s] 3690.4 3777.3 +2.35% ⚪
P50 [ms] 201.5 207.8 +3.13% ⚪
P90 [ms] 258.1 260.6 +0.97% ⚪
P99 [ms] 278.5 278.2 -0.11% ⚪

Observability

Preserve the existing public-mix allocation while integrating the versioned metadata producer from main.

Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>
onbjerg added a commit to tempoxyz/txgen that referenced this pull request Sep 17, 2026
#214)

Setup currently inserts receipt barriers whenever consecutive
transactions change sender or nonce lane, serializing independent
accounts. Replace that heuristic with explicit
`setup.steps[].depends_on` receipt dependencies: independent lanes
submit concurrently, ordered nonce lanes still pipeline, and every setup
transaction must succeed before workload starts.

This is a breaking scheduling change. Existing workloads must declare
deployment, configuration, funding, and authorization prerequisites
explicitly. Dependencies on expanded steps wait for every emitted
transaction. Generation and `bench send` validate the complete setup
graph before output/submission, rejecting missing/duplicate IDs, unknown
prerequisites, and cycles including nonce-lane ordering. Setup now also
honors `--max-pending`.

Forward receipt dependencies are supported by `generate | bench send`.
Online scenario initialization remains serial and rejects forward
dependencies before submission. Setup is buffered for validation;
workload streaming is unchanged.

Validation: core/CLI/Tempo suites passed (456 tests, one ignored), plus
12 setup sender tests including fan-in, independent submission,
failures, and forward dependencies exceeding the bounded buffer under a
pending cap. Workspace Clippy and nightly formatting passed. The
unrelated `bench-cli` RPC replay integration test fails identically on
the base commit with the installed Anvil (four successful responses
instead of five).

All GitHub CI checks pass. Companion workload migration:
tempoxyz/tempo#7569.

The matched multiregion benchmark reduced mean setup time from **729.81
s to 145.66 s**: **5.01× faster**, an **80.0% reduction**, saving
**584.15 s (9m 44s)** per setup.

| Scheduler | Repetition 1 | Repetition 2 | Mean setup time |
| --- | ---: | ---: | ---: |
| [Heuristic
baseline](https://github.com/tempoxyz/tempo/actions/runs/35210688461) |
729.69 s | 729.94 s | 729.81 s |
| [Explicit
dependencies](https://github.com/tempoxyz/tempo/actions/runs/35215421489)
| 145.75 s | 145.57 s | 145.66 s |

All four measurements completed **3,451 setup transactions successfully,
with zero setup failures**. Both workflows and their infrastructure
teardown completed successfully. Timings come from `Setup transactions
completed ... elapsed=...` in each phase's `txgen.out`; they include
setup input reading, validation, submission, and receipt waits, and
exclude infrastructure provisioning and subsequent workload execution.

Inputs: 10 validators across `us-east-1,eu-central-1`, 1,000 users, 715
zones, `bloat=1` (reported as 1,000 MiB), target 50k TPS, 5,000
concurrent requests, a 30 s workload generation limit, and
`--defer-signing`. Both runs use Tempo node commit
`8e4c039b96c3e8feb7a59f171d17504de909679f` and benchmark runner
`67ab5444bf0fdf4ff2d4b28eab46e72ead38d3a9`. Baseline txgen is
`466fca39ca26d276c917878b7c34d25523772baa`; explicit-dependency txgen is
`c70b70230f37ca5fee2851224b48170a5ca9d269`.

Artifact verification confirmed identical rendered transaction
definitions and workload weights after removing dependency metadata and
normalizing the per-run temporary include directory. Each repetition
sent 75–76 workload transactions after setup, all successful, so these
measurements establish setup-time improvement for this configuration;
they do not establish sustained throughput.
@onbjerg
onbjerg marked this pull request as ready for review September 17, 2026 12:22
@tempoxyz tempoxyz deleted a comment from tempo-voight-kampff Bot Sep 17, 2026
pull Bot pushed a commit to Dustin4444/tempo that referenced this pull request Sep 17, 2026
Declare the four receipt dependencies between the deployer and owner in
the shared vault setup used by `vault-deposit` and `vault-withdraw`, so
both remain correct when [txgen
tempoxyz#214](tempoxyz/txgen#214) removes automatic
sender-change barriers. These are the same vault edges exercised in
[tempoxyz#7569](tempoxyz#7569), split out against
main.

Validated generation for both presets with 3 and 1,000 users (23 and
1,020 setup transactions), including emitted dependency IDs and graph
validation; only dependency metadata changes.
pull Bot pushed a commit to Dustin4444/tempo that referenced this pull request Sep 17, 2026
…empoxyz#7698)

Make withdrawal-position seeding wait for `wrapper`, the final
deployment on the shared neobank deployer nonce lane, before the user
calls the deployed fixture. This replaces reliance on automatic
sender-change barriers removed by [txgen
tempoxyz#214](tempoxyz/txgen#214), splitting the
migration already included in
[tempoxyz#7569](tempoxyz#7569) into a standalone
change against main.

Validated generation of all 12 setup transactions with the emitted
`setup.seed_neobank_withdrawals → setup.wrapper` dependency; transaction
definitions are otherwise unchanged.
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.

3 participants