-
Notifications
You must be signed in to change notification settings - Fork 193
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(bank): fix gas invariant wrapper to actually charge gas #2140
Conversation
WalkthroughThe pull request introduces modifications to the EVM module's bank extension in the Nibiru blockchain. The changes focus on refining gas consumption tracking and state database synchronization. The Changes
Possibly related PRs
Suggested reviewers
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
⏰ Context from checks skipped due to timeout of 90000ms (5)
🔇 Additional comments (1)
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #2140 +/- ##
==========================================
- Coverage 64.99% 64.96% -0.04%
==========================================
Files 274 274
Lines 21767 21757 -10
==========================================
- Hits 14148 14134 -14
- Misses 6645 6650 +5
+ Partials 974 973 -1
|
It is charging gas already. What the function does is only factor in the gas from using the underlying base bank keeper. I don't think you |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
x/evm/keeper/bank_extension.go (1)
171-173
: Consider documenting the gas consumption guaranteesThe implementation provides strong guarantees about deterministic gas consumption, which is crucial for blockchain operations. Consider adding documentation that explicitly states:
- The gas consumption remains deterministic regardless of StateDB status
- The base operation gas is accurately tracked and charged
- The infinite gas meter is used safely with proper reconciliation
Add a code comment explaining the gas reconciliation mechanism:
ctx = ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) + + // Track base operation gas consumption separately and reconcile in defer block + // to ensure deterministic gas charging regardless of StateDB statusAlso applies to: 176-182
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
CHANGELOG.md
(1 hunks)x/evm/keeper/bank_extension.go
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- CHANGELOG.md
🧰 Additional context used
📓 Learnings (1)
x/evm/keeper/bank_extension.go (1)
Learnt from: Unique-Divine
PR: NibiruChain/nibiru#2119
File: x/evm/keeper/bank_extension.go:0-0
Timestamp: 2024-12-06T16:10:34.174Z
Learning: In `x/evm/keeper/bank_extension.go`, assigning a new `GasMeter` to the context within the `NibiruBankKeeper.ForceGasInvariant` function is intentional and acceptable. This ensures that subsequent operations do not affect the parent `ctx`'s gas consumption.
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: integration-tests
🔇 Additional comments (1)
x/evm/keeper/bank_extension.go (1)
171-173
: LGTM: Gas meter change prevents panics while maintaining deterministic gas consumptionThe switch to infinite gas meter is a valid fix that prevents potential panics during deferred execution while still ensuring deterministic gas consumption through the reconciliation in the defer block. This aligns with the PR objective to fix gas charging behavior.
Let's verify the gas consumption behavior:
✅ Verification successful
Verified: Gas consumption remains deterministic with infinite gas meter
The test suite comprehensively validates that:
- Gas consumption is properly tracked and measured
- Operations maintain consistent gas usage across different scenarios
- The deferred gas reconciliation works correctly
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Check for any test cases validating gas consumption rg -A 5 "TestGasConsumed.*"Length of output: 2091
Script:
#!/bin/bash # Description: Check test implementations for gas consumption validation ast-grep --pattern 'func (s *Suite) TestGasConsumedInvariant$$$($$$) { $$$ }' # Also check the test struct definition rg "type GasConsumedInvariantScenario struct" -A 10Length of output: 823
Script:
#!/bin/bash # Description: Check gas consumption measurement and test execution rg "gasConsumed.*:=" -B 2 -A 5 x/evm/keeper/bank_extension_test.go rg "WithGasMeter" -B 2 -A 5 x/evm/keeper/bank_extension_test.goLength of output: 1602
The bank keeper extension was charging zero gas for its operations.
Related: #2119
Summary by CodeRabbit
New Features
Bug Fixes
Tests
Documentation