{"id":16197639,"url":"https://github.com/ineiti/fledger","last_synced_at":"2025-04-21T11:33:31.978Z","repository":{"id":37039559,"uuid":"321021918","full_name":"ineiti/fledger","owner":"ineiti","description":"Fair Fun Fast Ledger in the browser - starting with the network using WebRTC data.","archived":false,"fork":false,"pushed_at":"2025-04-09T07:03:15.000Z","size":5542,"stargazers_count":10,"open_issues_count":15,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-09T08:22:21.395Z","etag":null,"topics":["blockchain","browser","ledger","wasm","webrtc"],"latest_commit_sha":null,"homepage":"https://web.fledg.re","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ineiti.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.Apache2","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-13T08:51:20.000Z","updated_at":"2025-04-09T07:03:18.000Z","dependencies_parsed_at":"2025-01-18T08:21:33.767Z","dependency_job_id":"95addc1f-999f-4559-8d2f-c42aed4b8430","html_url":"https://github.com/ineiti/fledger","commit_stats":{"total_commits":256,"total_committers":4,"mean_commits":64.0,"dds":0.30078125,"last_synced_commit":"72107640c7b3d98133a3320872ba07401cb5a055"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ineiti%2Ffledger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ineiti%2Ffledger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ineiti%2Ffledger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ineiti%2Ffledger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ineiti","download_url":"https://codeload.github.com/ineiti/fledger/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250048102,"owners_count":21366176,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","browser","ledger","wasm","webrtc"],"created_at":"2024-10-10T09:08:06.762Z","updated_at":"2025-04-21T11:33:31.953Z","avatar_url":"https://github.com/ineiti.png","language":"Rust","readme":"# Fledger - the fast, fun, easy ledger\n\nFledger's main goal is to create a web3 experience in the browser without the\nneed for proxies.\nOnce the code starts in your browser, it will connect to other browsers,\nand start sharing your diskspace, CPU, and network bandwidth.\nNo need to \n- install a node on a server, the browser is enough\n- buy a token to participate, your node will receive some after 1 minute\n- get rich by investing early in a Ponzi scheme\n\nFor a more thorough introduction to the goals of fledger, see here: [Fledger Docs](https://fledg.re)\n\nA first use-case of Fledger is to have a decentralized chat-application:\n1. A user clicks on the link to the website\n1. The browser downloads the fledger code\n1. Connecting to fledger, the browser gets the messages and displays them\n\nBut of course there are many more things you can do:\n- Store a decentralized website\n- Decentralized user management like [DARCs](https://www.c4dt.org/article/darc/)\n- Smart contract execution using WASM contracts\n- General storage / backup service\n\nOn the technical side, Fledger has / will have:\n- Gossip-based sharing of information\n- Data storage using a distributed hash table\n- Proof-of-participation to distribute _Mana_ to participants (instead of miners)\n- Different consensus layers, depending on the need: implicit trust, ledger based\n\nThe goal is to be able to serve both short-term online users like browsers,\nbut also long-term users who have a server where they can run a fledger node.\nThe system is set up to be 0-configuration and fast.\n\nWhat it will never do:\n- DeFi - the security guarantees to handle 1e9 US-$ and more will never be there\n- HODL - Fledger's Mana is not made to be held, but will disappear over time\n\n## State of Fledger\n\nAs of February 2025, fledger has:\n- a generic WebRTC network library\n- gossip-based distribution of messages\n- data storage using distributed hash tables\n- a simple cryptographic layer for various types of signatures, including\n  \"N out of T\" signatures\n\nThe code is written in a way that it can run in a wasm environment on\nbrowser or node, as well as in a libc environment.\nSome of the code can also be reused in other projects.\n\n### Student Semester Projects\n\nWith the support from prof. Bryan Ford's [DEDIS](https://dedis.epfl.ch) lab, one semester\nstudent project was finished in Autumn '24, and a new one started in Spring '25:\n\n- Derya Cögendez worked on [Churning Mixers](https://c4dt.epfl.ch/wp-content/uploads/2025/01/2025-01-derya_cogendez_churning_mixers.pdf) with the experimental repo here: [student_24_fledger](https://github.com/dedis/student_24_fledger)\n- Yohan Max Abehssera started to work in Feb. 2025 on `Fair Sharing` to implement a tit-for-tat\n  sharing mechanism for the [DHTStorage](./flmodules/src/dht_storage/) module\n\n## Project Directory\n\n### Library Crates\n\nA set of _shared_ crates implement the basic functionality, without the actual implementation\nof the network code:\n\n- [Decentralized modules](./flmodules/) - modules that are usable for decentralized projects\n- [flnode](./flnode) - a generic implementation of a fledger-node, mostly connecting all\n  _flmodules_ together and with the network\n- [flarch](./flarch) - architecture dependant implementations for some async tools\n- [flmacro](./flmacro) - macro for easier definitions of `async_trait(?Send)`\n\n### Binaries\n\nThe following components are available that are used to create the fledger-binaries:\n- [Command Line Interfaces](./cli) - command line binaries\n  - [Signalling server](./cli/flsignal) - the signalling server for the WebRTC connections\n  - [Fledger node](./cli/fledger) - a fledger node implementation for the command line\n- [Browser implementation](./flbrowser) - web-frontend using the wasm-implementation\n\n### Implementations and Tests\n\nThese are the actual implementations of the WebRTC and Websocket for wasm and libc:\n- [WebRTC and Websocket implementations](./flarch) - wasm and libc implementations for WebRTC and Websockets\n- [Test directory](./test) - several implementations for testing\n- [Example directory](./example) - example for how to use flarch\n\n## Next steps\n\nThe following next steps are in the pipeline:\n- Create storage nodes that can serve data\n- Create a minimum consensus for people to try it out in the browser at\nhttps://web.fledg.re\n- Create a nicer display of the chat, perhaps with markdown display of messages\n- Add WASM smart contracts\n- Add sharding to have more than one worker chain\n\n# Running it\n\nThe simplest way to run it is to go to https://web.fledg.re and follow the\ninstructions.\n\n## Running it on a server\n\n### Using Docker\n\nIf you want to use docker, you can download the `docker-compose.yaml` file and use this to\nrun two nodes on your server:\n\n```bash\ncurl https://raw.githubusercontent.com/ineiti/fledger/refs/heads/main/examples/docker-compose/docker-compose.flnode.yaml\ndocker compose up -d\n```\n\nIt will initialize the servers, connect to the network, and start participating in sharing the data.\n\n### Using Devbox\n\nSupposing you have [devbox](https://www.jetify.com/devbox/docs/installing_devbox/) installed, you can run:\n\n```bash\ndevbox run fledger\n```\n\nThis will create a new file called `fledger.toml` in the `fledger` directory\nthat contains the private key of your node.\nDo not lose this private key, as it is used to move around the Mana you get.\nThe only time you need it will be once the server \u003c-\u003e browser connection will\nbe set up.\n\n## Running it locally for testing\n\nIf rust, wasm-pack, and npm are installed in a recent version, you can simply\nrun it locally by calling:\n\n```bash\nmake serve_local\n```\n\nThis will run a local signalling server and two nodes that start to communicate.\nAdditionally you can open your browser and point ot to http://localhost:8080 to\naccess the node in the browser.\n\n# Developing\n\nIf you want to help with developing, please use\n[devbox](https://www.jetify.com/devbox/docs/installing_devbox/)\nto have the same development environment as the other developers.\nOnce you install `devbox`, you can get a shell with\n\n```bash\ndevbox shell\n```\n\nOnce the shell is started, you can run `Code` to get a VisualCode which uses the rust\nversion of devbox.\nI suggest you use the `1YiB.rust-bundle` extension in VisualCode, which makes it easier\nto use rust.\n\n## Add new Modules\n\nIf you want to add a new module, you can use the [template](./flmodules/src/template/) module\nby copying it, and changing the name.\nYou will find information about how to add a new module in the [flmodules/README.md](./flmodules/README.md).\n\n# License\n\nThis project is licensed under MIT or Apache2.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fineiti%2Ffledger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fineiti%2Ffledger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fineiti%2Ffledger/lists"}