Probably anyone who is involved in the "core" project will have to study Ethereum implementations. While the Ethereum Yellow Paper (https://ethereum.github.io/yellowpaper/paper.pdf) is probably the first source you want to look at, it doesn't cover specific implementation details such as how block reorganizations are handled. Unless you are already an expert in Rust or Go, Pyethereum is probably the easiest Ethereum codebase to study. Unfortunately it seems like Pyethapp isn't the most up to date implementation and for whatever reasons I wasn't able to immediately peer with other nodes.
The following is a workaround to import blocks from parity to get around peering issues.
After executing
pyethapp run
you can hit CTRL-C to enter console mode.
Let us examine the following transaction https://etherscan.io/tx/0x423a89ae3fa471502c03e1d79e5fad8fa3637aea0e9687396315fe1a60687143 through pyethapp.
block = eth.chain.get_block_by_number(53989)
transaction = block.transactions[1]
In: transaction.hash.hex()
Out: '423a89ae3fa471502c03e1d79e5fad8fa3637aea0e9687396315fe1a60687143'
transaction.
and hit the TAB key to see the list of possible options.In [54]: transaction.gasprice
Out[54]: 57036234360
.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}
In [61]: transaction.creates.hex()
Out[61]: '9b4364943c18c594d11e7a4484c40f41fce7c9be'
The following are some potential pitfalls that I encountered. I was working with around ~6 nodes on separate docker containers all on one machine.