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

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

一、摘要算法

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


2.压缩

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

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

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

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

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

二、生成特别的摘要值

package main


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


func main() {
for i := 0; i < 100; i++ {
data := "test@example.com"+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的原理大致就是这样


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值