Steem History: Steem Reborn

in #history5 years ago

Last time, I covered one of the dark days in Steem history where the blockchain got off to such a rocky start that it was shut down within 48 hours of launch and a second chain was started to repair bugs in an attempt to reset some of the perception around the coin. The rest is blockchain history.


farm2852024_640.jpg
Image History

A New Chain Is Born

Luckily for us, this second chain survived. The current Steem blockchain was the second chain launched by Reverse Flash on March 24, 2016, one day after the initial chain was launched. Although the main reason given to restart the chain was due to an integer overflow bug found while the chain was live, the poor reception of the initial launch was probably a factor as well. Otherwise, Reverse Flash probably wouldn't have said this:

thereverseflash posts at 2:39 PM on March 24

...
we have decided to relaunch the chain with the fix and in a way that will hopefully make more people happy
...

An hour later, chain number one is dead, and another is on the way:

thereverseflash posts at 3:55 PM on March 24

Relaunch in 1 hour. Ports will change. New thread will be created in 30 min.

At this point, Reverse Flash opens a new thread on the Bitcoin Talk forums. He makes fixes to the integer overflow bug and other small updates which can be found in a series of small commits on the Steem Github on March 24, 2016.

We then get the official launch of the new chain at 5:00 PM, right? Well not quite. Let's dig deep into the blockchain and see how this whole thing got started.

1092 Blocks

Since, the second blockchain is still running today, we can pull information from the chain to uncover more data to tell our story. However, if you look at the first block in the chain, you'll notice that it's empty:

#<Hashie::Mash block_id="0000000109833ce528d5bbfb3f6225b39ee10086" extensions=#<Hashie::Array []> previous="0000000000000000000000000000000000000000" signing_key="STM8GC13uCZbP44HzMLV6zPZGwVQ8Nt4Kji8PapsPiNq1BK153XTX"timestamp="2016-03-24T16:05:00" transaction_ids=#<Hashie::Array []> transaction_merkle_root="0000000000000000000000000000000000000000" transactions=#<Hashie::Array []> witness="initminer" witness_signature="204f8ad56a8f5cf722a02b035a61b500aa59b9519b2c33c77a80c0a714680a5a5a7a340d909d19996613c5e4ae92146b9add8a7a663eef37d837ef881477313043">


The above response is from a Ruby script that I wrote using the Radiator API. The transactions field contains an empty array indicating an empty block. The witness of this block is initminer which is the account that produces blocks prior to there being other accounts or users on the blockchain.

This is the genesis block.

I ran a quick script to see which block had the first transaction. It turns out there are 1091 of these empty blocks. This means that for nearly an hour, nobody is producing blocks on the blockchain. Which seems like pretty odd behavior. But this is actually by design:

thereverseflash posts at 3:55 PM on March 24

Mining Begins on Thu, 24 Mar 2016 17:00:00 GMT, no blocks will receive a reward until 21 POW are submitted.

Mining isn't allowed to start until 5:00 PM, but the new chain starts at 4:05 given the timestamp listed above. We can actually see this behavior implemented in one of the commits in the Github repository:

Commit: "Update gensis time and mining time" in config.cpp:

#define STEEMIT_GENESIS_TIME (fc::time_point_sec(1458835200))
#define STEEMIT_MINING_TIME (fc::time_point_sec(1458838800))

Since these times are different, the chain starts prior to any mining that occurs during it. So, from the period that the blockchain is started until the period that mining is allowed, we can only have empty transactions as accounts aren't created and no STEEM exists yet.

Of course, this changes once we get block #1092, the first block with any transactions within it:

                
#<Hashie::Mash block_id="000004447e2ed42b4879089ec30d3a6a4ce92482" extensions=#<Hashie::Array []> previous="000004433bd4602cf5f74dbb564183837df9cef8" signing_key="STM8GC13uCZbP44HzMLV6zPZGwVQ8Nt4Kji8PapsPiNq1BK153XTX" timestamp="2016-03-24T17:00:06" transaction_ids=#<Hashie::Array ["ef73d8fadf17e2590c6d96efc1ca868edd7dd613", "02b3404402bc68314daa3752833f8c8c14daa070", "ee1e29958549b9547383c3ef932bd95a571fd0d4", "8dfe0564434071b76276fc7892505a397f2fef98"]>transaction_merkle_root="87ec275f2b1d0d2e184105232b644804cdcd3a54" transactions=#<Hashie::Array [#<Hashie::Mash block_num=1092 expiration="2016-03-24T18:00:03" extensions=#<Hashie::Array []> operations=#<Hashie::Array [#<Hashie::Array ["pow", #<Hashie::Mash block_id="000004433bd4602cf5f74dbb564183837df9cef8" nonce=82 props=#<Hashie::Mash account_creation_fee=#<Hashie::Mash amount="100000" nai="@@000000021" precision=3> maximum_block_size=131072 sbd_interest_rate=1000> work=#<Hashie::Mash input="59b009f89477919f95914151cef06f28bf344dd6fb7670aca1c1f4323c80446b" signature="1f3f83209097efcd01b7d6f27ce726164323d503d6fcf4d55bfb7cb3032796f6766738b36062b5850d69447fdf9c091cbc70825df5eeacc4710a0b11ffdbf0912a" work="0b62f4837801cd857f01d6a541faeb13d6bb95f1c36c6b4b14a47df632aa6c92" worker="STM65wH1LZ7BfSHcK69SShnqCAH5xdoSZpGkUjmzHJ5GCuxEK9V5G"> worker_account="admin">]>]> ref_block_num=1091 ref_block_prefix=744543291 signatures=#<Hashie::Array []> transaction_id="ef73d8fadf17e2590c6d96efc1ca868edd7dd613" transaction_num=0>, #<Hashie::Mash block_num=1092 expiration="2016-03-24T18:00:03" extensions=#<Hashie::Array []> operations=#<Hashie::Array [#<Hashie::Array ["pow", #<Hashie::Mash block_id="000004433bd4602cf5f74dbb564183837df9cef8" nonce=151 props=#<Hashie::Mash account_creation_fee=#<Hashie::Mash amount="100000" nai="@@000000021" precision=3> maximum_block_size=131072 sbd_interest_rate=1000> work=#<Hashie::Mash input="55d4752057cc3206abae80bce5f012a0df82a126c91c72dbd2b92ea70b1d3b76" signature="207d80794cb57ed0bc5f859d45959350126f7728b055bcf40ac9cef99f38d41d0e5188e1c5b77501c497f575ed83b1f68ab8ea4c564abd57212237a5ecc889b024" work="024fd8ac09e9dfb966087c250919445f6f4cf2e719e93ff55f81843cbe4a5e70" worker="STM65wH1LZ7BfSHcK69SShnqCAH5xdoSZpGkUjmzHJ5GCuxEK9V5G"> worker_account="admin">]>]> ref_block_num=1091 ref_block_prefix=744543291 signatures=#<Hashie::Array []> transaction_id="02b3404402bc68314daa3752833f8c8c14daa070" transaction_num=1>, #<Hashie::Mash block_num=1092 expiration="2016-03-24T18:00:03" extensions=#<Hashie::Array []> operations=#<Hashie::Array [#<Hashie::Array ["pow", #<Hashie::Mash block_id="000004433bd4602cf5f74dbb564183837df9cef8" nonce=60 props=#<Hashie::Mash account_creation_fee=#<Hashie::Mash amount="100000" nai="@@000000021" precision=3> maximum_block_size=131072 sbd_interest_rate=1000> work=#<Hashie::Mash input="fece42ada3ac23101e3c4ee18f6eccc69d6f8710c7b29b496e0a7ad0c128af2c" signature="2018233fbb20c9a8543604b8edf7ff1ff1bbea22c52a1eabf9592c0316909c4e080d5b4b1ea1a66a7024de10ec3c2b1dbff8c696bfccdee78aca4d560430d33964" work="0d8423b0fa3d87ed8c3f8dd9c0f79884da8966a1fd1501b27212918f15dfb72e" worker="STM5QPFyb4ANmtoaubh4iEtDd1DJvx5jxJYKbFtLExdVjKdGkQo44"> worker_account="dark">]>]> ref_block_num=1091 ref_block_prefix=744543291 signatures=#<Hashie::Array []> transaction_id="ee1e29958549b9547383c3ef932bd95a571fd0d4" transaction_num=2>, #<Hashie::Mash block_num=1092 expiration="2016-03-24T18:00:03" extensions=#<Hashie::Array []> operations=#<Hashie::Array [#<Hashie::Array ["pow", #<Hashie::Mash block_id="000004433bd4602cf5f74dbb564183837df9cef8" nonce=37 props=#<Hashie::Mash account_creation_fee=#<Hashie::Mash amount="100000" nai="@@000000021" precision=3> maximum_block_size=131072 sbd_interest_rate=1000> work=#<Hashie::Mash input="50c9191036d5a384606afc2c0ab964c79d75e9f5300538085c0cc9aa608cdd61" signature="2069cb8e6f78f592b9bc851853c0c39b8dd1bea34366e4b16c8a99610a29313320339041822dd3149d6c21f0ae4b18b181f3e7decc2e652db8b853ca583d8dbd8a" work="02bdca86f824db3e59e059b70a490547c54334b4443a691505acc0d8490325ac" worker="STM5gzvDurFRmVUUs38TDtTtGVAEz8TcWMt4xLVbxwP2PP8b9q7P4"> worker_account="nxt1">]>]> ref_block_num=1091 ref_block_prefix=744543291 signatures=#<Hashie::Array []> transaction_id="8dfe0564434071b76276fc7892505a397f2fef98" transaction_num=3>]> witness="initminer" witness_signature="1f4ba63fdb35c76942a03a8b5bbd376f683a79fd8e0bdb10231975c900ef66bc5c49a0df305fa1cedbeae4b958e45e1dfb754b34b2555501d2deba266c621db36d">


