你觉得这篇文章怎么样? 帮助我们为您提供更好的内容。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
你觉得这篇文章怎么样?
附带完整发布到GitHub的项目代码的注释。
这一系列文章着眼于为两年一度的Electronica交易会和会议设计和构建一组演示器,展示了区块链技术如何用于创建安全,分散的数据平台以及更多物联网。
在之前的文章中,我们介绍了机械和电子构建,随后创建了一个私有区块链网络并部署了智能合约以及集成了传感器和输出并与智能合约交互的Python软件。最后这篇文章将附带现已发布到GitHub的代码,以便在其他项目中重用。
请注意,尽管可以诚心诚意地重新创建演示器,但事实上,没有人任何人想要这样做,因此这不是一个全面的逐步指南。而是一组注释,以帮助更好地理解代码如何组合在一起以及在其他项目中重用时需要调整的内容。
如果您还没有读过本系列的第4部分和第5部分,那么在继续之前阅读它们会有所帮助。
基础依赖
需要在每个节点上提供Go Ethereum软件geth,并且可以下载二进制构建。矿工需要“Geth&Tools”版本,因为这些版本还包括bootnode应用程序,用于为以太坊网络提供发现节点。
网络中的每个系统都需要配置以太坊帐户。
每个系统也需要Python 3和pip3。
需要从源代码编译一个名为ftee的小实用程序,并将其复制到/usr/local/bin。
默认路径是:
/ opt / iotbc / bin / - Python脚本
/ opt / iotbc / etc / - 配置文件
网络初始化
私有区块链网络需要通过自定义生成创世区块进行初始化,如第4部分:区块链网络中所述。这将需要在每个系统上创建的帐户的地址,因为这些将在网络初始化期间被预先分配资金。
智能合约可靠性代码也需要使用适当的以太坊帐户地址进行更新。完成此操作后,可以使用Truffle编译并部署到新的专用网络,假设以太坊节点(geth)正在运行且配置的帐户有资金(这些应该在初始化时预先分配)。随着智能合约的部署,他们的地址将被打印出来,然后需要在config.yml文件中更新这些地址。
常见配置
使用的YAML配置文件位于GitHub存储库中。例如。 config.yml.car-crash只是命名为config.yml,并放在Crash Crash演示器上的/ opt / iotbc / etc /中。至少需要更新以下参数:
-
boot_node - enode URL将特定于实际的引导节点IP地址和密钥
-
账户 - 本地配置的以太坊帐户的地址
-
契约 - 该演示器智能合约的地址(在运行truffle migrate部署时发出)
例如,Car Crash系统还需要CarCrashABI.json文件位于同一目录中,其他用例要求其关联的ABI文件位于etc /目录中。
所有系统上的/ opt / iotbc / bin /目录都包含以下Python脚本:
-
buttons
-
eth-leds
-
eth-node
这些对于所有系统是通用的,并且根据角色适当地配置,例如, “miner”或“carcrash”。请注意,矿工假设使用英特尔NUC硬件,其他系统采用Raspberry Pi 3 B +。如果使用其他硬件平台或其他GPIO,则需要修改脚本。
所有系统都需要通过pip3安装以下Python库:
-
paho-mqtt
-
PyYAML
-
pyzmq
-
web3
矿工
除了运行前面提到的三个Python脚本之外,矿工还需要运行以太坊引导节点。然后需要在每个config.yml文件中设置此的enode URL。
还需要安装Mosquitto MQTT代理(或其他一些代理)。
车祸
该演示器使用Accel Click模块加速度计和8x8 Click模块LED矩阵。这些需要Python smbus-cffi和luma.led_matrix库,可以通过pip3安装。
泄漏杀手
由于此演示器使用Adafruit Dotstar可寻址LED,因此需要获取Python模块源,为Python 3修补它们,编译然后将dotstar.so复制到/ opt / iotbc / bin /目录。
机器故障
这使用DesignSpark.Pmod库。
温度警报
这使用DesignSpark.Pmod库。
启动
GitHub上还提供了系统单元文件,以便在启动时启动应用程序。
请注意,在除了矿工之外的所有节点上,应修改eth-node.service文件以完全删除Requires =行,并从After =行中删除单元eth-bootnode.service和mqtt-broker.service。
总结
Python脚本的演变方式使用Zero MQ最终变得比它可能需要的更复杂,但所使用的解决方案似乎运行良好,这很容易被重新考虑。 同时,脚本之间的重复也可能更少,共同的元素移植到一个单独的Python帮助器模块中。 配置文件格式也可能会得到改进。