本文整理汇总了C++中signed_transaction::digest方法的典型用法代码示例。如果您正苦于以下问题:C++ signed_transaction::digest方法的具体用法?C++ signed_transaction::digest怎么用?C++ signed_transaction::digest使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类signed_transaction
的用法示例。
在下文中一共展示了signed_transaction::digest方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: 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) ) }
示例2: 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) ) }
示例3: 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) ) }
示例4: 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) ) }