主页 > 苹果手机下载imtoken钱包流程 > 《掌握比特币》——知笔墨

《掌握比特币》——知笔墨

交易比特币网络区块链默克尔树

Merkle树用于汇总一个区块中的所有交易,同时生成整个交易集的数字指纹,为验证区块中是否存在某笔交易提供了一种高效的方式。

- 生成一棵完整的 Merkle 树需要对哈希节点对进行递归哈希,并将新生成的哈希节点插入到 Merkle 树中,直到只剩下一个哈希节点,即 Merkle 树的根节点。 SHA256算法在比特币的Merkle树中使用了两次,所以它的密码哈希算法也被称为double-SHA256。

- 当N个数据元素被加密并插入到Merkle树中时,你可以通过最多计算2*log2(N)次来检查树中是否有任何数据元素,这使得数据结构非常高效。 (为了证明区块中存在特定交易,节点只需要计算log2(N)个32字节的哈希值,就可以形成从特定交易到树根的认证路径或Merkle路径。 )

- Merkle 树和简单支付验证 (SPV):减少数据传输

挖矿与共识 去中心化独立验证共识交易 挖矿节点将交易集成到区块 交易区块年龄、矿工费和优先级

表 8-1。 “正常”交易输入的结构

长度字段说明

32 字节交易哈希指向包含要花费的 UTXO 的交易

4字节交易输出索引 交易中的UTXO索引,0从0开始计数

1-9 bytes unlock script length 解锁脚本的长度

(VarInt) 变长 Unlocking-Script UTXO锁定脚本中用于解锁条件的脚本

4字节序号TX替换功能当前未启用,设置为0xFFFFFFFF

表 8-2 生成交易输入的结构

长度字段说明

32字节交易哈希不引用任何交易,值为全0

4字节交易输出索引值全为1

1-9 字节 Coinbase 数据长度 coinbase 数据长度

(VarInt) v2版本区块中的变长Coinbase数据,除了需要以区块高度开始,其他数据可以任意填写,用于额外的nonce和挖矿标签

4字节序号值全为1描述比特币的工作机制,0xFFFFFFFF

构建区块头

表 8-3 块头结构

长度字段说明

4字节version版本号,用于跟踪软件或协议升级

32 bytes 前一个区块哈希链中前一个区块(父区块)的哈希值

32字节的默克尔树根是一个哈希值,表示本区块所有交易组成的默克尔树的根

从 Unix 纪元到当前秒的 4 字节时间戳描述比特币的工作机制,用于记录块生成的时刻

4 字节难度目标 该块的工作量证明算法难度目标

4 bytesNonce 工作量证明算法的计数器

Proof Of Work Difficulty 表示难度目标和难度调整 挖矿成功后立即扩散验证新区块

▷ 块数据结构在语法上是有效的

▷ 区块头的哈希值小于目标难度(确认包含足够的工作量证明)

▷ 区块时间戳比验证时间早两个小时(允许时间误差)

▷ 块大小在长度限制内

▷ 第一笔交易(而且只有第一笔)是 coinbase 交易

▷ 使用清单来验证区块内的交易并确保其有效性

▷ 此清单已在“交易的独立验证”部分进行了讨论。

区块链组装与选型 区块链分叉挖矿与算力比拼

下表显示了比特币网络开始运行后前五年的总算力:

2009

0.5 MH/s–8 MH/s(增加 16 倍)

2010

8 MH/s – 116 GH/s(增加 14,500 倍)

2011年

16 GH/s – 9 TH/s(增加 562 倍)

2012

9 TH/s–23 TH/s(增加 2.5 倍)

2013

23 TH/秒–10 PH/秒(增加 450 倍)

2014

10 PH/秒 – 150 PH/秒直到 8 月(增加 15 倍)

随机价值提升方案

算力增加,难度增加,会导致随机数不足(所有随机数都试过了,还是得不到满足难度的hash)

随机数提升扩展方案的推导:

- Nonce 随机数

- Nonce + 时间戳延迟(空间有限,移动太远会导致区块失效)

- Nonce + coinbase脚本变更(coinbase脚本可以存储2-100字节的数据,其变更会导致merkle树的根值发生变化,导致区块头发生变化,随机区域扩大)

如果矿工以后想尝试更多的可能性,也可以通过修改时间戳来解决。 此外,在 coinbase 脚本中有更多的额外空间用于将来扩展随机数。

矿池:乐趣、共享统计数据、工作量证明设计

让我们回到骰子游戏的类比。 如果骰子玩家的目标是掷小于 4(整体网络难度),矿池可以通过计算池中玩家掷的次数小于 8 来设置一个更容易的目标。当池中玩家掷得更少时比 8(池份额目标),他们得到了他们的份额,但他们没有赢得比赛,因为他们没有完成游戏目标(少于 4)。 但是池中的玩家将更频繁地达到更容易的池份额目标,定期获得他们的份额,即使他们没有完成赢得比赛的更难目标。

时不时地,池中的成员可能会投出小于 4 的值,并且池中的成员获胜。 然后可以根据池中玩家获得的份额分配收益。 虽然目标为 8 分或更少并不能赢得比赛,但它是衡量玩家投出多少分的公平衡量标准,偶尔会产生低于 4 分的结果。

同理,矿池也会设置矿池的难度,保证单个矿工能够频繁的找到满足矿池难度的区块头哈希来分得份额。 时不时地,尝试会产生一个符合比特币网络目标的标头哈希,产生一个有效的块,然后矿池获胜。

托管矿池

矿工使用 Stratum (STM) 或 GetBlockTemplate (GBT) 等挖矿协议连接到矿池服务器

STM 和 GBT 协议都创建包含候选块头模板的块模板。 矿池服务器通过聚合交易、添加 coinbase 交易(以及用于随机值的额外空间)、计算 MERKLE 根并连接到前一个区块哈希来构建候选区块。 这个候选块的头部作为模板分发给每个矿工。 矿工使用该区块模板以低于比特币网络的难度进行挖矿,并将成功的结果返回矿池服务器获得份额。

P2P矿池

P2Pool 是一个没有中央管理器的点对点矿池。

P2Pool 通过分散矿池服务器的功能,实现了一个类似区块链的并行系统,称为共享链。

本质上,分享链不是使用矿池服务器来记录矿工的分享和奖励,而是让所有矿工通过类似于比特币区块链系统的去中心化共识机制来跟踪所有分享。

共识攻击山寨币和山寨链的分类

下面列出了这些山寨币和比特币之间的三个主要区别:

▷ 不同的货币策略

▷ 基于工作量证明的不同共识机制

▷ 一些特殊功能,比如更强的匿名性等。

多用途挖矿创新:Primecoin、Curecoin、Gridcoin 以匿名为中心的山寨币:CryptoNote、Bytecoin、Monero、Zerocash/Zerocoin、Darkcoin 非货币竞争性区块链 Namecoin