In recent months I have been busy working on the RSK project. It’s time to write about my personal blockchain projects:
https://github.com/ajlopez/BlockchainSharp
https://github.com/ajlopez/SimpleBlockchain
https://github.com/ajlopez/RskSharp
Currently, the most active one is the C# project. I added one project:
https://github.com/ajlopez/BlockchainJ
in Java. The experience I gained written all this code (using test-driven design, as usual) gaves me a clear idea of what is involved when building a blockchain. Writing my own implementations gave me better understanding of the parts related to the creation of a blockchain. And now the RSK project (Java core implementation) is public, I’m free to relate this work with an existing full implementation.
The key points to be written are:
- Entities
- States
- Virtual machine to run smart contracts
- Encoders
- Consensus
- Validation logic
- Inter-node communication
- Expose node state to external applications
The base entities are:
- Block
- Transaction
- Account
The states to be kept are:
- Blockchain
- Account state
- Contract state
My projects are oriented to have smart contracts, a la Ethereum. One reason to have a virtual machine is be agnostic of host programming language. I think that having a way of run smart contract that is independent of the programming language used in each project, is an interesting feature. So, I should define:
- Virtual machine opcodes
- Transient (memory) storage
- Persistent storage
I need encoders for blocks, transactions and account states. The encoded entities are used in the network communication, local storage, and in the hash calculation. For example, when I have to transmit a block I encoded it. And if I want to send the block to another node, I should encoded the block before transmission. And the encoded data is the basis for hash calculation.
The inter-node communication includes:
- Message definitions
- Message and handshake protocol
- Peer-discovery protocol
Validation logic refers to:
- Validation of blocks
- Sign of transaction and its validation
Consensus logic has:
- Selection of the next block
- Run of the transactions, updating the accounts/contracts states
The exposure of a node state is implemented in Bitcoin and Ethereum using JSON RPC (Remote procudure call), usually exposed via http. In this way, the node can be accessed by external technologies implemented in different technologies (JavaScript blockchain ecosystems are the more popular).
Followin Ethereum ideas, one entity I implemented many times is a trie. I think my implementations are very simple and effective. I hope to be able to write in the next posts about those implementations.
Stay tuned!
Angel “Java” Lopez
https://github.com/ajlopez
http://www.ajlopez.com
http://twitter.com/ajlopez
Pingback: Building A Blockchain (15) | Angel "Java" Lopez on Blog