Join the discussion

Write your take first — we'll ask for email only when you're ready to publish.

  • Hacker News
  • Big fan of this project. Three years ago, I interviewed Ian Clarke about his upcoming Freenet rewrite. He's the original "OG" of decentralized content networks. We go into detail regarding its architecture on the podcast:

    https://www.youtube.com/watch?v=JWrRqUkJpMQ

  • In my early days of technology tinkering when I was young I was always interested in security, and one day I stumbled upon freenet, and my world changed.

    It was amazing and led me to get far more acquainted with the cyberpunk scene. It was this alternative separate internet from what the rest of the world saw with all of the good and bad that brought.

    I've been meaning to set it up again and get back into it. I will say for everyone pining for the Internet of yesteryear freenet is it. Go and explore it it is everything the 90's Internet was like, super slow, crazy unhinged nerds all over the place random collections of links, crazy.

    Thanks for all you've done Ian

    Edit: Btw what is the best way to support the project and get involved?

  • Very cool project!

    > We've developed a unique (AFAIK) solution to the consistency problem, every contract must define a "merge" operation for the contract's associated state. This operation must be commutative, meaning that you can merge multiple states in any order and you'll get the same end result.

    Where can I learn more about this? How is this different from CRDTs/CmRDTs?

  • Very interesting. Beyond ideological motivation, I’m curious what the long-term incentive is for someone to run a peer.

    For example, if Freenet were to reach scale, it could eventually need some kind of economic primitive around it. Something similar to how Filecoin handles decentralized storage, but for app state. One way to do this could be paying peers to keep app state available, serve it reliably, etc. and prove they are doing so.

    by alun
  • Neat. I've been wanting to see WASM-defined network behavior like this for a while (yay arbitrary consistency algorithms!), I'll have to explore it in more detail :)

    (the main thing I've been wanting to try: rather than graphql, send a WASM blob along with your request to a server, and just run it to filter fields in the response / pipeline requests / define "fail if any err / pair errors with requests" for concurrent requests. arguably you could even have it control callee-internal retries.)

  • For values that don't have a natural merge function (or where you don't want to bother writing one), would it make sense to sync update logs instead? That is:

    - The synced value is a history of client updates, sorted in some eventually consistent order (e.g. by hybrid logical clocks). Merging takes the union of the update sets.

    - The user-visible value is the result of processing these updates in order, using arbitrary contract code.

    This is overkill for simple last-writer-wins values, but it lets you support fairly general data types & arbitrary update functions, including ones that preserve application-specific invariants.

    The Automerge CRDT library works like this already [1][2], but it only allows specific updates to JSON data. Sharing code via your contracts solves the hard part of generalizing that to arbitrary data & updates.

    [1] https://automerge.org/

    [2] https://arxiv.org/abs/1805.04263

  • It feels like the state merging approach just pushes the hard problems onto the user, without giving them the tools to solve those problems properly.

    Imagine an application where an authorized group of users can create and vote in polls, using cryptographic signatures and public/private keys for user verification.

    What prevents me from connecting and saying that "everybody's state is wrong, that poll in 2024 which didn't reach quorum actually did, because I voted in it, here's my vote." How can the state merger know that the existing state has been valid for two years, and that the vote shouldn't be retroactively applied?

    Blockchains solve this by having state get more authoritative as blocks age. To undo the `poll_didnt_reach_quorum` state transition from 2024, one would have to rewind all blocks that have been created since, and PoW / PoS ensures that this is incredibly costly to do.

    On a related note, how does your design prevent sybil attacks, where one participant floods the network with many large contracts and large state updates?

  • Notably this project was conceived by a backroom decision to dump the original Freenet development team's work,

    in favor of a rewrite from different developers, without asking anyone on the original team.

    It was an ivory tower decision which was announced on the mailing list without prior discussion.

    The old team did not agree, yet it was forced through by a decision of the "board".

    The "board" was a group of people which had not been active on the project for over a decade.

    https://www.mail-archive.com/devl@freenetproject.org/msg5526...

    The funding of the existing, original "Freenet" was repurposed for the new one of course.

    The new "Freenet" does not have anonymity as a design goal anymore,

    while the old one continues to exist and is maintained under its new name "Hyphanet" at:

    https://www.hyphanet.org/

Explore Birbla archives