Freechains is a permissionless social media protocol with integrated reputation.
- Local-first publish-subscribe topic-based model
- Unstructured peer-to-peer gossip dissemination
- Multiple flavors of public and private communication (
1->N,1<-N,N<->N,1<-) - Per-topic reputation system for healthiness
- Consensus via authoring reputation (human work)
- Free in all senses
(In bold we highlight what we believe is particular to Freechains.)
A user posts a message to a chain (a topic) and other users subscribed to the
same chain eventually receive the message.
Users spend reputation tokens, known as reps, to post new messages and gain
reps as they consolidate.
Users can like and dislike messages from other users, which transfer reps
between them.
- Main concepts:
- Commands: list of all protocol commands
- Other systems: comparison with other systems
- Google group: discussion group about Freechains
- Resources: publicly available chains, identities and peers
- Source code
- Android dashboard: manage/navigate your peers/chains
- Introductory videos: 1/3 | 2/3 | 3/3
First, you need to install java and libsodium:
sudo apt install default-jre libsodium23
Then, you are ready to install freechains:
wget https://github.com/Freechains/README/releases/download/v0.10.1/install-v0.10.1.sh
# choose one:
sh install-v0.10.1.sh . # either unzip to current directory (must be in the PATH)
sudo sh install-v0.10.1.sh /usr/local/bin # or unzip to system directory
The basic API of Freechains is very straightforward:
freechains-host start ...: starts the local peer to serve requests (execute on every restart)freechains keys ...: creates a cryptographic keyfreechains chains join ...: joins a chain locally to post and read contentfreechains chain post ...: posts to a chain locallyfreechains chain get ...: reads a post locallyfreechains chain consensus: shows all posts in consensus orderfreechains peer send/recv ...: synchronizes a local chain with a remote peer
Follows a step-by-step execution:
- Start host:
freechains-host start /tmp/myhost
-
Switch to another terminal.
-
Create an identity:
$ freechains keys shared "My very strong passphrase" # returns shared key
96700ACD1128035FFEF5DC264DF87D5FEE45FF15E2A880708AE40675C9AD039E
- Join the private chain
$chat:
$ freechains chains join '$chat' 96700A... # type the full shared key above
C40DBB...
- Post some content:
$ freechains chain '$chat' post inline "Hello World!"
1_DE2EF0...
$ freechains chain '$chat' post inline "I am here!"
2_317441...
- Communicate with other peers:
- Start another
freechainshost. - Join the same private chain
$chat. - Synchronize with the first host.
- Start another
$ freechains-host --port=8331 start /tmp/othost
# switch to another terminal
$ freechains --host=localhost:8331 chains join '$chat' 96700A... # type same key
C40DBB...
$ freechains --host=localhost:8330 peer localhost:8331 send '$chat'
2 / 2
The last command sends all new posts from 8330 to 8331.
- Iterate over posts in a chain:
- Shows the consensus order of posts in the chain.
- Reads the posts payloads.
$ freechains --host=localhost:8331 chain '$chat' consensus
0_C40DBB... 1_DE2EF0... 2_317441...
$ freechains --host=localhost:8331 chain '$chat' get payload 1_DE2EF0...
Hello World!
$ freechains --host=localhost:8331 chain '$chat' get payload 2_317441...
I am here!