区块链原理

以下是的区块链学习笔记

区块链和比特币关系

比特币的原理是区块链,但是区块链技术可以做更多事情,比如智能合约还有什么呢。

为什么叫区块链

如下图,一个区块,它关联着上一个区块的Block hash值,这个值是作为一个区块链协议头的一部分,然后当前区块最后计算出的Block hash也会被用在下一个区块,那么靠这个Block hash关联成一条链。叫区块链也就是生动形象,理所当然了。

数据区块

weread_image_32591353069582

为什么说是去中心化

区块链本质是一个对等网络的分布式账本数据库。交易去中心化,或者说多中心化。网络挖矿节点有重量级节点,它保存着区块链这条链的完整数据,也有轻量级节点,保存部分数据。比特币的交易数据达到数十个G,并且一直增长,里面的交易记录都是公开透明的。每一个重量级节点都保存完整的数据,就没有一个中心的概念了。而是多中心,或者说无中心的一个网络结构。

什么是挖矿

上图可以看出,交易1,比如a转账给b一个比特币。那么这就是一条交易记录。计算hash1 等等每个计算知道Merkle的根hash计算出来,其实这一步很简单,问题是目标哈希值计算是很困难的。当矿机计算出来这个符合共识算法的目标hash的时候,就代表了计算的矿机获得了记账权。这个区块也就封装完成了,也就是矿机挖到矿了,这个链子又长了一截。

为什么交易无法更改

交易无法更改是基于数学hash算法的逆向解难度几乎不可能的基础上。hash算法可以把任意长度的内容hash产生一个256位的值。当然用这个256位的值去推算原文,是几乎不可能的。基于这个数学基础,如果我们比特币对目标哈希有一定要求,比如要十个0开头,那在想要算出这个十个0开头的hash,就必须更改原文,其他交易是不能更改的,只能更改区块头的随机值,并且只能用穷举法来计算。这个过程是需要很大的计算力。并且区块链头部还有一个难度值。一旦好不容易计算出来了,想要更改交易,就等于你要重新计算hash,并且自己拉一个分支,这个分支的计算速度要超过全网的算力,因为主链一直在伸长。你要超过主链,才能取代主链。这就是不可能了。

什么是区块链难度值

在计算目标hash,计算完后放入区块头部。这个hash可能有时候要求十八个0开头也有可能10个零开头,那么哪个难度更高呢?当然是十八个0难度大。而这个难度值是根据前面的2016个区块决定的。

新难度值 = 旧难度值 * ( 过去2016个区块花费时长 / 20160 分钟 )

这个20160是按照每10分钟产生一个区块来定的。所以当全网矿机增加的后,计算会变快,但是后面会难度值增加。维持在无论多少个矿机,都是每十分钟产生一个区块的速度。

也就是说平均十分钟收到一个确认。

挖矿的人怎么赚钱

在进行工作量证明之前(就是计算目标哈希),记账节点要做一些准备工作

  • 收集广播中还没有被记录账本的原始交易信息
  • 检查每个交易信息中付款地址有没有足够的余额
  • 验证交易是否有正确的签名
  • 把验证通过的交易信息进行打包记录
  • 添加一个奖励交易:比如给自己的地址增加12.5比特币

在这个过程,只要挖矿者计算出了目标哈希,他就得到了奖励,而其实除了这个奖励还有交易费的收益。我们在进行比特币交易的时候,你交易的手续费越高,被拿去写入区块的优先级就越高。你的交易就约快完成。

如果两台矿机同时计算出区块怎么办

这就代表链条出现分叉,这个分叉并不会马上被抛弃。假设出现a分叉,b分叉。网络矿机节点有的是收到了a节点的广播,把最新节点更新到a节点。有部分收到的是b分叉的广播,把b更新为最新节点末端然后进行工作。总会有一个分叉先结算出新的更长的,比如a+1。它广播之后,更长的就会把b给取代了。

从上图看出,一个区块结算多少笔交易

https://btc.com/stats/pool/BTCC 这个是区块链浏览器。从这个可以看出,每个区块的交易数量是不定的,平均在2500笔交易。每笔交易的大小不一定。并且可以看到除了系统奖励还有部分交易费用的奖励。

为什么交易所比特币交易只要几秒而不是十分钟

比特币交易所是中心化的,只有在提币的时候才需要十分钟。

为什么六个确认之后就确定不会被更改

虽然有同时挖出两个区块的可能,但是再分叉,直到当前交易后面再挂五个区块,基本就可以确定这个是在主链上,不可能被更改了。当落后六个块,来追赶交易,这个计算量将会是一个天文数字,因为前面知道,计算一个区块链的目标哈希就已经很难了。这个浪费的资源是非常不划算的。

用户双花问题

从上一个六个确认就可以知道,经过六个确认后,用户的余额就能被确认是减少了。第二次花费就会被变成无效交易。