fix: consume gas on ComputeMapKey #5127
Draft
+113
−0
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.
fix: https://github.com/gnolang/gno/security/advisories/GHSA-m7rp-96x5-hvpx
proposition
Two main modification to ComputeMapKey function:
We can see on the benchmarks how gas increases depending on the length of the slice BenchmarkComputeMapKey_Bytes. This gas increase comes entirely from the
Allocator.Allocate().On the other side we have the benchmarks of BenchmarkComputeMapKey_IntArray this as explained before is a slice of integer values. For each element on the array the function is called recursively and then the gas of this benchmark comes from charging a fixed amount for each call (10 gas). This value should still be fine tuned .
GnoVM values benchmarks (before/after)
Environment:
bench-results/values_bench_20260207_175820.txtbench-results/values_bench_20260207_175849.txt