Some renaming to follow existing naming convention, code cleanup
This commit is contained in:
parent
3b167ffd03
commit
7b6562ec85
13 changed files with 129 additions and 133 deletions
6
.gitmodules
vendored
6
.gitmodules
vendored
|
|
@ -3,6 +3,6 @@
|
||||||
url = https://github.com/bitshares/bitshares-core.wiki.git
|
url = https://github.com/bitshares/bitshares-core.wiki.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "libraries/fc"]
|
[submodule "libraries/fc"]
|
||||||
path = libraries/fc
|
path = libraries/fc
|
||||||
url = https://github.com/PBSA/peerplays-fc.git
|
url = https://github.com/PBSA/peerplays-fc.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
|
|
|
||||||
|
|
@ -441,7 +441,7 @@ namespace graphene { namespace app {
|
||||||
} case son_object_type:{
|
} case son_object_type:{
|
||||||
const auto& aobj = dynamic_cast<const son_object*>(obj);
|
const auto& aobj = dynamic_cast<const son_object*>(obj);
|
||||||
assert( aobj != nullptr );
|
assert( aobj != nullptr );
|
||||||
accounts.insert( aobj->son_member_account );
|
accounts.insert( aobj->son_account );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case sport_object_type:
|
case sport_object_type:
|
||||||
|
|
|
||||||
|
|
@ -1736,13 +1736,13 @@ map<string, son_id_type> database_api_impl::lookup_son_accounts(const string& lo
|
||||||
const auto& sons_by_id = _db.get_index_type<son_index>().indices().get<by_id>();
|
const auto& sons_by_id = _db.get_index_type<son_index>().indices().get<by_id>();
|
||||||
|
|
||||||
// we want to order sons by account name, but that name is in the account object
|
// we want to order sons by account name, but that name is in the account object
|
||||||
// so the son_member_index doesn't have a quick way to access it.
|
// so the son_index doesn't have a quick way to access it.
|
||||||
// get all the names and look them all up, sort them, then figure out what
|
// get all the names and look them all up, sort them, then figure out what
|
||||||
// records to return. This could be optimized, but we expect the
|
// records to return. This could be optimized, but we expect the
|
||||||
// number of witnesses to be few and the frequency of calls to be rare
|
// number of witnesses to be few and the frequency of calls to be rare
|
||||||
std::map<std::string, son_id_type> sons_by_account_name;
|
std::map<std::string, son_id_type> sons_by_account_name;
|
||||||
for (const son_object& son : sons_by_id)
|
for (const son_object& son : sons_by_id)
|
||||||
if (auto account_iter = _db.find(son.son_member_account))
|
if (auto account_iter = _db.find(son.son_account))
|
||||||
if (account_iter->name >= lower_bound_name) // we can ignore anything below lower_bound_name
|
if (account_iter->name >= lower_bound_name) // we can ignore anything below lower_bound_name
|
||||||
sons_by_account_name.insert(std::make_pair(account_iter->name, son.id));
|
sons_by_account_name.insert(std::make_pair(account_iter->name, son.id));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -262,10 +262,8 @@ void database::initialize_indexes()
|
||||||
acnt_index->add_secondary_index<account_referrer_index>();
|
acnt_index->add_secondary_index<account_referrer_index>();
|
||||||
|
|
||||||
add_index< primary_index<committee_member_index, 8> >(); // 256 members per chunk
|
add_index< primary_index<committee_member_index, 8> >(); // 256 members per chunk
|
||||||
|
add_index< primary_index<son_index, 8> >(); // 256 sons per chunk
|
||||||
add_index< primary_index<witness_index, 10> >(); // 1024 witnesses per chunk
|
add_index< primary_index<witness_index, 10> >(); // 1024 witnesses per chunk
|
||||||
add_index< primary_index<committee_member_index> >();
|
|
||||||
add_index< primary_index<son_index> >();
|
|
||||||
add_index< primary_index<witness_index> >();
|
|
||||||
add_index< primary_index<limit_order_index > >();
|
add_index< primary_index<limit_order_index > >();
|
||||||
add_index< primary_index<call_order_index > >();
|
add_index< primary_index<call_order_index > >();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -253,7 +253,7 @@ void database::update_active_witnesses()
|
||||||
void database::update_active_committee_members()
|
void database::update_active_committee_members()
|
||||||
{ try {
|
{ try {
|
||||||
assert( _committee_count_histogram_buffer.size() > 0 );
|
assert( _committee_count_histogram_buffer.size() > 0 );
|
||||||
share_type stake_target = (_total_voting_stake-_witness_count_histogram_buffer[0]) / 2;
|
share_type stake_target = (_total_voting_stake-_committee_count_histogram_buffer[0]) / 2;
|
||||||
|
|
||||||
/// accounts that vote for 0 or 1 witness do not get to express an opinion on
|
/// accounts that vote for 0 or 1 witness do not get to express an opinion on
|
||||||
/// the number of witnesses to have (they abstain and are non-voting accounts)
|
/// the number of witnesses to have (they abstain and are non-voting accounts)
|
||||||
|
|
@ -329,7 +329,7 @@ void database::update_active_committee_members()
|
||||||
void database::update_active_sons()
|
void database::update_active_sons()
|
||||||
{ try {
|
{ try {
|
||||||
assert( _son_count_histogram_buffer.size() > 0 );
|
assert( _son_count_histogram_buffer.size() > 0 );
|
||||||
share_type stake_target = (_total_voting_stake-_witness_count_histogram_buffer[0]) / 2;
|
share_type stake_target = (_total_voting_stake-_son_count_histogram_buffer[0]) / 2;
|
||||||
|
|
||||||
/// accounts that vote for 0 or 1 son do not get to express an opinion on
|
/// accounts that vote for 0 or 1 son do not get to express an opinion on
|
||||||
/// the number of sons to have (they abstain and are non-voting accounts)
|
/// the number of sons to have (they abstain and are non-voting accounts)
|
||||||
|
|
@ -372,7 +372,7 @@ void database::update_active_sons()
|
||||||
|
|
||||||
for( const son_object& son : sons )
|
for( const son_object& son : sons )
|
||||||
{
|
{
|
||||||
weights.emplace(son.son_member_account, _vote_tally_buffer[son.vote_id]);
|
weights.emplace(son.son_account, _vote_tally_buffer[son.vote_id]);
|
||||||
total_votes += _vote_tally_buffer[son.vote_id];
|
total_votes += _vote_tally_buffer[son.vote_id];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -394,7 +394,7 @@ void database::update_active_sons()
|
||||||
{
|
{
|
||||||
vote_counter vc;
|
vote_counter vc;
|
||||||
for( const son_object& son : sons )
|
for( const son_object& son : sons )
|
||||||
vc.add( son.son_member_account, std::max(_vote_tally_buffer[son.vote_id], UINT64_C(1)) );
|
vc.add( son.son_account, std::max(_vote_tally_buffer[son.vote_id], UINT64_C(1)) );
|
||||||
vc.finish( a.active );
|
vc.finish( a.active );
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
|
||||||
|
|
@ -384,7 +384,7 @@ void get_relevant_accounts( const object* obj, flat_set<account_id_type>& accoun
|
||||||
} case son_object_type:{
|
} case son_object_type:{
|
||||||
const auto& aobj = dynamic_cast<const son_object*>(obj);
|
const auto& aobj = dynamic_cast<const son_object*>(obj);
|
||||||
assert( aobj != nullptr );
|
assert( aobj != nullptr );
|
||||||
accounts.insert( aobj->son_member_account );
|
accounts.insert( aobj->son_account );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
// SON HARDFORK Monday, September 21, 2020 1:43:11 PM
|
// SON HARDFORK Monday, September 21, 2020 1:43:11 PM
|
||||||
#ifndef HARDFORK_SON_TIME
|
#ifndef HARDFORK_SON_TIME
|
||||||
#define HARDFORK_SON_TIME (fc::time_point_sec( 1000000000 ))
|
#include <ctime>
|
||||||
|
#define HARDFORK_SON_TIME (fc::time_point_sec( time(NULL) - (60 * 60) ))
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -8,7 +8,7 @@ namespace graphene { namespace chain {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class son_object
|
* @class son_object
|
||||||
* @brief tracks information about a son_member account.
|
* @brief tracks information about a SON account.
|
||||||
* @ingroup object
|
* @ingroup object
|
||||||
*/
|
*/
|
||||||
class son_object : public abstract_object<son_object>
|
class son_object : public abstract_object<son_object>
|
||||||
|
|
@ -17,7 +17,7 @@ namespace graphene { namespace chain {
|
||||||
static const uint8_t space_id = protocol_ids;
|
static const uint8_t space_id = protocol_ids;
|
||||||
static const uint8_t type_id = son_object_type;
|
static const uint8_t type_id = son_object_type;
|
||||||
|
|
||||||
account_id_type son_member_account;
|
account_id_type son_account;
|
||||||
vote_id_type vote_id;
|
vote_id_type vote_id;
|
||||||
uint64_t total_votes = 0;
|
uint64_t total_votes = 0;
|
||||||
string url;
|
string url;
|
||||||
|
|
@ -28,22 +28,22 @@ namespace graphene { namespace chain {
|
||||||
|
|
||||||
struct by_account;
|
struct by_account;
|
||||||
struct by_vote_id;
|
struct by_vote_id;
|
||||||
using son_member_multi_index_type = multi_index_container<
|
using son_multi_index_type = multi_index_container<
|
||||||
son_object,
|
son_object,
|
||||||
indexed_by<
|
indexed_by<
|
||||||
ordered_unique< tag<by_id>,
|
ordered_unique< tag<by_id>,
|
||||||
member<object, object_id_type, &object::id>
|
member<object, object_id_type, &object::id>
|
||||||
>,
|
>,
|
||||||
ordered_unique< tag<by_account>,
|
ordered_unique< tag<by_account>,
|
||||||
member<son_object, account_id_type, &son_object::son_member_account>
|
member<son_object, account_id_type, &son_object::son_account>
|
||||||
>,
|
>,
|
||||||
ordered_unique< tag<by_vote_id>,
|
ordered_unique< tag<by_vote_id>,
|
||||||
member<son_object, vote_id_type, &son_object::vote_id>
|
member<son_object, vote_id_type, &son_object::vote_id>
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
>;
|
>;
|
||||||
using son_index = generic_index<son_object, son_member_multi_index_type>;
|
using son_index = generic_index<son_object, son_multi_index_type>;
|
||||||
} } // graphene::chain
|
} } // graphene::chain
|
||||||
|
|
||||||
FC_REFLECT_DERIVED( graphene::chain::son_object, (graphene::db::object),
|
FC_REFLECT_DERIVED( graphene::chain::son_object, (graphene::db::object),
|
||||||
(son_member_account)(vote_id)(total_votes)(url)(deposit)(signing_key)(pay_vb) )
|
(son_account)(vote_id)(total_votes)(url)(deposit)(signing_key)(pay_vb) )
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ object_id_type create_son_evaluator::do_apply(const son_create_operation& op)
|
||||||
});
|
});
|
||||||
|
|
||||||
const auto& new_son_object = db().create<son_object>( [&]( son_object& obj ){
|
const auto& new_son_object = db().create<son_object>( [&]( son_object& obj ){
|
||||||
obj.son_member_account = op.owner_account;
|
obj.son_account = op.owner_account;
|
||||||
obj.vote_id = vote_id;
|
obj.vote_id = vote_id;
|
||||||
obj.url = op.url;
|
obj.url = op.url;
|
||||||
obj.deposit = op.deposit;
|
obj.deposit = op.deposit;
|
||||||
|
|
@ -34,7 +34,7 @@ object_id_type create_son_evaluator::do_apply(const son_create_operation& op)
|
||||||
void_result update_son_evaluator::do_evaluate(const son_update_operation& op)
|
void_result update_son_evaluator::do_evaluate(const son_update_operation& op)
|
||||||
{ try {
|
{ try {
|
||||||
FC_ASSERT(db().head_block_time() >= HARDFORK_SON_TIME, "Not allowed until SON HARDFORK"); // can be removed after HF date pass
|
FC_ASSERT(db().head_block_time() >= HARDFORK_SON_TIME, "Not allowed until SON HARDFORK"); // can be removed after HF date pass
|
||||||
FC_ASSERT(db().get(op.son_id).son_member_account == op.owner_account);
|
FC_ASSERT(db().get(op.son_id).son_account == op.owner_account);
|
||||||
const auto& idx = db().get_index_type<son_index>().indices().get<by_id>();
|
const auto& idx = db().get_index_type<son_index>().indices().get<by_id>();
|
||||||
FC_ASSERT( idx.find(op.son_id) != idx.end() );
|
FC_ASSERT( idx.find(op.son_id) != idx.end() );
|
||||||
return void_result();
|
return void_result();
|
||||||
|
|
@ -59,7 +59,7 @@ object_id_type update_son_evaluator::do_apply(const son_update_operation& op)
|
||||||
void_result delete_son_evaluator::do_evaluate(const son_delete_operation& op)
|
void_result delete_son_evaluator::do_evaluate(const son_delete_operation& op)
|
||||||
{ try {
|
{ try {
|
||||||
FC_ASSERT(db().head_block_time() >= HARDFORK_SON_TIME, "Not allowed until SON_HARDFORK"); // can be removed after HF date pass
|
FC_ASSERT(db().head_block_time() >= HARDFORK_SON_TIME, "Not allowed until SON_HARDFORK"); // can be removed after HF date pass
|
||||||
FC_ASSERT(db().get(op.son_id).son_member_account == op.owner_account);
|
FC_ASSERT(db().get(op.son_id).son_account == op.owner_account);
|
||||||
const auto& idx = db().get_index_type<son_index>().indices().get<by_id>();
|
const auto& idx = db().get_index_type<son_index>().indices().get<by_id>();
|
||||||
FC_ASSERT( idx.find(op.son_id) != idx.end() );
|
FC_ASSERT( idx.find(op.son_id) != idx.end() );
|
||||||
return void_result();
|
return void_result();
|
||||||
|
|
|
||||||
|
|
@ -1466,25 +1466,25 @@ class wallet_api
|
||||||
bool approve,
|
bool approve,
|
||||||
bool broadcast = false);
|
bool broadcast = false);
|
||||||
|
|
||||||
/** Vote for a given son_member.
|
/** Vote for a given SON.
|
||||||
*
|
*
|
||||||
* An account can publish a list of all son_memberes they approve of. This
|
* An account can publish a list of all SONs they approve of. This
|
||||||
* command allows you to add or remove son_memberes from this list.
|
* command allows you to add or remove SONs from this list.
|
||||||
* Each account's vote is weighted according to the number of shares of the
|
* Each account's vote is weighted according to the number of shares of the
|
||||||
* core asset owned by that account at the time the votes are tallied.
|
* core asset owned by that account at the time the votes are tallied.
|
||||||
*
|
*
|
||||||
* @note you cannot vote against a son_member, you can only vote for the son_member
|
* @note you cannot vote against a SON, you can only vote for the SON
|
||||||
* or not vote for the son_member.
|
* or not vote for the SON.
|
||||||
*
|
*
|
||||||
* @param voting_account the name or id of the account who is voting with their shares
|
* @param voting_account the name or id of the account who is voting with their shares
|
||||||
* @param son_member the name or id of the son_member' owner account
|
* @param son the name or id of the SONs' owner account
|
||||||
* @param approve true if you wish to vote in favor of that son_member, false to
|
* @param approve true if you wish to vote in favor of that SON, false to
|
||||||
* remove your vote in favor of that son_member
|
* remove your vote in favor of that SON
|
||||||
* @param broadcast true if you wish to broadcast the transaction
|
* @param broadcast true if you wish to broadcast the transaction
|
||||||
* @return the signed transaction changing your vote for the given son_member
|
* @return the signed transaction changing your vote for the given SON
|
||||||
*/
|
*/
|
||||||
signed_transaction vote_for_son(string voting_account,
|
signed_transaction vote_for_son(string voting_account,
|
||||||
string son_member,
|
string son,
|
||||||
bool approve,
|
bool approve,
|
||||||
bool broadcast = false);
|
bool broadcast = false);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -701,11 +701,8 @@ public:
|
||||||
result["participation"] = (100*dynamic_props.recent_slots_filled.popcount()) / 128.0;
|
result["participation"] = (100*dynamic_props.recent_slots_filled.popcount()) / 128.0;
|
||||||
result["active_witnesses"] = fc::variant(global_props.active_witnesses, GRAPHENE_MAX_NESTED_OBJECTS);
|
result["active_witnesses"] = fc::variant(global_props.active_witnesses, GRAPHENE_MAX_NESTED_OBJECTS);
|
||||||
result["active_committee_members"] = fc::variant(global_props.active_committee_members, GRAPHENE_MAX_NESTED_OBJECTS);
|
result["active_committee_members"] = fc::variant(global_props.active_committee_members, GRAPHENE_MAX_NESTED_OBJECTS);
|
||||||
|
result["active_sons"] = fc::variant(global_props.active_sons, GRAPHENE_MAX_NESTED_OBJECTS);
|
||||||
result["entropy"] = fc::variant(dynamic_props.random, GRAPHENE_MAX_NESTED_OBJECTS);
|
result["entropy"] = fc::variant(dynamic_props.random, GRAPHENE_MAX_NESTED_OBJECTS);
|
||||||
result["active_witnesses"] = global_props.active_witnesses;
|
|
||||||
result["active_committee_members"] = global_props.active_committee_members;
|
|
||||||
result["active_sons"] = global_props.active_sons;
|
|
||||||
result["entropy"] = dynamic_props.random;
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1898,7 +1895,7 @@ public:
|
||||||
bool broadcast /* = false */)
|
bool broadcast /* = false */)
|
||||||
{ try {
|
{ try {
|
||||||
son_object son = get_son(owner_account);
|
son_object son = get_son(owner_account);
|
||||||
account_object son_account = get_account( son.son_member_account );
|
account_object son_account = get_account( son.son_account );
|
||||||
fc::ecc::private_key active_private_key = get_private_key_for_account(son_account);
|
fc::ecc::private_key active_private_key = get_private_key_for_account(son_account);
|
||||||
|
|
||||||
son_update_operation son_update_op;
|
son_update_operation son_update_op;
|
||||||
|
|
@ -1922,7 +1919,7 @@ public:
|
||||||
bool broadcast /* = false */)
|
bool broadcast /* = false */)
|
||||||
{ try {
|
{ try {
|
||||||
son_object son = get_son(owner_account);
|
son_object son = get_son(owner_account);
|
||||||
account_object son_account = get_account( son.son_member_account );
|
account_object son_account = get_account( son.son_account );
|
||||||
fc::ecc::private_key active_private_key = get_private_key_for_account(son_account);
|
fc::ecc::private_key active_private_key = get_private_key_for_account(son_account);
|
||||||
|
|
||||||
son_delete_operation son_delete_op;
|
son_delete_operation son_delete_op;
|
||||||
|
|
@ -2206,26 +2203,26 @@ public:
|
||||||
} FC_CAPTURE_AND_RETHROW( (voting_account)(committee_member)(approve)(broadcast) ) }
|
} FC_CAPTURE_AND_RETHROW( (voting_account)(committee_member)(approve)(broadcast) ) }
|
||||||
|
|
||||||
signed_transaction vote_for_son(string voting_account,
|
signed_transaction vote_for_son(string voting_account,
|
||||||
string son_member,
|
string son,
|
||||||
bool approve,
|
bool approve,
|
||||||
bool broadcast /* = false */)
|
bool broadcast /* = false */)
|
||||||
{ try {
|
{ try {
|
||||||
account_object voting_account_object = get_account(voting_account);
|
account_object voting_account_object = get_account(voting_account);
|
||||||
account_id_type son_member_owner_account_id = get_account_id(son_member);
|
account_id_type son_account_id = get_account_id(son);
|
||||||
fc::optional<son_object> son_member_obj = _remote_db->get_son_by_account(son_member_owner_account_id);
|
fc::optional<son_object> son_obj = _remote_db->get_son_by_account(son_account_id);
|
||||||
if (!son_member_obj)
|
if (!son_obj)
|
||||||
FC_THROW("Account ${son_member} is not registered as a son_member", ("son_member", son_member));
|
FC_THROW("Account ${son} is not registered as a son", ("son", son));
|
||||||
if (approve)
|
if (approve)
|
||||||
{
|
{
|
||||||
auto insert_result = voting_account_object.options.votes.insert(son_member_obj->vote_id);
|
auto insert_result = voting_account_object.options.votes.insert(son_obj->vote_id);
|
||||||
if (!insert_result.second)
|
if (!insert_result.second)
|
||||||
FC_THROW("Account ${account} was already voting for son_member ${son_member}", ("account", voting_account)("son_member", son_member));
|
FC_THROW("Account ${account} was already voting for son ${son}", ("account", voting_account)("son", son));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
unsigned votes_removed = voting_account_object.options.votes.erase(son_member_obj->vote_id);
|
unsigned votes_removed = voting_account_object.options.votes.erase(son_obj->vote_id);
|
||||||
if (!votes_removed)
|
if (!votes_removed)
|
||||||
FC_THROW("Account ${account} is already not voting for son_member ${son_member}", ("account", voting_account)("son_member", son_member));
|
FC_THROW("Account ${account} is already not voting for son ${son}", ("account", voting_account)("son", son));
|
||||||
}
|
}
|
||||||
account_update_operation account_update_op;
|
account_update_operation account_update_op;
|
||||||
account_update_op.account = voting_account_object.id;
|
account_update_op.account = voting_account_object.id;
|
||||||
|
|
@ -2237,7 +2234,7 @@ public:
|
||||||
tx.validate();
|
tx.validate();
|
||||||
|
|
||||||
return sign_transaction( tx, broadcast );
|
return sign_transaction( tx, broadcast );
|
||||||
} FC_CAPTURE_AND_RETHROW( (voting_account)(son_member)(approve)(broadcast) ) }
|
} FC_CAPTURE_AND_RETHROW( (voting_account)(son)(approve)(broadcast) ) }
|
||||||
|
|
||||||
signed_transaction update_son_votes(string voting_account,
|
signed_transaction update_son_votes(string voting_account,
|
||||||
std::vector<std::string> sons_to_approve,
|
std::vector<std::string> sons_to_approve,
|
||||||
|
|
@ -4331,11 +4328,11 @@ signed_transaction wallet_api::vote_for_committee_member(string voting_account,
|
||||||
}
|
}
|
||||||
|
|
||||||
signed_transaction wallet_api::vote_for_son(string voting_account,
|
signed_transaction wallet_api::vote_for_son(string voting_account,
|
||||||
string son_member,
|
string son,
|
||||||
bool approve,
|
bool approve,
|
||||||
bool broadcast /* = false */)
|
bool broadcast /* = false */)
|
||||||
{
|
{
|
||||||
return my->vote_for_son(voting_account, son_member, approve, broadcast);
|
return my->vote_for_son(voting_account, son, approve, broadcast);
|
||||||
}
|
}
|
||||||
|
|
||||||
signed_transaction wallet_api::update_son_votes(string voting_account,
|
signed_transaction wallet_api::update_son_votes(string voting_account,
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ try {
|
||||||
obj = idx.find( alice_id );
|
obj = idx.find( alice_id );
|
||||||
// not deleting
|
// not deleting
|
||||||
BOOST_REQUIRE( obj != idx.end() );
|
BOOST_REQUIRE( obj != idx.end() );
|
||||||
BOOST_CHECK( obj->son_member_account.instance == alice_id.instance);
|
BOOST_CHECK( obj->son_account.instance == alice_id.instance);
|
||||||
}
|
}
|
||||||
catch (fc::exception &e) {
|
catch (fc::exception &e) {
|
||||||
edump((e.to_detail_string()));
|
edump((e.to_detail_string()));
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue