Reduce size and cost of AccessTokenConsumer #47
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.
Replaces all of the code for verifying access tokens in the consumer contract with a single
consumeAccessToken
library function which extracts the access token and signature from the call context. Also changes the solc version to 0.8.24 and enables viaIR.The main improvement here is in getting rid of solc's handling of encoding, which is highly inefficient. It also avoids allocating any memory during this process, which will have significant savings for any inheriting contracts that use a lot of memory, as the current version allocates 742 bytes of memory permanently, making contracts automatically be past the point of linear memory costs.
With these changes, here is the gas and code size diff for the
MockConsumer
contract - it reduces the size by ~60% and the gas by ~3-4%:Here is the diff if the solc version is kept at 0.8.13 and viaIR is kept disabled - most of the gas savings remain intact but codesize is only reduced ~30%: