diff --git a/eosiojava/src/main/java/one/block/eosiojava/error/serializationProvider/DeserializePackedTransactionError.java b/eosiojava/src/main/java/one/block/eosiojava/error/serializationProvider/DeserializePackedTransactionError.java new file mode 100644 index 0000000..65fe8a6 --- /dev/null +++ b/eosiojava/src/main/java/one/block/eosiojava/error/serializationProvider/DeserializePackedTransactionError.java @@ -0,0 +1,26 @@ +package one.block.eosiojava.error.serializationProvider; + +import org.jetbrains.annotations.NotNull; + +/** + * Error class is used when there is an exception while attempting to call deserializeTransaction() + * of Serialization Provider + */ +public class DeserializePackedTransactionError extends SerializationProviderError { + + public DeserializePackedTransactionError() { + } + + public DeserializePackedTransactionError(@NotNull String message) { + super(message); + } + + public DeserializePackedTransactionError(@NotNull String message, + @NotNull Exception exception) { + super(message, exception); + } + + public DeserializePackedTransactionError(@NotNull Exception exception) { + super(exception); + } +} diff --git a/eosiojava/src/main/java/one/block/eosiojava/error/serializationProvider/SerializePackedTransactionError.java b/eosiojava/src/main/java/one/block/eosiojava/error/serializationProvider/SerializePackedTransactionError.java new file mode 100644 index 0000000..99d17c5 --- /dev/null +++ b/eosiojava/src/main/java/one/block/eosiojava/error/serializationProvider/SerializePackedTransactionError.java @@ -0,0 +1,26 @@ +package one.block.eosiojava.error.serializationProvider; + +import org.jetbrains.annotations.NotNull; + +/** + * Error class is used when there is an exception while attempting to call serializeTransaction() of + * Serialization Provider + */ +public class SerializePackedTransactionError extends SerializationProviderError { + + public SerializePackedTransactionError() { + } + + public SerializePackedTransactionError(@NotNull String message) { + super(message); + } + + public SerializePackedTransactionError(@NotNull String message, + @NotNull Exception exception) { + super(message, exception); + } + + public SerializePackedTransactionError(@NotNull Exception exception) { + super(exception); + } +} diff --git a/eosiojava/src/main/java/one/block/eosiojava/interfaces/ISerializationProvider.java b/eosiojava/src/main/java/one/block/eosiojava/interfaces/ISerializationProvider.java index 48605a0..b7c23ad 100644 --- a/eosiojava/src/main/java/one/block/eosiojava/interfaces/ISerializationProvider.java +++ b/eosiojava/src/main/java/one/block/eosiojava/interfaces/ISerializationProvider.java @@ -1,11 +1,6 @@ package one.block.eosiojava.interfaces; -import one.block.eosiojava.error.serializationProvider.DeserializeAbiError; -import one.block.eosiojava.error.serializationProvider.DeserializeError; -import one.block.eosiojava.error.serializationProvider.DeserializeTransactionError; -import one.block.eosiojava.error.serializationProvider.SerializeAbiError; -import one.block.eosiojava.error.serializationProvider.SerializeError; -import one.block.eosiojava.error.serializationProvider.SerializeTransactionError; +import one.block.eosiojava.error.serializationProvider.*; import one.block.eosiojava.models.AbiEosSerializationObject; /** @@ -76,4 +71,24 @@ public interface ISerializationProvider { * conversion process. */ String serializeAbi(String json) throws SerializeAbiError; + + /** + * Convenience method to transform a packed transaction (v0) hex string to a JSON string. + * + * @param hex - Hex string representing the packed transaction (v0) to deserialize. + * @return - Deserialized JSON string representing the transaction hex. + * @throws DeserializePackedTransactionError - A deserialization error is thrown if there are any exceptions during the + * * conversion process. + */ + String deserializePackedTransaction(String hex) throws DeserializePackedTransactionError; + + /** + * Convenience method to transform a serialized transaction (v0) JSON string to a hex string. + * + * @param json - JSON string representing the serialized transaction (v0) to serialize. + * @return - Serialized hex string representing the transaction JSON. + * @throws SerializePackedTransactionError - A serialization error is thrown if there are any exceptions during the + * * conversion process. + */ + String serializePackedTransaction(String json) throws SerializePackedTransactionError; } diff --git a/eosiojava/src/main/java/one/block/eosiojava/session/TransactionProcessor.java b/eosiojava/src/main/java/one/block/eosiojava/session/TransactionProcessor.java index adfcd41..4b3f707 100644 --- a/eosiojava/src/main/java/one/block/eosiojava/session/TransactionProcessor.java +++ b/eosiojava/src/main/java/one/block/eosiojava/session/TransactionProcessor.java @@ -15,6 +15,7 @@ import one.block.eosiojava.error.rpcProvider.SendTransactionRpcError; import one.block.eosiojava.error.serializationProvider.DeserializeTransactionError; import one.block.eosiojava.error.serializationProvider.SerializeError; +import one.block.eosiojava.error.serializationProvider.SerializePackedTransactionError; import one.block.eosiojava.error.serializationProvider.SerializeTransactionError; import one.block.eosiojava.error.session.TransactionBroadCastEmptySignatureError; import one.block.eosiojava.error.session.TransactionBroadCastError; @@ -198,6 +199,11 @@ public class TransactionProcessor { */ private boolean isTransactionModificationAllowed; + /** + * Prefix for packed transaction v0 + */ + private static final String PACKED_TRANSACTION_V0_PREFIX = "00"; + /** * Constructor with all provider references from {@link TransactionSession} * @param serializationProvider the serialization provider. @@ -1149,5 +1155,17 @@ public ContextFreeData getContextFreeData() { return this.contextFreeData; } + /** + * Return the current transaction serialized in packed V0 format. + * @return Hex string format for the serialized transaction. + * @throws SerializePackedTransactionError Thrown if error occurs during the serialization of the packed transaction by the provider. + */ + public String getPackedTransactionV0() + throws SerializePackedTransactionError { + String json = Utils.getGson(DateFormatter.BACKEND_DATE_PATTERN).toJson(this.toJSON()); + String packedTransactionV0 = this.serializationProvider.serializePackedTransaction(json); + + return PACKED_TRANSACTION_V0_PREFIX + packedTransactionV0; + } //endregion }