Skip to content

chore: ABIEncoder - docs, tests, cleanup #707

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

Conversation

JeneaVranceanu
Copy link
Collaborator

Summary of Changes

  • Adds documentation for most of the functions in ABIEncoder;
  • Adds tests for convertToBigInt and convertToBigUInt, and tests to check the presence of data offsets required for dynamic bytes;
  • Minor cleanup in the ABIEncoder file.

Test Data or Screenshots

By submitting this pull request, you are confirming the following:
  • I have reviewed the Contribution Guidelines.
  • I have performed a self-review of my own code.
  • I have updated my repository to match the develop branch.
  • I have included test data or screenshots that prove my fix is effective or that my feature works.
  • I have checked that all tests work and swiftlint is not throwing any errors/warnings.

Comment on lines +199 to +210
/// Almost identical to use of `web3.eth.abi.encodeParameter` in web3.js.
/// Calling `web3.eth.abi.encodeParameter('string','test')` in web3.js will return the following:
/// ```
/// 0x0000000000000000000000000000000000000000000000000000000000000020
/// 0000000000000000000000000000000000000000000000000000000000000004
/// 7465737400000000000000000000000000000000000000000000000000000000
/// ```
/// but calling `ABIEncoder.encodeSingleType(type: .string, value: "test" as AnyObject)` will return:
/// ```
/// 0x0000000000000000000000000000000000000000000000000000000000000004
/// 7465737400000000000000000000000000000000000000000000000000000000
/// ```
Copy link
Collaborator Author

@JeneaVranceanu JeneaVranceanu Dec 9, 2022

Choose a reason for hiding this comment

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

This is basically what triggered me to write docs and make sure people will know how each function works.
Don't recall exactly what I was implementing but I expected that encodeSingleType would encode dynamic types with data offset in front of the data itself but it didn't happen. Was wondering why? Is it a bug? Appears that it's just different from web3.js.

The 0x0000000000000000000000000000000000000000000000000000000000000020 in the first code block is the data offset. See tests for more examples.

While writing the doc I also came up with another idea that will allow us to get the ABI with data offset from this function. The idea is the following: add a new input argument dynamicDataOffset that will be true by default

encodeSingleType(type: ABI.Element.ParameterType, value: AnyObject, dynamicDataOffset: Bool = true)

Uses of this function across the library will have to be updated to with encodeSingleType(..., dynamicDataOffset: false).

On the other hand, this update is a breaking change that will be silently pushed and could potentially break other projects. So as a win-win situation I think it would make sense to push that idea with the new argument to the v4.

Fix DocC comment layout.
Delete redundant empty line within DocC comment.
@yaroslavyaroslav
Copy link
Collaborator

Looks like I've had broke the test file when merged a previous PR not in its turn, sorry.

@JeneaVranceanu
Copy link
Collaborator Author

Looks like I've had broke the test file when merged a previous PR not in its turn, sorry.

Should be fixed now. Let's wait for the CI.

@yaroslavyaroslav yaroslavyaroslav merged commit e802881 into web3swift-team:develop Dec 13, 2022
@JeneaVranceanu JeneaVranceanu deleted the chore/abiencoder-docs+tests branch December 13, 2022 23:11
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