Social Media Architecture with IPFS

about that i found that : https://github.com/jonnycrunch/ipid

@josselinchevalay yes hes the one who registered the did:ipid method.
More on that can be found there: https://github.com/WebOfTrustInfo/rwot7-toronto/blob/master/draft-documents/ipld_did_documents.md

I don’t have a solution (sorry) but just want to point out a problem with any reputation-based approaches: polarizing content gets the most reactions. On most social media the best metric is shares/retweets, which are rare, so they only happen when a user feels very strongly about something, i.e. because it’s polarizing. If 100 people think a post is decent, it’ll get 0 shares, but if 99 people think a post is low quality while 1 person gets riled up about it, it gets 1 share and way more attention. I worry the same thing would happen with your reputation system: FoxNews would get tons of reputation from their very polar audience, and AP will get none because plain unbiased facts are just not as invigorating.

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.

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

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…

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)

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…

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”.