The communties implementation being done with Stratos is nearly complete! So far I've implemented a huge amount of features to the communities; currently the node source is nearly done. I've implemented community roles, posting, blocking, and featuring. I've created a pull request for the progress (still have a bit more to do) at https://github.com/stratos-steem/stratos/pull/7 . Here's the pull request content:
This implements communities similarly to as described in the Steem 2017 Roadmap https://steem.com/2017roadmap.pdf.
Anyone can create a community with
cmmts_create
with id [id]. A community's ID should never be displayed to the end user and is restricted to only the lowercase alphabet including dashes (-). They will automatically receive the role 'owner'. Then they can assign roles owner, admin, mod, author to other users by usingcmmts_grant_role
with role receiver [receiver], role [role], and in community id [community]. They can also remove the role by usingcmmts_remove_role
with the same permissions. If a role is granted to the nonexistent account @eo, then it is considered granted to everyone by the node software. This allows for public communities where anyone can post.
Here are the permissions each role has. Note that each role can remove any other user in the same role or below (except author which can only post).
Anyone with role author or above can post by creating a post with a property json_metadata of the full network prefix (for mainnet this would be
stratos_0_
) pluscmmts_post
(for example in mainnet this would bestratos_0_cmmts_post
) containing the id of the community to post to.
Anyone with role mod or above can block (remove) a post by creating a
cmmts_block_post
operation with permlink [permlink], author [author], and in community id [community].
Anyone with role mod or above can feature a post by creating a
cmmts_feature
operation with permlink [permlink], author [author], and in community id [community].
That's the basis of transactions, documentation for APIs will follow soon.
So to build this I ended up creating an SQLite database to store this Communities data. The only thing left to do in the main project is to allow admins to change some metadata about the community such as a profile pic, display name, banner pic, and description. After that I'll create an API for interface devs and community owners to use to create web applications for Communities.
This concludes this quick update about the communties implementation. I'll be posting a bit more informational posts soon - mostly targeted to interface devs and community owners as I'm starting to come close to launching Stratos with Communities.
This sounds really exciting. How comes that your project is so far ahead of the official communities project?
It isn't. Much of our community work has been done for a while, we just often get sidetracked developing other infrastructure-critical projects like Hivemind and MIRA. In addition, back end software like this isn't of much use without a responsive front end interface (i.e. a user interface that works well across all devices) that enables users to interact with it. Most people have one specific feature they want and they imagine we are focusing all of our attention on that one thing, whether it's SMTs, Communities, or MIRA. The reality is more nuanced. We are working on all of these projects, but not necessarily at the same time, and not necessarily with equal priority. The hard part of Communities was Hivemind (complete) and UI. We provide lots of free services and software to this community (our nodes, Condenser, Jussi, Conveyor, Hivemind, soon MIRA, etc.) and the cryptowinter forced us to to scale-back, re-think our approach, and focus on cost reductions and advertisements so that we could continue to support the Steem ecosystem. It's not so much that Communities is hard as running a sustainable blockchain company that gives all of its software away for free is hard. That's why Communities aren't out yet.
Thanks for the great explanation and I don't wanted to underestimate your work that you do everyday to develop new features for the Steem ecosystem.
I really appreciate your efforts and hard work towards the community and hope that things will play out well in the future. I think from what I heard you guys are on a good track to complete the next milestones like MIRA and SMT-lite.
Since, I have you here to talk...I had this idea in my head and wonder how the economical relationship between Steemit.inc and all these Dapps/SMT is going to be in the future. I mean Steemit.com is more as a user another Dapp or Interface to the Steem Blockchain like Busy or Steampeak, but the big economical difference is that its native token is Steem for Steemit.com and the reward pool is tied to that Dapp. So, in my head that is hard to compete for other Dapps or SMT since they need to create there token on top of Steem. What I'm trying to say is wouldn't it be better for the future if the interface Steemit.com would create its own SMT and own reward pool instead of being tied to the Steem Token and Steem reward pool. This would make the playing field more fair and even in the long run for all Dapps and communities.
I'm curious what you think about this idea?
Thank you for your time.
Perhaps, but that's way outside of the scope of anything we are working on now. Right now we're just focusing on delivering the features we've promised. Once SMTs are live, then we can have that conversation ;) Thanks!
I honestly don’t know... All of this code I built myself, from the steem-state foundation to the full communities implementation. I can’t believe a group of ~12 full-time developers are struggling so much with implementing this. It’s been promised for 2 years (note that this is based off of the 2017 roadmap) and they have still barely even started.
The only explanation I have is that Steemit Inc is just incompetent.
I don’t think he works for steeminc
burn. lol.
Way to go! Does one need to run a stratos node to use cmmts json? Or can we use your other library (non-stratos) steem-state alone?
So to be able to interact with this you have to at least connect to a Stratos node. For example you could login on SteemPeak and view data from their Stratos node as well as post transactions through Stratos. Next I'll be figuring out how to make it easy for SteemPeak and other apps such as Homesteaders Co-Op to integrate Stratos into Steem.
steem-state is used to make building nodes like Stratos easier but can't replace the Stratos code.
Oh I thought you gave me the steem-state link saying I could make json communities with it. I could, but it would be my own structure for how it works, like what you have done with Stratos, right? With Stratos, the structure is already being setup and doesn't need to be made. Is this correct?
Yes. steem-state is a way to build projects like Stratos but can't interact with Stratos or anything.
steem-state is the foundation and Stratos is the actual DApp, and has already been built, like you said. You could create your own version of Stratos, your own Stratos client (since it's all on the same blockchain), or an entirely different DApp.
I am very excited about this development, I just started following you. Thank you very much
Posted using Partiko Android
This post has been included in the latest edition of SOS Daily News - a digest of all you need to know about the State of Steem.
Editor of the The State of Steem SoS Daily News.
Promoter of The State of Steem SoS Weekly Forums.
Editor of the weekly listing of steem radio shows, podcasts & social broadcasts.
Founder of the A Dollar A Day charitable giving project.