...
- Fetch the relevant block with
block = eth.chain.get_block_by_number(53989)
- Grab the relevant transaction with
transaction = block.transactions[1]
- You can double check you got the right transaction by comparing the txhash
In: transaction.hash.hex()
Out: '423a89ae3fa471502c03e1d79e5fad8fa3637aea0e9687396315fe1a60687143'
- You can double check you got the right transaction by comparing the txhash
- You can look at the pyethapp README to see a list of attributes you can fetch from the transaction. I personally just type
transaction.
and hit the TAB key to see the list of possible options.- For example gas price can be queried as follows
In [54]: transaction.gasprice
Out[54]: 57036234360
- Or you can just see all the attributes with
.to_dict()
In [58]: transaction.to_dict()
Out[58]:
{'data': '0x',
'gasprice': 57036234360,
'hash': '0x423a89ae3fa471502c03e1d79e5fad8fa3637aea0e9687396315fe1a60687143',
'nonce': 0,
'r': 100109914899522740072820940032964549000152372784597782163962964272918287896235,
's': 34504076207637428225392040647648060942376898176377071704915726387968418661732,
'sender': '0x4f68024b7ceb5ca92e7308bd08e523c632c0c739',
'startgas': 90000,
'to': '0x',
'v': 28,
'value': 50000000000000000}
- For example gas price can be queried as follows
- Note the 'to': '0x' means that this transaction creates a contract. This contract is created at address
In [61]: transaction.creates.hex()
Out[61]: '9b4364943c18c594d11e7a4484c40f41fce7c9be'
with contract code 'data': '0x'. Basically someone created a useless contract!
Viewing block reorganization in real time on local test networks
The following are some potential pitfalls that I encountered. I was working with around ~6 nodes on separate docker containers all on one machine.
- Make sure you set up unique node public keys or else syncing will not start due to "got a ping from self?"
- Pyethereum encodes the genesis block in a different way from the rest of the blocks. To avoid related errors, just kick start the network with a few imported blocks.
- The kademlia protocol can be quite time consuming. I've had better luck getting a connection among nodes with my wifi off so all requests that go to external ip addresses immediately fail. I'll probably shortly write a patch that makes requests to external ip addresses fail from the python code.
- I've had better luck with a high max_retries value (I'm currently working with 128 as opposed to the default 3) when connecting with other nodes. This is probably related to me using a really low difficulty. This number will probably need to get balanced (lowered) to deal with malicious nodes.