区块链技术背后的运行逻辑

链客 · · 2479 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。
图片描述

区块链技术可能是自互联网技术以来最伟大的发明。区块链可以在不需要有中央权威机构的情况下或不需要双方信任的情况下交换价值或财富。想像一下你和我要赌明天旧金山的天气,赌50美元。我赌明天出太阳,你赌明天会下雨。今天,我们会有三种方式来管理我们之间的赌约:

1、我们可以相信对方。无论下雨还是出太阳,输的一方都会给赢的一方50美元。如果我们是朋友,这种管理方式很好。不过,无论是朋友还是陌生人,总会有人赖账的。

2、我们可以将赌约写下来形成合同。签订合同,双方履行最后赌约就有了保障,然而,如果输掉的一方不愿意付钱的话,赢的一方还要花额外的费用来打官司等等,这可能要花很长时间。尤其是对于小额现金,这可能不是最好的交易管理方式。

3、我们可以找到一个中立的第三方机构。我们每个人给这个机构50美元,然后这个机构将所有的钱都给赢的一方。但是,也存在一种情况,就是这个机构可能会拿着我们的钱跑路。所以我们最后会选择前两者中的一个方案:信任或合同。

区块链技术能让我们写几行代码,在区块链上运行的一种程序,这样我们双方都缴纳50美元。这个程序将会保存100美元,然后通过不同的数据来源来自动核实明天的天气。无论出太阳或下雨,它都会自动将所有的资金转给赢家。每一方都能核实合同的执行情况。这种方法对于一个赌金为50美元的赌注来说可能成本太高了,不过想象一下如果是房屋交易或者买卖企业呢。

这篇文章的目的是解释区块链如何运作的,但是不涉及到区块链背后的技术细节问题,只是让你直观地了解区块链的逻辑和背后的运行机制。

区块链技术最知名也被讨论的最多的应用是比特币。这种数字货币能够用来交易,并且可以购买商品和服务,就像美元,欧元,人民币以及其他国家货币一样。让我们从比特币开始来了解区块链是如何运作的。

“比特币第一次让我们从一个互联网用户那里将一种数字财产转移到另一个互联网用户那里,而且整个交易过程非常安全可靠,每个人都知道这种交易会发生,而且没有人会挑战这种转让的合法性。这种突破是一种巨大的进步。”—马克安德森

那么,什么是比特币?

一个比特币是一个单位的比特币数字货币,就像一美元本身没有任何价值,美元有价值是因为我们愿意用美元购买商品和服务,这些商品和服务会给我们带来更多的美元,而且我们相信其他人也会这么做。

要跟踪我们每个人拥有的比特币数量,我们可以利用分类账技术,这是一种数据文件能够跟踪所有的比特币交易。

表1—比特币分类账数字文件

分类账文件并不是储存在中央机构的服务器上,不是银行,也不是数据中心。这些分类账文件分布在全世界各个地方,通过私人计算机网络,而且这些私人计算机都能储存数据执行计算功能。每个计算机代表着区块链网络中的一个“节点”,都有一份分类账文件。

如果David想把比特币发给Sandra,他可以向网络广播一条信息表明他要把个人账户里的比特币数量减少5个比特币,同时Sandra账户里的比特币数量会增加5个比特币。网络中的每个节点会都会收到该信息,并将按照交易信息,将交易结果记录在自己的分类账文件中。

表2 —交易请求信息

分类账由一组联网的计算机维护,而不是由银行之类的中央机构来维护,这有以下几点意义:

· 在银行系统里我们只知道我们自己的交易和账户情况,在区块链上每个人都能看到其他所有人的交易。

· 你可以完全信任你的银行,比特币网络是分布式的,如果哪里出了错,没有服务台可以打电话去咨询或也不能控告别人。

· 区块链的设计模式使得这中间根本不需要信任,而是通过特殊的数学函数和编程来保证安全和可靠。

“我们可以将区块链定义为一个系统,这个系统允许一组相互联网的计算机保持分类账的信息更新和安全。”

要在区块链上执行交易,你需要有一个钱包,一种程序可以让你储存和交易你的比特币。既然只有你能够支出自己账户里的比特币,每个钱包都受到加密方法的保护,这种加密方法使用一对不同但相互连接的键:私有键和公共键。

