Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: _fromProtobuf functions where google primitive wrappers used #2657

Conversation

SvetBorislavov
Copy link
Contributor

Description:
This pull request updates the _fromProtobuf function of the following classes:

  • AccountUpdateTransaction
  • ContractFunctionResult
  • ContractUpdateTransaction
  • FileUpdateTransaction
  • NodeUpdateTransaction
  • TokenTransfer
  • TokenUpdateNftsTransaction
  • TokenUpdateTransaction
  • TopicUpdateTransaction

This change is required because the protobufs for the bodies (or the data) of these classes use the primitive wrappers
These wrappers are necessary when the property is nullable. Since the wrapper is a sub-message with a value it assumed that:

  • if the sub-message is null, the value is null
  • if the sub-message does not contain the value property, the value is null
  • if the sub-message contains the value property, you should use that value

The problem with the current implementation is that it checks whether the wrapper's value is null, which is incorrect because the wrapper's prototype stores the property's default value.
Because the prototype has set the value to default one, if the protobuf, does not contain value (it is null), the instance still has the value property, which is not enumerable but it is accessible.

The correct check is to ensure that the instance has its own property value and not a derived one.

The current _makeTransactionData implementation hides the actual problem because it strips the value if it is not set at all, but the problem occurs when these values are explicitly set (correctly) to an object with a value property that can be undefined

…pdateTransaction

Signed-off-by: Svetoslav Borislavov <svetoslav.borislavov@limechain.tech>
Signed-off-by: Svetoslav Borislavov <svetoslav.borislavov@limechain.tech>
Signed-off-by: Svetoslav Borislavov <svetoslav.borislavov@limechain.tech>
Signed-off-by: Svetoslav Borislavov <svetoslav.borislavov@limechain.tech>
Signed-off-by: Svetoslav Borislavov <svetoslav.borislavov@limechain.tech>
Signed-off-by: Svetoslav Borislavov <svetoslav.borislavov@limechain.tech>
Signed-off-by: Svetoslav Borislavov <svetoslav.borislavov@limechain.tech>
Signed-off-by: Svetoslav Borislavov <svetoslav.borislavov@limechain.tech>
Signed-off-by: Svetoslav Borislavov <svetoslav.borislavov@limechain.tech>
Signed-off-by: Svetoslav Borislavov <svetoslav.borislavov@limechain.tech>
Signed-off-by: Svetoslav Borislavov <svetoslav.borislavov@limechain.tech>
Signed-off-by: Svetoslav Borislavov <svetoslav.borislavov@limechain.tech>
@SvetBorislavov SvetBorislavov requested review from a team as code owners November 20, 2024 12:54
Copy link
Contributor

@0xivanov 0xivanov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@ivaylonikolov7 ivaylonikolov7 merged commit e7ad84a into main Nov 20, 2024
11 checks passed
@ivaylonikolov7 ivaylonikolov7 deleted the fix-from-protobuf-functions-where-google-primitive-wrappers-used branch November 20, 2024 14:21
This was referenced Nov 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants