Changed constant params to dynamic sidechain_parameters
This commit is contained in:
parent
7c02821b84
commit
0eda7025c9
11 changed files with 39 additions and 31 deletions
|
|
@ -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;
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(); }
|
||||
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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(); }
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Reference in a new issue