如果一条信息是使用特定的公共键加密的,只有和这种公共键配对的私有键的所有者才能解密并读取信息。换句话说,如果你使用你的私有键对信息进行加密,只有配对的公共键才能对该信息进行解密。当David要发送比特币时,他需要用其钱包中的私有键对广播的信息进行加密,所有只有他才能支出其个人账户里的比特币,因为David是唯一知道其私有键的人,而这个私有键则是打开其个人钱包的关键。网络中的每个节点都能交叉验证该交易要求来自David,这是利用其个人钱包中的公共键来对交易请求进行解密做到的。

当使用个人钱包的私有键对交易请求进行加密时,你就会生成一个数字签名,区块链网络中的计算机会利用该数字签名来双重核实其来源和交易的真实性。数字签名是一串文本,这一串文本是交易请求和私有键结合的结果,所以不能用作其他交易。如果你改动交易请求信息中的一个字母,那么数字签名就会变动,所以潜在的攻击者无法改动你的交易请求或者改变你发送的比特币数量。

表3—数字签名交易加密

钱包的公共键将会被送到比特币网络中的某个地方,所以当你要把比特币发送给某个人的时候,你实际上是把公共键发送给对方。要把比特币发送出去,你要证明你拥有钱包的私有键,因为你需要用私有键来加密交易请求信息。请注意只有在信息被加密之后信息才被广播出去,你永远不要公开你的私有键。

区块链上的每个节点都会有一个分类账的副本。所以,一个节点怎么会知道你账户的余额呢?区块链系统根本不会跟踪账户余额(表1),它只记录请求的每笔交易。分类账实际上并不跟踪余额变化,它只跟踪比特币网络中广播的每笔交易(表4)。要知道你钱包中的余额,你需要分析并确认网络中所有和你的钱包有关联的所有已发生的交易。

表4—区块链分类账

这种“余额”的确认正是由于和之前交易的相关联才会得到验证。要发送10个比特币给约翰,玛丽必须生成一个交易请求,其中包括了此前交易信息的链接,此前所有的交易总额要等于或超过10个比特币。这些链接被称为输入,网络中的节点会验证所有的交易的总额等于或超过10个比特币,而且这些输入还没有被支出出去。实际上,每次你在交易中提到输入,而且这些输入被认为在未来的交易中无效时,所有这一切都自动在玛丽的钱包中得到执行,而且被比特币网络中的节点进行再次核实,她只要用约翰的公共键发送10个比特币交易到约翰的钱包就可以了。

表5—区块链交易请求结构

所以,系统如何信任输入交易,并认为这些输入是有效的?系统会检查之前所有的交易,这些交易是和你发送比特币的钱包相关联的。为了简化验证过程,提高验证速度,网络节点会保存未支出的交易记录。正是由于这种安全审核机制,收到的比特币不会被两次支出出去。

“拥有比特币意味着在分类账中会有指向你钱包地址的交易,而且这些比特币还没有被支出出去。”

在比特币网络中所有用来执行交易的编码都是开源的,这意味着任何有电脑,能上网的个人都能操作交易。然而,如果向比特币广播的交易请求信息中有一处编码错误,相关的比特币就会永久丢失。记住因为网络是分布式的,没有客户支持可以让你打电话,也没有人能够帮你重新恢复消失的交易 或者你忘记的钱包密码。正是基于此,如果你有兴趣在比特币网络上进行交易,建议使用开源或官方版本的比特币钱包软件(比如Bitcoin Core),并且将钱包密码或私有键保存在安全的数据库中。

好吧,那这样真的安全么?为什么被称为区块链?

任何人可以通过匿名连接接入比特币网络,可以提交或接收标有其公共键的交易。然而,如果有人重复使用同样的公共键,就会将所有的交易连到同一个所有人那里。比特币网络允许你生成很多钱包,只要你愿意,每一个钱包都有自己的私有键和公共键。这允许你在不同的钱包里接受支付,而且不会相互连接在一起。不可能有人知道你拥有过所有这些钱包的私有键,除非你将所有接收到的比特币发到一个钱包里。

比特币的地址可能会有2的160次方或者1461501637330902918203684832716283019655932542976个。这样一个大的数量可以防止可能的网络攻击。

