比特币--挖矿过程

参考文章

比特币区块链数据结构

2. 交易和交易验证

2.1 交易的报文格式

2.1 验证交易

在收到交易后,每一个节点都会在全网广播前对这些交易进行校验,并以接收时的相应顺序,为有效的新交易建立一个池(交易池)。
每一个节点在校验每一笔交易时,都需要对照一个长长的标准列表:

	交易的语法和数据结构必须正确。
	输入与输出列表都不能为空。
	交易的字节大小是小于MAX_BLOCK_SIZE的。
	每一个输出值,以及总量,必须在规定值的范围内 (小于2,100万个币,大于0)。
	没有哈希等于0,N等于-1的输入(coinbase交易不应当被中继)。
	nLockTime是小于或等于INT_MAX的。
	交易的字节大小是大于或等于100的。
	交易中的签名数量应小于签名操作数量上限。
	解锁脚本(Sig)只能够将数字压入栈中,并且锁定脚本(Pubkey)必须要符合isStandard的格式 (该格式将会拒绝非标准交易)。
	池中或位于主分支区块中的一个匹配交易必须是存在的。
	对于每一个输入,如果引用的输出存在于池中任何的交易,该交易将被拒绝。
	对于每一个输入,在主分支和交易池中寻找引用的输出交易。如果输出交易缺少任何一个输入,该交易将成为一个孤立的交易。如果与其匹配的交易还没有出现在池中,那么将被加入到孤立交易池中。
	对于每一个输入,如果引用的输出交易是一个coinbase输出,该输入必须至少获得COINBASE_MATURITY (100)个确认。
	对于每一个输入,引用的输出是必须存在的,并且没有被花费。
	使用引用的输出交易获得输入值,并检查每一个输入值和总值是否在规定值的范围内 (小于2100万个币,大于0)。
	如果输入值的总和小于输出值的总和,交易将被中止。
	如果交易费用太低以至于无法进入一个空的区块,交易将被拒绝。
	每一个输入的解锁脚本必须依据相应输出的锁定脚本来验证。

3. 构造候选区块-打包交易

a). 验证交易后,比特币节点将交易添加到自己的交易池中,用来暂存尚未被加入到区块的交易记录
b). 比特币节点为交易池中的每笔交易分配一个优先级,并选择较高优先级的交易记录来构建候选区块
优先级从高到低: 创币交易(区块创建奖励交易) > 高优先级交易 > 按矿工费排序的交易 > 不含矿工费的交易

c). 创币交易+高优先级交易 == 50K
d). 区块被填满后,剩余交易继续留在交易池

//区块结构
一个区块将主要包括如下内容:
	4 字节的区块大小信息;
	80 字节的区块头信息:
	版本号:4 字节;
	上一个区块头的 SHA256 hash 值:链接到一个合法的块上,32 字节;
	包含的所有验证过的交易的(Merkle)树根的哈希值,32 字节;
	时间戳:4 字节;
	难度指标:4 字节;
	Nonce:4 字节,PoW 问题的答案;
	交易个数计数器:1~9 字节;
	所有交易的具体内容,可变长

区块头部结构

4. 挖掘-找到一个让区块有效的随机数

4.1 挖矿算法

挖矿节点不断重复进行尝试,直到它找到的随机调整数使得产生的哈希值低于某个特定的目标
挖矿的过程即是找到x的值: SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
• block的版本 version
• 上一个block的hash值: prev_hash
• 需要写入的交易记录的hash树(梅克尔树)的值: merkle_root
• 更新时间: ntime
• 当前难度: nbits (据此可算出TARGET)
• x, 值0~2^32

4.2 如何确定当前难度-nbits

为什么需要调整

比特币区块平均10分钟生成一个,是比特币的心跳时间,必须几十年内保持恒定。但是随着挖矿人数的不断变化,必须动态调整难度以调整产出时间。

如何调整

调整由每个完整节点独立自动完成,每2016个区块(2周)调整一次,调整公式是由最新2,016个区块的花费时长与20,160分钟比较得出的。
为了防止难度的变化过快,每个周期的调整幅度必须小于一个因子(值为4)。如果要调整的幅度大于4倍,则按4倍调整。

5. 成功构建区块-挖掘成功

a). 挖矿节点一旦完成计算,立刻将这个区块发给它的所有相邻节点。
b). 其它节点在接收并验证这个新区块后,加入自身区块链中,并放弃正在计算的高度相同的区块,立即开始计算下一个区块
c). 继续传播此区块。

6. 区块链组装和选择-广播冲突

区块链维护3种区块
a). 连接到主链上的
b). 主链上产生分支的(备用链) 比特币总是选择最长的链,所以分支链的情况会在再下一个块被找到时解决
c). 已知链中没有找到已知父区块的 之后收到父区块时会被取出链接上



posted @ 2017-10-14 15:20  Desneo  阅读(616)  评论(0编辑  收藏  举报