You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
Transaction.from_bytes() returns a correctly-typed but empty instance for the transaction types below: they never override _from_protobuf, so every type-specific field is left at its default with no error or warning (common fields, signatures and the original body bytes are restored by the base class, so execution still works β inspection does not). Part of #2179; the dispatch-map fixes and the round-trip test harness land in #2614 first.
Implement _from_protobuf for each affected class as the exact field-for-field inverse of its build_transaction_body(), then remove the xfail markers for these types in the round-trip harness from #2614.
This is inverse-serialization contract work β please research the pattern before coding; do not code from this issue title alone, and do not ship the first AI-generated attempt that runs. Reviewers check inverse fidelity per field.
The reference implementations: FileCreateTransaction._from_protobuf (src/hiero_sdk_python/file/file_create_transaction.py) and TransferTransaction._from_protobuf (src/hiero_sdk_python/transaction/transfer_transaction.py). Your implementation must follow their structure exactly: call super()._from_protobuf(...), then restore type-specific fields from the body.
Each affected class's build_transaction_body() β your _from_protobuf is its exact inverse. Reuse the SDK's existing _from_proto converters (AccountId, TokenId, keys, β¦); never hand-parse a submessage that already has one.
The generated proto message for each body (src/hiero_sdk_python/hapi/services/) β learn which fields are optional (guard with HasField so unset stays None) versus plain scalars/repeated.
ScheduleCreateTransaction is the hardest case in #2179: its body embeds a SchedulableTransactionBody (the inner scheduled transaction). Research how schedule_info.py and the other SDKs (JS/Java ScheduleCreateTransaction.fromProtobuf) handle the inner body before deciding on an approach, and explain your choice in the PR.
Constraints / acceptance criteria:
For each class: build with all fields set β freeze β to_bytes() β from_bytes() β every type-specific field equals the original
Unset optional fields come back as None/empty, not proto defaults
restored.to_bytes() stays byte-identical to the original (no re-serialization of the body)
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.
β οΈ 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.
π‘οΈ Quality & Review Standards
Advanced PRs must be "safe, maintainable, architecturally sound, and production-ready."
Architectural Fit: The solution must fit naturally into the existing SDK abstractions.
Security & Correctness: Evaluate all logic for injection risks, state corruption, or thread-safety issues.
Maintainability: Code must be short and clear enough for any other maintainer to debug without your assistance.
Backward Compatibility: Public API signatures must be preserved. If a breaking change is required, it must be explicitly managed through a deprecation cycle.
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.
π§βπ¬ 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
Transaction.from_bytes()returns a correctly-typed but empty instance for the transaction types below: they never override_from_protobuf, so every type-specific field is left at its default with no error or warning (common fields, signatures and the original body bytes are restored by the base class, so execution still works β inspection does not). Part of #2179; the dispatch-map fixes and the round-trip test harness land in #2614 first.Affected classes:
ScheduleCreateTransaction(src/hiero_sdk_python/schedule/schedule_create_transaction.py)ScheduleSignTransaction(src/hiero_sdk_python/schedule/schedule_sign_transaction.py)ScheduleDeleteTransaction(src/hiero_sdk_python/schedule/schedule_delete_transaction.py)π‘ Expected Solution
Implement
_from_protobuffor each affected class as the exact field-for-field inverse of itsbuild_transaction_body(), then remove thexfailmarkers for these types in the round-trip harness from #2614.ScheduleCreateTransaction._from_protobufScheduleSignTransaction._from_protobufScheduleDeleteTransaction._from_protobufπ Background Research
This is inverse-serialization contract work β please research the pattern before coding; do not code from this issue title alone, and do not ship the first AI-generated attempt that runs. Reviewers check inverse fidelity per field.
FileCreateTransaction._from_protobuf(src/hiero_sdk_python/file/file_create_transaction.py) andTransferTransaction._from_protobuf(src/hiero_sdk_python/transaction/transfer_transaction.py). Your implementation must follow their structure exactly: callsuper()._from_protobuf(...), then restore type-specific fields from the body.build_transaction_body()β your_from_protobufis its exact inverse. Reuse the SDK's existing_from_protoconverters (AccountId,TokenId, keys, β¦); never hand-parse a submessage that already has one.src/hiero_sdk_python/hapi/services/) β learn which fields areoptional(guard withHasFieldso unset staysNone) versus plain scalars/repeated.π οΈ Implementation Notes
ScheduleCreateTransactionis the hardest case in #2179: its body embeds aSchedulableTransactionBody(the inner scheduled transaction). Research howschedule_info.pyand the other SDKs (JS/JavaScheduleCreateTransaction.fromProtobuf) handle the inner body before deciding on an approach, and explain your choice in the PR.Constraints / acceptance criteria:
to_bytes()βfrom_bytes()β every type-specific field equals the originalNone/empty, not proto defaultsrestored.to_bytes()stays byte-identical to the original (no re-serialization of the body)Part of #2179. Blocked by #2614.
π¬ Technical Domains
.protofiles,_to_proto()/_from_proto()correctness)_require_not_frozen)π§ 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
_Executable,Transaction, andQuerybase classes.β±οΈ Timeline & Workflow
π‘οΈ Quality & Review Standards
Advanced PRs must be "safe, maintainable, architecturally sound, and production-ready."
β PR Quality Checklist
Before opening your PR, the contributor must confirm:
π Resources & Support
References:
Python SDK References:
π Stuck?