Social Media Architecture with IPFS

Very good point. I will need to do further research.

Mastodon has done some good research to differentiate itself from Twitter. https://blog.joinmastodon.org/2018/07/cage-the-mastodon/

Perhaps reputation can be adjusted by a combination of click-to-view-details events combined with like/share events. The quantity of followers of an account is another indicator of reputation.

1 Like

That Mastodon link is really interesting, I didnā€™t think about how dangerous something as simple as ā€œsharesā€ could be. There are definitely some good thoughts there.

Also, on the topic of social networks, I wrote a short blog post recently and I wonder if you guys think itā€™s accurate in terms of the primary advantages of a decentralized social network. Thereā€™s been a lot of talk here about content creators and reputation, but I focused more on the Facebook use case, where itā€™s less about following content creators and more about regular user interaction.

You guys need a data model that is a) generic b) has URIs as native IDs c) has a zero-cost merge operation

Currently there is only one that fits the bill: RDF, plus Linked Data. Itā€™s a directed graph model with mutiple serialization formats: https://www.w3.org/TR/rdf11-primer/

Tim Berners-Lee and Solid are working on the same goal of decentralization using RDF: https://solid.inrupt.com/about

2 Likes

thx yep we have already talked all points on that but yes thatā€™s good path

Here is a WebOfTrust based blockchain (http://duniter.org/) aimed at forging Libre currency (Relative Money Theory, https://libre-currency.org/). Started on March 8th 2017, Itā€™s called June (įø 1) and is reaching 1935 members as of today (https://g1.duniter.fr/#/app/wot/map).
To ease transactions, a market place exists: http://gchange.fr/ (using elasticsearch as backend)

It would be great to benefit from a social media system between members, I am thinking it could be done through IPFS. Submitting there, in case a great tool is coming :wink:

2 Likes

i know this theory and this blockchain and iā€™m very intresting about that. maybe that can intrest also this project : [COMMUNITY DISCUSSION] IpfsCloud v2.0 Draft

1 Like

This looks really interesting!

2 Likes

OP is rather similar to a project Iā€™ve been working on for a couple months nowā€¦
Itā€™s quite simple but elegant IMO.


Iā€™ll post a follow up when I get off work lol

1 Like

The original idea was to use a DHT to serve(requests for a particular public key) a magnet link(and signature) to a json file containing profile information, including other magnet links which represent a users publications. I experimented with IFPS/IPNS a bit and liked the API, so I decided to make the switch. Now, instead of the DHT responding with a magnet link, Iā€™m using IPNS to respond with an IPFS link which points to the aforementioned json file. This architecture can be used to publish arbitrary content types (videos, blogs in the form of txt/html files, etc) and the UI(electron+angular) will render the media accordingly.

Development has been going well, expect I canā€™t seem to get IPNS to serve the IPFS links outside of my local network. Until recently, Iā€™ve been using the default config. Anyone have any thoughts on a more reliable way to configure? I will probably post this in an OP. So if this seems like the wrong venueā€¦

1 Like

For public network, you need DNS Link ?! https://docs.ipfs.io/guides/concepts/dnslink/
But, you need an API access to your DNS and changes propagation takes timeā€¦

Any social / sharing / logging layer above IPFS would be awesome nowā€¦
@iohzrd did you have a look to Textile. It has a good documentation and functionalities can be extended to any formatā€¦
What is your opinion?

I wasnā€™t planning on having the identity files be accessible via http/s / regular browsers(except via webtorrent). Rather, have electron acquire them directly through ipfs(which would already work if IPNS was more reliable/ i could figure out how to configure it properly) , so DNSLINK isnā€™t relevant. and considering What Iā€™m going for is a publication / subscription (think youtube minus all the manipulationā€¦) platform, where ones content is, well, public. Iā€™m not sure textile is of much use TBH. I see no need to do anything more complex than serve json files containing magnet/ipfs links. One of the main design goals for this project is censorship resistanceā€¦

In fact, webtorrent is so reliable at this point that Iā€™m not even tied to using ipfs for the distribution of the actual content files, and therefore am primarily interested in using IPNS as a means to have a persistent identity pointing to mutable content (the identity file)

1 Like

abstract flowā€¦
IPNS / dht.GET(pubkey) -> ipfs_hash/magnet_link -> profile.json = list of ipfs_hash/magnet_link(s) to users publications -> magnet/ipfs link -> content.

example identity fileā€¦

{
    "arbitrary_key": "arbitrary_value",
    "display_name": "iohzrd",
    "email": "iohzrd@protonmail.com",
    "homepage": "https://www.example.com",
    "identity": "QmYHExHtTzFEjdwyQcJkD9gaKKgfwvGswoFb4simrJn5Q6",
    "pgp": "",
    "publications": [
        {
            "desc": "",
            "title": "1200px-Greek_letter_uppercase_Phi.svg.png",
            "file_name": "1200px-Greek_letter_uppercase_Phi.svg.png",
            "magnet": "magnet:?xt=urn:btih:359eadd749a2cbf8009468a77d05809d46bd8448&dn=1200px-Greek_letter_uppercase_Phi.svg.png&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com",
            "ipfs": "Qmc7j7QsVo7Zi8TMqLuVpGA1vXDTmPZVr7rXVkd6tjaGro",
            "ts": 1556395572915
        }
    ],
    "publications_archives": {
        "1": "ipfs/magnet link to prior content list that got too big(>100 or something)",
        "2": "using this we can do content pagination"
    },
    "some_cryptocurrency_address": "3FkenCiXpSLqD8L79intRNXUgjRoH9sjXa",
    "some_social_media_account": "https://twitter.com/iohzrd",
    "suggested": [
        "friend_identity1",
        "friend_identity2"
    ],
    "timestamp": 1552563530
}

my approach to this, is simply to not have a reputation / rating system at all and leave all of that to good old human interaction (sharing IRL, mirroring, whatever) or at most, each identity having a ā€œsuggestedā€ field (see above) so if you trust one publisher, likeliness is youā€™ll enjoy publishers they subscribe to. Basically, word of mouthā€¦

1 Like

Itā€™s easier to over engineer something than it is to get it just rightā€¦ and to be frank, i donā€™t think there is a way to get a reputation / rating system ā€œjust rightā€.

Holy molyā€¦ Iā€™m a bit late to the party I guessā€¦

I have not read this whole thread but only the intro postā€¦ thanks for noticing me! I am working on a prototype implementation of my ideas using Rust and GTK for the GUI. Nothing is there yet, as Iā€™m still figuring out the details of the protocol and how to effectively use IPLD rather than putting links in JSON and traversing ā€œby handā€.

do you have a gitlab repo or github repository about that ?

Not yet because I want to figure out some stuff before publishing. But I will publish as soon as I have a working minimal POC!

Following is a summary of a potential method to combine social media with IPFS, based on current state of the technology, that I posted on Gab at:

Iā€™m exploring creation of alt-tech, in the form of an open source, resilient, easy to install, peer-to-peer chat and file management system, targeted for use in oppressive societies, and looking for a group discussion on the merits of such a project.

The current concept being explored uses an open-source browser, modified to have a chat sidebar feature. The user would install the following apps:

  • Browser with chat feature and WebRTC built-in
  • IPFS Companion extension in the browser
  • IPFS Desktop app

IPFS would be used for the following:

  • Distributed chat/file system peer server
  • Resilient infrastructure
  • Distributed file management
  • Signaling protocol for WebRTC

When the chat feature is launched in the browser, the browser would talk to the IPFS daemon to identify available peers that also support the chat feature. The user could then try to initiate chat with one or more suitable peers, where the data streaming for the chat would occur via WebRTC

The chat UI could be designed to do some of the following to aid research/collaboration:

  • Allow linkage to IPFS file resources
  • Normal web URL hyperlinks
  • Establish chat groups
  • Identify trusted chat peers

I have a Google shared doc started for project specs development

4 Likes