Skip to content

Commit

Permalink
Merge pull request #38 from AntelopeIO/GH-37-update-for-if
Browse files Browse the repository at this point in the history
IF: Update for latest IF
  • Loading branch information
heifner authored Jan 10, 2024
2 parents 4cab488 + 889d3e9 commit 0137e60
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 39 deletions.
10 changes: 5 additions & 5 deletions contracts/eosio.bios/src/eosio.bios.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ void bios::setfinalizer( const finalizer_policy& finalizer_policy ) {
check(finalizer_policy.finalizers.size() <= max_finalizers, "number of finalizers exceeds the maximum allowed");
check(finalizer_policy.finalizers.size() > 0, "require at least one finalizer");

eosio::abi_finalizer_policy abi_finalizer_policy;
abi_finalizer_policy.fthreshold = finalizer_policy.threshold;
abi_finalizer_policy.finalizers.reserve(finalizer_policy.finalizers.size());
eosio::finalizer_policy fin_policy;
fin_policy.threshold = finalizer_policy.threshold;
fin_policy.finalizers.reserve(finalizer_policy.finalizers.size());

const std::string pk_prefix = "PUB_BLS";
const std::string sig_prefix = "SIG_BLS";
Expand Down Expand Up @@ -75,12 +75,12 @@ void bios::setfinalizer( const finalizer_policy& finalizer_policy ) {
check(eosio::bls_pop_verify(pk, signature), "proof of possession failed");

std::vector<char> pk_vector(pk.begin(), pk.end());
abi_finalizer_policy.finalizers.emplace_back(eosio::abi_finalizer_authority{f.description, f.weight, std::move(pk_vector)});
fin_policy.finalizers.emplace_back(eosio::finalizer_authority{f.description, f.weight, std::move(pk_vector)});
}

check(finalizer_policy.threshold > weight_sum / 2, "finalizer policy threshold must be greater than half of the sum of the weights");

set_finalizers(std::move(abi_finalizer_policy));
set_finalizers(std::move(fin_policy));
}

