Skip to content

Override freeze_with() in TopicCreateTransaction to apply default autoRenewAccountId behaviorΒ #2299

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

The current implementation of TopicCreateTransaction does not apply the documented default behavior for autoRenewAccountId.

According to the Hedera documentation:

"If the developer does not explicitly set autoRenewAccount, the SDK will automatically default to using the transaction fee payer account ID for the auto renew account. This is beneficial in the event an admin key is not set."

Reference:
https://docs.hedera.com/hedera/sdks-and-apis/sdks/consensus-service/create-a-topic

Currently, when autoRenewAccountId is not explicitly set, the transaction freezes with auto_renew_account left as None.

This creates a mismatch between the SDK behavior and the documented expectations, and may lead to topic creation behavior that differs from other SDK implementations.

πŸ› οΈ Implementation Notes

  • Override freeze_with() in TopicCreateTransaction to
    • Check whether autoRenewAccount is already set. If not set, verify that:
      • a valid client is provided
      • the client has an operator_account_id
    • Set autoRenewAccount using:
      • transaction_id.account_id if a transaction_id is present
      • otherwise client.operator_account_id
    • Preserve the existing value when autoRenewAccount was explicitly provided by the user.
if client is not None and client.operator_account_id is not None and self.auto_renew_account is  None:
     self.auto_renew_account = (
         self.transaction_id.account_id if self.transaction_id is not None else client.operator_account_id
     )
  • Add the unit test to verify this behavior
  • Update the TCK for create topic transaction to utilize this

🧠 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