@@ -1307,29 +1307,40 @@ namespace cbdc::threepc::agent::rpc {
1307
1307
}
1308
1308
1309
1309
auto http_server::exec_tx (
1310
- const server_type::result_callback_type& callback ,
1310
+ const server_type::result_callback_type& json_ret_callback ,
1311
1311
runner::evm_runner_function f_type,
1312
1312
cbdc::buffer& runner_params,
1313
1313
bool is_readonly_run,
1314
- std::function<void (interface::exec_return_type)> res_cb) -> bool {
1314
+ const std::function<void (interface::exec_return_type)>& res_success_cb)
1315
+ -> bool {
1315
1316
auto function = cbdc::buffer ();
1316
1317
function.append (&f_type, sizeof (f_type));
1317
- auto cb = [res_cb, callback](interface::exec_return_type res) {
1318
- if (!std::holds_alternative<return_type>(res)) {
1319
- auto ec = std::get<interface::error_code>(res);
1320
- auto ret = Json::Value ();
1321
- ret[" error" ] = Json::Value ();
1322
- ret[" error" ][" code" ]
1323
- = error_code::execution_error - static_cast <int >(ec);
1324
- ret[" error" ][" message" ] = " Execution error" ;
1325
- callback (ret);
1326
- return ;
1327
- }
1318
+ auto id = m_next_id++;
1328
1319
1329
- res_cb (res);
1330
- };
1320
+ const auto res_cb_for_agent =
1321
+ [this , id, res_success_cb, json_ret_callback](
1322
+ interface::exec_return_type res) {
1323
+ const auto success = std::holds_alternative<return_type>(res);
1324
+ if (success) {
1325
+ res_success_cb (res);
1326
+ m_cleanup_queue.push (id);
1327
+ } else {
1328
+ // Handle error:
1329
+ const auto ec = std::get<interface::error_code>(res);
1330
+
1331
+ if (ec == interface::error_code::retry) {
1332
+ m_retry_queue.push (id);
1333
+ } else {
1334
+ auto ret = Json::Value ();
1335
+ ret[" error" ] = Json::Value ();
1336
+ ret[" error" ][" code" ] = error_code::execution_error
1337
+ - static_cast <int >(ec);
1338
+ ret[" error" ][" message" ] = " Execution error" ;
1339
+ json_ret_callback (ret);
1340
+ }
1341
+ }
1342
+ };
1331
1343
1332
- auto id = m_next_id++;
1333
1344
auto a = [&]() {
1334
1345
auto agent = std::make_shared<impl>(
1335
1346
m_log,
@@ -1338,18 +1349,7 @@ namespace cbdc::threepc::agent::rpc {
1338
1349
m_broker,
1339
1350
function,
1340
1351
runner_params,
1341
- [this , id, res_cb](interface::exec_return_type res) {
1342
- auto success = std::holds_alternative<return_type>(res);
1343
- if (!success) {
1344
- auto ec = std::get<interface::error_code>(res);
1345
- if (ec == interface::error_code::retry) {
1346
- m_retry_queue.push (id);
1347
- return ;
1348
- }
1349
- }
1350
- res_cb (res);
1351
- m_cleanup_queue.push (id);
1352
- },
1352
+ res_cb_for_agent,
1353
1353
runner::evm_runner::initial_lock_type,
1354
1354
is_readonly_run,
1355
1355
m_secp,
0 commit comments