From 1e1f109e7e02d6277bde19dd6d788eafdb65de6b Mon Sep 17 00:00:00 2001 From: sierra19XX <15652887+sierra19XX@users.noreply.github.com> Date: Fri, 7 Aug 2020 15:24:35 +0000 Subject: [PATCH] NFT make revenue_split integer from double --- libraries/chain/db_maint.cpp | 6 ++---- libraries/chain/hardfork.d/NFT.hf | 2 +- libraries/chain/include/graphene/chain/nft_object.hpp | 2 +- .../chain/include/graphene/chain/protocol/nft_ops.hpp | 4 ++-- libraries/chain/nft_evaluator.cpp | 4 ++-- libraries/chain/offer_evaluator.cpp | 4 ++-- libraries/wallet/include/graphene/wallet/wallet.hpp | 4 ++-- libraries/wallet/wallet.cpp | 8 ++++---- tests/tests/gpos_tests.cpp | 4 ++-- tests/tests/marketplace_tests.cpp | 2 +- 10 files changed, 19 insertions(+), 21 deletions(-) diff --git a/libraries/chain/db_maint.cpp b/libraries/chain/db_maint.cpp index d300a34b..03d2a274 100644 --- a/libraries/chain/db_maint.cpp +++ b/libraries/chain/db_maint.cpp @@ -804,8 +804,6 @@ uint32_t database::get_gpos_current_subperiod() const auto now = this->head_block_time(); auto seconds_since_period_start = now.sec_since_epoch() - period_start.sec_since_epoch(); - FC_ASSERT(period_start <= now && now <= period_end); - // get in what sub period we are uint32_t current_subperiod = 0; std::list period_list(number_of_subperiods); @@ -927,8 +925,8 @@ void rolling_period_start(database& db) if(now.sec_since_epoch() >= (period_start + vesting_period)) { // roll - db.modify(db.get_global_properties(), [now](global_property_object& p) { - p.parameters.extensions.value.gpos_period_start = now.sec_since_epoch(); + db.modify(db.get_global_properties(), [period_start, vesting_period](global_property_object& p) { + p.parameters.extensions.value.gpos_period_start = period_start + vesting_period; }); } } diff --git a/libraries/chain/hardfork.d/NFT.hf b/libraries/chain/hardfork.d/NFT.hf index a5139335..22866e27 100644 --- a/libraries/chain/hardfork.d/NFT.hf +++ b/libraries/chain/hardfork.d/NFT.hf @@ -1,4 +1,4 @@ -// RBAC HARDFORK Wednesday, 20-May-20 00:00:00 UTC +// NFT HARDFORK Wednesday, 20-May-20 00:00:00 UTC #ifndef HARDFORK_NFT_TIME #define HARDFORK_NFT_TIME (fc::time_point_sec( 1589932800 )) #endif diff --git a/libraries/chain/include/graphene/chain/nft_object.hpp b/libraries/chain/include/graphene/chain/nft_object.hpp index 163adbde..1994a92e 100644 --- a/libraries/chain/include/graphene/chain/nft_object.hpp +++ b/libraries/chain/include/graphene/chain/nft_object.hpp @@ -17,7 +17,7 @@ namespace graphene { namespace chain { std::string symbol; std::string base_uri; optional revenue_partner; - optional revenue_split; + optional revenue_split; bool is_transferable = false; bool is_sellable = true; }; diff --git a/libraries/chain/include/graphene/chain/protocol/nft_ops.hpp b/libraries/chain/include/graphene/chain/protocol/nft_ops.hpp index afb85029..41e77b06 100644 --- a/libraries/chain/include/graphene/chain/protocol/nft_ops.hpp +++ b/libraries/chain/include/graphene/chain/protocol/nft_ops.hpp @@ -18,7 +18,7 @@ namespace graphene { namespace chain { std::string symbol; std::string base_uri; optional revenue_partner; - optional revenue_split; + optional revenue_split; bool is_transferable = false; bool is_sellable = true; @@ -38,7 +38,7 @@ namespace graphene { namespace chain { optional symbol; optional base_uri; optional revenue_partner; - optional revenue_split; + optional revenue_split; optional is_transferable; optional is_sellable; diff --git a/libraries/chain/nft_evaluator.cpp b/libraries/chain/nft_evaluator.cpp index 76c632eb..92870436 100644 --- a/libraries/chain/nft_evaluator.cpp +++ b/libraries/chain/nft_evaluator.cpp @@ -16,7 +16,7 @@ void_result nft_metadata_create_evaluator::do_evaluate( const nft_metadata_creat FC_ASSERT((op.revenue_partner && op.revenue_split) || (!op.revenue_partner && !op.revenue_split), "NFT revenue partner info invalid"); if (op.revenue_partner) { (*op.revenue_partner)(db()); - FC_ASSERT(*op.revenue_split >= 0.0 && *op.revenue_split <= 1.0, "Revenue split percent invalid"); + FC_ASSERT(*op.revenue_split >= GRAPHENE_1_PERCENT && *op.revenue_split <= GRAPHENE_100_PERCENT, "Revenue split percent invalid"); } return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } @@ -55,7 +55,7 @@ void_result nft_metadata_update_evaluator::do_evaluate( const nft_metadata_updat FC_ASSERT((op.revenue_partner && op.revenue_split) || (!op.revenue_partner && !op.revenue_split), "NFT revenue partner info invalid"); if (op.revenue_partner) { (*op.revenue_partner)(db()); - FC_ASSERT(*op.revenue_split >= 0.0 && *op.revenue_split <= 1.0, "Revenue split percent invalid"); + FC_ASSERT(*op.revenue_split >= GRAPHENE_1_PERCENT && *op.revenue_split <= GRAPHENE_100_PERCENT, "Revenue split percent invalid"); } return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } diff --git a/libraries/chain/offer_evaluator.cpp b/libraries/chain/offer_evaluator.cpp index 3d9c58bc..0d1b1947 100644 --- a/libraries/chain/offer_evaluator.cpp +++ b/libraries/chain/offer_evaluator.cpp @@ -246,11 +246,11 @@ namespace graphene { const auto &nft_obj = item(d); const auto &nft_meta_obj = nft_obj.nft_metadata_id(d); - if (nft_meta_obj.revenue_partner && *nft_meta_obj.revenue_split > 0.0) + if (nft_meta_obj.revenue_partner && *nft_meta_obj.revenue_split > 0) { const auto &rev_partner = *nft_meta_obj.revenue_partner; const auto &rev_split = *nft_meta_obj.revenue_split; - int64_t item_fee = static_cast((rev_split * (*offer.bid_price).amount.value) / offer.item_ids.size()); + int64_t item_fee = static_cast((rev_split * (*offer.bid_price).amount.value / GRAPHENE_100_PERCENT) / offer.item_ids.size()); const auto &fee_asset = asset(item_fee, (*offer.bid_price).asset_id); auto ret_val = fee_map.insert({rev_partner, fee_asset}); if (ret_val.second == false) diff --git a/libraries/wallet/include/graphene/wallet/wallet.hpp b/libraries/wallet/include/graphene/wallet/wallet.hpp index 02e107c5..7f591328 100644 --- a/libraries/wallet/include/graphene/wallet/wallet.hpp +++ b/libraries/wallet/include/graphene/wallet/wallet.hpp @@ -1947,7 +1947,7 @@ class wallet_api string symbol, string base_uri, optional revenue_partner, - optional revenue_split, + optional revenue_split, bool is_transferable, bool is_sellable, bool broadcast); @@ -1972,7 +1972,7 @@ class wallet_api optional symbol, optional base_uri, optional revenue_partner, - optional revenue_split, + optional revenue_split, optional is_transferable, optional is_sellable, bool broadcast); diff --git a/libraries/wallet/wallet.cpp b/libraries/wallet/wallet.cpp index 34eb8446..97b31370 100644 --- a/libraries/wallet/wallet.cpp +++ b/libraries/wallet/wallet.cpp @@ -6372,7 +6372,7 @@ signed_transaction wallet_api::nft_metadata_create(string owner_account_id_or_na string symbol, string base_uri, optional revenue_partner, - optional revenue_split, + optional revenue_split, bool is_transferable, bool is_sellable, bool broadcast) @@ -6388,7 +6388,7 @@ signed_transaction wallet_api::nft_metadata_create(string owner_account_id_or_na { account_object partner_account = my->get_account(*revenue_partner); op.revenue_partner = partner_account.id; - double rev_split = 0.0; + uint16_t rev_split = 0; if( revenue_split ) { rev_split = *revenue_split; @@ -6412,7 +6412,7 @@ signed_transaction wallet_api::nft_metadata_update(string owner_account_id_or_na optional symbol, optional base_uri, optional revenue_partner, - optional revenue_split, + optional revenue_split, optional is_transferable, optional is_sellable, bool broadcast) @@ -6429,7 +6429,7 @@ signed_transaction wallet_api::nft_metadata_update(string owner_account_id_or_na { account_object partner_account = my->get_account(*revenue_partner); op.revenue_partner = partner_account.id; - double rev_split = 0.0; + uint16_t rev_split = 0; if( revenue_split ) { rev_split = *revenue_split; diff --git a/tests/tests/gpos_tests.cpp b/tests/tests/gpos_tests.cpp index aa9969ee..6de53eb7 100644 --- a/tests/tests/gpos_tests.cpp +++ b/tests/tests/gpos_tests.cpp @@ -630,6 +630,7 @@ BOOST_AUTO_TEST_CASE( voting ) generate_blocks( HARDFORK_GPOS_TIME ); generate_block(); + auto now = HARDFORK_GPOS_TIME; const auto& core = asset_id_type()(db); // send some asset to alice and bob @@ -651,7 +652,6 @@ BOOST_AUTO_TEST_CASE( voting ) BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period_start(), HARDFORK_GPOS_TIME.sec_since_epoch()); // update default gpos for test speed - auto now = db.head_block_time(); // 5184000 = 60x60x24x60 = 60 days // 864000 = 60x60x24x10 = 10 days update_gpos_global(5184000, 864000, now); @@ -754,7 +754,7 @@ BOOST_AUTO_TEST_CASE( voting ) advance_x_maint(5); // a new GPOS period is in but vote from user is before the start. Whoever votes in 6th sub-period, votes will carry now = db.head_block_time(); - BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period_start(), now.sec_since_epoch()); + BOOST_CHECK_EQUAL(db.get_global_properties().parameters.gpos_period_start(), HARDFORK_GPOS_TIME.sec_since_epoch() + db.get_global_properties().parameters.gpos_period()); generate_block(); diff --git a/tests/tests/marketplace_tests.cpp b/tests/tests/marketplace_tests.cpp index 4c702d21..bbde669c 100644 --- a/tests/tests/marketplace_tests.cpp +++ b/tests/tests/marketplace_tests.cpp @@ -34,7 +34,7 @@ BOOST_AUTO_TEST_CASE(nft_metadata_create_test) op.symbol = "NFT"; op.base_uri = "http://nft.example.com"; op.revenue_partner = mdowner_id; - op.revenue_split = 0.1; + op.revenue_split = 1000; trx.operations.push_back(op); sign(trx, mdowner_private_key);