diff --git a/README.md b/README.md index 941afa68..7173bcb1 100644 --- a/README.md +++ b/README.md @@ -88,14 +88,14 @@ then proceed with: cmake -DBOOST_ROOT="$BOOST_ROOT" -DCMAKE_BUILD_TYPE=Release . make ./programs/witness_node/witness_node - + Launching the witness creates required directories. Next, **stop the witness** and continue. $ vi witness_node_data_dir/config.ini p2p-endpoint = 0.0.0.0:9777 rpc-endpoint = 127.0.0.1:8090 seed-node = 213.184.225.234:59500 - + Start the witness back up ./programs/witness_node/witness_node @@ -155,7 +155,7 @@ Create your witness (substitute the url for your witness information) ``` create_witness your_witness_username "url" true ``` -**Be sure to take note of the block_signing_key** +**Be sure to take note of the block_signing_key** IMPORTANT (issue below command using block_signing_key just obtained) ``` diff --git a/libraries/app/application.cpp b/libraries/app/application.cpp index 17a254d4..cda9207a 100644 --- a/libraries/app/application.cpp +++ b/libraries/app/application.cpp @@ -160,10 +160,12 @@ namespace detail { { // t.me/peerplays #seednodes vector seeds = { - "ppy-beatrice-seed.blckchnd.com:6666", - "159.69.223.206:7777", - "51.38.237.243:9666", - "pbsa-beatrice.blockchainprojectsbv.com:9195" + "pts.blockveritas.co:6666", + "seed-beatrice01.eifos.org:7777", + "seed-testnet.ppy.alex-pu.info:7777", + "seed.ppy-beatrice.blckchnd.com:6666", + "seed.testnet.peerblock.trade:6666", + "testnet-ppyapi.spacemx.tech:9777" }; for( const string& endpoint_string : seeds ) diff --git a/libraries/chain/asset_evaluator.cpp b/libraries/chain/asset_evaluator.cpp index e6168438..985fb8df 100644 --- a/libraries/chain/asset_evaluator.cpp +++ b/libraries/chain/asset_evaluator.cpp @@ -79,7 +79,7 @@ void_result asset_create_evaluator::do_evaluate( const asset_create_operation& o { auto dotpos = op.symbol.rfind( '.' ); if( dotpos != std::string::npos ) - + { auto prefix = op.symbol.substr( 0, dotpos ); auto asset_symbol_itr = asset_indx.find( prefix ); @@ -122,7 +122,7 @@ void_result asset_create_evaluator::do_evaluate( const asset_create_operation& o FC_ASSERT( op.bitasset_opts ); FC_ASSERT( op.precision == op.bitasset_opts->short_backing_asset(d).precision ); } - + return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } @@ -177,7 +177,7 @@ object_id_type asset_create_evaluator::do_apply( const asset_create_operation& o a.options.core_exchange_rate.base.asset_id = next_asset_id; a.dynamic_asset_data_id = dyn_asset.id; - + if( op.bitasset_opts.valid() ) a.bitasset_data_id = bit_asset_id; }); @@ -225,7 +225,7 @@ void_result lottery_asset_create_evaluator::do_evaluate( const lottery_asset_cre { auto dotpos = op.symbol.rfind( '.' ); if( dotpos != std::string::npos ) - + { auto prefix = op.symbol.substr( 0, dotpos ); auto asset_symbol_itr = asset_indx.find( prefix ); @@ -578,7 +578,7 @@ void_result asset_update_dividend_evaluator::do_evaluate(const asset_update_divi auto& params = db().get_global_properties().parameters; if (o.new_options.payout_interval && *o.new_options.payout_interval < params.maintenance_interval) - FC_THROW("New payout interval may not be less than the maintenance interval", + FC_THROW("New payout interval may not be less than the maintenance interval", ("new_payout_interval", o.new_options.payout_interval)("maintenance_interval", params.maintenance_interval)); return void_result(); } FC_CAPTURE_AND_RETHROW( (o) ) } diff --git a/libraries/chain/db_block.cpp b/libraries/chain/db_block.cpp index c2542214..21701a25 100644 --- a/libraries/chain/db_block.cpp +++ b/libraries/chain/db_block.cpp @@ -44,11 +44,11 @@ namespace { - + struct proposed_operations_digest_accumulator { typedef void result_type; - + void operator()(const graphene::chain::proposal_create_operation& proposal) { for (auto& operation: proposal.proposed_ops) @@ -56,20 +56,20 @@ namespace { proposed_operations_digests.push_back(fc::digest(operation.op)); } } - + //empty template method is needed for all other operation types //we can ignore them, we are interested in only proposal_create_operation template - void operator()(const T&) + void operator()(const T&) {} - + std::vector proposed_operations_digests; }; - + std::vector gather_proposed_operations_digests(const graphene::chain::transaction& trx) { proposed_operations_digest_accumulator digest_accumulator; - + for (auto& operation: trx.operations) { if( operation.which() != graphene::chain::operation::tag::value @@ -78,7 +78,7 @@ namespace { else edump( ("Found dup")); } - + return digest_accumulator.proposed_operations_digests; } } @@ -148,24 +148,24 @@ std::vector database::get_block_ids_on_fork(block_id_type head_of result.emplace_back(branches.first.back()->previous_id()); return result; } - + void database::check_transaction_for_duplicated_operations(const signed_transaction& trx) { const auto& proposal_index = get_index(); std::set existed_operations_digests; - + proposal_index.inspect_all_objects( [&](const object& obj){ const proposal_object& proposal = static_cast(obj); auto proposed_operations_digests = gather_proposed_operations_digests( proposal.proposed_transaction ); existed_operations_digests.insert( proposed_operations_digests.begin(), proposed_operations_digests.end() ); }); - + for (auto& pending_transaction: _pending_tx) { auto proposed_operations_digests = gather_proposed_operations_digests(pending_transaction); existed_operations_digests.insert(proposed_operations_digests.begin(), proposed_operations_digests.end()); } - + auto proposed_operations_digests = gather_proposed_operations_digests(trx); for (auto& digest: proposed_operations_digests) { @@ -337,7 +337,7 @@ void database::verify_signing_witness( const signed_block& new_block, const fork FC_ASSERT( new_block.witness == wid, "Witness produced block at wrong time", ("block witness",new_block.witness)("scheduled",wid)("slot_num",slot_num) ); FC_ASSERT( new_block.validate_signee( wid(*this).signing_key ) ); - } + } } void database::update_witnesses( fork_item& fork_entry )const @@ -351,7 +351,7 @@ void database::update_witnesses( fork_item& fork_entry )const const witness_schedule_object& wso = get_witness_schedule_object(); fork_entry.scheduled_witnesses = std::make_shared< vector< pair< witness_id_type, public_key_type > > >(); fork_entry.scheduled_witnesses->reserve( wso.current_shuffled_witnesses.size() ); - + for( size_t i = 0; i < wso.current_shuffled_witnesses.size(); ++i ) { const auto& witness = wso.current_shuffled_witnesses[i](*this); @@ -551,7 +551,7 @@ signed_block database::_generate_block( pending_block.timestamp = when; pending_block.transaction_merkle_root = pending_block.calculate_merkle_root(); pending_block.witness = witness_id; - + // Genesis witnesses start with a default initial secret if( witness_obj.next_secret_hash == secret_hash_type::hash( secret_hash_type() ) ) { pending_block.previous_secret = secret_hash_type(); @@ -561,7 +561,7 @@ signed_block database::_generate_block( fc::raw::pack( last_enc, witness_obj.previous_secret ); pending_block.previous_secret = last_enc.result(); } - + secret_hash_type::encoder next_enc; fc::raw::pack( next_enc, block_signing_private_key ); fc::raw::pack( next_enc, pending_block.previous_secret ); @@ -692,10 +692,10 @@ void database::_apply_block( const signed_block& next_block ) // For VOPs derived directly from a real op, // use the real op's (block_num,trx_in_block,op_in_trx), virtual_op starts from 1. // For VOPs created after processed all transactions, - // trx_in_block = the_block.trsanctions.size(), virtual_op starts from 0. + // trx_in_block = the_block.trsanctions.size(), virtual_op starts from 0. ++_current_trx_in_block; _current_op_in_trx = 0; - _current_virtual_op = 0; + _current_virtual_op = 0; } if (global_props.parameters.witness_schedule_algorithm == GRAPHENE_WITNESS_SCHEDULED_ALGORITHM) { @@ -713,9 +713,9 @@ void database::_apply_block( const signed_block& next_block ) // Are we at the maintenance interval? if( maint_needed ) perform_chain_maintenance(next_block, global_props); - + check_ending_lotteries(); - + create_block_summary(next_block); place_delayed_bets(); // must happen after update_global_dynamic_data() updates the time clear_expired_transactions(); @@ -786,7 +786,7 @@ processed_transaction database::_apply_transaction(const signed_transaction& trx auto& trx_idx = get_mutable_index_type(); const chain_id_type& chain_id = get_chain_id(); transaction_id_type trx_id; - + if( !(skip & skip_transaction_dupe_check) ) { trx_id = trx.id(); @@ -884,7 +884,7 @@ const witness_object& database::validate_block_header( uint32_t skip, const sign FC_ASSERT( secret_hash_type::hash( next_block.previous_secret ) == witness.next_secret_hash, "", ( "previous_secret", next_block.previous_secret )( "next_secret_hash", witness.next_secret_hash ) ); - if( !(skip&skip_witness_signature) ) + if( !(skip&skip_witness_signature) ) FC_ASSERT( next_block.validate_signee( witness.signing_key ) ); if( !(skip&skip_witness_schedule_check) ) diff --git a/libraries/chain/hardfork.d/SON.hf b/libraries/chain/hardfork.d/SON.hf index 5cc86af6..1f1a9c5a 100644 --- a/libraries/chain/hardfork.d/SON.hf +++ b/libraries/chain/hardfork.d/SON.hf @@ -1,5 +1,4 @@ // SON HARDFORK Wednesday, October 28, 2020 0:00:00 GMT #ifndef HARDFORK_SON_TIME -#include #define HARDFORK_SON_TIME (fc::time_point_sec( 1603843200 )) #endif diff --git a/libraries/chain/include/graphene/chain/account_role_object.hpp b/libraries/chain/include/graphene/chain/account_role_object.hpp index 9455f475..2b3be409 100644 --- a/libraries/chain/include/graphene/chain/account_role_object.hpp +++ b/libraries/chain/include/graphene/chain/account_role_object.hpp @@ -28,10 +28,10 @@ namespace graphene using account_role_multi_index_type = multi_index_container< account_role_object, indexed_by< - ordered_unique< tag, + ordered_unique< tag, member >, - ordered_non_unique< tag, + ordered_non_unique< tag, member >, ordered_unique< tag, diff --git a/libraries/chain/include/graphene/chain/config.hpp b/libraries/chain/include/graphene/chain/config.hpp index 89d3cce3..776b0f1b 100644 --- a/libraries/chain/include/graphene/chain/config.hpp +++ b/libraries/chain/include/graphene/chain/config.hpp @@ -153,7 +153,7 @@ #define GRAPHENE_RECENTLY_MISSED_COUNT_INCREMENT 4 #define GRAPHENE_RECENTLY_MISSED_COUNT_DECREMENT 3 -#define GRAPHENE_CURRENT_DB_VERSION "PPY2.3" +#define GRAPHENE_CURRENT_DB_VERSION "PPY2.4" #define GRAPHENE_IRREVERSIBLE_THRESHOLD (70 * GRAPHENE_1_PERCENT) diff --git a/tests/betting/betting_tests.cpp b/tests/betting/betting_tests.cpp index 29224246..cb7c473a 100644 --- a/tests/betting/betting_tests.cpp +++ b/tests/betting/betting_tests.cpp @@ -1838,14 +1838,17 @@ BOOST_AUTO_TEST_CASE(event_group_delete_test_with_matched_bets) transfer(account_id_type(), bob_id, asset(initialAccountAsset)); generate_blocks(1); - const auto& event = create_event({{"en", "event"}}, {{"en", "2016-17"}}, nhl.id); + create_event({{"en", "event"}}, {{"en", "2016-17"}}, nhl.id); generate_blocks(1); + const event_object& event = *db.get_index_type().indices().get().rbegin(); - const auto& market_group = create_betting_market_group({{"en", "market group"}}, event.id, betting_market_rules.id, asset_id_type(), false, 0); + create_betting_market_group({{"en", "market group"}}, event.id, betting_market_rules.id, asset_id_type(), false, 0); generate_blocks(1); + const betting_market_group_object& market_group = *db.get_index_type().indices().get().rbegin(); - const auto& market = create_betting_market(market_group.id, {{"en", "market"}}); + create_betting_market(market_group.id, {{"en", "market"}}); generate_blocks(1); + const betting_market_object& market = *db.get_index_type().indices().get().rbegin(); place_bet(alice_id, market.id, bet_type::back, asset(betAsset, asset_id_type()), 2 * GRAPHENE_BETTING_ODDS_PRECISION); place_bet(bob_id, market.id, bet_type::lay, asset(betAsset, asset_id_type()), 2 * GRAPHENE_BETTING_ODDS_PRECISION); @@ -1877,9 +1880,8 @@ BOOST_AUTO_TEST_CASE(event_group_delete_test_not_existed_event_group) try { CREATE_ICE_HOCKEY_BETTING_MARKET(false, 0); - event_group_id_type nhl_id = nhl.id; - delete_event_group(nhl_id); - + event_group_id_type nhl_id = nhl.id; + delete_event_group(nhl_id); BOOST_CHECK_THROW(delete_event_group(nhl_id), fc::exception); } FC_LOG_AND_RETHROW() diff --git a/tests/cli/cli_fixture.cpp b/tests/cli/cli_fixture.cpp index 6148ccaa..70bdfb7c 100644 --- a/tests/cli/cli_fixture.cpp +++ b/tests/cli/cli_fixture.cpp @@ -201,9 +201,39 @@ cli_fixture::~cli_fixture() #endif } +void cli_fixture::generate_blocks(fc::time_point_sec timestamp, bool miss_intermediate_blocks, uint32_t skip) +{ + auto db = app1->chain_database(); + + if( miss_intermediate_blocks ) + { + generate_block(skip); + auto slots_to_miss = db->get_slot_at_time(timestamp); + if( slots_to_miss <= 1 ) + return; + --slots_to_miss; + generate_block(skip, fc::ecc::private_key::regenerate(fc::sha256::hash(string("null_key"))), slots_to_miss); + return; + } + while( db->head_block_time() < timestamp ) + generate_block(skip); +} + +signed_block cli_fixture::generate_block(uint32_t skip, const fc::ecc::private_key& key, int miss_blocks) +{ + skip |= database::skip_undo_history_check; + // skip == ~0 will skip checks specified in database::validation_steps + auto db = app1->chain_database(); + auto block = db->generate_block(db->get_slot_time(miss_blocks + 1), + db->get_scheduled_witness(miss_blocks + 1), + key, skip); + db->clear_pending(); + return block; +} + bool cli_fixture::generate_maintenance_block() { try { - fc::ecc::private_key committee_key = fc::ecc::private_key::regenerate(fc::sha256::hash(string("nathan"))); + fc::ecc::private_key committee_key = fc::ecc::private_key::regenerate(fc::sha256::hash(string("null_key"))); uint32_t skip = ~database::skip_fork_db; auto db = app1->chain_database(); auto maint_time = db->get_dynamic_global_properties().next_maintenance_time; @@ -219,27 +249,6 @@ bool cli_fixture::generate_maintenance_block() { } } -bool cli_fixture::generate_block() -{ - graphene::chain::signed_block returned_block; - return generate_block(returned_block); -} - -bool cli_fixture::generate_block(graphene::chain::signed_block& returned_block) -{ - try { - fc::ecc::private_key committee_key = fc::ecc::private_key::regenerate(fc::sha256::hash(string("nathan"))); - auto db = app1->chain_database(); - returned_block = db->generate_block( db->get_slot_time(1), - db->get_scheduled_witness(1), - committee_key, - database::skip_nothing ); - return true; - } catch (exception &e) { - return false; - } -} - void cli_fixture::init_nathan() { try @@ -254,7 +263,7 @@ void cli_fixture::init_nathan() import_txs = con.wallet_api_ptr->import_balance("nathan", nathan_keys, true); nathan_acct_before_upgrade = con.wallet_api_ptr->get_account("nathan"); - BOOST_CHECK(generate_block()); + generate_block(); // upgrade nathan BOOST_TEST_MESSAGE("Upgrading Nathan to LTM"); diff --git a/tests/cli/cli_fixture.hpp b/tests/cli/cli_fixture.hpp index ad3e9e33..79004f3a 100644 --- a/tests/cli/cli_fixture.hpp +++ b/tests/cli/cli_fixture.hpp @@ -60,13 +60,12 @@ struct cli_fixture cli_fixture(); ~cli_fixture(); - /////////// - /// Send a block to the db - /// @param returned_block the signed block - /// @returns true on success - /////////// - bool generate_block(graphene::chain::signed_block& returned_block); - bool generate_block(); + signed_block generate_block(uint32_t skip = ~0, + const fc::ecc::private_key& key = fc::ecc::private_key::regenerate(fc::sha256::hash(string("null_key"))), + int miss_blocks = 0); + + void generate_blocks(fc::time_point_sec timestamp, bool miss_intermediate_blocks = true, uint32_t skip = ~0); + /////////// /// @brief Skip intermediate blocks, and generate a maintenance block /// @returns true on success diff --git a/tests/cli/main.cpp b/tests/cli/main.cpp index c6b587e8..49bfa387 100644 --- a/tests/cli/main.cpp +++ b/tests/cli/main.cpp @@ -75,7 +75,7 @@ BOOST_AUTO_TEST_CASE( create_new_account ) BOOST_CHECK(con.wallet_api_ptr->import_key("jmjatlanta", bki.wif_priv_key)); con.wallet_api_ptr->save_wallet_file(con.wallet_filename); - BOOST_CHECK(generate_block()); + generate_block(); fc::usleep( fc::seconds(1) ); // attempt to give jmjatlanta some peerplays @@ -112,7 +112,7 @@ BOOST_FIXTURE_TEST_CASE( cli_vote_for_2_witnesses, cli_fixture ) signed_transaction vote_witness1_tx = con.wallet_api_ptr->vote_for_witness("jmjatlanta", "init1", true, true); // generate a block to get things started - BOOST_CHECK(generate_block()); + generate_block(); // wait for a maintenance interval BOOST_CHECK(generate_maintenance_block()); @@ -197,7 +197,7 @@ BOOST_AUTO_TEST_CASE( account_history_pagination ) "1.3.0", "Here are some CORE token for your new account", true); } - BOOST_CHECK(generate_block()); + generate_block(); // now get account history and make sure everything is there (and no duplicates) std::vector history = con.wallet_api_ptr->get_account_history("jmjatlanta", 300); @@ -489,7 +489,7 @@ BOOST_FIXTURE_TEST_CASE( saving_keys_wallet_test, cli_fixture ) graphene::wallet::plain_keys pk = decrypt_keys( "supersecret", wallet.cipher_keys ); BOOST_CHECK( pk.keys.size() == 1 ); // nathan key - BOOST_CHECK( generate_block() ); + generate_block(); fc::usleep( fc::seconds(1) ); wallet = fc::json::from_file( path ).as( 2 * GRAPHENE_MAX_NESTED_OBJECTS ); diff --git a/tests/cli/son.cpp b/tests/cli/son.cpp index e5f09faa..1d77608f 100644 --- a/tests/cli/son.cpp +++ b/tests/cli/son.cpp @@ -27,6 +27,9 @@ #include +#include +#include + class son_test_helper { cli_fixture& fixture_; @@ -36,6 +39,8 @@ public: fixture_(fixture) { fixture_.init_nathan(); + fixture_.generate_blocks(HARDFORK_SON_TIME); + fixture_.generate_block(); } void create_son(const std::string& account_name, const std::string& son_url, @@ -65,7 +70,7 @@ public: "nathan", account_name, "65000", "1.3.0", "Here are some CORE token for your new account", true ); - BOOST_CHECK(fixture_.generate_block()); + fixture_.generate_block(); // upgrade son account BOOST_TEST_MESSAGE("Upgrading son account to LTM"); @@ -75,16 +80,16 @@ public: // verify that the upgrade was successful BOOST_CHECK(son_account.is_lifetime_member()); - BOOST_CHECK(fixture_.generate_block()); + fixture_.generate_block(); // create deposit vesting fixture_.con.wallet_api_ptr->create_vesting_balance(account_name, "50", "1.3.0", vesting_balance_type::son, true); - BOOST_CHECK(fixture_.generate_block()); + fixture_.generate_block(); // create pay_vb vesting fixture_.con.wallet_api_ptr->create_vesting_balance(account_name, "1", "1.3.0", vesting_balance_type::normal, true); - BOOST_CHECK(fixture_.generate_block()); + fixture_.generate_block(); // check deposits are here auto deposits = fixture_.con.wallet_api_ptr->get_vesting_balances(account_name); @@ -169,10 +174,11 @@ BOOST_AUTO_TEST_CASE( cli_update_son ) // update SON signing key sidechain_public_keys.clear(); - con.wallet_api_ptr->update_son("sonmember", "http://sonmember_updated2", "TEST6Yaq5ZNTTkMM2kBBzV5jktr8ETsniCC3bnVD7eFmegRrLXfGGG", sidechain_public_keys, true); + std::string new_key = GRAPHENE_ADDRESS_PREFIX + std::string("6Yaq5ZNTTkMM2kBBzV5jktr8ETsniCC3bnVD7eFmegRrLXfGGG"); + con.wallet_api_ptr->update_son("sonmember", "http://sonmember_updated2", new_key, sidechain_public_keys, true); son_data = con.wallet_api_ptr->get_son("sonmember"); BOOST_CHECK(son_data.url == "http://sonmember_updated2"); - BOOST_CHECK(std::string(son_data.signing_key) == "TEST6Yaq5ZNTTkMM2kBBzV5jktr8ETsniCC3bnVD7eFmegRrLXfGGG"); + BOOST_CHECK(std::string(son_data.signing_key) == new_key); } catch( fc::exception& e ) { edump((e.to_detail_string())); @@ -421,7 +427,7 @@ BOOST_AUTO_TEST_CASE( update_son_votes_test ) con.wallet_api_ptr->create_vesting_balance("nathan", "1000", "1.3.0", vesting_balance_type::gpos, true); update_votes_tx = con.wallet_api_ptr->update_son_votes("nathan", accepted, rejected, 2, true); - BOOST_CHECK(generate_block()); + generate_block(); BOOST_CHECK(generate_maintenance_block()); // Verify the votes @@ -461,7 +467,7 @@ BOOST_AUTO_TEST_CASE( update_son_votes_test ) rejected.push_back("son1accnt"); BOOST_CHECK_THROW(update_votes_tx = con.wallet_api_ptr->update_son_votes("nathan", accepted, rejected, 1, true), fc::exception); - BOOST_CHECK(generate_block()); + generate_block(); // Verify the votes son1_obj = con.wallet_api_ptr->get_son("son1account"); @@ -675,7 +681,7 @@ BOOST_AUTO_TEST_CASE( maintenance_test ) // put SON in maintenance mode con.wallet_api_ptr->request_son_maintenance(name, true); - BOOST_CHECK(generate_block()); + generate_block(); // check SON is in request_maintenance son_obj = con.wallet_api_ptr->get_son(name); @@ -683,7 +689,7 @@ BOOST_AUTO_TEST_CASE( maintenance_test ) // restore SON activity con.wallet_api_ptr->cancel_request_son_maintenance(name, true); - BOOST_CHECK(generate_block()); + generate_block(); // check SON is active son_obj = con.wallet_api_ptr->get_son(name); @@ -691,7 +697,7 @@ BOOST_AUTO_TEST_CASE( maintenance_test ) // put SON in maintenance mode con.wallet_api_ptr->request_son_maintenance(name, true); - BOOST_CHECK(generate_block()); + generate_block(); // check SON is in request_maintenance son_obj = con.wallet_api_ptr->get_son(name); diff --git a/tests/tests/fee_tests.cpp b/tests/tests/fee_tests.cpp index 74ae896c..86dd3d7f 100644 --- a/tests/tests/fee_tests.cpp +++ b/tests/tests/fee_tests.cpp @@ -1005,7 +1005,7 @@ BOOST_AUTO_TEST_CASE( issue_429_test ) const auto& fees = *db.get_global_properties().parameters.current_fees; auto fees_to_pay = fees.get(); - + { signed_transaction tx; asset_create_operation op; diff --git a/tests/tests/gpos_tests.cpp b/tests/tests/gpos_tests.cpp index 6de53eb7..22908c07 100644 --- a/tests/tests/gpos_tests.cpp +++ b/tests/tests/gpos_tests.cpp @@ -905,7 +905,7 @@ BOOST_AUTO_TEST_CASE( worker_dividends_voting ) vote_for(voter1_id, worker.vote_for, voter1_private_key); // first maint pass, coefficient will be 1 - generate_blocks(db.get_dynamic_global_properties().next_maintenance_time); + generate_blocks(HARDFORK_GPOS_TIME + fc::hours(12)); //forward 1/2 sub-period so that it consider only gpos votes worker = worker_id_type()(db); BOOST_CHECK_EQUAL(worker.total_votes_for, 100); @@ -925,8 +925,8 @@ BOOST_AUTO_TEST_CASE( worker_dividends_voting ) generate_blocks(db.get_dynamic_global_properties().next_maintenance_time); // worker is getting paid - BOOST_CHECK_EQUAL(worker_id_type()(db).worker.get().balance(db).balance.amount.value, 10); - BOOST_CHECK_EQUAL(worker.worker.get().balance(db).balance.amount.value, 10); + BOOST_CHECK_EQUAL(worker_id_type()(db).worker.get().balance(db).balance.amount.value, 5); + BOOST_CHECK_EQUAL(worker.worker.get().balance(db).balance.amount.value, 5); // second maint pass, coefficient will be 0.75 worker = worker_id_type()(db); @@ -1009,7 +1009,7 @@ BOOST_AUTO_TEST_CASE( account_multiple_vesting ) vote_for(sam_id, witness1.vote_id, sam_private_key); vote_for(patty_id, witness1.vote_id, patty_private_key); - generate_blocks(db.get_dynamic_global_properties().next_maintenance_time); + generate_blocks(HARDFORK_GPOS_TIME + fc::hours(12)); //forward 1/2 sub-period so that it consider only gpos votes // amount in vested balanced will sum up as voting power witness1 = witness_id_type(1)(db);