Two types of applications can be defined within the Biblion platform, network
transports and services.
A network transport defines a method of sending data between peers. It must
have an addressing scheme that can be stored in routing tables later.
create_stream
send_message
is_ready
become_ready
listen
shutdown
Services form the brains of the Biblion platform. They must be able to handle
messages coming from other peers, and commands from the biblion client running
locally.
start
handle_message
handle_rpc
shutdown
A library is defined by a JSON document that codifies the structure of the
community.
Every library definition should include these values:
name - a user-readable name for the library. Used for making things easier on the client
owner - peer id of the owner of the library
Optional values
memberdb - defines a member database for the library
Per-application configuration
Kademlia
"kademlia.authorization"
Can be "userdb", "owner_check"
BitTorrent
"bittorrent.authorization"
Can
SimpleDownload
Hm, this should probably be merged with BitTorrent actually :^)
Service specifications
Biblion - core biblion meta-protocol
hello (addresses, protocols)
Kademlia - p2p dht
find_node
find_value
store
BitTorrent - tit-for-tat distributed downloads
getpiece
have
bitfield
interested
uninterested
choke
unchoke
SimpleDownload - a simple ftp-like download protocol
download
MetadataSet - track what files are available in a library context
getfiles
checkfile(id)
UserSet - track what users are allowed in a library context
getusers
checkusers(id)
NameSet - track a set of (key, value) pairs in a library context, intended for dynamic name resolution
getname
Bank - Manage a ledger of peer balances within a library (not started)
send_transaction
query_balance
preauthorize
Gossip - send updates throughout a peer network (in progress)
query_newest
Blockchain - publically verifable ledger (not started)
verify
mine
update_mempool
ScryptPoW - an scrypt-based Proof-of-work algorithm (not started)
mine