Stratis and the Bitcoin Full Node

The goal of this post is to talk about my motivation to work with Stratis.

Back in May, Chris contacted me about his Stratis project. Like a lot of other people who contacted me for helping on what I consider “alt coins” my response was always the same: “I don’t have any interest in alt coin, my heart is in Bitcoin”.

I owned two alt coins in my life: Ethereum for speculating on Bitfinex, but after I lost 5 USD I closed my position and withdrawn my money from Bitfinex. After the hack, I earned about 1USD of BFX token from the leftover, which is my second altcoin ever owned.

Stratis has another vision which is not only an altcoin though, more like a platform. Chris seems to be an avid .NET developer and know me for my work on NBitcoin. The plan for Stratis is to have a full node that can be easily extended and modified for filling the need of the platform.

However, I don’t have time to join a team for working on such platform, as I’m already working as employee in two companies. (Main one is Metaco in Switzerland and second BlockchainHub in Japan)

Nevertheless, I was interested for quite a long time about doing a full node in C#. And Stratis plan is to do that, then fork it for their own need. So I could see that our interests matched quite well. It should be noted that the majority of the code between Stratis full node and the Bitcoin Full node of Stratis will be around the 90%. So even if I’m not working on Stratis full node itself, the Bitcoin full node of Stratis will bring a lot to their platform.

I’ve been always quiet about the altcoin part of Stratis, simply because my main interest has always been with Bitcoin without any exception for those 3 last years. I eat bitcoin, I sleep bitcoin, I work bitcoin, for 3 years already.

Then Stratis will take care of making great UI for their goals, which I hope to bring in Bitcoin as well forking their codebase as they forked NBitcoin. The work of Stratis will improve Bitcoin, and the work on Bitcoin will improve Stratis, this is the kind of work I like doing.

I am collaborating time to time to Bitcoin Core, but my main environment is application development in C#, not C++ plumbing. (and certainly not on Linux)
I have been very interested into working on LibConsensus for Bitcoin Core, which would make it possible to delegate consensus code execution to a dynamic library, instead of duplicating the consensus in other language where a bug could have very bad consequences for a business.

I have a kind of clear idea how to get LibConsensus done, but making it safely and convincing the other devs take tremendous amount of time. I respect the conservative aspect of Bitcoin Core very much, so this should not be meant as a criticism.

With Stratis I have an opportunity to experiment the idea how I would design LibConsensus in C#. If my approach works well, I’ll try to push that to Bitcoin Core as well. (for those who saw my last commits in Stratis, you can see the design differ slightly from Bitcoin Core, with the introduction of the ConsensusFlag type and ContextualInformation type, which come from my tentative to do it in Bitcoin Core)

I am very confident that I can develop a full node that is more reliable and offers increased performance over Bitcoin Core.

I will try to make Stratis work on .NETStandard 1.3, which will make it buildable and runnable on several platforms without hassle and linux guru magic. (Which cover, windows, linux and mac)

I hope that it responds to the question of the Stratis community.
Happy coding,