What I describe in this block is a blockchain system. I promise you the heaven from the sky. Here is the catch: it does not have consensus. I believe the consensus, as described by every other blockchain system is of very little value in todays world of organizations, governments and companies.

I believe it is impossible for sovereign nation, business, person or society to participate in a system that is expecting to set rules at one point in time upfront without later having the possibility to get out of it.

So what I propose here, is to build a system, that is honest. A system that does not try to implement restrictions and shared consensus. I propose a system that does not create trust, but that rely on trust. The trust, that come from simplicity. A blockchain, that is maintained by a single organization. From the ability of every participant to closely observe the owner/maintainer of a blockchain. The trust, that comes because you can observe the owner of the blockchain. And your ability, to abandoning that other entity as you desire and require.

As you have seen, a blockchain system has to rely on secure cryptographic algorithms and digital signatures. The software has to make it easy to observe the behavior of the master for a blockchain, and has to make it easy, to take and implement consequences, as the need occurs.

What is getting ob served? The maintainer/orderer(similar to an orderer in hyperledger Fabric) of the blockchain is able to delay or even trop unwanted transactions. He could push transactions with opposing interest before a certain already valid transaction. The maintainer of a blockchain should be independent of the actual business on that blockchain but that is not always possible.
Also the orderer would be able to send different res transactions to different clients. If clients are able to connect from time to time and verify cryptographic hashes with each other, there is no need for a continuously uphold byzantine fault tolerance.

So, here you have it. This is the design for truly business friendly accessible and enterprise ready blockchain solution. That is able to scale recording promises between friends to globally acting institutions.

Previously You have read about blockchain requirements and what it needs to build and implement a blockchain infrastructure. In this post, I will talk about the blockchain data structures. In fact, in order to create the best blockchain you need a data formats that is as simple as possible.

At this point, I have to make clear, we want to build blockchain applications. So the usage has to be as easy as possible. That is why we are going to use JSON all the way. JSON is human readable and even editable. However there is one problem to overcome. In JSON different indentation is allowed as well as the order of the properties in an object can change. This can become, as creating a signature or a hash of that data can produce different hashes. To overcome this obstacle, we are simple going to use the json-stable-stringify module. In other words, when serializing an object to JSON, we make sure, the properties are always sorted alphabetically and do not use any beautify and indentation.

The data structure, this is one part of the magic:

1
2
3
4
5
6
7
8
{
"previousHash": "string",
"height": "number",
"timeStamp": "number",
"data": "any",
"signature": "string",
"hash": "string"
}

So here are the explanations one by one. previousHash: is to store the hash of the block before the current block. In the first block, the genesis block, this hash is just filled with a zero. The hash is generated via a algorithm such as MD5, SHA256, SHA512. Bitcoin uses SHA256, In the system I propose it will be SHA512. And you know why? Because we can. TimeStamp is clear, is supposed to be the current time when the block is created(when ever this is). Data is going to be the data, it can be a list of transactions, a list of function calls, a single transaction or function call, or just some arbitrary information to record, such as events. Signature is going to be the signature for the server that is maintaining this blockchain. It will sign previousHash, height, timestamp and data. Hash is going to be the new hash for this block.

Did you see that, there is no nonce field. That is because we don’t do mining. Mining is for resource waisters, and has much to little business value as to do it.

And here you have it, the block for an awesome blockchain.

Next time we are going to talk about consensus. I believe, this is where we are going to have the biggest different compared to all other todays blockchain systems, such as Quorum, Etherium, hyperledger Fabic, Sawtooth and Burrow.

When designing a blockchain system it is important to make definition for a large number of aspects. You have to define what network components you require. In some systems there is basically only one component, that does everything, from verifying transactions, maintaining a copy of the ledger, accepting and broadcasting transactions, maintaining peers, ensuring consensus, validating identities, check permissions and executing smart contracts.

But before we can decide any of these, the purpose of a blockchain has to get defined. Public blockchains with their currencies are the most famous example. In first place there purpose is to transfer value, but in general, people want to execute “smart contracts” on a blockchain. (We discuss later what a smart contract is.). There is many discussions about how many transactions a blockchain can process per second. Also how much data can be stored in the system. In Bitcoin that is about 1MB per 10 minutes that have around 1000 transactions. Who is supposed to become part of the blockchain, get a copy. Can everyone join and setup a peer or is there maintained a list of participants and organizations. Blockchain is a system that will help to create transparency. But the first thing businesses ask is how it is possible to keep data private with managed reading and write permissions. And, as in any software development project, the utilized technology need to get decided, starting with programming language, database and operating system.

what is a smart contract

Basically a smart contract is a piece of code, that works with information on the blockchain and some input arguments from the transactions. Because of that, in some systems smart contracts are called chain code. Usually when transactions get executed in the same order, get executed against the same ledger state and the same transaction, they produce the same outcome. This property is called deterministic. To guaranty this behavior the Etherium blockchain has introduced a new programming language just for this requirement.

Other blockchains allow to develop smart contracts in statically typed languages, such as Java, Rust, Go or C++. It is usually not recommended to allow the development of contracts in dynamically typed languages, as the behavior is less predictable, especially for inexperienced developers. That contains PHP, Ruby and Javascript.

An other type of languages for smart contracts is designed to describe behavior in business terms. Such languages usually do not allow much complexity, but are therefor better understandable for users without programming experience.

Smart Contracts get deployed direct to the blockchain. That means the Source or at least the binary is stored in a transaction. Doing so can guaranty that it is absolutely clear, what transaction was processed by witch chain code ans specific by witch version of the chain code.

vocabulary

Designing Systems of such complexity, you have to be very precise. I believe that language need to be controlled very much. Often people say: “store that data on blockchain”. But that let a lot of open options.

  1. store on the blockchain itself
  2. store on the ledger of the blockchain
  3. store in the configuration for the blockchain

Also “Create a user.” allow a number of options for interpretation:

  1. create a key value pair
  2. store some username-password credentials on the blockchain
  3. store some credentials outside the blockchain
  4. create a signed certificate.

Naming for the different software components. Many people have different definition want is a peer. In hyperledger Fabric a peer is a server machine, that will connect to the orderer to get the blockchains and all new transactions. In other systems a peer is like a user or organization that also maintains its copy of the ledger and blockchain. In Fabric one Organization can operate a number of peers. What I want to say is, that you need clear definitions for words like: peer, organization, participant, channel.

In the next post you can read about an actually new design. I am going to present a blockchain data structure that will provide phenomenal attributes.

I want to say thank you. Thank you to the great Hexo community. The web system is beautiful. That is also the reason why this website is also made with it. Now it is time to give something back.

So here it is: As software developer we frequently need to present complex issues. There a small graphic for illustration can be worth more then a thousand words. A great tool to create graphs is nomnoml. As the name suggest its main purpose is for UML-diagrams. With an easy to learn syntax and a small plugin we can create graphics direct in the post’s markdown.

Simple use npm install hexo-tag-nomnoml to install the plugin to your hexo website. Then you can use the hexo-tag nomnoml to add graphics as demonstrated here:

1
2
3
4
5
6
7
{% nomnoml '{"style":"float:left;"}' %}
#fill: #00aaff;
[hallo] -> [world]
[tobias] love-> [Fanni]
[tobias] is on -> [earth]
[Fanni] is on -> [vanus]
{% endnomnoml %}



To learn more about nomnoml checkout its website and github repo.

Just to get it out of the way: BLOCKCHAIN ! ! !.

Even dough I recently do not work with blockchain, I still believe in the technology. I do not believe in the currencies, they are mostly fraught. That still does not change anything on the value of blockchain.

So far, I worked with three big blockchain systems. Hyperledger Fabric, Hyperledger Sawtooth and BigchainDB. They all have in common the different focus of use case. They try to make business and organizations work more effective together.

Working with these systems, I learned log about the architectures of blockchain and business applications. In Fabric there is a great separation of responsibilities for the different components. These components (endorser/orderer/ledger) can each execute one part of the infrastructure and make sure to process lots of transactions. As a storage Fabric can use various database management systems.

Sawtooth is storing data in a local merkle tree. I believe you are not able to store as much data in the sawtooth store as you can do in Fabric or bigchainDB. There is an other feature that surprised be a lot. They have the ability to let the users generate their rsa-key-pair in the browser. Also the user can create and sign transactions in browser so that the sever never need to see the private key. As I had analysed, it would be possible to implement that feature as well for fabric. but it would require a major rewrite of the SDK.

On the technical part it is nice and good, still I see there is space for a system, that is able to cover many use cases that other blockchain architectures do not have in mind. I see that todays blockchain systems do not have the sovereignty of organizations of companies in mind. Sure, it would be a dream if companies would share data more openly. Still I do not believe that companies and government organizations would ever be able (and for sure not willing) to open all data goes into the decision for the execution of transactions. I believe organizations and individuals have to be able to do independent decisions if they accept certain transactions or not(during the endorsement process).

A second huge feature I see missing is what I call fragmentation. I believe to participate on a blockchain it should not be required to download and verify each and every transaction. I have my wallet, My car or my house or my stock portfolio, I don’t care about the wallet of my neighbor, I don’t care about the fishing licence of Joe Public in Bavaria and for sure i don`t care about the beer bottle with the id ‘a83aebd7-8a6c-46cc-83c8-8b99bba195d5’ was warm when it was served in London. Still I want to be sure, that when someone makes a decision to stand by it (within reasonable limits).

And third, setting up a blockchain system has to be reasonable easy to manage. Almost like the famous 5-minutes installation of a wordpress website. As long as setting up blockchain systems requires large teams of developers, and expert knowledge in economy, politics and computer science, I do not believe that blockchain has a real chance for a wide adoption.

You know, based on that assumption, I believe it would be possible to combine the advantages of all systems and create a blockchain architecture, that consist of distributed components for great scalability, allow user determined management of their crypto materials, support lots of transactions on a single channel, store huge amounts of data in a ledger database, verify a transaction against a blockchain without downloading and storing all data ever.

how can that be done? look at the next post.