版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于区块链技术的物联网数据共享系统的设计摘要物联网作为新一代信息技术的重要组成部分,目前已经成为社会现代化发展的重要产业,其目前已经渗透到社会的方方面面,比如家居,交通运输,医疗服务等等都有物联网的身影。而5G的到来,将开启一个“万物互联”的时代,众多的5G物联网设备将接入互联网,设备数量上升的同时也会带来物联网数据的爆发式增长。面对海量数据,如何提供安全的数据共享是现在物联网技术发展所需要解决的问题之一。当前物联网主要采用传统中心化结构——即从用户到云端再到后台的架构,这种结构具有效率高,管理方便的优点,但它在信息的安全方面却不断爆发事故,数据易被泄露,无法溯源,容易丢失。区块链技术的出现为物联网现在所面临的挑战提供了一种新的解决方式,比如利用其拥有的去中心化特性减轻物联网原有的中心计算、存储和维护等方面的压力;防篡改、可追溯的特性解决物联网数据安全隐私方面的问题等等。针对物联网数据存在数据安全、管理方面的需求,本文将区块链技术与物联网相结合,设计一个基于区块链技术的物联网数据分布式共享平台,利用区块链技术实现对数据的溯源,共享规则和数据交易数量进行记录与管理。在以太坊区块链上部署智能合约。该系统包括数据上传、数据查询和交易功能等,不需要第三方参与交易,具备可视化界面,为解决现今物联网数据共享所面临的安全和溯源问题提供了一个可能性。关键字:区块链,物联网,以太坊,智能合约[18]。智能合约诞生已久,它诞生之初是想要在脱离第三方可信权威的情况下,作为执行合约条款的计算机交易协议,担任合约各方共同信任的代理。受到当时计算机发展的限制,智能合约在很长一段时间内没有得到广泛的应用。直到2008年中本聪学者发布了比特币白皮书后,其底层技术与智能合约有着相辅相成的天然联系:区块链借助智能合约的可编程特性来控制分布式系统中节点的复杂行为,智能合约则可依赖于区块链提供的安全可信的执行环境。自此,区块链渐渐成为智能合约主要的计算场景。2.2.2智能合约开发平台比特币脚本。比特币交易脚本语言可简称为脚本(Script),是一种基于逆波兰表示法的、基于堆栈,非图灵完备的执行语言,它由许多种操作码构成。比特币交易是基于UTXO(UnspentTransactionOutput)的,首先要提供一个用于解锁UTXO的解锁脚本(Signaturescript),这是交易输入;交易的输出则是指向一个锁定脚本(PubKeyscript),脚本中含有一个公钥或者是数字签名,谁拥有一个与之匹配的私钥,比特币就会支付给该用户。每一个节点会通过同时执行解锁和上一个交易的锁定脚本来验证一笔交易,执行结果为真则为有效交易。比特币脚本在一定程度上保证了比特币交易的安全性,可以被视为智能合约早期的应用。以太坊平台是首个内置图灵完备编程语言的通用区块链协议和全球共享分布式应用平台。用户可以根据自己的想法在以太坊平台上创建并执行任何复杂的操作,从而高效、快速地开发出包括加密货币在内的多种去中心化区块链应用(decentralizedapplication,DApp)。以太坊的核心是可执行任意复杂算法编码的以太坊虚拟机(Ethereumvirtualmachine,EVM),用户可以使用诸如C++,Go,python等高级语言,也可以使用专为智能合约而生的Solidity,Serpent等语言来编写智能合约。目前,以太坊已成为全球最大和最完善的共享分布式应用平台之一。超级账本(Hyperledger)项目中的Fabric是由IBM领头开发的致力于打造区块链技术开源规范和标准的联盟链。不同于比特币和以太坊平台,超级账本只允许获得许可的商业联盟组织参与、使用和维护,由于联盟链的特性,超级账本也被认为并非是完全区中心化的。超级账本中的智能合约成为链码(Chaincode),分为系统链上代码和用户链上代码,分别对应着系统级和用户级应用功能。Fabric选择在Docker容器中执行智能合约,而且它的智能合约和底层账本是分隔开的,实现了数据与逻辑相分离,这就大大提升了可扩展性,理论上,可以使用任何语言来编写智能合约。除了上述三种智能合约平台外,还有EOS、NEO、stellar等比较知名的智能合约开发平台。2.3以太坊开发工具以太坊是由2015年由VitalikButerin通过众筹融资推出。有关以太坊平台的发展历程在2.2.2中已经详细介绍过,这里不再赘述。在理想化的去中心化模型中,每个节点都是一个完整的区块链节点,这意味着想要正式使用一个去中心化应用之前,用户需要将完整的区块链数据下载下来。但以比特币系统为例,2019年区块链里所有的区块数据已经接近170GB且还在不断增长中。考虑到计算机本身的能力并不能存储如此庞大的数据,而且不同的节点分工也不同,大部分节点并不需要将完完全全地验证区块信息,因此如果要求每个用户在使用去中心化应用前要先运行一个完整的区块链节点是不切实际的。针对这种情况,区块链领域相应出现了一些解决方案,比如infura提供公开以太坊和测试节点,或者是Metamask钱包等。有了这些工具,就不再需要花费大量时间是空间去下载并运行完整的区块链节点,也可以利用去中心化的特点来部署智能合约。当然,最好还是下载完整的区块链节点,不过本系统受硬件限制,使用了Metamask插件。Truffle是目前比较流行的以太坊去中心化的应用开发框架之一,是一个世界级的开发环境和测试框架,用户可以在Truffle上快速创建、编译、发布和测试去中心化的应用。它内置智能合约编译、链接、部署和二进制文件的管理,合约可以自动进行测试,以便快速开发。Metamask则是一个方便用户通过浏览器和区块链应用交互的插件,集成web3API和Java使得用户可以不需要运行本地节点也能够读取区块链中的数据和与去中心化的应用进行交互。区块链的节点可以根据功能划分为全节点和轻节点。全节点参与到区块链信息的数据维护中,需要同步区块链上所有的数据,轻节点则主要在于读取链上的数据,不存储完整的区块链数据,用户虽然不能自己验证交易,但能够获悉区块链网络是否已经认可了该交易,这样对于普通用户则足够了。除此之外,在前端界面实现上,我们使用了HTML和css、JavaScript技术。网页主要有三部分构成,结构、表现和行为。HTML对应着结构,决定网页的结构和内容;css对应着样式,设定网页的表现样式;JavaScript是行为,它是面向Web编程语言,也是目前应用最广泛的编程语言之一,控制网页的行为。2.4本章小结本章主要对系统所涉及到的一些技术和概念进行了相关介绍。首先介绍了区块链的整体层级架构,使得了解区块链架构中每层所用到的技术和理念。之后面对区块链中几个比较核心的技术:区块结构、Merkle树、共识算法和智能合约进行了介绍。共识算法部分主要了解了几种主流的共识算法以及它们的优缺点,智能合约部分主要介绍了智能合约的发展历程和智能合约平台。最后介绍了以太坊区块链平台和Truffle架构,这为在以太坊平台上利用智能合约实现物联网数据共享平台打下了坚实的理论和技术基础。第3章基于区块链技术的物联网数据共享平台设计与实现本章首先在前两章所叙述的技术背景与理论的基础上,结合物联网数据飞速增长和物联网本身存在的数据安全问题,设计并实现一个基于区块链技术的物联网数据共享平台。首先,对物联网数据共享平台做功能需求分析和非功能需求分析;其次,结合需求分析对平台从物理架构设计、功能设计、智能合约设计、界面设计等方面展开叙述;最后,对基于区块链技术的物联网数据共享平台进行功能测试。3.1需求分析需求分析是开发应用必不可少的步骤,也是应用开发的第一步骤。为了使开发出的应用产品满足平台需求,它的基本任务是准确的回答“系统做什么”这一问题。好的需求分析对于应用设计和实现有着很大的助益。本小节结合物联网、区块链技术发展现状,对本文研究的基于区块链技术的物联网数据平台从总体需求、功能需求、非功能需求三方面展开分析。3.1.1总体需求描述本文研究的目的是基于以太坊区块链技术,设计并实现物联网数据共享平台,利用区块链技术实现对数据的溯源,共享规则和数据交易数量进行记录与管理。随着物联网技术的不断发展,物联网数据种类繁多,数据量庞大。目前现在常见的物联网中心架构对于物联网数据的管理面临着一些问题:运营成本会随着管理的物联网设备数量以及设备产生的数据而快速增长,这给物联网个体带来了很大的成本压力;物联网领域也爆发过很多安全漏洞和数据泄露事件,比如说Facebook信息泄露事件,某公司通过Facebook收集了5000万选民的个人资料,再利用这些资料设计软件来预测和影响了美国大选的结果;物联网中心架构也会导致一旦中心服务器出现问题,整个物联网都面临着不能运作的风险。而区块链技术所有的去中心化、防篡改,可溯源等特性可以为上述问题带来一种新的解决方案。3.1.2平台功能需求分析1.数据上传用户将想要上传至平台的数据整理成文件形式之后上传,平台会为这份数据生成一个独有的哈希值。上传用例如表3.1所示。表SEQ表\*ARABIC3-1上传用例用例名数据上传执行者用户目标获得数据文件对应的哈希值功能描述数据上传范围物联网共享数据平台前置条件用户已登录系统基本交互动作用户点击“数据上传”平台跳转到数据上传界面用户点击“选择文件”按钮用户将选择好的文件上传至平台平台生成哈希值后置条件如果用例成功,平台停留在数据上传界面2.出售数据用户如果有想要出售的数据,可以在出售数据商品界面上传想要出售的数据的基本信息和数据内容的描述。点击发布数据即可开始售卖。出售数据用例如表3.2所示。表3-2出售用例用例名出售数据执行者用户(卖家)目标完成出售操作功能描述数据上传范围物联网共享数据平台前置条件用户已登录系统基本交互动作续表用户点击“出售数据商品”平台跳转到出售数据界面用户输入想要出售的数据的基本信息用户点击“发布数据”按钮上传成功后置条件如果用例成功,平台停留在出售商品界面3.搜索数据用户如果想在平台上购买数据,则可先在搜索数据商品界面输入你想要的购买的数据的相关信息,来查找是否有你需要的数据。查询数据商品的用例如表3-3所示。表3-3搜索数据用例名搜索数据执行者用户(买家)目标完成查询操作功能描述搜索数据范围物联网共享数据平台前置条件用户已登录系统基本交互动作用户点击“数据商品搜索”平台跳转到数据商品搜索界面用户在文本框内输入关键词用户点击“查询”按钮平台根据用户所输入的关键词展示相关的数据商品信息后置条件如果用例成功,平台显示商品信息4.购买数据用户查找到自己想要的数据后,可以获得相应数据的ID和出售价格,在购买数据商品页面输入相应的商品ID和价格,即可购买该数据商品。购买数据用例如表3-4所示。表3-4购买数据用例名搜索数据执行者用户(买家)目标完成查询操作功能描述搜索数据范围物联网共享数据平台前置条件用户已登录系统基本交互动作用户点击“数据商品购买”平台跳转到数据商品购买界面用户在相应表格内容输入ID和价格用户点击“购买”按钮购买成功扩展交互动作1A:输入信息有误1.1:购买失败后置条件如果用例成功,平台停留在数据购买界面3.1.3非功能型需求分析开发一个应用时不仅有功能上的需求,非功能需求就是对系统的整体要求。本平台特殊的是智能合约的开发,它不同于一般应用的开发,除了要注意基本的开发问题外,还要注意安全性问题等。前端界面需求前端界面的设计应该尽量减少一些无用的元素和布置,尽量突出主要的功能,使页面尽量简洁、简化用户使用难度。根据功能合理划分界面,使用户很轻松就可以找到自己想要的功能。页面也要适配大多数浏览器,防止出现不同浏览器页面显示不全或者变形的问题。平台可靠性和安全性平台应该有着较低的出错率,在部分节点出现故障时平台仍然能正常运行。平台存储了大量数据商品信息和商品购买信息,数据泄露或者丢失将会带巨大的损失。3.2平台设计本小节主要从平台总体角度讲述平台架构以及各个层次起到的作用和所应用到的技术,然后讲述如何应用以太坊平台和Truffle框架搭建开发环境。3.2.1平台架构区块链技术最突出的特点就是去中心化,在实际应用中与中心化应用的差别主要体现在关键的应用数据都储存在区块链中,而非放在相关的服务器中。用户可以直接通过互联网提交想要交易的物联网数据至区块链网络,可以在区块联网络中直接写入数据或者查询数据。在本文研究的物联网数据共享平台中,物联网数据的相关信息,包括商品ID、数据文件哈希值、数据类型等关键信息都存储在区块链中,这保证了物联网数据的公开透明、不可篡改。平台的架构设计如图3-1所示。图3SEQ图\*ARABIC\s11平台架构图由图3-1可以了解到,平台架构分为三层,分别是以太坊区块链底层、服务层以及应用层。在应用层,用户最先会接触到的是前端界面。一个人性化的界面可以提高用户的使用体验以及推动平台的发展。页面设计采用了传统的HTML和css技术,并且使用了前端框架bootstrap。Bootstrap是目前最流行的前端框架之一,它主要用于设计构建响应式、移动设备优先的网站。其内置的流式栅格系统,随着屏幕或者是网页尺寸的增加,系统会自动分为最多12列,可以让应用随着屏幕的大小变化而随之改变。服务层中的Node技术是提供服务的核心,也是用来支撑整个应用的运行,它在服务端还负责复杂的逻辑控制。Node.js作为服务器,它和以太坊官方推荐使用的操作接口库web3.js都是面向JavaScript语言的。若直接使用浏览器JavaScript也可以用来操作以太坊区块链,但是这样的应用程序的架构的可扩展性就会很差,而选择增加了服务器后平台的可扩展性和可维护性都会有一定的提升,所以本文选择了既能满足区块链接口需求,又能起到优化系统架构作用的Node.js作为服务器。最后的是以太坊区块链底层,它承担着数据存储和建立互信机制的用处。以太坊对区块链已经做过了一层封装,其在底层区块链网络的基础上建立了智能合约层,这一层中包括了EVM虚拟机和智能合约。以太坊不但可以在区块链上来存储数据,还可以在链上存储智能合约的代码,并且在以太坊提供的虚拟机上执行合约代码。这里我们使用了以太坊平台提供的开发框架Truffle。Truffle是一套针对以太坊的类JavaScript语言的Solidity语言的高度集成的开发框架,极大简化了开发和调试的过程,使用Truffle框架,可以很简单的就完成智能合约的开发,测试和部署。3.2.2web.js函数库为了简单便捷地构建基于web的去中心化平台,以太坊还提供了一个JavaScript库web3,js,这个函数库封装了以太坊节点的API协议,为用户开发过程中提供了一系列与以太坊交互的JavaScript对象和函数,如表3-5中列举了几个比较常用的函数名称及其功能。表3-5web3常见函数名称和功能函数名称功能web3.eth.personal.newAccount创建新账户web3.eth.getBlock返回块号或这区块哈希值所对应的区块web3.eth.getBlockTransactionCount返回指定区块的交易数量web3.eth.getTransaction返回匹配指定交易哈希值的交易web3.eth.getTransactionCount返回指定地址发起的交易数智能合约在编辑的时候会生成一个二进制字节码和对应的json接口。json接口是用来描述以太坊智能合约的应用程序的二进制接口的json对象。通过这一个json接口,web3.js使用web3.eth.Contract对象来创建表示智能合约及其方法、事件的JavaScript对象。而面对使用平台的用户来说,当然不能让用户在命令行调用web3函数来与合约交互,因此在服务层需要对智能合约代码进行一次封装。首先实例化一个web3对象,代码如表3-6所示。表3-6创建web3对象实例initWeb3:
function()
{
//
重构条件
if
(typeof
web3
!==
'undefined')
{
//如果Metamask已经提供了一个web3实例
App.web3Provider
=
web3.currentProvider;
ethereum.enable();
web3
=
new
Web3(web3.currentProvider);
}
else
{
//
如果没有提供web3实例,则指定为默认实例
App.web3Provider
=
new
Wviders.HttpProvider('http://localhost:7545');ethereum.enable();
web3
=
new
Web3(App.web3Provider);
}
return
App.initContract();
},如果已经有了实例化的web3对象,那就直接获取它的支持,并用来创建我们自己的web3对象,比如Mist钱包或者是插件形式的Metamask轻量型钱包,在启动后就会自动注册一个属于自己的web3实例。如果没有已经存在的web3实例,就可以使用基于infura提供的远程节点创建自己的web3对象。创建web3对象后就可以通过web3和以太坊进行交互了。这个时候就需要实例化一个智能合约,一边web3知道智能合约的位置并与其进行交互,这个过程可以依赖于Truffle框架中的truffle-contract库来处理,代码如表3-7所示。表3-7初始化智能合约initContract:function(){$.getJSON("Election.json",function(election){//初始化合约App.contracts.Election=TruffleContract(election);//连接与合约进行交互App.contracts.Election.setProvider(App.web3Provider);App.listenForEvents();returnApp.render();});},在实例化合约之后,需要web3对象的支持,因为前面已经完成web3对象的实例化并且取得了web3的值,这里只需要直接将其提供给智能合约作为web3节点支持即可。3.2.3环境搭建以太坊中,网页通过HTTP的远程过程调用(RemoteProcedureCall,RPC)与区块链节点通信。web.js封装了以太坊全部的RPC调用,因此利用它就可以与区块链进行交互,这样就减轻了开发者的工作,不必再手写RPC请求包了。而以太坊的Truffle架构则对web3.js再次进行了封装,简化了实现去中心化应用前期的搭建工作。在Truffle中编写、部署智能合约,同时也可以编写前端的代码,这样就可以直接创建一个完整的去中心化应用。首先搭建智能合约的开发环境,安装Node.js。Node.js是一个可以使JavaScript运行在服务器的开发平台。安装完毕后,首先将Node.js中自带的包管理工具npm切换至淘宝镜像,切换命令为:npmconfigsetregistry。验证是否切换成功:npmconfiggetregistry。最后,下载Truffle框架,安装命令为:npminstall-gtruffle,其提供了大多数的项目模板,可以快速搭建一个去中心化应用的代码骨架。项目结构如表3-6所示表3-6项目结构文件/文件夹名称所包含的内容contracts主要防止智能合约的代码,使用solidity用语言migrations用来处理、部署智能合约,又称之为移植test智能合约测试用例truffle.js对智能合约部署进行相关配置合约部署完成后,就需要本地的web服务器提供服务的访问,Truffle框架可以解决这个问题,它直接提供了一个lite-server,可以直接使用,在package.json文件中有提到:"dev":"lite-server"。所以如果想启动项目,可以使用npmrundev命令,它会自动启动lite-server,启用本地的web服务器。3.3平台功能的设计与实现本平台的功能都是围绕着交易物联网数据展开的,平台的智能合约代码是由Solidity语言编写,Solidity语言在语法上与JavaScript语言十分相似。下面介绍一下智能合约中所实现的功能。本平台智能合约文件名是Election.sol。智能合约中有一个全局变量productNonce,用来存储区块链中正在出售的数据数量;一个映射mapping(uint=>iotProduct)products用作物联网数据商品索引;一个结构体iotProduct,其具体结构如图3-2所示。图3SEQ图\*ARABIC\s12iotProduct结构体智能合约中主要完成了上传物联网数据商品和购买物联网数据两个功能。上传物联网数据商品流程如图3-3所示。图3SEQ图\*ARABIC\s13上传数据流程物联网数据卖方首先会通过前端界面发起数据上传请求,智能合约会检查卖家所上传的物联网数据类型是否合理、设置的价格是否大于零,如果不满足上述条件则直接退出。满足以上条件后,全局变量productNonce是用来记录正在出售的数据的数量,现在有一条新的物联网数据商品要上传至区块链,所以productNonce自增。创建一个iotProduct变量存储数据信息,为该物联网数据创建一个所以并存入映射products中。最后一步是触发事件,代码如表3-8所示.表3-8事件以及触发事件的代码//创建数据商品事件eventIotProductCreated(uintid,stringtype,uintprice,addresspayableowner,boolpurchased,stringhashNum,uintcreateTime);//触发事件代码emitIotProductCreated(productNonce,_type,_price,msg.sender,false,_hashNum,bnum);事件(event)是以太坊虚拟机日志基础设施提供的一个便利接口,日志是一种区块链上的特殊数据结构。当事件被触发的时候,会触发参数存储到交易的日志中。这些日志与合约的地址关联,并记录到区块链中。emit操作就是触发事件,简单来说就是生成一个日志并被记录到区块链中。这里将函数中的参数介绍一下:productNonce,type,price之前都有过介绍,msg.sender则是取上传数据的用户的区块链地址,false则对应着purchased参数,hashNum是卖方想要售卖的数据文件的哈希值,bnum则是创建时间。购买物联网数据功能流程如图3-4所示。物联网数据买方首先会通过前端界面发起数据购买的请求,并传入想要购买的物联网数据的ID和价格。智能合约会检查该买家输入的物联网数据商品ID是否存在,买家的账户中是否有着足够的代币来购买该商品,商品是否已经出售,买家和卖家是否是同一人。如果上面这些条件有一条不满足则会直接退出函数。如果全部满足则变更数据商品的所有者、变更该商品数据中的purchased一项的值,改false为true,标志着该商品已经被售卖出去,将买家所需付的代币转至卖家的账户中,最后触发事件。购买数据与上传数据的事件函数相差不多,只不过购买数据只需要改变该商品中的几项信息,而上传数据则是新建一个商品,需要全部的信息。图3SEQ图\*ARABIC\s14购买数据流程图除了本平台所涉及的智能合约文件外,Truffle框架还需要一个移植合约,Migrations。移植是指由一些JavaScript文件(迁移脚本)组成来帮助将智能合约部署到以太坊网络。这些文件负责暂存我们的部署任务,假设我们的部署需求会随着事件的推移而发生变化。随着项目的发展,我们将创建新的JavaScript文件,以进一步推动区块链的发展。先前运行的部署记录会通过一个特殊的Migrations合约记录在链上。当你开启一个新的基于以太坊区块链和Truffle开发框架的项目,就会自动获得一个Migrations合约。Migrations合约具体内容如表3-9所示。表3-9Migrations合约代码pragmasolidity^0.5.0;contractMigrations{addresspublicowner;uintpubliclast_completed_migration;modifierrestricted(){if(msg.sender==owner)_;}constructor()public{owner=msg.sender;}functionsetCompleted(uintcompleted)publicrestricted{last_completed_migration=completed;}functionupgrade(addressnew_address)publicrestricted{Migrationsupgraded=Migrations(new_address);upgraded.setCompleted(last_completed_migration);}3.4前端功能设计实现平台前端页面的设计既需要考虑到完整地展示平台所有的功能,又要注重用户的使用体验和方便用户操作。本平台所使用到的Bootstrap架构可以很大程度的优化页面布局,是页面更加简洁干净,并且可以适应大部分的浏览器。所以基于Bootstrap栅格系统的基础上涉及了导航栏、面板等元素。在Truffle开发框架中,与前端和脚本相关的文件都会存放在src文件夹中。该文件夹中还有css、fonts、js文件夹和平台的html文件,比如index.html网页中就是平台的主页内容,也是物联网数据共享平台启动时会进入的界面。js文件夹中包含了所有为网页添加了交互功能的代码,在这里我们还实现了查询物联网数据商品的功能;css文件夹包含了为主页内容添加样式的css样式表。现在已经拥有了可以部署到以太坊区块链的智能合约和用html语言写的前端界面,那么接下来就是如何解决前端界面与智能合约的互动,包括在前端界面对合约中的函数方法进行调用和将在前端界面输入的数据存储到实例合约中。智能合约部署到以太坊区块链之后就会自动创建一个抽象合约,它和正常的抽象函数一样,不能调用,只能继承。那么如何解决上面所述的问题呢?首先我们要对合约进行实例化,也就是继承刚才所说的抽象合约。合约实例化完成之后,就可以调用编写的智能合约函数方法与前端互动。如果检测到有状态的变化就会生成新的区块并且部署到区块链上。当然如果没有检测到状态的改变,也不会形成新的区块。3.5物联网共享数据平台应用测试3.5.1测试环境本平台主要依赖的环境如下:操作系统:Windows10区块链网络:Ethereum处理器:2.8GHzIntelCorei7内存:8GB开发语言:智能合约部分:Solidity前端:JavaScript和HTML语言测试环境:谷歌浏览器、Metamask插件、以太坊节点仿真器ganache在进行功能测试之前,需要安装Metamask钱包,它是一款谷歌浏览器上的一种插件类型的以太坊钱包,这种钱包不需要下载,很方便。首先我们需要注册一个Metamask账号,注册账号成后它会生成一组随机的助记词,为12个英文单词。有了Metamask账号后,将平台所在本地私有链地址添加至连接的网络,这样就可以通过Metamask登录平台。检查Truffle.js的配置,里面的信息有:合约的部署网络、发布合约的节点和部署合约所需要的交易费用(gas)。这里可以使用两种节点,分别是infura提供的在线节点和节点仿真器。infura提供的在线节点可以发布到以太坊的ropsten测试网,节点仿真器则只能在本地网络进行测试,这里选择节点仿真器在本地网络进行测试,truffle.js中的内容如表3-10所示。表3-10Truffle.js文件代码networks:{development:{host:"",port:7545,network_id:"*"//Matchanynetworkid},develop:{port:5777}ganache的前身是testRPC,它是将testRPC包装成可视化界面形式。ganache可以快速启动个人以太坊区块链,并可以用它来运行测试、执行命令、检查状态、同时控制链条的运行方式。通过ganache可以查看所有账户的当前状态,包括他们的地址、私钥、交易信息和账户代币余额,还可以查看ganache内部区块链的日志输出,包括响应和其他重要的调试信息。ganache能检查所有区块和交易信息,使用它来测试非常方便。Ganache会通过开启一个私有链来进行开发测试,默认会在7545端口上运行一个开发链。确认truffle.js的配置没有问题后,以管理员的身份打开命令行,进入项目所在文件夹,输入trufflecompile,对智能合约进行编译,如图3-5所示。图3SEQ图\*ARABIC\s15编译结果智能合约编译完成后,在命令行中输入trufflemigrate,如果是想要进行重新部署的话,可以输入trufflemigrate–reset,这条命令的作用是对智能合约进行发布,部署结果如图3-6所示。图3SEQ图\*ARABIC\s16部署结果此时观察ganache中私有开发链的情况如图3-7所示,可以观察到当前区块高度为4。图3SEQ图\*ARABIC\s17ganache私有开发连当前情况最后需要本地的web服务器提供网页的访问,由于Truffle开发框架中已经提供了轻量级的服务器lite-server,所以直接在命令行中输入命令npmrundev就可以启用lite-server,自动进入物联网数据共享平台,结果如图3-8所示。图3SEQ图\*ARABIC\s18利用lite-server提供网页访问3.5.2功能测试以上步骤就完成了测试环境的部署,接下来就逐一对应用的各个功能进行一个简单的测试。首先用户如果想登陆物联网数据共享平台,则需注册一个Metamask钱包,输入自己的私钥,如果没有私钥则不能登陆本系统。平台主页面如图3-9所示。图39平台主界面点击数据上传按钮,进入数据上传界面,如果想获得数据文件的哈希值,则直接选中你想要哈希值的文件,上传至平台就可以生成一个哈希值。用户如果有想要出售的数据,则可以先生成哈希之后,点击出售数据商品界面,填写数据商品信息,点击出售即可,如图3-10所示。图310出售商品界面如果用户想要在平台上查询是否有自己需要的数据文件,可以在查询数据商品界面,输入想要的物联网数据的关键词,点击查询即可获得结果,查询界面如图3-11所示。如果用户找到了自己心仪的数据并且查看价格后觉得合理则可以点击购买数据商品界面进行购买,购买界面如图3-12所示,在购买界面也可以查看正在出售的数据商品信息。图3-11查询出售中的物联网数据界面图3-12购买数据界面3.6本章小结本章首先对基于区块链技术的物联网数据共享平台进行需求分析,分为总体需求分析、功能性需求分析和非功能需求分析。完成需求分析后,设计了平台的总体架构并且对架构组成进行了详细的介绍;对平台所需要实现的功能进行基本的用例设计,介绍了需要用到的web3.js函数库,为接下来物联网共享数据平台的实现打下了良好的基础。接下来详细介绍了基于区块链的物联网应用平台的实现,首先介绍了所需要的两个智能合约文件以及它们包含的函数功能流程图,接着介绍了实现前端界面的工具和方法。最后对平台进行了功能测试,其中介绍了测试所需要用到的工具,基本满足设计要求。第4章总结与展望4.1论文工作总结随着物联网技术的不断发展和5G通信技术商业化进程的加快,可以预见未来大量的物联网设备会接入至互联网中,数以千亿计的物联网设备所收集、上传的数据量会无比的庞大。而过快增长的数据量也会给物联网传统中心架构体系带来很大的压力和数据安全隐私问题。区块链是目前在信息产业很受欢迎的一项技术,它起源于比特币白皮书,最早作为代币的底层技术出现在大众的眼前,是融合了密码学、共识机制、点对点传输、分布式系统的技术的新型应用。由于它所具有的去中心化,不可篡改、可追溯等特性正好可以用来解决目前物联网技术面临的数据易丢失、被篡改、不完整的问题。本文的主要研究工作如下:1.通过阅读文献,我们了解到现在物联网的发展遇到了很多新的挑战,区块链作为一种新兴的分布式数据账本技术,可以为物联网提供一个分布式去中心化可信任的平台,帮助物联网解决现有的数据安全隐私以及信任问题,物联网与区块链技术的结合已经变成一个非常值得研究的一个科研方向。目前区块链物联网在智能家居,物流,传感器,供应链等领域都有很大的发展前景。国内外很多学者也在对这个新兴研究方向进行开拓。但现在区块链与物联网的结合还处在起步阶段,针对物联网的区块链的底层技术还有待开发。我们也意识到在利用区块链保障物联网数据隐私安全方面,针对不断增长的物联网数据,如何整合不同物联网设备提供的相关数据,是共享的背景和需求。2.了解了区块链技术的起源与发展历程,深入研究了区块链的底层技术,对日志、区块等底层数据结构以及相关技术进行分析,如共识算法、智能合约,以及哈希算法、数字签名等密码学技术。深入研究以太坊平台的架构和使用方法,为基于以太坊区块链实现物联网数据共享平台打下了坚实的理论和技术基础。3.对物联网数据共享平台进行了需求分析,详细分析了总体需求、功能需求、非功能需求。根据需求分析的工作,设计了平台具体的功能模块,详细阐述了智能合约的设计、前端界面设计以及前后端交互处理以及所用到的应用接口,并对系统进行了功能测试。综上所述,本文为如何利用区块链技术为飞速增长的物联网数据提供一种解决方案,设计并实现了一个基于区块链技术的物联网数据共享平台,并对平台进行了简单的功能测试。4.2未来展望本文设计了一种基于以太坊区块链技术的物联网数据共享平台,但仍然存在着很多不足需要进一步的改进:本文完成了物联网数据交易模块,目前功能较为单一,需要在后期不断地进行完善,同时数据交易时的买家和卖家不能及时的进行相互沟通,需要增添新的模块进行辅助,比如说还价功能或者是聊天功能等,因此接下来需要进一步完善系统功能。目前平台的前端界面还不够完善,比如说需要提示用户输入的错误信息等。目前区块链在物联网的应用是很多学者关注的研究方向,本文是利用区块链技术对解决物联网数据安全进行了初次的尝试,要做成一个可用性强、运行稳定的区块链去中心化应用还需要不断的探索和努力。参考文献BiswasAR,GiaffredaR.IoTandcloudconvergence:Opportunitiesandchallenges[C]//InternetofThings.IEEE,2014:375-376.张潮,刘茜,冯锋.基于区块链的物联网技术应用研究[J].无线互联科技,2018,015(015):19-21.Kumar,Pardeep.FutureInternet
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年定西地区政务服务中心(窗口人员)招聘笔试备考试题及答案详解
- 2026年天津市大港区政务服务中心(窗口人员)招聘笔试备考题库及答案详解
- 2026年江苏省苏州市医疗系统事业编人员招聘笔试备考题库及答案详解
- 2026年8月雅安康馨商务服务有限公司面向社会公开招聘考试模拟试题及答案详解
- 小学收费自查报告(3篇)
- 银行员工思想动态调查报告2026(3篇)
- 2026年南京市江宁区工会人员招聘考试备考试题及答案详解
- 2026年温州市龙湾区工会人员招聘笔试模拟试题及答案详解
- 2026年黑龙江省双鸭山市工会人员招聘考试模拟试题及答案详解
- 2026年广西壮族自治区桂林市工会人员招聘考试参考题库及答案详解
- 2025年新人教版8年级上册物理全册教学课件(新版教材)
- 收费站收费安全培训课件
- 艾滋病防治条例培训课件
- 2025年国家卫健委遴选笔试备考冲刺资料包
- 核电新员工汇报
- 胎盘早剥病例汇报
- 母狗认主协议书
- 妇科危重患者的病情观察及护理
- 棉叶销售合同协议
- 《煤矿井下供电计算》培训课件2024
- 研究生教育管理信息系统建设方案
评论
0/150
提交评论