From 1c6beae992b15ca6981aedaf02005a55cef80c36 Mon Sep 17 00:00:00 2001 From: Dmitriy Khaustov aka xDimon Date: Mon, 15 Sep 2025 12:19:54 +0300 Subject: [PATCH] some fixes Signed-off-by: Dmitriy Khaustov aka xDimon --- .githooks/README.md | 4 ++-- src/blockchain/genesis_block_header.hpp | 6 ++++- src/blockchain/impl/block_storage_impl.cpp | 4 ++-- src/blockchain/impl/block_tree_impl.cpp | 7 ------ src/blockchain/impl/block_tree_impl.hpp | 2 -- src/modules/production/production.cpp | 2 +- src/serde/serialization.hpp | 22 +++++++++++++++++++ src/types/block_header.hpp | 7 ++++-- src/types/checkpoint.hpp | 1 + tests/unit/blockchain/block_storage_test.cpp | 12 ++++++---- .../rocksdb/rocksdb_integration_test.cpp | 2 +- 11 files changed, 47 insertions(+), 22 deletions(-) diff --git a/.githooks/README.md b/.githooks/README.md index fdee8ef..2e2c45a 100755 --- a/.githooks/README.md +++ b/.githooks/README.md @@ -6,9 +6,9 @@ SPDX-License-Identifier: Apache-2.0 # Git Hooks -This folder _might_ contain some git-hooks to execute various checkup in Kagome. +This folder _might_ contain some git-hooks to execute various checkup in Lean. -To activate presented (_and all future_) hooks just execute **once** shell-script [activate_hooks.sh](./activate_hooks.sh) from Kagome project root path. +To activate presented (_and all future_) hooks just execute **once** shell-script [activate_hooks.sh](./activate_hooks.sh) from Lean project root path. ## pre-commit diff --git a/src/blockchain/genesis_block_header.hpp b/src/blockchain/genesis_block_header.hpp index c21808e..18029a3 100644 --- a/src/blockchain/genesis_block_header.hpp +++ b/src/blockchain/genesis_block_header.hpp @@ -12,7 +12,11 @@ namespace lean::blockchain { class GenesisBlockHeader : public BlockHeader { public: - using BlockHeader::BlockHeader; + template + GenesisBlockHeader(Args &&...args) + : BlockHeader(std::forward(args)...) { + updateHash(); + } }; } // namespace lean::blockchain diff --git a/src/blockchain/impl/block_storage_impl.cpp b/src/blockchain/impl/block_storage_impl.cpp index 1e96584..74993a9 100644 --- a/src/blockchain/impl/block_storage_impl.cpp +++ b/src/blockchain/impl/block_storage_impl.cpp @@ -363,8 +363,8 @@ namespace lean::blockchain { if (encoded_header_opt.has_value()) { auto &encoded_header = encoded_header_opt.value(); OUTCOME_TRY(header, decode(encoded_header)); - header.hash_opt.emplace(block_hash); - return std::make_optional(std::move(header)); + BOOST_ASSERT((header.updateHash(), header.hash() == block_hash)); + return std::make_optional(header); } return std::nullopt; } diff --git a/src/blockchain/impl/block_tree_impl.cpp b/src/blockchain/impl/block_tree_impl.cpp index c94f098..2b7b963 100644 --- a/src/blockchain/impl/block_tree_impl.cpp +++ b/src/blockchain/impl/block_tree_impl.cpp @@ -159,13 +159,6 @@ namespace lean::blockchain { }); } - void BlockTreeImpl::notifyChainEventsEngine(EventTypes event, - const BlockHeader &header) { - BOOST_ASSERT(header.hash_opt.has_value()); - auto header_ptr = std::make_shared(header); - se_manager_->notify(event, header_ptr); - } - outcome::result BlockTreeImpl::removeLeaf(const BlockHash &block_hash) { return block_tree_data_.exclusiveAccess( [&](BlockTreeData &p) -> outcome::result { diff --git a/src/blockchain/impl/block_tree_impl.hpp b/src/blockchain/impl/block_tree_impl.hpp index 5788ee5..9603363 100644 --- a/src/blockchain/impl/block_tree_impl.hpp +++ b/src/blockchain/impl/block_tree_impl.hpp @@ -160,8 +160,6 @@ namespace lean::blockchain { const BlockHash &block_hash, const BlockHeader &block_header); - void notifyChainEventsEngine(EventTypes event, const BlockHeader &header); - class SafeBlockTreeData { public: explicit SafeBlockTreeData(BlockTreeData data); diff --git a/src/modules/production/production.cpp b/src/modules/production/production.cpp index 0d5a20c..6c199d7 100644 --- a/src/modules/production/production.cpp +++ b/src/modules/production/production.cpp @@ -55,7 +55,7 @@ namespace lean::modules { block.slot = msg->slot; block.proposer_index = producer_index; block.parent_root = parent_hash; - block.state_root = {}; + // block.state_root = ; // Add a block into the block tree auto res = block_tree_->addBlock(block); diff --git a/src/serde/serialization.hpp b/src/serde/serialization.hpp index 3b9b016..f30513a 100644 --- a/src/serde/serialization.hpp +++ b/src/serde/serialization.hpp @@ -64,4 +64,26 @@ namespace lean { memcpy(hash2.data(), hash1.data(), hash1.size()); return hash2; } + + template + std::array& as_u8(std::array& v) { + return reinterpret_cast&>(v); + } + + template + std::array& as_byte(std::array& v) { + return reinterpret_cast&>(v); + } + + template + std::array as_u8(std::array&& v) { + return reinterpret_cast&>(v); + } + + template + std::array as_byte(std::array&& v) { + return reinterpret_cast&>(v); + } + + } // namespace lean diff --git a/src/types/block_header.hpp b/src/types/block_header.hpp index e316538..dc60c32 100644 --- a/src/types/block_header.hpp +++ b/src/types/block_header.hpp @@ -22,9 +22,9 @@ namespace lean { class BlockHeader : public ssz::ssz_container { public: /// The block’s slot number - Slot slot; + Slot slot{}; /// Index of the validator that proposed the block - ProposerIndex proposer_index; + ProposerIndex proposer_index{}; /// Hash of the parent block HeaderHash parent_root; /// Hash of the post-state after the block is processed @@ -34,9 +34,11 @@ namespace lean { BlockHeader() = default; + private: /// Block hash if calculated mutable std::optional hash_opt{}; + public: CUSTOM_EQUALITY( BlockHeader, slot, proposer_index, parent_root, state_root, body_root); @@ -56,4 +58,5 @@ namespace lean { return {slot, hash()}; } }; + } // namespace lean diff --git a/src/types/checkpoint.hpp b/src/types/checkpoint.hpp index e5df1cb..f966074 100644 --- a/src/types/checkpoint.hpp +++ b/src/types/checkpoint.hpp @@ -7,6 +7,7 @@ #pragma once #include +#include #include "types.hpp" diff --git a/tests/unit/blockchain/block_storage_test.cpp b/tests/unit/blockchain/block_storage_test.cpp index d9e40d8..111d79e 100644 --- a/tests/unit/blockchain/block_storage_test.cpp +++ b/tests/unit/blockchain/block_storage_test.cpp @@ -52,7 +52,8 @@ class BlockStorageTest : public testing::Test { } void SetUp() override { - genesis_header->hash_opt = genesis_block_hash; + genesis_header->updateHash(); + genesis_block_hash = genesis_header->hash(); hasher = std::make_shared(); spaced_storage = std::make_shared(); @@ -231,8 +232,7 @@ TEST_F(BlockStorageTest, PutWithStorageError) { BlockHeader header; header.slot = 1; header.parent_root = genesis_block_hash; - header.body_root = {}; // ssz::hash_tree_root(body); - header.updateHash(); + header.body_root = lean::sszHash(body); BlockData block; block.header.emplace(header); @@ -240,7 +240,11 @@ TEST_F(BlockStorageTest, PutWithStorageError) { block.header->parent_root = genesis_block_hash; block.body.emplace(body); - ByteVec key{block.header->hash()}; + auto encoded_header = ByteVec(encode(*block.header).value()); + ON_CALL(*hasher, sha2_256(encoded_header.view())) + .WillByDefault(Return(regular_block_hash)); + + ByteVec key{lean::sszHash(header)}; EXPECT_CALL(*spaces[Space::Body], put(key.view(), _)) .WillOnce(Return(lean::storage::StorageError::IO_ERROR)); diff --git a/tests/unit/storage/rocksdb/rocksdb_integration_test.cpp b/tests/unit/storage/rocksdb/rocksdb_integration_test.cpp index 5493d07..8b5f26f 100644 --- a/tests/unit/storage/rocksdb/rocksdb_integration_test.cpp +++ b/tests/unit/storage/rocksdb/rocksdb_integration_test.cpp @@ -20,7 +20,7 @@ namespace fs = std::filesystem; struct RocksDb_Integration_Test : public test::BaseRocksDB_Test { RocksDb_Integration_Test() - : test::BaseRocksDB_Test("/tmp/kagome_rocksdb_integration_test") {} + : test::BaseRocksDB_Test("/tmp/lean_rocksdb_integration_test") {} Buffer key_{1, 3, 3, 7}; Buffer value_{1, 2, 3};