Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jan 11 09:15
    cburgdorf commented #1966
  • Jan 08 16:40
    montsamu opened #1966
  • Jan 05 22:33

    carver on master

    Issue #1942 remove linting erro… (compare)

  • Jan 05 22:33
    carver closed #1964
  • Jan 05 20:59
    Elnaril commented #1964
  • Jan 05 20:58
    Elnaril synchronize #1964
  • Jan 05 20:49
    carver commented #1964
  • Jan 05 20:46
    carver commented #1964
  • Jan 05 19:39
    Elnaril commented #1964
  • Jan 05 19:34
    Elnaril commented #1964
  • Jan 05 19:32
    Elnaril commented #1964
  • Jan 05 19:24
    Elnaril commented #1964
  • Jan 05 19:20
    carver commented #1964
  • Jan 05 19:03
    Elnaril commented #1964
  • Dec 18 2020 16:37
    Elnaril commented #1964
  • Dec 03 2020 08:20
    gsalgado commented #1965
  • Nov 28 2020 07:58
    gsalgado opened #1965
  • Nov 19 2020 16:08
    Elnaril opened #1964
  • Nov 18 2020 18:04
    Elnaril commented #1942
  • Nov 17 2020 09:06
    Peppece commented #1937
Noel Maersk
@veox

18 days later, ACD is noisy because of the difficulty bomb. :/

TL;DR: There might be an out-of-schedule call on Friday.

