前段时间看了一个web3的视频, 对区块链有了兴趣, 想了解一下这是什么内容, 底层原理等. 看了一段时间的材料, 用这篇文章总结一下目前的看法. 推荐课程: 北京大学肖臻老师《区块链技术与应用》公开课, 这个课程感觉是目前对比特币技术原理讲的最清楚的一门课了.
Web3是什么
回顾互联网的发展历史, 可以这样来进行划分:
- 门户网站, 这时用户看到的信息是由门户网站的编辑来维护, 每个人看到的信息都是一样的, 信息的维护由专门的人来进行维护. 信息的所有权在门户网站.
- 互联网, 这时发展出来各种网络分享平台, 用户上传信息到平台上, 与其他人进行分享. 这里的信息由用户自己创造, 发布. 但是信息的所有权并不在用户手里, 而是在平台方.
- 基于区块链的信息共享平台, 由于区块链是一个公用的信息存储介质, 所以用户自己拥有数据的所有权.
区块链是什么
区块链是一个数据结构, 与链表相似
这里使用比特币的头节点结构来解释区块链的运行原理. 在头节点里存储了以下几个字段:
- previous_block_hash (存储了上一个区块链的哈希值, 从而可以构成链表)
- version (当前节点协议的版本)
- nonce (随机数)
- timestamp (生成这个节点的时间)
- difficulty (生成这个节点的难度)
- merkle_root (对body内容构建merkle tree后根节点的值)
Body中可以根据我们的实际应用场景存储一些不同的内容
在这里并没有存储当前Block的ID, 我们需要根据header中的内容进行哈希计算后得到.
curBlockId= f(header)
一个节点的生成规则是: 对当前节点的头部信息做哈希后得到的值能满足某个值(这个值由difficulty决定)
用公式表达为: hash(header) < N
这里的nonce就是在其他信息都固定的情况下来调整最终结果的字段.
这里还有一个可以修改的值为: merkle_root.
在body中我们可以接受很多个消息, 将消息取哈希后, 再相邻的两两节点取哈希, 最终得到ROOT节点, 将这个值存储到header中.
market tree
在比特币的链中,数据结构分为head和body。body存储交易信息,head中存储了由body中交易信息构建的market tree头节点 在轻节点中不需要存储交易信息,但当交易发生后进行验证时,需要转账方提供交易的信息,然后轻节点计算出哈希表后向其他全节点获取交易链路上其他节点的哈希值,向上计算后得到一个根哈希值,验证与链中的头节点是否一致,如何一致则说明交易已被写入到链中
难度值和随机数的意义
我们使用哈希函数来计算当前Block的ID, 难度值是限制哈希函数得到的结果必须有difficulty个0开头. 其中由于version, preId, timestamp, difficulty, body hash的值都是固定的, 所以我们需要改变nonce从而改变哈希值的结果, 达到以N个0开头的结果
为什么说区块链是不可逆的
- 哈希值
- 去中心化 由于哈希计算对微小的改动也会得到不一样的结果, 所以当我们对某个Block中的body进行修改后, body hash就会被改变, body hash被改变后, curId也会被改变, 从而切断了关联关系 并且由于区块链是去中心化的, 我们即便通过修改nonce完成了计算, 使得curId符合规范, 但是这个时间其他节点可能也已经完成了下一个节点的计算, 由于区块链的最长原则, 大家都只认最长节点不承认你修改过后的节点
权益激励
区块链这样的数据结构, 产生下一个区块要消耗算力去计算, 我们为什么要去干这个事情呢, 我们把需要记录的信息发送出去让其他人给我记录不就好了吗? 白嫖不香吗? 为了激励大家来进行计算产生区块, 都会给一定的权益来激励用户.
比特币对区块链的应用
中本聪在2008年发布了比特币的白皮书: 《Bitcoin: A Peer-to-Peer Electronic Cash System》 bitcoin bitcoin_zh 文中详细说明了如何使用区块链来进行记账, 从而将比特币作为一种电子货币. Block的body中进行记账 比特币会对产生Block的人进行激励, 奖励比特币
挖矿是什么
将计算nonce的过程叫做挖坑
矿池是什么
我们假设nonce的范围是0-99, 那么如果单机运算, 我们的电脑需要计算100次才能得到正确结果, 假如我们有100台计算机, 我们将计算任务分发到这100台计算机上, 那么每台计算机只需要计算1次就能得到结果. 矿池就是将大家的算力集中起来进行计算, 完成计算后按照某种规则再进行分成.
比特币如何进行初始化的或者说是如何发展起来的
我们去看比特币的创世链就可以看出, 第一个块中只有一个交易信息, 就是在计算完成后, 中本聪向某个地址转了50个比特币. 在后续的块中,交易信息上很少甚至没有的,这时的挖矿难度也比较低
比特币的稀缺性
比特币的发行只有出块奖励一种方式,并且出块奖励会每隔一段时间进行减半.
比特币的匿名性
比特币的内部交易是无法追踪到实体世界中的个人,但可以通过转账关系来确定某些账户的关联关系 如果需要将比特币进行提现,那么必然需要与实体世界进行关联,这时就可能被关联到个人信息