林炯明 覃铂强 王浩 莫晔 冯鑫奥
摘要:溯源系统一直存在查询难度大、数据易造假等问题。区块链提供了一种分布式、去中心化的计算与存储架构,物联网技术令物体间更紧密相连、信息交互更迅速,二者结合在解决问题时更具备明显的优势。将介绍区块链的技术与架构,基于以太坊技术设计的溯源防伪DAPP,对于实现步骤详细说明。
关键词:区块链;以太坊;智能合约;物联网;溯源防伪
中图分类号:TP319 文献标识码:A
文章编号:1009-3044(2019)16-0263-03
开放科学(资源服务)标识码(OSID):
区块链智能合约和物联网技术相结合能够为溯源防伪提供可靠安全的服务。智能合约是部署在区块链上可执行的代码,可不依赖中心机构自动化地代表各签署执行合约【5】。物联网技术在进行数据交互时容易出现信息泄露、被惡意篡改等问题,区块链技术的出现能很好地解决这个问题,二者相结合能给信息化时代带来革命性变化。
1 以太坊架构组成和物联网技术
1.1 以太坊整体架构
在2013年下半年,Vitalik Buterin提出了“以太坊”的概念——一种能够被重编程用以实现任意复杂计算功能的单一区块链,这种新的区块链包含了之前众多区块项目的大多数特征。2014年,以太坊基金会成立,Vitalik Buterin、Gavin Wood和Jeffrey Wilcke创建了以太坊项目,作为下一代区块链系统。区块链的基本数据结构包括两部分,即区块内结构与区块间链式结构,其中每个区块由区块头和区块体两部分组成,头信息是区块的元素据,用于验证区块,并与其父区块和子区块建立关联【4】。今天,以太坊作为全球最为知名的公有区块链项目之一,同时拥有全球最大的开源社区平台。简单来说,以太坊是一个智能合约功能的公共区块链平台,以太坊是一个可编程的区块链,形象一点理解,在以太坊区块链上发布的不仅仅可以是转账金额,还可以是调用一段代码,而这一段代码可以由用户自定义。因此可以想象,在以太坊区块链上处理的交易逻辑不再是单一的账单,而可能是任意的函数调用;记录在区块链账本里的不仅仅是账户余额,还有函数调用后变量的新状态。因为代码可以任意定义,所以应用就都可以在区块链上运行了。以太坊的整体架构如图1所示,分别为三层:底层服务、核心层、顶层应用。
1.1.1 底层服务
底层服务包含P2P网络服务、LevelDB数据库、密码学算法以及分片(Sharding)优化等基础服务。P2P网络中每一个节点彼此对等,各个节点共同提供服务,不存在任何特殊节点,网络中的节点能够生成或审核新数据。而以太坊中的区块、交易等数据最终都是被存储在LevelDB数据库中。密码学算法用于保证数据的隐私性和区块链的安全。分片优化使得可以并行验证交易,大大加快了区块生成速度。这些底层服务共同促使区块链系统平稳地运行。
1.1.2 核心层
核心层包括区块链、共识算法和以太坊虚拟机等核心元件,其以区块链技术为主体,辅以以太坊特有的共识算法,并以EVM(以太坊虚拟机)作为运行智能合约的载体,该层是以太坊的核心组成部分。区块链构造的去中心化账本需要解决的首要问题就是保证不同节点上的账本数据的一致性和正确性,而共识算法正是用于解决这个问题。EVM是以太坊的一个主要创新,它是以太坊智能合约的运行环境,使得以太坊能够实现更复杂的逻辑。
1.1.3 顶层应用
这一层包括API接口、智能合约以及去中心化应用等,以太坊的DAPP通过Web3.js与智能合约层进行信息交换,所有的智能合约都运行在EVM上,并会用到RPC的调用,该层是最接近用户的一层。开发者可以根据自己的业务逻辑,实现自身特有的智能合约,以帮助开发者高效地执行业务。
1.2 物联网技术
物联网是一个以感知技术为支撑的综合型网络系统,旨在利用泛在网络间的协同技术实现泛在的智慧服务,所要实现的目标就是构建万物互联的世界【1】。物联网主要分为三个层次:设备层、网络层和应用层。设备层主要为传感器,将外界的数据信息收集,如物体识别、温度检测、声波监测等。网络层即传输的渠道,简单来讲,就是通信网络,实现数据信号的接受和传输。应用层需要同各个行业领域的需求相吻合,在运行中,能够促使物联网智能应用得到实践,此时需要对媒介进行充分的应用【2】。而NFC是典型的物联网技术之一,一种短距离的高频无线通信技术。其采用了独特的信号衰减技术,提供了一种轻松、安全、迅速的无线通信连接方式,具有距离近、带宽高、能耗低等特点。如今手机普遍内置NFC标签,为以手机为介质的溯源防伪查询提供了极大的便利。
2 以太坊智能合约的部署与实现
2.1 以太坊的部署
安装Go- ethereum以太坊客户端,以命令行方式创建新的节点账户,打开命令行或power shell,运行geth account new创建新的节点账户,再运行geth-fast命令,即可同步以太坊公网数据并且完成部署。
2.2 编写和部署智能合约
智能合约的编译环境就是Solidity的编译环境,而这段程序(智能合约)的执行环境就是EVM。在以太坊中,Solidity编写的智能合约经过编译后生成一串十六进制字节码,创建后进行调用时,也需要将调用函数(function)名称和参数转化为一串十六进制字节码写进交易中。当用户通过发起eth_send transaction或者eth_call创建或者调用智能合约时,就要在交易(transaction)的data字段填入这个十六进制码。创建智能合约时,EVM会将这段字节码解析成相应的指令符序列,存储到一个新建的智能合约地址下。当用户调用这个智能合约时,以太坊本身会根据交易的to字段获取到这个智能合约的信息,EVM先根据data字段里解析的具体函数和参数生成具体的指令,再依次执行这些指令得到执行结果,这些操作会涉及账户状态数据进行更改。