Comments (4)
Use vm.getBlockTimestamp
and vm.getBlockNumber
instead of block.number
and block.timestamp
when using via-ir mode, see here to learn more.
from foundry.
In a standard EVM environment, the block number and timestamp are constant in a transaction. Therefore the solidity compiler can use that assumption to optimize the bytecode it generates. However, in a forge test, the block number and timestamp are not constant. Therefore these assumption break, resulting in the bug you are seeing. If you replace block.number
with vm.getBlockTimestamp
you will see the tests works as expected.
In the comment I linked above, there is a link to a solidity issue where you can further discuss this with the solidity team.
from foundry.
@mds1 how is this not a bug?
The release time is stored in a variable.
So why does the emit return the wrong time, the only way this would be possible would be if vm.warp is overriding the stack variable.
from foundry.
ah you're saying a compiler optimization replaced the variable, with the reference, the memory was really references something else.
IMO, you should just depricate warp make a new function like vm.addTimestampSeconds() which just add seconds relative to the timestamp (same for the issue with roll), this way you encapsulate the reference to the block internally, and it will be more intuitive because it masks the edge case.
from foundry.
Related Issues (20)
- forge inspect should show event topics
- Using cast wallet account in forge test
- forge script: "Could not instantiate forked environment with fork url" --rpc-url to local anvil chain HOT 2
- "too many arguments, want at most 2" on custom network HOT 1
- Cheat to save/load the blockchain HOT 1
- Add random cheatcodes HOT 1
- Cleanup build_tx and cast_send HOT 1
- `forge test` is crashing with message: called `Option::unwrap()` on a `None` value HOT 4
- Add support for solc `0.8.26` HOT 1
- docker images for Mac m1-m3, arm HOT 2
- Contract call extremely slow after anvil_reset on a fork hangs HOT 11
- Formatter unable to exit gracefully when evaluating bad syntax
- RuntimeTransport jwt is broken HOT 1
- Failed to read artifacts from forge test HOT 2
- 0 ^ 0 returns 0 HOT 2
- Add support for filecoin
- Can't verify signature with Trezor One HOT 1
- Uncommitted changes HOT 2
- Allow to set an ERC20 token balance using json-rpc in anvil HOT 2
- Forge crashes when running Create2 script HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from foundry.