目前的物联网追踪了比以往任何时候都更多的真实世界对象和流程,也产生了大量的且不断增长的数据。Chainlink外部适配器非常适合将物联网数据通过安全、可靠的预言机网络传送到各种物联网智能合约用例中,例如链上供应链业务逻辑或追踪温度数据用于智能合约保险理赔。将RFID扫描器(射频识别)数据整合到区块链中就是这样一个例子。

Chinlink黑客马拉松中获得最佳开放项目奖的开发者Aram Moghaddassi和Aaron Wasserman使用Chainlink外部适配器将Arduino RFID连接到Chainlink预言机,用于一个去中心化的图书借阅和跟踪系统,称为开放图书馆项目

在这篇教程文章中,Aram Moghaddassi解释了他们如何实现这个项目。


作者:Aram Moghaddassi

在区块链上启用的硬件系统是智能合约开发者的新领域。本篇文章将介绍构建此类系统的灵感、应用和技术设计,并作为教程(含实例),介绍如何将Chainlink节点上的RFID传感器的模拟硬件后端集成到智能合约中。

物联网硬件和智能合约的发展潜力

区块链和智能合约有能力确保目前部署的数百亿物联网设备的安全,并每年产生的数十亿字节的数据。从智能家居、城市、工厂、供应链,物联网设备正在彻底改变传统的基础设施,自动化系统有可能在这个领域创造强大的效率和商业逻辑。为此,我们开发了自定义的外部适配器,使智能合约能够与实时硬件系统对接。目前我们正在运营一个带有虚拟硬件后端的RFID外部适配器,您可以跟随本教程亲手实践一下。

Chainlink去中心化的预言机网络如何将物联网数据安全地反馈给智能合约

我们的目标是:在10分钟内,您将部署一个可以从我们的RFID适配器查询数据的智能合约。我们希望让现有的Web3开发人员尽可能直观地开始在您的dApps中构建硬件集成。

您需要具备的知识

  • 熟悉使用Chainlink进行Solidity开发很重要。我们将在Kovan testnet上使用Remix Ethereum IDE
  • 不需要任何硬件!我们现在已经上线了一个RFID传感器的集成(很快会有更多设备出现)。它发送样本数据,您可以使用这些数据来快速启动和运行一个dApp。

本教程将是我们GitHub代码上的演示的书面版本,你可以在开始之前熟悉一下。

构建RFID数据提供商智能合约

Job/Oracle Spec

我们将使用这个在Kovan testnet上运行的Job节点

RFID扫描仪适配器将以字节格式返回一个示例卡UID。

合约概要

这里是一个基本的合约,它调用节点的RFID作业,并将响应存储在一个变量中。

在Remix中部署这个合约

import"https://github.com/smartcontractkit/chainlink/blob/develop/evm-contracts/src/v0.6/ChainlinkClient.sol";
contract Client is ChainlinkClient {
// where to store the last id scanned
bytes32 publiclast_uid;
// Chainlink vars for communicating with the RFID external adapter
address privateoracle;
bytes32 privatejobId;
uint256 private fee;
constructor() public {
setPublicChainlinkToken();
oracle = 0x42149D794A135989319b66Dbcb770Ad36075a92e;
jobId ="785558e0bed6466b9567322cc2f4ca91";
fee = 1 * 10 ** 18; // 0.1 LINK
}
function requestData() public returns (bytes32 requestId) {
// creates the Request
Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
// Sends the request
return sendChainlinkRequestTo(oracle, req, fee);
}
function fulfill(bytes32 _requestId, bytes32 uid) public recordChainlinkFulfillment(_requestId) {
last_uid = uid;
}
}```

部署合约并与交互

按照Chainlink文档,如何部署合约并获取testnet LINK。我们建议用至少10个LINK来存到合约中。

合约中的requestData方法会对RFID作业进行Chainlink请求,完成后会把最后一次扫描的UID放到last_uid变量中。

应用及后期集成

我们的RFID集成目前还处在概念证明阶段,目前可以在智能合约上运行一个实时硬件设备。我们希望不断地建立硬件集成案例,最终在Chainlink社区内引导一个硬件生态系统。不过,最终还是要靠开发者找到使用这项技术的杀手级应用。

以下是我们对RFID适配器的一些想法,你现在就可以进行研究。

  • 实物的保管管理--贴有RFID芯片的物品可以在不同的航点进行扫描,安全地追踪位置。这个系统可以帮助到基于区块链的供应链管理应用。
  • 酒店入住/退房系统--Airbnb/酒店可以在用户入住某地时自动初始化租赁合约。智能合约可以自动实时收取任何逾期费用。
  • 签署数字协议的物理验证系统--使用RFID扫描来验证用户的真实存在。
  • 发挥创意吧! RFID接口的通用性很强,你能想象到的任何东西都有可能构建。

最好的链上硬件应用将利用智能合约的独特属性,获得比传统软件更多的优势。智能合约是确定性的、去中心化的、数字化的协议。在硬件方面,区块链实现的最有价值的好处是:(1)强大的机器对机器通信协议和(2)来自传感器的不可篡改的数据馈送。

构建自己的硬件外部适配器

在构建开放图书馆项目时,我们的团队学到了一些经验。如果你正在考虑自己构建硬件外部适配器,这些原则是我们认为有用的。虽然我们这些经验是在构建RFID扫描仪的硬件适配器时做出的,但这些原则应该适用于任何实时硬件传感器集成。

原则0:适配器服务器结构与其他所有的适配器服务器结构是一样的。你可以使用任何现有的外部适配器模板作为起点。主要的区别在于以下原则。

原则1:硬件必须有一些外部适配器可以调用的软件接口/API。

对于RFID扫描器,我们使用pyserial写了一个自定义的解析器,创建了一个简单的接口来从每次扫描中获取UID代码。然后我们可以写一个简单的flask服务器,接受POST请求来读取UID。

对于不太能自定义的硬件(比如不是Arduino),这个软件接口可能由一个开箱即用的API提供。在这种情况下,你只需要关心编写外部适配器接口的问题。

原则2:外部适配器必须在本地运行(忽略虚拟硬件后端)。

对于那些熟悉在云服务器上部署适配器的人来说,这可能看起来很奇怪。然而,考虑到我们正在将数据从本地硬件传感器转移到远程Chainlink节点,向节点提供数据的适配器服务器必须在本地运行。我们想象的最佳设置是使用一个专用的树莓派来运行硬件和服务器(尽管我们在开发过程中使用了笔记本电脑)。


今天就开始使用外部适配器进行构建

如果你是一名开发者,想要将你的智能合约连接到底层区块链之外的现有硬件或数据,请在这里联系或访问开发者文档

如果你在这里学到了一些新的东西,想要展示你所构建的东西,或者为一些演示仓库开发了一个前端,请确保你在TwitterDiscordReddit上分享它,并且用#Chainlink来标记你的仓库。

Website | Twitter |Discord | Reddit | YouTube | Telegram | Events | GitHub | Price Feeds | DeFi