区块链 (英语:blockchain)是借由 密码学 与 共识机制 等技术建立,存储数据的 保证不可篡改和不可伪造的 分布式技术。
区块 就是将一批数据打包在一起,并且给打包出来的区块编号。第一个区块的编号是 1,第二个区块的编号是 2。按照编号连在一起就称为区块链。
每个区块都必须包含四个最基本的元素,上一个区块的散列值,若干条数据,一个调节数,本区块散列值。
散列值是通过散列函数生成的,散列函数是一种从任何一种数据中创建数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小。一旦数据有改变,散列值必然会改变。
其中 调节数 是需要计算的,一旦有 节点(可以暂时理解成家用电脑)计算出 调节数,就可以通过散列函数为 上一个区块的散列值、本区块的数据、当前算出的调节数 生成 散列值,然后将 上一个区块的散列值、本区块的数据、当前算出的调节数、散列值打包在一起形成一个区块,发送给网络中的其它节点。其它节点会验证 调节数 和 散列值 是否正确,如果认为正确就接收这个区块,继续算下一个区块。如果错误就拒绝接受。
验证调节数非常简单,计算出调节数则非常困难。所有其它节点能快速的验证调节数的正确性。
区块链 不可篡改 的原因是一旦区块被计算出来,那么区块的散列值就需要被用于下一次区块生成。假设现在如果有一个A节点,尝试改变之前区块2里面的数据,此时最新的区块7已经产生,那么A节点就需要自己单独重新计算区块2至区块7的所有区块,否则不会被接受。
如果A节点只重新计算区块2,则不会被其它节点接受,因为当前已经有一个更长的链在运行,节点只认最长的链。
另外一点,如果A节点修改了区块2的数据,那么区块2的散列值就变了,而生成区块3需要区块2的散列值,这样会导致A节点还需要重新计算区块3,区块4,区块5,区块6,区块7。但是此时还有其它节点也在一直计算区块8。大家计算的难度都是一样的,A节点想修改数据,就必须超过网络中的其它节点计算出一条更长的链,才会被接受。
下期预告 - 比特币的前世今生
阅读资料