mirror of
https://github.com/datahaven-xyz/datahaven
synced 2026-05-24 09:50:01 +00:00
This PR adds the Snowbridge Inbound Queue V2 pallet to the runtime. It also defines bridge primitives, including the message structure for EigenLayer, and introduces the EigenLayerMessageProcessor to handle messages coming from EigenLayer. --------- Co-authored-by: Facundo Farall <37149322+ffarall@users.noreply.github.com>
88 lines
4.6 KiB
Markdown
88 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.
|