星火燎原2015
2019-06-11 21:50
貌似计算hash的函数没写完整
//注意int转string不能这样:string(b.Index) + string(b.TimeStamp) blockData := strconv.Itoa(int(b.Index))+strconv.Itoa(int(b.TimeStamp))+b.PreBlockHash fmt.Println(blockData)
这是因为老师的int转string语句写错了,
string(b.Index) + string(b.TimeStamp)
上面这条语句每次输出都是同一个乱码符号,因此Index和TimeStamp在计算哈希值的时候根本没有起到作用,而创世区块其他的值都是固定的,所以每次算出来的哈希值都是一样的。
func CalculateHash(b Block) string { blockData := string(b.Index) + string(b.Timestamp) + b.PreBlockHash + b.Data hashInBytes := sha256.Sum256([]byte(blockData)) return hex.EncodeToString(hashInBytes[:]) }
每次的时间Timestamp都不一样呀,为什么生成的第0个blockhash都一样的~
传入的数据是一致的,那么hash出来的结果就不会变。
这就是hash运算的确定性 看下2-4节就明白了
同一个数据hash后的结果是确定的
用GO语言构建自己的区块链
21961 学习 · 38 问题
相似问题