目前的物联网追踪了比以往任何时候都更多的真实世界对象和流程,也产生了大量的且不断增长的数据。Chainlink外部适配器非常适合将物联网数据通过安全、可靠的预言机网络传送到各种物联网智能合约用例中,例如链上供应链业务逻辑或追踪温度数据用于智能合约保险理赔。将RFID扫描器%20is%20a%20device,in%20theory%20to%20bar%20codes.)(射频识别)数据整合到区块链中就是这样一个例子。
在Chainlink黑客马拉松中获得最佳开放项目奖的开发者Aram Moghaddassi和Aaron Wasserman使用Chainlink外部适配器将Arduino RFID连接到Chainlink预言机,用于一个去中心化的图书借阅和跟踪系统,称为开放图书馆项目。
在这篇教程文章中,Aram Moghaddassi解释了他们如何实现这个项目。
在区块链上启用的硬件系统是智能合约开发者的新领域。本篇文章将介绍构建此类系统的灵感、应用和技术设计,并作为教程(含实例),介绍如何将Chainlink节点上的RFID传感器的模拟硬件后端集成到智能合约中。
物联网硬件和智能合约的发展潜力
区块链和智能合约有能力确保目前部署的数百亿物联网设备的安全,并每年产生的数十亿字节的数据。从智能家居、城市、工厂、供应链,物联网设备正在彻底改变传统的基础设施,自动化系统有可能在这个领域创造强大的效率和商业逻辑。为此,我们开发了自定义的外部适配器,使智能合约能够与实时硬件系统对接。目前我们正在运营一个带有虚拟硬件后端的RFID外部适配器,您可以跟随本教程亲手实践一下。
Chainlink去中心化的预言机网络如何将物联网数据安全地反馈给智能合约
我们的目标是:在10分钟内,您将部署一个可以从我们的RFID适配器查询数据的智能合约。我们希望让现有的Web3开发人员尽可能直观地开始在您的dApps中构建硬件集成。
您需要具备的知识
- 熟悉使用Chainlink进行Solidity开发很重要。我们将在Kovan testnet上使用Remix Ethereum IDE。
- 不需要任何硬件!我们现在已经上线了一个RFID传感器的集成(很快会有更多设备出现)。它发送样本数据,您可以使用这些数据来快速启动和运行一个dApp。
本教程将是我们GitHub代码上的演示的书面版本,你可以在开始之前熟悉一下。
01:29
RFID adapter demo
构建RFID数据提供商智能合约
Job/Oracle Spec
我们将使用这个在Kovan testnet上运行的Job和节点。
RFID扫描仪适配器将以字节格式返回一个示例卡UID。
合约概要
这里是一个基本的合约,它调用节点的RFID作业,并将响应存储在一个变量中。
pragma solidity ^0.6.0; 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 public last_uid; // Chainlink vars for communicating with the RFID external adapter address private oracle; bytes32 private jobId; 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节点,向节点提供数据的适配器服务器必须在本地运行。我们想象的最佳设置是使用一个专用的树莓派来运行硬件和服务器(尽管我们在开发过程中使用了笔记本电脑)。
今天就开始使用外部适配器进行构建
如果你是一名开发者,想要将你的智能合约连接到底层区块链之外的现有硬件或数据,请在这里联系或访问开发者文档。
如果你在这里学到了一些新的东西,想要展示你所构建的东西,或者为一些演示仓库开发了一个前端,请确保你在Twitter,Discord或Reddit上分享它,并且用#Chainlink来标记你的仓库。
Website | Twitter |Discord | Reddit | YouTube | Telegram | Events | GitHub | Price Feeds | DeFi
RFID Blockchain Integration With Chainlink External Adaptersblog.chain.link