Skip to content

Commit 7d441c1

Browse files
authored
Merge pull request #2477 from bitshares/develop
Merge develop branch into hardfork branch
2 parents 7d79c23 + 6a0b2f5 commit 7d441c1

File tree

7 files changed

+117
-59
lines changed

7 files changed

+117
-59
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM phusion/baseimage:0.11
1+
FROM phusion/baseimage:focal-1.0.0
22
MAINTAINER The bitshares decentralized organisation
33

44
ENV LANG=en_US.UTF-8

libraries/chain/db_block.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,9 @@ signed_block database::_generate_block(
452452
{
453453
auto temp_session = _undo_db.start_undo_session();
454454
processed_transaction ptx = _apply_transaction( tx );
455+
// Clear results to save disk space and network bandwidth.
456+
// This may break client applications which rely on the results.
457+
ptx.operation_results.clear();
455458

456459
// We have to recompute pack_size(ptx) because it may be different
457460
// than pack_size(tx) (i.e. if one or more results increased
@@ -663,8 +666,11 @@ void database::_apply_block( const signed_block& next_block )
663666
notify_changed_objects();
664667
} FC_CAPTURE_AND_RETHROW( (next_block.block_num()) ) }
665668

666-
667-
669+
/**
670+
* @note if a @c processed_transaction is passed in, it is cast into @c signed_transaction here.
671+
* It also means that the @c operation_results field is ignored by consensus, although it
672+
* is a part of block data.
673+
*/
668674
processed_transaction database::apply_transaction(const signed_transaction& trx, uint32_t skip)
669675
{
670676
processed_transaction result;

libraries/chain/include/graphene/chain/config.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
#define GRAPHENE_MAX_NESTED_OBJECTS (200)
3434

35-
const std::string GRAPHENE_CURRENT_DB_VERSION = "20210222";
35+
const std::string GRAPHENE_CURRENT_DB_VERSION = "20210609";
3636

3737
#define GRAPHENE_RECENTLY_MISSED_COUNT_INCREMENT 4
3838
#define GRAPHENE_RECENTLY_MISSED_COUNT_DECREMENT 3

libraries/plugins/market_history/market_history_plugin.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -413,15 +413,14 @@ void market_history_plugin_impl::update_market_histories( const signed_block& b
413413
const operation_history_object& oho = history_itr->op;
414414
if( oho.op.is_type< liquidity_pool_deposit_operation >() )
415415
{
416-
auto& op = oho.op.get< liquidity_pool_deposit_operation >();
417416
auto& result = oho.result.get< generic_exchange_operation_result >();
418-
db.modify( *ticker, [&op,&result]( liquidity_pool_ticker_object& t ) {
417+
db.modify( *ticker, [&result]( liquidity_pool_ticker_object& t ) {
419418
t._24h_deposit_count -= 1;
420-
t._24h_deposit_amount_a -= op.amount_a.amount.value;
421-
t._24h_deposit_amount_b -= op.amount_b.amount.value;
419+
t._24h_deposit_amount_a -= result.paid.front().amount.value;
420+
t._24h_deposit_amount_b -= result.paid.back().amount.value;
422421
t._24h_deposit_share_amount -= result.received.front().amount.value;
423-
t._24h_balance_delta_a -= op.amount_a.amount.value;
424-
t._24h_balance_delta_b -= op.amount_b.amount.value;
422+
t._24h_balance_delta_a -= result.paid.front().amount.value;
423+
t._24h_balance_delta_b -= result.paid.back().amount.value;
425424
});
426425
}
427426
else if( oho.op.is_type< liquidity_pool_withdraw_operation >() )
@@ -638,19 +637,18 @@ void market_history_plugin_impl::update_liquidity_pool_histories(
638637
{
639638
if( oho.op.is_type< liquidity_pool_deposit_operation >() )
640639
{
641-
auto& op = oho.op.get< liquidity_pool_deposit_operation >();
642640
auto& result = oho.result.get< generic_exchange_operation_result >();
643641

644-
db.modify( *ticker, [&op,&result]( liquidity_pool_ticker_object& t ) {
642+
db.modify( *ticker, [&result]( liquidity_pool_ticker_object& t ) {
645643
t._24h_deposit_count += 1;
646-
t._24h_deposit_amount_a += op.amount_a.amount.value;
647-
t._24h_deposit_amount_b += op.amount_b.amount.value;
644+
t._24h_deposit_amount_a += result.paid.front().amount.value;
645+
t._24h_deposit_amount_b += result.paid.back().amount.value;
648646
t._24h_deposit_share_amount += result.received.front().amount.value;
649-
t._24h_balance_delta_a += op.amount_a.amount.value;
650-
t._24h_balance_delta_b += op.amount_b.amount.value;
647+
t._24h_balance_delta_a += result.paid.front().amount.value;
648+
t._24h_balance_delta_b += result.paid.back().amount.value;
651649
t.total_deposit_count += 1;
652-
t.total_deposit_amount_a += op.amount_a.amount.value;
653-
t.total_deposit_amount_b += op.amount_b.amount.value;
650+
t.total_deposit_amount_a += result.paid.front().amount.value;
651+
t.total_deposit_amount_b += result.paid.back().amount.value;
654652
t.total_deposit_share_amount += result.received.front().amount.value;
655653
});
656654

tests/cli/main.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1668,7 +1668,8 @@ BOOST_AUTO_TEST_CASE( cli_create_htlc )
16681668
BOOST_CHECK(generate_block(app1, result_block));
16691669

16701670
// get the ID:
1671-
htlc_id_type htlc_id = result_block.transactions[result_block.transactions.size()-1].operation_results[0].get<object_id_type>();
1671+
auto tmp_hist = con.wallet_api_ptr->get_account_history("alice", 1);
1672+
htlc_id_type htlc_id = tmp_hist[0].op.result.get<object_id_type>();
16721673
alice_htlc_id_as_string = (std::string)(object_id_type)htlc_id;
16731674
BOOST_TEST_MESSAGE("Alice shares the HTLC ID with Bob. The HTLC ID is: " + alice_htlc_id_as_string);
16741675
}
@@ -1690,7 +1691,8 @@ BOOST_AUTO_TEST_CASE( cli_create_htlc )
16901691
BOOST_CHECK(generate_block(app1, result_block));
16911692

16921693
// get the ID:
1693-
htlc_id_type htlc_id = result_block.transactions[result_block.transactions.size()-1].operation_results[0].get<object_id_type>();
1694+
auto tmp_hist = con.wallet_api_ptr->get_account_history("bob", 1);
1695+
htlc_id_type htlc_id = tmp_hist[0].op.result.get<object_id_type>();
16941696
bob_htlc_id_as_string = (std::string)(object_id_type)htlc_id;
16951697
BOOST_TEST_MESSAGE("Bob shares the HTLC ID with Alice. The HTLC ID is: " + bob_htlc_id_as_string);
16961698
}
@@ -2213,8 +2215,8 @@ BOOST_AUTO_TEST_CASE( cli_create_htlc_bsip64 )
22132215
BOOST_CHECK(generate_block(app1, result_block));
22142216

22152217
// get the ID:
2216-
htlc_id_type htlc_id = result_block.transactions[result_block.transactions.size()-1]
2217-
.operation_results[0].get<object_id_type>();
2218+
auto tmp_hist = con.wallet_api_ptr->get_account_history("alice", 1);
2219+
htlc_id_type htlc_id = tmp_hist[0].op.result.get<object_id_type>();
22182220
alice_htlc_id_as_string = (std::string)(object_id_type)htlc_id;
22192221
BOOST_TEST_MESSAGE("Alice shares the HTLC ID with Bob. The HTLC ID is: " + alice_htlc_id_as_string);
22202222
}
@@ -2237,8 +2239,8 @@ BOOST_AUTO_TEST_CASE( cli_create_htlc_bsip64 )
22372239
BOOST_CHECK(generate_block(app1, result_block));
22382240

22392241
// get the ID:
2240-
htlc_id_type htlc_id = result_block.transactions[result_block.transactions.size()-1]
2241-
.operation_results[0].get<object_id_type>();
2242+
auto tmp_hist = con.wallet_api_ptr->get_account_history("bob", 1);
2243+
htlc_id_type htlc_id = tmp_hist[0].op.result.get<object_id_type>();
22422244
bob_htlc_id_as_string = (std::string)(object_id_type)htlc_id;
22432245
BOOST_TEST_MESSAGE("Bob shares the HTLC ID with Alice. The HTLC ID is: " + bob_htlc_id_as_string);
22442246
}

tests/tests/htlc_tests.cpp

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,9 @@ try {
103103
create_operation.fee = db.get_global_properties().parameters.current_fees->calculate_fee(create_operation);
104104
trx.operations.push_back(create_operation);
105105
sign(trx, alice_private_key);
106-
PUSH_TX(db, trx, ~0);
106+
processed_transaction alice_trx = PUSH_TX(db, trx, ~0);
107107
trx.clear();
108-
graphene::chain::signed_block blk = generate_block();
109-
processed_transaction alice_trx = blk.transactions[0];
108+
generate_block();
110109
alice_htlc_id = alice_trx.operation_results[0].get<object_id_type>();
111110
generate_block();
112111
}
@@ -553,10 +552,9 @@ try {
553552
create_operation.fee = db.current_fee_schedule().calculate_fee( create_operation );
554553
trx.operations.push_back( create_operation );
555554
sign(trx, alice_private_key);
556-
PUSH_TX(db, trx, ~0);
555+
processed_transaction alice_trx = PUSH_TX(db, trx, ~0);
557556
trx.clear();
558-
graphene::chain::signed_block blk = generate_block();
559-
processed_transaction alice_trx = blk.transactions[0];
557+
generate_block();
560558
alice_htlc_id = alice_trx.operation_results[0].get<object_id_type>();
561559
}
562560

@@ -1053,10 +1051,9 @@ try {
10531051
trx.operations.push_back( create_operation );
10541052
sign(trx, alice_private_key);
10551053
// bob can now accept it, so it works
1056-
PUSH_TX( db, trx, ~0 );
1054+
processed_transaction alice_trx = PUSH_TX( db, trx, ~0 );
10571055
trx.clear();
1058-
graphene::chain::signed_block blk = generate_block();
1059-
processed_transaction alice_trx = blk.transactions[0];
1056+
generate_block();
10601057
alice_htlc_id = alice_trx.operation_results[0].get<object_id_type>();
10611058
}
10621059

@@ -1129,11 +1126,10 @@ try {
11291126
create_operation.fee = db.get_global_properties().parameters.current_fees->calculate_fee(create_operation);
11301127
trx.operations.push_back(create_operation);
11311128
sign(trx, alice_private_key);
1132-
PUSH_TX(db, trx, ~0);
1129+
processed_transaction alice_trx = PUSH_TX(db, trx, ~0);
11331130
trx.clear();
11341131
set_expiration( db, trx );
1135-
graphene::chain::signed_block blk = generate_block();
1136-
processed_transaction alice_trx = blk.transactions[0];
1132+
generate_block();
11371133
alice_htlc_id_bob = alice_trx.operation_results[0].get<object_id_type>();
11381134
generate_block();
11391135
set_expiration( db, trx );
@@ -1153,11 +1149,10 @@ try {
11531149
create_operation.fee = db.get_global_properties().parameters.current_fees->calculate_fee(create_operation);
11541150
trx.operations.push_back(create_operation);
11551151
sign(trx, alice_private_key);
1156-
PUSH_TX(db, trx, ~0);
1152+
processed_transaction alice_trx = PUSH_TX(db, trx, ~0);
11571153
trx.clear();
11581154
set_expiration( db, trx );
1159-
graphene::chain::signed_block blk = generate_block();
1160-
processed_transaction alice_trx = blk.transactions[0];
1155+
generate_block();
11611156
alice_htlc_id_carl = alice_trx.operation_results[0].get<object_id_type>();
11621157
generate_block();
11631158
set_expiration( db, trx );
@@ -1177,11 +1172,10 @@ try {
11771172
create_operation.fee = db.get_global_properties().parameters.current_fees->calculate_fee(create_operation);
11781173
trx.operations.push_back(create_operation);
11791174
sign(trx, alice_private_key);
1180-
PUSH_TX(db, trx, ~0);
1175+
processed_transaction alice_trx = PUSH_TX(db, trx, ~0);
11811176
trx.clear();
11821177
set_expiration( db, trx );
1183-
graphene::chain::signed_block blk = generate_block();
1184-
processed_transaction alice_trx = blk.transactions[0];
1178+
generate_block();
11851179
alice_htlc_id_dan = alice_trx.operation_results[0].get<object_id_type>();
11861180
generate_block();
11871181
set_expiration( db, trx );

tests/tests/liquidity_pool_tests.cpp

Lines changed: 75 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -776,28 +776,52 @@ BOOST_AUTO_TEST_CASE( liquidity_pool_exchange_test )
776776

777777
// The owner do the initial deposit
778778
generic_exchange_operation_result result;
779-
result = deposit_to_liquidity_pool( sam_id, lp_id, asset( 1000, eur_id ), asset( 1200, usd_id ) );
779+
result = deposit_to_liquidity_pool( sam_id, lp_id, asset( 100, eur_id ), asset( 120, usd_id ) );
780780

781781
BOOST_REQUIRE_EQUAL( result.paid.size(), 2u );
782-
BOOST_CHECK( result.paid.front() == asset( 1000, eur_id ) );
783-
BOOST_CHECK( result.paid.back() == asset( 1200, usd_id ) );
782+
BOOST_CHECK( result.paid.front() == asset( 100, eur_id ) );
783+
BOOST_CHECK( result.paid.back() == asset( 120, usd_id ) );
784784
BOOST_REQUIRE_EQUAL( result.received.size(), 1u );
785-
BOOST_CHECK( result.received.front() == asset( 1200, lpa_id ) );
785+
BOOST_CHECK( result.received.front() == asset( 120, lpa_id ) );
786786
BOOST_REQUIRE_EQUAL( result.fees.size(), 0u );
787787

788-
expected_pool_balance_a = 1000;
789-
expected_pool_balance_b = 1200;
790-
expected_lp_supply = 1200;
788+
expected_pool_balance_a = 100;
789+
expected_pool_balance_b = 120;
790+
expected_lp_supply = 120;
791791
BOOST_CHECK_EQUAL( lpo.balance_a.value, expected_pool_balance_a);
792792
BOOST_CHECK_EQUAL( lpo.balance_b.value, expected_pool_balance_b);
793793
BOOST_CHECK( lpo.virtual_value == fc::uint128_t(expected_pool_balance_a) * expected_pool_balance_b );
794794
BOOST_CHECK_EQUAL( lpa.dynamic_data(db).current_supply.value, expected_lp_supply );
795795

796-
expected_balance_sam_eur -= 1000;
797-
expected_balance_sam_usd -= 1200;
798-
expected_balance_sam_lpa += 1200;
796+
expected_balance_sam_eur -= 100;
797+
expected_balance_sam_usd -= 120;
798+
expected_balance_sam_lpa += 120;
799+
check_balances();
800+
801+
// Deposit again with 900 EUR and 3000 USD, the pool only takes 900 EUR and 1080 USD
802+
result = deposit_to_liquidity_pool( sam_id, lp_id, asset( 900, eur_id ), asset( 3000, usd_id ) );
803+
804+
BOOST_REQUIRE_EQUAL( result.paid.size(), 2u );
805+
BOOST_CHECK( result.paid.front() == asset( 900, eur_id ) );
806+
BOOST_CHECK( result.paid.back() == asset( 1080, usd_id ) );
807+
BOOST_REQUIRE_EQUAL( result.received.size(), 1u );
808+
BOOST_CHECK( result.received.front() == asset( 1080, lpa_id ) );
809+
BOOST_REQUIRE_EQUAL( result.fees.size(), 0u );
810+
811+
expected_pool_balance_a += 900;
812+
expected_pool_balance_b += 1080;
813+
expected_lp_supply += 1080;
814+
BOOST_CHECK_EQUAL( lpo.balance_a.value, expected_pool_balance_a);
815+
BOOST_CHECK_EQUAL( lpo.balance_b.value, expected_pool_balance_b);
816+
BOOST_CHECK( lpo.virtual_value == fc::uint128_t(expected_pool_balance_a) * expected_pool_balance_b );
817+
BOOST_CHECK_EQUAL( lpa.dynamic_data(db).current_supply.value, expected_lp_supply );
818+
819+
expected_balance_sam_eur -= 900;
820+
expected_balance_sam_usd -= 1080;
821+
expected_balance_sam_lpa += 1080;
799822
check_balances();
800823

824+
801825
// Unable to exchange if data is invalid
802826
// non-positive amounts
803827
for( int64_t i = -1; i <= 1; ++i )
@@ -938,6 +962,9 @@ BOOST_AUTO_TEST_CASE( liquidity_pool_exchange_test )
938962
expected_balance_ted_usd -= 1000;
939963
check_balances();
940964

965+
// Withdraw
966+
result = withdraw_from_liquidity_pool( sam_id, lp_id, asset( 1000, lpa_id) );
967+
941968
// Generates a block
942969
generate_block();
943970
BOOST_CHECK_EQUAL( eur_id(db).dynamic_data(db).accumulated_fees.value, expected_accumulated_fees_eur );
@@ -948,6 +975,16 @@ BOOST_AUTO_TEST_CASE( liquidity_pool_exchange_test )
948975
BOOST_CHECK_EQUAL( ticker.total_exchange_a2b_count, 1u );
949976
BOOST_CHECK_EQUAL( ticker._24h_exchange_b2a_count, 1u );
950977
BOOST_CHECK_EQUAL( ticker.total_exchange_b2a_count, 1u );
978+
BOOST_CHECK_EQUAL( ticker._24h_deposit_count, 2u );
979+
BOOST_CHECK( ticker._24h_deposit_amount_a == 1000u );
980+
BOOST_CHECK( ticker._24h_deposit_amount_b == 1200u );
981+
BOOST_CHECK( ticker._24h_deposit_share_amount == 1200u );
982+
BOOST_CHECK_EQUAL( ticker.total_deposit_count, 2u );
983+
BOOST_CHECK( ticker.total_deposit_amount_a == 1000u );
984+
BOOST_CHECK( ticker.total_deposit_amount_b == 1200u );
985+
BOOST_CHECK( ticker.total_deposit_share_amount == 1200u );
986+
BOOST_CHECK_EQUAL( ticker._24h_withdrawal_count, 1u );
987+
BOOST_CHECK_EQUAL( ticker.total_withdrawal_count, 1u );
951988

952989
// Check database API
953990
graphene::app::database_api db_api( db, &( app.get_options() ) );
@@ -968,29 +1005,49 @@ BOOST_AUTO_TEST_CASE( liquidity_pool_exchange_test )
9681005
BOOST_CHECK_EQUAL( pools.front()->statistics->total_exchange_a2b_count, 1u );
9691006
BOOST_CHECK_EQUAL( pools.front()->statistics->_24h_exchange_b2a_count, 1u );
9701007
BOOST_CHECK_EQUAL( pools.front()->statistics->total_exchange_b2a_count, 1u );
1008+
BOOST_CHECK_EQUAL( pools.front()->statistics->_24h_deposit_count, 2u );
1009+
BOOST_CHECK( pools.front()->statistics->_24h_deposit_amount_a == 1000u );
1010+
BOOST_CHECK( pools.front()->statistics->_24h_deposit_amount_b == 1200u );
1011+
BOOST_CHECK( pools.front()->statistics->_24h_deposit_share_amount == 1200u );
1012+
BOOST_CHECK_EQUAL( pools.front()->statistics->total_deposit_count, 2u );
1013+
BOOST_CHECK( pools.front()->statistics->total_deposit_amount_a == 1000u );
1014+
BOOST_CHECK( pools.front()->statistics->total_deposit_amount_b == 1200u );
1015+
BOOST_CHECK( pools.front()->statistics->total_deposit_share_amount == 1200u );
1016+
BOOST_CHECK_EQUAL( pools.front()->statistics->_24h_withdrawal_count, 1u );
1017+
BOOST_CHECK_EQUAL( pools.front()->statistics->total_withdrawal_count, 1u );
9711018

9721019
generate_blocks( db.head_block_time() + fc::days(2) );
9731020

9741021
BOOST_CHECK_EQUAL( ticker._24h_exchange_a2b_count, 0u );
9751022
BOOST_CHECK_EQUAL( ticker.total_exchange_a2b_count, 1u );
9761023
BOOST_CHECK_EQUAL( ticker._24h_exchange_b2a_count, 0u );
9771024
BOOST_CHECK_EQUAL( ticker.total_exchange_b2a_count, 1u );
1025+
BOOST_CHECK_EQUAL( ticker._24h_deposit_count, 0u );
1026+
BOOST_CHECK( ticker._24h_deposit_amount_a == 0u );
1027+
BOOST_CHECK( ticker._24h_deposit_amount_b == 0u );
1028+
BOOST_CHECK( ticker._24h_deposit_share_amount == 0u );
1029+
BOOST_CHECK_EQUAL( ticker.total_deposit_count, 2u );
1030+
BOOST_CHECK( ticker.total_deposit_amount_a == 1000u );
1031+
BOOST_CHECK( ticker.total_deposit_amount_b == 1200u );
1032+
BOOST_CHECK( ticker.total_deposit_share_amount == 1200u );
1033+
BOOST_CHECK_EQUAL( ticker._24h_withdrawal_count, 0u );
1034+
BOOST_CHECK_EQUAL( ticker.total_withdrawal_count, 1u );
9781035

9791036
// Check history API
9801037
graphene::app::history_api hist_api(app);
9811038
auto head_time = db.head_block_time();
9821039

983-
// all histories
1040+
// all histories : 1:create, 2:deposit, 3:deposit, 4:exchange, 5:exchange, 6:withdrawal
9841041
auto histories = hist_api.get_liquidity_pool_history( lp_id );
985-
BOOST_CHECK_EQUAL( histories.size(), 4u );
1042+
BOOST_CHECK_EQUAL( histories.size(), 6u );
9861043

9871044
// limit = 3
9881045
histories = hist_api.get_liquidity_pool_history( lp_id, {}, {}, 3 );
9891046
BOOST_CHECK_EQUAL( histories.size(), 3u );
9901047

9911048
// only deposits
992-
histories = hist_api.get_liquidity_pool_history( lp_id, {}, {}, {}, 59 );
993-
BOOST_CHECK_EQUAL( histories.size(), 1u );
1049+
histories = hist_api.get_liquidity_pool_history( lp_id, {}, {}, {}, 61 );
1050+
BOOST_CHECK_EQUAL( histories.size(), 2u );
9941051

9951052
// time too early
9961053
histories = hist_api.get_liquidity_pool_history( lp_id, head_time - fc::days(3) );
@@ -1004,16 +1061,17 @@ BOOST_AUTO_TEST_CASE( liquidity_pool_exchange_test )
10041061
histories = hist_api.get_liquidity_pool_history( lp_id, {}, head_time - fc::days(3), {}, 63 );
10051062
BOOST_CHECK_EQUAL( histories.size(), 2u );
10061063

1007-
// start = 2, limit = 3, so result sequence == {1,2}
1064+
// start = 2, limit = 3, so result sequence == {2,1}
1065+
// note: range is (stop, start]
10081066
histories = hist_api.get_liquidity_pool_history_by_sequence( lp_id, 2, {}, 3 );
10091067
BOOST_CHECK_EQUAL( histories.size(), 2u );
10101068

10111069
// start = 2, limit = 1, so result sequence == {2}
10121070
histories = hist_api.get_liquidity_pool_history_by_sequence( lp_id, 2, {}, 1 );
10131071
BOOST_CHECK_EQUAL( histories.size(), 1u );
10141072

1015-
// start = 3, limit is default, but exchange only, so result sequence == {3}
1016-
histories = hist_api.get_liquidity_pool_history_by_sequence( lp_id, 3, head_time - fc::days(3), {}, 63 );
1073+
// start = 4, limit is default, but exchange only, so result sequence == {4}
1074+
histories = hist_api.get_liquidity_pool_history_by_sequence( lp_id, 4, head_time - fc::days(3), {}, 63 );
10171075
BOOST_CHECK_EQUAL( histories.size(), 1u );
10181076

10191077
// Proceeds to the hard fork time that added white/blacklist checks for bitshares-core issue #2350

0 commit comments

Comments
 (0)