有了这种设置,还是有安全漏洞,在比特币被支出去之后,还是有漏洞被利用来召回这些比特币。交易是从网络中的一个节点传到另一个节点中去的,所以2个交易达到每个节点的顺序可能会不一样。攻击者就可能发送一个交易,等到对方发出产品,然后发出一个反向交易指令到自己的账户里。在这种情况下,有些节点可能在第一个信息之前接收到了第二个交易信息,所以就认为第一个交易信息无效。那你怎么知道请求的交易中哪个是第一个呢?按照时间戳先后来对交易排序并不安全,因为很容易被伪造。所以,没有办法说清楚一个交易是否发生在另一个之前,这就存在被攻击或发生欺诈的可能性。

如果上述情况发生,那么网络节点中关于每个交易发生的顺序会产生不一致。所以区块链系统被设计成使用节点协议来对交易排序,并且防止上述可能的欺诈情况发生。

比特币网络将交易信息聚集起来形成块,每个块都包含了一定数量的交易,并有连接和此前的块联系。这就将一个块和另一个块按照时间连起来。这样所有的块就按照时间链组织起来(表6),这就形成了完整的系统:区块链。

表6—区块链序列结构

在同一个块内的交易被认为是同时发生的,而且不在同一个块内的交易被认为是未经确认。每个节点可以将交易组织起来形成块,并且向网络进行广播下一个块应该是什么样的。因为任何节点都能形成一个新的块,系统怎么会一致同意下一个块是哪一个呢?

要加入区块链,每个块必须拥有能够解答复杂数学问题的答案,这些数学问题是用加密哈希函数生成的。解决数学问题的唯一方法就是猜随机数,该随机数包含有前一个块的内容,生成一个确定的结果(通常是小于某个值的数字)。一个普通的计算机大概需要一年时间才能猜对准确的数字,才能解决数学问题。然而由于网络中猜数字的计算机数量很多,一个块平均10分钟就能解决数学问题。解决了数学问题的节点就获得了在区块链上配置下一个块的权利,并且将其权利在整个网络中广而告之。

如果两个节点同时解决了数学问题,并且同时生成新的块怎么办?在这种情况下,两个块都会被广播到网络中去,每个节点都会建立在第一个接受到广播的块上,但是区块链系统要求在最长的区块链上建立节点。所以如果还不清楚哪个块是后接收到广播的块,每个节点将会采用最长的链作为唯一的选择。

表7—区块链末端的选择逻辑

由于同时解决数学问题的可能性比较低,多个块同时解决了数学问题也是不太可能的,所以整个区块链会非常稳定地形成一系列的块,每个节点都没有反对意见。

对于哪一个块是链的尾部所导致的意见不一致,就会产生欺诈风险。如果交易发生在属于较短的尾部上的块(表7中的块B),一旦下一个块解决了数学问题,这样的交易就会回到未被确认的状态。

让我们看一下玛丽如何利用链末端的模糊性来执行重复支付攻击。玛丽将资金发送给约翰,约翰然后将产品装运送给玛丽,现在既然节点已经将较长的尾部作为经确认的交易,如果玛丽能够生成一个较长的尾部,而这个尾部又包含一个反向交易,且拥有同样的输入参照,约翰就会损失钱财和商品。

表8—玛丽实施的重复支付攻击行为简图

那么系统如何防止这种欺诈行为呢?每个块都包括了对前一个块的参考(表6),要将下一个块延伸到网络中必须要解决节点上的数学问题,而对前一个块的参考则是上述数学问题的部分内容。所以由于要解决块中的数学问题并将其增加到区块链中需要猜测随机数,而由于随机数猜中的难度很大,要提前计算一系列块是非常难的。玛丽在和网络中的所有其他计算机进行竞争来解决数学问题,只有解决了这个数学问题她才能将下一个块增加到区块链中。而且即使她在所有其他计算机之前解决了数学问题,她也不太可能连续解决2个,3个或更多个块的数学问题,因为每次她都是在和整个网络竞争。所以,玛丽能使用一台运算速度超级快的计算机来生成随机数和整个网络竞争吗?这是可以的,但是即便是有一台非常非常快的计算机,由于网络中的成员数量很多,玛丽也不太可能在实施重复支出攻击所需要的时间内连续解决若干块的数学问题。

