Main problem of decentralized apps

Hi, i’m thinking about decentralized apps for a few days, and found out that there is no fully decentralized app. We have several nice apps like Akasha, Leeroy, OpenBazar, D.tube, but all of them except Leeroy can not be named as decentralized apps.

For example Akasha. Akasha is using ipfs and ethereum networks. When user is registering, akasha is send coins to this adress, bcs we need to pay for gas. So, we have at least one centralized server, without which the system will not work.

More decentralized app from my list is Leeroy, bcs they are using Ethereum blockchain for storing their posts, but it’s expensive, for example when kryptokities was started, gas price was about 2 . I dont think, users will pay 2 or more for posts.

I thought how to build decentralized messenger on top of ipfs. Everything will be fine until one node goes offline. And if we need caching server, we can not name this app as decentralized messanger.

Maybe someone knows a nice example of absolutely decentralized app? Without any centralized “ping” or “caching” server?

1 Like

It’s actually rare to have a system fully 100% decentralized. There is often some fixed point but it often doesn’t matter.

With your definition, IPFS is not decentralized either because it use fixed bootstrap node. If these bootstrap node disappear, a new node will not be able to connect to the IPFS network anymore. Does that mean that IPFS is not decentralized ? No. It’s decentralized for practical purpose. These bootstrap nodes can be replaced easily by anyone.

Akasha use a server to setup a new account ? It’s not really important as it can be replaced easily. What matter is where the data is, how user communicate, if there is a single point failure.

Please have a look at what others have already done to work out how to do these things.

These apps only depends on a storage solution:

http://unhosted.org/

There is even a protocol for it, a quick look at the ‘Unhosted Architecture’ section on this page makes it immediately clear:

https://remotestorage.io/

They are actually working on standard:

https://tools.ietf.org/html/draft-dejong-remotestorage-10

I think this means if you make a protocol which allows for a browser to store on IPFS, then you are done.

Or maybe even have the seed node be the browser ?:

Don’t forget a standard exists for offline-apps:

https://www.w3.org/TR/offline-webapps/

I think it’s just a matter of giving IPFS more time and get more people to join, develop, and let the whole project grow and flourish.

Bear in mind that IPFS is somehow “new”. Remember how the first days of client-server internet were? Keep working, be patient, and everything will grow and develop.

As Zooey notes it’s mostly a matter of time. The killer app in my opinion is going to be js-ipfs, when it’s ready. I’ve so many ideas bouncing around for things I want to implement but I can’t really do so until certain components of js-ipfs are ready. I think it’s probably the same for many others out there.

I’m personally interested in making “personal” decentralized apps, think productivity tools, where there is no need to coordinate between users. I also need a lot of storage, more than would be allowed in a browser etc. It would also be ideal if it could be used from any platform, no matter whether there is an ipfs implementation for it (think iOS etc). So the only solution I see is for the user to use some other ipfs service for pinning etc.

What I’m thinking is, why not use the ipfs node interface as a standard for interacting with a user’s data. If we had authentication and granular permissions on subtrees of the MFS, then we have a way of building an app where the user is in complete control of their data, as it “lives” on their own, or a rented server somewhere. This way would not perhaps be decentralized, but at least the data is portable to any service that implements the ipfs node http api, and you could easily self host.

Is this a bad idea?

How about semi-decentralized? like you have a central node but even if this node is currently offline the network still works.

Example: you got a semi-decentralized youtube where the central node goes down and in the meantime you can’t upload new videos but you can see the ones that were already online before the central node went dark since those are stored in the other nodes.