p2p IRC
This is a local daemon which can be attached to with any IRC frontend. It uses the darkfi p2p engine to synchronize chats between hosts.
Install
% git clone https://github.com/darkrenaissance/darkfi
% cd darkfi
% make BINS=ircd
% make install BINS=ircd PREFIX=/home/XX/.local
Usage (Local Deployment)
Seed Node
First you must run a seed node. The seed node is a static host which nodes can
connect to when they first connect to the network. The seed_session simply
connects to a seed node and runs protocol_seed, which requests a list of
addresses from the seed node and disconnects straight after receiving them.
in config file:
## P2P accept address
inbound="127.0.0.1:11001"
Note that the above config doesn't specify an external address since the seed node shouldn't be advertised in the list of connectable nodes. The seed node does not participate as a normal node in the p2p network. It simply allows new nodes to discover other nodes in the network during the bootstrapping phase.
Inbound Node
This is a node accepting inbound connections on the network but which is not making any outbound connections.
The external address is important and must be correct.
in config file:
## P2P accept address
inbound="127.0.0.1:11002"
## P2P external address
external_addr="127.0.0.1:11002"
## Seed nodes to connect to
seeds=["127.0.0.1:11001"]
Outbound Node
This is a node which has 8 outbound connection slots and no inbound connections. This means the node has 8 slots which will actively search for unique nodes to connect to in the p2p network.
in config file:
## Connection slots
outbound_connections=5
## Seed nodes to connect to
seeds=["127.0.0.1:11001"]
Attaching the IRC Frontend
Assuming you have run the above 3 commands to create a small model testnet, and both inbound and outbound nodes above are connected, you can test them out using weechat.
To create separate weechat instances, use the --dir command:
weechat --dir /tmp/a/
weechat --dir /tmp/b/
Then in both clients, you must set the option to connect to temporary servers:
/set irc.look.temporary_servers on
Finally you can attach to the local IRCd instances:
/connect localhost/6667
/connect localhost/6668
And send messages to yourself.
Running a Fullnode
See the script script/run_node.sh for an example of how to deploy a full node which
does seed session synchronization, and accepts both inbound and outbound
connections.