本文整理汇总了C++中transaction_evaluation_state::sub_balance方法的典型用法代码示例。如果您正苦于以下问题:C++ transaction_evaluation_state::sub_balance方法的具体用法?C++ transaction_evaluation_state::sub_balance怎么用?C++ transaction_evaluation_state::sub_balance使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类transaction_evaluation_state
的用法示例。
在下文中一共展示了transaction_evaluation_state::sub_balance方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: evaluate
void burn_operation::evaluate( transaction_evaluation_state& eval_state )
{ try {
if( message.size() )
FC_ASSERT( amount.asset_id == 0 );
if( amount.asset_id == 0 )
{
FC_ASSERT( amount.amount >= BTS_BLOCKCHAIN_MIN_BURN_FEE, "",
("amount",amount)
("BTS_BLOCKCHAIN_MIN_BURN_FEE",BTS_BLOCKCHAIN_MIN_BURN_FEE) );
}
oasset_record asset_rec = eval_state._current_state->get_asset_record( amount.asset_id );
FC_ASSERT( asset_rec.valid() );
FC_ASSERT( !asset_rec->is_market_issued() );
asset_rec->current_share_supply -= this->amount.amount;
eval_state.sub_balance( address(), this->amount );
eval_state._current_state->store_asset_record( *asset_rec );
if( account_id != 0 ) // you can offer burnt offerings to God if you like... otherwise it must be an account
{
// TODO: support burning to any OBJECT ID not just accounts
const oaccount_record account_rec = eval_state._current_state->get_account_record( abs( this->account_id ) );
FC_ASSERT( account_rec.valid() );
}
eval_state._current_state->store_burn_record( burn_record( burn_record_key( {account_id, eval_state.trx.id()} ),
burn_record_value( {amount,message,message_signature} ) ) );
} FC_CAPTURE_AND_RETHROW( (*this) ) }
示例2: evaluate
void ad_operation::evaluate( transaction_evaluation_state& eval_state )const
{ try {
if( this->amount.amount <= 0 )
FC_CAPTURE_AND_THROW( negative_deposit, (amount) );
FC_ASSERT( !message.empty() );
FC_ASSERT( amount.asset_id == 0 );
const size_t message_kb = (message.size() / 1024) + 1;
const share_type required_fee = message_kb * BTS_BLOCKCHAIN_MIN_AD_FEE;
FC_ASSERT( amount.amount >= required_fee, "Message of size ${s} KiB requires at least ${a} satoshis to be pay!",
("s",message_kb)("a",required_fee) );
// half of the note fees goto collected fees(delegate pay), other go to ad owner
eval_state.min_fees[amount.asset_id] += required_fee;
FC_ASSERT( owner_account_id != 0 );
const oaccount_record owner_account_rec = eval_state.pending_state()->get_account_record( abs( this->owner_account_id ) );
FC_ASSERT( owner_account_rec.valid() );
auto owner_address = owner_account_rec->active_address();
auto ad_income_balance = eval_state.pending_state()->get_balance_record(withdraw_condition( withdraw_with_signature(owner_address), 0 ).get_address());
if( !ad_income_balance )
ad_income_balance = balance_record( owner_address, asset(0, 0), 0 );
auto ad_pay = amount.amount - required_fee;
ad_income_balance->balance += ad_pay;
ad_income_balance->last_update = eval_state.pending_state()->now();
ad_income_balance->deposit_date = eval_state.pending_state()->now();
eval_state.pending_state()->store_balance_record( *ad_income_balance );
eval_state.sub_balance( asset(ad_pay, amount.asset_id) );
// checking the signature of the publisher.
FC_ASSERT( publisher_account_id != 0 );
const oaccount_record publisher_account_rec = eval_state.pending_state()->get_account_record( abs( this->publisher_account_id ) );
FC_ASSERT( publisher_account_rec.valid() );
eval_state.check_signature( publisher_account_rec->active_key() );
ad_record record;
record.index.account_id = owner_account_id;
record.index.transaction_id = eval_state.trx.id();
record.publisher_id = publisher_account_id;
record.amount = amount;
record.message = message;
record.signer = message_signature;
// the message must be signed by the claimed publisher account
FC_ASSERT( publisher_account_rec->active_key() == record.signer_key() );
FC_ASSERT( !eval_state.pending_state()->get_ad_record( record.index ).valid() );
eval_state.pending_state()->store_ad_record( std::move( record ) );
} FC_CAPTURE_AND_RETHROW( (*this) ) }
示例3: evaluate
void add_collateral_operation::evaluate( transaction_evaluation_state& eval_state )
{
FC_ASSERT(!"Not implemented for this DAC.\n");
if( this->cover_index.order_price == price() )
FC_CAPTURE_AND_THROW( zero_price, (cover_index.order_price) );
if( this->amount == 0 )
FC_CAPTURE_AND_THROW( zero_amount );
if( this->amount < 0 )
FC_CAPTURE_AND_THROW( negative_deposit );
asset delta_amount = this->get_amount();
eval_state.sub_balance( address(), delta_amount );
// update collateral and call price
auto current_cover = eval_state._current_state->get_collateral_record( this->cover_index );
if( NOT current_cover )
FC_CAPTURE_AND_THROW( unknown_market_order, (cover_index) );
current_cover->collateral_balance += delta_amount.amount;
// changing the payoff balance changes the call price... so we need to remove the old record
// and insert a new one.
eval_state._current_state->store_collateral_record( this->cover_index, collateral_record() );
auto new_call_price = asset(current_cover->payoff_balance, delta_amount.asset_id) /
asset((current_cover->collateral_balance*3)/4, 0);
eval_state._current_state->store_collateral_record( market_index_key( new_call_price, this->cover_index.owner),
*current_cover );
auto market_stat = eval_state._current_state->get_market_status( cover_index.order_price.quote_asset_id, cover_index.order_price.base_asset_id );
FC_ASSERT( market_stat, "this should be valid for there to even be a position to cover" );
market_stat->ask_depth += delta_amount.amount;
eval_state._current_state->store_market_status( *market_stat );
}