Steem + Steemit: full decentralization problem

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@armandocat·
0.000 HBD
Steem + Steemit: full decentralization problem
_Steem is a blockchain-based social media platform where anyone can earn rewards._

This is the definition on Steem as expressed in the homepage of steemit.com.
It uses two very imporant concepts that are quite popular nowadays: **blockchain** and **social media**.
The idea is to bring these two concepts together to make people able to create quality content (essentially posts) and be able to earn (via a virtual currency: Steem). 
The **Steem account's owners don't need to understand anything about what a blockchain is and how it works**. They just go to steemit (or other frontends) to make posts, read other people's blogs, and earn both with _author rewards_ and _curation rewards_.

<br>

<center>
![](https://i.imgsafe.org/67/673b889480.png)
_As most of you know, Steem and Steemit are two different things! The first is the actual blockchain, the other is just a front end that makes the data on the blockchain easy to access_
</center>

<br>

The most important reason why everthing is build on top of a blockchain is to be able to **not have a centralized entity that owns the data** produced by the users.
This is the main difference with Facebook or Twitter for instace.

However, in my opinion, **the users are not helped in taking full advantage of the decentralization of Steem**.
I will try to explain what I mean and how I plan to provide a solution, not only theoretically but also with the implementation of my idea that I'm already working on.

## Similarities with Bitcoin

Bitcoin mantains a list of transactions, verified by network nodes, recorded in a public distributed ledger called a blockchain. Steem does the same, but not only it records the _transactions_ of user's money, it also records the other _operations_ the user's can do on the blockchain, such as changing profile informations, creating posts or comments, upvote/downvote other people's posts, and many more.

In summary, Bitcoin and Steem are blockchain that mantain the dynamic data of the networks in a secure and decentralized way, so that the data exists and are valid even if one or more of the nodes are attacked or shut down.
There is no need of trusting an external entity, as long as the majority of the blockchain nodes agree with the rules of the blockchain.

### How do you use Bitcoin? 

People use bitcoins via wallets, software that allowes them to create and sign transactions that _moves_ money from one user to another user. 
This is where some of the pure blockchain ideals start to fade away.
**Most users don't connect directly to the blockchain to manage their wallet**. **They use third-party services**, mostly websites, that have many benefits such as browser connection with an account (username and password, with sometimes other security options such as 2FA) and a beautiful interface.
Some example of servicies that provide this service are blockchain.info or coinbase.com.

The problem with this approach is that you loose the trustless nature of the blockchain, since **you have to trust the service not to steal your money** and hope that the service is not one day shut down by hackers or governments.

Of course, users that have too many bitcoins and don't want to risk, can and should use cold wallet, download a Bitcoin node on their computer (server GBs of data, that encreases every day and needs to constantly be synced with the network) and use that node to broadcast their transactions.

This is too complex for normal users. 
Something in the middle exists, for instance [Electrum](https://electrum.org/).
**Electrum allows you to manage your wallets on your computer (without giving your private keys to anyone) and connects to nodes to check your balance and transfer bitcoin with others.**

### How do you use Steem? 

People can use Steem directly via a wallet (to send money from user to user) and they can use the Steem API to post, comment, upvote, and many other operation. This is of course the safest way of interacting with Steem. You create a Steem node on your computer, it syncs with the network, you interact with it, you create posts in some Markdown editor, you copy the text and build a request for the Steem API to broadcast your intent, and the posts is created, ...
Well, **I think nobody (except bots) use Steem this way**

This is too complex and boring. User's wants a nice interface, where they can explore and add content to the blockchain without even noticing it's a blockchain.

That's why people use steemit.com and other front-end websites (busy.org, ...).
**You are trusting steemit, busy.org, ... not to steal your private keys and not to be attacked by hackers that infiltrate their malitious code in their servers.**
And **you need to hope that when you want to visit and interact with the blockchain, the website you use is not down!**

You are loosing the most beautiful thing about a blockchain. Being able to use it always, even if people don't want you to, like hackers or governements, or if a company like Steemit Inc. goes bankrupt and closes (let's hope not)

Fortunatelly, many websites exist that allow you to access the Steem blockchain easily, so if at least one of them is not down, you can just switch to another website or download another app and you are in (_always after you decide to trust that website or app!_)

Unfortunatelly, **a solution like _Electrum_ doesn't exist for Steem**. A solution where you have a beautiful interface, that runs completelly on your computer without the need of an external service at all, and relies only on nodes (maybe from some witness that provides that to you for free) to get and send data to the blockchain. Your private keys are not stored in any server, and don't even exit your computer, so you don't have to trust anyone!


## Creating a server-less Steem front-end application

As many of you may know, steemit.com is opensource, and the code is released with the name `condenser` on github: https://github.com/steemit/condenser
If you start looking at the code, you will notice that it is essentially a `node js`/`express` server with a `react` frontend. There are other two main components, `tarantool` (optional) and `mysql` that is needed for some functionalities. 
All the queries to the Steem blockchain are done with the `steem-js` library (also open source), both server- and client-side.
If we could remove the database requirements, the application could run on anyone's computer without any configuration required... Therefore:

**First step:** remove `mysql` requirement and allows the server to run without it! 
I tried, and after commenting a few line of code here and there in the `condenser` code, **I'm today running my own condenser server on my computer and browsing steem with it!**

Of course, not everyone wants/can/is able to do this. Some compact and easy solution needs to be found. After packing up the code of the server and create and executable that can run on the user's computer just by double-clicking it, it would be nice to also integrate a _browser_ that loads the `condenser` local server and make it seems like a normal _native_ app.

**Next steps:**
* Make the server's code embeddable in an application.
  _Electron_ can run the code directly, probably after a few changes on the code.
* Build a UI that just load the local server web page and shows the same interface of steemit.com
  This is easily achievable on desktop thanks to _Electron_! 
  
On mobile, this would be a bit more hard to do, since one will need to either include `node` into the application, or rewrite the server side in `C`, `Java` or other languages that can be used in _iOS_ and _Android_. 

If you are following me from some times now, you know that I developed a browser extension _"Steemit More Info"_ and I'm working on a mobile app _"SteemApp"_.
This project that I just started will also include the features provided in _"Steemit More Info"_ and will probably (when ready) replace the mobile app and be released also as a desktop application.

Follow me for more info and update! 

Thanks
Armando
🐾
👍 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,