我知道当块头的散列(block hash)低于难度目标时,一个块就被认为是有效的。
但由于我以前从未运行过比特币节点(很快就会运行),因此我对挖掘过程有一些问题。
1) 矿工在运行BTC软件时,默认情况下是根据最高费用确认mem池中的交易,还是允许他们选择可以验证的交易?
2) 如果您有更高的哈希率,这是否意味着您可以更快地验证事务?
3) 当一个块平均每10分钟验证一次时(如BTC协议所设置的),矿工们是否也在尝试验证事务?
4) 如何验证事务?
交易
比特币核心
块链
内存池
分享
改进这个问题
跟随
4月22日0:02问
路标
1111青铜徽章
添加评论
1个答案
0
矿工可以选择他们希望包含在块中的任何事务,只要它们是有效的,但这样做可能需要他们使用自定义软件。据我所知,比特币核心软件首先选择支付费用最高的交易。
否。哈希率由不执行事务验证的专用硬件(ASIC)确定。硬件对事务的验证没有帮助,因为将信息传输到此硬件所需的时间比在CPU上简单地执行哈希运算所需的时间更长。不管怎样,验证事务的大部分时间都花在了签名验证上,而asic没有这样做(尽管有可能为此目的构建一个签名验证)。
挖掘asic主要比在CPU上挖掘效率更高,因为它们多次对相同的数据执行哈希算法,在内部只为每次哈希尝试更新一个随机数并重新计算merkle根。
矿工验证所有来自网络的交易,就像其他网络参与者一样。他们的比特币节点将在mempool中保存传入的事务,挖掘软件将定期请求块模板,其中包含要包含在块中的所有事务。在挖掘池中,pool操作符创建块模板,矿工从该模板开始工作,并且验证自己是可选的。
这是一个相当复杂的主题,因为事务的每个方面都需要验证,而整个细节不是在文档中定义的,而是由参考实现(satoshi客户机/比特币核心)定义的。
关键细节包括:
事务的所有输入都被检查为未使用
输出金额之和小于输入金额之和(差额为交易费用)。
对于每个事务输入,来自该输入的scriptSig被推送到堆栈上,然后来自其匹配事务输出点的scriptPubKey用该堆栈求值。脚本的计算结果必须为true,事务才能有效。scriptSig通常包含一个公钥和一个签名,scriptPubKey通常执行一个OP\u CHECKSIG,它测试整个事务的SHA-256是否由与公钥匹配的私钥签名(这本身就非常微妙,因为在对事务进行签名或验证之前,必须去掉签名)。
对于交易的验证,有许多更为精细的细节,这些细节主要在这里的现有问题中得到解答,在比特币wiki或BIPs中进行了解释。
分享
改进这个答案
跟随
编辑时间:6月16日11:10
社区♦
1
19年4月22日6:22回复
标记H
296522金徽章44银徽章1212铜徽章
添加评论