Changed constant params to dynamic sidechain_parameters

This commit is contained in:
Alexander Suslikov 2019-02-07 11:14:03 +03:00 committed by Anzhy Cherrnyavski
parent 7c02821b84
commit 0eda7025c9
11 changed files with 39 additions and 31 deletions

View file

@ -26,7 +26,7 @@ object_id_type bitcoin_address_create_evaluator::do_apply( const bitcoin_address
witnesses_keys.emplace( d.get_sidechain_account_id(), pubkey_from_id( a.id ) );
a.owner = op.owner;
a.address = sidechain::btc_multisig_segwit_address(5, witnesses_keys);
a.address = sidechain::btc_multisig_segwit_address( SIDECHAIN_DEFAULT_NUMBER_SIG_MULTISIG, witnesses_keys );
a.count_invalid_pub_key = 1;
});

View file

@ -175,7 +175,7 @@ full_btc_transaction database::create_btc_transaction( const std::vector<info_fo
}
const uint64_t& size_fee = get_estimated_fee( ctx.get_estimate_tx_size( pw_address.witnesses_keys.size() ), estimated_feerate.load() );
ctx.subtract_fee( size_fee, SIDECHAIN_DEFAULT_PERCENTAGE_PAYMENT_TO_WIT );
ctx.subtract_fee( size_fee, get_sidechain_params().percent_payment_to_witnesses );
return std::make_pair( ctx.get_transaction(), size_fee );
}

View file

@ -15,7 +15,7 @@ class bitcoin_address_object : public abstract_object<bitcoin_address_object>
bitcoin_address_id_type get_id()const { return id; }
// multisig m-of-n (m = 5). Address is valid before count of changed witnesses < 5
bool valid() { return count_invalid_pub_key < 5; } // TODO: move to global_properties
bool valid() { return count_invalid_pub_key < SIDECHAIN_NUMBER_INVALID_KEYS; }
std::string get_address() const { return address.get_address(); }

View file

@ -232,11 +232,12 @@
#define SIDECHAIN_SYMBOL "pBTC"
#define SIDECHAIN_PRECISION_DIGITS 8
#define SIDECHAIN_MAX_SHARE_SUPPLY int64_t(21000000ll * 100000000ll)
#define SIDECHAIN_DEFAULT_NUMBER_UNCONFIRMED_VINS 25
#define SIDECHAIN_NUMBER_INVALID_KEYS 5
#define SIDECHAIN_DEFAULT_NUMBER_SIG_MULTISIG 5
#define SIDECHAIN_DEFAULT_NUMBER_OF_CONFIRMATIONS 6
#define SIDECHAIN_DEFAULT_CONDENSING_TX_VINS_NUMBER 5
#define SIDECHAIN_DEFAULT_CONDENSING_TX_VOUTS_NUMBER 5
#define SIDECHAIN_DEFAULT_PERCENTAGE_PAYMENT_TO_WIT 0.001
#define SIDECHAIN_DEFAULT_MAX_UNCONFIRMED_VINS 25
#define SIDECHAIN_DEFAULT_MAX_CONDENSING_TX_VINS 5
#define SIDECHAIN_DEFAULT_MAX_CONDENSING_TX_VOUTS 5
#define SIDECHAIN_DEFAULT_PERCENT_PAYMENT_TO_WITNESSES (GRAPHENE_1_PERCENT/10)
#define SIDECHAIN_NULL_VIN_IDENTIFIER "5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b4" // fc::sha256::hash( "" + std::to_string( 0 ) ) - ( 8 bytes )
//////////////////////////////////////////////////////////////////////

View file

