区块链pow算法讲解-程序员傻瓜版

按自己的理解写一下pow,适合程序员理解,简化了部分概念

一、摘要算法

首先要知道什么是摘要算法,摘要算法一般分两步,1.切分填充 

区块链pow算法讲解-程序员傻瓜版_第1张图片

2.压缩

把刚才得到的值进行压缩,压缩函数细节不写了,需要记住几个概念:

a.摘要算法不可逆,不能得到原文

b.摘要算法为了保护原文一般会在原文后面适当添加一些字符串,这个过程叫加盐

c.摘要算法有坍塌特性,少量对原文的改动,会导致摘要的值有很大变化

d.不同的原文产生的摘要值一般会不同,有非常小的概率不同的原文会产生同一个摘要,这个叫碰撞

二、生成特别的摘要值

package main


import (
    "crypto/sha256"
    "fmt"
    "strings"
 )


func main() {
for i := 0; i < 100; i++ {
data := "[email protected]"+string(i)
        c := getSha256Code(data)
        index := strings.Index(c, "0")
        if index == 0{
         fmt.Println(c,i)
         break;
        }
    }
}
  
func getSha256Code(s string) string {
    h := sha256.New()
    h.Write([]byte(s))
    data := h.Sum(nil)
    hex :=fmt.Sprintf("%x", data)
    return hex

}


打印值:

069896a4318eca6ef060f14db5b967d5dab38233d6e9ca2a3d8bdaf3a8c88398 28

当i为28时,生成了一个以0开头的摘要,假设我们指定需要六个0开头的摘要值,这时需要计算机计算十分钟,这个计算时间的长短,就是你计算机的算力,算力强的计算机,会最先计算出这个摘要值,pow算法就会采用这个值作为最新的区块摘要。

三、摘要链

   上一次hash值+本次区块内容+随机数 生成的hash值,就是最新区块的hash值,这些hash值形成的链条就是摘要链,pow的原理大致就是这样


你可能感兴趣的:(区块链pow算法讲解-程序员傻瓜版)