本文整理汇总了C++中signed_transaction类的典型用法代码示例。如果您正苦于以下问题:C++ signed_transaction类的具体用法?C++ signed_transaction怎么用?C++ signed_transaction使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了signed_transaction类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: evaluate
void transaction_evaluation_state::evaluate( const signed_transaction& trx_arg )
{ try {
reset();
auto trx_id = trx_arg.id();
otransaction_location current_loc = _current_state->get_transaction_location( trx_id );
if( !!current_loc )
fail( BTS_DUPLICATE_TRANSACTION, "transaction has already been processed" );
trx = trx_arg;
auto digest = trx_arg.digest();
for( auto sig : trx.signatures )
{
auto key = fc::ecc::public_key( sig, digest ).serialize();
signed_keys.insert( address(key) );
signed_keys.insert( address(pts_address(key,false,56) ) );
signed_keys.insert( address(pts_address(key,true,56) ) );
signed_keys.insert( address(pts_address(key,false,0) ) );
signed_keys.insert( address(pts_address(key,true,0) ) );
}
for( auto op : trx.operations )
{
evaluate_operation( op );
}
post_evaluate();
validate_required_fee();
update_delegate_votes();
} FC_RETHROW_EXCEPTIONS( warn, "", ("trx",trx_arg) ) }
示例2: broadcast_transaction_with_callback
void network_broadcast_api::broadcast_transaction_with_callback(confirmation_callback cb, const signed_transaction& trx)
{
trx.validate();
_callbacks[trx.id()] = cb;
_app.chain_database()->push_transaction(trx);
_app.p2p_node()->broadcast_transaction(trx);
}
示例3: sign_transaction
void wallet::sign_transaction( signed_transaction& trx, const bts::address& addr )
{
ilog( "Sign ${trx} ${addr}", ("trx",trx.id())("addr",addr));
auto priv_key_idx = my->_my_addresses.find(addr);
FC_ASSERT( priv_key_idx != my->_my_addresses.end() );
trx.sign( my->_data.extra_keys[priv_key_idx->second] );
}
示例4: evaluate
void transaction_evaluation_state::evaluate( const signed_transaction& trx_arg, bool skip_signature_check, bool enforce_canonical )
{ try {
_skip_signature_check = skip_signature_check;
try {
if( _current_state->now() >= trx_arg.expiration )
{
if( _current_state->now() > trx_arg.expiration || _current_state->get_head_block_num() >= BTS_V0_4_21_FORK_BLOCK_NUM )
{
const auto expired_by_sec = (_current_state->now() - trx_arg.expiration).to_seconds();
FC_CAPTURE_AND_THROW( expired_transaction, (trx_arg)(_current_state->now())(expired_by_sec) );
}
}
if( (_current_state->now() + BTS_BLOCKCHAIN_MAX_TRANSACTION_EXPIRATION_SEC) < trx_arg.expiration )
FC_CAPTURE_AND_THROW( invalid_transaction_expiration, (trx_arg)(_current_state->now()) );
auto trx_id = trx_arg.id();
if( _current_state->is_known_transaction( trx_arg.expiration, trx_arg.digest( _chain_id ) ) )
if (_current_state->get_head_block_num() >= FORK_25)
FC_CAPTURE_AND_THROW( duplicate_transaction, (trx_id) );
trx = trx_arg;
if( !_skip_signature_check )
{
auto digest = trx_arg.digest( _chain_id );
for( const auto& sig : trx.signatures )
{
auto key = fc::ecc::public_key( sig, digest, enforce_canonical ).serialize();
signed_keys.insert( address(key) );
signed_keys.insert( address(pts_address(key,false,56) ) );
signed_keys.insert( address(pts_address(key,true,56) ) );
signed_keys.insert( address(pts_address(key,false,0) ) );
signed_keys.insert( address(pts_address(key,true,0) ) );
}
}
current_op_index = 0;
for( const auto& op : trx.operations )
{
evaluate_operation( op );
++current_op_index;
}
post_evaluate();
validate_required_fee();
update_delegate_votes();
}
catch ( const fc::exception& e )
{
validation_error = e;
throw;
}
} FC_RETHROW_EXCEPTIONS( warn, "", ("trx",trx_arg) ) }
示例5: evaluate
void transaction_evaluation_state::evaluate( const signed_transaction& trx_arg, bool skip_signature_check )
{ try {
reset();
_skip_signature_check = skip_signature_check;
try {
if( trx_arg.expiration < _current_state->now() )
{
auto expired_by_sec = (trx_arg.expiration - _current_state->now()).to_seconds();
FC_CAPTURE_AND_THROW( expired_transaction, (trx_arg)(_current_state->now())(expired_by_sec) );
}
if( trx_arg.expiration > (_current_state->now() + BTS_BLOCKCHAIN_MAX_TRANSACTION_EXPIRATION_SEC) )
FC_CAPTURE_AND_THROW( invalid_transaction_expiration, (trx_arg)(_current_state->now()) );
auto trx_size = fc::raw::pack_size(trx_arg);
if( trx_size > BTS_BLOCKCHAIN_MAX_TRANSACTION_SIZE )
FC_CAPTURE_AND_THROW( oversized_transaction, (trx_size ) );
auto trx_id = trx_arg.id();
if( _current_state->is_known_transaction( trx_id ) )
FC_CAPTURE_AND_THROW( duplicate_transaction, (trx_id) );
trx = trx_arg;
if( !_skip_signature_check )
{
auto digest = trx_arg.digest( _chain_id );
for( auto sig : trx.signatures )
{
auto key = fc::ecc::public_key( sig, digest ).serialize();
signed_keys.insert( address(key) );
signed_keys.insert( address(pts_address(key,false,56) ) );
signed_keys.insert( address(pts_address(key,true,56) ) );
signed_keys.insert( address(pts_address(key,false,0) ) );
signed_keys.insert( address(pts_address(key,true,0) ) );
}
}
for( auto op : trx.operations )
{
evaluate_operation( op );
}
post_evaluate();
validate_required_fee();
update_delegate_votes();
}
catch ( const fc::exception& e )
{
validation_error = e;
throw;
}
} FC_RETHROW_EXCEPTIONS( warn, "", ("trx",trx_arg) ) }
示例6: on_new_transaction
void client_impl::on_new_transaction(const signed_transaction& trx)
{
_chain_db->evaluate_transaction(trx); // throws exception if invalid trx.
if (_pending_trxs.insert(std::make_pair(trx.id(), trx)).second)
ilog("new transaction");
else
wlog("duplicate transaction, ignoring");
}
示例7: store
/**
* Stores a transaction and updates the spent status of all
* outputs doing one last check to make sure they are unspent.
*/
void store( const signed_transaction& t, const trx_num& tn )
{
//ilog( "trxid: ${id} ${tn}\n\n ${trx}\n\n", ("id",t.id())("tn",tn)("trx",t) );
trx_id2num.store( t.id(), tn );
meta_trxs.store( tn, meta_trx(t) );
for( uint16_t i = 0; i < t.inputs.size(); ++i )
{
mark_spent( t.inputs[i].output_ref, tn, i );
}
}
示例8: evaluate
void transaction_evaluation_state::evaluate( const signed_transaction& trx_arg )
{ try {
reset();
try {
if( trx_arg.expiration && *trx_arg.expiration < _current_state->now() )
FC_CAPTURE_AND_THROW( expired_transaction, (trx_arg)(_current_state->now()) );
auto trx_id = trx_arg.id();
ilog( "id: ${id}", ("id",trx_id) );
otransaction_record known_transaction= _current_state->get_transaction( trx_id );
if( known_transaction )
FC_CAPTURE_AND_THROW( duplicate_transaction, (known_transaction) );
trx = trx_arg;
auto digest = trx_arg.digest( _chain_id );
for( auto sig : trx.signatures )
{
auto key = fc::ecc::public_key( sig, digest ).serialize();
signed_keys.insert( address(key) );
signed_keys.insert( address(pts_address(key,false,56) ) );
signed_keys.insert( address(pts_address(key,true,56) ) );
signed_keys.insert( address(pts_address(key,false,0) ) );
signed_keys.insert( address(pts_address(key,true,0) ) );
}
for( auto op : trx.operations )
{
evaluate_operation( op );
}
post_evaluate();
validate_required_fee();
update_delegate_votes();
}
catch ( const fc::exception& e )
{
validation_error = e;
throw;
}
} FC_RETHROW_EXCEPTIONS( warn, "", ("trx",trx_arg) ) }
示例9: cache_transaction
wallet_transaction_record wallet_db::cache_transaction( const signed_transaction& trx,
const asset& amount,
share_type fees,
const string& memo_message,
const public_key_type& to,
time_point_sec created,
time_point_sec received,
public_key_type from,
const vector<address>& extra_addresses
)
{ try {
auto trx_id = trx.id();
auto itr = transactions.find( trx_id );
wallet_transaction_record data;
if( itr != transactions.end() ) data = itr->second;
if( data.wallet_record_index == 0 ) data.wallet_record_index = new_wallet_record_index();
data.trx = trx;
data.transaction_id = trx.id();
data.amount = amount;
data.fees = fees;
data.to_account = to;
data.from_account = from;
data.created_time = created;
data.received_time = received;
data.memo_message = memo_message;
data.extra_addresses = extra_addresses;
store_record( data );
transactions[trx_id] = data;
return data;
//transaction_data data
} FC_RETHROW_EXCEPTIONS( warn, "",
("trx",trx)
("memo_message",memo_message)
("to",to) ) }
示例10: store
meta_signed_transaction_ptr database::store( const signed_transaction& trx, const pow_hash& block_id )
{
auto tid = trx.calculate_id();
auto itr = my->_trxs.find( tid );
if( itr == my->_trxs.end() )
{
meta_signed_transaction_ptr mst = std::make_shared<meta_signed_transaction>();
mst->trx = trx;
mst->blk = block_id;
my->_trxs[tid] = mst;
// add all of the outputs
for( uint32_t i = 0; i < trx.outputs.size(); ++i )
{
auto oid = output_cache( tid, i, trx.outputs[i] ).output_id;
my->_outputs[oid] = std::make_shared<meta_output>( trx.outputs[i], tid );
}
return mst;
}
return itr->second;
}
示例11: transaction_metadata
transaction_metadata( const signed_transaction& t, packed_transaction::compression_type c = packed_transaction::none )
:trx(t),packed_trx(t, c) {
id = trx.id();
//raw_packed = fc::raw::pack( static_cast<const transaction&>(trx) );
signed_id = digest_type::hash(packed_trx);
}
示例12: sign
void database_fixture::sign(signed_transaction& trx, const fc::ecc::private_key& key)
{
trx.sign( key, db->get_chain_id(), default_sig_canon );
}
示例13: broadcast_transaction
void network_broadcast_api::broadcast_transaction(const signed_transaction& trx)
{
trx.validate();
_app.chain_database()->push_transaction(trx);
_app.p2p_node()->broadcast_transaction(trx);
}
示例14: sign
void database_fixture::sign(signed_transaction& trx, const fc::ecc::private_key& key)
{
trx.sign( key );
}
示例15: sign
void database_fixture::sign(signed_transaction& trx, const fc::ecc::private_key& key)
{
trx.sign( key, db.get_chain_id() );
}