区块链究竟是如何工作的?
区块链技术可能是自互联网时代来临以来最好的发明。它在不需要信任和中央权威的情况下允许进行价值交换。来,让我们来想象一场打赌,我们在旧金山明天的天气上赌50美元。我打赌会是晴天,而你选择会下雨。现在,我们有三个选项来管理这笔交易:
- 我们可以选择互相信任。无论晴雨,输的人将给赢的人50美元。如果我们是朋友,这可能是一个很好的处理方式。然而,无论朋友还是陌生人,谁都不可能轻易付钱给谁。
- 我们可以选择把赌注变成合同。一旦签订了合同,双方都更容易履行付款义务。然而,如果输的人就是不履行付款义务的话,那么获胜者将不得不采取法律手段并花费额外的钱来支付法律费用,同时诉讼可能也会需要很高的时间成本。这看起来似乎不是管理交易的最佳方式,特别是对于少量现金的交易。
- 我们可以选择让中立的第三方介入。我们每个人给第三方50美元,第三方将把总数给获胜者。但是,也许她会带着我们所有的钱跑掉呢?至此,我们只能在前两个选项中进行选择:信任或合同。
但是,信任和合同都不是最佳解决方案:我们无法信任陌生人,而执行合同需要时间和金钱。区块链技术很有趣,因为它为我们提供了安全、快速、便宜的第三种解决方案。
区块链能够让我们写几行代码(一个运行在区块链上的程序)来让我们双方都将向它发送50美元。这个程序会保证这100美元的安全,同时在几个数据源上自动查询明天的天气。无论明天是晴天还是雨天,它都会自动将全部金额转给获胜者。每一方都可以在程序运行前检查它的契约逻辑,但是一旦它在区块链上运行,任何人就都无法更改或停止它了。对于50美元的小赌注来说,这可能是太大的精力投入了,但想象一下出售一所房子或一家公司时呢?
本文解释了区块链是如何工作的,但没有深入讨论技术细节,而是通过深入挖掘,让你大致了解底层逻辑和机制。
比特币的基础知识
图片由作者提供
区块链技术最广为人知和讨论最多的应用是比特币,这是一种可以用来交换产品和服务的数字货币,就像美元、欧元、人民币和其他国家货币一样。让我们从区块链技术的第一个应用程序入手,来了解它是如何工作。
“比特币让我们第一次能在互联网上给网络用户转移独一无二的数字资产,而且这种方式安全可靠,每个人都知道转账的发生,没有人会质疑它的合法性。这项成果(指比特币)的巨大突破,无论怎么夸赞都不为过。”
——马克•安德森
“一比特币”是比特币(BTC)数字货币的单一单位。就像美元一样,比特币本身没有价值;它之所以有价值,只是因为我们同意进行商品和服务交易,以使更多的货币处于我们的控制之下。
为了记录我们每个人拥有的比特币数量,区块链使用了分类账,这是一种跟踪所有比特币交易的数字文件。
图1 -比特币电子账本
分类帐文件不存储在中央实体服务器(如银行或单个数据中心)中。它通过一个同时进行存储数据和执行计算的私有计算机网络来分布在世界各地。每台计算机代表区块链网络的一个“节点”,并有一份总账文件的副本。
如果某天,David想给Sandra发送比特币,那么他会向网络发送一条消息,说他的账户里的比特币数量应该减少5个BTC,而Sandra的账户里的比特币数量应该增加5个BTC。网络中的每个节点都将接收到该交易消息,并将请求的事务应用到其分类帐副本中,从而更新帐户余额。
图2 -交易请求消息
分类帐是由一组相互连接的计算机来管理的,而不是像银行那样由一个集中的实体来管理,这一事实具有如下几点含义:
- 在我们的银行系统中,我们只知道自己的交易和账户余额;但是在区块链上,每个人都可以看到其他人的事务。
- 虽然你通常可以信任你的银行,但比特币网络是分布式的,如果出了问题,没有服务台可以呼叫,也没有任何人可以起诉。
- 区块链系统的设计不需要任何信任;它通过特殊的数学函数和代码来实现安全性和可靠性。
我们可以将区块链定义为一个系统,一个允许一组连接电脑来维护单个分类帐的更新和安全。然后呢,为了在区块链上进行交易,你需要一个“钱包”,一个允许你存储和交换比特币的程序。由于只有你才能使用你的比特币,所以每个钱包都由一种特殊的加密方法保护,这种保护方法将使用一对独特但相互连接的密钥:一个私有密钥和一个公共密钥。
如果消息使用特定的公钥加密,则只有拥有对应的私钥才能解密和读取消息。反过来也一样:如果使用私钥加密消息,那么也只能通过配对的公钥解密它。因此,当David想要执行一笔比特币交易时,他需要广播一条用他钱包的私钥加密的消息。由于David是唯一一个知道打开钱包所需的私钥的人,所以他是唯一一个可以使用这笔比特币的人。此外,网络中的每个节点都可以通过使用David钱包的公钥解密消息,来交叉检查事务请求是否来自David。
当你使用钱包的私钥加密交易请求时,将生成一个数字签名,区块链计算机将使用该数字签名来验证交易的来源和真实性。数字签名是由你的交易请求和你的私钥产生的文本字符串;因此,它不能用于其他事务。一旦你更改了交易请求消息中的单个字符,数字签名也将会更改,以保证没有潜在的攻击者可以更改你的交易请求或你发送的比特币数量。
图3 -简化数字签名交易加密
想要发送比特币,你需要证明你拥有一个特定钱包的私钥,因为你需要这个私钥来加密你的交易请求信息。由于你只能在消息加密后才能广播消息,所以你永远无无需透露你的私钥是什么。
跟踪钱包余额
区块链中的每个节点都保存着一份分类帐副本。那么,一个节点如何知道你的帐户余额呢?区块链系统根本不记录账户余额;它只记录每一笔经过验证和批准的交易。分类账实际上并不记录余额,它只记录比特币网络中广播的每一笔交易(如图4)。因此,为了确定你的钱包余额,你需要分析和验证连接到你钱包的整个网络中发生的所有交易。
图4 -区块链网络账本
这种“余额”验证是基于到以前事务的链接执行的。也就是说,如果要向John发送10个比特币,Mary必须生成一个交易请求,该请求包括之前传入的交易的链接,这些交易加起来至少有10个比特币。这些链接称为“输入”。网络中的节点将对金额进行验证,并确保这些投入还没有被花费。实际上,每次你在事务中引用输入时,它们都将被视为无效的。这一切都是在Mary的钱包里自动执行,并由比特币网络节点进行双重检查;她只不过是使用John的公钥向他的钱包发送了一个10 BTC的事务。
那么,系统是如何才能相信输入事务是有效的呢?是这样,它会检查所有的与你钱包相关的以前的交易,这些交易都是通过引用输入来执行的。为了加快验证过程,网络节点保留了未使用事务的特殊记录。多亏了这种安全检查,保证了比特币不可能被重复使用。
图5 -区块链交易信息结构
拥有比特币是什么意思呢?也就是说明,有些交易记录在分类账上,指向你的钱包地址,但还没有被用作输入。同时,所有在比特币网络上执行交易的代码都是开源的;这意味着任何有笔记本电脑和互联网连接的人都可以操作交易。然而,如果用于传播交易请求消息的代码出现错误,相关的比特币将永久丢失。
请注意,由于网络是分布式的,因此没有客服支持可以调用,也没有任何人能够帮助你恢复丢失的事务或忘记的钱包密码。因此,如果你对在比特币网络上进行交易感兴趣,那么最好使用开源的、官方版本的比特币钱包软件(如bitcoin Core),并将您钱包的密码或私钥存储在一个非常安全的存储库中。
区块链为什么叫区块链?它真的安全吗?
任何人都可以通过匿名连接(例如TOR网络或VPN网络)访问比特币网络,并提交或接收仅显示其公钥的交易。但是,如果某人反复使用相同的公钥,则可以将所有交易连接到同一所有者。比特币网络允许您生成任意数量的钱包,每个钱包都有自己的私钥和公钥。这样就可以在不同的钱包上接收付款,除非你将所有接收到的比特币发送到单个钱包,否则任何人都无法知道你究竟拥有哪些钱包的私钥。
比特币地址(Bitcoin addresses)的总数是
2^¹⁶⁰或1461501637330902918203684832716283019655932542976
上述引用中的数字意味着在允许每一个人都拥有钱包的同时,还可以保护网络免受部分可能的攻击。
不过即便是通过这种设置,仍然存在着一个很大的安全漏洞,在花掉比特币后,可以利用该漏洞来召回比特币。事务在网络中是从一个节点传递到另一个节点的,因此两个事务到达每个节点的顺序可以不同。攻击者可以发送交易,等待对方发送产品,然后将反向交易发送回自己的帐户。在这种情况下,某些节点可以在第一个交易之前接收到第二个交易,因此认为初始支付交易无效,交易输入将被标记为已花费。那我们要怎么才能知道先请求哪个交易呢?按时间戳订购交易是不安全的因为它很容易被伪造,这增加了比特币交易的安全风险。
如果发生这种情况,则网络节点之间在每个节点接收到的交易顺序上将存在分歧。因此,区块链系统已设计为使用节点协议来订购交易并防止上述欺诈行为。
比特币的网络订单交易通过其分组成块(Block) ; 每个区块都包含一定数量的交易以及到上一个区块的链接。这就是将一个块放在另一个块之后的原因。因此,将块组织成一个与时间相关的链(图6),该链为整个系统命名:区块链。
图6 -简化的区块链序列结构
同一区块中的事务被视为同时发生,而尚未在区块中的事务被视为未确认。每个节点都可以将事务分组为一个块,然后将其发布到网络,作为下一个块的划分参考。由于任何节点都可以建议一个新的块,系统如何来定义下一个块应该怎么划分呢?
要添加到区块链中,每个块都必须包含使用不可逆的密码哈希函数创建的复杂数学问题的答案。解决此类数学问题的唯一方法是猜测随机数,该随机数与先前的块内容结合可生成定义的结果。一台典型的计算机可能需要大约一年的时间才能猜出正确的数字。但是,由于网络中有大量正在猜测数字的计算机,因此平均每10分钟就会解决一个块。解决数学问题的节点获得将下一个块放置在链上并将其推到网络的权利。
如果两个节点同时解决问题并将块同时发送到网络怎么办?在这种情况下,两个块就都会被进行推送,并且每个节点都建立在它首先接收的块上。但是,区块链系统要求每个节点立即在可用的最长区块链上构建。因此,如果不清楚哪个块是最后一个块,则在解决下一个块时,每个节点将采用最长的链作为唯一选择。
图7 -链端模糊逻辑
由于同时解决区块的可能性低,几乎不可能一次又一次地解决多个区块,构建不同的“尾巴”,因此整个区块链可以快速稳定到每个节点都同意的单个字符串区块。
关于哪个区块代表链尾末端的争论,再次打开了对于区块链安全性的讨论。如果某个交易恰好位于属于较短尾部的区块中(如图7中的区块B),则在解决了下一个区块后,该交易以及该区块中的所有其他交易将回到未确认的交易中。
比特币区块链系统中的交易受到数字竞赛的保护:任何攻击者都在与整个网络竞争。
让我们看看Mary如何利用这种链末歧义来执行“双重攻击”(double-spending attack)的。Mary寄钱给John,John将产品寄给Mary。由于节点始终采用长链作为已确认的交易,因此,如果Mary可以生成包含相同反向引用的反向交易的长链,则John的资金和产品都将无法使用。
图8 -Mary攻击模型
系统如何防止此类欺诈?每个块都包含对前一个块的引用 (请参见图6)。为了将以下模块扩展到网络,就要解决一系列数学问题。由于要解决一个区块并将其放置在区块链上需要大量随机猜测,因此很难预先计算一系列区块。Mary正在与网络的其余部分竞争,使她能够将下一个区块放在链上。即使她先于其他人解决了问题,也不太可能连续解决两个、三个或更多的问题,因为每次她都需要与整个网络的计算来竞争。
有人可能会想,Mary可以使用超快速计算机生成足够的随机猜测值来与整个网络竞争来解决这个问题吗?是,这确实是有可能的。她在控制整个挽留过50%计算能力时,将可能有50%的机会在其他节点之前解决一个块,如果想要解决两个块,那概率就降低到了20%……要决绝的问题越多,成功的可能性就会越低。因此,即使使用非常非常快的计算机,由于网络中的用户数太过庞大,几乎不太可能在确切时间连续解决几个区块。
所以,我们可以看到随着时间的推移,交易变得越来越安全。例如,在一小时前确认的区块中包含的安全性比最近10分钟内确认的区块中的安全性高。由于平均平均每10分钟将一个区块添加到链中,因此一个小时前第一次包含在该区块中的交易很可能已被处理且其结果不可逆。
图9 -区块链交易安全
比特币挖矿
如果要发送比特币,那就需要有比特币转入到你自己的钱包中这样流程才能进行。这适用于网络上的每笔交易。那么,一开始的比特币是从哪里来的呢?
由于软件错误或钱包密码丢失都有可能造成比特币通货紧缩,因此每一个解决区块数学问题的节点都会获得奖励。为了获得这些比特币奖励而运行比特币区块链软件的活动称为“采矿”,这非常类似于开采黄金。
奖励是私人操作节点的主要动力,从而为处理交易和稳定区块链网络提供了必要的计算能力。
因为一台典型的计算机要花很长时间才能解决一个块 (平均大约一年),所以节点按组分在一起解决问题,这样可以大大提高效率,然后小组成员共享奖励的比特币。这些多个组一起解决问题的形式就称为采矿池。
其中一些采矿池非常大,占网络总计算能力的20%以上。就像上述Mary的那个攻击示例所示,这对网络安全具有明显的影响。即使这些池中的一个可能潜节点获得了50%的网络计算能力,时间越久,其中的交易就越安全。
但是,其中一些具有强大计算能力的矿池已决定限制其成员,以维护整体网络安全。由于技术创新和节点数量的增加,随着时间的流逝,整个网络的计算能力可能会增加,因此,区块链系统重新校准了求解下一个区块的数学难度,以使整个网络的平均目标时间为10分钟。这样可以确保网络的稳定性和整体安全性。
此外,每四年区块的挖矿奖励会减少一半,因此随着时间的推移,大家对于开采比特币(运行网络)的兴趣就减少了。因此,为了避免节点停止挖矿,系统允许每笔交易信息可以附带一点回馈金,节点便可以获得额外的利益。
由于这种机制,与较高奖励相关联的交易通常比与较低奖励相关联的交易处理得更快。这意味着,在发送交易时,你可以决定是想更快地处理(更昂贵)还是更便宜地处理(花费更多时间)。与银行收取的费用相比,目前比特币网络中的交易费用很少,并且与交易金额无关。
区块链的好处和挑战
在对区块链的工作原理有了一个大致的了解的基础上,让我们快速看一下为什么有那么多人都在关注它?
使用区块链技术具有的显著优势:
- 你可以全权控制自己的资产;没有任何第三方可以替你持有你的资产或限制你的访问;
- 不管你是从地球上的任何地方进行交易,它的成本都非常低,允许进行小额付款;
- 财产可以在几分钟内实现安全转移确认;
- 具有很高的透明度,任何人都可以随时验证在区块链上进行的每笔交易;
- 可以利用区块链技术来构建去中心化应用程序,这些应用程序可以快速安全地管理信息并转移价值。
但是,区块链目前也有一些挑战需要解决:
-
交易可以匿名发送和接收。这样既可以保护用户隐私,又可以允许网络上的非法活动。
尽管出现了许多交易平台,数字货币越来越流行,但是用比特币交易商品和服务仍然不容易; -
像许多其他加密货币一样,比特币非常不稳定:市场上没有太多的比特币,需求正在迅速变化。比特币价格不稳定,会受到加密货币行业的重大事件或政策发布的影响。
总体而言,区块链技术具有革新意义。在广告、能源分配等多个行业的有着待挖掘的潜力。其主要推力在于去中心化以及依赖性,受到了众多行业的关注。
原文链接:https://onezero.medium.com/how-does-the-blockchain-work-98c8cd01d2ae
目前,京东云区块链项目BDS已开源,同时还在招募开发者加入!点击【阅读】可了解详情
欢迎点击“京东云”了解更多精彩内容
以上信息来源于网络,由“京东云开发者社区”公众号编辑整理,
不代表京东云立场。