Hivemind (Steemit)
Basics
"Hivemind has the potential to offer the strengths of so-called “Smart Contracts” with almost none of the downsides. Hivemind will enable us to create Communities on Steem (among many other features), which is why it will play a critical role in the future of steemit.com, and the Steem ecosystem as a whole."
- From an Steemit blog interview (10-2019)
"The reason why we’re referring to it as “Hive Communities” is because we are talking about a feature set that is built using a piece of software you developed called “Hivemind.” Could you explain why it was necessary to build Hivemind before building Communities?
@roadscape: In layman’s terms, Hivemind provides a framework which is easier to develop and faster to iterate on; it bridges the gap between frontend and backend. Hivemind basically just stores posts in a traditional database, is written in Python, and allows you to process arbitrary events. Although Communities could have been written as a steemd
plugin (in C++), leveraging standard web technologies makes development more flexible and accessible.
@andrarchy: Hivemind isn’t just limited to Communities-related features. From the sound of it, Hivemind can support a seemingly infinite number of feature sets. It almost turns Steem into a smart contracts platform, except without a lot of the downsides. Is that right?
@roadscape: Yes, Hivemind can do an infinite number of things. However, it’s important to keep in mind that Hivemind is geared toward social applications. Certain trade-offs were made that are important for developers to understand. For instance, hivemind trades consistency for speed and simplicity. To be as consistent as the blockchain itself would essentially require you to re-implement steemd in Python. Currently it is not equipped to robustly handle forks, thus, it is not ideal for wallets or financial transactions. For instance, to avoid inconsistencies due to forks, you could follow the last irreversible block, but then the data would all be a minute old. Alternatively, you could implement an undo database, though this would decrease capacity and make the system more complex."