链结构与工作量证明7️⃣:用 Go 实现比特币的核心机制
链结构与工作量证明:用 Go 实现比特币的核心机制
如果你用 Go 写过区块、算过哈希,也大致理解了非对称加密、数据序列化这些“硬核知识”,那么恭喜你,现在我们终于可以把这些拼成一条完整的“区块链”。
不过别急,这一节我们重点搞懂两件事:
-
区块之间是怎么连接成“链”的?
-
“工作量证明”到底证明了什么?
听上去高深,其实搞明白之后,会觉得这俩东西——还挺朴素的。
一、链结构:不是链子,是合同
想象你在租房,每签一份合同,房东都要你把上份合同复印件附在后面,这样一页连着一页,谁也不能偷偷改内容。要是改了前面的合同,后面那一页马上就不对劲。
区块链的链结构也是这个逻辑:
-
每个区块,都包含前一个区块的哈希值;
-
区块的哈希值,是根据它的内容 + 上一个区块的哈希值一起算出来的;
-
改了某个区块的内容,就会导致它的哈希变化,后面所有区块都要跟着改,麻烦得很。
这么做的目的就是:让“篡改历史”变得极其困难。
二、Go 语言写一个链
我们来定义一个区块结构体:
type Block struct {Timestamp int64Data []bytePrevHash []byteHash []byteNonce int