Compare commits
13 commits
master
...
feature/SO
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
083309d52d | ||
|
|
f2ed8e9901 | ||
|
|
a66f043351 | ||
|
|
fd82a38bb4 | ||
|
|
588c422bbf | ||
|
|
1636bad78f | ||
|
|
59369bbca1 | ||
|
|
d773dcb100 | ||
|
|
1c8b079d51 | ||
|
|
6f20567b9a | ||
|
|
a4a8fa4263 | ||
|
|
64095e4861 | ||
|
|
4011068430 |
7 changed files with 46 additions and 8 deletions
|
|
@ -110,6 +110,8 @@ void_result account_create_evaluator::do_evaluate( const account_create_operatio
|
||||||
}
|
}
|
||||||
if( d.head_block_time() < HARDFORK_999_TIME )
|
if( d.head_block_time() < HARDFORK_999_TIME )
|
||||||
FC_ASSERT( !op.extensions.value.affiliate_distributions.valid(), "Affiliate reward distributions not allowed yet" );
|
FC_ASSERT( !op.extensions.value.affiliate_distributions.valid(), "Affiliate reward distributions not allowed yet" );
|
||||||
|
if (d.head_block_time() < HARDFORK_SON_TIME)
|
||||||
|
FC_ASSERT(op.name != "son-account", "Son account creation before SON hardfork");
|
||||||
|
|
||||||
FC_ASSERT( fee_paying_account->is_lifetime_member(), "Only Lifetime members may register an account." );
|
FC_ASSERT( fee_paying_account->is_lifetime_member(), "Only Lifetime members may register an account." );
|
||||||
FC_ASSERT( op.referrer(d).is_member(d.head_block_time()), "The referrer must be either a lifetime or annual subscriber." );
|
FC_ASSERT( op.referrer(d).is_member(d.head_block_time()), "The referrer must be either a lifetime or annual subscriber." );
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,9 @@ void_result asset_create_evaluator::do_evaluate( const asset_create_operation& o
|
||||||
|
|
||||||
database& d = db();
|
database& d = db();
|
||||||
|
|
||||||
|
if (d.head_block_time() < HARDFORK_SON_TIME)
|
||||||
|
FC_ASSERT(op.symbol != "BTC", "BTC asset creation before SON hardfork");
|
||||||
|
|
||||||
const auto& chain_parameters = d.get_global_properties().parameters;
|
const auto& chain_parameters = d.get_global_properties().parameters;
|
||||||
FC_ASSERT( op.common_options.whitelist_authorities.size() <= chain_parameters.maximum_asset_whitelist_authorities );
|
FC_ASSERT( op.common_options.whitelist_authorities.size() <= chain_parameters.maximum_asset_whitelist_authorities );
|
||||||
FC_ASSERT( op.common_options.blacklist_authorities.size() <= chain_parameters.maximum_asset_whitelist_authorities );
|
FC_ASSERT( op.common_options.blacklist_authorities.size() <= chain_parameters.maximum_asset_whitelist_authorities );
|
||||||
|
|
|
||||||
|
|
@ -1856,12 +1856,40 @@ void perform_son_tasks(database& db)
|
||||||
a.lifetime_referrer_fee_percentage = GRAPHENE_100_PERCENT - GRAPHENE_DEFAULT_NETWORK_PERCENT_OF_FEE;
|
a.lifetime_referrer_fee_percentage = GRAPHENE_100_PERCENT - GRAPHENE_DEFAULT_NETWORK_PERCENT_OF_FEE;
|
||||||
});
|
});
|
||||||
|
|
||||||
db.modify( gpo, [&]( global_property_object& gpo ) {
|
db.modify( gpo, [&son_account]( global_property_object& gpo ) {
|
||||||
gpo.parameters.extensions.value.son_account = son_account.get_id();
|
gpo.parameters.extensions.value.son_account = son_account.get_id();
|
||||||
if( gpo.pending_parameters )
|
if( gpo.pending_parameters )
|
||||||
gpo.pending_parameters->extensions.value.son_account = son_account.get_id();
|
gpo.pending_parameters->extensions.value.son_account = son_account.get_id();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// create BTC asset here because son_account is the issuer of the BTC
|
||||||
|
if (gpo.parameters.btc_asset() == asset_id_type() && db.head_block_time() >= HARDFORK_SON_TIME)
|
||||||
|
{
|
||||||
|
const asset_dynamic_data_object& dyn_asset =
|
||||||
|
db.create<asset_dynamic_data_object>([](asset_dynamic_data_object& a) {
|
||||||
|
a.current_supply = 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
const asset_object& btc_asset =
|
||||||
|
db.create<asset_object>( [&gpo, &dyn_asset]( asset_object& a ) {
|
||||||
|
a.symbol = "BTC";
|
||||||
|
a.options.max_supply = GRAPHENE_MAX_SHARE_SUPPLY;
|
||||||
|
a.precision = 8;
|
||||||
|
a.options.flags = 0;
|
||||||
|
a.options.issuer_permissions = 0;
|
||||||
|
a.issuer = gpo.parameters.son_account();
|
||||||
|
a.options.core_exchange_rate.base.amount = 1;
|
||||||
|
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 = asset_id_type(0);
|
||||||
|
a.dynamic_asset_data_id = dyn_asset.id;
|
||||||
|
});
|
||||||
|
db.modify( gpo, [&btc_asset]( global_property_object& gpo ) {
|
||||||
|
gpo.parameters.extensions.value.btc_asset = btc_asset.get_id();
|
||||||
|
if( gpo.pending_parameters )
|
||||||
|
gpo.pending_parameters->extensions.value.btc_asset = btc_asset.get_id();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void database::perform_chain_maintenance(const signed_block& next_block, const global_property_object& global_props)
|
void database::perform_chain_maintenance(const signed_block& next_block, const global_property_object& global_props)
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ namespace graphene { namespace chain {
|
||||||
optional < uint32_t > son_heartbeat_frequency;
|
optional < uint32_t > son_heartbeat_frequency;
|
||||||
optional < uint32_t > son_down_time;
|
optional < uint32_t > son_down_time;
|
||||||
optional < account_id_type > son_account;
|
optional < account_id_type > son_account;
|
||||||
|
optional < asset_id_type > btc_asset;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct chain_parameters
|
struct chain_parameters
|
||||||
|
|
@ -174,6 +175,9 @@ namespace graphene { namespace chain {
|
||||||
inline account_id_type son_account() const {
|
inline account_id_type son_account() const {
|
||||||
return extensions.value.son_account.valid() ? *extensions.value.son_account : GRAPHENE_NULL_ACCOUNT;
|
return extensions.value.son_account.valid() ? *extensions.value.son_account : GRAPHENE_NULL_ACCOUNT;
|
||||||
}
|
}
|
||||||
|
inline asset_id_type btc_asset() const {
|
||||||
|
return extensions.value.btc_asset.valid() ? *extensions.value.btc_asset : asset_id_type();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} } // graphene::chain
|
} } // graphene::chain
|
||||||
|
|
@ -199,6 +203,7 @@ FC_REFLECT( graphene::chain::parameter_extension,
|
||||||
(son_heartbeat_frequency)
|
(son_heartbeat_frequency)
|
||||||
(son_down_time)
|
(son_down_time)
|
||||||
(son_account)
|
(son_account)
|
||||||
|
(btc_asset)
|
||||||
)
|
)
|
||||||
|
|
||||||
FC_REFLECT( graphene::chain::chain_parameters,
|
FC_REFLECT( graphene::chain::chain_parameters,
|
||||||
|
|
|
||||||
|
|
@ -231,7 +231,7 @@ BOOST_AUTO_TEST_CASE(elasticsearch_history_api) {
|
||||||
create_bitasset("USD", account_id_type()); // create op 0
|
create_bitasset("USD", account_id_type()); // create op 0
|
||||||
const account_object& dan = create_account("dan"); // create op 1
|
const account_object& dan = create_account("dan"); // create op 1
|
||||||
create_bitasset("CNY", dan.id); // create op 2
|
create_bitasset("CNY", dan.id); // create op 2
|
||||||
create_bitasset("BTC", account_id_type()); // create op 3
|
create_bitasset("BTCTEST", account_id_type()); // create op 3
|
||||||
create_bitasset("XMR", dan.id); // create op 4
|
create_bitasset("XMR", dan.id); // create op 4
|
||||||
create_bitasset("EUR", account_id_type()); // create op 5
|
create_bitasset("EUR", account_id_type()); // create op 5
|
||||||
create_bitasset("OIL", dan.id); // create op 6
|
create_bitasset("OIL", dan.id); // create op 6
|
||||||
|
|
|
||||||
|
|
@ -289,7 +289,7 @@ BOOST_AUTO_TEST_CASE( affiliate_payout_helper_test )
|
||||||
{
|
{
|
||||||
ACTORS( (irene) );
|
ACTORS( (irene) );
|
||||||
|
|
||||||
const asset_id_type btc_id = create_user_issued_asset( "BTC", irene, 0 ).id;
|
const asset_id_type btc_id = create_user_issued_asset( "BTCTEST", irene, 0 ).id;
|
||||||
issue_uia( irene, asset( 100000, btc_id ) );
|
issue_uia( irene, asset( 100000, btc_id ) );
|
||||||
|
|
||||||
affiliate_test_helper ath( *this );
|
affiliate_test_helper ath( *this );
|
||||||
|
|
@ -517,7 +517,7 @@ BOOST_AUTO_TEST_CASE( bookie_payout_test )
|
||||||
{ try {
|
{ try {
|
||||||
ACTORS( (irene) );
|
ACTORS( (irene) );
|
||||||
|
|
||||||
const asset_id_type btc_id = create_user_issued_asset( "BTC", irene, 0 ).id;
|
const asset_id_type btc_id = create_user_issued_asset( "BTCTEST", irene, 0 ).id;
|
||||||
|
|
||||||
affiliate_test_helper ath( *this );
|
affiliate_test_helper ath( *this );
|
||||||
|
|
||||||
|
|
@ -616,7 +616,7 @@ BOOST_AUTO_TEST_CASE( statistics_test )
|
||||||
|
|
||||||
INVOKE(bookie_payout_test);
|
INVOKE(bookie_payout_test);
|
||||||
|
|
||||||
const asset_id_type btc_id = get_asset( "BTC" ).id;
|
const asset_id_type btc_id = get_asset( "BTCTEST" ).id;
|
||||||
|
|
||||||
transfer( ath.alice_id, ath.ann_id, asset( 100, btc_id ), asset(0) );
|
transfer( ath.alice_id, ath.ann_id, asset( 100, btc_id ), asset(0) );
|
||||||
transfer( ath.alice_id, ath.audrey_id, asset( 100, btc_id ), asset(0) );
|
transfer( ath.alice_id, ath.audrey_id, asset( 100, btc_id ), asset(0) );
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ BOOST_AUTO_TEST_CASE(get_account_history_additional) {
|
||||||
const account_object& dan = create_account("dan"); // create op 1
|
const account_object& dan = create_account("dan"); // create op 1
|
||||||
|
|
||||||
create_bitasset("CNY", dan.id); // create op 2
|
create_bitasset("CNY", dan.id); // create op 2
|
||||||
create_bitasset("BTC", account_id_type()); // create op 3
|
create_bitasset("BTCTEST", account_id_type()); // create op 3
|
||||||
create_bitasset("XMR", dan.id); // create op 4
|
create_bitasset("XMR", dan.id); // create op 4
|
||||||
create_bitasset("EUR", account_id_type()); // create op 5
|
create_bitasset("EUR", account_id_type()); // create op 5
|
||||||
create_bitasset("OIL", dan.id); // create op 6
|
create_bitasset("OIL", dan.id); // create op 6
|
||||||
|
|
@ -454,7 +454,7 @@ BOOST_AUTO_TEST_CASE(track_account) {
|
||||||
BOOST_CHECK_EQUAL(histories[1].id.instance(), 3u);
|
BOOST_CHECK_EQUAL(histories[1].id.instance(), 3u);
|
||||||
|
|
||||||
// create more ops, starting with an untracked account
|
// create more ops, starting with an untracked account
|
||||||
create_bitasset( "BTC", account_id_type() );
|
create_bitasset( "BTCTEST", account_id_type() );
|
||||||
create_bitasset( "GBP", dan_id );
|
create_bitasset( "GBP", dan_id );
|
||||||
|
|
||||||
generate_block( ~database::skip_fork_db );
|
generate_block( ~database::skip_fork_db );
|
||||||
|
|
@ -468,7 +468,7 @@ BOOST_AUTO_TEST_CASE(track_account) {
|
||||||
db.pop_block();
|
db.pop_block();
|
||||||
|
|
||||||
// Try again, should result in same object IDs
|
// Try again, should result in same object IDs
|
||||||
create_bitasset( "BTC", account_id_type() );
|
create_bitasset( "BTCTEST", account_id_type() );
|
||||||
create_bitasset( "GBP", dan_id );
|
create_bitasset( "GBP", dan_id );
|
||||||
|
|
||||||
generate_block();
|
generate_block();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue