I figured it was about time to write a recap of what's been going on the last few months in the world of @jesta. So here we go.
2018 so far has been full of challenges and learning, which is both great and ultimately doesn't end up with much work to show for it. On the 1st of February I published a post about my potential roadmap and goals for 2018. This update is primarily a follow up and progress report on where I'm at in this process.
Throughout this post I'll break down 2018 so far, some perspectives I've picked up during efforts, and where I think things are heading.
2018 so far
Here's a monthly overview of the past 5 months of my efforts, besides the usual block production duties/maintenance and lively debates ranging from curation to SMTs:
- January: January was the start of my attention towards paying the "tax man" for 2017. I created a couple tools for collecting this data using SteemData (RIP) and started the process of collecting data for tax reporting. Vessel saw a few upgrades to address node instability (which sadly still happens today) and all of my development brainpower was put towards building the "foundation" of a brand new wallet. Much of this time was spent analyzing what could have been done better in Vessel and how specifically those areas could be improved.
- February: Wallet R&D continued, with the decision to rebrand this new wallet, choosing as "Anchor" as it's name. The initial Anchor (prototype) code was published to github and the majority of the month went into actual implementation of "better vessel" UI ideas and looking at the best parts of other wallets. Towards the end of the month, development on Anchor slowed to a halt as I continued to do research on wallet formats and the external APIs that would be needed.
- March: My development focus shifted to backend/APIs. Three new projects emerged over the course of the month. These were all reusable core parts of what an API would need. Two of these are published on github works-in-progress, one being chainsync and the other being chainmodel. The third project, which I only spent about a week on and dubbed "chaindex" (a play on chain + index) was an experimental API for wallet synchronization (which could be expanded for other uses).
- April: Taxes finished, but consumed a full week to knock out. chainsync is in a pretty good place at this point, but now could use a revamped http/rpc adapters - which is the next milestone. The experiments using chainsync to create the chaindex database got hung up on a few technical snags and it led to a small diversion: I needed a better hardware/server infrastructure to accommodate this kind of work. Towards the end of April I started touring various data centers in the region with the goal of deploying my own hardware - instead of the rentals I've used for the past couple years. I had also been researching server hardware and ended up pulling the trigger on a handful of servers, switches, and various equipment needed to deploy the first rack.
- May: Towards the end of April I picked up a nasty flu/cold combo, which really kicked in hard at the beginning of May knocking me completely offline for over a week. After recovering, negotiations continued with a few data center providers - I had chosen my top candidates and it was a matter of negotiating contracts and getting a lease setup. I ended up signing my first lease. The first handful of servers had arrived, so configuration/benchmarking/setup of those resources has now started and is nearly completed. In about a weeks time, I'll be spending a couple days at the data center to finalize their installation/networking, and then start migrating a portion of my "live" services over to them. Throughout May, I've also been talking to @anyx a great deal and we have decided to partner up on a new venture - which is elaborated more further down in this post.
This leads us up to current day. I'm sure I'm missing a couple things - but it's enough to give everyone a rough idea of what I've been up to and the path I've been on.
The original concepts in my 2018 roadmap were never outlined as a clear path from A -> B -> C, but instead put out as a desire to see critical aspects of the system improved. As 2018 progresses, I plan on continuing (much like I have these past months) in taking steps to foster the development of these new tools and applications.
As time permits and as actual "usable" projects start emerging, you can expect to hear a lot more about these in detail.
Besides the projects mentioned - there's a few fundamental perspectives I'm trying to to sustain as I continue on:
- Don't rush to release (unless critical).
- Doing one thing, and do it well.
- Don't repeat yourself.
That last one feels like an old friend that I've lost over the last few years working in this space. Which leads into a topic that I'm trying to embrace:
So far in 2018, I have had an intense focus on the abstraction of my work.
It's an effort to make the components reusable, not only by other developers on Steem, but hopefully to other developers on any similar blockchain. I believe it's a valuable aspect of this kind of work and one that we are sorely missing. Much of the work being done for various blockchains ends up being "open-source", but I think we soon will hit the point where we need to focus on "open-blockchain" solutions. This is a topic that if I had the time, I'd love to blog about and really engage in some discussions.
My problem is this: as a developer working in this space over the years, I've had to "reinvent the wheel" probably a dozen times. I'm sick of repeating myself - so I'm making one more wheel, but plan on reusing it wherever possible.
To date, Steem is by far my deepest involvement with any blockchain, but I have also contributed and taken part in a number of other DPoS blockchains including Golos, Decent, Peerplays, Muse, Karma, and most recently EOS. These blockchains (and probably a dozen more) all exist in the same "family" and have a lot of common elements - but none of the web-related technologies between them are shared. This ends up limiting how productive developers can be with each individual platform (due to the aforementioned wheel-making) and it makes it difficult for people/projects to shift between platforms/protocols. It's almost like "vendor lock-in", which could be seen as great for investors, but terrible for anyone actually working in the space (developers and systems administrators).
I want to help change that. I understand that this decision may turn out to be an unpopular one on my part, but I feel it's something I can do to help show that this strong tribalism we've seen recently isn't needed.
Why? /soapbox - The next evolution of the internet won't happen because a single blockchain did one great thing, it will happen across hundreds (thousands?) of blockchain platforms because they are collectively doing many great things. Technologies will be shared across platforms, causing each to evolve in it's own unique path, all while ultimately revolutionizing our trust in data.
The application of abstraction
Each one of these bullet points really deserves it's own post, but time is a finite resource. So, with the types of abstraction discussed above in mind, here's a bit about my efforts and how this concept applies to each of the projects I've been working on:
- Anchor: Anchor is primarily a wallet service that runs on your computer, under your control, that will enable you to perform actions on blockchain networks. It will be able to store private key information securely and utilize any protocol that is integrated. I don't want to promise that Anchor itself will support more than one blockchain - but I want it designed so it could be adapted and used by other blockchains.
- chainsync: chainsync's purpose is hook into a blockchain to observe some sort of activity (whether it be actual blocks, or specific things like comments/transfers/etc). chainsync itself provides an abstract interface that will allow adoption to any similar blockchain, which will allow developers to reuse chunks of code for different projects. A good example use case of chainsync is the 6 block explorers I run. These block explorers currently all require a different applications to populate the explorer's database - but with something like chainsync, I'll be able to write one common application that can sync them all.
- chainmodel: This is another abstract interface, which is designed to be paired with chainsync (but isn't required). The concept behind this library is that it takes the data received by a sync process and can model it, transform it, and in general just help clean it up based on the needs of an application. A simple example would be changing a steem "standard date" (e.g.
2016-09-02T20:50:06) into an a format acceptable by your database (maybe a timestamp).
I am not at the point where I recommend these projects for critical use cases, but you're free to tinker with them or lend a hand. I am currently still verifying they are actually built right and will continue to evaluate their design as work begins on:
- Block Explorers - APIs: All of the explorers will use a new set of APIs, and the new data behind them will be populated using chainsync/chainmodel. This will allow a standard process in how they sync data from their respective sources. verything related to this is still conceptual and development hasn't started yet. The goal is that anything a site like SteemDB would need, these APIs should be able to provide.
- Block Explorers - Frontend/UI: Much like the APIs, the UIs themselves will also use a common core that allows for theming and easy adaptation. With the combination of the native explorer APIs (and potentially chaindex), I am hopeful that basic explorer interfaces could be further configured by individuals in any community, allowing for unique perspectives into the blockchain itself.
- Anchor (key storage): The key storage engine in Anchor is going to be designed to be blockchain-agnostic. "Key Security" should be a right regardless of the chain it belongs to. I have been talking with a couple people about some of the best ways to accomplish this.
- Anchor (defining uri scheme): The URI scheme Vessel started using needs to be established as a standard, most likely that is abstract enough for other blockchains similar to Steem to adopt. There's no standard like it right now and will have it's own set of unique challenges to overcome
- Anchor (chaindex integration): Anchor won't require a connection to a chaindex node, but connecting to a chaindex node will certainly provide some flexibility in how Anchor can be used. Certain features may require it (filtering of transaction history), while others may just improve in performance because of it (retrieval of transaction history).
Lofty goals and a lot of work
These goals are absolutely huge. They are ideas that are larger than me alone, but I'm still up for the challenge and trying to make them happen. I'll continue to progress on them as I have, but I also am still trying my best to not go this alone.
Being a part of a team is good, but picking the right team is critical.
Since joining Steem - one of the goals I have had is building an organization that sets out to help solve the problems faced when integrating blockchain technologies. I've written about this idea in various forms many times throughout the almost two years of blogging and the posts from @greymass in late 2016 were a serious attempt kickstart something.
A number of issues ultimately stopped those efforts, but one of the most common (and arguably largest) factors always turned out to be funding.
Well, 2017 changed a lot of things with it's historic rise. During 2017 I was fortunate enough to be one of the top 20 witnesses here on Steem. I was also a top witness at times on Golos, Peerplays, Decent, Muse, and Karma. This may sound like a lot - but you have to consider the prices we see today aren't what they were. All together my "salary" in Q1/2 of 2017 was roughly $2-3k/mo (pretax). I ended up moving across the country because of this, to save money, and to prevent having to get a "real" job. Being involved in blockchain is what I was passionate about and I couldn't to lose focus.
Things have changed (obviously) and now those same rewards are worth much more. These rewards are public knowledge (e.g. steemdb.com - my powerdowns), so I'm not incredibly concerned with sharing this type of normally private information. These blockchains (your blockchains) have enabled people like me to essentially work for a community, be financially rewarded, while doing our best to support the overall good. With that said, it makes sense that the voters know what's going on.
At current market prices, provided all stay relatively stable (haha...), I am at the point now where these rewards should allow me to comfortably afford both the operation of my own enterprise-grade infrastructure (to support the networks), as well as hire at least one additional (very experienced) head-count to help keep the ship running.
This is all fantastic, but it's still peanuts compared to the funding it'll actually take to accomplish all these goals in any reasonable timeframe. The last team I professionally ran had a budget multiple times larger than what these rewards currently provide.
So, while inching closer, my plan is to continue expanding both in cooperation with others and across any network that see's the benefit in these ideas. With an emphasis on blockchain-agnostic solutions, my efforts and experience developing these open-blockchain solutions should add additional value to any and all of these developing ecosystems.
In line with this concept - I also recently joined forces with @anyx, under the @greymass name, and we announced our candidacy to become a block producer on the EOS network. Over my years on Steem, I've talked with anyx extensively and developed a great respect for him. We have similar ideals, thoughtful debates, different backgrounds, and equal passions for the application of this technology. This is the start of a new partnership, with some new and old faces likely to be a part of it.
I am optimistic that this could be the start of the organization I've been talking about for so long - but only time will tell. There's an incredible amount of factors involved, including you (the token holders, of all networks), the direction of the industry, the laws that govern us, the legitimacy of all these ideas, and the will of the markets themselves.
Thanks to all of those who have supported my efforts so far with your vote, trusting me as a block producer/witness, and to act as a representative of the best interests of these various networks. You have allowed me to undertake this journey and I truly appreciate the opportunity. I can only hope I've met your expectations.
Disclaimer: Proper grammar isn't one of my strengths and I don't have someone proofreading my gibberish (yet?).