Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    WORAPOB BOONPRAPAI
    @SAYONG
    @jacqueswww Thanks for your reply.
    The fixture will generate transactions data every time it run the new test right?
    but the pre-existing chian data is quite large (~10k - 100k transactions), it would take a lot time to generate.
    What I want to do is generate all blocks once and can reuse it every time run test again.
    Jacques Wagener
    @jacqueswww
    yes, so would be a fixture for the whole test
    I am not aware of a dump to disk for eth-tester
    WORAPOB BOONPRAPAI
    @SAYONG
    No problem, I'll continue dig int to it :)
    Voith Mascarenhas
    @voith
    @SAYONG eth-tester by default uses the MemoryDb(eth.db.backends.memory.MemoryDB) backend for storage. You can change this by setting environment variable CHAIN_DB_BACKEND_CLASS to LevelDb(eth.db.backends.level.LevelDB) backend. You’ll have to play around it a bit to get it to work with a pre-filled state.
    You can start by looking at this code: https://github.com/ethereum/eth-tester/blob/c1a2aee7cb66a85f005369fe6e4a4b6f84c4abf6/eth_tester/backends/pyevm/main.py#L174
    Jacques Wagener
    @jacqueswww
    cool!
    WORAPOB BOONPRAPAI
    @SAYONG
    @voith Thanks, I'll try it out
    Just some guy
    @fubuloubu
    Is levelDB faster?
    (like a lot faster?)
    Voith Mascarenhas
    @voith
    @fubuloubu I don’t know about the performance of levelDb.
    But in order to solve the problem of pre-filled state, we need a persistent db. The default MemoryDB doesn’t persist data.
    Also IMO, levelDbcannot be faster than MemoryDb as levelDb writes to disk.
    Just some guy
    @fubuloubu
    Fair
    Jason Carver
    @carver
    eth-tester with istanbul support is out: v0.2.0-beta.3 @/all
    Just some guy
    @fubuloubu
    Wait, does beta mean a release is planned?
    *first release
    Voith Mascarenhas
    @voith
    @fubuloubu Haven’t eth-tester releases always been beta? https://github.com/ethereum/eth-tester/releases
    Just some guy
    @fubuloubu
    Oh yeah, py-evm is what I was thinking of
    Just some guy
    @fubuloubu
    Does this actually work?
    Just some guy
    @fubuloubu
    yup, appears it does
    does eth-tester use whatever the latest VM class is?
    Jason Carver
    @carver
    yup
    someday we'll get it to load genesis files (need to move the genesis tooling to py-evm first
    Jason Carver
    @carver
    @/all eth-tester v0.3.0-beta.1 is released, with default Istanbul support, and the latest py-evm changes:
    Just some guy
    @fubuloubu
    Nice!
    Sumon Bormon Singh(Dark Prince)
    @BORMONSUMON_twitter
    hello....all keep me your help ,support,advice,assist,security me
    Konstantin Yatsenko
    @kyatsenko
    I have an Ethereum based blockchain and test it by using web3.py API. I wonder, can eth-tester somehow help me to do this easier? Thnks.
    Jacques Wagener
    @jacqueswww
    if it's a ETH/ETC eth-tester can emulate it. But if it's EVMlike i.e. not vanilla ETH EVM then no
    Sumon Bormon Singh(Dark Prince)
    @BORMONSUMON_twitter
    Hello World #all 🙏

    all

    Ben Scherrey
    @scherrey
    Does eth-tester have a mechanism where I can jump back to a previous block and start from that known state? Seems an obvious and very handy capability for thorough testing of all contract conditions.
    Just some guy
    @fubuloubu
    you can use a snapshot
    Ben Scherrey
    @scherrey
    How is that done?
    Ben Scherrey
    @scherrey
    Ah found it - many thanks!
    Ben Scherrey
    @scherrey
    Is it possible from a tx_dict to determine what the name of the public function called for that transaction was?
    Just some guy
    @fubuloubu
    I think the ABI selector might be in there, you'd have to know what those 4 bytes corresponded to
    probably just better off looking directly at the transaction data though
    Peteris Erins
    @Pet3ris
    Eth-tester seems to use a custom MainnetTesterNoProofChain(MiningChain) instead of the MainnetTesterChain provided in py-evm. What's the difference between the two?
    Just some guy
    @fubuloubu
    I believe it skips the PoW
    that's important because if you do things like timewarping like 1000 blocks, even very low difficulty PoW becomes a limiting factor
    Peteris Erins
    @Pet3ris
    @fubuloubu that makes sense, but it seems from the documentation that MainnetTesterChain already has this:
    class MainnetTesterChain(BaseMainnetTesterChain):
        """
        This class is intended to be used for in-memory test chains.  It
        explicitely bypasses the proof of work validation to allow for instant
        block mining.
        It exposes one additional API `configure_forks` to allow for in-flight
        configuration of fork rules.
        """
    Jason Carver
    @carver
    eth-tester has been around for a long time. The no-proof-chain might just predate the py-evm one. Also, IIRC eth-tester starts with the latest hard-fork definition at block 0, and doesn't use mainnet genesis balances.
    Also, it's modified so that the gas limit doesn't trend down as you use it (since you typically only put one transaction per block, which would normally cause downward movement of the block gas limit)
    https://github.com/ethereum/eth-tester/blob/51a208e02205639c37108873ccfddc4d845a0ddd/eth_tester/backends/pyevm/main.py#L170-L175
    Peteris Erins
    @Pet3ris
    @carver ah - that makes a lot of sense, thanks!
    Peteris Erins
    @Pet3ris
    Why does this sequence produce an error? Is this a bug?
    >>> genesis_params = eth_tester.PyEVMBackend._generate_genesis_params(overrides=dict(block_number=1000))
    >>> backend = eth_tester.PyEVMBackend(genesis_params)
    >>> w3 = web3.Web3(web3.Web3.EthereumTesterProvider(backend))
    >>> w3.manager.provider.ethereum_tester.disable_auto_mine_transactions()
    >>> snapshot = w3.manager.provider.ethereum_tester.take_snapshot()
    >>> snapshot
    0
    >>> w3.manager.provider.ethereum_tester.get_block()
    eth_utils.exceptions.ValidationError: Attempt to import block #1000.  Cannot import block b'\xcc?\xed\x08\xbf\\\xa0\xbaH6\x0b\x859\x899jZ?Xs\xe5\x85*\xd5kE\x0e\xc3\xc6\x05\x98\x1c' before importing its parent block at b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
    If I mine a block between getting the snapshot then it works.
    w3.manager.provider.ethereum_tester.mine_block()
    Peteris Erins
    @Pet3ris
    *sorry the last line is meant to be w3.manager.provider.ethereum_tester.revert_to_snapshot(snapshot) instead of get_block
    genesis_params = eth_tester.PyEVMBackend._generate_genesis_params(overrides=dict(block_number=1000))
    backend = eth_tester.PyEVMBackend(genesis_params)
    w3 = web3.Web3(web3.Web3.EthereumTesterProvider(backend))
    w3.manager.provider.ethereum_tester.disable_auto_mine_transactions()
    snapshot = w3.manager.provider.ethereum_tester.take_snapshot()
    w3.manager.provider.ethereum_tester.revert_to_snapshot(snapshot)