@ -74,7 +74,7 @@ bool withdraw_pbtc_evaluator::check_amount_higher_than_fee( const withdraw_pbtc_
if( op.amount < mock_trx.second )
return false;
auto fee_for_witnesses = ( op.amount - mock_trx.second ) * SIDECHAIN_DEFAULT_PERCENTAGE_PAYMENT_TO_WIT;
uint64_t fee_for_witnesses = ( (op.amount - mock_trx.second) * d.get_sidechain_params().percent_payment_to_witnesses ) / GRAPHENE_100_PERCENT;
if( op.amount < mock_trx.second + fee_for_witnesses )
return false;

View file

@ -21,7 +21,7 @@ public:
uint64_t get_estimate_tx_size( size_t number_witness ) const;
void subtract_fee( const uint64_t& fee, const double& witness_percentage );
void subtract_fee( const uint64_t& fee, const uint16_t& witnesses_percentage );
bitcoin_transaction get_transaction() const { return tb.get_transaction(); }

View file

@ -5,10 +5,12 @@
namespace sidechain {
struct sidechain_parameters_extension {
uint8_t multisig_sigs_num = SIDECHAIN_DEFAULT_NUMBER_SIG_MULTISIG;
uint8_t condensing_tx_vins_num = SIDECHAIN_DEFAULT_CONDENSING_TX_VINS_NUMBER;
uint8_t condensing_tx_vouts_num = SIDECHAIN_DEFAULT_CONDENSING_TX_VOUTS_NUMBER;
uint8_t confirmations_num = SIDECHAIN_DEFAULT_NUMBER_OF_CONFIRMATIONS;
uint8_t maximum_condensing_tx_vins = SIDECHAIN_DEFAULT_MAX_CONDENSING_TX_VINS;
uint8_t maximum_condensing_tx_vouts = SIDECHAIN_DEFAULT_MAX_CONDENSING_TX_VOUTS;
uint8_t maxmum_unconfirmed_vins = SIDECHAIN_DEFAULT_MAX_UNCONFIRMED_VINS;
uint16_t percent_payment_to_witnesses = SIDECHAIN_DEFAULT_PERCENT_PAYMENT_TO_WITNESSES;
uint8_t multisig_sigs_num = SIDECHAIN_DEFAULT_NUMBER_SIG_MULTISIG;
uint8_t confirmations_num = SIDECHAIN_DEFAULT_NUMBER_OF_CONFIRMATIONS;
graphene::chain::account_id_type managing_account;
graphene::chain::asset_id_type asset_id;
@ -17,9 +19,11 @@ namespace sidechain {
}
FC_REFLECT( sidechain::sidechain_parameters_extension,
(maximum_condensing_tx_vins)
(maximum_condensing_tx_vouts)
(maxmum_unconfirmed_vins)
(percent_payment_to_witnesses)
(multisig_sigs_num)
(condensing_tx_vins_num)
(condensing_tx_vins_num)
(confirmations_num)
(managing_account)
(asset_id)

View file

@ -94,11 +94,12 @@ std::vector<info_for_vin> input_withdrawal_info::get_info_for_vins()
std::vector<info_for_vin> result;
const auto& addr_idx = db.get_index_type<bitcoin_address_index>().indices().get<by_address>();
const auto max_vins = db.get_sidechain_params().maximum_condensing_tx_vins;
info_for_vins.safe_for<by_id_and_not_used>( [&]( info_for_vin_index::index<by_id_and_not_used>::type::iterator itr_b,
info_for_vin_index::index<by_id_and_not_used>::type::iterator itr_e )
{
for( size_t i = 0; itr_b != itr_e && i < 5 && !itr_b->used; i++ ) { // 5 amount vins to bitcoin transaction
for( size_t i = 0; itr_b != itr_e && i < max_vins && !itr_b->used; i++ ) {
info_for_vin vin;
vin.identifier = itr_b->identifier;
vin.out.hash_tx = itr_b->out.hash_tx;
@ -173,8 +174,10 @@ std::vector<info_for_vout> input_withdrawal_info::get_info_for_vouts()
std::vector<info_for_vout> result;
const auto& info_for_vout_idx = db.get_index_type<graphene::chain::info_for_vout_index>().indices().get< graphene::chain::by_id_and_not_used >();
const auto max_vouts = db.get_sidechain_params().maximum_condensing_tx_vouts;
auto itr = info_for_vout_idx.begin();
for(size_t i = 0; i < 5 && itr != info_for_vout_idx.end() && !itr->used; i++) {
for(size_t i = 0; i < max_vouts && itr != info_for_vout_idx.end() && !itr->used; i++) {
result.push_back( *itr );
++itr;

View file

@ -9,7 +9,7 @@ namespace sidechain {
bool primary_wallet_vout_manager::is_reach_max_unconfirmaed_vout() const
{
const auto& PW_vout_idx = db.get_index_type<graphene::chain::primary_wallet_vout_index>().indices().get< graphene::chain::by_id >();
return !( PW_vout_idx.size() < SIDECHAIN_DEFAULT_NUMBER_UNCONFIRMED_VINS );
return !( PW_vout_idx.size() < db.get_sidechain_params().maxmum_unconfirmed_vins );
}
fc::optional< primary_wallet_vout_object > primary_wallet_vout_manager::get_latest_unused_vout() const

View file

@ -68,7 +68,7 @@ uint64_t sidechain_condensing_tx::get_estimate_tx_size( size_t number_witness )
return temp_tx.get_vsize();
}
void sidechain_condensing_tx::subtract_fee( const uint64_t& fee, const double& witness_percentage )
void sidechain_condensing_tx::subtract_fee( const uint64_t& fee, const uint16_t& witnesses_percentage )
{
bitcoin_transaction tx = get_transaction();
@ -86,7 +86,7 @@ void sidechain_condensing_tx::subtract_fee( const uint64_t& fee, const double& w
size_t offset = is_pw_vin ? 1 + count_witness_vout : count_witness_vout;
for( ; offset < tx.vout.size(); offset++ ) {
uint64_t amount_without_fee_size = tx.vout[offset].value - fee_size;
uint64_t amount_fee_witness = amount_without_fee_size * witness_percentage;
uint64_t amount_fee_witness = ( amount_without_fee_size * witnesses_percentage ) / GRAPHENE_100_PERCENT;
tx.vout[offset].value = amount_without_fee_size;
tx.vout[offset].value -= amount_fee_witness;
fee_witnesses += amount_fee_witness;

View file

@ -11,7 +11,7 @@ BOOST_AUTO_TEST_SUITE( sidechain_condensing_tx_tests )
uint64_t size_fee = 100;
uint64_t pw_vout_amount = 113;
double witness_percentage = 0.01;
double witness_percentage = SIDECHAIN_DEFAULT_PERCENT_PAYMENT_TO_WITNESSES;
void create_info_vins_and_info_vouts( std::vector<info_for_vin>& info_vins, std::vector<info_for_vout>& info_vouts )
{
@ -19,7 +19,7 @@ void create_info_vins_and_info_vouts( std::vector<info_for_vin>& info_vins, std:
info_for_vin vin;
vin.out.hash_tx = "1111111111111111111111111111111111111111111111111111111111111111";
vin.out.n_vout = static_cast<uint32_t>( i );
vin.out.amount = static_cast<uint64_t>( i + 1000 );
vin.out.amount = static_cast<uint64_t>( i + 10000 );
vin.address = std::to_string( i );
vin.script = { 0x0d };
info_vins.push_back( vin );
@ -27,7 +27,7 @@ void create_info_vins_and_info_vouts( std::vector<info_for_vin>& info_vins, std:
info_for_vout vout;
vout.payer = account_id_type( i );
vout.address = sidechain::bitcoin_address( "mipcBbFg9gMiCh81Kj8tqqdgoZub1ZJRfn" );
vout.amount = static_cast<uint64_t>( i + 1000 );
vout.amount = static_cast<uint64_t>( i + 10000 );
info_vouts.push_back( vout );
}
}
@ -71,7 +71,7 @@ BOOST_AUTO_TEST_CASE( create_sidechain_condensing_tx_test )
BOOST_CHECK( tx.vin[i].scriptSig == scriptSig );
BOOST_CHECK( tx.vin[i].scriptWitness == std::vector<bytes>() );
BOOST_CHECK( tx.vout[i].value == static_cast<int64_t>( i + 1000 ) );
BOOST_CHECK( tx.vout[i].value == static_cast<int64_t>( i + 10000 ) );
const auto address_bytes = fc::from_base58( "mipcBbFg9gMiCh81Kj8tqqdgoZub1ZJRfn" );
bytes raw_address( address_bytes.begin() + 1, address_bytes.begin() + 21 );
bytes scriptPubKey = script_builder() << op::DUP << op::HASH160 << raw_address << op::EQUALVERIFY << op::CHECKSIG;
@ -133,12 +133,12 @@ BOOST_AUTO_TEST_CASE( subtract_fee_tests )
std::vector<uint64_t> witnesses_fee;
for( size_t i = 0; i < info_vouts.size(); i++ ) {
witnesses_fee.push_back( ( info_vouts[i].amount - size_fee_user ) * witness_percentage );
witnesses_fee.push_back( ( info_vouts[i].amount - size_fee_user ) * witness_percentage / GRAPHENE_100_PERCENT );
}
uint64_t witnesses_fee_sum = std::accumulate( witnesses_fee.begin(), witnesses_fee.end(), 0 );
uint64_t witness_fee = witnesses_fee_sum / keys.size();
BOOST_CHECK( tx.vout[0].value == static_cast<int64_t>( pw_vout_amount ) );
BOOST_CHECK( tx.vout[0].value == static_cast<int64_t>( pw_vout_amount - size_fee_user * info_vins.size() ) );
for( size_t i = 1; i <= keys.size(); i++ ) {
BOOST_CHECK( tx.vout[i].value == static_cast<int64_t>( witness_fee ) );
}
@ -164,7 +164,7 @@ BOOST_AUTO_TEST_CASE( subtract_fee_not_pw_vout_and_witness_vouts_tests )
std::vector<uint64_t> witnesses_fee;
for( size_t i = 0; i < info_vouts.size(); i++ ) {
witnesses_fee.push_back( ( info_vouts[i].amount - size_fee_user ) * witness_percentage );
witnesses_fee.push_back( ( info_vouts[i].amount - size_fee_user ) * witness_percentage / GRAPHENE_100_PERCENT );
}
for( size_t i = 0; i < tx.vout.size(); i++ ) {
@ -188,7 +188,7 @@ BOOST_AUTO_TEST_CASE( subtract_fee_not_witness_vouts_tests )
std::vector<uint64_t> witnesses_fee;
for( size_t i = 0; i < info_vouts.size(); i++ ) {
witnesses_fee.push_back( ( info_vouts[i].amount - size_fee_user ) * witness_percentage );
witnesses_fee.push_back( ( info_vouts[i].amount - size_fee_user ) * witness_percentage / GRAPHENE_100_PERCENT );
}
size_t offset = 1;
@ -214,7 +214,7 @@ BOOST_AUTO_TEST_CASE( subtract_fee_not_pw_vout_tests )
std::vector<uint64_t> witnesses_fee;
for( size_t i = 0; i < info_vouts.size(); i++ ) {
witnesses_fee.push_back( ( info_vouts[i].amount - size_fee_user ) * witness_percentage );
witnesses_fee.push_back( ( info_vouts[i].amount - size_fee_user ) * witness_percentage / GRAPHENE_100_PERCENT );
}
size_t offset = keys.size();
@ -223,7 +223,7 @@ BOOST_AUTO_TEST_CASE( subtract_fee_not_pw_vout_tests )
}
}
BOOST_AUTO_TEST_CASE( subtract_fee_not_vins_vout_tests )
BOOST_AUTO_TEST_CASE( subtract_fee_not_vins_tests )
{
std::vector<info_for_vin> info_vins;
std::vector<info_for_vout> info_vouts;
@ -242,7 +242,7 @@ BOOST_AUTO_TEST_CASE( subtract_fee_not_vins_vout_tests )
std::vector<uint64_t> witnesses_fee;
for( size_t i = 0; i < info_vouts.size(); i++ ) {
witnesses_fee.push_back( ( info_vouts[i].amount - size_fee_user ) * witness_percentage );
witnesses_fee.push_back( ( info_vouts[i].amount - size_fee_user ) * witness_percentage / GRAPHENE_100_PERCENT );
}
size_t offset = 1 + keys.size();