diff --git a/core/protobuf_protocol_impl.hpp b/core/protobuf_protocol_impl.hpp index 61a51ef300898e16429aad6e15650187f16bc780..e5084fa1cb3939c5ec6003a1569ba5502474de2a 100644 --- a/core/protobuf_protocol_impl.hpp +++ b/core/protobuf_protocol_impl.hpp @@ -19,7 +19,7 @@ public: std::vector<std::string> cpp_operation_get_impacted_accounts(const std::string& operation) const; std::vector<std::string> cpp_transaction_get_impacted_accounts(const std::string& transaction) const; - binary_data cpp_generate_binary_transaction_metadata(const std::string& transaction, bool use_hf26_serialization)const; + binary_data cpp_generate_binary_transaction_metadata(const std::string& transaction, bool use_hf26_serialization, bool strip_to_unsigned_transaction)const; binary_data cpp_generate_binary_operation_metadata(const std::string& operation, bool use_hf26_serialization)const; result cpp_validate_operation(const std::string& operation); @@ -28,7 +28,7 @@ public: result cpp_calculate_legacy_transaction_id(const std::string& transaction); result cpp_calculate_sig_digest(const std::string& transaction, const std::string& chain_id); result cpp_calculate_legacy_sig_digest(const std::string& transaction, const std::string& chain_id); - result cpp_serialize_transaction(const std::string& transaction); + result cpp_serialize_transaction(const std::string& transaction, bool strip_to_unsigned_transaction); result cpp_deserialize_transaction(const std::string& transaction); required_authority_collection_t cpp_collect_transaction_required_authorities(const std::string& transaction); diff --git a/core/protobuf_protocol_impl.inl b/core/protobuf_protocol_impl.inl index 40784363d9127e51d638f639e6b3ae9eabe744f8..d61093f0a835a6befa650af4ab45eb8980b08a16 100644 --- a/core/protobuf_protocol_impl.inl +++ b/core/protobuf_protocol_impl.inl @@ -480,13 +480,14 @@ std::vector<std::string> proto_protocol_impl<FoundationProvider>::cpp_transactio } template <class FoundationProvider> -binary_data proto_protocol_impl<FoundationProvider>::cpp_generate_binary_transaction_metadata(const std::string& transaction, bool use_hf26_serialization) const +binary_data proto_protocol_impl<FoundationProvider>::cpp_generate_binary_transaction_metadata(const std::string& transaction, bool use_hf26_serialization, bool strip_to_unsigned_transaction) const { protocol_impl<FoundationProvider> provider; return provider.cpp_generate_binary_transaction_metadata( cpp_proto_to_api_impl(transaction), - use_hf26_serialization + use_hf26_serialization, + strip_to_unsigned_transaction ); } @@ -585,13 +586,14 @@ typename proto_protocol_impl<FoundationProvider>::required_authority_collection_ } template <class FoundationProvider> -result proto_protocol_impl<FoundationProvider>::cpp_serialize_transaction(const std::string& transaction) +result proto_protocol_impl<FoundationProvider>::cpp_serialize_transaction(const std::string& transaction, bool strip_to_unsigned_transaction) { return method_wrapper([&](result& _result) { protocol_impl<FoundationProvider> provider; _result = provider.cpp_serialize_transaction( - cpp_proto_to_api_impl(transaction) + cpp_proto_to_api_impl(transaction), + strip_to_unsigned_transaction ); }); } diff --git a/core/protocol_impl.hpp b/core/protocol_impl.hpp index 83ba9ea5514ea306f0c07f1e0a7f8b5c152f86b7..8ea6d72b537268eeaa5a360d4fa57eaf73cefc82 100644 --- a/core/protocol_impl.hpp +++ b/core/protocol_impl.hpp @@ -38,7 +38,7 @@ public: std::vector<std::string> cpp_operation_get_impacted_accounts(const std::string& operation) const; std::vector<std::string> cpp_transaction_get_impacted_accounts(const std::string& transaction) const; - binary_data cpp_generate_binary_transaction_metadata(const std::string& transaction, bool use_hf26_serialization)const; + binary_data cpp_generate_binary_transaction_metadata(const std::string& transaction, bool use_hf26_serialization, bool strip_to_unsigned_transaction)const; binary_data cpp_generate_binary_operation_metadata(const std::string& operation, bool use_hf26_serialization)const; result cpp_validate_operation(const std::string& operation); @@ -59,8 +59,11 @@ public: /** Allows to perform binary serialization of specified transaction. * Uses HF26 serialization form. + * + * @param transaction - JSON form of transaction to serialize + * @param strip_to_unsigned_transaction - if true, then only unsigned part of transaction will be serialized (signature container is always stripped) */ - result cpp_serialize_transaction(const std::string& transaction); + result cpp_serialize_transaction(const std::string& transaction, bool strip_to_unsigned_transaction); /** Allows to restore a transaction object from HF26 binary serialization form. * Returns a JSON form of deserialized transaction. diff --git a/core/protocol_impl.inl b/core/protocol_impl.inl index f7c76b824a5ed64722d4ab9e9b53830cd96a5763..6c536720c43010fda0679136aaa1cb4adbb2ab73 100644 --- a/core/protocol_impl.inl +++ b/core/protocol_impl.inl @@ -71,13 +71,13 @@ std::vector<std::string> protocol_impl<FoundationProvider>::cpp_transaction_get_ template <class FoundationProvider> inline -binary_data protocol_impl<FoundationProvider>::cpp_generate_binary_transaction_metadata(const std::string& transaction, bool use_hf26_serialization) const +binary_data protocol_impl<FoundationProvider>::cpp_generate_binary_transaction_metadata(const std::string& transaction, bool use_hf26_serialization, bool strip_to_unsigned_transaction) const { fc::variant _v = fc::json::from_string(transaction, fc::json::format_validation_mode::full); hive::protocol::signed_transaction _transaction = _v.as<hive::protocol::signed_transaction>(); - return cpp::generate_binary_transaction_metadata(_transaction, use_hf26_serialization); + return cpp::generate_binary_transaction_metadata(_transaction, use_hf26_serialization, strip_to_unsigned_transaction); } template <class FoundationProvider> @@ -120,7 +120,8 @@ result protocol_impl<FoundationProvider>::cpp_calculate_transaction_id(const std { return method_wrapper([&](result& _result) { - _result.content = get_transaction(transaction).id(hive::protocol::transaction_serialization_type::hf26).str(); + const auto txId = get_transaction(transaction).id(hive::protocol::transaction_serialization_type::hf26); + _result.content = txId.str(); }); } @@ -162,13 +163,13 @@ result protocol_impl<FoundationProvider>::cpp_calculate_legacy_sig_digest(const template <class FoundationProvider> inline -result protocol_impl<FoundationProvider>::cpp_serialize_transaction(const std::string& transaction) +result protocol_impl<FoundationProvider>::cpp_serialize_transaction(const std::string& transaction, bool strip_to_unsigned_transaction) { return method_wrapper([&](result& _result) { const auto _transaction = get_transaction(transaction); - _result.content = serialize_transaction(_transaction); + _result.content = serialize_transaction(_transaction, true, strip_to_unsigned_transaction); }); }