写点什么

区块链之共识算法系列——PoW(一)

用户头像
Regan Yue
关注
发布于: 56 分钟前
区块链之共识算法系列——PoW(一)

区块链之共识算法系列——PoW(一)

一、前言

说到区块链我们先要了解什么是 P2P,这个 P2P 不是金融方面的名词,而是指对等网络。在中本聪的白皮书中提出了像微信支付、支付宝这样的需要经过第三方的点对点支付系统是没有任何意义的。


而我们的 P2P,就是这样一个不需要经过第三方的概念,其之所以会出现的一个重要原因就是避免有第三方和中心。


在 P2P 对等网络中所有的节点功能都是一样的,没有哪一个节点是特殊的,他们之间互相提供服务。


因为没有第三方,没有中心,所以保证了数据的透明、自由、平等。


我们常听说的比特币就是使用 PoW 共识算法的。PoW 是 Proof-of-Work 的简称,即工作量证明。就是计算一个数值,使得和数据合并后的值满足要求后,就马上广播全网打包区块,全网的节点收到广播之后,就会验证其正确性。如果节点有作弊行为,那么就不会通过验证,这个打包的区块会被丢弃,无法记录到账本,挖矿成本这么高,如果作弊导致区块被丢弃,比特币也拿不到了,岂不是还得亏本。所以矿工都愿意遵守比特币系统的共识协议。

二、PoW 代码实现

我们先定义区块的结构体:


type Block struct {  //上一个区块的哈希值  PreHash string  //当前区块的哈希值  HashCode string  //时间戳  TimeStamp string  //难度系数  Diff int  //交易信息  Data string  //区块高度  Index int  //随机值  Nonce int}
复制代码


根据比特币,我们将这个区块的信息设置为以下几点:上一个区块的哈希值、当前区块的哈希值、时间戳、难度系数、交易信息、区块高度、随机值。


然后我们来建立一个创世区块。


//创世区块func GneFirBlock(data string) Block {  //创建第一个区块  var firstblock Block  firstblock.PreHash = ""  firstblock.TimeStamp = time.Now().String()  firstblock.Diff = 3  firstblock.Index = 1  firstblock.Nonce = 0  //通过sha256计算哈希值  firstblock.HashCode =GneHashValue(firstblock)  return firstblock}
复制代码


因为是第一个区块,所以前一个区块是为空,时间戳我们使用现在的时间,难度我们暂时设置为 3,因为是第一个区块,所以区块高度为 1,随机值可以随便搞一个,我们就用 0 吧。然后我们得计算当前区块的 hash 值,我们要使用 sha256 来计算,下面的内容我们下一期再说吧~敬请期待!

用户头像

Regan Yue

关注

还未添加个人签名 2020.08.12 加入

对Go、Python、网络安全、区块链感兴趣. · 华为云云享专家 · 掘金资讯创作者

评论

发布
暂无评论
区块链之共识算法系列——PoW(一)