她需要控制整个网络中50%的计算能力才有50%的机会在其他节点之前解决一个块的数学问题,而且即便是在这种情况下,她也只有25%的机会连续解决两个块的数学问题。要连续解决若干块的数学问题,那玛丽成功的可能性就越低。

“比特币区块链系统中的交易受到解决数学难题竞争的保护:任何攻击者都在和整个网络竞争。”

所以,交易会越来越安全。在过去被确认的交易会比最近一个被确认的交易更安全。因为每隔10分钟,一个块就会加到链中,从交易进入块中之后的1个小时内,交易被处理的可能性就越高,交易就越不可能被逆转。

表9—区块链交易安全性

为了能够发送比特币,你需要提到给你的钱包发送比特币的交易,这适用于网络中所有发生的交易。那么,比特币一开始是从哪里来的?

由于软件错误或钱包密码丢失会导致比特币数量减少,为了平衡比特币的这种特点,解决了每个块中的数学问题的人会得到奖励。要获得这种比特币奖励,这些人就要运行比特币区块链软件,这种活动被称为“挖矿”。

这种奖励是推动个人运作节点的主要激励方式,这样也提供必要的计算能力来处理比特币交易,并且稳定整个区块链网络。

普通的计算机要解决一个块中的数学问题要花很长时间(大约平均1年),节点形成一个组织,要解决下一个块的数学问题所花费的时间就由该组织中的计算机平均承担。这样,整个组织猜中正确的数字所需要的时间就更短,就更容易获得奖励。这样的组织就被称为采矿池。

有些采矿池的规模是非常大的,其计算能力能占整个网络的20%以上。这对于网络安全性有非常重要的意义,这就和玛丽的重复支付攻击案例中的道理是一样的。即便是这些采矿池中的一个能够获得整个网络计算能力的50%,一个块在链中的位置越靠后,那么块中的交易就会越安全。

有些拥有很强的计算能力的采矿池决定限制成员的数量,这样可以保护整个网络的安全性。

由于技术进步和节点数量增加,整个网络的计算能力可能随着时间而增加,区块链系统会重新调整数学问题的难度,以保证每隔10分钟就能增加一个块。这就保证了网络的稳定性和安全性。

而且,每四年,块奖励会减半,所以挖比特币(运行网络)收益会越来越少。为了防止节点停止运转,每笔交易会附有一笔小额的奖励,这些奖励由成功实施交易,并成功解决数学问题的节点收集。由于这种机制的存在,较高奖励的交易通常要比奖励少得交易处理速度要快。这意味着当发出一笔交易时,你可以决定是否让这笔交易处理得更快(更贵)或更便宜(时间更长)。和银行的收费相比,比特币网络中的交易费现在是很少的,并且没有和交易金额挂钩。

表10—比特币交易

现在,你对区块链如何运作有了初步的认识,让我们看看为什么区块链这么引人注目。

使用区块链技术有很多明显的好处:

· 你可以完全掌控你所拥有的价值或财富,没有第三方会为你保存财富或价值,或者没有第三方机构能限制你使用你的财富或价值。

· 在地球上转移价值的成本非常低。

· 价值转移可以在数分钟内实现。

· 由于任何人在任意试点都能证明区块链上的每笔交易,这就有了完全的透明性。

· 利用区块链技术就可以开发去中心化的应用,来快速和安全地管理信息和转移价值。

然而,也存在一些挑战:

· 交易能够被匿名发送和接收。一方面这保护了用户的隐私,但是一方面机构无法跟踪用户的身份。

· 即便是出现了很多新的交易平台,用比特币来交易商品和服务还存在很多困难。但是,这种方式正逐渐受到认可。

· 比特币,就像很多其他加密货币,波动非常大:市场上的比特币数量并不多,而且需求变化也很快。比特币的价格很容易受到重大事件或者加密货币行业发展变化的影响。

· 区块链技术仍处于发展初期。每天都会有新的工具出现来提高区块链的安全性和稳定性,但是也会带来其他一些问题。

总之,区块链技术拥有颠覆很多产业的潜力,从广告到能源分布等。其主要的优势在于不需要信任,而且去中心化。很多区块链技术的应用场景逐渐出现(比如,成立完全去中心化的自治组织或DAO的可能性)。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:链客

查看原文:区块链技术背后的运行逻辑

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2479 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传