void bios::onerror( ignore<uint128_t>, ignore<std::vector<char>> ) {
Expand Down
28 changes: 14 additions & 14 deletions tests/eosio.bios_inst_fin_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,13 @@ BOOST_FIXTURE_TEST_CASE( set_1_finalizer, eosio_bios_if_tester ) try {
fc::variant pretty_output;
abi_serializer::to_variant( *cur_block, pretty_output, get_resolver(), fc::microseconds::maximum() );

BOOST_REQUIRE(pretty_output.get_object().contains("proposed_finalizer_policy"));
BOOST_REQUIRE_EQUAL(pretty_output["proposed_finalizer_policy"]["generation"], 1);
BOOST_REQUIRE_EQUAL(pretty_output["proposed_finalizer_policy"]["fthreshold"], 2);
BOOST_REQUIRE_EQUAL(pretty_output["proposed_finalizer_policy"]["finalizers"].size(), 1u);
BOOST_REQUIRE_EQUAL(pretty_output["proposed_finalizer_policy"]["finalizers"][size_t(0)]["description"], "set_1_finalizer");
BOOST_REQUIRE_EQUAL(pretty_output["proposed_finalizer_policy"]["finalizers"][size_t(0)]["fweight"], 1);
BOOST_REQUIRE_EQUAL(pretty_output["proposed_finalizer_policy"]["finalizers"][size_t(0)]["public_key"], "PUB_BLS_jpMTmybJZvf4k6fR7Bgu7wrNjwQLK/IBdjhZHWTjoohgdUMi8VpTGsyYpzP1+ekMzUuZ8LqFcnfO0myTwH9Y2YeabhhowSp7nzJJhgO4XWCpcGCLssOjVWh3/D9wMIISVUwfsQ==");
BOOST_REQUIRE(pretty_output.get_object().contains("instant_finality_extension"));
BOOST_REQUIRE_EQUAL(pretty_output["instant_finality_extension"]["new_finalizer_policy"]["generation"], 1);
BOOST_REQUIRE_EQUAL(pretty_output["instant_finality_extension"]["new_finalizer_policy"]["threshold"], 2);
BOOST_REQUIRE_EQUAL(pretty_output["instant_finality_extension"]["new_finalizer_policy"]["finalizers"].size(), 1u);
BOOST_REQUIRE_EQUAL(pretty_output["instant_finality_extension"]["new_finalizer_policy"]["finalizers"][size_t(0)]["description"], "set_1_finalizer");
BOOST_REQUIRE_EQUAL(pretty_output["instant_finality_extension"]["new_finalizer_policy"]["finalizers"][size_t(0)]["weight"], 1);
BOOST_REQUIRE_EQUAL(pretty_output["instant_finality_extension"]["new_finalizer_policy"]["finalizers"][size_t(0)]["public_key"], "PUB_BLS_jpMTmybJZvf4k6fR7Bgu7wrNjwQLK/IBdjhZHWTjoohgdUMi8VpTGsyYpzP1+ekMzUuZ8LqFcnfO0myTwH9Y2YeabhhowSp7nzJJhgO4XWCpcGCLssOjVWh3/D9wMIISVUwfsQ==");
} FC_LOG_AND_RETHROW()

// two finalizers in finalizer policy
Expand All @@ -86,13 +86,13 @@ BOOST_FIXTURE_TEST_CASE( set_2_finalizers, eosio_bios_if_tester ) try {
fc::variant pretty_output;
abi_serializer::to_variant( *cur_block, pretty_output, get_resolver(), fc::microseconds::maximum() );

BOOST_REQUIRE(pretty_output.get_object().contains("proposed_finalizer_policy"));
BOOST_REQUIRE_EQUAL(pretty_output["proposed_finalizer_policy"]["generation"], 1);
BOOST_REQUIRE_EQUAL(pretty_output["proposed_finalizer_policy"]["fthreshold"], 4);
BOOST_REQUIRE_EQUAL(pretty_output["proposed_finalizer_policy"]["finalizers"].size(), 2u);
BOOST_REQUIRE_EQUAL(pretty_output["proposed_finalizer_policy"]["finalizers"][size_t(1)]["description"], "set_2_finalizer_2");
BOOST_REQUIRE_EQUAL(pretty_output["proposed_finalizer_policy"]["finalizers"][size_t(1)]["fweight"], 2);
BOOST_REQUIRE_EQUAL(pretty_output["proposed_finalizer_policy"]["finalizers"][size_t(1)]["public_key"], "PUB_BLS_UGcXVpLNrhdODrbI9Geaswu8wFnL+WMnphfTaCgehRxol5wI1qiU5zq6qHp9+CkFnmm2XWCcM/YEtqZYL6uTM1TXTpTm3LODI0s/ULO4iKSNYclsmDdh5cFSMmKKnloHudh3Zw==");
BOOST_REQUIRE(pretty_output.get_object().contains("instant_finality_extension"));
BOOST_REQUIRE_EQUAL(pretty_output["instant_finality_extension"]["new_finalizer_policy"]["generation"], 1);
BOOST_REQUIRE_EQUAL(pretty_output["instant_finality_extension"]["new_finalizer_policy"]["threshold"], 4);
BOOST_REQUIRE_EQUAL(pretty_output["instant_finality_extension"]["new_finalizer_policy"]["finalizers"].size(), 2u);
BOOST_REQUIRE_EQUAL(pretty_output["instant_finality_extension"]["new_finalizer_policy"]["finalizers"][size_t(1)]["description"], "set_2_finalizer_2");
BOOST_REQUIRE_EQUAL(pretty_output["instant_finality_extension"]["new_finalizer_policy"]["finalizers"][size_t(1)]["weight"], 2);
BOOST_REQUIRE_EQUAL(pretty_output["instant_finality_extension"]["new_finalizer_policy"]["finalizers"][size_t(1)]["public_key"], "PUB_BLS_UGcXVpLNrhdODrbI9Geaswu8wFnL+WMnphfTaCgehRxol5wI1qiU5zq6qHp9+CkFnmm2XWCcM/YEtqZYL6uTM1TXTpTm3LODI0s/ULO4iKSNYclsmDdh5cFSMmKKnloHudh3Zw==");
} FC_LOG_AND_RETHROW()

// finalizer cannot be empty
Expand Down
6 changes: 3 additions & 3 deletions tests/eosio.system_tester.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1024,9 +1024,9 @@ class eosio_system_tester : public TESTER {
}
produce_blocks( 250 );

auto producer_keys = control->head_block_state()->active_schedule.producers;
BOOST_REQUIRE_EQUAL( 21, producer_keys.size() );
BOOST_REQUIRE_EQUAL( name("defproducera"), producer_keys[0].producer_name );
auto producer_schedule = control->active_producers();
BOOST_REQUIRE_EQUAL( 21, producer_schedule.producers.size() );
BOOST_REQUIRE_EQUAL( name("defproducera"), producer_schedule.producers[0].producer_name );

return producer_names;
}
Expand Down
34 changes: 17 additions & 17 deletions tests/eosio.system_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3187,9 +3187,9 @@ BOOST_FIXTURE_TEST_CASE( elect_producers /*_and_parameters*/, eosio_system_teste
//vote for producers
BOOST_REQUIRE_EQUAL( success(), vote( "alice1111111"_n, { "defproducer1"_n } ) );
produce_blocks(250);
auto producer_keys = control->head_block_state()->active_schedule.producers;
BOOST_REQUIRE_EQUAL( 1, producer_keys.size() );
BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_keys[0].producer_name );
auto producer_schedule = control->active_producers();
BOOST_REQUIRE_EQUAL( 1, producer_schedule.producers.size() );
BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_schedule.producers[0].producer_name );

