Giter VIP home page Giter VIP logo

Comments (4)

mds1 avatar mds1 commented on June 18, 2024 1

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.

mds1 avatar mds1 commented on June 18, 2024 1

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.

RitzyDevUK avatar RitzyDevUK commented on June 18, 2024

@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.

RitzyDevUK avatar RitzyDevUK commented on June 18, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.