Files
pezkuwi-sdk/pezbridges/snowbridge/pezpallets/ethereum-client/benchmark.md
T
pezkuwichain 59ac32e3b2 fix: resolve all markdownlint errors
- Replace 68 "[here]" links with descriptive text (MD059)
- Fix table separator spacing in 6 project files (MD060)
- Add trailing newlines to 2 files (MD047)
- Disable MD060 rule for .claude/ internal files
- Update markdownlint config with MD060: false

All project files now pass markdownlint --config .github/.markdownlint.yaml

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 09:37:11 +03:00

4.4 KiB

Motivation

Demonstrate that FastAggregateVerify is the most expensive call in ethereum beacon light client, though in #13031 Parity team has wrapped some low level host functions for bls-12381 but adding a high level host function specific for it is super helpful.

Benchmark

We add several benchmarks the benchmarking module as following to demonstrate bls_fast_aggregate_verify is the main bottleneck. Test data the test data file is real from goerli network which contains 512 public keys from sync committee.

sync_committee_period_update

Base line benchmark for extrinsic sync_committee_period_update

bls_fast_aggregate_verify

Subfunction of extrinsic sync_committee_period_update which does what FastAggregateVerify requires.

bls_aggregate_pubkey

Subfunction of bls_fast_aggregate_verify which decompress and instantiate G1 pubkeys only.

bls_verify_message

Subfunction of bls_fast_aggregate_verify which verify the prepared signature only.

Result

hardware spec

Run benchmark in a EC2 instance

cargo run --release --bin pezkuwi-teyrchain --features runtime-benchmarks -- benchmark machine --base-path /mnt/scratch/benchmark

+----------+----------------+-------------+-------------+-------------------+
| Category | Function       | Score       | Minimum     | Result            |
+===========================================================================+
| CPU      | BLAKE2-256     | 1.08 GiBs   | 1.00 GiBs   | ✅ Pass (107.5 %) |
|----------+----------------+-------------+-------------+-------------------|
| CPU      | SR25519-Verify | 568.87 KiBs | 666.00 KiBs | ❌ Fail ( 85.4 %) |
|----------+----------------+-------------+-------------+-------------------|
| Memory   | Copy           | 13.67 GiBs  | 14.32 GiBs  | ✅ Pass ( 95.4 %) |
|----------+----------------+-------------+-------------+-------------------|
| Disk     | Seq Write      | 334.35 MiBs | 450.00 MiBs | ❌ Fail ( 74.3 %) |
|----------+----------------+-------------+-------------+-------------------|
| Disk     | Rnd Write      | 143.59 MiBs | 200.00 MiBs | ❌ Fail ( 71.8 %) |
+----------+----------------+-------------+-------------+-------------------+

benchmark

cargo run --release --bin pezkuwi-teyrchain \
--features runtime-benchmarks \
-- \
benchmark pezpallet \
--base-path /mnt/scratch/benchmark \
--chain=bridge-hub-pezkuwichain-dev \
--pezpallet=snowbridge_pezpallet_ethereum_client \
--extrinsic="*" \
--execution=wasm --wasm-execution=compiled \
--steps 50 --repeat 20 \
--output ./teyrchains/runtimes/bridge-hubs/bridge-hub-pezkuwichain/src/weights/snowbridge_pezpallet_ethereum_client.rs

Weights

extrinsic minimum execution time benchmarked(us)
sync_committee_period_update 123_126
bls_fast_aggregate_verify 121_083
bls_aggregate_pubkey 90_306
bls_verify_message 28_000

Conclusion

A high level host function specific for bls_fast_aggregate_verify is super helpful.