diff --git a/libraries/app/api.cpp b/libraries/app/api.cpp index d346e121..480f5c66 100644 --- a/libraries/app/api.cpp +++ b/libraries/app/api.cpp @@ -39,6 +39,7 @@ #include #include +#include namespace graphene { namespace app { @@ -159,6 +160,16 @@ namespace graphene { namespace app { _app.p2p_node()->broadcast_transaction(trx); } + fc::variant network_broadcast_api::broadcast_transaction_synchronous(const signed_transaction& trx) + { + fc::promise::ptr prom( new fc::promise() ); + broadcast_transaction_with_callback( [=]( const fc::variant& v ){ + prom->set_value(v); + }, trx ); + + return fc::future(prom).wait(); + } + void network_broadcast_api::broadcast_block( const signed_block& b ) { _app.chain_database()->push_block(b); diff --git a/libraries/app/include/graphene/app/api.hpp b/libraries/app/include/graphene/app/api.hpp index be511d3a..6b5830c9 100644 --- a/libraries/app/include/graphene/app/api.hpp +++ b/libraries/app/include/graphene/app/api.hpp @@ -195,6 +195,12 @@ namespace graphene { namespace app { */ void broadcast_transaction_with_callback( confirmation_callback cb, const signed_transaction& trx); + /** this version of broadcast transaction registers a callback method that will be called when the transaction is + * included into a block. The callback method includes the transaction id, block number, and transaction number in the + * block. + */ + fc::variant broadcast_transaction_synchronous(const signed_transaction& trx); + void broadcast_block( const signed_block& block ); /** @@ -394,6 +400,7 @@ FC_API(graphene::app::block_api, FC_API(graphene::app::network_broadcast_api, (broadcast_transaction) (broadcast_transaction_with_callback) + (broadcast_transaction_synchronous) (broadcast_block) ) FC_API(graphene::app::network_node_api,