DHT to store connection information for remote peers and act as generic key/value store
works with MicroMinion platform
var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')
var storageDir = './data'
var platform = new MicroMinionPlatform({
storage: kadfs(path.join(storageDir, 'platform'))
})
var kademlia = new Kademlia({
platform: platform,
storage: kadfs(path.join(storageDir, 'dht'))
seeds: null //Extra seeds
})- boxId: base64 encoded public encryption key used by nacl
- signId: base64 encoded public signature key used by nacl
- connectionInfo: javascript dictionary with 1tp connection information
Publishes connection information for remote node
var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')
var storageDir = './data'
var platform = new MicroMinionPlatform({
storage: kadfs(path.join(storageDir, 'platform'))
})
var kademlia = new Kademlia({
platform: platform,
storage: kadfs(path.join(storageDir, 'dht'))
seeds: null //Extra seeds
})
platform.messaging.on('self.transports.nodeInfo', function(topic, sender, nodeInfo) {
console.log(topic) // 'self.transports.nodeInfo'
console.log(sender) // 'local'
console.log(nodeInfo) // {boxId: <boxId>, signId: <signId>, connectionInfo: <1tp connectionInfo>}
})Requests bootstrap nodes in order to start DHT (in addition to potential seed nodes)
var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')
var storageDir = './data'
var platform = new MicroMinionPlatform({
storage: kadfs(path.join(storageDir, 'platform'))
})
var kademlia = new Kademlia({
platform: platform,
storage: kadfs(path.join(storageDir, 'dht'))
seeds: null //Extra seeds
})
//local nodeInfo. This method is used for sending remote nodeInfo
var nodeInfo = {
boxId: platform.directory.identity.getBoxId()
signId: platform.directory.identity.getSignId()
connectionInfo: platform.directory._connectionInfo
}
platform.messaging.on('self.transports.requestBootstrapNodeInfo', function(topic, sender, data) {
platform.messaging.send('transports.nodeInfoBootstrap', 'local', nodeInfo)
})Reply to previously received get message
var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')
var storageDir = './data'
var platform = new MicroMinionPlatform({
storage: kadfs(path.join(storageDir, 'platform'))
})
var kademlia = new Kademlia({
platform: platform,
storage: kadfs(path.join(storageDir, 'dht'))
seeds: null //Extra seeds
})
platform.messaging.on('self.directory.getReply', function(topic, sender, getReply) {
console.log(getReply.key)
console.log(getReply.value)
})
platform.messaging.send('directory.get', 'local', 'KeyToRetrieve')Uses our own node information to add to DHT
You'll never need to send this message since this is triggered from the platform object
var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')
var storageDir = './data'
var platform = new MicroMinionPlatform({
storage: kadfs(path.join(storageDir, 'platform'))
})
var kademlia = new Kademlia({
platform: platform,
storage: kadfs(path.join(storageDir, 'dht'))
seeds: null //Extra seeds
})
var nodeInfo = {
boxId: platform.directory.identity.getBoxId()
signId: platform.directory.identity.getSignId()
connectionInfo: platform.directory._connectionInfo
}
platform.messaging.send('transports.myNodeInfo', 'local', nodeInfo)Bootstrap messages with nodeInfo (to allow DHT to function even if not connected to the Internet by using e.g., other nodes on local network to form DHT).
var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')
var storageDir = './data'
var platform = new MicroMinionPlatform({
storage: kadfs(path.join(storageDir, 'platform'))
})
var kademlia = new Kademlia({
platform: platform,
storage: kadfs(path.join(storageDir, 'dht'))
seeds: null //Extra seeds
})
//local nodeInfo. This method is used for sending remote nodeInfo
var nodeInfo = {
boxId: platform.directory.identity.getBoxId()
signId: platform.directory.identity.getSignId()
connectionInfo: platform.directory._connectionInfo
}
platform.messaging.on('self.transports.requestBootstrapNodeInfo', function(topic, sender, data) {
platform.messaging.send('transports.nodeInfoBootstrap', 'local', nodeInfo)
})Requests node info from directory services (like DHT)
var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')
var storageDir = './data'
var platform = new MicroMinionPlatform({
storage: kadfs(path.join(storageDir, 'platform'))
})
var kademlia = new Kademlia({
platform: platform,
storage: kadfs(path.join(storageDir, 'dht'))
seeds: null //Extra seeds
})
platform.messaging.on('self.transports.nodeInfo', function(topic, sender, nodeInfo) {
console.log(topic) // 'self.transports.nodeInfo'
console.log(sender) // 'local'
console.log(nodeInfo) // nodeInfo object
})
var signId = 'NeedToImplement' //signId (base64 encoded) for node where we want to get full nodeInfo
platform.messaging.send('transports.requestNodeInfo', 'local', signId)get key/value pair from DHT
var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')
var storageDir = './data'
var platform = new MicroMinionPlatform({
storage: kadfs(path.join(storageDir, 'platform'))
})
var kademlia = new Kademlia({
platform: platform,
storage: kadfs(path.join(storageDir, 'dht'))
seeds: null //Extra seeds
})
platform.messaging.on('self.directory.getReply', function(topic, sender, getReply) {
console.log(getReply.key)
console.log(getReply.value)
})
platform.messaging.send('directory.get', 'local', 'KeyToRetrieve')add key/value pair to DHT
var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')
var storageDir = './data'
var platform = new MicroMinionPlatform({
storage: kadfs(path.join(storageDir, 'platform'))
})
var kademlia = new Kademlia({
platform: platform,
storage: kadfs(path.join(storageDir, 'dht'))
seeds: null //Extra seeds
})
platform.messaging.send('directory.put', 'local', {key: 'KeyToRetrieve', value: 'ValueToRetrieve'})