From a3ee2ed80c092bb17df6f4deca7f653d697086c1 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Fri, 5 Jan 2024 14:56:58 -0600 Subject: [PATCH 1/6] GH-37 Update to use controller active_producers(0 instead of accessing head_block_state. --- tests/eosio.system_tester.hpp | 6 +++--- tests/eosio.system_tests.cpp | 28 ++++++++++++++-------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/tests/eosio.system_tester.hpp b/tests/eosio.system_tester.hpp index 6eae96d2..a5c38be4 100644 --- a/tests/eosio.system_tester.hpp +++ b/tests/eosio.system_tester.hpp @@ -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_keys = control->active_producers(); + BOOST_REQUIRE_EQUAL( 21, producer_keys.producers.size() ); + BOOST_REQUIRE_EQUAL( name("defproducera"), producer_keys.producers[0].producer_name ); return producer_names; } diff --git a/tests/eosio.system_tests.cpp b/tests/eosio.system_tests.cpp index 7ae4ed68..3b37bbec 100644 --- a/tests/eosio.system_tests.cpp +++ b/tests/eosio.system_tests.cpp @@ -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_keys = control->active_producers(); + BOOST_REQUIRE_EQUAL( 1, producer_keys.producers.size() ); + BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_keys.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 ) ); @@ -3203,10 +3203,10 @@ 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_keys = control->active_producers(); + BOOST_REQUIRE_EQUAL( 2, producer_keys.producers.size() ); + BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_keys.producers[0].producer_name ); + BOOST_REQUIRE_EQUAL( name("defproducer2"), producer_keys.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); @@ -3214,19 +3214,19 @@ BOOST_FIXTURE_TEST_CASE( elect_producers /*_and_parameters*/, eosio_system_teste // 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_keys = control->active_producers(); + BOOST_REQUIRE_EQUAL( 3, producer_keys.producers.size() ); + BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_keys.producers[0].producer_name ); + BOOST_REQUIRE_EQUAL( name("defproducer2"), producer_keys.producers[1].producer_name ); + BOOST_REQUIRE_EQUAL( name("defproducer3"), producer_keys.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_keys = control->active_producers(); + BOOST_REQUIRE_EQUAL( 3, producer_keys.producers.size() ); // The test below is invalid now, producer schedule is not updated if there are // fewer producers in the new schedule From 5e95bc2fa6f413226f9ad8733f87c12f6cd2494e Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Fri, 5 Jan 2024 14:57:35 -0600 Subject: [PATCH 2/6] GH-37 Use cdt finalizer_authority --- contracts/eosio.bios/src/eosio.bios.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contracts/eosio.bios/src/eosio.bios.cpp b/contracts/eosio.bios/src/eosio.bios.cpp index 69183a6b..cd8cb437 100644 --- a/contracts/eosio.bios/src/eosio.bios.cpp +++ b/contracts/eosio.bios/src/eosio.bios.cpp @@ -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"; @@ -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 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, ignore> ) { From e28a8eeb62ffe75ce0cda8278be70e8cc65a9671 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Fri, 5 Jan 2024 15:16:49 -0600 Subject: [PATCH 3/6] GH-37 Update to ubuntu-22.04 --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 9530f87f..1d9d7733 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -36,7 +36,7 @@ defaults: jobs: build-test: name: Build & Test - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Setup leap-dev & cdt versions id: versions From 25d6b283cfcab196e6b1de7dcd9d488183765379 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Tue, 9 Jan 2024 07:03:55 -0600 Subject: [PATCH 4/6] GH-37 New block extension for instant finality --- tests/eosio.bios_inst_fin_tests.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/eosio.bios_inst_fin_tests.cpp b/tests/eosio.bios_inst_fin_tests.cpp index 625e6398..f8fc10f5 100644 --- a/tests/eosio.bios_inst_fin_tests.cpp +++ b/tests/eosio.bios_inst_fin_tests.cpp @@ -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 @@ -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 From cae6ac4246613783e6d0aada424e63afea33fe4c Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Tue, 9 Jan 2024 10:50:34 -0600 Subject: [PATCH 5/6] Empty commit From 889d3e9c1ee5efc13f1758027fcdb4e413cde6dd Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Tue, 9 Jan 2024 15:52:33 -0600 Subject: [PATCH 6/6] GH-37 Rename variable to make clearer --- tests/eosio.system_tester.hpp | 6 +++--- tests/eosio.system_tests.cpp | 34 +++++++++++++++++----------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/tests/eosio.system_tester.hpp b/tests/eosio.system_tester.hpp index a5c38be4..f2a6a823 100644 --- a/tests/eosio.system_tester.hpp +++ b/tests/eosio.system_tester.hpp @@ -1024,9 +1024,9 @@ class eosio_system_tester : public TESTER { } produce_blocks( 250 ); - auto producer_keys = control->active_producers(); - BOOST_REQUIRE_EQUAL( 21, producer_keys.producers.size() ); - BOOST_REQUIRE_EQUAL( name("defproducera"), producer_keys.producers[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; } diff --git a/tests/eosio.system_tests.cpp b/tests/eosio.system_tests.cpp index 3b37bbec..545a13c6 100644 --- a/tests/eosio.system_tests.cpp +++ b/tests/eosio.system_tests.cpp @@ -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->active_producers(); - BOOST_REQUIRE_EQUAL( 1, producer_keys.producers.size() ); - BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_keys.producers[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 ) ); @@ -3203,10 +3203,10 @@ 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->active_producers(); - BOOST_REQUIRE_EQUAL( 2, producer_keys.producers.size() ); - BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_keys.producers[0].producer_name ); - BOOST_REQUIRE_EQUAL( name("defproducer2"), producer_keys.producers[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); @@ -3214,26 +3214,26 @@ BOOST_FIXTURE_TEST_CASE( elect_producers /*_and_parameters*/, eosio_system_teste // elect 3 producers BOOST_REQUIRE_EQUAL( success(), vote( "bob111111111"_n, { "defproducer2"_n, "defproducer3"_n } ) ); produce_blocks(250); - producer_keys = control->active_producers(); - BOOST_REQUIRE_EQUAL( 3, producer_keys.producers.size() ); - BOOST_REQUIRE_EQUAL( name("defproducer1"), producer_keys.producers[0].producer_name ); - BOOST_REQUIRE_EQUAL( name("defproducer2"), producer_keys.producers[1].producer_name ); - BOOST_REQUIRE_EQUAL( name("defproducer3"), producer_keys.producers[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->active_producers(); - BOOST_REQUIRE_EQUAL( 3, producer_keys.producers.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);