这篇文章主要介绍“怎么理解区块链”,在日常操作中,相信很多人在怎么理解区块链问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解区块链”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
如何理解区块链
首先,引入区块链的理念:将一个基于节点的去中心化共识协议与工作量证明(PoW)机制结合在一起。节点通过PoW机制获得参与到系统的权利,每隔一段时间将交易打包到区块中,从而创建出不断增长的区块链。
这里主要有两个概念:去中心化和工作量证明机制。其实比特币的去中心化体现的可能更明显,这个之前我又写过一篇解读作为最早区块链技术的比特币以及区块链所带来的改变。
如何去中心化:区块链系统中的每一个区块,负责记录交易信息,每个用户的收支情况都被永久的存储在区块中供他人查询。每个节点都会保存一份完整的交易数据,所有这些节点组成了区块链的分布式数据库系统,任何一个节点的数据出现问题,都不会影响整个系统的运转。
工作量证明机制:工作量证明(Proof Of Work,简称PoW),简单理解就是一份证明,用来确认你在系统中做过一定量的工作。相较于低效的监测工作的整个过程,通过对工作结果进行认证来证明完成了相应的工作量,则是一种非常高效的方式。例如我们通过完成工作中的各项任务来证明我们为公司创造了价值,从而得到公司的认可。而这种"工作证明"一般都会花费一定的时间才能得到。
工作量证明机制(PoW)
工作量证明机制,是一种应对拒绝服务攻击(DoS)和其他服务滥用的经济对策。它要求发起者进行一定量的运算作为代价,也就意味着需要消耗计算机一定的时间。例如现在网站登录时都需要输入的验证码(滑块或者拼图),都采用的是这种CAPTCHA模式。
类似于CAPTCHA,哈希现金(HashCash)的原理是在邮件的消息头中增加一个包含收件人地址、发送时间和salt随机数的hashcash stamp的散列值,但是满足前20位都是0的散列值才是合法的。这就需要发送者在正式发送前需要通过调整salt的值进行多次计算,在满足该条件后才能成功发送。但是我们不希望发送者在算出这个stamp后继续复用,所以HashCash规定了过期的stamp是非法的(即发送时间 > stamp时间)。
区块链也是采用了类似hashcash的工作量证明方法,对区块头中的数据做双重SHA256运算( 即SHA256(SHA256(HEADER)) ),与当前网络的目标值做对比,如果小于目标值,则完成工作量证明。
这里对PoW做了较多的解释,是为了便于理解PoW是如何应用在区块链上的。挖矿也是通过PoW进行的。在比特币系统中,节点完成工作量证明后,就代表获得这个区块的交易记账权。系统会通过PoW机制让矿工们竞争记账权,谁在单位时间内执行的运算更多(拥有更高的算力),谁就有更高的概率获得区块的记账权。获得记账权的矿工将把该区块广播到网络中,全网其他节点在验证区块满足特定的条件后,其区块会被链接在主链上,从而在全网范围内形成对当前网络状态的一次共识,该矿工也会得到系统奖励的一定数量的代币。所有的区块通过这种形式链接在一起,形成了区块链的主链,从创世区块到当前生成的最新区块,所有历史交易数据都是公开透明的。
上面提到了区块是用于记录交易信息的,区块头中的数据参与了PoW的过程。那么接下来有必要进一步分析区块的内容了。
区块的组成
对于交易中的每个输入和状态,有如下的定义:
1.如果引用的UTXO不在当前的状态中,则会返回错误;如果签名与引用的UTXO的持有者签名不一致,也会返回错误。
2.如果所有输入的UTXO总额与所有输出的UTXO总额不等,会返回错误。
3.返回的新状态NEW_STATE中,移除了所有输入的UTXO,增加了所有输出的UTXO。
Merkle树
Merkle树是数据结构中的一种树结构,可以是二叉树,也可以是多叉树,具有树的所有特点。由于Merkle树中会进行Hash运算,所以也被称为Hash树。在了解Merkle树之前,先来看看Hash算法及HashList。
Hash算法是一种可以将任意长度的数据转换成固定长度字符串的算法。是一种安全散列算法。最显著的特点是几乎不可逆、无冲突。Hash算法最常见的应用就是对数据完整性的校验。例如我们在下载一些文件时,资源提供方会给出一个MD5或者SHA的值,这个值实际上就是资源在经过Hash运算后的值,用户下载数据后,可以对数据进行Hash,然后跟这个值比对,如果相同,就说明数据在传输过程中无损坏或篡改。
然后回过头来再看Merkle树,它的底层与HashList一样,都是将数据分成小数据块,然后分别计算其Hash值。但是再往上一层就不同了,它不是把所有的Hash值合并到一起做Hash,而是将两个相邻的Hash值拼接在一起进行Hash运算,产生一个新的Hash。例如Block1的Hash值201w与Block2的Hash值0mzc合并Hash后产生新的3ali Hash值。而如果两两匹配后出现孤立的Hash值,则直接将其做Hash,例如Block5。最终产生一个Root Hash值,通常称为Merkle Root。
同样,在下载前,会先从可信数据源中获取正确的Merkle Root,然后再从其他节点下载Merkle树,通过Merkle Root来辨别Merkle树的真伪。如果发现不匹配,则从其他节点继续下载该Merkle树,直到获得一个与可信Merkle Root相匹配的Merkle树。
由于Merkle树是逐级分支的,所以它可以从任意一个分支开始下载并验证。考虑Root->d063->09yk->a8b5->Block3这个分支,如果对这个分支的Hash值验证通过后,就可以下载Block3的数据了。而在HashList中需要先得到整个Hash值列表后才能使用Root Hash验证。
在区块链系统中,最下层的叶节点中存放的是交易数据,每个中间层的节点都是它的两个子节点的Hash,根节点也是它的两个子节点的Hash,代表Merkle树的顶部。如果有攻击者恶意篡改交易数据,或者篡改Merkle树的某一部分,必然导致上层节点的Hash值变动,最终导致验证不通过。
了解了Merkle树的结构后,如果我们要查找某一笔交易,那么顺序是怎样的呢?首先,可以根据区块头中的时间戳确认交易存在的具体区块。而Merkle Root也是放在区块头中的,如果我们从Merkle Root开始向下查找,假设底层有n笔交易数据,那么找到所需的步骤为log2(n),其实就是算法中的二分查找。简化支付验证(Simplified Payment Verification)就是利用这种方案,实现了轻量级的钱包客户端,只需下载区块头及相关交易的分支,即可对交易进行确认。但是它也存在一些缺点:
1.容易遭到全节点的拒绝服务,所以要保证较多的与全节点的连接,而且要保证这些节点是可信的;
2.spv客户端向全节点请求的交易必须与它的密钥一致,这样全节点会看到该客户端的相应用户的公钥,造成隐私泄露。
P2P网络
在BT架构中,我们发现还是存在一个"中心服务器",该服务器的作用并非提供下载服务,而是对发布的torrent文件进行统一管理。torrent文件本质上是一个索引文件,包含了Tracker信息(发布资源的服务器的位置)和文件信息(文件名、大小、Hash值等),这些信息根据BitTorrent协议内的B编码规则进行编码。torrent文件中的Hash信息是对每一块要下载的文件内容的加密结果。使用文本工具打开.torrent文件,就可以看个大概(乱码是SHA1校验码):
到此,关于“怎么理解区块链”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。