A lot longer than the first block. It's a lot to take in. So, let me interpret the above for you. This block like the 1091 empty blocks that proceeded it are mined by the initminer account. However, it isn't empty. It actually has four transactions. Four POW transactions. In the old days prior to any stake existing, witnesses had to submit a solved proof-of-work in order to placed in the block production queue. A lot different from nowadays using stake voting to select witnesses.

Block 1092 was the last block that the account initminer produced. With these submitted POW transactions, these new accounts would serve as the first witnesses on the blockchain.

The Rocky Road Continues

Block 1092 was produced six seconds after 5 PM. This makes sense as the blockchain did not permit mining on the chain until 5 PM. So, the chain is exhibiting correct behavior and this version was running smoothly so far. But this new launch still suffered from the lack of documentation and supporting software that the initial launch suffered from. This relaunch happened less than 48 hours from the initial launch and folks still weren't very happy about this.

NextGenCrypto posts at 5:16 PM on March 24

Can someone provide REAL step by step instructions for getting this up on a VPS?Not everyone understands how to do this. And no, it's not a fair launch when you don't launch to the OS MOST people in the world use.

With little instructions to work on, no wallet binaries, and having no documentation on the codebase, users were still left frustrated that mining was so inaccessible. But Reverse Flash knew that this perception existed around the project after the failed first chain. But he only gave users a paltry hour between announcing the new chain and mining becoming possible on it. It doesn't appear the Reverse Flash learned from his prior mistakes.

drays posts at 5:46 PM on March 24

Too much undocumented stuff, and this question with parsing error was asked about 3 times in prev thread too, with no answer. Sad. It looks like this coin is for pure geeks only, the ones to enjoy torturing themselves with poorly documented and probably poorly developed code. If this continues this way, the coin would not get wide audience = will be lost in limbo.

I think this post truly shows how important good documentation is important in any software project. Good documentation helps new developers and users figure things out.

I hate to say it, but looking at the current repository on Github, it is very inaccessible to newer and less experienced developers with its outdated and sparse documentation. Only the "pure geeks" that really dig deep and develop understand what is going on and this is why we have issues like what happened with HF 20.

We get to the last point about audience. Steem was supposed to be the most accessible blockchain to users. Which some could argue is true. But being accessible to developers would allow more people to fix problems and find them before they become issues.

Sure, we have "dapps" but "dapps" don't matter when most of these developers don't understand the underlying protocol. If Steemit Inc goes under, these folks will be the most important. Because the protocol is the foundation. If the protocol breaks, everything breaks. Unfortunately, the protocol is poorly documented. See for yourself. The ghosts of the past continue to haunt us.

