fix(core): fix canonical serialization when outputs are empty #1642
+12
−3
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Context
The Conway-era CDDL specification mandates that optional maps and arrays must be either non-empty or omitted entirely.
However, this rule does not apply to required fields. The transaction outputs array is a required field and must always be present, even if it contains no outputs. The SDK was incorrectly omitting this array when it was empty, leading to invalid transactions. This fix ensures the outputs array is always serialized to maintain compliance.
Additionally, an incorrect falsy check on the TTL value was preventing ttl: 0 from being serialized into core types. Because 0 is a valid TTL, the check has been corrected to properly handle this value.