From 4011068430ca5b3fa2f591b6e7e2aef0b6adc8c0 Mon Sep 17 00:00:00 2001 From: gladcow Date: Sun, 29 Mar 2020 13:34:33 +0300 Subject: [PATCH] create PBTC asset --- libraries/chain/db_maint.cpp | 31 ++++++++++++++++++- .../chain/protocol/chain_parameters.hpp | 5 +++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/libraries/chain/db_maint.cpp b/libraries/chain/db_maint.cpp index 9c146ea9..f93386be 100644 --- a/libraries/chain/db_maint.cpp +++ b/libraries/chain/db_maint.cpp @@ -1853,12 +1853,41 @@ void perform_son_tasks(database& db) 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(); if( gpo.pending_parameters ) gpo.pending_parameters->extensions.value.son_account = son_account.get_id(); }); } + // create PBTC asset here because son_account is the issuer of the PBTC + if (gpo.parameters.btc_asset() == asset_id_type()) + { + // Create PBTC asset + const asset_dynamic_data_object& dyn_asset = + db.create([](asset_dynamic_data_object& a) { + a.current_supply = GRAPHENE_MAX_SHARE_SUPPLY; + }); + + const asset_object& btc_asset = + db.create( [&gpo, &dyn_asset]( asset_object& a ) { + a.symbol = "PBTC"; + a.options.max_supply = GRAPHENE_MAX_SHARE_SUPPLY; + a.precision = 8; + a.options.flags = 0; + a.options.issuer_permissions = 0; + a.issuer = *gpo.parameters.extensions.value.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) diff --git a/libraries/chain/include/graphene/chain/protocol/chain_parameters.hpp b/libraries/chain/include/graphene/chain/protocol/chain_parameters.hpp index 2c5c979a..0618dc3f 100644 --- a/libraries/chain/include/graphene/chain/protocol/chain_parameters.hpp +++ b/libraries/chain/include/graphene/chain/protocol/chain_parameters.hpp @@ -59,6 +59,7 @@ namespace graphene { namespace chain { optional < uint32_t > son_heartbeat_frequency; optional < uint32_t > son_down_time; optional < account_id_type > son_account; + optional < asset_id_type > btc_asset; }; struct chain_parameters @@ -178,6 +179,9 @@ namespace graphene { namespace chain { inline account_id_type son_account() const { 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 @@ -204,6 +208,7 @@ FC_REFLECT( graphene::chain::parameter_extension, (son_heartbeat_frequency) (son_down_time) (son_account) + (btc_asset) ) FC_REFLECT( graphene::chain::chain_parameters,