Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
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
8 changes: 4 additions & 4 deletions .github/workflows/build_and_test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,11 @@ jobs:
uses: actions/cache/restore@v4
with:
path: ${{ env.CACHE_PATH }}
key: jam-${{ runner.os }}-${{ github.job }}-${{ env.CACHE_VERSION }}-${{ github.run_id }}
key: lean-${{ runner.os }}-${{ github.job }}-${{ env.CACHE_VERSION }}-${{ github.run_id }}
restore-keys: |
jam-${{ runner.os }}-${{ github.job }}-${{ env.CACHE_VERSION }}
jam-${{ runner.os }}-${{ github.job }}
jam-${{ runner.os }}
lean-${{ runner.os }}-${{ github.job }}-${{ env.CACHE_VERSION }}
lean-${{ runner.os }}-${{ github.job }}
lean-${{ runner.os }}

- name: "Basic init"
run: |
Expand Down
3 changes: 0 additions & 3 deletions .gitmodules

This file was deleted.

2 changes: 1 addition & 1 deletion docker/ci-docker
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@


# paths
PROJECT=/cpp-jam
PROJECT=/cpp-lean
VENV=$PROJECT.venv
BUILD=$PROJECT.build
VCPKG=/vcpkg
Expand Down
4 changes: 2 additions & 2 deletions docker/ci-docker-run
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ LOCAL=$PWD
[[ -d $LOCAL/docker ]]

docker run --rm -it \
-v $LOCAL:/cpp-jam \
ubuntu:24.04 /cpp-jam/docker/ci-docker
-v $LOCAL:/cpp-lean \
ubuntu:24.04 /cpp-lean/docker/ci-docker
3 changes: 2 additions & 1 deletion example/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,14 @@ logging:
level: trace
is_fallback: true
children:
- name: jam
- name: lean
children:
- name: modules
children:
- name: example_module
- name: synchronizer_module
- name: networking_module
- name: production_module
- name: injector
- name: application
- name: rpc
Expand Down
12 changes: 12 additions & 0 deletions src/app/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ target_link_libraries(chain_spec
logger
Boost::property_tree
app_configuration
sszpp
)