//auto config = config_to_variant( control->get_global_properties().configuration );
//auto prod1_config = testing::filter_fields( config, producer_parameters_example( 1 ) );
Expand All @@ -3203,37 +3203,37 @@ BOOST_FIXTURE_TEST_CASE( elect_producers /*_and_parameters*/, eosio_system_teste
BOOST_REQUIRE_EQUAL( success(), vote( "bob111111111"_n, { "defproducer2"_n } ) );
ilog(".");
produce_blocks(250);
producer_keys = control->head_block_state()->active_schedule.producers;
BOOST_REQUIRE_EQUAL( 2, producer_keys.size() );
BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_keys[0].producer_name );
BOOST_REQUIRE_EQUAL( name("defproducer2"), producer_keys[1].producer_name );
producer_schedule = control->active_producers();
BOOST_REQUIRE_EQUAL( 2, producer_schedule.producers.size() );
BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_schedule.producers[0].producer_name );
BOOST_REQUIRE_EQUAL( name("defproducer2"), producer_schedule.producers[1].producer_name );
//config = config_to_variant( control->get_global_properties().configuration );
//auto prod2_config = testing::filter_fields( config, producer_parameters_example( 2 ) );
//REQUIRE_EQUAL_OBJECTS(prod2_config, config);

// elect 3 producers
BOOST_REQUIRE_EQUAL( success(), vote( "bob111111111"_n, { "defproducer2"_n, "defproducer3"_n } ) );
produce_blocks(250);
producer_keys = control->head_block_state()->active_schedule.producers;
BOOST_REQUIRE_EQUAL( 3, producer_keys.size() );
BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_keys[0].producer_name );
BOOST_REQUIRE_EQUAL( name("defproducer2"), producer_keys[1].producer_name );
BOOST_REQUIRE_EQUAL( name("defproducer3"), producer_keys[2].producer_name );
producer_schedule = control->active_producers();
BOOST_REQUIRE_EQUAL( 3, producer_schedule.producers.size() );
BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_schedule.producers[0].producer_name );
BOOST_REQUIRE_EQUAL( name("defproducer2"), producer_schedule.producers[1].producer_name );
BOOST_REQUIRE_EQUAL( name("defproducer3"), producer_schedule.producers[2].producer_name );
//config = config_to_variant( control->get_global_properties().configuration );
//REQUIRE_EQUAL_OBJECTS(prod2_config, config);

// try to go back to 2 producers and fail
BOOST_REQUIRE_EQUAL( success(), vote( "bob111111111"_n, { "defproducer3"_n } ) );
produce_blocks(250);
producer_keys = control->head_block_state()->active_schedule.producers;
BOOST_REQUIRE_EQUAL( 3, producer_keys.size() );
producer_schedule = control->active_producers();
BOOST_REQUIRE_EQUAL( 3, producer_schedule.producers.size() );

// The test below is invalid now, producer schedule is not updated if there are
// fewer producers in the new schedule
/*
BOOST_REQUIRE_EQUAL( 2, producer_keys.size() );
BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_keys[0].producer_name );
BOOST_REQUIRE_EQUAL( name("defproducer3"), producer_keys[1].producer_name );
BOOST_REQUIRE_EQUAL( 2, producer_schedule.size() );
BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_schedule[0].producer_name );
BOOST_REQUIRE_EQUAL( name("defproducer3"), producer_schedule[1].producer_name );
//config = config_to_variant( control->get_global_properties().configuration );
//auto prod3_config = testing::filter_fields( config, producer_parameters_example( 3 ) );
//REQUIRE_EQUAL_OBJECTS(prod3_config, config);
Expand Down

0 comments on commit 0137e60

Please sign in to comment.