Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: new world state #8776

Merged
merged 119 commits into from
Oct 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
46b24db
feat: add world state
alexghr Jul 17, 2024
87a2642
feat: add world state nodejs addon
alexghr Jul 18, 2024
bd0aab7
feat: add native world state node package
alexghr Jul 18, 2024
eb8ad58
chore: update db size
alexghr Jul 18, 2024
8448cdc
test: enable block synch test
alexghr Jul 18, 2024
7fbb305
refactor: simplify types
alexghr Jul 18, 2024
30a0d5e
chore: update imports and interfaces
alexghr Aug 27, 2024
f8cba90
fix: switch to poseidon
alexghr Aug 27, 2024
5b6284e
Merge remote-tracking branch 'origin/master' into ag/world-state
PhilWindle Aug 29, 2024
af13709
Add yarn command
PhilWindle Aug 29, 2024
b21d995
Another attempt
PhilWindle Aug 29, 2024
60664e8
fix: remove bad includes
alexghr Aug 29, 2024
bd0bae9
Fix for gcc
PhilWindle Aug 29, 2024
c86cb35
fix: test
alexghr Aug 29, 2024
1697a23
fix: update hashes
alexghr Aug 29, 2024
8db2c50
Fix build attempt
PhilWindle Aug 29, 2024
01bd840
Merge branch 'ag/world-state' of github.com:AztecProtocol/aztec-packa…
PhilWindle Aug 29, 2024
cee7209
More build fixes
PhilWindle Aug 29, 2024
115e9be
Fixes
PhilWindle Aug 29, 2024
91f37cc
Fix bootstrap
PhilWindle Aug 29, 2024
dd914ef
More build fixes
PhilWindle Aug 29, 2024
8997dd3
More build stuff
PhilWindle Aug 29, 2024
72b5fa8
Fix
PhilWindle Aug 29, 2024
a0d3b33
Build fix
PhilWindle Aug 29, 2024
399492e
Updates for initial state reference
PhilWindle Sep 7, 2024
0f6a272
Merge branch 'ag/world-state' of github.com:AztecProtocol/aztec-packa…
PhilWindle Sep 7, 2024
83aaaca
Content addressed append only tree
PhilWindle Sep 10, 2024
cda2860
Some refactoring
PhilWindle Sep 11, 2024
307e29b
Tests passing
PhilWindle Sep 13, 2024
2df113d
Pending chain increasing
PhilWindle Sep 15, 2024
6ef0218
Historic paths
PhilWindle Sep 15, 2024
bb189b6
Tests passing
PhilWindle Sep 16, 2024
4a9b68d
More fixes
PhilWindle Sep 17, 2024
ff41a25
Block number versions of leaf retrieval
PhilWindle Sep 17, 2024
e0e2367
Minor refactor
PhilWindle Sep 17, 2024
52440b9
Tests
PhilWindle Sep 17, 2024
545b604
Historic data and tree images
PhilWindle Sep 17, 2024
910e7b5
Removed some debug logging
PhilWindle Sep 17, 2024
3c642d4
More tests and bug fixes
PhilWindle Sep 18, 2024
cc41c3f
Benchmark updates
PhilWindle Sep 18, 2024
5d9c985
Refactoring
PhilWindle Sep 18, 2024
ff8de80
Use narrowed key comparison
PhilWindle Sep 18, 2024
afd7a0f
Updated world state
PhilWindle Sep 18, 2024
9e0afd8
Removed logging
PhilWindle Sep 18, 2024
2fe4e8b
Fixes
PhilWindle Sep 18, 2024
77a4c49
Throttle additions to the thread pool
PhilWindle Sep 19, 2024
de1496b
Merge remote-tracking branch 'origin/master' into pw/new-world-state
PhilWindle Sep 19, 2024
fcdf688
Merge fixes
PhilWindle Sep 19, 2024
d77ab63
Fixes
PhilWindle Sep 19, 2024
30868b6
Merge branch 'pw/new-world-state' of github.com:AztecProtocol/aztec-p…
PhilWindle Sep 19, 2024
c7e27e9
TS tests passing
PhilWindle Sep 20, 2024
e17afdd
Creating and deleting forks
PhilWindle Sep 20, 2024
5c1d51b
Test updates
PhilWindle Sep 23, 2024
9b9257a
Merge remote-tracking branch 'origin/master' into pw/new-world-state
alexghr Sep 23, 2024
03bde5a
chore: restore lost code after merge
alexghr Sep 23, 2024
83f0d52
perf: batch insert all public writes at the same time
alexghr Sep 23, 2024
d603135
fix: add lock to get_initial_state_reference
alexghr Sep 25, 2024
1bc51b0
fix: handle create/delete fork messages
alexghr Sep 25, 2024
c73bfb2
fix: use correct response msgType when updating the archive tree
alexghr Sep 25, 2024
6036ae9
fix: handle forks at block 0
alexghr Sep 25, 2024
3beddf3
fix: implement getSnapshot on native world state
alexghr Sep 25, 2024
f192da8
fix: circular includes
alexghr Sep 25, 2024
c7740d1
fix: pass fork id along with all writes
alexghr Sep 25, 2024
fbfd5d3
test: add fork test
alexghr Sep 25, 2024
fb4b197
fix: archive tree writes when synching blocks
alexghr Sep 25, 2024
5955387
chore: update Earthly job references
alexghr Sep 25, 2024
8a5768b
Merge remote-tracking branch 'origin/master' into pw/new-world-state
alexghr Sep 25, 2024
beb6333
fix: explicitly capture `this`
alexghr Sep 25, 2024
53757f1
fix: update unit tests
alexghr Sep 25, 2024
42e96f8
fix: add initialisers
alexghr Sep 25, 2024
8fb271c
fix: use move to fix mem leak
alexghr Sep 26, 2024
027c4ae
fix: memory leak in indexed tree
alexghr Sep 26, 2024
52be23e
fix: tighter lock guards
alexghr Sep 26, 2024
49ac72f
fix: properly fix the circular reference
alexghr Sep 26, 2024
19bd6a9
fix: enqueue job under lock
alexghr Sep 27, 2024
ead7b6d
fix: pass-by-value index_t
alexghr Sep 27, 2024
65ab5af
Merge remote-tracking branch 'origin/master' into pw/new-world-state
alexghr Sep 27, 2024
4aa86aa
refactor: take tree heights from constants.nr
alexghr Sep 27, 2024
51bf6b6
Revert "fix: pass-by-value index_t"
alexghr Sep 27, 2024
1572dc5
test: check initial archive root
alexghr Sep 27, 2024
bd7fb8d
fix: include constants in test
alexghr Sep 27, 2024
e102a9e
refactor: rename block_hash to block_header_hash
alexghr Sep 27, 2024
f84bb85
fix: pass full config options to world_state
alexghr Sep 27, 2024
dd4485d
fix: actually test the right fork
alexghr Sep 27, 2024
ed9f638
feat: clear data on rollup address change
alexghr Sep 27, 2024
2e3c5d0
test: remove unnecessary test
alexghr Sep 27, 2024
46f2004
fix: consistently copy the world_state napi module
alexghr Sep 27, 2024
0c9aedd
Cleanup
PhilWindle Sep 27, 2024
0a4f447
More cleanup work
PhilWindle Sep 27, 2024
f75a6cc
Test fixes
PhilWindle Sep 28, 2024
184d3d5
More cleanup
PhilWindle Sep 28, 2024
1cff79a
Updated benchmarks
PhilWindle Sep 28, 2024
04ddfa0
Cap enqueued ops at size of thread pool
PhilWindle Sep 28, 2024
cc202d2
Merge remote-tracking branch 'origin/master' into pw/new-world-state
alexghr Sep 30, 2024
cba51ff
fix: bad conflict resolution
alexghr Sep 30, 2024
e580483
fix: yarn prepare
alexghr Sep 30, 2024
9fb122b
fix: wait for jobs to settle before stopping prover node
alexghr Sep 30, 2024
48e41ef
Initial work on batch insertion without witness retrieval
PhilWindle Sep 30, 2024
ba1518f
Cleanup
PhilWindle Sep 30, 2024
764c47c
Merge branch 'pw/new-world-state' of github.com:AztecProtocol/aztec-p…
PhilWindle Sep 30, 2024
b54bfbb
Merge remote-tracking branch 'origin/master' into pw/new-world-state
alexghr Oct 2, 2024
b1a597f
feat: init archive tree (#8908)
alexghr Oct 3, 2024
184666b
test: fix orchestrator_failure race
alexghr Oct 3, 2024
4d753df
fix: public write batches (#8986)
alexghr Oct 4, 2024
d85c4fa
Use atomic
PhilWindle Oct 4, 2024
051a924
Merge remote-tracking branch 'origin/master' into pw/new-world-state
PhilWindle Oct 4, 2024
aa55f0d
feat: forks (#8984)
alexghr Oct 4, 2024
5e7e5e0
chore: fix formatting issue
alexghr Oct 4, 2024
8e8da28
fix: more timeouts
alexghr Oct 4, 2024
07ff556
Merge remote-tracking branch 'origin/master' into pw/new-world-state
alexghr Oct 4, 2024
ead6f2c
Test updates
PhilWindle Oct 5, 2024
4d2a540
Merge remote-tracking branch 'origin/master' into pw/new-world-state
alexghr Oct 5, 2024
5431d20
fix: properly capture errors
alexghr Oct 5, 2024
e292749
fix: return error
alexghr Oct 5, 2024
6982054
fix: catch dupe nullifier early
alexghr Oct 5, 2024
04bd242
Remove gcc pic build
PhilWindle Oct 7, 2024
80f722c
Merge branch 'pw/new-world-state' of github.com:AztecProtocol/aztec-p…
PhilWindle Oct 7, 2024
8412e78
Merge branch 'master' into pw/new-world-state
alexghr Oct 7, 2024
97964fd
Merge branch 'master' into pw/new-world-state
alexghr Oct 8, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion barretenberg/cpp/scripts/merkle_tree_tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ set -e
# run commands relative to parent directory
cd $(dirname $0)/..

DEFAULT_TESTS=PersistedIndexedTreeTest.*:PersistedAppendOnlyTreeTest.*:LMDBStoreTest.*
DEFAULT_TESTS=PersistedIndexedTreeTest.*:PersistedAppendOnlyTreeTest.*:LMDBStoreTest.*:PersistedContentAddressedIndexedTreeTest.*:PersistedContentAddressedAppendOnlyTreeTest.*
TEST=${1:-$DEFAULT_TESTS}
PRESET=${PRESET:-clang16}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
#include "barretenberg/crypto/merkle_tree/append_only_tree/append_only_tree.hpp"
#include "barretenberg/common/thread_pool.hpp"
#include "barretenberg/crypto/merkle_tree/append_only_tree/content_addressed_append_only_tree.hpp"
#include "barretenberg/crypto/merkle_tree/fixtures.hpp"
#include "barretenberg/crypto/merkle_tree/hash.hpp"
#include "barretenberg/crypto/merkle_tree/indexed_tree/indexed_leaf.hpp"
#include "barretenberg/crypto/merkle_tree/indexed_tree/indexed_tree.hpp"
#include "barretenberg/crypto/merkle_tree/lmdb_store/lmdb_store.hpp"
#include "barretenberg/crypto/merkle_tree/lmdb_store/lmdb_tree_store.hpp"
#include "barretenberg/crypto/merkle_tree/node_store/array_store.hpp"
#include "barretenberg/crypto/merkle_tree/node_store/cached_tree_store.hpp"
#include "barretenberg/crypto/merkle_tree/node_store/cached_content_addressed_tree_store.hpp"
#include "barretenberg/crypto/merkle_tree/response.hpp"
#include "barretenberg/crypto/merkle_tree/signal.hpp"
#include "barretenberg/ecc/curves/bn254/fr.hpp"
#include "barretenberg/numeric/random/engine.hpp"
#include <benchmark/benchmark.h>
#include <cstdint>
#include <filesystem>
#include <memory>

using namespace benchmark;
using namespace bb::crypto::merkle_tree;

namespace {
using StoreType = CachedTreeStore<LMDBStore, fr>;
using StoreType = ContentAddressedCachedTreeStore<bb::fr>;

using Pedersen = AppendOnlyTree<StoreType, PedersenHashPolicy>;
using Poseidon2 = AppendOnlyTree<StoreType, Poseidon2HashPolicy>;
using Pedersen = ContentAddressedAppendOnlyTree<StoreType, PedersenHashPolicy>;
using Poseidon2 = ContentAddressedAppendOnlyTree<StoreType, Poseidon2HashPolicy>;

const size_t TREE_DEPTH = 32;
const size_t MAX_BATCH_SIZE = 128;
const size_t MAX_BATCH_SIZE = 64;

template <typename TreeType> void perform_batch_insert(TreeType& tree, const std::vector<fr>& values)
{
Expand Down Expand Up @@ -52,12 +53,11 @@ template <typename TreeType> void append_only_tree_bench(State& state) noexcept
std::string name = random_string();
std::filesystem::create_directories(directory);
uint32_t num_threads = 16;
LMDBEnvironment environment = LMDBEnvironment(directory, 1024 * 1024, 2, num_threads);

LMDBStore db(environment, name, false, false, integer_key_cmp);
StoreType store(name, depth, db);
ThreadPool workers(num_threads);
TreeType tree = TreeType(store, workers);
LMDBTreeStore::SharedPtr db = std::make_shared<LMDBTreeStore>(directory, name, 1024 * 1024, num_threads);
std::unique_ptr<StoreType> store = std::make_unique<StoreType>(name, depth, db);
std::shared_ptr<ThreadPool> workers = std::make_shared<ThreadPool>(num_threads);
TreeType tree = TreeType(std::move(store), workers);

for (auto _ : state) {
state.PauseTiming();
Expand All @@ -71,16 +71,16 @@ template <typename TreeType> void append_only_tree_bench(State& state) noexcept

std::filesystem::remove_all(directory);
}
BENCHMARK(append_only_tree_bench<Pedersen>)
BENCHMARK(append_only_tree_bench<Poseidon2>)
->Unit(benchmark::kMillisecond)
->RangeMultiplier(2)
->Range(2, MAX_BATCH_SIZE)
->Iterations(100);
->Iterations(1000);
BENCHMARK(append_only_tree_bench<Poseidon2>)
->Unit(benchmark::kMillisecond)
->RangeMultiplier(2)
->Range(2, MAX_BATCH_SIZE)
->Iterations(1000);
->Range(512, 8192)
->Iterations(10);

} // namespace

Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,44 @@
#include "barretenberg/crypto/merkle_tree/indexed_tree/indexed_tree.hpp"
#include "barretenberg/common/thread_pool.hpp"
#include "barretenberg/crypto/merkle_tree/fixtures.hpp"
#include "barretenberg/crypto/merkle_tree/hash.hpp"
#include "barretenberg/crypto/merkle_tree/indexed_tree/content_addressed_indexed_tree.hpp"
#include "barretenberg/crypto/merkle_tree/indexed_tree/indexed_leaf.hpp"
#include "barretenberg/crypto/merkle_tree/lmdb_store/callbacks.hpp"
#include "barretenberg/crypto/merkle_tree/lmdb_store/lmdb_store.hpp"
#include "barretenberg/crypto/merkle_tree/node_store/cached_tree_store.hpp"
#include "barretenberg/crypto/merkle_tree/lmdb_store/lmdb_tree_store.hpp"
#include "barretenberg/crypto/merkle_tree/node_store/cached_content_addressed_tree_store.hpp"
#include "barretenberg/crypto/merkle_tree/response.hpp"
#include "barretenberg/numeric/random/engine.hpp"
#include <benchmark/benchmark.h>
#include <filesystem>
#include <memory>
#include <vector>

using namespace benchmark;
using namespace bb::crypto::merkle_tree;

using StoreType = CachedTreeStore<LMDBStore, NullifierLeafValue>;
using StoreType = ContentAddressedCachedTreeStore<NullifierLeafValue>;

using Poseidon2 = IndexedTree<StoreType, Poseidon2HashPolicy>;
using Pedersen = IndexedTree<StoreType, PedersenHashPolicy>;
using Poseidon2 = ContentAddressedIndexedTree<StoreType, Poseidon2HashPolicy>;
using Pedersen = ContentAddressedIndexedTree<StoreType, PedersenHashPolicy>;

const size_t TREE_DEPTH = 40;
const size_t MAX_BATCH_SIZE = 128;
const size_t MAX_BATCH_SIZE = 64;

template <typename TreeType> void add_values(TreeType& tree, const std::vector<NullifierLeafValue>& values)
{
Signal signal(1);
auto completion = [&](const auto&) -> void { signal.signal_level(0); };
typename TreeType::AddCompletionCallback completion = [&](const auto&) -> void { signal.signal_level(0); };

tree.add_or_update_values(values, completion);
signal.wait_for_level(0);
}

template <typename TreeType> void add_values_with_witness(TreeType& tree, const std::vector<NullifierLeafValue>& values)
{
Signal signal(1);
typename TreeType::AddCompletionCallbackWithWitness completion = [&](const auto&) -> void {
signal.signal_level(0);
};

tree.add_or_update_values(values, completion);
signal.wait_for_level(0);
Expand All @@ -39,12 +53,18 @@ template <typename TreeType> void multi_thread_indexed_tree_bench(State& state)
std::string name = random_string();
std::filesystem::create_directories(directory);
uint32_t num_threads = 16;
LMDBEnvironment environment = LMDBEnvironment(directory, 1024 * 1024, 2, num_threads);

LMDBStore db(environment, name, false, false, integer_key_cmp);
StoreType store(name, depth, db);
ThreadPool workers(num_threads);
TreeType tree = TreeType(store, workers, batch_size);
LMDBTreeStore::SharedPtr db = std::make_shared<LMDBTreeStore>(directory, name, 1024 * 1024, num_threads);
std::unique_ptr<StoreType> store = std::make_unique<StoreType>(name, depth, db);
std::shared_ptr<ThreadPool> workers = std::make_shared<ThreadPool>(num_threads);
TreeType tree = TreeType(std::move(store), workers, batch_size);

const size_t initial_size = 1024 * 16;
std::vector<NullifierLeafValue> initial_batch(initial_size);
for (size_t i = 0; i < batch_size; ++i) {
initial_batch[i] = fr(random_engine.get_random_uint256());
}
add_values(tree, initial_batch);

for (auto _ : state) {
state.PauseTiming();
Expand All @@ -66,12 +86,18 @@ template <typename TreeType> void single_thread_indexed_tree_bench(State& state)
std::string name = random_string();
std::filesystem::create_directories(directory);
uint32_t num_threads = 1;
LMDBEnvironment environment = LMDBEnvironment(directory, 1024 * 1024, 2, num_threads);

LMDBStore db(environment, name, false, false, integer_key_cmp);
StoreType store(name, depth, db);
ThreadPool workers(num_threads);
TreeType tree = TreeType(store, workers, batch_size);
LMDBTreeStore::SharedPtr db = std::make_shared<LMDBTreeStore>(directory, name, 1024 * 1024, num_threads);
std::unique_ptr<StoreType> store = std::make_unique<StoreType>(name, depth, db);
std::shared_ptr<ThreadPool> workers = std::make_shared<ThreadPool>(num_threads);
TreeType tree = TreeType(std::move(store), workers, batch_size);

const size_t initial_size = 1024 * 16;
std::vector<NullifierLeafValue> initial_batch(initial_size);
for (size_t i = 0; i < batch_size; ++i) {
initial_batch[i] = fr(random_engine.get_random_uint256());
}
add_values(tree, initial_batch);

for (auto _ : state) {
state.PauseTiming();
Expand All @@ -83,27 +109,119 @@ template <typename TreeType> void single_thread_indexed_tree_bench(State& state)
add_values(tree, values);
}
}
BENCHMARK(single_thread_indexed_tree_bench<Pedersen>)

template <typename TreeType> void multi_thread_indexed_tree_with_witness_bench(State& state) noexcept
{
const size_t batch_size = size_t(state.range(0));
const size_t depth = TREE_DEPTH;

std::string directory = random_temp_directory();
std::string name = random_string();
std::filesystem::create_directories(directory);
uint32_t num_threads = 16;

LMDBTreeStore::SharedPtr db = std::make_shared<LMDBTreeStore>(directory, name, 1024 * 1024, num_threads);
std::unique_ptr<StoreType> store = std::make_unique<StoreType>(name, depth, db);
std::shared_ptr<ThreadPool> workers = std::make_shared<ThreadPool>(num_threads);
TreeType tree = TreeType(std::move(store), workers, batch_size);

const size_t initial_size = 1024 * 16;
std::vector<NullifierLeafValue> initial_batch(initial_size);
for (size_t i = 0; i < batch_size; ++i) {
initial_batch[i] = fr(random_engine.get_random_uint256());
}
add_values(tree, initial_batch);

for (auto _ : state) {
state.PauseTiming();
std::vector<NullifierLeafValue> values(batch_size);
for (size_t i = 0; i < batch_size; ++i) {
values[i] = fr(random_engine.get_random_uint256());
}
state.ResumeTiming();
add_values_with_witness(tree, values);
}
}

template <typename TreeType> void single_thread_indexed_tree_with_witness_bench(State& state) noexcept
{
const size_t batch_size = size_t(state.range(0));
const size_t depth = TREE_DEPTH;

std::string directory = random_temp_directory();
std::string name = random_string();
std::filesystem::create_directories(directory);
uint32_t num_threads = 1;

LMDBTreeStore::SharedPtr db = std::make_shared<LMDBTreeStore>(directory, name, 1024 * 1024, num_threads);
std::unique_ptr<StoreType> store = std::make_unique<StoreType>(name, depth, db);
std::shared_ptr<ThreadPool> workers = std::make_shared<ThreadPool>(num_threads);
TreeType tree = TreeType(std::move(store), workers, batch_size);

const size_t initial_size = 1024 * 16;
std::vector<NullifierLeafValue> initial_batch(initial_size);
for (size_t i = 0; i < batch_size; ++i) {
initial_batch[i] = fr(random_engine.get_random_uint256());
}
add_values(tree, initial_batch);

for (auto _ : state) {
state.PauseTiming();
std::vector<NullifierLeafValue> values(batch_size);
for (size_t i = 0; i < batch_size; ++i) {
values[i] = fr(random_engine.get_random_uint256());
}
state.ResumeTiming();
add_values_with_witness(tree, values);
}
}

BENCHMARK(single_thread_indexed_tree_with_witness_bench<Poseidon2>)
->Unit(benchmark::kMillisecond)
->RangeMultiplier(2)
->Range(2, MAX_BATCH_SIZE)
->Iterations(100);
->Iterations(1000);

BENCHMARK(multi_thread_indexed_tree_bench<Pedersen>)
BENCHMARK(single_thread_indexed_tree_with_witness_bench<Poseidon2>)
->Unit(benchmark::kMillisecond)
->RangeMultiplier(2)
->Range(512, 8192)
->Iterations(10);

BENCHMARK(multi_thread_indexed_tree_with_witness_bench<Poseidon2>)
->Unit(benchmark::kMillisecond)
->RangeMultiplier(2)
->Range(2, MAX_BATCH_SIZE)
->Iterations(100);
->Iterations(1000);

BENCHMARK(multi_thread_indexed_tree_with_witness_bench<Poseidon2>)
->Unit(benchmark::kMillisecond)
->RangeMultiplier(2)
->Range(512, 8192)
->Iterations(10);

BENCHMARK(single_thread_indexed_tree_bench<Poseidon2>)
->Unit(benchmark::kMillisecond)
->RangeMultiplier(2)
->Range(2, MAX_BATCH_SIZE)
->Iterations(1000);

BENCHMARK(single_thread_indexed_tree_bench<Poseidon2>)
->Unit(benchmark::kMillisecond)
->RangeMultiplier(2)
->Range(512, 8192)
->Iterations(10);

BENCHMARK(multi_thread_indexed_tree_bench<Poseidon2>)
->Unit(benchmark::kMillisecond)
->RangeMultiplier(2)
->Range(2, MAX_BATCH_SIZE)
->Iterations(1000);

BENCHMARK(multi_thread_indexed_tree_bench<Poseidon2>)
->Unit(benchmark::kMillisecond)
->RangeMultiplier(2)
->Range(512, 8192)
->Iterations(100);

BENCHMARK_MAIN();
Loading
Loading