@@ -128,6 +128,8 @@ class chain_plugin_impl {
128
128
fc::optional<chain_id_type> chain_id;
129
129
// txn_msg_rate_limits rate_limits;
130
130
fc::optional<vm_type> wasm_runtime;
131
+ fc::microseconds abi_serializer_max_time_ms;
132
+
131
133
132
134
// retained references to channels for easy publication
133
135
channels::pre_accepted_block::channel_type& pre_accepted_block_channel;
@@ -174,7 +176,8 @@ void chain_plugin::set_program_options(options_description& cli, options_descrip
174
176
" the location of the blocks directory (absolute path or relative to application data dir)" )
175
177
(" checkpoint" , bpo::value<vector<string>>()->composing (), " Pairs of [BLOCK_NUM,BLOCK_ID] that should be enforced as checkpoints." )
176
178
(" wasm-runtime" , bpo::value<eosio::chain::wasm_interface::vm_type>()->value_name (" wavm/binaryen" ), " Override default WASM runtime" )
177
- (" abi-serializer-max-time-ms" , bpo::value<uint32_t >(), " Override default maximum ABI serialization time allowed in ms" )
179
+ (" abi-serializer-max-time-ms" , bpo::value<uint32_t >()->default_value (config::default_abi_serializer_max_time_ms),
180
+ " Override default maximum ABI serialization time allowed in ms" )
178
181
(" chain-state-db-size-mb" , bpo::value<uint64_t >()->default_value (config::default_state_size / (1024 * 1024 )), " Maximum size (in MB) of the chain state database" )
179
182
(" reversible-blocks-db-size-mb" , bpo::value<uint64_t >()->default_value (config::default_reversible_cache_size / (1024 * 1024 )), " Maximum size (in MB) of the reversible blocks database" )
180
183
(" contracts-console" , bpo::bool_switch ()->default_value (false ),
@@ -327,7 +330,7 @@ void chain_plugin::plugin_initialize(const variables_map& options) {
327
330
my->wasm_runtime = options.at ( " wasm-runtime" ).as <vm_type>();
328
331
329
332
if (options.count (" abi-serializer-max-time-ms" ))
330
- my->chain_config -> abi_serializer_max_time_ms = fc::microseconds (options.at (" abi-serializer-max-time-ms" ).as <uint32_t >() * 1000 );
333
+ my->abi_serializer_max_time_ms = fc::microseconds (options.at (" abi-serializer-max-time-ms" ).as <uint32_t >() * 1000 );
331
334
332
335
my->chain_config ->blocks_dir = my->blocks_dir ;
333
336
my->chain_config ->state_dir = app ().data_dir () / config::default_state_dir_name;
@@ -573,7 +576,7 @@ void chain_plugin::plugin_shutdown() {
573
576
}
574
577
575
578
chain_apis::read_write chain_plugin::get_read_write_api () {
576
- return chain_apis::read_write (chain ());
579
+ return chain_apis::read_write (chain (), get_abi_serializer_max_time () );
577
580
}
578
581
579
582
void chain_plugin::accept_block (const signed_block_ptr& block ) {
@@ -744,6 +747,11 @@ chain::chain_id_type chain_plugin::get_chain_id()const {
744
747
return *my->chain_id ;
745
748
}
746
749
750
+ fc::microseconds chain_plugin::get_abi_serializer_max_time () const {
751
+ return my->abi_serializer_max_time_ms ;
752
+ }
753
+
754
+
747
755
namespace chain_apis {
748
756
749
757
const string read_only::KEYi64 = " i64" ;
@@ -939,12 +947,12 @@ read_only::get_producers_result read_only::get_producers( const read_only::get_p
939
947
}
940
948
copy_inline_row (*kv_index.find (boost::make_tuple (table_id->id , it->primary_key )), data);
941
949
if (p.json )
942
- result.rows .emplace_back (abis.binary_to_variant (abis.get_table_type (N (producers)), data, db. get_abi_serializer_max_time_ms () ));
950
+ result.rows .emplace_back (abis.binary_to_variant (abis.get_table_type (N (producers)), data, abi_serializer_max_time ));
943
951
else
944
952
result.rows .emplace_back (fc::variant (data));
945
953
}
946
954
947
- result.total_producer_vote_weight = get_global_row (d, abi, abis, db. get_abi_serializer_max_time_ms () )[" total_producer_vote_weight" ].as_double ();
955
+ result.total_producer_vote_weight = get_global_row (d, abi, abis, abi_serializer_max_time )[" total_producer_vote_weight" ].as_double ();
948
956
return result;
949
957
}
950
958
@@ -995,7 +1003,7 @@ fc::variant read_only::get_block(const read_only::get_block_params& params) cons
995
1003
EOS_ASSERT ( block, unknown_block_exception, " Could not find block: ${block}" , (" block" , params.block_num_or_id ));
996
1004
997
1005
fc::variant pretty_output;
998
- abi_serializer::to_variant (*block, pretty_output, make_resolver (this ), db. get_abi_serializer_max_time_ms () );
1006
+ abi_serializer::to_variant (*block, pretty_output, make_resolver (this ), abi_serializer_max_time );
999
1007
1000
1008
uint32_t ref_block_prefix = block->id ()._hash [1 ];
1001
1009
@@ -1043,7 +1051,7 @@ void read_write::push_transaction(const read_write::push_transaction_params& par
1043
1051
auto pretty_input = std::make_shared<packed_transaction>();
1044
1052
auto resolver = make_resolver (this );
1045
1053
try {
1046
- abi_serializer::from_variant (params, *pretty_input, resolver, db. get_abi_serializer_max_time_ms () );
1054
+ abi_serializer::from_variant (params, *pretty_input, resolver, abi_serializer_max_time );
1047
1055
} EOS_RETHROW_EXCEPTIONS (chain::packed_transaction_type_exception, " Invalid packed transaction" )
1048
1056
1049
1057
app ().get_method <incoming::methods::transaction_async>()(pretty_input, true , [this , next](const fc::static_variant<fc::exception_ptr, transaction_trace_ptr>& result) -> void {
@@ -1054,7 +1062,7 @@ void read_write::push_transaction(const read_write::push_transaction_params& par
1054
1062
1055
1063
try {
1056
1064
fc::variant pretty_output;
1057
- pretty_output = db.to_variant_with_abi (*trx_trace_ptr);
1065
+ pretty_output = db.to_variant_with_abi (*trx_trace_ptr, abi_serializer_max_time );
1058
1066
// abi_serializer::to_variant(*trx_trace_ptr, pretty_output, resolver);
1059
1067
1060
1068
chain::transaction_id_type id = trx_trace_ptr->id ;
@@ -1212,7 +1220,7 @@ read_only::get_account_results read_only::get_account( const get_account_params&
1212
1220
if ( it != idx.end () ) {
1213
1221
vector<char > data;
1214
1222
copy_inline_row (*it, data);
1215
- result.total_resources = abis.binary_to_variant ( " user_resources" , data, db. get_abi_serializer_max_time_ms () );
1223
+ result.total_resources = abis.binary_to_variant ( " user_resources" , data, abi_serializer_max_time );
1216
1224
}
1217
1225
}
1218
1226
@@ -1223,7 +1231,7 @@ read_only::get_account_results read_only::get_account( const get_account_params&
1223
1231
if ( it != idx.end () ) {
1224
1232
vector<char > data;
1225
1233
copy_inline_row (*it, data);
1226
- result.self_delegated_bandwidth = abis.binary_to_variant ( " delegated_bandwidth" , data, db. get_abi_serializer_max_time_ms () );
1234
+ result.self_delegated_bandwidth = abis.binary_to_variant ( " delegated_bandwidth" , data, abi_serializer_max_time );
1227
1235
}
1228
1236
}
1229
1237
@@ -1234,7 +1242,7 @@ read_only::get_account_results read_only::get_account( const get_account_params&
1234
1242
if ( it != idx.end () ) {
1235
1243
vector<char > data;
1236
1244
copy_inline_row (*it, data);
1237
- result.refund_request = abis.binary_to_variant ( " refund_request" , data, db. get_abi_serializer_max_time_ms () );
1245
+ result.refund_request = abis.binary_to_variant ( " refund_request" , data, abi_serializer_max_time );
1238
1246
}
1239
1247
}
1240
1248
@@ -1245,7 +1253,7 @@ read_only::get_account_results read_only::get_account( const get_account_params&
1245
1253
if ( it != idx.end () ) {
1246
1254
vector<char > data;
1247
1255
copy_inline_row (*it, data);
1248
- result.voter_info = abis.binary_to_variant ( " voter_info" , data, db. get_abi_serializer_max_time_ms () );
1256
+ result.voter_info = abis.binary_to_variant ( " voter_info" , data, abi_serializer_max_time );
1249
1257
}
1250
1258
}
1251
1259
}
@@ -1271,7 +1279,7 @@ read_only::abi_json_to_bin_result read_only::abi_json_to_bin( const read_only::a
1271
1279
auto action_type = abis.get_action_type (params.action );
1272
1280
EOS_ASSERT (!action_type.empty (), action_validate_exception, " Unknown action ${action} in contract ${contract}" , (" action" , params.action )(" contract" , params.code ));
1273
1281
try {
1274
- result.binargs = abis.variant_to_binary (action_type, params.args , db. get_abi_serializer_max_time_ms () );
1282
+ result.binargs = abis.variant_to_binary (action_type, params.args , abi_serializer_max_time );
1275
1283
} EOS_RETHROW_EXCEPTIONS (chain::invalid_action_args_exception,
1276
1284
" '${args}' is invalid args for action '${action}' code '${code}'. expected '${proto}'" ,
1277
1285
(" args" , params.args )(" action" , params.action )(" code" , params.code )(" proto" , action_abi_to_variant (abi, action_type)))
@@ -1288,7 +1296,7 @@ read_only::abi_bin_to_json_result read_only::abi_bin_to_json( const read_only::a
1288
1296
abi_def abi;
1289
1297
if ( abi_serializer::to_abi (code_account.abi , abi) ) {
1290
1298
abi_serializer abis ( abi );
1291
- result.args = abis.binary_to_variant ( abis.get_action_type ( params.action ), params.binargs , db. get_abi_serializer_max_time_ms () );
1299
+ result.args = abis.binary_to_variant ( abis.get_action_type ( params.action ), params.binargs , abi_serializer_max_time );
1292
1300
} else {
1293
1301
EOS_ASSERT (false , abi_not_found_exception, " No ABI found for ${contract}" , (" contract" , params.code ));
1294
1302
}
@@ -1299,7 +1307,7 @@ read_only::get_required_keys_result read_only::get_required_keys( const get_requ
1299
1307
transaction pretty_input;
1300
1308
auto resolver = make_resolver (this );
1301
1309
try {
1302
- abi_serializer::from_variant (params.transaction , pretty_input, resolver, db. get_abi_serializer_max_time_ms () );
1310
+ abi_serializer::from_variant (params.transaction , pretty_input, resolver, abi_serializer_max_time );
1303
1311
} EOS_RETHROW_EXCEPTIONS (chain::transaction_type_exception, " Invalid transaction" )
1304
1312
1305
1313
auto required_keys_set = db.get_authorization_manager ().get_required_keys (pretty_input, params.available_keys );
0 commit comments