diff --git a/libraries/wallet/include/graphene/wallet/wallet.hpp b/libraries/wallet/include/graphene/wallet/wallet.hpp index 952b1b331b..a8d9c74751 100644 --- a/libraries/wallet/include/graphene/wallet/wallet.hpp +++ b/libraries/wallet/include/graphene/wallet/wallet.hpp @@ -443,9 +443,21 @@ class wallet_api /** * @ingroup Transaction Builder API */ - signed_transaction propose_builder_transaction(transaction_handle_type handle, - time_point_sec expiration = time_point::now() + fc::minutes(1), - uint32_t review_period_seconds = 0, bool broadcast = true); + signed_transaction propose_builder_transaction( + transaction_handle_type handle, + time_point_sec expiration = time_point::now() + fc::minutes(1), + uint32_t review_period_seconds = 0, + bool broadcast = true + ); + + signed_transaction propose_builder_transaction2( + transaction_handle_type handle, + string account_name_or_id, + time_point_sec expiration = time_point::now() + fc::minutes(1), + uint32_t review_period_seconds = 0, + bool broadcast = true + ); + /** * @ingroup Transaction Builder API */ @@ -1469,6 +1481,7 @@ FC_API( graphene::wallet::wallet_api, (preview_builder_transaction) (sign_builder_transaction) (propose_builder_transaction) + (propose_builder_transaction2) (remove_builder_transaction) (is_new) (is_locked) diff --git a/libraries/wallet/wallet.cpp b/libraries/wallet/wallet.cpp index 3858f4c145..977e1dc5e8 100644 --- a/libraries/wallet/wallet.cpp +++ b/libraries/wallet/wallet.cpp @@ -821,9 +821,10 @@ class wallet_api_impl return _builder_transactions[transaction_handle] = sign_transaction(_builder_transactions[transaction_handle], broadcast); } - signed_transaction propose_builder_transaction(transaction_handle_type handle, - time_point_sec expiration = time_point::now() + fc::minutes(1), - uint32_t review_period_seconds = 0, bool broadcast = true) + signed_transaction propose_builder_transaction( + transaction_handle_type handle, + time_point_sec expiration = time_point::now() + fc::minutes(1), + uint32_t review_period_seconds = 0, bool broadcast = true) { FC_ASSERT(_builder_transactions.count(handle)); proposal_create_operation op; @@ -838,6 +839,28 @@ class wallet_api_impl return trx = sign_transaction(trx, broadcast); } + + signed_transaction propose_builder_transaction2( + transaction_handle_type handle, + string account_name_or_id, + time_point_sec expiration = time_point::now() + fc::minutes(1), + uint32_t review_period_seconds = 0, bool broadcast = true) + { + FC_ASSERT(_builder_transactions.count(handle)); + proposal_create_operation op; + op.fee_paying_account = get_account(account_name_or_id).get_id(); + op.expiration_time = expiration; + signed_transaction& trx = _builder_transactions[handle]; + std::transform(trx.operations.begin(), trx.operations.end(), std::back_inserter(op.proposed_ops), + [](const operation& op) -> op_wrapper { return op; }); + if( review_period_seconds ) + op.review_period_seconds = review_period_seconds; + trx.operations = {op}; + _remote_db->get_global_properties().parameters.current_fees->set_fee( trx.operations.front() ); + + return trx = sign_transaction(trx, broadcast); + } + void remove_builder_transaction(transaction_handle_type handle) { _builder_transactions.erase(handle); @@ -2681,11 +2704,25 @@ signed_transaction wallet_api::sign_builder_transaction(transaction_handle_type return my->sign_builder_transaction(transaction_handle, broadcast); } -signed_transaction wallet_api::propose_builder_transaction(transaction_handle_type handle, time_point_sec expiration, uint32_t review_period_seconds, bool broadcast) +signed_transaction wallet_api::propose_builder_transaction( + transaction_handle_type handle, + time_point_sec expiration, + uint32_t review_period_seconds, + bool broadcast) { return my->propose_builder_transaction(handle, expiration, review_period_seconds, broadcast); } +signed_transaction wallet_api::propose_builder_transaction2( + transaction_handle_type handle, + string account_name_or_id, + time_point_sec expiration, + uint32_t review_period_seconds, + bool broadcast) +{ + return my->propose_builder_transaction2(handle, account_name_or_id, expiration, review_period_seconds, broadcast); +} + void wallet_api::remove_builder_transaction(transaction_handle_type handle) { return my->remove_builder_transaction(handle);