FogLedger is a plugin for Fogbed. It is a framework and toolset integration for the rapid prototyping of fog components in virtualized environments using a desktop approach for DLTs. Its design meets the postulated requirements of low cost, flexible setup, and compatibility with real-world technologies. The components are based on a Mininet network emulator with Docker container instances as fog virtual nodes.
Before installing Fogbed it is necessary to install some dependencies and Containernet, as shown in the steps below:
sudo apt-get install ansible
git clone https://github.com/containernet/containernet.git
sudo ansible-playbook -i "localhost," -c local containernet/ansible/install.yml
sudo pip install -U git+https://github.com/EsauM10/fogbed.git
sudo pip install -U git+https://github.com/larsid/FogLedger.git
cd examples/indy
cd examples/iota
sudo python3 test-local-network.py
sudo python3 test-distributed-network.py
from typing import List
from fogbed import (setLogLevel, FogbedDistributedExperiment)
import time
import os
from fogledger.indy import (IndyBasic, Node)
setLogLevel('info')
if (__name__ == '__main__'):
exp = FogbedDistributedExperiment()
worker1 = exp.add_worker('YOUR_HOST_IP or HOST_NAME')
# Define Indy network in cloud
indyCloud = IndyBasic(
exp=exp, trustees_path='examples/tmp/trustees.csv', config_nodes=[
Node(name='ledger1'),
Node(name='ledger2'),
Node(name='ledger3'),
Node(name='ledger4'),
])
for ledger in indyCloud.ledgers:
worker1.add(ledger)
worker1.add_link(edge1, ledger)
try:
exp.start()
indyCloud.start_network()
input('Press any key...')
except Exception as ex:
print(ex)
finally:
exp.stop()
from fogledger.iota.IotaBasic import (IotaBasic)
from fogledger.iota.config.NodeConfig import (NodeConfig)
from fogledger.iota.config.CoordConfig import (CoordConfig)
from fogledger.iota.config.SpammerConfig import (SpammerConfig)
from fogledger.iota.config.ApiConfig import (ApiConfig)
from fogledger.iota.config.WebAppConfig import (WebAppConfig)
from typing import List
from fogbed import (
VirtualInstance, setLogLevel, FogbedDistributedExperiment, Worker, Controller
)
setLogLevel('info')
if (__name__ == '__main__'):
exp = FogbedDistributedExperiment()
worker = exp.add_worker('YOUR_HOST_IP or HOST_NAME')
node1 = NodeConfig(name='node1', port_bindings={'8081':'8081', '14265':'14265'})
node2 = NodeConfig(name='node2', port_bindings={'8081':'8082'})
node3 = NodeConfig(name='node3', port_bindings={'8081':'8083'})
node4 = NodeConfig(name='node4', port_bindings={'8081':'8084'})
cord = CoordConfig(name='cord', port_bindings={'8081':'8085'}, interval='60s')
spammer = SpammerConfig(name='spammer', port_bindings={'8081':'8086'}, message ='one-click-tangle.')
api = ApiConfig(name='api', port_bindings={'4000':'4000'})
web_app = WebAppConfig(name='web_app', port_bindings={'80':'82'})
iota = IotaBasic(exp=exp, prefix='iota1', conf_nodes=[node1, node2, node3, node4], conf_coord=cord, conf_spammer=spammer)
for ledger in iota.ledgers:
worker.add(ledger, reachable=True)
worker.add_link(edge1, ledger)
try:
exp.start()
iota.start_network()
print("Experiment started")
input('Press any key...')
except Exception as ex:
print(ex)
finally:
exp.stop()