Optimized gas usage when writing objects #633
Merged
+28
−36
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.
Why This Should Be Merged
As discussed in Issue #613 , I tested various methods for allocating objects, evaluating each for gas optimization to determine the most efficient approach.
How This Works
When assigning mappings within an object, individually assigning each item proved more gas-efficient than assigning the entire object at once. For objects without mappings, however, assigning the whole object was generally more efficient.
How This Was Tested
I ran comprehensive tests, with the following results showing gas usage improvements:
testCumulativeChurnRegistrationAndEndValidation()
testForceInitializeEndDelegation()
testForceInitializeEndDelegationInsufficientUptime()
testForceInitializeEndValidation()
testForceInitializeEndValidationInsufficientUptime()
testInitialWeightsTooLow()
Documentation
Code has been updated as noted in Issue #628.
@cam-schultz Avoiding a branched object increased gas costs for standard operations but provided significant savings during revert scenarios. For example, in
testInitialWeightsTooLow()
, gas usage decreased from 5,446,569 to 5,434,967, saving approximately 12K gas from the previous adjustment and totalling a ~74K gas reduction. Thanks for recommending this change!