add_library(application SHARED
Expand All @@ -69,3 +70,14 @@ target_link_libraries(application
app_configuration
metrics
)

add_library(timeline SHARED
impl/timeline_impl.cpp
)
target_link_libraries(timeline
qtils::qtils
logger
sszpp
# app_configuration
# metrics
)
2 changes: 1 addition & 1 deletion src/app/chain_spec.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

#include <qtils/byte_vec.hpp>

#include "lean_types/types.hpp"
#include "types/types.hpp"

namespace lean {

Expand Down
3 changes: 3 additions & 0 deletions src/app/impl/application_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "app/configuration.hpp"
#include "app/impl/watchdog.hpp"
#include "app/state_manager.hpp"
#include "app/timeline.hpp"
#include "clock/clock.hpp"
#include "log/logger.hpp"
#include "metrics/histogram_timer.hpp"
Expand All @@ -33,13 +34,15 @@ namespace lean::app {
qtils::SharedRef<Watchdog> watchdog,
qtils::SharedRef<metrics::Exposer> metrics_exposer,
qtils::SharedRef<clock::SystemClock> system_clock,
qtils::SharedRef<Timeline> timeline,
std::shared_ptr<SeHolder>)
: logger_(logsys->getLogger("Application", "application")),
app_config_(std::move(config)),
state_manager_(std::move(state_manager)),
watchdog_(std::move(watchdog)),
metrics_exposer_(std::move(metrics_exposer)),
system_clock_(std::move(system_clock)),
timeline_(std::move(timeline)),
metrics_registry_(metrics::createRegistry()) {
// Metric for exposing name and version of node
metrics::GaugeHelper(
Expand Down
3 changes: 3 additions & 0 deletions src/app/impl/application_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ namespace lean {
} // namespace lean

namespace lean::app {
class Timeline;
class Configuration;
class StateManager;
} // namespace lean::app
Expand Down Expand Up @@ -82,6 +83,7 @@ namespace lean::app {
qtils::SharedRef<Watchdog> watchdog,
qtils::SharedRef<metrics::Exposer> metrics_exposer,
qtils::SharedRef<clock::SystemClock> system_clock,
qtils::SharedRef<Timeline> timeline,
std::shared_ptr<SeHolder>);

void run() override;
Expand All @@ -93,6 +95,7 @@ namespace lean::app {
qtils::SharedRef<Watchdog> watchdog_;
qtils::SharedRef<metrics::Exposer> metrics_exposer_;
qtils::SharedRef<clock::SystemClock> system_clock_;
qtils::SharedRef<Timeline> timeline_;

// Metrics
std::unique_ptr<metrics::Registry> metrics_registry_;
Expand Down
17 changes: 12 additions & 5 deletions src/app/impl/chain_spec_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@

#include <app/configuration.hpp>

#include "types/block_header.hpp"

OUTCOME_CPP_DEFINE_CATEGORY(lean::app, ChainSpecImpl::Error, e) {
using E = lean::app::ChainSpecImpl::Error;
switch (e) {
Expand Down Expand Up @@ -68,11 +70,16 @@ namespace lean::app {

outcome::result<void> ChainSpecImpl::loadGenesis(
const boost::property_tree::ptree &tree) {
OUTCOME_TRY(
genesis_header_hex,
ensure("genesis_header", tree.get_child_optional("genesis_header")));
OUTCOME_TRY(genesis_header_encoded,
qtils::ByteVec::fromHex(genesis_header_hex.data()));
// OUTCOME_TRY(
// genesis_header_hex,
// ensure("genesis_header", tree.get_child_optional("genesis_header")));
// OUTCOME_TRY(genesis_header_encoded,
// qtils::ByteVec::fromHex(genesis_header_hex.data()));

BlockHeader header;
header.proposer_index = -1ull;
OUTCOME_TRY(genesis_header_encoded, encode(header));

genesis_header_ = std::move(genesis_header_encoded);
return outcome::success();
}
Expand Down
97 changes: 97 additions & 0 deletions src/app/impl/timeline_impl.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/**
* Copyright Quadrivium LLC
* All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*/


#include "timeline_impl.hpp"

#include <utility>

#include "app/state_manager.hpp"
#include "clock/clock.hpp"
#include "log/logger.hpp"
#include "modules/shared/prodution_types.tmp.hpp"
#include "se/impl/subscription_manager.hpp"
#include "se/subscription.hpp"
#include "se/subscription_fwd.hpp"
#include "types/config.hpp"
#include "types/constants.hpp"

namespace lean::app {

TimelineImpl::TimelineImpl(qtils::SharedRef<log::LoggingSystem> logsys,
qtils::SharedRef<StateManager> state_manager,
qtils::SharedRef<Subscription> se_manager,
qtils::SharedRef<clock::SystemClock> clock,
qtils::SharedRef<Config> config)
: logger_(logsys->getLogger("Timeline", "application")),
state_manager_(std::move(state_manager)),
config_(std::move(config)),
clock_(std::move(clock)),
se_manager_(std::move(se_manager)) {
state_manager_->takeControl(*this);
}

void TimelineImpl::prepare() {
on_slot_started_ =
se::SubscriberCreator<qtils::Empty,
std::shared_ptr<const messages::SlotStarted>>::
create<EventTypes::SlotStarted>(
*se_manager_,
SubscriptionEngineHandlers::kTest,
[this](auto &,
std::shared_ptr<const messages::SlotStarted> msg) {
on_slot_started(std::move(msg));
});
}

void TimelineImpl::start() {
auto now = clock_->nowMsec();
auto next_slot = (now - config_->genesis_time) / SLOT_DURATION_MS + 1;
auto time_to_next_slot =
config_->genesis_time + SLOT_DURATION_MS * next_slot - now;
if (time_to_next_slot < SLOT_DURATION_MS / 2) {
++next_slot;
time_to_next_slot += SLOT_DURATION_MS;
}
SL_INFO(logger_,
"Starting timeline. Next slot is {}, starts in {}ms",
next_slot,
time_to_next_slot);
se_manager_->notifyDelayed(
std::chrono::milliseconds(time_to_next_slot),
EventTypes::SlotStarted,
std::make_shared<const messages::SlotStarted>(next_slot, 0, false));
}

void TimelineImpl::stop() {
stopped_ = true;
}

void TimelineImpl::on_slot_started(
std::shared_ptr<const messages::SlotStarted> msg) {
if (stopped_) [[unlikely]] {
SL_INFO(logger_, "Timeline is stopped on slot {}", msg->slot);
return;
}

auto now = clock_->nowMsec();
auto next_slot = (now - config_->genesis_time) / SLOT_DURATION_MS + 1;
auto time_to_next_slot =
config_->genesis_time + SLOT_DURATION_MS * next_slot - now;
if (time_to_next_slot < SLOT_DURATION_MS / 2) {
++next_slot;
time_to_next_slot += SLOT_DURATION_MS;
}

SL_INFO(logger_, "Next slot is {} in {}ms", msg->slot, time_to_next_slot);

se_manager_->notifyDelayed(
std::chrono::milliseconds(time_to_next_slot),
EventTypes::SlotStarted,
std::make_shared<const messages::SlotStarted>(msg->slot + 1, 0, false));
}

} // namespace lean::app
66 changes: 66 additions & 0 deletions src/app/impl/timeline_impl.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/**
* Copyright Quadrivium LLC
* All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*/

#pragma once

#include <qtils/empty.hpp>
#include <qtils/shared_ref.hpp>

#include "app/timeline.hpp"
#include "se/subscription_fwd.hpp"

namespace lean::messages {
struct SlotStarted;
}
namespace lean {
struct Config;
}
namespace lean::log {
class LoggingSystem;
}
namespace lean::clock {
class SystemClock;
}
namespace soralog {
class Logger;
}
namespace lean::app {
class Configuration;
class StateManager;
}

namespace lean::app {

class TimelineImpl final : public Timeline {
public:
TimelineImpl(qtils::SharedRef<log::LoggingSystem> logsys,
qtils::SharedRef<StateManager> state_manager,
qtils::SharedRef<Subscription> se_manager,
qtils::SharedRef<clock::SystemClock> clock,
qtils::SharedRef<Config> config);

void prepare();
void start();
void stop();

private:
void on_slot_started(std::shared_ptr<const messages::SlotStarted> msg);

qtils::SharedRef<soralog::Logger> logger_;
qtils::SharedRef<StateManager> state_manager_;
qtils::SharedRef<Config> config_;
qtils::SharedRef<clock::SystemClock> clock_;
qtils::SharedRef<Subscription> se_manager_;

bool stopped_ = false;

std::shared_ptr<
BaseSubscriber<qtils::Empty,
std::shared_ptr<const messages::SlotStarted>>>
on_slot_started_;
};

} // namespace lean::app
17 changes: 17 additions & 0 deletions src/app/timeline.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/**
* Copyright Quadrivium LLC
* All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*/

#pragma once

#include "utils/ctor_limiters.hpp"

namespace lean::app {

class Timeline : NonCopyable, NonMovable {
//
};

} // namespace lean::app
5 changes: 5 additions & 0 deletions src/blockchain/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ add_library(blockchain
impl/block_storage_impl.cpp
impl/block_storage_error.cpp
impl/block_storage_initializer.cpp
impl/block_tree_error.cpp
impl/block_tree_impl.cpp
impl/block_tree_initializer.cpp
impl/cached_tree.cpp
impl/genesis_block_header_impl.cpp
)
target_link_libraries(blockchain
Boost::boost
Expand Down
Loading
Loading