Join with BlogChain
Last year, I created proof-of-concept decentralized blockchain-based blog, which is called BlogChain. It uses Ethereum Smart Contract and Web3.
It currently creates smart contract for each "blog". The owner (originally creator) of the contract can then add, edit or delete posts which are currently stored as string in contract. This has downsides because creator of the blog must pay gas for deployment and contract interactions, so I started researching alternative options for hosting.
For more details see issue #2 in my project.
I found OrbitDB and this project and I think that both of ours projects can be joined. Both of them have some limitations that should be removed.
In my project, posts can be added from any computer that has MetaMask with owner account. Owner could also be changed but multiple owners are not supported (but they could be with contract update). Contract usage has advantage because it can stay the same even after adding posts, but disadvantage because owner must have ETH for gas. It is currently completely client-side so server is not needed (except MetaMask for connection to ETH network).
In this project, posts are stored in OrbitDB. This has advantage because gas is not needed. It currently also has disadvantage because posts can be added only from browser that originally created blog. If someone created user in different browser or computer, but with same details, the hash and blogs will still be separated.
I have idea how this can be implemented:
- Website can use JS IPFS (for hosting peer itself) or IPFS HTTP client (for connection to public gateway like Infura API]. Both of them should be combined for better scalability.
- When author want to create the blog, it is authenticated (see bellow for identity possibilities).
- The blog is created as new OrbitDB database (probably feed type) and author is added to write access.
- Author can then update blog (add, edit and delete posts) and add more owners (with write access).
- Author can give blog (database) hash to other users that can view it. There should be support for pretty hashes (Namecoin and Ethereum Name Service).
- When author use different browser or device, it is just authenticated and can continue to maintain blog.
Blog (database) hash must always be the same even if data are added or write access is changed. This is currently not supported in OrbitDB but it is work-in-progress. See OrbitDB issue #292 for details about that.
Because OrbitDB is very complex and difficult, at when it comes to that write control, it may be better to use 3Box for this. It also uses OrbitDB and IPFS, but it also adds easy control and access to data. So, author of the blog post could first make a draft, which would be private, and later add public post.
Identity can be done with ETH message signing (post about that) and/or decentralized identity projects (uPort, 3Box, Blockstack, Peergos, Hydra). For better user experience, multiple providers should be supported.
There should also be support for client APIs for JavaScript, Python, PHP and other languages.