区块如何防篡改_深入浅出:一条数据是如何完成上链的

12b606f382abc7bc79b03a3addab98fe.png

一笔业务数据在区块链处理的流程大致分为三个阶段:分别是上链前处理阶段、链上处理阶段和智能合约处理阶段。

148f02e14a795627f8add06d2e13fd33.png

一.上链前处理阶段

业务数据上链前需要将业务数据处理,并且对信息进行签名。这些过程可以通过对应的工具,比如序列化工具和各种椭圆曲线的签名工具来完成,不过更多的时候是通过将各种工具集成的SDK来完成,以太坊的web3就是比较典型的上链前处理的开发工具。业务数据处理

业务数据可以是任意的内容,比如物流信息、商品交易或物联网设备上传的数据或者对应数据的哈希值等等。这些业务数据既可以通过服务器处理,也可通过物联网设备的边缘计算系统处理。以存证用的物流数据举例,首先对业务数据不需要进一步处理或者简单计算一下哈希值,然后将调用函数的信息加上链数据放入交易结构体的相关部分当中即可。签名前的交易结构体是由链决定的,不过一般都包含调用的合约、时间戳、随机数和调用函数加数据的信息。将签名前的数据拼装好之后,会进一步序列化以便消息传递。对于一些隐私交易,需要用到同态加密或者零知识证明等算法,此时业务数据则需要经过更复杂的加工过程,比如数字经过处理可以变成一个乘方求模的大数或者椭圆曲线上的点,但是拼装和序列化等过程还是相同的处理方式。

信息签名

签名前的数据处理好之后,对该数据进行一次哈希处理,并对哈希进行签名。哈希是与数据绑定的一串值,篡改信息会造成哈希值发生变化,因此本身具有防篡改的特性。接下来是对信息的哈希值进行签名。签名是一种非对称加密的方法,可以在不泄露发送者本身的私钥的情况下,通过公钥和签名信息确认发送者持有对应的私钥。对哈希进行签名还可将发送者的身份和信息绑定,同时也可防止其他人冒充发送者,因此这样处理可保证信息的防篡改的同时认证发送者的身份,防止抵赖。
业务上链前的处理阶段主要是通过工具将业务数据转换成区块链可读的方式,同时通过签名将发送者的身份和发送信息绑定,起到身份认证和防止抵赖的作用,最后再将处理好的信息发送到区块链节点。上链前处理是中心化的,这些处理过程并不涉及区块链节点,因此这一阶段并不需要节点参与。有些系统,如边缘计算系统,本身的性能和储存空间都有限,并不适合做区块链节点,但可以作为业务上链前处理的平台。

二.上链处理阶段

处理完成的数据发送到区块链节点后,就形成了一笔区块链交易并进入上链处理的阶段,链上处理大体可分为交易广播和区块共识流程。

交易广播

在收到交易后,各节点会将接收到的交易先广播到其他节点,以便形成一个统一的交易池来为达成共识做准备。交易广播后联盟链和公链对交易会有不同的处理方法。对公链来说,任何交易发送者都可将交易发送到链上,但是处理能力不是无限的,因此会根据交易的手续费行有选择的处理,手续费低的交易很可能一直无法得到处理。在一些极端情况下,节点为了提高处理速度甚至会出现不处理任何交易的空块。对联盟链来说有一定的准入机制,能够发送交易的应该是合作伙伴,因此处理交易的原则是尽量将能够处理的交易打包进块。

区块共识

区块主要包含区块哈希、区块头和交易数据的信息,其中区块头一般都会包含共识信息、时间戳、区块高度等,并记录前一区块的哈希来指向前一区块;交易数据包含该区块里打包交易的哈希,交易需要根据统一的顺序排序;在确认区块头和哈希之后,就能计算区块哈希。这样通过前一区块哈希和自身哈希相连形成链条,修改链上的任何一个区块的内容会后面区块的前一区块哈希和修改后的哈希不同,因此区块具有防篡改的特性。只有修改该区块和往后所有区块的内容,且每个节点上都以相同方式修改才能完成修改。共识的主要目的就是以某种约定的方式生成能够被大部分节点认可的区块。不同共识方式的区别比较大,但是基本原则就是让不同节点产生相同的区块,尽可能保证数据的一致性。对公链来说,因为节点的通讯状况不可控,保证一直出块的情况下,如果网络出现问题,将可能无法达成一致,甚至出现分叉的情况。对联盟链来说,共识算法需要尽量使节点的区块数据保持一致性,因此在一定数量的节点出现网络问题的情况下将会停止出块。上链处理阶段是将业务数据写入区块的过程,这个过程就是通常所说的上链,这一过程是去中心化的,需要由节点处理。在处理阶段时业务数据还是可以按照发送者的意愿写入不同内容,而进入上链阶段后的业务数据将无法篡改,不过仍然存在上链失败的可能,因此仍需要关注是否完成上链。共识阶段完成后,各节点的区块保持一致。此时的业务数据获得每个节点承认且可追溯的数据了。

三.智能合约处理阶段

上链处理完成后,业务数据已经记录在链上了,对于单纯存证的业务来说,将业务信息写入区块已经完成了这笔业务处理,只需记录存证业务的交易哈希并在取的时候通过交易哈希查询即可。但是大部分业务场景都需要进行一定的逻辑处理,因此通过智能合约处理是必须的。智能合约处理包括合约逻辑处理以及修改状态梅克尔树等流程。合约逻辑处理

完成上链的业务数据很多情况下需要进一步进行逻辑的处理,比如一次最简单的商品的交易就涉及转账,即买家余额减少和卖家余额增加的逻辑流程,这样的流程虽然可以通过上链前的处理来完成,但是上链前处理是中心化的流程,对网络波动和可信度问题都有一定的劣势,因此通过智能合约进行逻辑处理是比较好的方式。不同链平台对智能合约处理的方式不同,但是和一般的编程语言一样都有调用函数和传入参数的过程。并且因为创建智能合约和调用智能合约的过程都是上链的,即执行的程序和调用的函数与参数都是经过共识的,因此最终调用智能合约的数据的输出结果也是相同的。处理完后的结果会写入合约的状态数据库,这个数据库除了最新状态也会包含历史状态,方便追溯和查询。

修改状态梅克尔树

智能合约的逻辑处理完成后,会修改状态梅克尔树。梅克尔树是一个二叉树结构,不同的叶通过梅克尔树链接到根,能起到防篡改和索引的作用。通过梅克尔树的索引,能够快速定位合约的历史状态,可通过查询某个业务执行的区块高度的合约数据来获取当时的执行结果。智能合约处理阶段是将业务数据进行逻辑处理,并记录智能合约状态的过程,这一过程也需要节点处理。如果合约逻辑处理的操作执行失败,对状态梅克尔树的修改也会撤销,合约的数据将会回滚到调用前的历史数据。需要注意的是合约调用失败和上链失败是有区别的,触发合约调用的时候交易已经在区块里留下记录,而区块是防篡改的,因此调用失败并不会擦除区块里的记录。如果交易因为数据错误或者共识问题而没有被记录进区块,则不会触发合约处理的过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

锁定计算机在哪里设置方法,怎样锁定电脑?如何设置电脑锁屏【步骤详解】

我们在日常使用电脑的时候,特别是自己的私人电脑时,难免会遇到上个厕所接个水之类的杂事需要离开位置的,也许可能就一两分钟不到的时间,这么点的时间如果关机的话又觉得实在是太麻烦了,但是又不想让其它的人知道我们的…

python 安装html,python安装glob

python 里面的glob模块是怎么用的新手刚学这一块内容,不是很懂 这个模块可以用来统计每个类型物品的统计glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,就类似于Windows下的文件搜索,支持通配符操作,…

hough变换检测圆周_Python OpenCV 霍夫变换

霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达…

关于未来计算机的想象作文600字,未来世界的想象作文600字

我背着书包漫无目的地走在街上,刚要出门的时候突然出现了一个大洞,我本想上前一看究竟,结果被石子绊了下去,一下就落进了那个黑洞里,我的世界陷入了一片黑暗。不知过了多久,我眼睛好不容易看到一丝光亮&…

creator qt 字体太小_qt ttf 字体太小的解决方法

编译完成qt以后,发现qt的字体太小了原因是qt的dpi计算错误,这样的情况会导致qt在不同的平台上大小不一解决的方法就是设置好qt的dpi,qt是根据显示器的物理长度或者宽度于分辨率的关系来计算dpi的,所以我们设置exportQWS_DISPLAY"LinuxFB:mmWidth95:0"export QWS_SIZE…

当前超级计算机的应用方兴未艾,四川省若尔盖县高三下学期语文模拟卷(五)

四川省若尔盖县高三下学期语文模拟卷(五)姓名:________ 班级:________ 成绩:________一、选择题 (共3题;共6分)1. (2分)(2017海南模拟) 下列各句中划线成语的使用,全都正确的一项是()①与做人一样,李天来对待试验同样谨小慎微。他说&#xff…

easyui中onchange事件_React中类似Vue的“模板语法”

