diff --git a/libraries/wallet/include/graphene/wallet/wallet.hpp b/libraries/wallet/include/graphene/wallet/wallet.hpp index 40161f9152..8b738bd959 100644 --- a/libraries/wallet/include/graphene/wallet/wallet.hpp +++ b/libraries/wallet/include/graphene/wallet/wallet.hpp @@ -376,6 +376,19 @@ class wallet_api */ signed_transaction sign_builder_transaction(transaction_handle_type transaction_handle, bool broadcast = true); + /** + * @ingroup Transaction Builder API + * + * Sign the transaction in a transaction builder and optionally broadcast to the network. + * @param transaction_handle handle of the transaction builder + * @param signing_keys Keys that must be used when signing the transaction + * @param broadcast whether to broadcast the signed transaction to the network + * @return a signed transaction + */ + signed_transaction sign_builder_transaction2(transaction_handle_type transaction_handle, + const vector& signing_keys = vector(), + bool broadcast = true); + /** Broadcast signed transaction * @param tx signed transaction * @returns the transaction ID along with the signed transaction. @@ -1784,6 +1797,7 @@ FC_API( graphene::wallet::wallet_api, (set_fees_on_builder_transaction) (preview_builder_transaction) (sign_builder_transaction) + (sign_builder_transaction2) (broadcast_transaction) (propose_builder_transaction) (propose_builder_transaction2) diff --git a/libraries/wallet/wallet.cpp b/libraries/wallet/wallet.cpp index 034087c714..3c73d7530f 100644 --- a/libraries/wallet/wallet.cpp +++ b/libraries/wallet/wallet.cpp @@ -526,6 +526,13 @@ signed_transaction wallet_api::sign_builder_transaction(transaction_handle_type return my->sign_builder_transaction(transaction_handle, broadcast); } +signed_transaction wallet_api::sign_builder_transaction2(transaction_handle_type transaction_handle, + const vector& explicit_keys, + bool broadcast) +{ + return my->sign_builder_transaction2(transaction_handle, explicit_keys, broadcast); +} + pair wallet_api::broadcast_transaction(signed_transaction tx) { return my->broadcast_transaction(tx); diff --git a/libraries/wallet/wallet_api_impl.hpp b/libraries/wallet/wallet_api_impl.hpp index d98c17c6ea..465c071f0b 100644 --- a/libraries/wallet/wallet_api_impl.hpp +++ b/libraries/wallet/wallet_api_impl.hpp @@ -219,6 +219,9 @@ class wallet_api_impl asset set_fees_on_builder_transaction(transaction_handle_type handle, string fee_asset = GRAPHENE_SYMBOL); transaction preview_builder_transaction(transaction_handle_type handle); signed_transaction sign_builder_transaction(transaction_handle_type transaction_handle, bool broadcast = true); + signed_transaction sign_builder_transaction2(transaction_handle_type transaction_handle, + const vector& signing_keys = vector(), + bool broadcast = true); pair broadcast_transaction(signed_transaction tx); diff --git a/libraries/wallet/wallet_builder.cpp b/libraries/wallet/wallet_builder.cpp index dbcbe12c5d..5dd7f00955 100644 --- a/libraries/wallet/wallet_builder.cpp +++ b/libraries/wallet/wallet_builder.cpp @@ -88,6 +88,15 @@ namespace graphene { namespace wallet { namespace detail { sign_transaction(_builder_transactions[transaction_handle], broadcast); } + signed_transaction wallet_api_impl::sign_builder_transaction2(transaction_handle_type + transaction_handle, const vector& signing_keys, bool broadcast) + { + FC_ASSERT(_builder_transactions.count(transaction_handle)); + + return _builder_transactions[transaction_handle] = + sign_transaction2(_builder_transactions[transaction_handle], signing_keys, broadcast); + } + signed_transaction wallet_api_impl::propose_builder_transaction( transaction_handle_type handle, time_point_sec expiration, uint32_t review_period_seconds, bool broadcast) {