@@ -2644,7 +2644,8 @@ struct controller_impl {
2644
2644
2645
2645
transaction_checktime_timer trx_timer (timer);
2646
2646
const packed_transaction trx ( std::move ( etrx ) );
2647
- transaction_context trx_context ( self, trx, trx.id (), std::move (trx_timer), bb.action_receipt_digests ().store_which (), start );
2647
+ transaction_context trx_context ( self, trx, trx.id (), std::move (trx_timer), bb.action_receipt_digests ().store_which (),
2648
+ start, transaction_metadata::trx_type::implicit );
2648
2649
2649
2650
if (auto dm_logger = get_deep_mind_logger (trx_context.is_transient ())) {
2650
2651
dm_logger->on_onerror (etrx);
@@ -2690,6 +2691,8 @@ struct controller_impl {
2690
2691
} catch ( const boost::interprocess::bad_alloc& ) {
2691
2692
throw ;
2692
2693
} catch ( const fc::exception & e ) {
2694
+ // apply_onerror for deferred trxs is implicit so interrupt oc not allowed
2695
+ assert (e.code () != interrupt_oc_exception::code_value);
2693
2696
handle_exception (e);
2694
2697
} catch ( const std::exception & e ) {
2695
2698
auto wrapper = fc::std_exception_wrapper::from_current_exception (e);
@@ -2815,7 +2818,8 @@ struct controller_impl {
2815
2818
auto & bb = std::get<building_block>(pending->_block_stage );
2816
2819
2817
2820
transaction_checktime_timer trx_timer ( timer );
2818
- transaction_context trx_context ( self, *trx->packed_trx (), gtrx.trx_id , std::move (trx_timer), bb.action_receipt_digests ().store_which () );
2821
+ transaction_context trx_context ( self, *trx->packed_trx (), gtrx.trx_id , std::move (trx_timer), bb.action_receipt_digests ().store_which (),
2822
+ start, transaction_metadata::trx_type::scheduled );
2819
2823
trx_context.leeway = fc::microseconds (0 ); // avoid stealing cpu resource
2820
2824
trx_context.block_deadline = block_deadline;
2821
2825
trx_context.max_transaction_time_subjective = max_transaction_time;
0 commit comments