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

IF: Add deep-mind ACCEPTED_BLOCK_V2 #29

Merged
merged 6 commits into from
Apr 18, 2024
Merged
Show file tree
Hide file tree
Changes from all 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
38 changes: 28 additions & 10 deletions libraries/chain/controller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,18 @@ R apply(const block_handle& bh, F&& f) {
}, bh.internal());
}

template <class R, class F, class S>
R apply(const block_handle& bh, F&& f, S&& s) {
if constexpr (std::is_same_v<void, R>)
std::visit<void>(overloaded{[&](const block_state_legacy_ptr& head) { std::forward<F>(f)(head); },
[&](const block_state_ptr& head) { std::forward<S>(s)(head); }
}, bh.internal());
else
return std::visit<R>(overloaded{[&](const block_state_legacy_ptr& head) -> R { return std::forward<F>(f)(head); },
[&](const block_state_ptr& head) -> R { return std::forward<S>(s)(head); }
}, bh.internal());
}

// apply savanna block_state
template <class R, class F>
R apply_s(const block_handle& bh, F&& f) {
Expand Down Expand Up @@ -3172,16 +3184,6 @@ struct controller_impl {
chain_head = block_handle{cb.bsp};
emit( accepted_block, std::tie(chain_head.block(), chain_head.id()) );

apply<void>(chain_head, [&](const auto& head) {
#warning todo: support deep_mind_logger even when in IF mode
if constexpr (std::is_same_v<block_state_legacy_ptr, typename std::decay_t<decltype(head)>>) {
// at block level, no transaction specific logging is possible
if (auto* dm_logger = get_deep_mind_logger(false)) {
dm_logger->on_accepted_block(head);
}
}
});

if( s == controller::block_status::incomplete ) {
fork_db.apply_s<void>([&](auto& forkdb) {
assert(std::holds_alternative<std::decay_t<decltype(forkdb.head())>>(cb.bsp.internal()));
Expand All @@ -3207,6 +3209,22 @@ struct controller_impl {
apply_s<void>(chain_head, [&](const auto& head) { create_and_send_vote_msg(head); });
}

if (auto* dm_logger = get_deep_mind_logger(false)) {
auto fd = head_finality_data();
apply<void>(chain_head,
[&](const block_state_legacy_ptr& head) {
if (head->block->contains_header_extension(instant_finality_extension::extension_id())) {
assert(fd);
dm_logger->on_accepted_block_v2(fork_db_root_block_num(), head->block, *fd);
} else {
dm_logger->on_accepted_block(head);
}
},
[&](const block_state_ptr& head) {
assert(fd);
dm_logger->on_accepted_block_v2(fork_db_root_block_num(), head->block, *fd);
});
}

if (s == controller::block_status::incomplete) {
const auto& id = chain_head.id();
Expand Down
16 changes: 15 additions & 1 deletion libraries/chain/deep_mind.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include <eosio/chain/deep_mind.hpp>
#include <eosio/chain/block_state_legacy.hpp>
#include <eosio/chain/block_state.hpp>
#include <eosio/chain/generated_transaction_object.hpp>
#include <eosio/chain/contract_table_objects.hpp>
#include <eosio/chain/resource_limits_private.hpp>
Expand Down Expand Up @@ -49,7 +50,7 @@ namespace eosio::chain {
void deep_mind_handler::on_startup(chainbase::database& db, uint32_t head_block_num)
{
// FIXME: We should probably feed that from CMake directly somehow ...
fc_dlog(_logger, "DEEP_MIND_VERSION leap 13 0");
fc_dlog(_logger, "DEEP_MIND_VERSION spring 1 0");

fc_dlog(_logger, "ABIDUMP START ${block_num} ${global_sequence_num}",
("block_num", head_block_num)
Expand Down Expand Up @@ -82,6 +83,19 @@ namespace eosio::chain {
);
}

void deep_mind_handler::on_accepted_block_v2(block_num_type lib, const signed_block_ptr& b, const finality_data_t& fd)
{
auto packed_blk = fc::raw::pack(*b);
auto finality_data = fc::raw::pack(fd);

fc_dlog(_logger, "ACCEPTED_BLOCK_V2 ${num} ${lib} ${blk} ${fd}",
("num", b->block_num())
("lib", lib)
("blk", fc::to_hex(packed_blk))
("fd", fc::to_hex(finality_data))
);
}

void deep_mind_handler::on_switch_forks(const block_id_type& old_head, const block_id_type& new_head)
{
fc_dlog(_logger, "SWITCH_FORK ${from_id} ${to_id}",
Expand Down
2 changes: 1 addition & 1 deletion libraries/chain/include/eosio/chain/block_state.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ struct valid_t {
std::vector<digest_type> validation_mroots;
};

// This is mostly used by SHiP to stream finality_data
// This is mostly used by SHiP & deep-mind to stream finality_data
struct finality_data_t {
uint32_t major_version{light_header_protocol_version_major};
uint32_t minor_version{light_header_protocol_version_minor};
Expand Down
3 changes: 3 additions & 0 deletions libraries/chain/include/eosio/chain/deep_mind.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include <fc/log/logger.hpp>

#include <eosio/chain/types.hpp>
#include <eosio/chain/block.hpp>

namespace eosio::chain {

Expand All @@ -17,6 +18,7 @@ struct signed_transaction;
struct packed_transaction;
struct transaction_trace;
struct ram_trace;
struct finality_data_t;
namespace resource_limits {
class resource_limits_config_object;
class resource_limits_state_object;
Expand Down Expand Up @@ -57,6 +59,7 @@ class deep_mind_handler
void on_startup(chainbase::database& db, uint32_t head_block_num);
void on_start_block(uint32_t block_num);
void on_accepted_block(const std::shared_ptr<block_state_legacy>& bsp);
void on_accepted_block_v2(block_num_type lib, const signed_block_ptr& b, const finality_data_t& fd);
void on_switch_forks(const block_id_type& old_head, const block_id_type& new_head);
void on_onerror(const signed_transaction& etrx);
void on_onblock(const signed_transaction& trx);
Expand Down
2 changes: 1 addition & 1 deletion unittests/deep-mind/deep-mind.log
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ DMLOG RLIMIT_OP ACCOUNT_USAGE INS {"owner":"eosio.prods","net_usage":{"last_ordi
DMLOG RAM_OP 0 eosio.prods account add newaccount eosio.prods 2656 2656
DMLOG PERM_OP INS 0 7 {"usage_id":6,"parent":6,"owner":"eosio.prods","name":"prod.major","last_updated":"2020-01-01T00:00:00.000","auth":{"threshold":1,"keys":[],"accounts":[{"permission":{"actor":"eosio","permission":"active"},"weight":1}],"waits":[]}}
DMLOG PERM_OP INS 0 8 {"usage_id":7,"parent":7,"owner":"eosio.prods","name":"prod.minor","last_updated":"2020-01-01T00:00:00.000","auth":{"threshold":1,"keys":[],"accounts":[{"permission":{"actor":"eosio","permission":"active"},"weight":1}],"waits":[]}}
DMLOG DEEP_MIND_VERSION leap 13 0
DMLOG DEEP_MIND_VERSION spring 1 0
DMLOG ABIDUMP START 1 0
DMLOG ABIDUMP ABI eosio DmVvc2lvOjphYmkvMS4wBwxhY2NvdW50X25hbWUEbmFtZQ9wZXJtaXNzaW9uX25hbWUEbmFtZQthY3Rpb25fbmFtZQRuYW1lCnRhYmxlX25hbWUEbmFtZRN0cmFuc2FjdGlvbl9pZF90eXBlC2NoZWNrc3VtMjU2DWJsb2NrX2lkX3R5cGULY2hlY2tzdW0yNTYLd2VpZ2h0X3R5cGUGdWludDE2FhBwZXJtaXNzaW9uX2xldmVsAAIFYWN0b3IMYWNjb3VudF9uYW1lCnBlcm1pc3Npb24PcGVybWlzc2lvbl9uYW1lBmFjdGlvbgAEB2FjY291bnQMYWNjb3VudF9uYW1lBG5hbWULYWN0aW9uX25hbWUNYXV0aG9yaXphdGlvbhJwZXJtaXNzaW9uX2xldmVsW10EZGF0YQVieXRlcwlleHRlbnNpb24AAgR0eXBlBnVpbnQxNgRkYXRhBWJ5dGVzEnRyYW5zYWN0aW9uX2hlYWRlcgAGCmV4cGlyYXRpb24OdGltZV9wb2ludF9zZWMNcmVmX2Jsb2NrX251bQZ1aW50MTYQcmVmX2Jsb2NrX3ByZWZpeAZ1aW50MzITbWF4X25ldF91c2FnZV93b3Jkcwl2YXJ1aW50MzIQbWF4X2NwdV91c2FnZV9tcwV1aW50OAlkZWxheV9zZWMJdmFydWludDMyC3RyYW5zYWN0aW9uEnRyYW5zYWN0aW9uX2hlYWRlcgMUY29udGV4dF9mcmVlX2FjdGlvbnMIYWN0aW9uW10HYWN0aW9ucwhhY3Rpb25bXRZ0cmFuc2FjdGlvbl9leHRlbnNpb25zC2V4dGVuc2lvbltdDHByb2R1Y2VyX2tleQACDXByb2R1Y2VyX25hbWUMYWNjb3VudF9uYW1lEWJsb2NrX3NpZ25pbmdfa2V5CnB1YmxpY19rZXkRcHJvZHVjZXJfc2NoZWR1bGUAAgd2ZXJzaW9uBnVpbnQzMglwcm9kdWNlcnMOcHJvZHVjZXJfa2V5W10MYmxvY2tfaGVhZGVyAAkJdGltZXN0YW1wBnVpbnQzMghwcm9kdWNlcgxhY2NvdW50X25hbWUJY29uZmlybWVkBnVpbnQxNghwcmV2aW91cw1ibG9ja19pZF90eXBlEXRyYW5zYWN0aW9uX21yb290C2NoZWNrc3VtMjU2DGFjdGlvbl9tcm9vdAtjaGVja3N1bTI1NhBzY2hlZHVsZV92ZXJzaW9uBnVpbnQzMg1uZXdfcHJvZHVjZXJzEnByb2R1Y2VyX3NjaGVkdWxlPxFoZWFkZXJfZXh0ZW5zaW9ucwtleHRlbnNpb25bXQprZXlfd2VpZ2h0AAIDa2V5CnB1YmxpY19rZXkGd2VpZ2h0C3dlaWdodF90eXBlF3Blcm1pc3Npb25fbGV2ZWxfd2VpZ2h0AAIKcGVybWlzc2lvbhBwZXJtaXNzaW9uX2xldmVsBndlaWdodAt3ZWlnaHRfdHlwZQt3YWl0X3dlaWdodAACCHdhaXRfc2VjBnVpbnQzMgZ3ZWlnaHQLd2VpZ2h0X3R5cGUJYXV0aG9yaXR5AAQJdGhyZXNob2xkBnVpbnQzMgRrZXlzDGtleV93ZWlnaHRbXQhhY2NvdW50cxlwZXJtaXNzaW9uX2xldmVsX3dlaWdodFtdBXdhaXRzDXdhaXRfd2VpZ2h0W10KbmV3YWNjb3VudAAEB2NyZWF0b3IMYWNjb3VudF9uYW1lBG5hbWUMYWNjb3VudF9uYW1lBW93bmVyCWF1dGhvcml0eQZhY3RpdmUJYXV0aG9yaXR5B3NldGNvZGUABAdhY2NvdW50DGFjY291bnRfbmFtZQZ2bXR5cGUFdWludDgJdm12ZXJzaW9uBXVpbnQ4BGNvZGUFYnl0ZXMGc2V0YWJpAAIHYWNjb3VudAxhY2NvdW50X25hbWUDYWJpBWJ5dGVzCnVwZGF0ZWF1dGgABAdhY2NvdW50DGFjY291bnRfbmFtZQpwZXJtaXNzaW9uD3Blcm1pc3Npb25fbmFtZQZwYXJlbnQPcGVybWlzc2lvbl9uYW1lBGF1dGgJYXV0aG9yaXR5CmRlbGV0ZWF1dGgAAgdhY2NvdW50DGFjY291bnRfbmFtZQpwZXJtaXNzaW9uD3Blcm1pc3Npb25fbmFtZQhsaW5rYXV0aAAEB2FjY291bnQMYWNjb3VudF9uYW1lBGNvZGUMYWNjb3VudF9uYW1lBHR5cGULYWN0aW9uX25hbWULcmVxdWlyZW1lbnQPcGVybWlzc2lvbl9uYW1lCnVubGlua2F1dGgAAwdhY2NvdW50DGFjY291bnRfbmFtZQRjb2RlDGFjY291bnRfbmFtZQR0eXBlC2FjdGlvbl9uYW1lC2NhbmNlbGRlbGF5AAIOY2FuY2VsaW5nX2F1dGgQcGVybWlzc2lvbl9sZXZlbAZ0cnhfaWQTdHJhbnNhY3Rpb25faWRfdHlwZQdvbmVycm9yAAIJc2VuZGVyX2lkB3VpbnQxMjgIc2VudF90cngFYnl0ZXMHb25ibG9jawABBmhlYWRlcgxibG9ja19oZWFkZXIKAECemiJkuJoKbmV3YWNjb3VudAAAAABAJYqywgdzZXRjb2RlAAAAAAC4Y7LCBnNldGFiaQAAQMvaqGxS1Qp1cGRhdGVhdXRoAABAy9qorKJKCmRlbGV0ZWF1dGgAAAAALWsDp4sIbGlua2F1dGgAAEDL2sDp4tQKdW5saW5rYXV0aAAAvIkqRYWmQQtjYW5jZWxkZWxheQAAAADg0nvVpAdvbmVycm9yAAAAAAAiGs+kB29uYmxvY2sAAAAAAAA=
DMLOG ABIDUMP END
Expand Down
Loading