主页 > imtoken钱包如何下载 > 比特币挖矿算法到底是什么?
比特币挖矿算法到底是什么?
需要以下参数
1.区块的版本
2. 上一个区块的哈希值:prev_hash
3、需要写入的交易记录的哈希树的值:merkle_root
4.更新时间:ntime
5.当前难度:nbits
挖矿的过程是找到 x 使得
SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
上式中x的取值范围为0~2^32,TARGET可以根据当前难度计算。 除了x,你也可以尝试改变merkle_root和ntime。 由于hash的特性,要找到这样一个x只能通过brute force search来完成。
找到 x 后,您可以广播一个新块,其他客户端将验证您的块是否有效。 如果你的区块被接受了,由于每个区块的第一笔交易一定是将新生成的25个比特币发送到一个地址,当然你会把这个地址设置为你拥有的地址,从而得到这25个比特币。
比特币从开始到现在的每一笔交易记录都存储在网络上,整个比特币网络维护着一个巨大的交易记录文件(现在大约12G)。 该文件的平均更新周期为 10 分钟。 新增加的交易记录称为一个区块,这个庞大的文件是由一系列的区块组成的,称为区块链。
为什么是 25 个比特币?
这是规则。 最初是50个比特币,每产生剩余比特币的一半,这个收益就会减半,这样最终能产生的比特币总量接近2100万。 如果你还声称自己挖了50个比特币,其他客户端是不会接受的,这个区块就白挖了。
如何保证平均更新周期为10分钟?
TARGET 越小,求解 x 就越困难。 每产生2016个区块(约14天),网络会根据这段时间产生新区块的平均间隔调整TARGET。
真的是计算最快的人总是最先解决的吗?
不。 你总是想把挖矿收益据为己有,所以大家在计算的时候,发送挖矿收益的地址是不一样的比特币算出来几个答案了,所以merkle_root是不一样的,也就是说每个人都是从不同的初始状态开始求解的。
如何同时解决?
区块链会出现分叉,有的客户端接受A,有的客户端接受B,直到某个分支变长,大家都会选择这个更长的分支。 如果你挖的不幸没有被选中,你的挖矿收益将无效。
既然选择了更长的分支,那么难度很低怎么办呢?
客户端在众多分支中找到满足当前难度的最长分支。
这些计算是不是浪费了?
如果你打算两次花同样的钱,你需要这样做。 一个新的块被挖掘,但隐藏而不是广播,并继续挖掘。 找到商家A比特币算出来几个答案了,支付比特币,让网络上的其他人挖到区块,写下这条交易记录。 找到商家B,支付比特币,写入你挖到的区块。 如果你能先挖出两个区块,然后广播出去,大家就把你较长的分支作为当前区块链,商家A收到的比特币就不会被认可。 像这样成功攻击的概率取决于你计算哈希的速度。 如果整个网络的算力足够高,这样的攻击要么成功率极低,要么成本极高。