云社区 博客 博客详情
云社区 博客 博客详情

深入比特币原理(十)——比特币挖矿节点

Aaron 发表于 2018-03-05 10:38:02 03-05 10:38
Aaron 发表于 2018-03-05 10:38:02 2018/03/05
0
2

【摘要】 从本节开始进入到“挖矿”相关内容,我们将用几个章节的内容来详细描述比特币“挖矿”的技术原理。

从本节开始进入到“挖矿”相关内容,我们将用几个章节的内容来详细描述比特币“挖矿”的技术原理。
这里我用了引号,原因是挖矿这个词有一些误导,比特币“挖矿”的目的实际不在于挖掘出新的比特币,而是为了组建安全可靠的去中心化数字货币网络,创造新币仅是一种激励手段。

比特币挖矿的基本信息

比特币总量:约等于2100万(实际精确的是2,099,999,997,690,000聪,1亿聪=1比特币)

区块产生的时间间隔:平均约10分钟(注意这里是平均时间,实际出块时间有可能1秒,也有可能1小时)

每个区块可创造的比特币数量:最开始为50枚,每过210000个区块(约4年)数量减半,目前2018年的数量为12.5枚

什么时间开始不再产生新的比特币:约在2140年(算力的大量提升可能会提前挖完,后面工作量证明章节讨论)

独立交易验证(全节点)
当比特币客户端创造一笔新交易,即是创建了一笔交易输入与交易输出,然后客户端会向相邻节点广播交易内容,再由相邻节点向其他节点广播,不断扩散到整个比特币网络。

当节点收到一笔交易时,会先进行验证,验证成功才会进行转发,否则交易将被丢弃,保证无效交易不会在网络中被大量传播,验证内容如下:

  • 交易的语法与数据结构是否正确

  • 输入输出不能为空

  • 交易大小不能超过MAX_BLOCK_SIZE(块最大大小)

  • 输出值必须在允许的范围内(大于1聪(1亿分之一比特币),小于2100万)

  • 交易输入hash不能为0

  • nLockTime小于或等于INT_MAX。nLocktime与nSequence的值满足MedianTimePast(MedianTime是这个块的前面11个块按照block time排序后的中间时间)

  • 交易大小大于等于100字节

  • 交易中的签名数量(SIGOPS)小于签名操作数量上限

  • 解锁脚本(scriptSig)只能够将数字写入栈中,并且锁定脚本(scriptPubkey)必须要符合isStandard的格式(将会拒绝非标准交易)

  • 匹配交易在交易池或区块链中存在

  • 对于每一个输入,引用的交易输出如果在交易池中已经存在,交易将被拒绝(不允许双重支付)

  • 对于每一个输入,如果匹配的交易输出无法在交易池或区块链上找到,将交易放入孤立交易池(orphan pool)

  • 对于每一个输入,如果引用的交易输出是一个coinbase输出,该输入必须至少获得 COINBASE_MATURITY(100)个确认。

  • 对于每一个输入,引用的输出必须存在,并且没有被花费。

  • 使用引用的输出交易获得输入值,并检查每一个输入值和总值是否在规定值的范围内(小于2100万,大于0)

  • 交易输入总值必须小于引用的交易输出总值

  • 拒绝交易费过低(小于minRelayTxFee)的交易

  • 每一个输入的解锁脚本必须可以正确匹配相应输出的锁定脚本。

以上条件会随着比特币的发展会发生变化,可能会加入更多条件防止DOS攻击,也有可能放宽条件接受更多类型的交易。

打包交易到区块中

挖矿节点打包交易到区块中的步骤如下:

1.将验证通过的交易放入交易池中(通常在内存中,验证方法见上文)

2.打包交易池中的交易构建新候选区块(打包的交易总大小不能超过MAX_BLOCK_SIZE,比特币约为1MB,通常矿工会选择优先打包交易费高的交易

3.开始完成有效的工作量证明

4.如果在完成工作量证明前收到了其他节点广播的新区块,则放弃当前区块的工作量计算,将交易池中与新区块包含的相同交易去除,在剩余的交易中选择交易开始构建一下个区块


Coinbase交易

当每个节点打包交易到区块中时,会添加一笔特殊交易即为Coinbase交易,交易输出的地址为矿工的地址,交易输出比特币作为节点完成工作量证明挖出区块的奖励,其中包括新比特币(目前为12.5个)+区块中所有交易的交易费

Coinbase交易与普通交易的区别

以下截图来自比特币信息网站https://blockchain.info,例如块高度510972中的coinbase交易信息如下:

33w.png

从blockchain.info中看到coinbase交易没有交易输入,实际上coinbase交易的交易输入部分仍然是存在的,只是没有解锁脚本等信息,coinbase交易输入格式如下:

43w.png

Transaction Hash:均以32个字节的0表示,coinbase没有引用的交易输出

Output Index:字段均为0xFFFFFFFF,此处没有意义

Coinbase Data Size:取代Unlocking Script Size

Coinbase Data:取代Unlocking Script,大小在2-100字节,从块版本v2开始必须在开头包含块高度,之后的信息可任意定制(如中本聪在创世区块中的定制内容“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”)

Coinbase Data中常见的信息

Extra nonce:在比特币区块链章节中我们讨论了区块的信息,矿工通过变动nonce值来达成工作量证明要求的结果,但是区块头中的nonce仅为4个字节,随着工作量证明难度越来越高,4个字节开始不够用了,于是矿工可以在coinbase data中添加8个字节的extra nonce来增加可计算的空间

矿池信息:不同矿池挖出的区块通常会添加矿池的信息,如“Mined by AntPool”表示该块由AntPool所挖。

支持的特性:在比特币改进协议(BIP)中会对比特币客户端添加一些新功能,如挖矿节点在coinbase data中添加“2f503253482f”,即表示/P2SH/,支持BIP-16的改进建议中的P2SH交易。


登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 2
点赞
分享文章到微博
分享文章到朋友圈

评论 (0)


0/1000
评论

登录后可评论,请 登录注册

评论

您没有权限执行当前操作

温馨提示

您确认删除评论吗?

确定
取消
温馨提示

您确认删除评论吗?

删除操作无法恢复,请谨慎操作。

确定
取消
温馨提示

您确认删除博客吗?

确定
取消

确认删除

您确认删除博客吗?

确认删除

您确认删除评论吗?

温馨提示

登录超时或用户已下线,请重新登录!!!

确定
取消