Bitcoin and Cryptocurrency Technologies 学习笔记:1.2 Hash Pointer and Data Structure(linked list & BST)

7 篇文章 1 订阅

这一节讲解 Hash的另外一个大的用处,构造一些神奇的数据结构以增加不可篡改(tamper)性。总体来说有两类,分别是链表和二叉搜索树的变种,也称之为:

  • block chain
  • Merkle Tree

block Chain

他其实就是一个链表,不过,每一项都保存了前一项的消息摘要,hash值

这里写图片描述

这里面的一个重要的东西是: Hash Pointer,官方的介绍是这样的:

这里写图片描述

就是包含两个信息:

  • 所指向节点的位置
  • 所指向节点的hash值

remark 这里需要解释的是,实现中只要能实现这个功能就行了,并不是说这个hash值既表示前一个的摘要信息,又表示前一个的物理位置

用途

最大的好处就是防止篡改。我们举一个 tamper-evident log 的例子

这里写图片描述

比如说我们更改了第 k k (记从左到右分别编号 k,k+1,k+2)块的data,那么检测第 k+1 k + 1 肯定能检测出来,因此敌手势必要将所有块的hash 都更改,最终更改到head hash pointer 上,因此只要我们留有最终的hash pointer,那么就能检测到所有的篡改。

Merkle Tree

这里写图片描述

叶子结点存放的是data,中间节点都是各自的 hash pointer.修改任何一个节点都能被发现。

特点

  • Time: O( logN l o g N )
  • Space: O( NlogN N l o g N )

用途

成员证明(proof of membership)

这里写图片描述

其实也是空间换时间,我们只需记录一条从data到root的路径,那么就能在不超过 O(logN) O ( l o g N ) 的时间证明。而不用搜索整个 区块链

总结

我们总是可以将 hash pointer 放在没有环的数据结构中,防篡改。但是有环就不行了。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
<p style="color:#666666;"> <span style="font-size:14px;">本门课程重实战,将基础知识拆解到项目里,让你在项目情境里学知识。</span> </p> <p style="color:#666666;"> <span style="font-size:14px;">这样的学习方式能让你保持兴趣、充满动力,时刻知道学的东西能用在哪、能怎么用。</span> </p> <p style="color:#666666;"> <span style="font-size:14px;">平时不明白的知识点,放在项目里去理解就恍然大悟了。</span> </p> <p style="color:#666666;"> <span></span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="color:#FF0000;font-size:14px;"><strong>一、融汇贯通</strong></span> </p> <p style="color:#666666;"> <span style="font-size:14px;">本视频采用了前后端分离的开发模式,前端使用Vue.js+Element UI实现了Web页面的呈现,后端使用Python 的Django框架实现了数据访问的接口,前端通过Axios访问后端接口获得数据。在学习完本章节后,真正理解前后端的各自承担的工作。</span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="color:#FF0000;font-size:14px;"><strong>二、贴近实战</strong></span> </p> <p style="color:#666666;"> <span style="font-size:14px;">本系列课程为练手项目实战学生管理系统v4.0的开发,项目包含了如下几个内容项目的总体介绍、基本功能的演示、Vuejs的初始化、Element UI的使用、在Django中实现针对数据的增删改查的接口、在Vuejs中实现前端增删改查的调用、实现文件的上传、实现表格的分页、实现导出数据到Excel、实现通过Excel导入数据、实现针对表格的批量化操作等等,所有的功能都通过演示完成、贴近了实战</span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="color:#FF0000;font-size:14px;"><strong>三、课程亮点</strong></span> </p> <p style="color:#666666;"> <span style="font-size:14px;">在本案例中,最大的亮点在于前后端做了分离,真正理解前后端的各自承担的工作。前端如何和后端交互</span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="color:#FF0000;font-size:14px;"><strong>适合人群</strong></span> </p> <p style="color:#666666;"> <span style="font-size:14px;">1、有Python语言基础、web前端基础,想要深入学习Python Web框架的朋友;</span> </p> <p style="color:#666666;"> <span style="font-size:14px;">2、有Django基础,但是想学习企业级项目实战的朋友;</span> </p> <p style="color:#666666;"> <span style="font-size:14px;">3、有MySQL数据库基础的朋友</span> </p> <p style="color:#666666;"> <span style="font-size:14px;"> </span> </p> <p style="color:#666666;"> <span style="font-size:14px;"><img alt="" src="https://img-bss.csdnimg.cn/202009070752197496.png" /><br /> </span> </p> <p style="color:#666666;"> <span style="font-size:14px;"><br /> </span> </p>
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值