Category Archives: C Sharp

Building A Blockchain (16)

Previous Post

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

 

 

 

New Month’s Resolutions: September 2017

A lot of ideas and projects, and only one life. Time to review the last month’s resolutions:

– Continue Yasold [complete] see repo
– Continue SimpleBlockchain [pending]
– Continue BlockchainSharp [complete] see repo
– Continue ChineseP [complete] see repo
– Continue TensorSharp [complete] see repo
– Continue SimpleTensor [complete] see repo
– Continue WikiExpert [pending]
– Continue Neurum [complete] see repo
– Continue LLLJS [pending]
– Continue HuskyJS [pending]

Additionally I worked on:

– Started BlockchainJ [complete] see repo
– Improve RustScript [complete] see repo
– Start Elmie, Eml-like language transpiler to JavaScript [complete] see repo
– Improve PLangRe [complete] see repo
– Improve RSharp [complete] see repo
– Improve RskAPI [complete] see repo

My new resolutions:

– Continue Yasold
– Continue BlockchainJ
– Continue BlockchainSharp
– Continue ChineseP
– Continue TensorSharp
– Continue SimpleTensor
– Continue WikiExpert
– Continue Neurum
– Continue LLLJS
– Continue Elmie

Stay tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

 

New Month’s Resolutions: August 2017

It was a very busy and interesting month. It’s time for review my previous resolutions and write down the new ones.

– Continue RskSharp [pending]
– Continue SimpleBlockchain [pending]
– Continue BlockchainSharp [complete] see repo
– Continue ChineseP [complete] see repo
– Continue TensorSharp [complete] see repo
– Continue RSharp [pending]
– Continue WikiExpert [pending]
– Continue SimpleGA [pending]
– Continue Neurum [pending]
– Continue HuskyJS [complete] see repo

I also was working on:

– Minor improve in SimpleGrammar [complete] see repo
– Refactor in Complexo [complete] see repo
– Improve SharpGo [complete] see repo
– Start Yasold, Solidity decompiler [complete] see repo
– Improve Domie, simple DOM [complete] see repo
– Start BInte [complete] see repo
– Create BRati [complete] see repo
– Improve SparkSharp [complete] see repo
– Start Llljs, compiler of LLL to Ethereum VM bytecodes [complete] see repo
– Start Smarc, Smart Contracts in JavaScript [complete] see repo
– Improve SolidityCompiler [complete] see repo
– Start Smarc, Smart Contracts in JavaScript [complete] see repo
– Minor improve on Golin [complete] see repo
– Start SimpleTensor, TensorFlow ideas in JavaScript [complete] see repo

My new month’s resolutions:

– Continue Yasold
– Continue SimpleBlockchain
– Continue BlockchainSharp
– Continue ChineseP
– Continue TensorSharp
– Continue SimpleTensor
– Continue WikiExpert
– Continue Neurum
– Continue LLLJS
– Continue HuskyJS

Stay tuned!

Angel “Java” Lopez
http://www.ajlopez.com

 

New Month’s Resolutions: July 2017

We are in the second part of the year, a long year with interesting projects. Time to write the new month’s resolutions and review the past ones:

– Continue RskSharp [pending]
– Continue SimpleBlockchain [pending]
– Continue BlockchainSharp [complete] see repo
– Continue ChineseP [complete] see repo
– Continue TensorSharp [pending]
– Continue RSharp [complete] see repo
– Experiments with RSKJ fork [complete] see repo
– Continue Vyu [pending]
– Continue Domie [complete] see repo
– Continue Wordie [pending]

Also, I was working on:

– Start WikiExpert [complete] see repo
– Start PerProm [complete] see repo
– Start RskApi [complete] see repo
– Improve SharpGo [complete] see repo
– Improve Neurum [complete] see repo
– Improve ClojJS [complete] see repo
– Improve SimpleScraper [complete] see repo
– New Sample in SimpleGA [complete] see repo
– Start GenPrj [complete] see repo
– Start RskUtils [complete] see repo
– Start SimpleJsonRpc [complete] see repo
– Start HuskyJS [complete] see repo
– Improve Husky [complete] see repo

My new month’s resolutions:

– Continue RskSharp
– Continue SimpleBlockchain
– Continue BlockchainSharp
– Continue ChineseP
– Continue TensorSharp
– Continue RSharp
– Continue WikiExpert
– Continue SimpleGA
– Continue Neurum
– Continue HuskyJS

Stay tuned!

Angel “Java” Lopez*
http://www.ajlopez.com
http://twitter.com/ajlopez

 

 

 

 

New Month’s Resolutions: June 2017

A new month begins, time to write down the monthly resolutions. But first, a review of the past ones:

– Continue RskSharp [pending]
– Continue SimpleBlockchain [complete] see repo
– Continue BlockchainSharp [pending]
– Continue ChineseP [pending]
– Continue TensorSharp [pending
– Continue RSharp [complete] see repo

I also worked on:

– Improve AjDrawJS [complete] see repo
– Improve AjTalkJS [complete] see repo
– Improve SimpleForth [complete] see repo
– Improve ClojJS Clojure in JavaScript [complete] see repo
– Additional sample for SimpleGA, genetic algorithms [complete] see repo
– Experiments on RSKJ form [complete] see repo
– Create wordie, literate programming language [complete] see repo
– Create domie, a DOM-like for JavaScript testing [complete] see repo
– Create vyu, a vue.js-like framework [complete] see repo

My new resolutions:

– Continue RskSharp
– Continue SimpleBlockchain
– Continue BlockchainSharp
– Continue ChineseP
– Continue TensorSharp
– Continue RSharp
– Experiments with RSKJ fork
– Continue Vyu
– Continue Domie
– Continue Wordie

Stay tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

New Month’s Resolutions: May 2017

There is a new month, time to write the new resolutions. First, a review of the previous ones:

– Continue RskSharp [complete] see repo
– Continue SimpleBlockchain [complete] see repo
– Continue Solidity Compiler [pending]
– Continue ChineseP [complete] see repo
– Continue TensorSharp [complete] see repo
– Continue RSharp [complete] see repo
– Continue SimpleForth [pending]

Additionally, I was working on:

– Continue BlockchainSharp [complete] see repo
– Start Neurum, neural networks in C# [complete] see repo
– Improve AjTalkJS, Smalltalk interpreter in JavaScript [complete] see repo
– Improve SimpleProlog, Prolog interpreter in JavaScript [complete] see repo
– Improve AjDrawJS [complete] see repo

New month’s resolutions:

– Continue RskSharp
– Continue SimpleBlockchain
– Continue BlockchainSharp
– Continue ChineseP
– Continue TensorSharp
– Continue RSharp

Stay tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

New Month’s Resolutions: April 2017

A new month begins, it’s time to write down my monthly resolutions. First, a review of the last month ones:

– Continue RskSharp [complete] see repo
– Continue SimpleBlockchain [pending]
– Continue Solidity Compiler [complete] see repo
– Continue ChineseP [pending]
– Continue TensorSharp [complete] see repo

Additionally, I was working on:

– Improve SimpleProlog [complete] see repo
– Continue RSharp [complete] see repo
– Improve AjDrawJS [complete] see repo
– Improve SimpleForth [complete] see repo

My new month’s resolutions:

– Continue RskSharp
– Continue SimpleBlockchain
– Continue Solidity Compiler
– Continue ChineseP
– Continue TensorSharp
– Continue RSharp
– Continue SimpleForth

Stay tuned!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez