diff --git a/plugins/chain_api_plugin/chain_api_plugin.cpp b/plugins/chain_api_plugin/chain_api_plugin.cpp index 8434cd4e6413fdeff00b9cdbfbb82a4bf19f8aa9..345000f44ed3b85e309975a655de58847b1020d4 100644 --- a/plugins/chain_api_plugin/chain_api_plugin.cpp +++ b/plugins/chain_api_plugin/chain_api_plugin.cpp @@ -55,7 +55,8 @@ void chain_api_plugin::plugin_startup() { CHAIN_RO_CALL(abi_json_to_bin), CHAIN_RO_CALL(abi_bin_to_json), CHAIN_RW_CALL(push_block), - CHAIN_RW_CALL(push_transaction) + CHAIN_RW_CALL(push_transaction), + CHAIN_RW_CALL(push_transactions) }); } diff --git a/plugins/chain_plugin/chain_plugin.cpp b/plugins/chain_plugin/chain_plugin.cpp index 99702c6ec25fe20c806869218c6137d8736c9a7c..347561fff67b2ba9aad57cb770cf38f912aecfc1 100644 --- a/plugins/chain_plugin/chain_plugin.cpp +++ b/plugins/chain_plugin/chain_plugin.cpp @@ -263,9 +263,23 @@ read_write::push_block_results read_write::push_block(const read_write::push_blo } read_write::push_transaction_results read_write::push_transaction(const read_write::push_transaction_params& params) { - auto ptrx = db.push_transaction(params, skip_flags); + auto pretty_input = db.transaction_from_variant( params ); + auto ptrx = db.push_transaction(pretty_input, skip_flags); auto pretty_trx = db.transaction_to_variant( ptrx ); - return read_write::push_transaction_results{ params.id(), pretty_trx }; + return read_write::push_transaction_results{ pretty_input.id(), pretty_trx }; +} + +read_write::push_transactions_results read_write::push_transactions(const vector& params) { + push_transactions_results result; + for( const auto& item : params ) { + try { + result.push_back( push_transaction( item ) ); + } catch ( const fc::exception& e ) { + result.push_back( read_write::push_transaction_results{ chain::transaction_id_type(), + fc::mutable_variant_object( "error", e.to_detail_string() ) } ); + } + } + return result; } read_only::get_account_results read_only::get_account( const get_account_params& params )const { diff --git a/plugins/chain_plugin/include/eos/chain_plugin/chain_plugin.hpp b/plugins/chain_plugin/include/eos/chain_plugin/chain_plugin.hpp index d770ea8d57be3c2d1e7eb52f88fe3ca327b54947..78b0eabb8220d019bb8c084d443650bc88873006 100644 --- a/plugins/chain_plugin/include/eos/chain_plugin/chain_plugin.hpp +++ b/plugins/chain_plugin/include/eos/chain_plugin/chain_plugin.hpp @@ -206,12 +206,17 @@ public: using push_block_results = empty; push_block_results push_block(const push_block_params& params); - using push_transaction_params = chain::SignedTransaction; + using push_transaction_params = fc::variant_object; struct push_transaction_results { chain::transaction_id_type transaction_id; fc::variant processed; }; push_transaction_results push_transaction(const push_transaction_params& params); + + + using push_transactions_params = vector; + using push_transactions_results = vector; + push_transactions_results push_transactions(const push_transactions_params& params); }; } // namespace chain_apis