From 146c0c4d8e24ce20f375b4c978995901464a8dae Mon Sep 17 00:00:00 2001 From: Daniel Larimer Date: Thu, 17 Dec 2015 11:32:22 -0500 Subject: [PATCH] Clean up some non-determisitic behavior, maybe fix #485 1. Replace ordered_non_unique indexes with composite keys / ordered_unique, using object_id as tiebreaker. 2. Make some casts more explicit. This commit was rebased by theoreticalbts due to conflicts with the patches for #466 #562 including bugfixes - Fix flipped comparison operator - Implement operator> and operator!= for object_id_type --- libraries/app/database_api.cpp | 4 +- libraries/chain/db_init.cpp | 18 +++---- .../include/graphene/chain/asset_object.hpp | 7 ++- .../include/graphene/chain/market_object.hpp | 30 +++++++---- .../chain/withdraw_permission_object.hpp | 22 ++++++-- libraries/chain/protocol/asset_ops.cpp | 2 +- libraries/chain/protocol/fee_schedule.cpp | 2 +- .../db/include/graphene/db/object_id.hpp | 37 ++++++++++++-- libraries/wallet/wallet.cpp | 8 +-- tests/common/database_fixture.cpp | 8 +-- tests/tests/basic_tests.cpp | 51 ++++++++++--------- tests/tests/operation_tests.cpp | 6 +-- tests/tests/operation_tests2.cpp | 4 +- tests/tests/uia_tests.cpp | 2 +- 14 files changed, 134 insertions(+), 67 deletions(-) diff --git a/libraries/app/database_api.cpp b/libraries/app/database_api.cpp index 59b03acd..ddd63832 100644 --- a/libraries/app/database_api.cpp +++ b/libraries/app/database_api.cpp @@ -960,8 +960,8 @@ vector database_api_impl::get_margin_positions( const account { const auto& idx = _db.get_index_type(); const auto& aidx = idx.indices().get(); - auto start = aidx.lower_bound( boost::make_tuple( id, 0 ) ); - auto end = aidx.lower_bound( boost::make_tuple( id+1, 0 ) ); + auto start = aidx.lower_bound( boost::make_tuple( id, asset_id_type(0) ) ); + auto end = aidx.lower_bound( boost::make_tuple( id+1, asset_id_type(0) ) ); vector result; while( start != end ) { diff --git a/libraries/chain/db_init.cpp b/libraries/chain/db_init.cpp index f04c370e..85c3cc92 100644 --- a/libraries/chain/db_init.cpp +++ b/libraries/chain/db_init.cpp @@ -316,7 +316,7 @@ void database::init_genesis(const genesis_state_type& genesis_state) a.statistics = create([&](account_statistics_object& s){s.owner = a.id;}).id; a.owner.weight_threshold = 1; a.active.weight_threshold = 1; - a.registrar = a.lifetime_referrer = a.referrer = id; + a.registrar = a.lifetime_referrer = a.referrer = account_id_type(id); a.membership_expiration_date = time_point_sec::maximum(); a.network_fee_percentage = GRAPHENE_DEFAULT_NETWORK_PERCENT_OF_FEE; a.lifetime_referrer_fee_percentage = GRAPHENE_100_PERCENT - GRAPHENE_DEFAULT_NETWORK_PERCENT_OF_FEE; @@ -339,9 +339,9 @@ void database::init_genesis(const genesis_state_type& genesis_state) a.options.issuer_permissions = 0; a.issuer = GRAPHENE_NULL_ACCOUNT; a.options.core_exchange_rate.base.amount = 1; - a.options.core_exchange_rate.base.asset_id = 0; + a.options.core_exchange_rate.base.asset_id = asset_id_type(0); a.options.core_exchange_rate.quote.amount = 1; - a.options.core_exchange_rate.quote.asset_id = 0; + a.options.core_exchange_rate.quote.asset_id = asset_id_type(0); a.dynamic_asset_data_id = dyn_asset.id; }); assert( asset_id_type(core_asset.id) == asset().asset_id ); @@ -364,9 +364,9 @@ void database::init_genesis(const genesis_state_type& genesis_state) a.options.issuer_permissions = 0; a.issuer = GRAPHENE_NULL_ACCOUNT; a.options.core_exchange_rate.base.amount = 1; - a.options.core_exchange_rate.base.asset_id = 0; + a.options.core_exchange_rate.base.asset_id = asset_id_type(0); a.options.core_exchange_rate.quote.amount = 1; - a.options.core_exchange_rate.quote.asset_id = 0; + a.options.core_exchange_rate.quote.asset_id = asset_id_type(0); a.dynamic_asset_data_id = dyn_asset.id; }); FC_ASSERT( asset_obj.get_id() == asset_id_type(id) ); @@ -491,7 +491,7 @@ void database::init_genesis(const genesis_state_type& genesis_state) GRAPHENE_DEFAULT_MAINTENANCE_COLLATERAL_RATIO); }); - total_supplies[ 0 ] += collateral_rec.collateral; + total_supplies[ asset_id_type(0) ] += collateral_rec.collateral; total_debts[ new_asset_id ] += collateral_rec.debt; ++collateral_holder_number; } @@ -555,13 +555,13 @@ void database::init_genesis(const genesis_state_type& genesis_state) total_supplies[ asset_id ] += vest.amount; } - if( total_supplies[ 0 ] > 0 ) + if( total_supplies[ asset_id_type(0) ] > 0 ) { adjust_balance(GRAPHENE_COMMITTEE_ACCOUNT, -get_balance(GRAPHENE_COMMITTEE_ACCOUNT,{})); } else { - total_supplies[ 0 ] = GRAPHENE_MAX_SHARE_SUPPLY; + total_supplies[ asset_id_type(0) ] = GRAPHENE_MAX_SHARE_SUPPLY; } const auto& idx = get_index_type().indices().get(); @@ -645,7 +645,7 @@ void database::init_genesis(const genesis_state_type& genesis_state) modify(get_global_properties(), [&](global_property_object& p) { for( uint32_t i = 1; i <= genesis_state.initial_active_witnesses; ++i ) { - p.active_witnesses.insert(i); + p.active_witnesses.insert(witness_id_type(i)); } }); diff --git a/libraries/chain/include/graphene/chain/asset_object.hpp b/libraries/chain/include/graphene/chain/asset_object.hpp index ea127026..ea7e6fa4 100644 --- a/libraries/chain/include/graphene/chain/asset_object.hpp +++ b/libraries/chain/include/graphene/chain/asset_object.hpp @@ -233,7 +233,12 @@ namespace graphene { namespace chain { indexed_by< ordered_unique< tag, member< object, object_id_type, &object::id > >, ordered_unique< tag, member >, - ordered_non_unique< tag, const_mem_fun > + ordered_unique< tag, + composite_key< asset_object, + const_mem_fun, + member< object, object_id_type, &object::id > + > + > > > asset_object_multi_index_type; typedef generic_index asset_index; diff --git a/libraries/chain/include/graphene/chain/market_object.hpp b/libraries/chain/include/graphene/chain/market_object.hpp index 8bf8fbcb..1bc2fe3e 100644 --- a/libraries/chain/include/graphene/chain/market_object.hpp +++ b/libraries/chain/include/graphene/chain/market_object.hpp @@ -72,9 +72,13 @@ struct by_account; typedef multi_index_container< limit_order_object, indexed_by< - ordered_unique< tag, - member< object, object_id_type, &object::id > >, - ordered_non_unique< tag, member< limit_order_object, time_point_sec, &limit_order_object::expiration> >, + ordered_unique< tag, member< object, object_id_type, &object::id > >, + ordered_unique< tag, + composite_key< limit_order_object, + member< limit_order_object, time_point_sec, &limit_order_object::expiration>, + member< object, object_id_type, &object::id> + > + >, ordered_unique< tag, composite_key< limit_order_object, member< limit_order_object, price, &limit_order_object::sell_price>, @@ -82,7 +86,12 @@ typedef multi_index_container< >, composite_key_compare< std::greater, std::less > >, - ordered_non_unique< tag, member> + ordered_unique< tag, + composite_key< limit_order_object, + member, + member + > + > > > limit_order_multi_index_type; @@ -168,19 +177,22 @@ typedef multi_index_container< force_settlement_object, indexed_by< ordered_unique< tag, member< object, object_id_type, &object::id > >, - ordered_non_unique< tag, - member + ordered_unique< tag, + composite_key< force_settlement_object, + member, + member< object, object_id_type, &object::id > + > >, - ordered_non_unique< tag, + ordered_unique< tag, composite_key< force_settlement_object, const_mem_fun, - member + member, + member< object, object_id_type, &object::id > > > > > force_settlement_object_multi_index_type; - typedef generic_index call_order_index; typedef generic_index force_settlement_index; diff --git a/libraries/chain/include/graphene/chain/withdraw_permission_object.hpp b/libraries/chain/include/graphene/chain/withdraw_permission_object.hpp index a26a73f9..000573bd 100644 --- a/libraries/chain/include/graphene/chain/withdraw_permission_object.hpp +++ b/libraries/chain/include/graphene/chain/withdraw_permission_object.hpp @@ -24,6 +24,7 @@ #pragma once #include #include +#include namespace graphene { namespace chain { @@ -78,9 +79,24 @@ namespace graphene { namespace chain { withdraw_permission_object, indexed_by< ordered_unique< tag, member< object, object_id_type, &object::id > >, - ordered_non_unique< tag, member >, - ordered_non_unique< tag, member >, - ordered_non_unique< tag, member > + ordered_unique< tag, + composite_key< withdraw_permission_object, + member, + member< object, object_id_type, &object::id > + > + >, + ordered_unique< tag, + composite_key< withdraw_permission_object, + member, + member< object, object_id_type, &object::id > + > + >, + ordered_unique< tag, + composite_key< withdraw_permission_object, + member, + member< object, object_id_type, &object::id > + > + > > > withdraw_permission_object_multi_index_type; diff --git a/libraries/chain/protocol/asset_ops.cpp b/libraries/chain/protocol/asset_ops.cpp index 2f666532..1626a2a9 100644 --- a/libraries/chain/protocol/asset_ops.cpp +++ b/libraries/chain/protocol/asset_ops.cpp @@ -158,7 +158,7 @@ void asset_issue_operation::validate()const FC_ASSERT( fee.amount >= 0 ); FC_ASSERT( asset_to_issue.amount.value <= GRAPHENE_MAX_SHARE_SUPPLY ); FC_ASSERT( asset_to_issue.amount.value > 0 ); - FC_ASSERT( asset_to_issue.asset_id != 0 ); + FC_ASSERT( asset_to_issue.asset_id != asset_id_type(0) ); } void asset_fund_fee_pool_operation::validate() const diff --git a/libraries/chain/protocol/fee_schedule.cpp b/libraries/chain/protocol/fee_schedule.cpp index f0d18125..993df085 100644 --- a/libraries/chain/protocol/fee_schedule.cpp +++ b/libraries/chain/protocol/fee_schedule.cpp @@ -130,7 +130,7 @@ namespace graphene { namespace chain { scaled /= GRAPHENE_100_PERCENT; FC_ASSERT( scaled <= GRAPHENE_MAX_SHARE_SUPPLY ); //idump( (base_value)(scaled)(core_exchange_rate) ); - auto result = asset( scaled.to_uint64(), 0 ) * core_exchange_rate; + auto result = asset( scaled.to_uint64(), asset_id_type(0) ) * core_exchange_rate; //FC_ASSERT( result * core_exchange_rate >= asset( scaled.to_uint64()) ); while( result * core_exchange_rate < asset( scaled.to_uint64()) ) diff --git a/libraries/db/include/graphene/db/object_id.hpp b/libraries/db/include/graphene/db/object_id.hpp index e9f40996..02304fc7 100644 --- a/libraries/db/include/graphene/db/object_id.hpp +++ b/libraries/db/include/graphene/db/object_id.hpp @@ -51,12 +51,18 @@ namespace graphene { namespace db { uint16_t space_type()const { return number >> 48; } uint64_t instance()const { return number & GRAPHENE_DB_MAX_INSTANCE_ID; } bool is_null()const { return number == 0; } - operator uint64_t()const { return number; } + explicit operator uint64_t()const { return number; } friend bool operator == ( const object_id_type& a, const object_id_type& b ) { return a.number == b.number; } + + friend bool operator != ( const object_id_type& a, const object_id_type& b ) + { + return a.number != b.number; + } + object_id_type& operator++(int) { ++number; return *this; } object_id_type& operator++() { ++number; return *this; } @@ -68,11 +74,16 @@ namespace graphene { namespace db { } friend size_t hash_value( object_id_type v ) { return std::hash()(v.number); } - friend bool operator < ( const object_id_type& a, const object_id_type& b ) + friend bool operator< ( const object_id_type& a, const object_id_type& b ) { return a.number < b.number; } + friend bool operator> ( const object_id_type& a, const object_id_type& b ) + { + return a.number > b.number; + } + template< typename T > bool is() const { @@ -106,7 +117,7 @@ namespace graphene { namespace db { object_id(){} object_id( unsigned_int i ):instance(i){} - object_id( uint64_t i ):instance(i) + explicit object_id( uint64_t i ):instance(i) { FC_ASSERT( (i >> 48) == 0 ); } @@ -118,11 +129,25 @@ namespace graphene { namespace db { friend object_id operator+(const object_id a, int delta ) { return object_id( uint64_t(a.instance.value+delta) ); } operator object_id_type()const { return object_id_type( SpaceID, TypeID, instance.value ); } - operator uint64_t()const { return object_id_type( *this ).number; } + explicit operator uint64_t()const { return object_id_type( *this ).number; } template const T& operator()(const DB& db)const { return db.get(*this); } + friend bool operator != ( const object_id& a, const object_id& b ) + { + return a.instance != b.instance; + } + friend bool operator != ( const object_id_type& a, const object_id& b ) + { + return a != object_id_type(b); + } + friend bool operator != ( const object_id& a, const object_id_type& b ) + { + return object_id_type(a) != b; + } + + friend bool operator == ( const object_id& a, const object_id& b ) { return a.instance == b.instance; @@ -139,6 +164,10 @@ namespace graphene { namespace db { { return a.instance.value < b.instance.value; } + friend bool operator > ( const object_id& a, const object_id& b ) + { + return a.instance.value > b.instance.value; + } friend size_t hash_value( object_id v ) { return std::hash()(v.instance.value); } unsigned_int instance; diff --git a/libraries/wallet/wallet.cpp b/libraries/wallet/wallet.cpp index 8ca7d7b9..50cf634c 100644 --- a/libraries/wallet/wallet.cpp +++ b/libraries/wallet/wallet.cpp @@ -2324,7 +2324,7 @@ public: asset_options opts; opts.flags &= ~(white_list | disable_force_settle | global_settle); opts.issuer_permissions = opts.flags; - opts.core_exchange_rate = price(asset(1), asset(1,1)); + opts.core_exchange_rate = price(asset(1), asset(1,asset_id_type(1))); create_asset(get_account(creator).name, symbol, 2, opts, {}, true); } @@ -2333,7 +2333,7 @@ public: asset_options opts; opts.flags &= ~white_list; opts.issuer_permissions = opts.flags; - opts.core_exchange_rate = price(asset(1), asset(1,1)); + opts.core_exchange_rate = price(asset(1), asset(1,asset_id_type(1))); bitasset_options bopts; create_asset(get_account(creator).name, symbol, 2, opts, bopts, true); } @@ -3644,8 +3644,8 @@ vector wallet_api::get_blind_balances( string key_or_label ) auto pub_key = get_public_key( key_or_label ); auto& to_asset_used_idx = my->_wallet.blind_receipts.get(); - auto start = to_asset_used_idx.lower_bound( std::make_tuple(pub_key,0,false) ); - auto end = to_asset_used_idx.lower_bound( std::make_tuple(pub_key,uint32_t(0xffffffff),true) ); + auto start = to_asset_used_idx.lower_bound( std::make_tuple(pub_key,asset_id_type(0),false) ); + auto end = to_asset_used_idx.lower_bound( std::make_tuple(pub_key,asset_id_type(uint32_t(0xffffffff)),true) ); while( start != end ) { if( !start->used ) diff --git a/tests/common/database_fixture.cpp b/tests/common/database_fixture.cpp index 7a9e7ce4..846e4ec2 100644 --- a/tests/common/database_fixture.cpp +++ b/tests/common/database_fixture.cpp @@ -439,7 +439,7 @@ const asset_object& database_fixture::create_bitasset( flags |= witness_fed_asset; creator.common_options.issuer_permissions = flags; creator.common_options.flags = flags & ~global_settle; - creator.common_options.core_exchange_rate = price({asset(1,1),asset(1)}); + creator.common_options.core_exchange_rate = price({asset(1,asset_id_type(1)),asset(1)}); creator.bitasset_opts = bitasset_options(); trx.operations.push_back(std::move(creator)); trx.validate(); @@ -466,7 +466,7 @@ const asset_object& database_fixture::create_prediction_market( creator.common_options.flags = flags & ~global_settle; if( issuer == GRAPHENE_WITNESS_ACCOUNT ) creator.common_options.flags |= witness_fed_asset; - creator.common_options.core_exchange_rate = price({asset(1,1),asset(1)}); + creator.common_options.core_exchange_rate = price({asset(1,asset_id_type(1)),asset(1)}); creator.bitasset_opts = bitasset_options(); creator.is_prediction_market = true; trx.operations.push_back(std::move(creator)); @@ -484,7 +484,7 @@ const asset_object& database_fixture::create_user_issued_asset( const string& na creator.symbol = name; creator.common_options.max_supply = 0; creator.precision = 2; - creator.common_options.core_exchange_rate = price({asset(1,1),asset(1)}); + creator.common_options.core_exchange_rate = price({asset(1,asset_id_type(1)),asset(1)}); creator.common_options.max_supply = GRAPHENE_MAX_SHARE_SUPPLY; creator.common_options.flags = charge_market_fee; creator.common_options.issuer_permissions = charge_market_fee; @@ -503,7 +503,7 @@ const asset_object& database_fixture::create_user_issued_asset( const string& na creator.symbol = name; creator.common_options.max_supply = 0; creator.precision = 2; - creator.common_options.core_exchange_rate = price({asset(1,1),asset(1)}); + creator.common_options.core_exchange_rate = price({asset(1,asset_id_type(1)),asset(1)}); creator.common_options.max_supply = GRAPHENE_MAX_SHARE_SUPPLY; creator.common_options.flags = flags; creator.common_options.issuer_permissions = flags; diff --git a/tests/tests/basic_tests.cpp b/tests/tests/basic_tests.cpp index 46249801..2390a7c6 100644 --- a/tests/tests/basic_tests.cpp +++ b/tests/tests/basic_tests.cpp @@ -138,28 +138,33 @@ BOOST_AUTO_TEST_CASE( valid_symbol_test ) BOOST_AUTO_TEST_CASE( price_test ) { - BOOST_CHECK( price::max(0,1) > price::min(0,1) ); - BOOST_CHECK( price::max(1,0) > price::min(1,0) ); - BOOST_CHECK( price::max(0,1) >= price::min(0,1) ); - BOOST_CHECK( price::max(1,0) >= price::min(1,0) ); - BOOST_CHECK( price::max(0,1) >= price::max(0,1) ); - BOOST_CHECK( price::max(1,0) >= price::max(1,0) ); - BOOST_CHECK( price::min(0,1) < price::max(0,1) ); - BOOST_CHECK( price::min(1,0) < price::max(1,0) ); - BOOST_CHECK( price::min(0,1) <= price::max(0,1) ); - BOOST_CHECK( price::min(1,0) <= price::max(1,0) ); - BOOST_CHECK( price::min(0,1) <= price::min(0,1) ); - BOOST_CHECK( price::min(1,0) <= price::min(1,0) ); - BOOST_CHECK( price::min(1,0) != price::max(1,0) ); - BOOST_CHECK( ~price::max(0,1) != price::min(0,1) ); - BOOST_CHECK( ~price::min(0,1) != price::max(0,1) ); - BOOST_CHECK( ~price::max(0,1) == price::min(1,0) ); - BOOST_CHECK( ~price::min(0,1) == price::max(1,0) ); - BOOST_CHECK( ~price::max(0,1) < ~price::min(0,1) ); - BOOST_CHECK( ~price::max(0,1) <= ~price::min(0,1) ); - price a(asset(1), asset(2,1)); - price b(asset(2), asset(2,1)); - price c(asset(1), asset(2,1)); + auto price_max = []( uint32_t a, uint32_t b ) + { return price::max( asset_id_type(a), asset_id_type(b) ); }; + auto price_min = []( uint32_t a, uint32_t b ) + { return price::min( asset_id_type(a), asset_id_type(b) ); }; + + BOOST_CHECK( price_max(0,1) > price_min(0,1) ); + BOOST_CHECK( price_max(1,0) > price_min(1,0) ); + BOOST_CHECK( price_max(0,1) >= price_min(0,1) ); + BOOST_CHECK( price_max(1,0) >= price_min(1,0) ); + BOOST_CHECK( price_max(0,1) >= price_max(0,1) ); + BOOST_CHECK( price_max(1,0) >= price_max(1,0) ); + BOOST_CHECK( price_min(0,1) < price_max(0,1) ); + BOOST_CHECK( price_min(1,0) < price_max(1,0) ); + BOOST_CHECK( price_min(0,1) <= price_max(0,1) ); + BOOST_CHECK( price_min(1,0) <= price_max(1,0) ); + BOOST_CHECK( price_min(0,1) <= price_min(0,1) ); + BOOST_CHECK( price_min(1,0) <= price_min(1,0) ); + BOOST_CHECK( price_min(1,0) != price_max(1,0) ); + BOOST_CHECK( ~price_max(0,1) != price_min(0,1) ); + BOOST_CHECK( ~price_min(0,1) != price_max(0,1) ); + BOOST_CHECK( ~price_max(0,1) == price_min(1,0) ); + BOOST_CHECK( ~price_min(0,1) == price_max(1,0) ); + BOOST_CHECK( ~price_max(0,1) < ~price_min(0,1) ); + BOOST_CHECK( ~price_max(0,1) <= ~price_min(0,1) ); + price a(asset(1), asset(2,asset_id_type(1))); + price b(asset(2), asset(2,asset_id_type(1))); + price c(asset(1), asset(2,asset_id_type(1))); BOOST_CHECK(a < b); BOOST_CHECK(b > a); BOOST_CHECK(a == c); @@ -168,7 +173,7 @@ BOOST_AUTO_TEST_CASE( price_test ) price_feed dummy; dummy.maintenance_collateral_ratio = 1002; dummy.maximum_short_squeeze_ratio = 1234; - dummy.settlement_price = price(asset(1000), asset(2000, 1)); + dummy.settlement_price = price(asset(1000), asset(2000, asset_id_type(1))); price_feed dummy2 = dummy; BOOST_CHECK(dummy == dummy2); } diff --git a/tests/tests/operation_tests.cpp b/tests/tests/operation_tests.cpp index 435aac48..7b3867d7 100644 --- a/tests/tests/operation_tests.cpp +++ b/tests/tests/operation_tests.cpp @@ -48,8 +48,8 @@ BOOST_FIXTURE_TEST_SUITE( operation_tests, database_fixture ) BOOST_AUTO_TEST_CASE( feed_limit_logic_test ) { try { - asset usd(1000,1); - asset core(1000,0); + asset usd(1000,asset_id_type(1)); + asset core(1000,asset_id_type(0)); price_feed feed; feed.settlement_price = usd / core; @@ -695,7 +695,7 @@ BOOST_AUTO_TEST_CASE( create_uia ) creator.common_options.market_fee_percent = GRAPHENE_MAX_MARKET_FEE_PERCENT/100; /*1%*/ creator.common_options.issuer_permissions = UIA_ASSET_ISSUER_PERMISSION_MASK; creator.common_options.flags = charge_market_fee; - creator.common_options.core_exchange_rate = price({asset(2),asset(1,1)}); + creator.common_options.core_exchange_rate = price({asset(2),asset(1,asset_id_type(1))}); trx.operations.push_back(std::move(creator)); PUSH_TX( db, trx, ~0 ); diff --git a/tests/tests/operation_tests2.cpp b/tests/tests/operation_tests2.cpp index 7adf3a1c..bddbe5ae 100644 --- a/tests/tests/operation_tests2.cpp +++ b/tests/tests/operation_tests2.cpp @@ -74,7 +74,7 @@ BOOST_AUTO_TEST_CASE( withdraw_permission_create ) REQUIRE_OP_VALIDATION_FAILURE(op, periods_until_expiration, 0); REQUIRE_OP_VALIDATION_FAILURE(op, withdraw_from_account, dan_id); REQUIRE_OP_VALIDATION_FAILURE(op, withdrawal_period_sec, 0); - REQUIRE_THROW_WITH_VALUE(op, withdrawal_limit, asset(10, 10)); + REQUIRE_THROW_WITH_VALUE(op, withdrawal_limit, asset(10, asset_id_type(10))); REQUIRE_THROW_WITH_VALUE(op, authorized_account, account_id_type(1000)); REQUIRE_THROW_WITH_VALUE(op, period_start_time, fc::time_point_sec(10000)); REQUIRE_THROW_WITH_VALUE(op, withdrawal_period_sec, 1); @@ -281,7 +281,7 @@ BOOST_AUTO_TEST_CASE( withdraw_permission_update ) trx.operations.push_back(op); REQUIRE_THROW_WITH_VALUE(op, periods_until_expiration, 0); REQUIRE_THROW_WITH_VALUE(op, withdrawal_period_sec, 0); - REQUIRE_THROW_WITH_VALUE(op, withdrawal_limit, asset(1, 12)); + REQUIRE_THROW_WITH_VALUE(op, withdrawal_limit, asset(1, asset_id_type(12))); REQUIRE_THROW_WITH_VALUE(op, withdrawal_limit, asset(0)); REQUIRE_THROW_WITH_VALUE(op, withdraw_from_account, account_id_type(0)); REQUIRE_THROW_WITH_VALUE(op, authorized_account, account_id_type(0)); diff --git a/tests/tests/uia_tests.cpp b/tests/tests/uia_tests.cpp index 8876f23e..ddb20d2d 100644 --- a/tests/tests/uia_tests.cpp +++ b/tests/tests/uia_tests.cpp @@ -53,7 +53,7 @@ BOOST_AUTO_TEST_CASE( create_advanced_uia ) creator.common_options.market_fee_percent = GRAPHENE_MAX_MARKET_FEE_PERCENT/100; /*1%*/ creator.common_options.issuer_permissions = charge_market_fee|white_list|override_authority|transfer_restricted|disable_confidential; creator.common_options.flags = charge_market_fee|white_list|override_authority|disable_confidential; - creator.common_options.core_exchange_rate = price({asset(2),asset(1,1)}); + creator.common_options.core_exchange_rate = price({asset(2),asset(1,asset_id_type(1))}); creator.common_options.whitelist_authorities = creator.common_options.blacklist_authorities = {account_id_type()}; trx.operations.push_back(std::move(creator)); PUSH_TX( db, trx, ~0 );