BitShares-Core
7.0.2
BitShares blockchain node software and command-line wallet software
libraries
protocol
fee_schedule_set_fee.cpp
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2015 Cryptonomex, Inc., and contributors.
3
*
4
* The MIT License
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining a copy
7
* of this software and associated documentation files (the "Software"), to deal
8
* in the Software without restriction, including without limitation the rights
9
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
* copies of the Software, and to permit persons to whom the Software is
11
* furnished to do so, subject to the following conditions:
12
*
13
* The above copyright notice and this permission notice shall be included in
14
* all copies or substantial portions of the Software.
15
*
16
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
* THE SOFTWARE.
23
*/
24
#include <
graphene/protocol/fee_schedule.hpp
>
25
26
namespace
graphene
{
namespace
protocol {
27
28
struct
set_fee_visitor
29
{
30
using
result_type
= void;
31
32
asset
_fee
;
33
34
explicit
set_fee_visitor
(
const
asset
& f ):
_fee
(f){}
35
36
template
<
typename
OpType>
37
void
operator()
( OpType& op )
const
38
{
39
op.fee =
_fee
;
40
}
41
};
42
43
asset
fee_schedule::set_fee
(
operation
& op,
const
price
& core_exchange_rate )
const
44
{
45
auto
f =
calculate_fee
( op, core_exchange_rate );
46
for
(
size_t
i=0; i<
MAX_FEE_STABILIZATION_ITERATION
; ++i )
47
{
48
op.
visit
(
set_fee_visitor
( f ) );
49
auto
f2 =
calculate_fee
( op, core_exchange_rate );
50
if
( f >= f2 )
51
break
;
52
f = f2;
53
if
( 0 == i )
54
{
55
// no need for warnings on later iterations
56
wlog
(
"set_fee requires multiple iterations to stabilize with core_exchange_rate ${p} on operation ${op}"
,
57
(
"p"
, core_exchange_rate) (
"op"
, op) );
58
}
59
}
60
return
f;
61
}
62
63
} }
// graphene::protocol
graphene::protocol::set_fee_visitor::operator()
void operator()(OpType &op) const
Definition:
fee_schedule_set_fee.cpp:37
wlog
#define wlog(FORMAT,...)
Definition:
logger.hpp:123
graphene::protocol::price
The price struct stores asset prices in the BitShares system.
Definition:
asset.hpp:108
fc::static_variant< transfer_operation, limit_order_create_operation, limit_order_cancel_operation, call_order_update_operation, fill_order_operation, account_create_operation, account_update_operation, account_whitelist_operation, account_upgrade_operation, account_transfer_operation, asset_create_operation, asset_update_operation, asset_update_bitasset_operation, asset_update_feed_producers_operation, asset_issue_operation, asset_reserve_operation, asset_fund_fee_pool_operation, asset_settle_operation, asset_global_settle_operation, asset_publish_feed_operation, witness_create_operation, witness_update_operation, proposal_create_operation, proposal_update_operation, proposal_delete_operation, withdraw_permission_create_operation, withdraw_permission_update_operation, withdraw_permission_claim_operation, withdraw_permission_delete_operation, committee_member_create_operation, committee_member_update_operation, committee_member_update_global_parameters_operation, vesting_balance_create_operation, vesting_balance_withdraw_operation, worker_create_operation, custom_operation, assert_operation, balance_claim_operation, override_transfer_operation, transfer_to_blind_operation, blind_transfer_operation, transfer_from_blind_operation, asset_settle_cancel_operation, asset_claim_fees_operation, fba_distribute_operation, bid_collateral_operation, execute_bid_operation, asset_claim_pool_operation, asset_update_issuer_operation, htlc_create_operation, htlc_redeem_operation, htlc_redeemed_operation, htlc_extend_operation, htlc_refund_operation, custom_authority_create_operation, custom_authority_update_operation, custom_authority_delete_operation, ticket_create_operation, ticket_update_operation, liquidity_pool_create_operation, liquidity_pool_delete_operation, liquidity_pool_deposit_operation, liquidity_pool_withdraw_operation, liquidity_pool_exchange_operation, samet_fund_create_operation, samet_fund_delete_operation, samet_fund_update_operation, samet_fund_borrow_operation, samet_fund_repay_operation, credit_offer_create_operation, credit_offer_delete_operation, credit_offer_update_operation, credit_offer_accept_operation, credit_deal_repay_operation, credit_deal_expired_operation, liquidity_pool_update_operation, credit_deal_update_operation, limit_order_update_operation >
fee_schedule.hpp
graphene::protocol::set_fee_visitor::set_fee_visitor
set_fee_visitor(const asset &f)
Definition:
fee_schedule_set_fee.cpp:34
graphene::protocol::fee_schedule::set_fee
asset set_fee(operation &op, const price &core_exchange_rate=price::unit_price()) const
Definition:
fee_schedule_set_fee.cpp:43
graphene::protocol::set_fee_visitor::result_type
void result_type
Definition:
fee_schedule_set_fee.cpp:30
graphene::protocol::set_fee_visitor
Definition:
fee_schedule_set_fee.cpp:28
fc::static_variant::visit
visitor::result_type visit(visitor &v)
Definition:
static_variant.hpp:256
graphene::protocol::fee_schedule::calculate_fee
asset calculate_fee(const operation &op) const
Definition:
fee_schedule_calc.cpp:79
graphene::protocol::asset
Definition:
asset.hpp:31
graphene::protocol::set_fee_visitor::_fee
asset _fee
Definition:
fee_schedule_set_fee.cpp:32
graphene
Definition:
api.cpp:48
MAX_FEE_STABILIZATION_ITERATION
constexpr size_t MAX_FEE_STABILIZATION_ITERATION
How many iterations to run in fee_schedule::set_fee()
Definition:
config.hpp:133
Generated on Fri Dec 15 2023 06:12:43 for BitShares-Core by
1.8.17