But regardless of this rocky perception, things continued to run smoothly on chain number two? Not exactly....

thereverseflash posts at 1:54 AM on March 25

I have identified a small security vulnerability that has been remedied with the latest commits on github. Depending upon the current queue length, someone could reuse the same POW up to 4 times in the same block. Ie: if the queue length was 88, they could do it 4 times, if it was 89 then 3, etc. If the queue length was 81 then there would be no vulnerability. This bug is a side effect of a last minute decision...

Reverse Flash and good programming practices seem to be two entities that rarely cross each other. Well, that seems like a good place to stop for now. Hopefully you learned something new about the early days of this chain. A little more technical, but still pretty interesting. The amount of poor planning and good programming practice continue to baffle me, but hey, that was all part of Reverse Flash's secret plan, right?

thereverseflash posts at 10:30 PM on March 24

Maybe all of this bumbling around is just a front to skillfully hide the super powers within Steem? But you would never believe that.

Sources:

Thread One - Initial Launch
Thread Two - Relaunch
The Hub (Steem)

Sort:  

What a tangled beginning!

I wonder if Steemit has any programmers with experience working on open source projects. It's not run like it. It's run like a corporation's first open source effort.

We absolutely need better documentation...and people to actually lead open source efforts. Steemit might do the majority of the coding, but they suck at leading the open source community in development. Guess they were bad at that side of things right from the beginning.

Steemit might do the majority of the coding, but they suck at leading the open source community in development

They actually don't need to lead the open-source community. If they had documentation explaining how the protocol was structured, documentation on the different components of the blockchain, and then documentation within those components explaining each one's design, ordinary developers could verify whether or not the code match the documentation and then use that as a reference to fix bugs or expand features. Given that the repository doesn't do this, the code is inaccessible to ordinary developers.

They're asking for extraordinary developers to work on a project that LOOKS on the surface to be mediocre in implementation and design because there is little external evidence (documentation) proving the greatness in the design.

If the company is doomed to go under, who cares about SMTs? Write documentation so others can pick off where you left off. Unless of course, you want to continue to pretend being open source project. You want developers, make development accessible and folks will contribute.

Well, it would be easier if there was at least better documentation...but it still requires developers to just jump in with both feet, without any of the standard things open source projects have. Basically they have to download the code themselves, decode it, make changes without any idea what people are currently working on other than things mentioned in blog updates. Though possibly there might be forks they could find on git that might give them some idea of things getting worked on.

Most projects, you can go to a page and get an idea of what needs help being worked on, and where to focus your efforts. Hopefully you get some documentation beyond just what's in the code.

There is none of the stuff normal open source projects have, other than the code. It's not just documentation. There is a complete failing on Steemit's part in regards to the open source half of Steem and Condenser. It matters more with Steem than Condenser of course.

If there was at least a bit of documentation, then perhaps coders could read a bit and jump into the code, but it's still pretty hard to jump into code. You never know where to start. It's like trying to read a book from pages scattered on the ground.

thereverseflash posts at 10:30 PM on March 24
Maybe all of this bumbling around is just a front to skillfully hide the super powers within Steem? But you would never believe that.

LOL, no fucking way. That is downright embarrassing.

This is great thank you...!

So, ah, is it too late for another do-over?

All you need to do is get a couple people to mine a new chain separate from Steem. Give it a catchy name like Steem Cash or Steem Larimer's Vision.

Ha! Yes!
We could call it 'Water' and claim that it clearly came before Steem, or that it's liquid steam.

Wow so much about Steem makes so much more sense to me now. Thank you so much for writing this series, just went back and read the first post as well. You rock! C² is featuring this post in the next issue of Exponential! Featured Posts on the @c-cubed blog which will be published at midnight UTC. Cheers :)


This post was shared in the Curation Collective Discord community for curators, and upvoted and resteemed by the @c-squared community account after manual review.
@c-squared runs a community witness. Please consider using one of your witness votes on us here

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.033
BTC 62934.09
ETH 3118.65
USDT 1.00
SBD 3.85