mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 21:37:56 +00:00
2ab3f03f0b
Removes the `bridges/snowbridge/parachain` directory and moves everything up to under `snowbridge` directly. We are cleaning up our local dev env after merging our crates into the polkadot-sdk. --------- Co-authored-by: claravanstaden <Cats 4 life!>
89 lines
4.6 KiB
Markdown
89 lines
4.6 KiB
Markdown
# Motivation
|
|
Demonstrate that
|
|
[FastAggregateVerify](https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-04#section-3.3.4) is the most
|
|
expensive call in ethereum beacon light client, though in [#13031](https://github.com/paritytech/substrate/pull/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
|
|
[here](https://github.com/Snowfork/snowbridge/blob/8891ca3cdcf2e04d8118c206588c956541ae4710/parachain/pallets/ethereum-client/src/benchmarking/mod.rs#L98-L124)
|
|
as following to demonstrate
|
|
[bls_fast_aggregate_verify](https://github.com/Snowfork/snowbridge/blob/8891ca3cdcf2e04d8118c206588c956541ae4710/parachain/pallets/ethereum-client/src/lib.rs#L764)
|
|
is the main bottleneck. Test data
|
|
[here](https://github.com/Snowfork/snowbridge/blob/8891ca3cdcf2e04d8118c206588c956541ae4710/parachain/pallets/ethereum-client/src/benchmarking/data_mainnet.rs#L553-L1120)
|
|
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](https://github.com/Snowfork/snowbridge/blob/8891ca3cdcf2e04d8118c206588c956541ae4710/parachain/pallets/ethereum-client/src/lib.rs#L233)
|
|
|
|
## bls_fast_aggregate_verify
|
|
Subfunction of extrinsic `sync_committee_period_update` which does what
|
|
[FastAggregateVerify](https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-04#section-3.3.4) 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 polkadot-parachain --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 polkadot-parachain \
|
|
--features runtime-benchmarks \
|
|
-- \
|
|
benchmark pallet \
|
|
--base-path /mnt/scratch/benchmark \
|
|
--chain=bridge-hub-rococo-dev \
|
|
--pallet=snowbridge_pallet_ethereum_client \
|
|
--extrinsic="*" \
|
|
--execution=wasm --wasm-execution=compiled \
|
|
--steps 50 --repeat 20 \
|
|
--output ./parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/snowbridge_pallet_ethereum_client.rs
|
|
```
|
|
|
|
### [Weights](https://github.com/Snowfork/cumulus/blob/ron/benchmark-beacon-bridge/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/weights/snowbridge_pallet_ethereum_client.rs)
|
|
|
|
|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 |
|
|
|
|
- [bls_fast_aggregate_verify](#bls_fast_aggregate_verify) consumes 98% execution time of [sync_committee_period_update](#sync_committee_period_update)
|
|
|
|
- [bls_aggregate_pubkey](#bls_aggregate_pubkey) consumes 75% execution time of [bls_fast_aggregate_verify](#bls_fast_aggregate_verify)
|
|
|
|
- [bls_verify_message](#bls_verify_message) consumes 23% execution time of [bls_fast_aggregate_verify](#bls_fast_aggregate_verify)
|
|
|
|
# Conclusion
|
|
|
|
A high level host function specific for
|
|
[bls_fast_aggregate_verify](https://github.com/Snowfork/snowbridge/blob/8891ca3cdcf2e04d8118c206588c956541ae4710/parachain/pallets/ethereum-client/src/lib.rs#L764)
|
|
is super helpful.
|