一、数据绑定类似 Vue 的 v-model,this.state { val: 1, companies: ["阿里巴巴", "腾讯", "百度", "京东"], };companyNameUpdate(e) { this.setState({ companyName: e…

html5着陆页模板,多用途着陆页HTML模板

资源下载此资源下载价格为5D币,请先登录资源文件列表apnew/css/animate.css , 74096apnew/css/bootstrap.min.css , 121260apnew/css/font-awesome.min.css , 27466apnew/css/jquery-ui.css , 36437apnew/css/jquery.carousel-3d.default.css , 3639apnew/css/mater…

php十六进制字符串转成字节数组_10 天 5 千 Star!21 岁本科生给程序员开发的十六进制编辑器...

【导语】:ImHex 是一款界面美观的十六进制编辑器,主要面向逆向工程师和程序员。如果你喜欢暗黑系编辑器,那它应该是你的菜。ImHex 最近在 GitHub 上非常火热,上架五天就收获了 2.5k Star,十天 5k Star。开发者介绍ImHe…

ie11用不了html5,HTML5拖放不能在IE11上运行

应用HTML5原生拖放功能,drop不适用于IE,与chrome和firefox配合使用。拖动似乎正在起作用,但对IE不感兴趣。另一个小问题 - 在IE中,我的可拖动元素周围有一个半透明的方块,但它的背景是透明的(图像是这样完成的)&#x…

扫掠两条引导线_《神都夜行录》周年庆点燃线上线下,解读国风二次元IP的成长之路...

自2016年国产二次元手游在市场实现登顶以来,该品类便一直呈明显的上升趋势,如今也依然是大小厂商乃至创业团队的布局对象。不过具体到二次元手游的玩法和IP建设上,多数产品都选择沿袭早期舰娘like的收集模式,再加上市面热门的重度…

vi新建一个shell脚本_编写第一个Shell脚本

Linux中有好多中不同的shell,bash是linux默认的shell,免费且容易使用。su切换为root权限1.创建shell脚本touch hello.sh2.编辑:vi hello.sh内容#! /bin/bash#the first programecho "hello world"3.保存并退出按Esc取消插入&#x…

四川三河职业学院计算机寝室,2020四川三河职业学院宿舍条件如何-有空调否?(宿舍图片)...

对于要考的大学宿舍条件好不好,想必大家也是很关心的,下面就带大家探索一番。(注:每年存在大学宿舍翻新的情况,数据与图片可作为参考。。)1、四川三河职业学院宿舍条件学生宿舍近日,四川三河职业学院为2013级即将入住的…

安徽科技学院计算机二级,安徽科技大学2017年3月计算机二级考试报名时间

根据安徽省教育招生考试院要求,安徽科技学院2017年上半年全国计算机二级考试定于2017年3月25日至28日(具体时间见准考证)举行。本次考试报名工作具体安排如下:一、开考科目、级别二、报名及缴费时间2017年2月13日上午9:00至2月28日下午17:30。三、报名方…

c# u盘使用记录_U盘如何快速清除使用记录【详解】

大家在使用U盘的时候,是不是觉得只要将U盘拔下来,就不会在刚才的电脑中留下使用过的痕迹?其实不然,只要你在Windows下对U盘做过任何操作,系统都会一丝一毫的记录下来,虽然这些在系统的资源管理器或记录上不会明显显示…

echart vue 图表大小_cesium+vue,性能优化

平时在vue开发中,我们都习惯把所有数据挂载到vue的data对象上,这样做大大简化了我们的开发流程,响应式数据简直不要太爽但是,针对地图业务的开发,使用了cesium这个开源库的话,其实完全不建议把整个库&#…

计算机 教育 研究生分数查询,专业硕士在考试结束之后几周内可以去查分呢现在只能是通过电脑来查分了吗...

考完试之后揭晓成绩是所有考生最激动的时刻,但专业硕士的考试结束之后,大家在短期是查不到成绩的,一般会在五六周之后才可以去查分。双证在职研究生也就是专硕的不脱产学习方式,那么现在大家去查分只能是通过电脑吗。第一&#xf…

iis架设aspx_在IIS6中配置html文件以ASPX方式工作

在IIS6中配置html文件以ASPX方式工作由于IIS6的安全不断提高,如果你需要设置html文件以ASPX文件方式被执行。仅仅设置应用程序映射是不够的,还 需要修改一些其他设置。如果你只修改了应用程序映射,而没有修改其它,则可能会报404错…

飞行计算机人机工程,人机工程学版

《人机工程学版》由会员分享,可在线阅读,更多相关《人机工程学版(18页珍藏版)》请在人人文库网上搜索。1、人机工程学版,人体工程应用与实训宜家考察总结,2011级景观一班,人机工程学版,人体工程学的研究对象及其关系,人机环境 (人体工程学主要研究科技和…

pytorch如何计算导数_PyTorch怎么用?来看这里

构建深度学习模型的基本流程就是:搭建计算图,求得损失函数,然后计算损失函数对模型参数的导数,再利用梯度下降法等方法来更新参数。搭建计算图的过程,称为“正向传播”,这个是需要我们自己动手的&#xff0…