(I suggest you wonderful busy folk don't waste time on reading it all.)
Jason Carver
@carver
whoops, thanks for pointing it out (twice now!)
Noel Maersk
@veox
Heh, that's not what I meant by the comment, but thanks for fixing. :)
Jason Carver
@carver
:p
Griffin Ichiba Hotchkiss
@gichiba
Happy thanksgiving, americans! I'm looking to be pointed in the right direction with how to play with py-evm... I want to do essentially what is done in this exercise: https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/ -- but using py-evm instead of pythereum, and using the nice boilerplate project template that you have in the cookbooks. My question is where in the py-evm API or source would I find the logic that does the same thing trie.py does in pyethereum? Or, perhaps I'm totally going about this the wrong way, in which case my question is even more general: What's a good starting place for simple DB/State/Trie understanding of the evm?
Jason Carver
@carver
Yeah, if you just want to play around with tries, check out https://github.com/ethereum/py-trie @gichiba
I just noticed an "early release" warning on the README of py-trie. That could be removed now. It is the library that py-evm uses, and has gone through a solid amount of testing at this point. It could be optimized a lot more, but I'm not generally concerned about correctness, at least for evm-specific configurations (like always using 32-byte keys).
Griffin Ichiba Hotchkiss
@gichiba
Thanks @carver !
Jason Carver
@carver
I'm preparing py-evm for the Istanbul fix release today. The previous release incorrectly included an ice age delay.
Jason Carver
@carver
@/all py-evm with the fixed Istanbul (and a couple other things) is released:
https://py-evm.readthedocs.io/en/latest/release_notes.html#py-evm-0-3-0-alpha-9-2019-12-02
Noel Maersk
@veox

I have a feeling someone'll have to take over PR #1885 from me, or provide a lot of guidance.

The current lint failures are all for improper definitions/returns in low-level API classes: AccountDatabaseAPI, OpcodeAPI, VirtualMachineAPI; and some related abstract classes.

Take a look at this CI job most errors are an either-or choice, and I don't know which one is "correct".

There's also

eth/chains/base.py:250: error: Unexpected keyword argument "chain_context" for "VirtualMachineAPI"
eth/abc.py:2270: note: "VirtualMachineAPI" defined here

which means something unexpected may be happening.

Jason Carver
@carver
I'm on mobile now, but if you cc me on the PR, I'll take a look
Noel Maersk
@veox
@carver I went AFK immediately after posting y-day, sorry. Maybe it was a little too panicky. I'll cc you in a sec.
Jason Carver
@carver
@/all critical Istanbul bugfix release: https://py-evm.readthedocs.io/en/latest/release_notes.html#py-evm-0-3-0-alpha-10-2019-12-09
Trinity release coming shortly
Kjetil Vaagen
@KjetilVaa
Does anyone have any experience with Clique consensus who can help?
Noel Maersk
@veox
@KjetilVaa Very little. Anything specific?
Alan Justino da Silva
@alanjds
Hi. How near the py-evm is of the Golang version?
I mean, is it "safe" or is better to interface with the Golang via RPCs?
Jason Carver
@carver
It's in alpha, so it's not production-ready. @alanjds
Also, if you want to run a node, check out trinity which uses py-evm under the hood, but also handles all the peering, json-rpc, etc (also in alpha, of course)
Alan Justino da Silva
@alanjds

It's in alpha, so it's not production-ready. @alanjds
Also, if you want to run a node, check out trinity which uses py-evm under the hood, but also handles all the peering, json-rpc, etc (also in alpha, of course)

Tkx, @carver. I will take a look.

Jason Carver
@carver
@/all posted a new release, for the last known Istanbul bug
https://py-evm.readthedocs.io/en/latest/release_notes.html#py-evm-0-3-0-alpha-11-2019-12-12
Just some guy
@fubuloubu
famous last words lol
Jason Carver
@carver
heh
Voith Mascarenhas
@voith
:tada:
Christoph Burgdorf
@cburgdorf
@KjetilVaa What is your question regarding Clique?
Christoph Burgdorf
@cburgdorf
Related: We've just released a new Py-EVM version that refactors consensus handling to make it more flexible and sound.
https://py-evm.readthedocs.io/en/latest/release_notes.html#py-evm-0-3-0-alpha-13-2020-01-13
Suraj Singla
@surajsingla333
Hi all, I am creating a python script that will list all the peer nodes connected to the bootnode which I will provide. Can anyone help me with how I can list all the peer nodes using trinity?
Thanks
Eth-Gitter-Bridge
@Eth-Gitter-Bridge
<carver> (asked and answered on the trinity channel)
Peteris Erins
@Pet3ris
Hi There, is there a way to get the current executing computation/transaction from a State object? In particular I'd love to access the current stack contents, memory contents that seem to be embedded in the computation.
Eth-Gitter-Bridge
@Eth-Gitter-Bridge

<Christoph> @Pet3ris I'm afraid I can not answer this without diving into the code myself. One thing I suggest is to run py-evm with log level 0 to get full tracing output. Then you'll see output such as: https://gist.github.com/cburgdorf/41ce3a9c9502d2f194c9e54454e6a689

You can search for the output in Py-EVM and sprinkle the code paths with breakpoint() statements and then use the debugger to examine from there. That's how I'd approach it.

Peteris Erins
@Pet3ris
Hi @Eth-Gitter-Bridge, thanks for your comment. I'm already using the debugger unfortunately and digging into the code. I just wasn't able to find a way to access the ongoing computation. I've found a way to access the Execution Environment, simply vm.state.coinbase etc., but I'd like to find something like vm.current_transaction.computation.stack and vm.current_transaction.computation.memory to get other elements
Jason Carver
@carver
@Pet3ris do you mean in between transactions or mid-transaction? There's no concept of a "current transaction", the VM is not stateful in that way. But if you're curious in between transactions, there are more options besides breakpoints. If you can share an example showing what you are trying to inspect, I can help more.
Peteris Erins
@Pet3ris
@carver yep - what I'm trying to do is to monkey patch the debug2 function to inspect intermediate EVM state
for example, I can get anything from the ExecutionContext like so:
        def debug2(self, message: str, *args: Any, **kwargs: Any) -> None:
            if self.debug:
                if "COMPUTATION STARTING" in message:
                    ExtendedDebugLoggerWithBytecode.collected = []
                print(len(ExtendedDebugLoggerWithBytecode.collected))
                ExtendedDebugLoggerWithBytecode.collected.append((message, args, kwargs))

                print(self.evm)
                print(self.evm.chain)
                print(self.evm.chain.get_vm().state)
                print(self.evm.chain.get_vm().state.block_number)
                ExtendedDebugLoggerWithBytecode.block_number = (
                    self.evm.chain.get_vm().state.block_number
                )
                print(self.evm.chain.get_vm().state.coinbase)
Jason Carver
@carver

Okay, so the part I'm still missing a bit is "why". Are you trying to answer a single question about the stack or memory? Or is there some other kind of motivation?
Right now, I've got:

  1. (some need?)
  2. Plan to patch the logger so that it outputs a bunch of information at each step (including stack and memory)
  3. Desire to access the computation of a "currently running transaction" from a logging context

So I'm wondering if there might be a different approach than 2. In general, the architecture is going to fight arbitrary inspection of some arbitrary thing that's currently happening. You'll usually need a reference to the object you want to know about. So 3 is going to be a pain. Assuming 2 is fixed, you might consider patching into the Computation object to generate logs from there instead. Or patching into the Executor to save a reference to the most recent generated computation somewhere. Both of these will have subtleties.

If 2 isn't fixed, then it depends a lot on what 1 is. Maybe if you're trying to answer a single question, then it could make sense to drop a conditional breakpoint in somewhere, or craft a transaction that generates the final state you want, etc, etc.

Peteris Erins
@Pet3ris
@carver it's for debugging transactions
I'm trying to generate a full trace of EVM state changes
I like the idea of patching Executors/Computation classes
what would be the dangers? are there multiple computations potentially occuring within one transaction?
2 isn't necessarily fixed though - key thing is to be able to get the state at each opcode
because the logger outputs at each opcode, I thought that was an obvious location to patch in
Jason Carver
@carver

what would be the dangers? are there multiple computations potentially occuring within one transaction?

Yeah, not a danger, just something that might give confusing results without understanding carefully, since there are new computations created recursively, for example during CALL style opcodes.

Peteris Erins
@Pet3ris
oh that's right - so basically each message will have an associated computation, i.e., multiple per transaction?
Jason Carver
@carver
yup :+1:
Jason Carver
@carver
Yeah, I can see how the logger would be an appealing place to hook into apply_computation, because the opcodes are dispersed, there's not a common path to inject in a single place. So yeah, I guess my next approach would be to patch Computationwith a custom apply_computation.
Peteris Erins
@Pet3ris
that makes sense, thanks!
Jason Carver
@carver
you bet! :+1:
lzhou1110
@lzhou1110
Hi, I'm a research student currently doing some work on Fuzzing. I would like to understand if it is possible to, and how to: 1) get detailed trace info of a transaction I execute in py-evm, so I can determine how it read and write to the storage. 2) if I can fork a particular state from the main net blockchain, given a block number. Searched a bit but couldn't find where shall I start. Any suggestions? Thanks!
Eth-Gitter-Bridge
@Eth-Gitter-Bridge
<carver> Right now, the best tool for tracing transactions is to enable debug2 logs, and filter the lines you care about from the logs.