elsehow / hyperchat2

p2p messageboard around a hyperlog
2 stars 1 forks source link

IPFS for distribution #14

Open hackergrrl opened 8 years ago

hackergrrl commented 8 years ago

I wonder if IPFS could be a good distribution target? I've also been playing with this similar distributed app design of hyperlog + webrtc for state/discovery/routing. Still, getting users to the base page to connect to the swarm in a safe and reliable way is really important.

Using IPFS, this could be made to both a) be distributed && fault tolerant (many peers can host the bootstrap page to your chat) and b) grant implicit integrity checking (if I give you the address /ipfs/Qmfoobarsomechatroom then its content hash must match this address). You could even distribute it as a regular HTTP URL for non-IPFS users using the public gateway (https://ipfs.io/ipfs/).

elsehow commented 8 years ago

nice! yes, content addressing in general is a good way to distribute the built html files, because we get that integrity checking for free, as you mention. i'll definitely distribute over IPFS for the next major build of the dev board.

one problem i keep running into is the need to communicate versioning information out-of-band. i remember hyperboot addressed this, but i'm not sure if that project is being maintained, or if it's really necessary for our use case.

hackergrrl commented 8 years ago

You could use the chat swarm itself to replicate versioning info:

  1. new user goes to the pre-defined bootstrapping gateway IPFS url
  2. it connects to the chat swarm and replicates a merkle dag describing the full version history, with links to each version's IPFS hash
  3. user chooses which version to use, taking them to that website that loads up the actual chat app

One problem though is who gets to publish new versions? Maybe the user who originally started the chat can sign messages published to the hyperlog stating that a new version is available. Maybe that initial bootstrap page contains the public key of the chat creator, so that the version dag can never be spoofed.

harperj commented 8 years ago

If someone wanted to pass along versioning rights to others, they could either share the private key they use to sign versions or publish a signed message approving other keys as "version publishers" or "administrators" if we would like to view it that way.

On Wed, Mar 16, 2016 at 12:13 PM, Stephen Whitmore <notifications@github.com

wrote:

You could use the chat swarm itself to replicate versioning info:

  1. new user goes to the pre-defined bootstrapping gateway IPFS url
  2. it connects to the chat swarm and replicates a merkle dag describing the full version history, with links to each version's IPFS hash
  3. user chooses which version to use, taking them to that website that loads up the actual chat app

One problem though is who gets to publish new versions? Maybe the user who originally started the chat can sign messages published to the hyperlog stating that a new version is available. Maybe they also sign the very first message in the chat to prove they are the creator of the chat too.

— You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub https://github.com/elsehow/hyperchat2/issues/14#issuecomment-197496191

hackergrrl commented 8 years ago

@harperj: Yeah, exactly! The chat hyperlog could have metadata messages like "here is a proof that this user now has these permissions" and it'd replicate & preserve causality for free.

elsehow commented 8 years ago

sounds great. I am sold.

sounds like the we should publish a messageboard over IPFS. then, we can use that board to announce new versions, signing the checksums

we can also distribute encrypted boards there, to friends whose public keys we have

hackergrrl commented 8 years ago

More: you may get ideas from https://github.com/haadcode/orbit or its back-end https://github.com/haadcode/orbit-db. It's author, @haad, is working on IPFS now and has lots of good ideas on these kinds of apps!