本文同步在个人博客shymean.com上,欢迎关注
区块链和数字货币已经出来不少年头了,刻意一直没有去了解相关的概念和原理。
最近在看一本小说,里面有个设定提到:数字货币实际上更适合作为人工智能之间的交易系统。
随着2023年AIGC的爆发,这个设定貌似有点意思,因此我决定来熟悉一下区块链和数字货币相关的概念。
数字货币
区块链区块链最初是为了支持加密货币(比特币)而设计的,因此要了解区块链技术,需要先了解数字货币。
在最早期的人类社会中,贸易是以物易物的方式进行的,比如两斤果子换一只鸡。
随着物质和贸易发展,以物换物就比较麻烦了。比如现在A有两斤果子,B有一只鸡,C有一只鸭。A想要换鸡,但是B不想要果子,而是想要鸭子,C想要果子而不想要鸡,为了解决这个死循环,需要通过一种"中介"来替代商品进行交互,这就是"货币"的由来。
货币也经过了很多次的发展,从远古的贝壳到金属货币,再到纸币。不论货币是由哪种媒介来代表,都需要保证大家对货币价值的认可,也就是货币可以换到真实的商品。
实体货币存在丢失、假钞、找零等问题,如今电子支付非常流行,大家也很少在使用纸币,但电子货币本质上还是纸币,是由中央银行发行的,其价值也由中央银行这种有权威的信任机构来保证。
比如现在A向B转账100元,如果只是口头上说了一下,B显然是不能拿到这个"口头"上的100元去商店买到东西的。要达到这个转账的目的,需要从A账户上减少100元,B账号上增加100元,这个交易需要经过银行系统,依赖专业人员。这个时候,B去商店买东西,商店从B的账户上再划走相应的金额,也需要走银行系统。
在这个过程中,A、B和商店,都需要相信银行,不会篡改账户。
有没有一种在只需要交易双方就可以完成的、没有假钞、同时可以被使用该货币的其他人认可的交易系统呢?
数字货币就是这样的一个概念,旨在创建符合上述条件的交易系统。
点对点交易
没有中介的交易,可以成为交易双方的点对点交易。关于点对点这个名词,更常见的是出现在点对点网络中。
点对点网络(peer-to-peer, 简称P2P),又称对等式网络,是无中心服务器、依靠用户群(peers)交换信息的互联网体系,它的作用在于,减低以往网路传输中的节点,以降低资料遗失的风险。
点对点网络的一个重要的目标就是让所有的客户端都能提供资源,包括带宽,存储空间和计算能力。网络中的每个参与者(节点)在网络中对等,即具有相同的地位和功能,跟传统的客户端-服务端模型有很大区别。
那么,点对点交易又是怎么进行的呢?
在数字货币的交易中,交易的账户可以看做是一个特殊的银行卡,公钥就相当于银行卡号,而私钥相当于银行卡密码,这个银行卡的特殊之处在于一个密码对应一个卡号,因此不能修改密码,也就是不能忘记或者讲将钥暴露给别人。
回顾一下非对称加密,公钥和私钥都可以用来加密和互相解密,其中,
- 私钥的加密被称为签名,签名可以被公钥解密用于验证
- 公钥的加密被成为加密,加密后的数据可以被私钥解密,获得原始内容
在数字货币交易时,
- 首先,由交易发起方发出一个转账声明,这个声明的内容使用交易方自己的私钥进行了签名。
- 然后将交易内容、签名和交易方的公钥、以及一些交易手续费,通过广播发送到P2P网络的节点中,这样网络中的所有节点都可以用公钥和交易内容检查签名、验证账户余额等
- 基于某些机制,这笔交易验证通过之后,会被同步到所有节点,交易生效,交易方和接收方的余额也会被整个网络承认。
由于私钥只有交易方自己知道,
- 通过私钥签名,可以避免交易声明被其他人进行更改;
- 而只要签名验证通过,就可以认为转账完成,交易发起方也无法抵赖了
如果私钥忘记了,相当于账号就丢失了,里面的数字货币就再也找不回来了。
不可篡改的区块
区块(Block)是保存交易记录的基本数据结构单元,包含某些时间段内的交易信息,以及一些其他的元数据。
如何保证已经确认的交易记录不会被任何一个节点篡改呢?这就需要用到链表。
可以把每个区块想象成某个单链表中的一个节点,每个区块包含了
- 一定时间内的交易信息,
- 前一个区块的哈希值。
- 根据上两个内容生成自己的哈希值
回顾一下哈希算法,这是一种将任意长度的输入数据转换成固定长度哈希值(散列值)的算法,不同的输入数据应该生成不同的哈希值(即使是很微小的改动),同时从哈希值无法还原原始数据。
因此,如果该区块内容进行了修改,它的内容哈希值就会修改,这会影响后续的所有区块。
比如 A->B->C->D这个链路中,修改了B的内容,则B后面所有的区块(包括C、D)的哈希值都会被修改。
如果要伪造某个区块,就需要将后续所有的区块都进行伪造,这需要消耗大量的算力。
区块链非常强调区中心化,算力分散在单个节点上,伪造区块的成本非常高,因此这是很长难达到的,也就打到了交易信息"不可篡改"的目的。
创建新区块
上面提到,P2P网络中的所有交易信息,都保存在区块上面。那么,区块是由谁产生的呢?
P2P网络的节点都可以参与创建新区块,由于每创建一个新的区块,
- 会得到一笔数字货币的奖励
- 区块内保存的交易记录由在创建区块的时候由节点选择,为了保证交易打包进区块,这些交易往往会提供一些手续费
借助这个激励机制,有大量的节点会参与进入这个过程,这类节点被称为"矿工",他们在不停地进行计算,尝试生成新的区块。
具体来说,
-
矿工节点在收到广播过来的交易信息后,会放在自己的交易池里面,
-
每个区块可以保存的交易内容是有上限的,因此矿公共从交易池中选择一些尚未被确认的交易记录,(通常会选择交易手续费较高的那些交易
-
然后为这些交易构造一个候选区块,然后不断尝试计算这个区块的哈希(这个过程需要消耗大量的计算),直到计算出一个特定的哈希值,候选区块就被认为是有效的
-
新产生的区块被广播到全网,所有节点更新自己的账本到最新高度。交易正式被确认
-
其他正在计算中的节点会放弃自己的候选区块,转而计算下一块,本次候选区块里面被选择的交易记录,会回到交易池等待重新打包
为什么某个矿工节点创建出来的新区块,会被其他节点承认呢?
区块链网络通过共识机制,例如工作量证明(Proof of Work)或权益证明(Proof of Stake),确保在没有中心权威的情况下,节点对于数据的修改和添加达成共识。
工作量证明
现在来详细说明一下计算候选区块的过程:整个网络会设定一个动态的难度值,节点会根据区块内容,加上一个随机数nonce
,这样会生成一个随机的哈希值,如果这个哈希值符合某些特定的要求(比如哈希值前N位都是0
),同时随机数nonce小于设定的难度值,就认为得到结果了。
动态难度值的目的是保证区块的产出时间是固定的(大约是每10分钟产生一个),如果区块产生时间少于10分钟,说明全网算力增加,需要调大难度;大于10分钟则反之。
因此,算力值也代表了挖出新区块的概率,而挖出一个新区块则代表收获了数字货币
- 每产生一个新区块都可以获得数字货币(由于数字货币设定的发行数量上线,这个收益每四年减半,随着时间消逝会逐渐趋近0
- 区块内打包的每一笔交易记录,会得到一部分交易提供的手续费
上述的内容就是区块链的Proof of Work
机制。
从区块链的技术原理上,P2P节点、单纯根据区块内容生成哈希等机制,已经让数据很难被篡改了,为什么在生产新区块这里,还需要消耗如此多的算力,来根据符合条件的随机哈希找到一个随机数呢?
因为单纯只根据区块内容哈希无法实现这个目的,针对固定内容,算力越高的机器,肯定越容易、越迅速地生成哈希值,这样,就无法达到去中心化的目的。
因此,PoW机制是就是为了让单个节点即使有强大算力也难以完全控制区块链,一个有强大算力的节点,如果想要修改区块结果,就必须超过全网多数节点共同计算的成果速度,否则更慢的篡改链将被网络抛弃。
如果某个节点控制了区块链网络总算力的51%或以上,则事实上可以对区块内容进行修改或回滚。这被称为51%攻击
:
- 自行生成区块,并比正常速度快,称为"算力支配"。
- 生成一个区块,不将其公布出去,私下进行双重支出。
- 强行颠覆之前的某些交易,修改账本历史。
为了防止51%攻击,区块链系统在设计时非常强调去中心化,通过算力分散共享的模式,降低单个节点直接控制网络的可能。
这也是为什么会有新区块经济激励机制的原因:让大量节点参与进来,避免单个节点垄断算力。理论上,算力很低的节点,也是有可能更快地计算出新区块的哈希值,只是算力越大的机器概率越高而已。
资源浪费
读到这里,可以看出,工作量证明会浪费大量的资源
- 如果不考虑单节点控制网络,重复的随机数计算是纯粹的浪费,而计算出来的随机哈希值并没有其他任何作用(相比于去参与科学计算、数学计算等)
- 为了获取新区块产生的收益,大量高算力设备会投入进来进行计算,浪费大量的电力
- 算力增加,而区块的产生速度由于动态难度值的存在并不会改变,算力的投入只会增加单节点的收益概率,对整个网络而言没有任何意义,感觉就是"卷"
由于新区块激励机制,为了获取数字货币,有很多矿工节点会投入大量的硬件、电力资源来进行工作量证明,而得到的收益只有数字货币,并没有其他对社会有效的商品产出,这也是为什么国家会规定:"虚拟货币"、"挖矿"等属于落后产业。
此外,由于每个节点都保存完整的数据备份,而大多数的交易数据对自己而言都是没有意义的,重复保存这些数据感觉也是很冗余的。
小结
现在,大致了解了区块链技术的原理
- 首先通过区块记录点对点之间的交易记录
- 通过区块哈希避免节点数据被篡改
- 激励机制促使矿工节点有动力去创建新区块,通过工作量证明机制达成新区块共识,避免出现中心节点算力垄断
独立于现实世界的数字货币是没有任何价值的,同时网络中的数字货币还需要流通,才能产生新的交易记录,以及新的区块。
在这个过程中,数字货币是通过消耗显大量算力产出的,产出的数字货币是否具有这些算力的价值,每个人可能都有各自不同的看法。
抛开数字货币不谈,单看区块链技术本身,确实可以达到去中心化、透明的目的,在供应链、票据等其他领域也有一定的应用场景,这里就不展开了。