Skip to content

Create an abstract ChunkedTransaction base class to centralize chunking transaction logicΒ #2300

Description

@manishdait

πŸ§‘β€πŸ”¬ Advanced Issue

Welcome! This is an Advanced Issue touching core SDK architecture.

It is designed for expert contributors who have demonstrated deep architectural understanding and a proven track record of high-quality contributions.

🐞 Problem Description

We currently have two transactions that support chunked execution, TopicMessageSubmitTransaction and FileAppendTransaction.

Both implementations contain a large amount of duplicated logic related to chunk handling, including:

  • Chunk calculation and validation
  • Transaction ID generation for chunks
  • Multi-chunk execution flow
  • Signing management across chunks
  • Chunk iteration and state tracking
  • Body size calculation for all chunks

Introducing a shared abstraction for chunked transactions would help centralize this logic, reduce duplication, and improve long-term maintainability.

πŸ› οΈ Implementation Notes

  • Create an abstract ChunkedTransaction base class that wraps the common chunking behavior shared between TopicMessageSubmitTransaction and FileAppendTransaction.
    • Class should possibly contain following fields:
      • self._current_chunk_index
      • self._transaction_ids
      • self._signing_keys
      • self.chunk_size
      • self.max_chunks
    • Add proper setters for them.
    • The class should also potentially centralize the following methods:
      • freeze_with()
      • execute()
      • execute_all()
      • sign()
      • body_size_all_chunks()
      • _validate_chunking()
class ChunkedTransaction(Transaction, ABC):
    ....
    def get_required_chunks(self) -> int:
        # override this form the transaction
        ...

    @abstractmethod
    def _build_proto_body(self):
        pass
  • The implementation should ensure that chunk-specific transaction IDs and signatures remain deterministic and compatible with existing behavior and did not cause any breaking changes

🧠 Advanced Contributors β€” Prerequisites & Expectations

Caution

Advanced issues are the highest-risk work in this project. We will reject PRs that do not meet these standards.

🏁 Concrete Prerequisites

  • Advanced Language: Proficient with Python.
  • Expertise: Deep architectural understanding of _Executable, Transaction, and Query base classes.
  • Proven History: Successfully completed β‰₯ 10 intermediate issues in this repo.
  • Consistency: β‰₯ 3–4 months of active, human-led contributions to this SDK.

Note

CI/CD Exception: For issues focused on GitHub Actions / Workflows, the repo-specific thresholds above may be waived if the contributor demonstrates advanced-level proficiency in CI/CD.

⚠️ AI Usage Policy

  • Using AI to generate code for Advanced issues is strictly discouraged
  • AI may be used to help explain file relationships, but cannot be the main source of research.
  • Submitting AI-generated or unvalidated code is grounds for immediate closure

⏱️ Timeline & Workflow

  • Typical time: ~1 month / ~50 hours.
  • πŸ”΄ Completing an advanced issue in 1–3 days is a red flag and will likely be rejected.
  • Suggested: Post your proposed architectural approach as a comment and wait for explicit maintainer approval before writing any code.

πŸ”¬ Technical Domains

  • API Client Architecture (request β†’ serialization β†’ execution β†’ response mapping)
  • Backward Compatibility (preserving method signatures, defaults, and return types)
  • Protobuf Alignment (reading .proto files, _to_proto() / _from_proto() correctness)
  • State & Immutability (correct usage of guards like _require_not_frozen)
  • Execution Boundaries (retry logic, backoff, node selection, gRPC deadlines)
  • Testing (unit, integration, mocking, test coverage for edge cases and failure modes)

πŸ›‘οΈ Quality & Review Standards

Advanced PRs must be "safe, maintainable, architecturally sound, and production-ready."

  1. Architectural Fit: The solution must fit naturally into the existing SDK abstractions.
  2. Security & Correctness: Evaluate all logic for injection risks, state corruption, or thread-safety issues.
  3. Maintainability: Code must be short and clear enough for any other maintainer to debug without your assistance.
  4. Backward Compatibility: Public API signatures must be preserved. If a breaking change is required, it must be explicitly managed through a deprecation cycle.
  5. Comprehensive Testing: Must include unit and integration tests covering all new logic paths, edge cases, and failure modes. AI generated tests based on AI generated code is grounds for immediate rejection.

βœ… PR Quality Checklist

Before opening your PR, the contributor must confirm:

  • I have spent the majority of my time researching the problem and solution space extensively, including reviewing relevant code, documentation, and external resources.
  • I understand the system-wide impact of these changes on affected modules and performance.
  • The system design fits with current Hiero SDK architectural approaches.
  • I have tested my changes extensively against both local and network environments.
  • I have verified naming, types, and field ordering against pinned Protobufs.
  • Every line of code is personally understood and explainable.

πŸ“š Resources & Support

References:

Python SDK References:

πŸ†˜ Stuck?

Metadata

Metadata

Assignees

Labels

lang: pythonUses Python programming languageskill: advancedrequires knowledge of multiple areas in the codebase without defined steps to implement or examples

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions