algorand / java-algorand-sdk

Algorand SDK for Java7+ to interact with the Algorand network
https://algorand.github.io/java-algorand-sdk/
MIT License
68 stars 69 forks source link

Serialization/Deserialization of Transaction object resets fee to 1000. #362

Open egieseke opened 2 years ago

egieseke commented 2 years ago

Subject of the issue

Fix Transaction Java serialization to preserve the fee value. In group transactions, fees can be paid by a single party in the transaction, so it is important to be able to specify a 0 transaction fee for other parties.

Your environment

Java SDK v 1.14.0

Steps to reproduce

  1. Set the Transaction fee to 0.
  2. Serialize and deserialize the transaction.
  3. Note that the transaction fee is 1000, rather than 0.

Expected behavior

The transaction fee should remain what was set.

Actual behavior

The transaction fee is reset to 1000 after serialization/deserialization, the set value is lost.

winder commented 2 years ago

Could you provide a code sample?

winder commented 1 year ago

Here's an example showing the failure:

        @Test
        public void TxnZeroFeeEncodeDecode() throws Exception {
            Transaction tx = Transaction.PaymentTransactionBuilder()
                    .sender(DEFAULT_ACCOUNT.getAddress())
                    .flatFee(0)
                    .firstValid(1)
                    .lastValid(10)
                    .amount(1)
                    .genesisHash(new Digest())
                    .receiver(DEFAULT_ACCOUNT.getAddress())
                    .build();

            assertThat(tx.fee).isEqualTo(0);

            String encoded2 = Encoder.encodeToJson(tx);
            Transaction jsonTxn = Encoder.decodeFromJson(encoded2, Transaction.class);
            assertThat(jsonTxn.fee).isEqualTo(0);

            byte[] encoded = Encoder.encodeToMsgPack(tx);
            Transaction msgpTxn = Encoder.decodeFromMsgPack(encoded, Transaction.class);
            assertThat(msgpTxn.fee).isEqualTo(0);
        }
FabioRagno commented 2 months ago

This might solve the issue