共计 1625 个字符,预计需要花费 5 分钟才能阅读完成。
什么是区块链,为什么数据不可被篡改
一提到区块链,首先想到的就是比特币。确实比特币是第一个区块链项目,也是最成功的项目,目前的价格是 60428¥/btc。想想当初用 10000 个比特币买了 2 个披萨的程序员 Laszlo,估计怎么也想不到比特币能涨到如此之高(毕竟眼光有多远,就只能赚多少钱)。那么到底什么是区块链呢?为什么区块链上的交易不可被篡改呢?
区块链: 我们可以从字面上对这个词语进行拆分,“区块”和“链”。区块链就是由区块线性连接而成的链。
数据不可篡改: 这个是由密码学、哈希函数、矿工算力等保障的
一、区块链
先上一个区块链的结构图
1. 什么是区块
区块主要是由区块头和区块体构成:
区块头:里面包含了一些基本信息,比如版本号、父区块头的哈希、默克尔树根哈希、时间戳、挖矿难度、随机数。
区块体:主要就是打包的交易,这些交易是资产的拥有者使用私钥签名的数据,代表了资产从哪里转移到哪里。最特殊的一笔交易是由旷工自己写上去的,它的金额是对矿工的奖励加上所有交易者支付的手续费。这笔交易称为币基交易(Coinbase Transaction),比特币就是通过对矿工的奖励来发行货币的。
2. 什么是链
每个区块的头包含了父区块的头的哈希,就这样逐个链接下去,就形成了区块链。
实际上这就是区块链的本质了,但这只是从数据方面看,那么数据的可靠性又是怎么保证的?
二、数据不可篡改
1. 一笔交易不可被篡改
当我们发送一笔交易到区块链节点的时候,节点会验证这个交易的签名,如果签名不对那么数据是会被丢弃的,只有持有私钥匙的人才可以修改这笔交易,其他人是修改不了的,这个问题是由密码学解决的。在比特币中使用的是椭圆曲线算法来对交易进行签名。
任何一个交易的修改都将导致区块体的变化
2. 区块体不可被篡改
区块体中是一笔一笔的交易,这些交易通过默克尔树组织起来,如果其中任何一笔交易被修改,都会造成默克尔树根哈希的变化,这个问题是由哈希函数解决的。在比特币中使用的是 sha256 算法
区块体的变化将导致区块头的变化
3. 区块头不可被篡改
前面两个问题都是由不可解的数学难题来保证的,区块头的不可修改是由算力保证的,这就是矿工需要干的事情。那么区块头是怎么保证不可被修改的呢?
全世界所有的矿工都会计算区块头的哈希,但是计算出来的哈希要求前面有 n 个 0。如果区块的头信息不变,那么计算出来的哈希也都是一样的。前面我们说过,区块头中包含一个 nonce,矿工就是通过修改 nonce 以此来找到满足要求的哈希(这个过程被称为挖矿)。在比特币的世界中,这个问题需要全世界的矿工计算十分钟左右才能找到一个满足要求的 nonce。所以单凭个人要想修改一个区块是完全不可能的。
矿工一旦计算出来这个 nonce,就会将这个区块广播给其他节点,这些节点对区块中的数据进行验证,如果验证通过,就会停止此区块的挖矿,将此区块广播给其他的节点,并开始争夺下一个区块的记账权
区块头的变化将导致区块链的变化
4. 区块链不可被篡改
从前面三步可知,如果一个人修改了区块中的交易数据,默克尔树的根哈希会发生变化,接着区块头会发生变化,这个时候区块的随机数(nonce)将变得不合法,需要重新挖矿。假设某个组织拥有大量的计算机,并重新挖出了这个随机数(nonce)。但这又会导致此区块头的哈希发生变化,子区块的区块头中记录了父区块头的哈希,这样,子区块头也发生了变化,子区块的随机数(nonce)也变得不合法了,又需要重新挖子区块的随机数(nonce)。如此下去,将造成连锁反应,任何修改都将造成数据坍塌,需要重新挖矿。在比特币中,如果一笔交易后面被添加了六个区块,那么这笔交易可以认为,将永远不可能被修改。(除非全世界所有的矿机都否认先前的交易,重新开始挖矿)
最后
至此,区块链的存储结构和数据不可篡改就讲解完了,在这个模型当中还存在很多问题需要解决,比如 UTXO 经济模型、为什么比特币只有 2100 万个、什么是钱包、什么是挖矿。这些问题等后面再给大家讲解