hashgraph / hedera-sdk-rust

The Hederaβ„’ Rust SDK
Apache License 2.0
42 stars 14 forks source link

FileCreate/FileUpdate automatic chunking #835

Open jbair06 opened 2 months ago

jbair06 commented 2 months ago

πŸ†•πŸ₯ First Timers Only

This issue is reserved for people who have never contributed to Hedera or any open source project in general. We know that creating a pull request (PR) is a major barrier for new contributors. The goal of this issue and all other issues labeled by 'good first issue' is to help you make your first contribution to Hedera.

πŸ‘Ύ Description of the issue

When creating or updating a file using the FileCreateTransaction or FileUpdateTransaction, if the contents are too large for a single transaction, a FileAppendTransaction is required to be created in addition to the FileCreate/FileUpdate.

FileAppendTransaction, on the other hand, can handle a large content because it does chunking of that content internally. It would be good to have FileCreate and FileUpdate to have this same functionality. This would allow for a single transaction to create or update a file with a large content.

Solution

Refactor FileCreateTransaction and FileUpdateTransaction to share the new pub trait FileTransaction which should include an append method to store additional transactions when the content exceeds 1024 kB. Refer to FileAppendTransaction for an example of how to chunk the content.

Implementation

  1. Create a new pub trait FileTransaction with append method (for new transactions).
  2. Create a base struct FileTransactionBase that implements FileTransaction with set_contents method to handle large files by creating multiple transactions.
  3. Update FileCreateTransaction and FileUpdateTransaction to implement FileTransaction
  4. Create tests to verify the new functionality (unit tests and integration tests)

πŸ“‹ Step by step guide to do a contribution

If you have never contributed to an open source project at GitHub, the following step-by-step guide will introduce you to the workflow. More information and concrete samples for shell commands for each step can be found in our CONTRIBUTING.md file. A more detailed general documentation of the GitHub PR workflow can be found here.

πŸŽ‰ Contribute to Hacktoberfest

Solve this issue as part of the Hacktoberfest event and get a chance to receive cool goodies like a T-Shirt. 🎽

πŸ€” Additional Information

If you have any questions, just ask us directly in this issue by adding a comment. You can join our community chat at Discord. A general manual about open-source contributions can be found here.

mrswastik-robot commented 1 month ago

hey @hendrikebbers @RickyLB , can I work on this issue, I have a very little experience with Rust though

RickyLB commented 1 month ago

@mrswastik-robot You may! Feel free to ask any questions and i'll answer to the best of my ability.

mrswastik-robot commented 3 weeks ago

hii @RickyLB, I have tried to write the logic for the chunking of large content in the file_create_transaction.rs file and also wrote the test case for it, but I have not been able to pass the test case for it and it's giving me the error:

thread 'file::file_create_transaction::tests::serialize_large_contents' panicked at src/file/file_create_transaction.rs:458:20: calledResult::unwrap()on anErrvalue: NoPayerAccountOrTransactionId

should I create a PR so that you can see the modified code and then I can make the requested changes?

RickyLB commented 3 weeks ago

Hey @mrswastik-robot,

Go ahead and create a PR, and i'll take a look at it. Thank you!

mrswastik-robot commented 3 weeks ago

@RickyLB , I have raised the PR, you can have a look into it, I will be more than happy to make the requested changes once you review it.