了解区块链

比特币白皮书
以太坊白皮书

1991年区块链由一组研究人员开始使用,最开始的目的是为了给数字文档做时间戳,所以不能回溯和篡改,起到公正的作用。
2009年作为比特币的底层基础技术被公众所熟知。
区块链是一个分布式的账簿,对每个人公开。当一些信息记录在区块链中时,很难去修改。
一个块 = data + hash + hash of previous block

  1. data 依赖于区块链的类型,例如比特币保存的是详细的交易信息,例如,发送者,接收者,交易数量
  2. 每个块都有一个 hash 值,类似指纹,用来唯一标识一个块和内容的。一旦块的内容有一点点的变动,hash 值都会不同。
  3. 第三部分是前一个块的 hash 值,这样就构成了一条区块链

hash 算法使用sha-256算法。再用 RSA 对 hash 值做签名。

一条区块链的第一个块的第三部分是0,因为他没有前面的块。

举例:
现在有1,2,3个区块组成的区块链。如果2被修改,那么3的前块hash值就会和2的 hash 值不同。

问题1. 现在电脑速度很快,如果把2后面的所有块的 hash 值都修改了呢?
解决方法:区块链引入了 proof-of-work 机制,就是减慢创建新区块的速度,比特币大约需要10分钟计算出新区块,来加入区块链。
这个机制使篡改更加困难,因为要计算所有后面的区块。

结论:区块链的安全性在于:hash 和 proof-of-work 机制,还有一个就是分布式。

区块链采用点对点网络连接,任何人都可以加入,当一个新用户加入时,会复制一份完整的区块链。一个节点可以利用这个特性来验证是否一切正常。
当一个新的区块被创建时,会发给网络上的所有节点,每个节点验证新的区块,验证通过后加入到自己的区块链中,网络中所有的节点都保持一致。被篡改的区块会被网络中其他的节点拒绝。

所以要成功篡改一个区块,需要篡改所有链上块,为每个块重新计算 proof-of-work ,控制超过50%的节点,这样才会让其他的节点认可被篡改过的区块链。看起来基本上不太可能做到。

区块链仍然在持续改进,目前出现了“智能合约”,这些合约是存储在区块链中的简单程序,可以在某些条件下自动完成交易

区块链解决的一致性问题:

  1. 如何同步
  2. 防止篡改
  3. 同一笔交易重复使用

将新制作的区块所包含的内容(前一块的hash+新块基本信息+新块所包含的所有交易记录)组成一个字符串
生成一个随机数添加到尾部组成新的字符串
计算sha-256值,并且前72位的值都是0才算通过。这里72是目前的位数,会随着时间而调整难度。

如果同时产生两个新区块,那么同时保留,在矿工制作下一个新区块的时候,只能基于一个区块制作。然后保留最长的那个区块。短的被抛弃掉。
没有保存主链中的交易都是待确认交易。

智能合约

“智能合约”一词第一次使用是在1997年,想要使用一个分布式账簿存储合约,是数字化的现实世界的合约,是存储在区块链中的一小块计算机程序。

举例说明:
一个项目在众筹平台筹集资金,筹集人希望达到目标金额后拿到资金,投资人希望达到目标后资金能够给筹集人使用,并且如果筹集失败能够拿回投资金额。
这里的众筹平台必须是可信任的。

现在使用智能合约来完成上面的事情。发起一份智能合约,投资人的钱都转到自能合约中,程序会在达到目标金额后自动转账给筹集人,如果失败就自动返回给投资人。这一过程不需要第三方。同时基于区块链的安全保障。

以太坊就是针对智能合约而创建的。使用一种特殊的语言 Solidity 来实现智能合约,语法类似于javascript