hyperdrive
A file sharing network based on rabin file chunking and
append only feeds of data verified by merkle trees.
npm install hyperdrive
Status
Almost ready for prime time :rocket:
Feel free to open issues and ask questions
APIs/protocols might be still break.
Main things missing are:
Usage
First create a new feed to share
var hyperdrive = require('hyperdrive')
var fs = require('fs')
var drive = hyperdrive(aLevelDB)
var pack = drive.add()
var stream = pack.entry({
name: 'my-file.txt',
mode: 0644
})
fs.createReadStream('my-file.txt').pipe(stream)
pack.finalize(function () {
var link = pack.id.toString('hex')
console.log(link, '<-- this is your hyperdrive link')
})
Then to share it
var disc = require('discovery-channel')()
var server = net.createServer(function (socket) {
socket.pipe(drive.createPeerStream()).pipe(socket)
})
server.listen(0, function () {
function ann () {
disc.announce(link.slice(0, 20), server.address().port)
}
ann()
setInterval(ann, 10000)
var lookup = disc.lookup(hash.slice(0, 20))
lookup.on('peer', function (ip, port) {
var socket = net.connect(port, ip)
socket.pipe(drive.createPeerStream()).pipe(socket)
})
})
If you run this code on multiple computers you should be able to access
the content in the feed by doing
var feed = drive.get(link)
feed.get(0, function (err, entry) {
console.log(entry)
var content = drive.get(entry.link)
content.get(0, function (err, data) {
console.log('first block of the file', data)
content.get(1, ...)
})
})
License
MIT