区块链技术原理

区块链技术原理

概述

中本聪在2008年发表的比特币白皮书中提出了区块链的概念,比特币是目前最大的的区块链应用,它基于密码学原理使得任何达成一致的双方都能够直接进行支付,不需要第三方中介的参与

区块链的每一个区块包含前一个区块的加密散列值,时间戳以及交易数据,这样的涉及使得区块难以被篡改,以比特币的区块链账本为例,每个区块由前一个区块的加密散列值,若干条交易数据以及一个随机数构成,矿工通过工作量证明将交易打包成账本区块以维持区块安全性

image.png
区块链技术主要解决的是数字货币中的两大问题:双重支付问题拜占庭将军问题

总的来说:区块链技术是一种以非对称加密技术对交易进行数字签名,通过工作量证明等共识机制进行记账节点协调,数据以链式区块形式组织存储的分布式账本技术。

双重支付问题

双重支付(又称一币多付双花攻击double-spending)是同一笔数位货币可以被重复花用两次或更多次的情形,是一种数位货币失败模式的构想。因为数位货币是采取电子档案的型态,而电子档案可被复制,所以花用数位货币,能造成不从原持有者扣除已花用的金额,却能支付“购买”商品与服务的消费的现象,这将凭空多出已支付但未扣除的金额,或是使收款者凭空收到多重支付的金额,此现象让整体的数位货币流通量增加,造成“通货膨胀”而导致数位货币贬值,从而不再让人信任并愿意持有及流通。任何数位货币都有防止双重支付的措施。

在传统金融体系中,货币有着物理实体(贵金属、纸币等),天然避免了双重支付问题。

在区块链之前的数字货币,是通过可信的中心化第三方机构保证不出现双重支付问题。

区块链技术通过共识机制分布式账本,不需要可信第三方就可以解决双重支付问题。

拜占庭将军问题

分布式计算中,不同的计算机通过通讯交换信息达成共识而按照同一套协作策略行动。但有时候,系统中的成员计算机可能出错而发送错误的信息,用于传递信息的通讯网络也可能导致信息损坏,使得网络中不同的成员关于全体协作的策略得出不同结论,从而破坏系统一致性。拜占庭将军问题被认为是容错性问题中最难的问题类型之一。

形象的来说,拜占庭将军问题实际上是分布式网络的简化模型,将军是计算机,而信差是通信系统,在区块链环境中,我们可以把每个区块链地址看作一个将军,把区块链之间的点对点通信看作信差

在区块链中,共识算法被引入解决这个问题

技术实现细节

分布式账本

分布式账本的实现主要基于区块链的独特结构,区块链的独特结构使得我们可以使用轻节点和全节点来分布式的存储所有交易以及以较低的开销验证交易的存在性,从宏观角度来说,区块链就是一系列基于哈希值进行链接的区块,每个区块包含区块头和交易数据两部分,区块链主要借助区块头结构实现数据的不可篡改性,区块的结构以及区块头的结构如下

区块结构

大小 字段 描述
4字节 区块大小
80字节 区块头
1-9字节 交易计数器 交易的数量
可变 交易 记录在区块里的交易信息

区块头结构

大小 字段 描述
4字节 版本号
32字节 父区块哈希值
32字节 merkle根 该区块中交易的merkle树根的哈希值
4字节 时间戳 区块产生的时间
4字节 难度目标 POW算法下的难度目标
4字节 nonce 用于POW算法确定难度目标的随机数

由于区块链实际上是一条依托于前一个区块哈希的链表,当攻击者想要修改链上的某一笔交易时,它需要修改链上的所有数据

接下来我们介绍一下全节点和轻节点的概念

全节点储存了区块链上所有的区块,由于其占据的空间较大,全节点一般一个地区只有少数几台

轻节点则运行在每台使用区块链的计算机上,轻节点又叫简单支付验证节点,它只存储区块头而不存储区块体,这一特点使其占用空间大大减小,而借助于存储的交易Merkel跟哈希值,轻节点可以通过向全节点发起Merkel path proof请求来验证接收到的交易是否存在与区块链上,由于区块链的不可变性,简单支付节点通过检查一笔交易所属区块后的区块个数来验证交易是否双化

? **Merkel path proof** 当轻节点需要验证一笔交易是否存在时,它会向全节点发送一个交易验证请求,请求中携带交易的区块hash,全节点在找到这笔交易的位置后返回一条**该交易到Merkel树顶元素的路径**,轻节点通过校验路径的hash值是否与本地的Merkel根hash一致来验证交易是否存在

共识机制

区块链网络实际上就是一个分布式网络,对于基于网络的数据共享系统来说,中心化程度越高,系统越容易达成一致,中心化程度越低的系统越难达成一致,而区块链目前主要采用POW和POS机制来保证一致性

工作量证明(proof of work)

工作量证明被应用在早期的比特币中,用于保证比特币网络分布式记账的一致性

POW机制的核心思想是通过引入分布式节点的算力竞争来保证数据一致性和共识的安全性,在比特币中,所有参与挖矿的节点都是在寻找一个随机数,要求这个随机数双HASH后的哈希值的前n个值等于前一个区块的规定值,n的值取决于前一个区块的难度系数。当挖矿节点找到符合要求的随机数后,该节点就能获得当前节点的记账权,获得一定数额的比特币作为奖励

? **当两个矿工节点同时找到一个符合要求的随机数时怎么办?**

当出现这种情况时,出现竞争的所有矿工节点会继续就之前挖到的区块继续进行工作量证明,等待下一个区块生成,选择长度最长的支链添加到主链

权益证明(proof of stake)

POW机制有一个很明显的缺点,大量算力资源被浪费在了无意义的计算上,为了解决POW的缺陷,以太坊提出了POS机制

POS机制本质上是采用权益证明替代POW的算力证明,在以太坊中,拥有以太币最多的节点挖矿难度最低

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYW9UvVl' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片