主页 > 华为手机安装imtoken > 详细的比特币挖矿算法
详细的比特币挖矿算法
在计算机世界中,有一类人痴迷于技术研究,在业界被称为极客。 每次新技术出现,都会看到他们废寝忘食。 比特币的出现也不例外。 当矿工们在思考如何挖出更多的比特币时,极客们关心的是比特币挖矿的算法。 今天我们就来看看吧。
基本数据
总发行量:2100万。
新块生成周期:10分钟左右。
挖矿难度调整周期:每2016个区块一次,约2周。
挖矿奖励:比特币挖矿奖励来自两部分:
创世区块奖励50个比特币,每21万个区块减半,即每4年调整一次。 目前已经经历了两次减半,目前挖矿奖励为12.5个比特币。
比特币的每一笔交易都必须向矿工支付一定的手续费。 该设置是为了防止恶意节点发送大量垃圾交易对比特币网络进行DOS攻击。
挖矿算法
挖矿参考算法:挖矿算法为SHA256。 在挖矿过程中,矿工对比特币80字节的区块头数据进行两次SHA256运算,运算结果为256位(32字节)的字符串。 通过与当前难度值比较来判断当前区块是否合法。 即满足以下条件:
SHA256(SHA256(block_header))<难度
如果不满足以上条件,则需要更改区块头中的随机值,或者用随机数据填充coinbase交易,这样就可以通过更改区块头中的数据来找到满足条件的区块。 这就是 PoW 机制的本质。 使用单向函数,迫使矿工不断尝试随机数来寻找符合条件的区块,以完成一定量的计算,确保系统的安全和稳定。
案例分析
为了更深入地了解比特币的挖矿算法比特币算法,以一个实际的区块数据为例。
先获取块号为100000的块的原始数据,获取地址:
获取的数据为16进制比特币算法,前80字节为区块头数据。 对数据的前80字节进行两次SHA256运算,得到当前区块的哈希值。 Go语言代码如下:
包主
进口 (
“加密/sha256”
“编码/十六进制”
“调频”
)
const HashSize = 32
输入 Hash [32]byte
func (hash Hash) String() 字符串 {
因为我:= 0; 我 < 哈希大小/2; 我++ {
hash[i], hash[HashSize-1-i] = hash[HashSize-1-i], 哈希[i]
}
返回 hex.EncodeToString(hash[:])
}
功能主要(){
块,_ := 十六进制。 解码字符串(“”)
first := sha256.Sum256(block[:80]) // 选择区块的前80字节,即区块头数据,进行第一次哈希运算
second := sha256.Sum256(first[:]) //继续对第一个结果进行hash得到第二个结果,也就是区块的hash值
fmt.Printf("blockheader 是: \n%x\n", block[:80])
fmt.Printf("doublehash 是:\n%v\n", Hash(second))
}12345678910111213141516171819202122232425
运行结果为:
区块头是:
0100000050120119172a610421a6c3011dd330d9df07b63616c2cc1f1cd00200000000006657a9252aacd5c0b2940996ecff952228c3067cc38d4885efb5a4ac4247e9f337221b4d4c86041b0f2b5710
双哈希是:
000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e5061234
可以发现经过两次SHA256运算得到的结果就是区块哈希。
所谓“挖矿”,本质上是用计算机解决一个复杂的数学问题,以保证比特币网络分布式记账系统的一致性。 比特币网络自动调整数学题的难度,使整个网络大约每 10 分钟得到一个合格的答案。 然后比特币网络会产生一定数量的比特币作为赏金奖励那些得到答案的人。
用大量的人力、物力、资源去解决一个复杂的数学问题,在数学上是没有意义的,是无意义的计算。 因此,也难怪马斯克日前公开表示:“我不接触证券和加密货币,只投资我自己的公司。” 我一开始对比特币是持否定态度的,所以区块链这个概念出来之后,一直到现在都没有太大的兴趣去了解它。
以上就是微风小编今天为大家带来的比特币挖矿算法内容。 虽然我们不能要求所有精通计算机的人都像极客一样钻研计算机技术,但偶尔了解一下他们的生活也无妨。 当然,如果IT行业的人真的像极客一样,或许人工智能的时代会更早到来。