chore(benchmarking): data generators for a set of map-related benchmarks [fixes VM-345] (#735)

This commit is contained in:
raftedproc 2023-11-08 16:22:17 +03:00 committed by GitHub
parent 938e5eb033
commit a8965e04ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 2790 additions and 516 deletions

2
.gitignore vendored
View File

@ -6,3 +6,5 @@ air/target
*.wasm
!./artifacts/*.wasm
benches/performance_metering/*

4
.gitmodules vendored
View File

@ -1,4 +0,0 @@
[submodule "benches/performance_metering"]
path = benches/performance_metering
url = git@github.com:fluencelabs/aquavm-benchmark-data.git
branch = tmp/sigs-with-blake2

File diff suppressed because it is too large Load Diff

View File

@ -326,6 +326,239 @@ Machine 62dabcde478dc58760ebbe71ef6047299144a5f63990c6c3d826ebf30175adfc:
execute: 197.00µs
execute: 42.00µs
new: 42.00µs
Machine 88756ca30bfb93b0da6a64252adc98fc3e97e142c3b4970af3d2948fd66107b4:
Platform: Linux-6.5.9-arch2-1-x86_64-with-glibc2.35
Timestamp: 2023-11-08 08:53:43.189029+00:00
AquaVM version: 0.54.0
Benches:
Features:
big-values-data (19.60ms; 58.938 MiB, 58.938 MiB): Loading a trace with huge values
air::runner::execute_air: 19.60ms
preparation_step::preparation::parse_data: 6.99ms
from_slice: 6.92ms
preparation_step::preparation::prepare: 259.00µs
air::preparation_step::preparation::make_exec_ctx: 23.00µs
air_parser::parser::air_parser::parse: 21.00µs
runner::execute: 11.00µs
runner::farewell: 5.59ms
from_success_result: 5.55ms
populate_outcome_from_contexts: 5.49ms
signing_step::sign_produced_cids: 186.00µs
verification_step::verify: 6.38ms
verify: 5.75ms
canon-map-key-by-lens (16.20ms; 56.625 MiB, 56.625 MiB): benchmarking a map insert operation
air::runner::execute_air: 16.20ms
preparation_step::preparation::parse_data: 4.01ms
from_slice: 3.96ms
preparation_step::preparation::prepare: 613.00µs
air::preparation_step::preparation::make_exec_ctx: 347.00µs
air_parser::parser::air_parser::parse: 55.00µs
runner::execute: 2.76ms
runner::farewell: 3.22ms
from_success_result: 3.19ms
populate_outcome_from_contexts: 2.78ms
signing_step::sign_produced_cids: 186.00µs
verification_step::verify: 5.30ms
verify: 4.68ms
canon-map-key-element-by-lens (16.20ms; 56.625 MiB, 56.625 MiB): benchmarking a map insert operation
air::runner::execute_air: 16.20ms
preparation_step::preparation::parse_data: 3.98ms
from_slice: 3.93ms
preparation_step::preparation::prepare: 610.00µs
air::preparation_step::preparation::make_exec_ctx: 344.00µs
air_parser::parser::air_parser::parse: 56.00µs
runner::execute: 2.76ms
runner::farewell: 3.20ms
from_success_result: 3.18ms
populate_outcome_from_contexts: 2.78ms
signing_step::sign_produced_cids: 185.00µs
verification_step::verify: 5.30ms
verify: 4.68ms
canon-map-multiple-keys (13.20ms; 54.500 MiB, 54.500 MiB): benchmarking a map insert operation
air::runner::execute_air: 13.20ms
preparation_step::preparation::parse_data: 349.00µs
from_slice: 306.00µs
preparation_step::preparation::prepare: 262.00µs
air::preparation_step::preparation::make_exec_ctx: 15.00µs
air_parser::parser::air_parser::parse: 44.00µs
runner::execute: 8.88ms
runner::farewell: 2.70ms
from_success_result: 2.68ms
populate_outcome_from_contexts: 2.36ms
signing_step::sign_produced_cids: 184.00µs
verification_step::verify: 636.00µs
verify: 26.00µs
canon-map-scalar-multiple-keys (5.52ms; 53.125 MiB, 53.125 MiB): benchmarking a map insert operation
air::runner::execute_air: 5.52ms
preparation_step::preparation::parse_data: 365.00µs
from_slice: 312.00µs
preparation_step::preparation::prepare: 284.00µs
air::preparation_step::preparation::make_exec_ctx: 19.00µs
air_parser::parser::air_parser::parse: 47.00µs
runner::execute: 3.34ms
runner::farewell: 536.00µs
from_success_result: 505.00µs
populate_outcome_from_contexts: 452.00µs
signing_step::sign_produced_cids: 191.00µs
verification_step::verify: 650.00µs
verify: 31.00µs
canon-map-scalar-single-key (4.46ms; 53.000 MiB, 53.000 MiB): benchmarking a map insert operation
air::runner::execute_air: 4.46ms
preparation_step::preparation::parse_data: 370.00µs
from_slice: 324.00µs
preparation_step::preparation::prepare: 262.00µs
air::preparation_step::preparation::make_exec_ctx: 16.00µs
air_parser::parser::air_parser::parse: 40.00µs
runner::execute: 2.32ms
runner::farewell: 513.00µs
from_success_result: 490.00µs
populate_outcome_from_contexts: 434.00µs
signing_step::sign_produced_cids: 185.00µs
verification_step::verify: 680.00µs
verify: 69.00µs
canon-map-single-key (11.30ms; 55.312 MiB, 55.312 MiB): benchmarking a map insert operation
air::runner::execute_air: 11.30ms
preparation_step::preparation::parse_data: 366.00µs
from_slice: 323.00µs
preparation_step::preparation::prepare: 257.00µs
air::preparation_step::preparation::make_exec_ctx: 15.00µs
air_parser::parser::air_parser::parse: 40.00µs
runner::execute: 6.70ms
runner::farewell: 3.01ms
from_success_result: 2.98ms
populate_outcome_from_contexts: 2.71ms
signing_step::sign_produced_cids: 185.00µs
verification_step::verify: 678.00µs
verify: 68.00µs
dashboard (10.70ms; 52.625 MiB, 52.625 MiB): big dashboard test
air::runner::execute_air: 10.70ms
preparation_step::preparation::parse_data: 1.43ms
from_slice: 1.37ms
preparation_step::preparation::prepare: 384.00µs
air::preparation_step::preparation::make_exec_ctx: 41.00µs
air_parser::parser::air_parser::parse: 135.00µs
runner::execute: 2.28ms
to_string(tetraplets): 471.00µs
runner::farewell: 834.00µs
from_success_result: 810.00µs
populate_outcome_from_contexts: 753.00µs
signing_step::sign_produced_cids: 187.00µs
verification_step::verify: 5.46ms
verify: 223.00µs
long-data (6.81ms; 53.812 MiB, 53.812 MiB): Long data trace
air::runner::execute_air: 6.81ms
preparation_step::preparation::parse_data: 2.40ms
from_slice: 2.35ms
preparation_step::preparation::prepare: 264.00µs
air::preparation_step::preparation::make_exec_ctx: 44.00µs
air_parser::parser::air_parser::parse: 17.00µs
runner::execute: 10.00µs
runner::farewell: 1.17ms
from_success_result: 1.15ms
populate_outcome_from_contexts: 1.11ms
signing_step::sign_produced_cids: 190.00µs
verification_step::verify: 2.65ms
verify: 949.00µs
multiple-cids10 (3.78ms; 52.438 MiB, 52.438 MiB): verifying multiple CIDs for single peer
air::runner::execute_air: 3.78ms
preparation_step::preparation::parse_data: 495.00µs
from_slice: 435.00µs
preparation_step::preparation::prepare: 286.00µs
air::preparation_step::preparation::make_exec_ctx: 34.00µs
air_parser::parser::air_parser::parse: 44.00µs
runner::execute: 578.00µs
to_string(tetraplets): 14.00µs
runner::farewell: 537.00µs
from_success_result: 513.00µs
populate_outcome_from_contexts: 452.00µs
signing_step::sign_produced_cids: 185.00µs
verification_step::verify: 1.57ms
verify: 259.00µs
multiple-peers8 (15.50ms; 53.375 MiB, 53.375 MiB): verifying many CIDs for many peers
air::runner::execute_air: 15.50ms
preparation_step::preparation::parse_data: 1.85ms
from_slice: 1.78ms
preparation_step::preparation::prepare: 408.00µs
air::preparation_step::preparation::make_exec_ctx: 143.00µs
air_parser::parser::air_parser::parse: 51.00µs
runner::execute: 3.92ms
to_string(tetraplets): 17.00µs
runner::farewell: 1.59ms
from_success_result: 1.56ms
populate_outcome_from_contexts: 1.44ms
signing_step::sign_produced_cids: 193.00µs
verification_step::verify: 7.44ms
verify: 1.23ms
multiple-sigs30 (26.00ms; 56.188 MiB, 56.188 MiB): signing multiple CIDs
air::runner::execute_air: 26.00ms
preparation_step::preparation::parse_data: 5.05ms
from_slice: 4.98ms
preparation_step::preparation::prepare: 500.00µs
air::preparation_step::preparation::make_exec_ctx: 230.00µs
air_parser::parser::air_parser::parse: 57.00µs
runner::execute: 10.30ms
runner::farewell: 4.21ms
from_success_result: 4.18ms
populate_outcome_from_contexts: 3.99ms
signing_step::sign_produced_cids: 781.00µs
verification_step::verify: 5.00ms
verify: 2.14ms
network-explore (5.14ms; 52.375 MiB, 52.375 MiB): 5 peers of network are discovered
air::runner::execute_air: 5.14ms
preparation_step::preparation::parse_data: 666.00µs
from_slice: 603.00µs
preparation_step::preparation::prepare: 299.00µs
air::preparation_step::preparation::make_exec_ctx: 22.00µs
air_parser::parser::air_parser::parse: 65.00µs
runner::execute: 187.00µs
to_string(tetraplets): 14.00µs
runner::farewell: 459.00µs
from_success_result: 434.00µs
populate_outcome_from_contexts: 388.00µs
signing_step::sign_produced_cids: 200.00µs
verification_step::verify: 3.20ms
verify: 66.00µs
populate-map (3.81ms; 51.938 MiB, 51.938 MiB): benchmarking a map insert operation
air::runner::execute_air: 3.81ms
preparation_step::preparation::parse_data: 130.00µs
from_slice: 91.00µs
preparation_step::preparation::prepare: 278.00µs
air::preparation_step::preparation::make_exec_ctx: 16.00µs
air_parser::parser::air_parser::parse: 49.00µs
runner::execute: 2.83ms
runner::farewell: 423.00µs
from_success_result: 398.00µs
populate_outcome_from_contexts: 349.00µs
signing_step::sign_produced_cids: 10.00µs
verification_step::verify: 13.00µs
populate-map-multiple-keys (4.63ms; 53.000 MiB, 53.000 MiB): benchmarking a map insert operation
air::runner::execute_air: 4.63ms
preparation_step::preparation::parse_data: 139.00µs
from_slice: 94.00µs
preparation_step::preparation::prepare: 266.00µs
air::preparation_step::preparation::make_exec_ctx: 16.00µs
air_parser::parser::air_parser::parse: 47.00µs
runner::execute: 2.83ms
runner::farewell: 439.00µs
from_success_result: 416.00µs
populate_outcome_from_contexts: 373.00µs
signing_step::sign_produced_cids: 184.00µs
verification_step::verify: 636.00µs
verify: 26.00µs
populate-map-single-key (3.77ms; 52.875 MiB, 52.875 MiB): benchmarking a map insert operation
air::runner::execute_air: 3.77ms
preparation_step::preparation::parse_data: 195.00µs
from_slice: 152.00µs
preparation_step::preparation::prepare: 263.00µs
air::preparation_step::preparation::make_exec_ctx: 16.00µs
air_parser::parser::air_parser::parse: 43.00µs
runner::execute: 1.86ms
runner::farewell: 456.00µs
from_success_result: 433.00µs
populate_outcome_from_contexts: 378.00µs
signing_step::sign_produced_cids: 185.00µs
verification_step::verify: 684.00µs
verify: 68.00µs
Machine c1f3ea5950db0a10b44da931c25774d64ab25084f47d504f72f311e694550ff1:
Platform: macOS-12.0.1-x86_64-i386-64bit
Timestamp: 2023-02-13 13:19:34.106863+00:00
@ -410,68 +643,152 @@ Machine c1f3ea5950db0a10b44da931c25774d64ab25084f47d504f72f311e694550ff1:
new: 38.00µs
Machine d77ebe8481884bc3b2778c8083f1bf459e548e929edd87041beb14f6b868d35f:
Platform: macOS-14.0-arm64-arm-64bit
Timestamp: 2023-10-20 13:46:12.008371+00:00
Timestamp: 2023-11-06 18:49:22.923773+00:00
AquaVM version: 0.53.0
Benches:
Features: check_signatures,gen_signatures
big_values_data (8.70ms; 58.938 MiB, 58.938 MiB): Loading a trace with huge values
air::runner::execute_air: 8.70ms
preparation_step::preparation::parse_data: 4.88ms
from_slice: 4.83ms
big_values_data (8.59ms; 58.938 MiB, 58.938 MiB): Loading a trace with huge values
air::runner::execute_air: 8.59ms
preparation_step::preparation::parse_data: 4.79ms
from_slice: 4.74ms
preparation_step::preparation::prepare: 170.00µs
air::preparation_step::preparation::make_exec_ctx: 18.00µs
air_parser::parser::air_parser::parse: 28.00µs
runner::execute: 12.00µs
runner::farewell: 3.30ms
from_success_result: 3.28ms
populate_outcome_from_contexts: 3.24ms
signing_step::sign_produced_cids: 102.00µs
verification_step::verify: 79.00µs
verify: 10.00µs
dashboard (6.55ms; 52.625 MiB, 52.625 MiB): big dashboard test
air::runner::execute_air: 6.55ms
air::preparation_step::preparation::make_exec_ctx: 14.00µs
air_parser::parser::air_parser::parse: 33.00µs
runner::execute: 13.00µs
runner::farewell: 3.25ms
from_success_result: 3.23ms
populate_outcome_from_contexts: 3.19ms
signing_step::sign_produced_cids: 100.00µs
verification_step::verify: 85.00µs
verify: 13.00µs
canon-map-key-by-lens (11.57ms; 56.625 MiB, 56.625 MiB): benchmarking a map insert operation
air::runner::execute_air: 11.57ms
preparation_step::preparation::parse_data: 3.11ms
from_slice: 3.06ms
preparation_step::preparation::prepare: 382.00µs
air::preparation_step::preparation::make_exec_ctx: 185.00µs
air_parser::parser::air_parser::parse: 74.00µs
runner::execute: 1.92ms
runner::farewell: 1.83ms
from_success_result: 1.81ms
populate_outcome_from_contexts: 1.46ms
signing_step::sign_produced_cids: 95.00µs
verification_step::verify: 4.07ms
verify: 3.72ms
canon-map-key-element-by-lens (11.55ms; 56.625 MiB, 56.625 MiB): benchmarking a map insert operation
air::runner::execute_air: 11.55ms
preparation_step::preparation::parse_data: 3.10ms
from_slice: 3.06ms
preparation_step::preparation::prepare: 379.00µs
air::preparation_step::preparation::make_exec_ctx: 184.00µs
air_parser::parser::air_parser::parse: 74.00µs
runner::execute: 1.90ms
runner::farewell: 1.81ms
from_success_result: 1.79ms
populate_outcome_from_contexts: 1.46ms
signing_step::sign_produced_cids: 95.00µs
verification_step::verify: 4.08ms
verify: 3.73ms
canon-map-multiple-keys (9.83ms; 54.500 MiB, 54.500 MiB): benchmarking a map insert operation
air::runner::execute_air: 9.83ms
preparation_step::preparation::parse_data: 397.00µs
from_slice: 352.00µs
preparation_step::preparation::prepare: 196.00µs
air::preparation_step::preparation::make_exec_ctx: 15.00µs
air_parser::parser::air_parser::parse: 58.00µs
runner::execute: 6.93ms
runner::farewell: 1.62ms
from_success_result: 1.60ms
populate_outcome_from_contexts: 1.31ms
signing_step::sign_produced_cids: 96.00µs
verification_step::verify: 405.00µs
verify: 50.00µs
canon-map-scalar-multiple-keys (4.05ms; 53.125 MiB, 53.125 MiB): benchmarking a map insert operation
air::runner::execute_air: 4.05ms
preparation_step::preparation::parse_data: 400.00µs
from_slice: 354.00µs
preparation_step::preparation::prepare: 200.00µs
air::preparation_step::preparation::make_exec_ctx: 15.00µs
air_parser::parser::air_parser::parse: 60.00µs
runner::execute: 2.42ms
runner::farewell: 350.00µs
from_success_result: 331.00µs
populate_outcome_from_contexts: 294.00µs
signing_step::sign_produced_cids: 95.00µs
verification_step::verify: 404.00µs
verify: 50.00µs
canon-map-scalar-single-key (3.27ms; 53.000 MiB, 53.000 MiB): benchmarking a map insert operation
air::runner::execute_air: 3.27ms
preparation_step::preparation::parse_data: 412.00µs
from_slice: 364.00µs
preparation_step::preparation::prepare: 193.00µs
air::preparation_step::preparation::make_exec_ctx: 15.00µs
air_parser::parser::air_parser::parse: 55.00µs
runner::execute: 1.58ms
runner::farewell: 356.00µs
from_success_result: 336.00µs
populate_outcome_from_contexts: 283.00µs
signing_step::sign_produced_cids: 95.00µs
verification_step::verify: 447.00µs
verify: 92.00µs
canon-map-single-key (8.25ms; 55.312 MiB, 55.312 MiB): benchmarking a map insert operation
air::runner::execute_air: 8.25ms
preparation_step::preparation::parse_data: 414.00µs
from_slice: 366.00µs
preparation_step::preparation::prepare: 193.00µs
air::preparation_step::preparation::make_exec_ctx: 15.00µs
air_parser::parser::air_parser::parse: 56.00µs
runner::execute: 5.19ms
runner::farewell: 1.71ms
from_success_result: 1.69ms
populate_outcome_from_contexts: 1.45ms
signing_step::sign_produced_cids: 96.00µs
verification_step::verify: 449.00µs
verify: 95.00µs
dashboard (6.74ms; 52.625 MiB, 52.625 MiB): big dashboard test
air::runner::execute_air: 6.74ms
preparation_step::preparation::parse_data: 1.00ms
from_slice: 946.00µs
preparation_step::preparation::prepare: 314.00µs
air::preparation_step::preparation::make_exec_ctx: 34.00µs
air_parser::parser::air_parser::parse: 160.00µs
runner::execute: 1.63ms
to_string(tetraplets): 350.00µs
runner::farewell: 460.00µs
from_success_result: 440.00µs
populate_outcome_from_contexts: 393.00µs
signing_step::sign_produced_cids: 102.00µs
verification_step::verify: 2.88ms
verify: 161.00µs
from_slice: 947.00µs
preparation_step::preparation::prepare: 318.00µs
air::preparation_step::preparation::make_exec_ctx: 32.00µs
air_parser::parser::air_parser::parse: 163.00µs
runner::execute: 1.70ms
to_string(tetraplets): 362.00µs
runner::farewell: 462.00µs
from_success_result: 442.00µs
populate_outcome_from_contexts: 399.00µs
signing_step::sign_produced_cids: 100.00µs
verification_step::verify: 2.97ms
verify: 215.00µs
long_data (3.64ms; 53.750 MiB, 53.750 MiB): Long data trace
air::runner::execute_air: 3.64ms
preparation_step::preparation::parse_data: 1.75ms
from_slice: 1.71ms
preparation_step::preparation::prepare: 166.00µs
air::preparation_step::preparation::make_exec_ctx: 17.00µs
air_parser::parser::air_parser::parse: 26.00µs
preparation_step::preparation::parse_data: 1.77ms
from_slice: 1.72ms
preparation_step::preparation::prepare: 172.00µs
air::preparation_step::preparation::make_exec_ctx: 14.00µs
air_parser::parser::air_parser::parse: 30.00µs
runner::execute: 12.00µs
runner::farewell: 929.00µs
from_success_result: 910.00µs
populate_outcome_from_contexts: 871.00µs
runner::farewell: 926.00µs
from_success_result: 906.00µs
populate_outcome_from_contexts: 867.00µs
signing_step::sign_produced_cids: 102.00µs
verification_step::verify: 522.00µs
verification_step::verify: 529.00µs
verify: 10.00µs
multiple-cids10 (2.65ms; 52.438 MiB, 52.438 MiB): verifying multiple CIDs for single peer
air::runner::execute_air: 2.65ms
preparation_step::preparation::parse_data: 427.00µs
from_slice: 369.00µs
preparation_step::preparation::prepare: 208.00µs
air::preparation_step::preparation::make_exec_ctx: 25.00µs
multiple-cids10 (2.63ms; 52.438 MiB, 52.438 MiB): verifying multiple CIDs for single peer
air::runner::execute_air: 2.63ms
preparation_step::preparation::parse_data: 417.00µs
from_slice: 363.00µs
preparation_step::preparation::prepare: 205.00µs
air::preparation_step::preparation::make_exec_ctx: 26.00µs
air_parser::parser::air_parser::parse: 58.00µs
runner::execute: 448.00µs
runner::execute: 446.00µs
to_string(tetraplets): 10.00µs
runner::farewell: 322.00µs
from_success_result: 301.00µs
populate_outcome_from_contexts: 254.00µs
signing_step::sign_produced_cids: 98.00µs
verification_step::verify: 957.00µs
verify: 238.00µs
runner::farewell: 321.00µs
from_success_result: 300.00µs
populate_outcome_from_contexts: 252.00µs
signing_step::sign_produced_cids: 100.00µs
verification_step::verify: 952.00µs
verify: 240.00µs
multiple-cids50 (24.68ms; 59.375 MiB, 59.375 MiB): verifying multiple CIDs for single peer
air::runner::execute_air: 24.68ms
preparation_step::preparation::parse_data: 4.87ms
@ -538,21 +855,21 @@ Machine d77ebe8481884bc3b2778c8083f1bf459e548e929edd87041beb14f6b868d35f:
signing_step::sign_produced_cids: 109.00µs
verification_step::verify: 2.48ms
verify: 289.00µs
multiple-peers8 (9.48ms; 53.375 MiB, 53.375 MiB): verifying many CIDs for many peers
air::runner::execute_air: 9.48ms
multiple-peers8 (9.96ms; 53.375 MiB, 53.375 MiB): verifying many CIDs for many peers
air::runner::execute_air: 9.96ms
preparation_step::preparation::parse_data: 1.36ms
from_slice: 1.31ms
preparation_step::preparation::prepare: 254.00µs
air::preparation_step::preparation::make_exec_ctx: 72.00µs
air_parser::parser::air_parser::parse: 62.00µs
runner::execute: 2.72ms
air::preparation_step::preparation::make_exec_ctx: 70.00µs
air_parser::parser::air_parser::parse: 63.00µs
runner::execute: 2.87ms
to_string(tetraplets): 10.00µs
runner::farewell: 915.00µs
from_success_result: 896.00µs
populate_outcome_from_contexts: 788.00µs
signing_step::sign_produced_cids: 102.00µs
runner::farewell: 901.00µs
from_success_result: 881.00µs
populate_outcome_from_contexts: 783.00µs
signing_step::sign_produced_cids: 99.00µs
verification_step::verify: 3.97ms
verify: 762.00µs
verify: 1.02ms
multiple-sigs10 (13.63ms; 52.875 MiB, 52.875 MiB): signing multiple CIDs
air::runner::execute_air: 13.63ms
preparation_step::preparation::parse_data: 653.00µs
@ -587,15 +904,15 @@ Machine d77ebe8481884bc3b2778c8083f1bf459e548e929edd87041beb14f6b868d35f:
signing_step::sign_produced_cids: 22.05ms
verification_step::verify: 153.40ms
verify: 84.07ms
multiple-sigs30 (17.29ms; 56.188 MiB, 56.188 MiB): signing multiple CIDs
air::runner::execute_air: 17.29ms
preparation_step::preparation::parse_data: 3.90ms
from_slice: 3.85ms
multiple-sigs30 (18.99ms; 56.188 MiB, 56.188 MiB): signing multiple CIDs
air::runner::execute_air: 18.99ms
preparation_step::preparation::parse_data: 3.94ms
from_slice: 3.88ms
preparation_step::preparation::prepare: 332.00µs
air::preparation_step::preparation::make_exec_ctx: 152.00µs
air_parser::parser::air_parser::parse: 61.00µs
runner::execute: 6.87ms
runner::farewell: 2.57ms
air::preparation_step::preparation::make_exec_ctx: 147.00µs
air_parser::parser::air_parser::parse: 62.00µs
runner::execute: 8.10ms
runner::farewell: 2.55ms
from_success_result: 2.54ms
populate_outcome_from_contexts: 2.36ms
signing_step::sign_produced_cids: 442.00µs
@ -615,21 +932,21 @@ Machine d77ebe8481884bc3b2778c8083f1bf459e548e929edd87041beb14f6b868d35f:
signing_step::sign_produced_cids: 1.23ms
verification_step::verify: 8.51ms
verify: 4.56ms
network-explore (3.06ms; 52.375 MiB, 52.375 MiB): 5 peers of network are discovered
air::runner::execute_air: 3.06ms
preparation_step::preparation::parse_data: 484.00µs
from_slice: 428.00µs
network-explore (3.13ms; 52.375 MiB, 52.375 MiB): 5 peers of network are discovered
air::runner::execute_air: 3.13ms
preparation_step::preparation::parse_data: 482.00µs
from_slice: 427.00µs
preparation_step::preparation::prepare: 220.00µs
air::preparation_step::preparation::make_exec_ctx: 22.00µs
air_parser::parser::air_parser::parse: 76.00µs
runner::execute: 162.00µs
air::preparation_step::preparation::make_exec_ctx: 19.00µs
air_parser::parser::air_parser::parse: 75.00µs
runner::execute: 167.00µs
to_string(tetraplets): 13.00µs
runner::farewell: 256.00µs
from_success_result: 236.00µs
populate_outcome_from_contexts: 194.00µs
signing_step::sign_produced_cids: 101.00µs
verification_step::verify: 1.69ms
verify: 67.00µs
runner::farewell: 252.00µs
from_success_result: 232.00µs
populate_outcome_from_contexts: 195.00µs
signing_step::sign_produced_cids: 100.00µs
verification_step::verify: 1.72ms
verify: 80.00µs
network_explore (5.23ms; 52.500 MiB, 52.500 MiB): 5 peers of network are discovered
air::runner::execute_air: 5.23ms
preparation_step::preparation::parse_data: 480.00µs
@ -651,96 +968,124 @@ Machine d77ebe8481884bc3b2778c8083f1bf459e548e929edd87041beb14f6b868d35f:
signing_step::sign_produced_cids: 112.00µs
verification_step::verify: 1.73ms
verify: 76.00µs
null (725.00µs; 52.375 MiB, 52.375 MiB): Empty data and null script
air::runner::execute_air: 725.00µs
null (749.00µs; 52.375 MiB, 52.375 MiB): Empty data and null script
air::runner::execute_air: 749.00µs
preparation_step::preparation::parse_data: 29.00µs
preparation_step::preparation::prepare: 179.00µs
air::preparation_step::preparation::make_exec_ctx: 19.00µs
air_parser::parser::air_parser::parse: 33.00µs
preparation_step::preparation::prepare: 183.00µs
air::preparation_step::preparation::make_exec_ctx: 14.00µs
air_parser::parser::air_parser::parse: 31.00µs
runner::execute: 11.00µs
runner::farewell: 180.00µs
from_success_result: 160.00µs
populate_outcome_from_contexts: 123.00µs
signing_step::sign_produced_cids: 109.00µs
verification_step::verify: 45.00µs
verification_step::verify: 39.00µs
verify: 12.00µs
parser_10000_100 (23.33ms; 57.688 MiB, 57.688 MiB): Running very long AIR script with lot of variables and assignments
air::runner::execute_air: 23.33ms
preparation_step::preparation::parse_data: 28.00µs
preparation_step::preparation::prepare: 21.73ms
air::preparation_step::preparation::make_exec_ctx: 18.00µs
air_parser::parser::air_parser::parse: 21.55ms
runner::execute: 54.00µs
runner::farewell: 179.00µs
from_success_result: 160.00µs
populate_outcome_from_contexts: 122.00µs
signing_step::sign_produced_cids: 113.00µs
parser_10000_100 (23.60ms; 57.688 MiB, 57.688 MiB): Running very long AIR script with lot of variables and assignments
air::runner::execute_air: 23.60ms
preparation_step::preparation::parse_data: 22.00µs
preparation_step::preparation::prepare: 21.93ms
air::preparation_step::preparation::make_exec_ctx: 14.00µs
air_parser::parser::air_parser::parse: 21.79ms
runner::execute: 56.00µs
runner::farewell: 178.00µs
from_success_result: 158.00µs
populate_outcome_from_contexts: 126.00µs
signing_step::sign_produced_cids: 104.00µs
verification_step::verify: 44.00µs
verify: 12.00µs
populate-map-multiple-keys (3.42ms; 53.000 MiB, 53.000 MiB): benchmarking a map insert operation
air::runner::execute_air: 3.42ms
preparation_step::preparation::parse_data: 151.00µs
from_slice: 107.00µs
preparation_step::preparation::prepare: 197.00µs
air::preparation_step::preparation::make_exec_ctx: 15.00µs
air_parser::parser::air_parser::parse: 60.00µs
runner::execute: 2.12ms
runner::farewell: 289.00µs
from_success_result: 269.00µs
populate_outcome_from_contexts: 233.00µs
signing_step::sign_produced_cids: 96.00µs
verification_step::verify: 392.00µs
verify: 48.00µs
populate-map-single-key (2.71ms; 52.938 MiB, 52.938 MiB): benchmarking a map insert operation
air::runner::execute_air: 2.71ms
preparation_step::preparation::parse_data: 207.00µs
from_slice: 163.00µs
preparation_step::preparation::prepare: 194.00µs
air::preparation_step::preparation::make_exec_ctx: 15.00µs
air_parser::parser::air_parser::parse: 58.00µs
runner::execute: 1.29ms
runner::farewell: 311.00µs
from_success_result: 290.00µs
populate_outcome_from_contexts: 236.00µs
signing_step::sign_produced_cids: 95.00µs
verification_step::verify: 435.00µs
verify: 93.00µs
Machine e536f8eaae8c978493a773ba566ae3393e2e6240d6ea8e05b5ca1b8f77e9c441:
Platform: Linux-5.15.0-76-generic-x86_64-with-glibc2.29
Timestamp: 2023-10-20 13:56:40.619386+00:00
Timestamp: 2023-10-20 12:46:01.094988+00:00
AquaVM version: 0.53.0
Benches:
Features: check_signatures,gen_signatures
big_values_data (11.90ms; 58.938 MiB, 58.938 MiB): Loading a trace with huge values
air::runner::execute_air: 11.90ms
preparation_step::preparation::parse_data: 6.61ms
from_slice: 6.55ms
preparation_step::preparation::prepare: 221.00µs
big_values_data (12.11ms; 58.938 MiB, 58.938 MiB): Loading a trace with huge values
air::runner::execute_air: 12.11ms
preparation_step::preparation::parse_data: 6.80ms
from_slice: 6.74ms
preparation_step::preparation::prepare: 226.00µs
air::preparation_step::preparation::make_exec_ctx: 18.00µs
air_parser::parser::air_parser::parse: 19.00µs
runner::execute: 10.00µs
runner::farewell: 4.68ms
from_success_result: 4.66ms
populate_outcome_from_contexts: 4.60ms
runner::farewell: 4.70ms
from_success_result: 4.68ms
populate_outcome_from_contexts: 4.62ms
signing_step::sign_produced_cids: 159.00µs
verification_step::verify: 86.00µs
verify: 11.00µs
dashboard (9.39ms; 52.625 MiB, 52.625 MiB): big dashboard test
air::runner::execute_air: 9.39ms
preparation_step::preparation::parse_data: 1.28ms
from_slice: 1.22ms
preparation_step::preparation::prepare: 351.00µs
air::preparation_step::preparation::make_exec_ctx: 41.00µs
air_parser::parser::air_parser::parse: 132.00µs
runner::execute: 2.22ms
to_string(tetraplets): 448.00µs
runner::farewell: 679.00µs
from_success_result: 657.00µs
populate_outcome_from_contexts: 606.00µs
dashboard (9.52ms; 52.625 MiB, 52.625 MiB): big dashboard test
air::runner::execute_air: 9.52ms
preparation_step::preparation::parse_data: 1.26ms
from_slice: 1.21ms
preparation_step::preparation::prepare: 354.00µs
air::preparation_step::preparation::make_exec_ctx: 42.00µs
air_parser::parser::air_parser::parse: 135.00µs
runner::execute: 2.27ms
to_string(tetraplets): 449.00µs
runner::farewell: 672.00µs
from_success_result: 651.00µs
populate_outcome_from_contexts: 601.00µs
signing_step::sign_produced_cids: 161.00µs
verification_step::verify: 4.57ms
verify: 209.00µs
long_data (4.62ms; 53.750 MiB, 53.750 MiB): Long data trace
air::runner::execute_air: 4.62ms
preparation_step::preparation::parse_data: 2.28ms
from_slice: 2.24ms
verify: 267.00µs
long_data (4.57ms; 53.750 MiB, 53.750 MiB): Long data trace
air::runner::execute_air: 4.57ms
preparation_step::preparation::parse_data: 2.27ms
from_slice: 2.23ms
preparation_step::preparation::prepare: 216.00µs
air::preparation_step::preparation::make_exec_ctx: 16.00µs
air_parser::parser::air_parser::parse: 19.00µs
air_parser::parser::air_parser::parse: 18.00µs
runner::execute: 9.00µs
runner::farewell: 1.14ms
from_success_result: 1.11ms
populate_outcome_from_contexts: 1.07ms
signing_step::sign_produced_cids: 158.00µs
verification_step::verify: 686.00µs
runner::farewell: 1.13ms
from_success_result: 1.14ms
populate_outcome_from_contexts: 1.10ms
signing_step::sign_produced_cids: 157.00µs
verification_step::verify: 662.00µs
verify: 11.00µs
multiple-cids10 (3.42ms; 52.438 MiB, 52.438 MiB): verifying multiple CIDs for single peer
air::runner::execute_air: 3.42ms
preparation_step::preparation::parse_data: 450.00µs
from_slice: 400.00µs
preparation_step::preparation::prepare: 253.00µs
air::preparation_step::preparation::make_exec_ctx: 32.00µs
air_parser::parser::air_parser::parse: 43.00µs
runner::execute: 580.00µs
to_string(tetraplets): 13.00µs
runner::farewell: 455.00µs
from_success_result: 434.00µs
populate_outcome_from_contexts: 380.00µs
signing_step::sign_produced_cids: 158.00µs
verification_step::verify: 1.41ms
verify: 303.00µs
multiple-cids10 (3.53ms; 52.438 MiB, 52.438 MiB): verifying multiple CIDs for single peer
air::runner::execute_air: 3.53ms
preparation_step::preparation::parse_data: 467.00µs
from_slice: 413.00µs
preparation_step::preparation::prepare: 263.00µs
air::preparation_step::preparation::make_exec_ctx: 34.00µs
air_parser::parser::air_parser::parse: 47.00µs
runner::execute: 593.00µs
to_string(tetraplets): 14.00µs
runner::farewell: 470.00µs
from_success_result: 448.00µs
populate_outcome_from_contexts: 392.00µs
signing_step::sign_produced_cids: 161.00µs
verification_step::verify: 1.45ms
verify: 317.00µs
multiple-cids50 (323.00ms; 59.375 MiB, 59.375 MiB): verifying multiple CIDs for single peer
air::runner::execute_air: 323.00ms
preparation_step::preparation::parse_data: 6.79ms
@ -804,21 +1149,21 @@ Machine e536f8eaae8c978493a773ba566ae3393e2e6240d6ea8e05b5ca1b8f77e9c441:
signing_step::sign_produced_cids: 190.00µs
verification_step::verify: 70.22ms
verify: 44.09ms
multiple-peers8 (13.55ms; 53.375 MiB, 53.375 MiB): verifying many CIDs for many peers
air::runner::execute_air: 13.55ms
preparation_step::preparation::parse_data: 1.72ms
from_slice: 1.66ms
preparation_step::preparation::prepare: 332.00µs
multiple-peers8 (14.36ms; 53.375 MiB, 53.375 MiB): verifying many CIDs for many peers
air::runner::execute_air: 14.36ms
preparation_step::preparation::parse_data: 1.74ms
from_slice: 1.68ms
preparation_step::preparation::prepare: 333.00µs
air::preparation_step::preparation::make_exec_ctx: 102.00µs
air_parser::parser::air_parser::parse: 51.00µs
air_parser::parser::air_parser::parse: 50.00µs
runner::execute: 3.62ms
to_string(tetraplets): 16.00µs
runner::farewell: 1.31ms
from_success_result: 1.28ms
populate_outcome_from_contexts: 1.17ms
signing_step::sign_produced_cids: 158.00µs
verification_step::verify: 6.26ms
verify: 1.11ms
runner::farewell: 1.30ms
from_success_result: 1.31ms
populate_outcome_from_contexts: 1.16ms
signing_step::sign_produced_cids: 161.00µs
verification_step::verify: 6.74ms
verify: 1.45ms
multiple-sigs200 (6.04s; 214.375 MiB, 214.375 MiB): signing multiple CIDs
air::runner::execute_air: 6.04s
preparation_step::preparation::parse_data: 219.80ms
@ -839,20 +1184,20 @@ Machine e536f8eaae8c978493a773ba566ae3393e2e6240d6ea8e05b5ca1b8f77e9c441:
signing_step::sign_produced_cids: 30.84ms
verification_step::verify: 214.00ms
verify: 119.20ms
multiple-sigs30 (24.47ms; 56.188 MiB, 56.188 MiB): signing multiple CIDs
air::runner::execute_air: 24.47ms
preparation_step::preparation::parse_data: 4.91ms
from_slice: 4.85ms
preparation_step::preparation::prepare: 441.00µs
air::preparation_step::preparation::make_exec_ctx: 215.00µs
air_parser::parser::air_parser::parse: 49.00µs
runner::execute: 10.13ms
runner::farewell: 3.75ms
from_success_result: 3.73ms
populate_outcome_from_contexts: 3.55ms
signing_step::sign_produced_cids: 674.00µs
verification_step::verify: 4.45ms
verify: 1.94ms
multiple-sigs30 (26.89ms; 56.188 MiB, 56.188 MiB): signing multiple CIDs
air::runner::execute_air: 26.89ms
preparation_step::preparation::parse_data: 5.04ms
from_slice: 4.99ms
preparation_step::preparation::prepare: 454.00µs
air::preparation_step::preparation::make_exec_ctx: 219.00µs
air_parser::parser::air_parser::parse: 50.00µs
runner::execute: 11.80ms
runner::farewell: 3.74ms
from_success_result: 3.71ms
populate_outcome_from_contexts: 3.54ms
signing_step::sign_produced_cids: 678.00µs
verification_step::verify: 5.03ms
verify: 2.50ms
multiple-sigs50 (369.10ms; 62.562 MiB, 62.562 MiB): signing multiple CIDs
air::runner::execute_air: 369.10ms
preparation_step::preparation::parse_data: 13.94ms
@ -873,44 +1218,44 @@ Machine e536f8eaae8c978493a773ba566ae3393e2e6240d6ea8e05b5ca1b8f77e9c441:
signing_step::sign_produced_cids: 1.77ms
verification_step::verify: 12.49ms
verify: 6.96ms
network-explore (4.36ms; 52.375 MiB, 52.375 MiB): 5 peers of network are discovered
air::runner::execute_air: 4.36ms
preparation_step::preparation::parse_data: 575.00µs
from_slice: 520.00µs
preparation_step::preparation::prepare: 264.00µs
network-explore (4.43ms; 52.375 MiB, 52.375 MiB): 5 peers of network are discovered
air::runner::execute_air: 4.43ms
preparation_step::preparation::parse_data: 572.00µs
from_slice: 519.00µs
preparation_step::preparation::prepare: 268.00µs
air::preparation_step::preparation::make_exec_ctx: 23.00µs
air_parser::parser::air_parser::parse: 66.00µs
runner::execute: 188.00µs
to_string(tetraplets): 17.00µs
runner::farewell: 361.00µs
from_success_result: 340.00µs
populate_outcome_from_contexts: 298.00µs
signing_step::sign_produced_cids: 160.00µs
verification_step::verify: 2.68ms
verify: 65.00µs
null (828.00µs; 52.375 MiB, 52.375 MiB): Empty data and null script
air::runner::execute_air: 828.00µs
air_parser::parser::air_parser::parse: 67.00µs
runner::execute: 190.00µs
to_string(tetraplets): 13.00µs
runner::farewell: 366.00µs
from_success_result: 344.00µs
populate_outcome_from_contexts: 301.00µs
signing_step::sign_produced_cids: 162.00µs
verification_step::verify: 2.75ms
verify: 79.00µs
null (848.00µs; 52.375 MiB, 52.375 MiB): Empty data and null script
air::runner::execute_air: 848.00µs
preparation_step::preparation::parse_data: 18.00µs
preparation_step::preparation::prepare: 219.00µs
preparation_step::preparation::prepare: 224.00µs
air::preparation_step::preparation::make_exec_ctx: 16.00µs
air_parser::parser::air_parser::parse: 19.00µs
runner::execute: 10.00µs
runner::farewell: 249.00µs
from_success_result: 227.00µs
populate_outcome_from_contexts: 188.00µs
signing_step::sign_produced_cids: 157.00µs
verification_step::verify: 38.00µs
runner::execute: 9.00µs
runner::farewell: 257.00µs
from_success_result: 234.00µs
populate_outcome_from_contexts: 194.00µs
signing_step::sign_produced_cids: 162.00µs
verification_step::verify: 39.00µs
verify: 12.00µs
parser_10000_100 (29.93ms; 57.688 MiB, 57.688 MiB): Running very long AIR script with lot of variables and assignments
air::runner::execute_air: 29.93ms
preparation_step::preparation::parse_data: 20.00µs
preparation_step::preparation::prepare: 28.24ms
air::preparation_step::preparation::make_exec_ctx: 18.00µs
air_parser::parser::air_parser::parse: 27.98ms
runner::execute: 30.00µs
parser_10000_100 (30.20ms; 57.688 MiB, 57.688 MiB): Running very long AIR script with lot of variables and assignments
air::runner::execute_air: 30.20ms
preparation_step::preparation::parse_data: 16.00µs
preparation_step::preparation::prepare: 28.48ms
air::preparation_step::preparation::make_exec_ctx: 17.00µs
air_parser::parser::air_parser::parse: 28.28ms
runner::execute: 31.00µs
runner::farewell: 258.00µs
from_success_result: 236.00µs
populate_outcome_from_contexts: 196.00µs
populate_outcome_from_contexts: 194.00µs
signing_step::sign_produced_cids: 160.00µs
verification_step::verify: 36.00µs
verify: 11.00µs

View File

@ -1,15 +0,0 @@
[package]
name = "cidify"
version = "0.1.0"
edition = "2021"
publish = false
[dependencies]
aquavm-air = { path = "../../air", features = ["gen_signatures", "check_signatures"] }
air-interpreter-cid = { path = "../../crates/air-lib/interpreter-cid" }
air-interpreter-data = { path = "../../crates/air-lib/interpreter-data" }
air-interpreter-signatures = { path = "../../crates/air-lib/interpreter-signatures" }
air-test-utils = { path = "../../crates/air-lib/test-utils" }
clap = { version = "4.1.13", features = ["derive"] }
serde = { version = "1.0.158", features = ["derive"] }
serde_json = "1.0.94"

View File

@ -7,6 +7,8 @@ edition = "2021"
[dependencies]
aquavm-air = { path = "../../air", features = ["gen_signatures", "check_signatures"] }
air-interpreter-cid = { path = "../../crates/air-lib/interpreter-cid" }
air-interpreter-data = { path = "../../crates/air-lib/interpreter-data" }
air-interpreter-signatures = { path = "../../crates/air-lib/interpreter-signatures" }
air-test-utils = { path = "../../crates/air-lib/test-utils" }
air-testing-framework = { path = "../../crates/testing-framework" }

View File

@ -8,13 +8,22 @@ echo "Pre-build a binary..." >&2
cargo build --quiet --release
for bench in multiple-cids10 \
multiple-peers8 \
multiple-sigs30 \
dashboard network-explore; do
multiple-peers8 \
multiple-sigs30 \
big-values-data \
canon-map-key-by-lens \
canon-map-key-element-by-lens \
canon-map-multiple-keys \
canon-map-single-key \
canon-map-scalar-multiple-keys \
canon-map-scalar-single-key \
dashboard \
network-explore \
long-data \
populate-map-multiple-keys \
populate-map-single-key ;
do
echo "Generating ${bench} ..." >&2
if [ "${bench}" == multiple-peers25 ]; then
echo "WARNING: this bench data generation can take more than 10 minutes..." >&2
fi
DESTDIR="../../benches/performance_metering/${bench}/"
mkdir -p "${DESTDIR}"
time cargo run --quiet --release -- --dest-dir "${DESTDIR}" "${bench}"

View File

@ -0,0 +1,20 @@
(new %map
(seq
(seq
(call "init_peer_id" ("" "init") [] data) ; ok = [{data}]
(fold data value
(seq
(ap ("some-lengthy-and-scary-key" value) %map)
(next value)
)
)
)
(seq
(canon "init_peer_id" %map #%canon)
(seq
(canon "other_peer_id" $unused_stream #$node_change)
(ap #%canon.$.some-lengthy-and-scary-key scalar)
)
)
)
)

View File

@ -0,0 +1,20 @@
(new %map
(seq
(seq
(call "init_peer_id" ("" "init") [] data) ; ok = [{data}]
(fold data value
(seq
(ap ("some-lengthy-and-scary-key" value) %map)
(next value)
)
)
)
(seq
(canon "init_peer_id" %map #%canon)
(seq
(canon "other_peer_id" $unused_stream #$node_change)
(ap #%canon.$.some-lengthy-and-scary-key.[{idx}] scalar)
)
)
)
)

View File

@ -0,0 +1,19 @@
(new %map
(seq
(seq
(call "init_peer_id" ("" "init") [] data) ; ok = [{data}]
(fold data key
(seq
(fold data value
(seq
(ap (key value) %map)
(next value)
)
)
(next key)
)
)
)
(canon "other_peer_id" %map #%canon)
)
)

View File

@ -0,0 +1,19 @@
(new %map
(seq
(seq
(call "init_peer_id" ("" "init") [] data) ; ok = [{data}]
(fold data key
(seq
(fold data value
(seq
(ap (key value) %map)
(next value)
)
)
(next key)
)
)
)
(canon "other_peer_id" %map scalar)
)
)

View File

@ -0,0 +1,14 @@
(new %map
(seq
(seq
(call "init_peer_id" ("" "init") [] data) ; ok = [{data}]
(fold data value
(seq
(ap ("somesome-lengthy-and-scary-key" value) %map)
(next value)
)
)
)
(canon "other_peer_id" %map scalar)
)
)

View File

@ -0,0 +1,14 @@
(new %map
(seq
(seq
(call "init_peer_id" ("" "init") [] data) ; ok = [{data}]
(fold data value
(seq
(ap ("some-lengthy-and-scary-key" value) %map)
(next value)
)
)
)
(canon "other_peer_id" %map #%canon)
)
)

View File

@ -1,15 +1,18 @@
use air::interpreter_version;
use air_interpreter_data::ExecutedState;
use air_interpreter_signatures::{PeerCidTracker, SignatureStore};
use air_interpreter_signatures::KeyPair;
use air_interpreter_signatures::PeerCidTracker;
use air_interpreter_signatures::SignatureStore;
use air_test_utils::key_utils::derive_dummy_keypair;
use air_test_utils::prelude::*;
use serde::de::DeserializeOwned;
use serde::Deserialize;
use serde::Serialize;
use serde_json::json;
use serde_json::Value;
use std::collections::HashMap;
use clap::Parser;
use serde::{de::DeserializeOwned, Deserialize, Serialize};
use serde_json::{json, Value};
use std::path::PathBuf;
#[derive(Deserialize, Debug, Serialize)]
struct PreCidInterpeterData {
trace: Vec<Value>,
@ -51,60 +54,6 @@ enum Kind {
Unused,
}
#[derive(Parser)]
struct Args {
data_path: PathBuf,
calls_path: PathBuf,
}
fn main() {
let args = Args::parse();
let mut data: PreCidInterpeterData = read_data(args.data_path);
let calls: TraceCalls = read_data(args.calls_path);
let mut calls = calls.into_iter();
// STUB
let (keypair, id) = derive_dummy_keypair("init_peer_id");
let mut peer_id_cache = HashMap::<String, String>::new();
let mut signature_tracker = PeerCidTracker::new(id);
let mut cid_state = air::ExecutionCidState::new();
for elt in &mut data.trace {
let obj = elt.as_object_mut().unwrap();
if let Some(call) = obj.get_mut("call") {
if let Some(executed) = call.as_object_mut().unwrap().get_mut("executed") {
if let Some(scalar) = executed.as_object_mut().unwrap().get_mut("scalar") {
let call_info = calls.next().expect("More calls than call_info");
let state = transform_cid(
scalar.take(),
call_info,
&mut cid_state,
&mut peer_id_cache,
&mut signature_tracker,
);
*elt = json!(state);
}
}
}
}
data.other_fields.as_object_mut().unwrap().insert(
"cid_info".to_owned(),
serde_json::to_value(Into::<air_interpreter_data::CidInfo>::into(cid_state)).unwrap(),
);
data.other_fields
.as_object_mut()
.unwrap()
.insert("interpreter_version".to_owned(), json!("0.41.0"));
let mut ss = <SignatureStore>::new();
ss.put(keypair.public().into(), signature_tracker.gen_signature("particle_id", &keypair).unwrap());
data.other_fields
.as_object_mut()
.unwrap()
.insert("signatures".to_owned(), json!(ss));
serde_json::to_writer(std::io::stdout(), &data).unwrap();
}
fn derive_peer_id(peer_name: &str, peer_id_cache: &mut HashMap<String, String>) -> String {
peer_id_cache
.entry(peer_name.to_owned())
@ -112,7 +61,7 @@ fn derive_peer_id(peer_name: &str, peer_id_cache: &mut HashMap<String, String>)
.clone()
}
fn read_data<T: DeserializeOwned>(path: PathBuf) -> T {
fn read_data<T: DeserializeOwned>(path: &str) -> T {
let inp = std::fs::File::open(path).unwrap();
serde_json::from_reader(inp).unwrap()
}
@ -142,7 +91,6 @@ fn transform_cid(
builder = builder.json_path(json_path);
}
match meta.kind {
Some(Kind::Scalar) | None => {
let state = builder.scalar_tracked(cid_state);
@ -154,3 +102,87 @@ fn transform_cid(
Some(Kind::Stream) => unimplemented!("no stream in test data"),
}
}
pub fn cid_benchmarking_data(
curr_data_filename: &str,
keypair: &KeyPair,
peer_id: String,
particle_id: &str,
) -> Vec<u8> {
let mut curr_data: PreCidInterpeterData = read_data(curr_data_filename);
let calls: TraceCalls = read_data("src/cid_benchmarking/simple-calls-info.json");
let mut calls = calls.into_iter();
// STUB
let mut peer_id_cache = HashMap::<String, String>::new();
let mut signature_tracker = PeerCidTracker::new(peer_id);
let mut cid_state = air::ExecutionCidState::new();
for elt in &mut curr_data.trace {
let obj = elt.as_object_mut().unwrap();
if let Some(call) = obj.get_mut("call") {
if let Some(executed) = call.as_object_mut().unwrap().get_mut("executed") {
if let Some(scalar) = executed.as_object_mut().unwrap().get_mut("scalar") {
let call_info = calls.next().expect("More calls than call_info");
let state = transform_cid(
scalar.take(),
call_info,
&mut cid_state,
&mut peer_id_cache,
&mut signature_tracker,
);
*elt = json!(state);
}
}
}
}
curr_data.other_fields.as_object_mut().unwrap().insert(
"cid_info".to_owned(),
serde_json::to_value(Into::<air_interpreter_data::CidInfo>::into(cid_state)).unwrap(),
);
curr_data.other_fields.as_object_mut().unwrap().insert(
"interpreter_version".to_owned(),
json!(interpreter_version()),
);
let mut ss = <SignatureStore>::new();
ss.put(
keypair.public(),
signature_tracker
.gen_signature(particle_id, keypair)
.unwrap(),
);
curr_data
.other_fields
.as_object_mut()
.unwrap()
.insert("signatures".to_owned(), json!(ss));
serde_json::to_vec(&curr_data).unwrap()
}
pub fn cid_benchmarking_long_data(
keypair: &KeyPair,
peer_id: String,
particle_id: &str,
) -> Vec<u8> {
cid_benchmarking_data(
"src/cid_benchmarking/anomaly_long.json",
keypair,
peer_id,
particle_id,
)
}
pub fn cid_benchmarking_big_values_data(
keypair: &KeyPair,
peer_id: String,
particle_id: &str,
) -> Vec<u8> {
cid_benchmarking_data(
"src/cid_benchmarking/anomaly_big.json",
keypair,
peer_id,
particle_id,
)
}

View File

@ -16,9 +16,9 @@
use super::Data;
use air_test_utils::prelude::*;
use air_test_utils::key_utils::derive_dummy_keypair;
use air_interpreter_signatures::KeyPair;
use air_test_utils::key_utils::derive_dummy_keypair;
use air_test_utils::prelude::*;
use maplit::hashmap;
use std::cell::RefCell;
@ -26,7 +26,9 @@ use std::collections::HashSet;
use std::rc::Rc;
fn create_peers() -> Vec<(KeyPair, String)> {
(0..7).map(|n| derive_dummy_keypair(&format!("n{n}"))).collect()
(0..7)
.map(|n| derive_dummy_keypair(&format!("n{n}")))
.collect()
}
fn into_hashset(peers: Vec<String>) -> HashSet<String> {
@ -184,7 +186,8 @@ pub(crate) fn dashboard() -> super::Data {
})
.collect::<Vec<_>>();
let test_params = TestRunParameters::from_init_peer_id(client_id.clone()).with_particle_id(super::PARTICLE_ID);
let test_params = TestRunParameters::from_init_peer_id(client_id.clone())
.with_particle_id(super::PARTICLE_ID);
// -> client 1
let client_1_result = checked_call_vm!(client, test_params.clone(), script, "", "");
@ -378,6 +381,6 @@ pub(crate) fn dashboard() -> super::Data {
"init-peer-id".to_owned() => client_id,
},
call_results: None,
keypair: bs58::encode(relay_key.to_vec()).into_string(),
keypair: bs58::encode(relay_key.as_inner().to_vec()).into_string(),
}
}

View File

@ -0,0 +1,12 @@
use std::collections::HashMap;
#[derive(Debug, Default)]
#[allow(dead_code)]
pub(crate) struct Data {
pub(crate) air: String,
pub(crate) prev_data: Vec<u8>,
pub(crate) cur_data: Vec<u8>,
pub(crate) params_json: HashMap<String, String>,
pub(crate) call_results: Option<serde_json::Value>,
pub(crate) keypair: String,
}

View File

@ -1,15 +1,22 @@
use air_test_framework::*;
use air_test_utils::key_utils::derive_dummy_keypair;
use air_test_utils::prelude::*;
use clap::{Parser, Subcommand};
use clap::Parser;
use clap::Subcommand;
use itertools::Itertools as _;
use maplit::hashmap;
use serde::Serialize;
use std::collections::HashMap;
use std::path::{Path, PathBuf};
use std::path::Path;
use std::path::PathBuf;
const PARTICLE_ID: &str = "0123456789ABCDEF";
const MAX_STREAM_SIZE: usize = 1023;
mod cid_benchmarking;
mod dashboard;
mod data;
mod network_explore;
#[derive(Debug, Parser)]
@ -23,6 +30,7 @@ struct Cli {
#[derive(Debug, Subcommand)]
enum Bench {
Dashboard,
MultipleCids10,
MultipleCids50,
MultiplePeers5,
@ -31,8 +39,17 @@ enum Bench {
MultipleSigs10,
MultipleSigs30,
MultipleSigs200,
Dashboard,
NetworkExplore,
CanonMapKeyByLens,
CanonMapKeyElementByLens,
PopulateMapMultipleKeys,
PopulateMapSingleKey,
CanonMapMultipleKeys,
CanonMapSingleKey,
CanonMapScalarMultipleKeys,
CanonMapScalarSingleKey,
LongData,
BigValuesData,
}
fn main() {
@ -49,6 +66,16 @@ fn main() {
Bench::MultipleSigs200 => multiple_sigs(200),
Bench::Dashboard => dashboard::dashboard(),
Bench::NetworkExplore => network_explore::network_explore(),
Bench::PopulateMapMultipleKeys => populate_map_multiple_keys(MAX_STREAM_SIZE),
Bench::PopulateMapSingleKey => populate_map_single_key(770),
Bench::CanonMapMultipleKeys => canon_map_multiple_keys(MAX_STREAM_SIZE),
Bench::CanonMapSingleKey => canon_map_single_key(770),
Bench::CanonMapScalarMultipleKeys => canon_map_scalar_multiple_keys(MAX_STREAM_SIZE),
Bench::CanonMapScalarSingleKey => canon_map_scalar_single_key(770),
Bench::CanonMapKeyByLens => canon_map_key_by_lens(770),
Bench::CanonMapKeyElementByLens => canon_map_key_element_by_lens(770),
Bench::LongData => long_data(),
Bench::BigValuesData => big_values_data(),
};
save_data(&args.dest_dir, data).unwrap();
@ -59,28 +86,46 @@ fn save_data(dest_dir: &Path, data: Data) -> Result<(), Box<dyn std::error::Erro
create_dir_all(dest_dir)?;
save_file(dest_dir, "script.air", &data.air)?;
save_file(dest_dir, "prev_data.json", &reformat_json(&data.prev_data))?;
save_file(dest_dir, "cur_data.json", &reformat_json(&data.cur_data))?;
save_file(dest_dir, "params.json", &serde_json::to_vec_pretty(&data.params_json)?)?;
save_file(dest_dir, "keypair.ed25519", &data.keypair)?;
save_file(dest_dir, "script.air", Some(&data.air))?;
save_file(
dest_dir,
"prev_data.json",
reformat_json_if_possible(&data.prev_data),
)?;
save_file(
dest_dir,
"cur_data.json",
reformat_json_if_possible(&data.cur_data),
)?;
save_file(
dest_dir,
"params.json",
Some(&serde_json::to_vec_pretty(&data.params_json)?),
)?;
save_file(dest_dir, "keypair.ed25519", Some(&data.keypair))?;
Ok(())
}
/// make zero-indentation data for better git diffs
fn reformat_json(data: &[u8]) -> Vec<u8> {
use serde::ser::Serialize;
fn reformat_json_if_possible(data: &[u8]) -> Option<Vec<u8>> {
if data.is_empty() {
return None;
}
let obj: serde_json::Value = serde_json::from_slice(data).unwrap();
let fmt = serde_json::ser::PrettyFormatter::with_indent(&[]);
let mut out = vec![];
let mut ser = serde_json::ser::Serializer::with_formatter(&mut out, fmt);
obj.serialize(&mut ser).unwrap();
out
Some(out)
}
fn save_file(dest_dir: &Path, filename: &str, data: impl AsRef<[u8]>) -> Result<(), Box<dyn std::error::Error>>{
fn save_file(
dest_dir: &Path,
filename: &str,
data: Option<impl AsRef<[u8]>>,
) -> Result<(), Box<dyn std::error::Error>> {
use std::fs::*;
use std::io::prelude::*;
@ -88,12 +133,15 @@ fn save_file(dest_dir: &Path, filename: &str, data: impl AsRef<[u8]>) -> Result<
dest_dir.push(filename);
let mut f = File::create(&dest_dir)?;
f.write_all(data.as_ref())?;
if let Some(data) = data {
f.write_all(data.as_ref())?;
}
Ok(())
}
#[derive(Debug, Default)]
#[allow(dead_code)]
pub(crate) struct Data {
pub(crate) air: String,
pub(crate) prev_data: Vec<u8>,
@ -104,7 +152,7 @@ pub(crate) struct Data {
}
fn multiple_cids(size: usize) -> Data {
let data = (0..size).map(|n| format!(r#""val{}""#, n)).join(",");
let data: String = (0..size).map(|n| format!(r#""val{}""#, n)).join(",");
let air_script = format!(include_str!("multiple_cids.air.tmpl"), data = data);
let exec = AirScriptExecutor::<NativeAirRunner>::new(
@ -112,7 +160,8 @@ fn multiple_cids(size: usize) -> Data {
vec![],
vec![],
&air_script,
).unwrap();
)
.unwrap();
let prev_res = exec.execute_one("init_peer_id").unwrap();
let cur_res = exec.execute_one("other_peer_id").unwrap();
@ -155,7 +204,8 @@ fn multiple_peers(size: usize) -> Data {
vec![],
peers.clone(),
&air_script,
).unwrap();
)
.unwrap();
let prev_res = exec.execute_one("init_peer_id").unwrap();
@ -200,7 +250,8 @@ fn multiple_sigs(size: usize) -> Data {
vec![],
vec![],
&air_script,
).unwrap();
)
.unwrap();
let prev_res = exec.execute_one("init_peer_id").unwrap();
let cur_res = exec.execute_one("other_peer_id").unwrap();
@ -232,3 +283,397 @@ fn multiple_sigs(size: usize) -> Data {
keypair: bs58::encode(keypair.to_vec()).into_string(),
}
}
fn canon_map_key_by_lens(size: usize) -> Data {
let data: String = (0..size).map(|n| format!(r#""val{}""#, n)).join(",");
let air_script = format!(include_str!("canon_map_key_by_lens.air.tmpl"), data = data);
let exec = AirScriptExecutor::<NativeAirRunner>::new(
TestRunParameters::from_init_peer_id("init_peer_id").with_particle_id(PARTICLE_ID),
vec![],
vec![],
&air_script,
)
.unwrap();
let prev_res = exec.execute_one("init_peer_id").unwrap();
let keypair = exec
.get_network()
.get_named_peer_env("other_peer_id")
.expect("main peer")
.borrow()
.get_peer()
.get_keypair()
.clone();
let peer_id: String = exec.resolve_name("other_peer_id").to_string();
let init_peer_id: String = exec.resolve_name("init_peer_id").to_string();
Data {
air: exec.get_transformed_air_script().to_string(),
prev_data: vec![],
cur_data: prev_res.data,
params_json: hashmap! {
"comment".to_owned() => "benchmarking a map insert operation".to_owned(),
"particle-id".to_owned() => PARTICLE_ID.to_owned(),
"current-peer-id".to_owned() => peer_id.clone(),
"init-peer-id".to_owned() => init_peer_id,
},
call_results: None,
keypair: bs58::encode(keypair.to_vec()).into_string(),
}
}
fn canon_map_key_element_by_lens(size: usize) -> Data {
let data: String = (0..size).map(|n| format!(r#""val{}""#, n)).join(",");
let air_script = format!(
include_str!("canon_map_key_element_by_lens.air.tmpl"),
data = data,
idx = size - 1
);
let exec = AirScriptExecutor::<NativeAirRunner>::new(
TestRunParameters::from_init_peer_id("init_peer_id").with_particle_id(PARTICLE_ID),
vec![],
vec![],
&air_script,
)
.unwrap();
let prev_res = exec.execute_one("init_peer_id").unwrap();
let keypair = exec
.get_network()
.get_named_peer_env("other_peer_id")
.expect("main peer")
.borrow()
.get_peer()
.get_keypair()
.clone();
let peer_id: String = exec.resolve_name("other_peer_id").to_string();
let init_peer_id: String = exec.resolve_name("init_peer_id").to_string();
Data {
air: exec.get_transformed_air_script().to_string(),
prev_data: vec![],
cur_data: prev_res.data,
params_json: hashmap! {
"comment".to_owned() => "benchmarking a map insert operation".to_owned(),
"particle-id".to_owned() => PARTICLE_ID.to_owned(),
"current-peer-id".to_owned() => peer_id.clone(),
"init-peer-id".to_owned() => init_peer_id,
},
call_results: None,
keypair: bs58::encode(keypair.to_vec()).into_string(),
}
}
fn populate_map_multiple_keys(size: usize) -> Data {
let sq_root = (size as f64).sqrt() as usize;
let data: String = (0..sq_root).map(|n| format!(r#""val{}""#, n)).join(",");
let air_script = format!(
include_str!("populate_map_multiple_keys.air.tmpl"),
data = data
);
let exec = AirScriptExecutor::<NativeAirRunner>::new(
TestRunParameters::from_init_peer_id("init_peer_id").with_particle_id(PARTICLE_ID),
vec![],
vec![],
&air_script,
)
.unwrap();
let prev_res = exec.execute_one("init_peer_id").unwrap();
let keypair = exec
.get_network()
.get_named_peer_env("other_peer_id")
.expect("main peer")
.borrow()
.get_peer()
.get_keypair()
.clone();
let peer_id: String = exec.resolve_name("other_peer_id").to_string();
let init_peer_id: String = exec.resolve_name("init_peer_id").to_string();
Data {
air: exec.get_transformed_air_script().to_string(),
prev_data: vec![],
cur_data: prev_res.data,
params_json: hashmap! {
"comment".to_owned() => "benchmarking a map insert operation".to_owned(),
"particle-id".to_owned() => PARTICLE_ID.to_owned(),
"current-peer-id".to_owned() => peer_id.clone(),
"init-peer-id".to_owned() => init_peer_id,
},
call_results: None,
keypair: bs58::encode(keypair.to_vec()).into_string(),
}
}
fn populate_map_single_key(size: usize) -> Data {
let data: String = (0..size).map(|n| format!(r#""val{}""#, n)).join(",");
let air_script = format!(
include_str!("populate_map_single_key.air.tmpl"),
data = data
);
let exec = AirScriptExecutor::<NativeAirRunner>::new(
TestRunParameters::from_init_peer_id("init_peer_id").with_particle_id(PARTICLE_ID),
vec![],
vec![],
&air_script,
)
.unwrap();
let prev_res = exec.execute_one("init_peer_id").unwrap();
let keypair = exec
.get_network()
.get_named_peer_env("other_peer_id")
.expect("main peer")
.borrow()
.get_peer()
.get_keypair()
.clone();
let peer_id: String = exec.resolve_name("other_peer_id").to_string();
let init_peer_id: String = exec.resolve_name("init_peer_id").to_string();
Data {
air: exec.get_transformed_air_script().to_string(),
prev_data: vec![],
cur_data: prev_res.data,
params_json: hashmap! {
"comment".to_owned() => "benchmarking a map insert operation".to_owned(),
"particle-id".to_owned() => PARTICLE_ID.to_owned(),
"current-peer-id".to_owned() => peer_id.clone(),
"init-peer-id".to_owned() => init_peer_id,
},
call_results: None,
keypair: bs58::encode(keypair.to_vec()).into_string(),
}
}
fn canon_map_multiple_keys(size: usize) -> Data {
let sq_root = (size as f64).sqrt() as usize;
let data: String = (0..sq_root).map(|n| format!(r#""val{}""#, n)).join(",");
let air_script = format!(
include_str!("canon_map_multiple_keys.air.tmpl"),
data = data
);
let exec = AirScriptExecutor::<NativeAirRunner>::new(
TestRunParameters::from_init_peer_id("init_peer_id").with_particle_id(PARTICLE_ID),
vec![],
vec![],
&air_script,
)
.unwrap();
let prev_res = exec.execute_one("init_peer_id").unwrap();
let keypair = exec
.get_network()
.get_named_peer_env("other_peer_id")
.expect("main peer")
.borrow()
.get_peer()
.get_keypair()
.clone();
let peer_id: String = exec.resolve_name("other_peer_id").to_string();
let init_peer_id: String = exec.resolve_name("init_peer_id").to_string();
Data {
air: exec.get_transformed_air_script().to_string(),
prev_data: vec![],
cur_data: prev_res.data,
params_json: hashmap! {
"comment".to_owned() => "benchmarking a map insert operation".to_owned(),
"particle-id".to_owned() => PARTICLE_ID.to_owned(),
"current-peer-id".to_owned() => peer_id.clone(),
"init-peer-id".to_owned() => init_peer_id,
},
call_results: None,
keypair: bs58::encode(keypair.to_vec()).into_string(),
}
}
fn canon_map_single_key(size: usize) -> Data {
let data: String = (0..size).map(|n| format!(r#""val{}""#, n)).join(",");
let air_script = format!(include_str!("canon_map_single_key.air.tmpl"), data = data);
let exec = AirScriptExecutor::<NativeAirRunner>::new(
TestRunParameters::from_init_peer_id("init_peer_id").with_particle_id(PARTICLE_ID),
vec![],
vec![],
&air_script,
)
.unwrap();
let prev_res = exec.execute_one("init_peer_id").unwrap();
let keypair = exec
.get_network()
.get_named_peer_env("other_peer_id")
.expect("main peer")
.borrow()
.get_peer()
.get_keypair()
.clone();
let peer_id: String = exec.resolve_name("other_peer_id").to_string();
let init_peer_id: String = exec.resolve_name("init_peer_id").to_string();
Data {
air: exec.get_transformed_air_script().to_string(),
prev_data: vec![],
cur_data: prev_res.data,
params_json: hashmap! {
"comment".to_owned() => "benchmarking a map insert operation".to_owned(),
"particle-id".to_owned() => PARTICLE_ID.to_owned(),
"current-peer-id".to_owned() => peer_id.clone(),
"init-peer-id".to_owned() => init_peer_id,
},
call_results: None,
keypair: bs58::encode(keypair.to_vec()).into_string(),
}
}
fn canon_map_scalar_multiple_keys(size: usize) -> Data {
let sq_root = (size as f64).sqrt() as usize;
let data: String = (0..sq_root).map(|n| format!(r#""val{}""#, n)).join(",");
let air_script = format!(
include_str!("canon_map_scalar_multiple_keys.air.tmpl"),
data = data
);
let exec = AirScriptExecutor::<NativeAirRunner>::new(
TestRunParameters::from_init_peer_id("init_peer_id").with_particle_id(PARTICLE_ID),
vec![],
vec![],
&air_script,
)
.unwrap();
let prev_res = exec.execute_one("init_peer_id").unwrap();
let keypair = exec
.get_network()
.get_named_peer_env("other_peer_id")
.expect("main peer")
.borrow()
.get_peer()
.get_keypair()
.clone();
let peer_id: String = exec.resolve_name("other_peer_id").to_string();
let init_peer_id: String = exec.resolve_name("init_peer_id").to_string();
Data {
air: exec.get_transformed_air_script().to_string(),
prev_data: vec![],
cur_data: prev_res.data,
params_json: hashmap! {
"comment".to_owned() => "benchmarking a map insert operation".to_owned(),
"particle-id".to_owned() => PARTICLE_ID.to_owned(),
"current-peer-id".to_owned() => peer_id.clone(),
"init-peer-id".to_owned() => init_peer_id,
},
call_results: None,
keypair: bs58::encode(keypair.to_vec()).into_string(),
}
}
fn canon_map_scalar_single_key(size: usize) -> Data {
let data: String = (0..size).map(|n| format!(r#""val{}""#, n)).join(",");
let air_script = format!(
include_str!("canon_map_scalar_single_key.air.tmpl"),
data = data
);
let exec = AirScriptExecutor::<NativeAirRunner>::new(
TestRunParameters::from_init_peer_id("init_peer_id").with_particle_id(PARTICLE_ID),
vec![],
vec![],
&air_script,
)
.unwrap();
let prev_res = exec.execute_one("init_peer_id").unwrap();
let keypair = exec
.get_network()
.get_named_peer_env("other_peer_id")
.expect("main peer")
.borrow()
.get_peer()
.get_keypair()
.clone();
let peer_id: String = exec.resolve_name("other_peer_id").to_string();
let init_peer_id: String = exec.resolve_name("init_peer_id").to_string();
Data {
air: exec.get_transformed_air_script().to_string(),
prev_data: vec![],
cur_data: prev_res.data,
params_json: hashmap! {
"comment".to_owned() => "benchmarking a map insert operation".to_owned(),
"particle-id".to_owned() => PARTICLE_ID.to_owned(),
"current-peer-id".to_owned() => peer_id.clone(),
"init-peer-id".to_owned() => init_peer_id,
},
call_results: None,
keypair: bs58::encode(keypair.to_vec()).into_string(),
}
}
fn long_data() -> Data {
use cid_benchmarking::cid_benchmarking_long_data;
let (keypair, peer_id) = derive_dummy_keypair("init_peer_id");
let particle_id = "particle_id";
let cur_data = cid_benchmarking_long_data(&keypair, peer_id.clone(), particle_id);
Data {
air: "(null)".to_owned(),
prev_data: vec![],
cur_data,
params_json: hashmap! {
"comment".to_owned() => "Long data trace".to_owned(),
"particle-id".to_owned() => particle_id.to_owned(),
"current-peer-id".to_owned() => peer_id.clone(),
"init-peer-id".to_owned() => peer_id,
},
call_results: None,
keypair: bs58::encode(keypair.as_inner().to_vec()).into_string(),
}
}
fn big_values_data() -> Data {
use cid_benchmarking::cid_benchmarking_big_values_data;
let (keypair, peer_id) = derive_dummy_keypair("init_peer_id");
let particle_id = "particle_id";
let cur_data = cid_benchmarking_big_values_data(&keypair, peer_id.clone(), particle_id);
Data {
air: "(null)".to_owned(),
prev_data: vec![],
cur_data,
params_json: hashmap! {
"comment".to_owned() => "Loading a trace with huge values".to_owned(),
"particle-id".to_owned() => particle_id.to_owned(),
"current-peer-id".to_owned() => peer_id.clone(),
"init-peer-id".to_owned() => peer_id,
},
call_results: None,
keypair: bs58::encode(keypair.as_inner().to_vec()).into_string(),
}
}

View File

@ -176,6 +176,6 @@ pub(crate) fn network_explore() -> Data {
"init-peer-id".to_owned() => "".to_owned(),
},
call_results: None,
keypair: bs58::encode(relay_key.to_vec()).into_string(),
keypair: bs58::encode(relay_key.as_inner().to_vec()).into_string(),
}
}

View File

@ -0,0 +1,22 @@
(new %map
(seq
(seq
(call "init_peer_id" ("" "init") [] data) ; ok = [{data}]
(seq
(canon "other_peer_id" %map #%switch_node1)
(fold data key
(seq
(fold data value
(seq
(ap (key value) %map)
(next value)
)
)
(next key)
)
)
)
)
(call "init_peer_id" ("" "complete") [])
)
)

View File

@ -0,0 +1,17 @@
(new %map
(seq
(seq
(call "init_peer_id" ("" "init") [] data) ; ok = [{data}]
(seq
(canon "other_peer_id" %map #%switch_node1)
(fold data value
(seq
(ap ("some-lengthy-and-scary-key" value) %map)
(next value)
)
)
)
)
(call "init_peer_id" ("" "complete") [])
)
)