Attention: Deprecation notice for Bintray, JCenter, GoCenter
Having fun implementing a blockchain using Golang.
Using Minimum Viable Blockchain
The Blockchain uses ECDSA (224 bits) keys.
When a user first joins the blockchain a random key will be generated.
Keys are encoded using base58.
Given x, y as the components of the public key, the key is generated as following:
base58(BigInt(append(x as bytes, y as bytes)))
In order to sign a transaction and send it to the network, proof of work is required.
Proof of work is also required for block generation.
The blockchain runs on port 9191 and uses TCP to handle connections among peers.
Message type (1 byte)
MESSAGE_GET_NODES = iota + 20
Options (4 bytes): Data specific
Data (n bytes): Data specific
Signature (80 bytes): signed(sha256(header))
Payload data (Payload Length bytes): raw data