Skip to content

Commit

Permalink
GH-737 Make signed_block_ptr be std::shared_ptr<const signed_block> i…
Browse files Browse the repository at this point in the history
…nstead of non-const
  • Loading branch information
heifner committed Sep 11, 2024
1 parent b401100 commit aca9907
Show file tree
Hide file tree
Showing 13 changed files with 25 additions and 23 deletions.
9 changes: 5 additions & 4 deletions libraries/chain/block_state.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,12 @@ block_state::block_state(const block_header_state& bhs,
, cached_trxs(std::move(trx_metas))
, action_mroot(action_mroot)
{
block->transactions = std::move(trx_receipts);
std::const_pointer_cast<signed_block>(block)->transactions = std::move(trx_receipts);

if( qc ) {
fc_dlog(vote_logger, "integrate qc ${qc} into block ${bn} ${id}", ("qc", qc->to_qc_claim())("bn", block_num())("id", id()));
emplace_extension(block->block_extensions, quorum_certificate_extension::extension_id(), fc::raw::pack( *qc ));
emplace_extension(std::const_pointer_cast<signed_block>(block)->block_extensions,
quorum_certificate_extension::extension_id(), fc::raw::pack( *qc ));
}

sign(signer, valid_block_signing_authority);
Expand Down Expand Up @@ -356,11 +357,11 @@ void block_state::sign(const signer_callback_type& signer, const block_signing_a
auto sigs = signer( block_id );

EOS_ASSERT(!sigs.empty(), no_block_signatures, "Signer returned no signatures");
block->producer_signature = sigs.back(); // last is producer signature, rest are additional signatures to inject in the block extension
std::const_pointer_cast<signed_block>(block)->producer_signature = sigs.back(); // last is producer signature, rest are additional signatures to inject in the block extension
sigs.pop_back();

verify_signee(block, block_id, sigs, valid_block_signing_authority);
inject_additional_signatures(*block, sigs);
inject_additional_signatures(const_cast<signed_block&>(*block), sigs);
}

} /// eosio::chain
2 changes: 1 addition & 1 deletion libraries/chain/block_state_legacy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ namespace eosio::chain {
const validator_t& validator,
const signer_callback_type& signer
)
:block_header_state_legacy( inject_additional_signatures( std::move(cur), *b, pfs, validator, signer ) )
:block_header_state_legacy( inject_additional_signatures( std::move(cur), const_cast<signed_block&>(*b), pfs, validator, signer ) )
,block( std::move(b) )
,_pub_keys_recovered( true ) // called by produce_block so signature recovery of trxs must have been done
,_cached_trxs( std::move(trx_metas) )
Expand Down
2 changes: 1 addition & 1 deletion libraries/chain/controller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5516,7 +5516,7 @@ bool controller::validated_block_exists(const block_id_type& id) const {

std::optional<signed_block_header> controller::fetch_block_header_by_id( const block_id_type& id )const {
auto sb_ptr = my->fork_db_fetch_block_by_id(id);
if( sb_ptr ) return std::optional<signed_block_header>{*static_cast<signed_block_header*>(sb_ptr.get())};
if( sb_ptr ) return std::optional<signed_block_header>{*static_cast<const signed_block_header*>(sb_ptr.get())};
auto result = my->blog.read_block_header_by_num( block_header::num_from_id(id) );
if( result && result->calculate_id() == id ) return result;
return {};
Expand Down
2 changes: 1 addition & 1 deletion libraries/chain/include/eosio/chain/block.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ namespace eosio { namespace chain {
}
bool contains_extension(uint16_t extension_id)const;
};
using signed_block_ptr = std::shared_ptr<signed_block>;
using signed_block_ptr = std::shared_ptr<const signed_block>;

struct producer_confirmation {
block_id_type block_id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ chain::transaction_trace_ptr make_transaction_trace( const packed_transaction_pt

auto make_block( uint32_t block_num ) {
name producer = "brianj"_n;
chain::signed_block_ptr block = std::make_shared<chain::signed_block>();
auto block = std::make_shared<chain::signed_block>();
block->producer = producer;
block->timestamp = fc::time_point::now();

Expand Down
2 changes: 1 addition & 1 deletion plugins/chain_plugin/test/test_trx_retry_db.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ uint64_t get_id( const packed_transaction_ptr& ptr ) {

auto make_block( uint32_t block_num, std::vector<chain::packed_transaction_ptr> trxs ) {
name producer = "kevinh"_n;
chain::signed_block_ptr block = std::make_shared<chain::signed_block>();
auto block = std::make_shared<chain::signed_block>();
for( auto& trx : trxs ) {
block->transactions.emplace_back( *trx );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ namespace eosio::trace_api {

inline auto make_block( chain::block_id_type previous, uint32_t height, uint32_t slot, chain::name producer,
std::vector<chain::packed_transaction> trxs ) {
chain::signed_block_ptr block = std::make_shared<chain::signed_block>();
auto block = std::make_shared<chain::signed_block>();
for( auto& trx : trxs ) {
block->transactions.emplace_back( trx );
}
Expand Down
2 changes: 1 addition & 1 deletion tests/block_log.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ struct block_log_fixture {
std::vector<char> a;
a.assign(size, fillchar);

eosio::chain::signed_block_ptr p = std::make_shared<eosio::chain::signed_block>();
auto p = std::make_shared<eosio::chain::signed_block>();
p->previous._hash[0] = fc::endian_reverse_u32(index-1);
p->header_extensions.push_back(std::make_pair<uint16_t, std::vector<char>>(0, std::vector<char>(a)));

Expand Down
2 changes: 1 addition & 1 deletion tests/chain_plugin_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ BOOST_FIXTURE_TEST_CASE( get_block_with_invalid_abi, validating_tester ) try {

BOOST_TEST(get_bh_result.id == block->calculate_id());
BOOST_TEST(json::to_string(get_bh_result.signed_block_header, fc::time_point::maximum()) ==
json::to_string(fc::variant{static_cast<signed_block_header&>(*block)}, fc::time_point::maximum()));
json::to_string(fc::variant{static_cast<const signed_block_header&>(*block)}, fc::time_point::maximum()));

} FC_LOG_AND_RETHROW() /// get_block_with_invalid_abi

Expand Down
2 changes: 1 addition & 1 deletion unittests/block_log_extract.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ struct block_log_extract_fixture {
};

void add(uint32_t index) {
signed_block_ptr p = std::make_shared<signed_block>();
auto p = std::make_shared<signed_block>();
p->previous._hash[0] = fc::endian_reverse_u32(index-1);
log->append(p, p->calculate_id());
}
Expand Down
7 changes: 4 additions & 3 deletions unittests/producer_schedule_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -678,7 +678,7 @@ BOOST_AUTO_TEST_CASE( extra_signatures_test ) try {
main.produce_blocks(3);
BOOST_REQUIRE( main.control->pending_block_producer() == "alice"_n );

std::shared_ptr<signed_block> b;
signed_block_ptr b;

// Generate a valid block and then corrupt it by adding an extra signature.
{
Expand Down Expand Up @@ -711,8 +711,9 @@ BOOST_AUTO_TEST_CASE( extra_signatures_test ) try {
additional_sigs.emplace_back( remote.get_private_key("alice"_n, "bs4").sign(sig_digest) );

// Serialize the augmented additional signatures back into the block extensions.
b->block_extensions.clear();
emplace_extension(b->block_extensions, additional_sigs_eid, fc::raw::pack( additional_sigs ));
std::const_pointer_cast<signed_block>(b)->block_extensions.clear();
emplace_extension(std::const_pointer_cast<signed_block>(b)->block_extensions,
additional_sigs_eid, fc::raw::pack( additional_sigs ));
}

// Push block with extra signature to the main chain.
Expand Down
2 changes: 1 addition & 1 deletion unittests/unapplied_transaction_queue_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ auto next( unapplied_transaction_queue& q ) {
}

auto create_test_block_state( deque<transaction_metadata_ptr> trx_metas ) {
signed_block_ptr block = std::make_shared<signed_block>();
auto block = std::make_shared<signed_block>();
for( auto& trx_meta : trx_metas ) {
block->transactions.emplace_back( *trx_meta->packed_trx() );
}
Expand Down
12 changes: 6 additions & 6 deletions unittests/vote_processor_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ bls_private_key bls_priv_key_2 = bls_private_key::generate();
std::vector<bls_private_key> bls_priv_keys{bls_priv_key_0, bls_priv_key_1, bls_priv_key_2};

auto create_genesis_block_state() { // block 2
signed_block_ptr block = std::make_shared<signed_block>();
auto block = std::make_shared<signed_block>();

block->producer = eosio::chain::config::system_account_name;
auto pub_key = eosio::testing::base_tester::get_public_key( block->producer, "active" );
Expand All @@ -56,7 +56,7 @@ auto create_genesis_block_state() { // block 2
genesis->block = block;
genesis->activated_protocol_features = std::make_shared<protocol_feature_activation_set>();
genesis->active_finalizer_policy = std::make_shared<finalizer_policy>(new_finalizer_policy);
genesis->block->previous = make_block_id(1);
std::const_pointer_cast<signed_block>(genesis->block)->previous = make_block_id(1);
genesis->active_proposer_policy = std::make_shared<proposer_policy>(proposer_policy{.proposer_schedule = schedule});
genesis->core = finality_core::create_core_for_genesis_block(genesis->block_id, genesis->header.timestamp);
genesis->block_id = genesis->block->calculate_id();
Expand All @@ -67,15 +67,15 @@ auto create_test_block_state(const block_state_ptr& prev) {
static block_timestamp_type timestamp;
timestamp = timestamp.next(); // each test block state will be unique
signed_block_ptr block = std::make_shared<signed_block>(prev->block->clone());
block->producer = eosio::chain::config::system_account_name;
block->previous = prev->id();
block->timestamp = timestamp;
std::const_pointer_cast<signed_block>(block)->producer = eosio::chain::config::system_account_name;
std::const_pointer_cast<signed_block>(block)->previous = prev->id();
std::const_pointer_cast<signed_block>(block)->timestamp = timestamp;

auto priv_key = eosio::testing::base_tester::get_private_key( block->producer, "active" );
auto pub_key = eosio::testing::base_tester::get_public_key( block->producer, "active" );

auto sig_digest = digest_type::hash("something");
block->producer_signature = priv_key.sign( sig_digest );
std::const_pointer_cast<signed_block>(block)->producer_signature = priv_key.sign( sig_digest );

vector<private_key_type> signing_keys;
signing_keys.emplace_back( std::move( priv_key ) );
Expand Down

0 comments on commit aca9907

Please sign in to comment.