P2Pool code documentation: Difference between revisions
No edit summary |
added some comments |
||
Line 37: | Line 37: | ||
These are: | These are: | ||
===hash_link_type=== | ===hash_link_type=== | ||
Serialized SHA256 engine state, used to prove that a coinbase transaction contains some data near the end without sending the entire transaction. | |||
{| border=1 | {| border=1 | ||
|+ '''hash_link_type''' | |+ '''hash_link_type''' | ||
Line 57: | Line 58: | ||
|} | |} | ||
===small_block_header=== | ===small_block_header=== | ||
Bitcoin block header, excluding the merkle root. Included in shares, where the merkle root is computed implicitly from the coinbase transaction and the merkle branch. | |||
{| border=1 | {| border=1 | ||
|+ '''small_block_header''' | |+ '''small_block_header''' | ||
Line 86: | Line 88: | ||
===share_data_type=== | ===share_data_type=== | ||
Information contained within a share that is only relevant to P2Pool and that the client has control over (i.e. its value isn't fixed by the protocol rules). | |||
{| border=1 | {| border=1 | ||
|+ '''share_data_type''' | |+ '''share_data_type''' | ||
Line 127: | Line 130: | ||
===share_info_type=== | ===share_info_type=== | ||
Information contained within a share that is only relevant to P2Pool | |||
{| border=1 | {| border=1 | ||
|+ '''share_info_type''' | |+ '''share_info_type''' | ||
Line 199: | Line 203: | ||
==p2pool/__init__.py== | ==p2pool/__init__.py== | ||
At bottom has DEBUG flag. Change to true to get more output. | At bottom has DEBUG flag. Change to true to get more output. (running p2pool with --debug does this) | ||
Other than that just returns version number for git if it can. | Other than that just returns version number for git if it can. |
Revision as of 05:33, 19 June 2012
Ignore this page for the minute. Is just a scratch pad for documenting the p2pool code. Will tidy up once initial pass done.
Files Name | Description |
---|---|
p2pool/main.py | Main Startup and initialisation code |
p2pool/data.py | P2Pool main data structures |
p2pool/util/pack.py | Handling of over the wire data structures |
p2pool/main.py
Makes extensive use of twisted.defer. This allows it to "yield" to allow long running network code to complete. Read up on Python Generators and this before progressing!
Contains main startup code.
Tests connection to bitcoind. Prints hash of latest block to show bitcoind is up to date.
Tests connection to p2pool network.
Gets address to use for payout either from file or bitcoind. Validates address and checks local bitcoind owns it.
p2pool/data.py
Contains the main data structures used in p2pool. These are:
hash_link_type
Serialized SHA256 engine state, used to prove that a coinbase transaction contains some data near the end without sending the entire transaction.
Field | Type | Description |
---|---|---|
state | String(32) | ? |
extra_data | String(0) | Comments say this is a hack |
length | VarInt | ? |
small_block_header
Bitcoin block header, excluding the merkle root. Included in shares, where the merkle root is computed implicitly from the coinbase transaction and the merkle branch.
Field | Type | Description |
---|---|---|
version | VarInt | ? |
previous_block | None or Int(256) | ? |
timestamp | Int(32) | ? |
bits | FloatingInteger(32) | ? |
nonce | Int(32) | ? |
Information contained within a share that is only relevant to P2Pool and that the client has control over (i.e. its value isn't fixed by the protocol rules).
Field | Type | Description |
---|---|---|
previous_share_hash | None or int(256) | ? |
coinbase | VarString | ? |
nonce | Int(32) | ? |
pubkey_hash | Int(160) | ? |
subsidy | Int(64) | ? |
donation | Int(16) | ? |
stale_info | String(32) | Enum (orpan, dao, unk253, unk252...??? |
desired_version | VarInt | ? |
Information contained within a share that is only relevant to P2Pool
Field | Type | Description |
---|---|---|
share_data | share_data_type (see above) | ? |
far_share_hash | none or int(256) | ? |
max_bits | Float Int | ? |
bits | Float Int | ? |
timestamp | Int(32) | ? |
x
Field | Type | Description |
---|---|---|
name | String(32) | ? |
x
Field | Type | Description |
---|---|---|
name | String(32) | ? |
x
Field | Type | Description |
---|---|---|
name | String(32) | ? |
p2pool/util/pack.py
I think this handles all the binary data types used in the bitcoin protocol to send data over the network wire. These are nasty as very low level and many big endian/little endian complications. The p2pool network protocol uses these also. Do not think you need to really understand this unless making changes at this low level.
p2pool/__init__.py
At bottom has DEBUG flag. Change to true to get more output. (running p2pool with --debug does this) Other than that just returns version number for git if it can.