区块链原理详解:探索区块链技术如何实现去中心化价值传播
如果互联网允许信息自由传播,那么区块链就能在互联网上传播价值。说区块链是一场革命可能有点夸张,但至少在信息技术的基础上,区块链让价值变得可见。在值得信赖的去中心化价值系统中传播。
我们先用一句话来描述什么是区块链:区块链建立了一个网络,每个节点的地位都是平等的。节点之间无需事先信任,它使用加密算法和共识机制以及区块链的结构。数据存储使得数字资产能够在节点(节点是指加入网络的计算设备)之间转移。本质上可以说是一个分布式的价值传输系统。
图1 中心化网络
什么是对等网络?正如很多区块链文章提到的,它是点对点的去中心化。相反,它是一个中心化网络。图1是一个集中式网络。内容或交易数据需要通过中心化进行处理。用户在中央系统中拥有账户,数据在中央系统的两个账户之间传输。大多数传统网络系统都是集中式的。账户和数据存储在中央服务器上,然后通过客户端App查看数据。
对于去中心化的利弊不做过多分析,因为它的使用可以在实际的行业应用中找到。例如,在某个行业,我们不希望一家公司控制所有数据和资产。如果一家公司占据主导地位,就会增加行业风险;比如,我们总担心从一些商户购买的优惠卡,会导致商户破产或者跑路后造成经济损失。通过区块链技术,以上问题都可以得到解决。前一个问题可以通过类似于比特币的区块链来解决,后一个问题可以通过类似于以太坊的智能合约区块链来解决。因此,我们往往希望构建一个节点地位平等的去中心化网络。
图2 点对点P2P网络
我们了解区块链的去中心化特性,但是对等用户节点之间是如何通信的呢? P2P(点对点)技术可以解决这个问题。 P2P技术早年广泛应用于下载软件,如BT下载。节点既下载又上传数据,实现网络中各节点数据的逐步同步。通过P2P,用户可以直接交换信息,并且在比特币网络中,交易数据可以同步。图 2 是一个点对点的去中心化系统,其中数据在节点之间直接交换。
一个节点地位平等的P2P网络已经建立,但仔细想想,利用这样的网络进行价值传输似乎存在很多问题。
图3 全账本
如图3所示,每个节点完整记录交易数据并通过P2P网络进行同步。需要全程记录,否则只能依赖别人的记录。然而,某些节点可能在某些时候离线,或者某些交易数据记录可能不正确。经过长期的积累,就会很难同步,就会出现问题。以哪个节点为准?这也是类似的。我们希望P2P网络具有容错能力,保证信息传输的一致性,在零信任的基础上实现节点间的共识。区块链的区块链存储结构解决了上述问题。
图4 短期账本
首先,分为固定的时间段,所有节点记录该时间段内的账本。以比特币网络为例,交易信息会通过P2P网络广播到所有在线节点,在线节点会记录大约十分钟的交易记录,如图4所示。当然,即使是十分钟分钟账本,图3中的节点可能不在线。别着急,我们一起来看看吧。
图5 竞争核算
线上节点每十分钟打包一次交易信息,需要争夺记账权。赢得记账权的节点就是这次,其他所有节点都必须以它的账户为基础。如何争取会计权?在比特币中,它是工作量证明(PoW 算法)。工作量证明是如何实施的?如图5所示,节点都在自己的账本上进行哈希计算。当然,如果账本的内容保持不变,则每次计算的哈希值(十六进制字符串)不会改变,所以需要在账本中插入一个随机数,每次计算该随机数的哈希值修改直到计算出的哈希值小于预设阈值。图5中的f(x)假设为哈希计算,参数为账本和随机变量。需要反复尝试求f(x)
图6 打包短期账本
图 6. 第一个计算的节点开始打包这十分钟的账本。包里有账本、随机数等,当然,其他节点此时还在努力计算,因为他们不知道有一个节点已经计算过了。 。
图7 同步块
图 7. 键入后的包称为块。该节点立即将区块同步到其他节点。其他节点收到该区块后,立即停止手头的工作量证明计算,并验证该区块。正确性。例如工作量证明是否有效、每笔交易是否正确等。
图8 区块加入链
图8. 验证通过后,大家都会以这十分钟的交易信息为标准将区块添加到链上,即所有历史区块按照时间顺序串联起来。验证失败怎么办?当然,丢弃它继续计算,其他节点自然会打包出正确的区块。另外,如果有交易记录由于某种原因没有包含在当前区块中怎么办?没问题,只要交易内容已经广播到其他节点,它也会在下一个时间段被打包到区块中。
工作量证明似乎有点浪费资源,为什么不固定节点来打包区块呢?因为这样可以防止恶意攻击和节点故障,提高了整个网络的容错性和安全性。
图9 非对称加密
区块链结构清晰,但仍存在问题。十分钟账户里的每一笔交易如何保证正确?这里就要提到非对称加密算法。如图9所示,所谓非对称加密,是指加密和解密需要两个不同的密钥。图中以密钥为例。事实上,在计算机中,它们是两个不同的密码字符。细绳。如果使用其中一个密钥加密,则必须使用该对中的另一个密钥对其进行解密。因此,一个称为私钥,由用户自己保存,另一个称为公钥,可以公开给网络上的其他节点。有什么用呢?除了图9中的加密之外,还可以进行签名。
图10 广播交易内容和签名
签名如图10所示。例如,节点A首先计算出一笔交易内容的哈希值字符串,然后使用私钥将哈希值加密为签名(如图中密封的字母所示,为实际上也是计算机中的一个字符串))。节点A将交易内容连同签名一起发送给其他节点。其他节点收到后,使用A的公钥解密签名,得到加密前的哈希值。他们比较交易内容的哈希值,如果一致,说明交易内容确实是节点A发送的,没有被其他人篡改过。
图11:互锁且不可篡改
还有一个问题,如何保证历史区块不被修改?首先,由于链式存储的特点,以哈希值为索引,每个区块都包含前一个区块的哈希值,区块之间是相互关联的。如图11所示,如果97号区块的内容发生变化,其哈希值也会发生变化。 98号区块填充的97号区块的哈希值也会相应改变。如果98号发生变化,就会发生连锁反应。所有后续块都必须更改。这种修改很难进行,因为新的区块一直在生成,而节点之间的同步是基于最长链的。那么有人可能会想,我是不是可以只修改其中一个区块,就可以一次性构造出一条长链呢?抱歉,由于 PoW 工作量证明机制的存在,这很难做到。每次生成区块时,都必须将该时间段内的全网交易+随机数进行碰撞,产生小于阈值的哈希值,才能生成区块。在这种机制下,被其他节点识别的区块无法随意生成长链。根据理论计算,只有拥有全节点算力51%以上的节点才有可能具备这种能力。
以上是Aren第一次探讨区块链的基本原理。经过多年的发展,区块链已经从比特币发展到智能合约,其技术含量也越来越深厚。有很多值得学习的内容。请等待后续更新。更多内容请关注公众号“阿仁的商业愿景”。