比特币两个疑问:挖矿和转账

       比特币在挖矿的时候,需要尝试区块头的随机数,直到整个区块头的哈希小于某个难度值时,这个区块就可以提交到p2p网络上。在阅读比特币原理时有一个疑问,比如有A、B两台挖矿机,A先尝试出下一个区块的哈希值,为什么A在往外传播时,B不会直接用这个nonce值,作为自己挖出的。然后传播呢?在阅读btcd的源码时,了解到即使A、B打包的交易都一样,B也不能采用A挖矿中尝试出的nonce值,因为打包的交易中有一个coinbase交易。这个coinbase交易中有一个公钥,挖矿的奖励即发送到这个公钥。A和B的公钥不一样,所以决定了A和B打包交易的merkeroot是不一样的,区块头中包含了这个merkeroot成员,所以A和B打包的的区块头是不一样的。决定了A尝试的nonce值,对于B是无用的,所以B会立马传播后,进行下一个区块的传播。

  另一个疑问是比如有一个交易A发往B,客户把改交易广播到网络,矿池进行打包,我的疑问是,为什么矿池不会把这个交易直接转给自己呢?阅读btcd源码指导。比特币的交易主要分两个部分,一个交易输入,一个交易输出,交易输出中即有B的公钥。交易输入是一个比特币的栈脚本,脚本验证成功,这个就是一笔合法的交易,脚本中有A的私钥对交易输出的加密,如果修改交易输出,这个脚本就会验证失败。所以矿池不可能直接把交易直接转给自己。

posted on 2018-06-02 15:22  xgcode  阅读(282)  评论(0编辑  收藏  举报