区块链之比特币篇(二)

区块
比特币的区块大小为1M。由区块头和该区块所包含的交易列表组成。区块头大小为80字节,其构成包括:
   4字节:版本号 ,记录本区块产生的时间。
  32字节:上一个区块的哈希值 ,用于追溯前一个区块;
  32字节:交易列表的Merkle根哈希值 ,包含本区块的所有交易和币基交易(给矿工的奖励);
   4字节:当前时间戳
   4字节:当前难度值
   4字节:随机数Nonce值 ,用于计算本区块的哈希值;
此80字节长度的区块头,即为比特币Pow算法的输入字符串。交易列表附加在区块头之后,其中第一笔交易为矿工获得奖励和手续费的特殊交易。

而平均每个交易至少是250字节,而且平均每个区块至少包含超过500个交易。
节点

每一个安装有比特币客户端软件并连接到比特币区块链的电脑就是比特币区块链的一个有效节点。
客户端

bitcoin.org可以下载标准客户端,即比特币核心,也叫“中本聪客户端”(satoshi client)。它包括了比特币系统的所有内容:钱包功能、整个交易账簿(区块链)的完整拷贝、交易确认引擎,P2P比特币网络中的一个完整网络节点。
完整节点

保有一份完整的、最新的区块链拷贝的节点被称为“完整节点”。完整节点能够独立自主地校验所有交易, 而不需借由任何外部参照。
轻量节点 / SPV节点

只保留了区块链的一部分,通过一种名为“简易支付验证(SPV)”的方式来完成交易验证的节点被称为“SPV节点”, 又叫“轻量节点”。越来越多的用户钱包都是SPV节点,尤其是运行于智能手机等资源受限设备上,这些设备没有空间存储完整的 150G 大小的区块链。
挖矿节点

挖矿节点通过运行在特殊硬件设备上的工作量证明算法,以相互竞争的方式创建新的区块。一些挖矿节点同时也是全节点,保有区块链的完整拷贝;还有一些参与矿池挖矿的节点是轻量级节点,它们必须依赖矿池服务器维护的全节点进行工作。
整合交易&构建新区块

验证交易后,每个比特币网络节点会将这些交易添加到自己的内存池中,内存池也称作交易池,用来暂存尚未被加入到区块的交易记录。而挖矿节点除了收集和验证交易以外,还会将这些交易打包到一个候选的区块中。
挖矿节点需要为内存池中的每笔交易分配一个优先级,并选择较高优先级的交易记录来构建候选区块,在区块被填满后,内存池中的剩余交易会成为下一个区块的候选交易。例如,一个挖矿节点从内存池中整合到了全部的交易,新的候选区块包含有418笔交易,总的矿工费为0.09094925个比特币。
现在既然创建好了一个包含418笔交易的候选区块,挖矿节点就准备拿它来挖矿。
交易优先级

挖矿节点需要为内存池中的每笔交易分配一个优先级,并选择较高优先级的交易记录来构建候选区块。交易的优先级是由交易输入所花费的UTXO的交易创建时间决定,交易输入值高且创建时间较早的交易比那些较新且输入值小的交易拥有更高的优先级。

区块中用来存储交易的前50K字节是保留给较高优先级交易的,如果区块中有足够的空间,高优先级的交易行为将不需要矿工费。矿工费越高,交易被处理的优先级也越高。
挖矿(PoW共识过程,俗称挖矿,每个节点称为矿工)

现在既然已经创建好了一个候选区块,挖矿节点就准备拿它来挖矿。矿工们争相完成一种基于加密哈希算法的数学难题,获胜者有权在区块链上进行交易记录并得到奖励。每 10 分钟左右生成一个不超过 1 MB 大小的新区块,这个区块记录了这 10 分钟内发生并验证过的交易内容。矿工们在挖矿过程中会得到两种类型的奖励:创建新区块的新币奖励,以及区块中所含交易的交易费。

一旦某一个挖矿节点在算力竞争中胜出,优先得到了数学难题的答案,会立刻将这个区块发给它的所有相邻节点,这些节点在接收并独立验证这个新区块后,也会继续传播此区块,每个节点都会将它作为新区块加到自身节点的区块链副本中。
工作量证明(Proof of Work)

比特币工作量证明的达成就是矿工计算出来的区块哈希值必须小于目标值。

比特币工作量证明的过程,就是通过不停的变换区块头(即尝试不同的nouce值)作为输入进行SHA256哈希运算,找出一个特定格式哈希值的过程(即要求有一定数量的前导0)。而要求的前导0的个数越多,代表难度越大。

工作量证明的过程:
我们可以把比特币矿工解这道工作量证明迷题的步骤大致归纳如下:
1、生成Coinbase交易(区块中的第一笔交易),并与其他所有准备打包进区块的交易组成交易列表,通过Merkle Tree算法生成Merkle Root Hash
2、把Merkle Root Hash及其他相关字段组装成区块头,将区块头的80字节数据(Block Header)作为工作量证明的输入
3、不停的变更区块头中的随机数即nonce的数值,并对每次变更后的的区块头做双重SHA256运算(即SHA256(SHA256(Block_Header))),将结果值与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。
Pow完成的区块向全网广播,其他节点将验证其是否符合规则,如果验证有效,其他节点将接收此区块,并附加在已有区块链之后。之后将进入下一轮挖矿。
时间戳

顾名思义,时间戳就是一个能表示一份数据在某个特定时间之前已经存在的、完整的、可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。

通过对以区块(block)形式存在的一组数据实施随机散列而加上时间戳,并将该随机散列进行广播,就像在新闻或世界性新闻组网络(Usenet)的发帖一样。显然,该时间戳能够证实特定数据必然于某特定时间是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强(reinforcing),这样就形成了一个链条(Chain)。”
在这里插入图片描述
时间戳服务器(也就是区块链中的节点)

时间戳服务器是一台可以提供精确的时间印戳,并可反签名的服务器。比如你在某时某刻向你的朋友转了一笔帐的同时将你的交易信息进行哈希后发给了时间戳服务器,请求时间戳服务器对该哈希后的交易反签名并加盖时间戳并对全网广播,表明该交易确实在某实某刻发生了,任何其它节点都无法对其进行篡改。因为这个时间戳是由时间戳服务器加盖的,它不受任何第三方节点的控制。一旦有节点试图篡改该交易,那么篡改交易上的时间与先前时间戳服务器所加盖的时间戳不一致。而且每个区块上还包含了上一笔交易的时间戳。整个区块链是一条记录了每笔交易所发生的时间链条,这样篡改交易记录非常困难,因为篡改交易的时间要和整个链条上的时间能够衔接对应起来。
共识机制

所谓的共识机制就相当于我们所说的投票,不同的共识机制相当于投票规则不同,例如:有的要过半数、有的要达到三分之二的票数。所有的节点都具备投票的权利,每次要出块的时候,所有的节点都会参与投票,按照不同的投票规则(共识机制)进行投票,从而选出一个节点,所有节点通过共识机制就达成了共识,本轮投票以选中的这个节点出的块为准,其他节点出的块就不作数了。
P2P网络(对等网络/点对点网络/端对端网络)

网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源、服务和内容的提供者(Server),又是资源、服务和内容的获取者。在P2P网络环境中,彼此连接的多台计算机之间都处于对等的地位,各台计算机有相同的功能,无主从之分,一台计算机既可作为服务器,设定共享资源供网络中其他计算机所使用,又可以作为工作站,整个网络一般来说不依赖专用的集中服务器,也没有专用的工作站。网络中的每一台计算机既能充当网络服务的请求者,又对其它计算机的请求做出响应,提供资源、服务和内容。通常这些资源和服务包括:信息的共享和交换、计算资源(如CPU计算能力共享)、存储共享(如缓存和磁盘空间的使用)、网络共享、打印机共享等。
NetWork 网络运行步骤如下:

1)新的交易被广播到所有节点。

2) 每个节点收集新的交易到块中。

3) 每个节点为当前块发现一个工作量证明。

4) 当一个节点发现一个工作量证明,则将这个工作量证明广播到所有节点。

5) 如果一个块包含的所有交易都是正常的,并且还没有出现过,则其他节点接受这个块。

6) 所有节点通过在下一个块中使用当前块的哈希值来表示对当前块的认可。
Reclaiming Disk Space 回收磁盘空间

一旦最新的交易中,一个货币被散列在足够多的块中,在他之前花费的交易可以丢弃以节省磁盘空间。为了不破坏块的哈希值,交易被哈希到Merkle Tree上,只有根节点包含在块哈希中。之前的块可以通过树枝的简化来进行压缩。内部的哈希值不需要被保存。
在这里插入图片描述
简化支付确认过程

不需要所有节点工作也可以确认支付。用户只需要保存最长工作量链上块的头部副本,这个确定的副本可以通过节点拿到,并且可以获得将该交易关联到块上的Merkle分支。他不能自己检查自己的交易,而是通过连接到链上的某个位置,他可以看到网络节点已经接受这笔交易,并且在块添加之后,再次确认网络已经接受这笔交易。
在这里插入图片描述
合并和拆分数据

尽管可以单独处理货币,在交易中分别转移每一分钱显得有些笨拙。为了能够进行合并和拆分,交易是复合输入和输出的。一般情况下,会出现一个来自之前的大额交易的单个输入或者多个小金额合并成的输入,并且有两个输出:一个是支付,一个是找零,零钱回退给发送者。
在这里插入图片描述
Privacy 隐私

传统的银行模型通过限制相关方和授信第三方的访问来达到一定水平的隐私。公开的交易是无法采用这种方式的,但是隐私仍然可以通过匿名公钥的方式将隐私信息存放在另外的地方。公众可以看到有人发送了一定金额给另外的人,但是没有将该交易关联到具体的人身上。这类似于股票交易的信息等级发布,个人交易的时间和交易量被公开,却不告知参与者到底是谁。
在这里插入图片描述
关于数字签名请看(http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html)
区块链在比特币中的应用

区块链技术为比特币系统解决了数字加密货币领域长期以来所必需面对的两个重要问题, 即双重支付问题和拜占庭将军问题。
双重支付问题又称为“双花”, 即利用货币的数字特性两次或多次使用“同一笔钱” 完成支付。 传统金融和货币体系中, 现金(法币) 因是物理实体, 能够自然地避免双重支付;其他数字形式的货币则需要可信的第三方中心机构(如银行) 来保证。区块链技术的贡献是在没有第三方机构的情况下, 通过分布式节点的验证和共识机制解决了去中心化系统的双重支付问题, 在信息传输的过程同时完成了价值转移。
拜占庭将军问题是分布式系统交互过程普遍面临的难题, 即在缺少可信任的中央节点的情况下, 分布式节点如何达成共识和建立互信。
区块链通过数字加密技术和分布式共识算法, 实现了在无需信任单个节点的情况下构建一个去中心化的可信任系统。

猜你喜欢

转载自blog.csdn.net/weixin_43783865/article/details/84430687