区块链@IT·互联网程序员分享

从0了解区块链-什么是区块链

2021-01-12  本文已影响0人  文博客

从17年知道区块链是因为比特币,从此开始炒币。之前只是简单的了解区块链的知识,但没有深入了解过,直到前一段时间会玩了合约......年轻人不要碰合约。由于亏了很多所以想让自己沉稳下来,就开始想从“0”开始了解区块链,了解虚拟货币。

本人程序员所以找到了一些区块链相关的文章信息,一下是一片国外区块链文章的翻译。那么为什么要翻译呢?学习一个东西要从最原始的地方开始学,这样比较权威。二是提升一下自己的英语水平(本人英语水平极差)。下面就是区块链文章的翻译,简单易懂,有什么翻译不对的地方请大家指正。翻译不易啊o(╥﹏╥)o

Tips:文章较长请耐心阅读,可以真正的帮助你了解区块链。本文翻译自: https://kauri.io/#communities/Getting%20started%20with%20dapp%20development/blockchain-explained/

区块链的解释

bafybeidyer5ixybssj3x7fos563xearnkosg6fxjmce4iyrsyhk5rtyyci.ipfs.infura-ipfs.png

区块链到底是什么?在这篇文章里,我们将试着提供一个有深度并且简单易懂的说明。我将要告诉你关于什么是区块链、他有什么特性、在区块链中存在哪些用户组以及他们是如何相互作用的。

注意:这篇文章涵盖了大多的公链,而这些公链中大多关于他们加密货币的使用。
公链还有其他的应用,他们还有私有链。私有(或许可)区块链具有相似的结构,但功能和机制不同。

概述

区块链仅仅是一堆块。每个块包含一些信息。在加密货币中,这些信息通常是一组交易。每一个区块链接前一个区块。至今,区块链的主要用途是加密货币。加密货币是一种无需中央授权即可运行的电子现金系统。虚拟货币被采用是因为他解决了双倍支付的问题-当一个不诚实的用户在去中心化现金交易系统上面花两次相同的硬币。在比特币、以太坊和其他虚拟货币中同一枚货币花两次是几乎不可能发生的。区块链是一个组织和存储数的方法。当然,还有其他方法,不过区块链有几个独特的特点。

特点

为什么用区块链?为什么不用传统的存储方法,像SQL数据库或者key-value存储?区块链提供2个非常适用于加密货币的特点:它是分布式的和不可信的。甚至如果一家公司使用数据复制,它通常有2-5个副本。在区块链中,副本的数量可以使成百上千个。以这种方式,区块链是分布式的。比特币账本的副本数量等于完整节点的数量。要清除已经存在的交易信息,你需要从全球的每个完整节点中删除它。去阻止区块链,你不能只入侵单一计算机或者甚至整个国家。你需要从不同的位置破坏计算机,运行不同操作系统并且采取不同的安全措施。通过攻击每一个完整节点的区块链事实上是不可能的。在paypal,你相信所有的交易将会完成,你能在任何时候从你的余额中提取现金。在区块链中,你不需要相信任何的公司。你也不需要相信任何特定的人。相反,您认为大多数用户都会诚实行事。在这个意义上讲,区块链是一个不信任的系统。不信任系统这一特征对于每一个用户都是公平的。举个例子,paypal是数字货币的垄断者,所以它能增发佣金,冻结你的资金和延迟你的提现。基本上,它能在你的钱上做任何事。在区块链中,没人有权利去制定他们自己的规则。相反,它受多数和自由市场所驱动。

缺点

区块链不是万无一失的方法,他有他自己的缺点。虽然其中一些可能会成为一个问题,但大多数都是可以部分修复和忽略的。请注意这只是可能出现问题的概述。这不是一个详细的列表。

Sybil攻击

第一个问题是可能出现Sybil攻击的问题。就是一个用户控制几个节点,并说服另一个用户这些节点属于不同用户的这种情况。基本上,当成功后,这种攻击可以让用户完全阻止另一个用户进入网络。当攻击者可以决定哪些交易给你看,哪些不给你看时,这可能会导致交易删减。攻击者还可以通过不向其他用户广播你的交易,将你的交易从网络中屏蔽。这可能会导致双重消费,并且可以将你从网络的其他地方屏蔽。为了防止Sybil攻击,节点可以将出站连接限制为每个子网一个。另一种减轻攻击的方法是寻找可疑的低哈希特的节点。

DOS攻击

另一个有可能有问题的就是dos攻击。攻击者可以通过向一个节点发送大量数据来使其过载。举个例子,它可以发送一个真正的大块或带有脚本的交易,执行时间太长。比特币或者其他加密货币对dos攻击有一些保护。例如,许多加密货币有一个最大可能的区块大小。

可延展性

公共区块链系统很难扩展。难的意思是既不容易也不可能。他不是不可能的,因为没有任何技术障碍来增加网络的吞吐量。它不容易,因为仅仅增加它会使系统更加中心化。增加区块链的容量意味着增加运行一个完整节点的硬件要求,这意味着想要和能够维护节点的人越来越少。这首先是一个区块链是否应该具有巨大的可扩展性的问题。首先,区块链不是无所不能的--没有必要什么都用它,哪怕是与货币和金融有关。其次,区块链可以通过链外解决方案进行扩展。例如,可以通过闪电网络提高比特币的吞吐量。

区块的内容

每个区块由两部分组成:头和数据。区块头是一种元数据。通常,它包含块号、时间戳(块创建时间的记录)、块哈希和随机数等信息。


QmcM7hwg6HU9kzB3LgCXzdSAMqZQKegksTfBqSkHRAgz9Y.png

块数据是一种有效载荷。它是我们需要存储的有用信息。数据通常包含多个共享相同结构的信息片段。在比特币中,每个区块包含大约一百个这样的片段。每一块都是一个交易。简化一下,每笔交易就是发件人地址、收件人地址、交易金额和费用。在Ethereum中,每笔交易还包含 "输入数据 "字段,用于向智能合约传递数据。


QmNMqRhHk3JyXgHvNtgrFwK8PAhL2yd2YQWhbfXEFmnTwW.png

区块生成

向区块链添加新信息的唯一方法是在区块链的末端添加一个区块。添加信息的数量通常受到软件的限制,否则,可能会变得臃肿,对于大多数用户来说,不可能保留整个区块链的历史。总的思路是在同等时间段内添加新的区块。合格的用户创建区块并将其发送给其他网络参与者。如果区块有效,其他用户就会接受它。如果它是无效的,他们会忽略它,并可能惩罚区块创建者。有效的区块会在几秒钟内在网络中传播。


QmPLLGmY7T75rjGGHvbSEr71ZBE2xUqdDCGy3tnmdeLXtZ.png

PoW(Proof-of-Work)

在PoW系统中,添加新的区块通常被称为"挖矿"。每个矿工都会独立地尝试找到一个有效的哈希,并达到所需的难度。这个难度由软件自动定义,以控制新区块的数量。第一个找到正确哈希值的矿工就成为新区块的创建者。随着越来越多的矿工加入网络,总的哈希率--所有矿工的计算能力总和--会增加。如果没有限制,矿工们会越来越频繁地找到哈希,从而找到区块。但大多数币种追求的是寻找新区块的恒定速度,所以他们根据哈希率改变了一个挖矿的难度。难度告诉用户,矿工应该找到多少个哈希才能得到一个正确的哈希。难度越高,需要的哈希数越多。当哈希率增加时,难度就会增加。通过这种方式,挖矿难度可以抵消矿工不断增加的计算能力。网络的难度是根据过去开采新区块的频率来重新平衡的。可以在每个区块后或几个区块后重新调整。以比特币为例,难度每2016个区块重新调整一次,大约需要2周时间。

PoS (Proof-of-Stake)

在PoS中,区块生产者是根据他们拥有多少币来选择的。这种选择可以随机进行,也可以选择那些获得最多票数的人。你拥有的币越多,你被选为下一个生产者的概率就越高,或者说你的投票权越大。被选中的生产者就会在指定的时间内制作区块。为了阻止节点对错误的区块进行投票,可以引入惩罚。一种方法是惩罚那些在同一轮中对多个区块进行投票的节点。另一种方法是惩罚那些投票给不受欢迎的选择的节点,假设得票少的区块是错误的。打包的过程可以委托给其他节点。例如,如果一个用户拥有大量的币,但他不想或不能经常投票,他可以委托另一个用户进行押注。该用户将拥有与其他用户的币相结合的投票权。赚取利润后,委托人就可以分享部分收益。整个委托和分享利润的过程都可以自动完成。

Hashing

哈希值就像数字文件的脚印。不同的文件产生不同的哈希值,相同的文件产生相同的哈希值。你可以很容易地找到每个文件的哈希值,但很难通过哈希值找到原始文件。此外,稍有不同的文件产生的哈希值非常不同,所以你无法根据哈希值来判断两个文件的不同。在区块链中,每个区块都包含前一个区块的哈希值。这样一来,如果某个区块会发生哪怕是微小的变化,它的哈希值也会发生变化,所有后续区块的哈希值也会发生变化。每笔交易的哈希值是基于之前的哈希值和区块数据。它还可以包含一个时间戳。如果区块是通过挖矿创建的,网络难度和随机数也会包含在哈希中。

不变性

不可变性是指某件事情不能被改变。当人们说区块链是不可变的时候,他们的意思是改变旧区块是不切实际的。如果你改变了一个交易,这个交易的哈希值也会改变,进而改变梅克尔根的哈希值,这就会改变区块的哈希值。由于每个区块都会保留前一个区块的哈希值,所以在改变区块之后的所有区块也会变得无效。想象一下,一个攻击者想要改变一个1小时前的交易。攻击者将需要挖掘从被更改的区块到最新的区块的所有区块。此外,他还需要挖掘所有未来的区块,这些区块将在他挖掘之前的区块时被创建。事实上,即使是最早的区块也有可能改变,但这需要控制总矿力的一半以上,所以才有51%攻击的含义。一般来说,越是古老的区块,攻击者成功改变它的概率越小。商家通常会等待6个区块来确保自己能拿到钱,因此有6次确认的规则。

节点

节点是对区块链进行读写的计算机。不同类型的节点有不同的作用和能力。

挖矿节点

采矿节点是生产区块的节点。它们通常拥有巨大的计算资源。矿工通常不验证区块,因为他们不存储区块链。要制作新的区块,他们只需要一组最近的交易和最后一个区块的哈希值。

完整节点

完整节点是存储区块链整个副本的节点。它们会验证它们接收到的区块,并将验证过的区块传播到网络中。它们也可以将自己的交易发送到池中。

轻节点

轻节点不存储整个区块链。它们通常存储区块头和一组非常小的交易。轻节点不能验证区块,需要信任全节点。然而,轻节点可以连接到其他节点,接收新的区块,并发送交易。

网络 "节点"

网络节点根本不是节点。它们是连接到中心化服务器的钱包。它们不存储区块链的任何部分。网络钱包不能连接到其他节点,接收区块,或发送交易。它们只能要求服务器这样做,并期望服务器能提供正确的信息。它们完全信任它们所连接的服务器。不存储区块链数据的移动钱包也属于此列。


QmVfrPPnqYxzJahKTtmrfrDBoHWgpFTWfdEkwYHP6EtLxp.png

网络

在去中心化系统中,节点来了又走。不能保证某个特定节点今天或明天会在线。这一事实严重影响了连接节点和与节点交互的方法。

同行发现

同伴发现是一个认识其他网络参与者的过程。当用户第一次启动一个节点时,它没有对等体连接的轨迹。为了与网络进行交互,它应该找到对等体并将其保存在内存中。发现其他对等体的方法有几种,包括硬编码地址、用户输入、DNS查找等。最原始的方法是连接到钱包程序中硬编码的地址。这些地址代表了开发者最初为了在最初几天或几周内发展网络而设置的节点。虽然这是一种简单的方法,但在成熟的网络中通常不是很普及。例如,比特币中的硬编码地址只是作为最后的手段,当其他方法不起作用时才使用。用户也可以手动提供他们在其他地方得到的节点列表。用户可以将它们写进文本文件,作为命令行参数提供,或者通过图形用户界面输入。另一种发现对等体的方法是DNS查询 。有一些DNS服务器保存着节点的列表。这些列表由这些服务器的维护者更新。通常情况下,有几个DNS服务器,所以如果其中一个服务器宕机,其他服务器仍然会提供服务。一旦一个节点找到至少一个对等体,他就可以连接它。如果连接成功,他们可以交换他们收集到的对等体的信息。当发现时,节点地址会被存储在数据库中,以便在下一次计算机启动时得到它们。具有较新的客户端软件版本的节点是首选。老的、不活动的节点的地址会被删除。

区块链下载

一旦节点连接到其他对等体,它就可以开始逐块下载区块链。第一个方法是简单地让节点从其他对等体下载区块。这可能会很慢,因为它不仅取决于你的网络连接速度,还取决于对等体的带宽有多宽。但它是一种去中心化的方法,这意味着它不依赖于单个网站或服务器。另一种下载区块链数据的方法是从互联网上的一些外部来源下载。它可以是一些随机的网站,种子文件,或你的朋友发给你的档案。这可能比通过p2p连接下载更快,但它也是中心化的,需要信任你下载的来源。不仅如此,很多曾经通向区块链档案的链接可能现在已经死了。无论用什么方法下载区块链,都应该对其进行验证,这可能需要更长的时间。计算机应该从发源地的每个区块进行验证。验证过程包括检查工作证明,确保一个区块中的所有交易都是正确的,检查Merkle树根计算是否正确等。下载的速度取决于带宽,而验证则依赖于CPU的功率。有时,可以跳过整个区块链的验证过程,只检查那些包含钱包交易的区块,即发送到所选钱包或从所选钱包发出的交易。这种轻型验证的可用性取决于你使用的钱包软件。

发送交易

当涉及到传播新的交易和区块时,加密货币通常使用一种叫做Gossip协议的东西 。这就像许多人传播八卦,直到每个人都知道它。它开始于一个节点进行交易发送钱。在交易被签署后,节点将其发送给邻居节点。当这些节点收到交易时,他们会检查它。如果交易的结构正确(有正确的格式,有签名等),并且不是双重消费,它们会反过来把它发送给它们的对等节点。当然,当一个节点试图发送交易时,它的对等体可能已经拥有了该交易。正因为如此,节点首先会发送交易的哈希值。如果接收节点拥有该哈希值的交易,它就不会再下载它。如果接收节点没有该交易,它将下载该交易并进一步发送。最终,所有连接的节点,包括矿工,都会收到该交易。


QmR2vq4RYzdkDsgcdwFUob8XyT4DcFeHLSqpuMQoccMcXM.gif

块状传播

主动做区块的矿工和矿池收集所有进入的交易。对他们来说,在下一个区块中包含尽可能多的交易在经济上是可行的,因为他们将收到所有的交易费用。矿工或矿池找到正确的哈希后,他将把区块发送给他的同行。之后,这个过程与发送交易一样。收到新区块的节点将其发送给他们的对等体,一段时间后,每个人都拥有区块。在PoS系统的情况下,过程几乎是一样的。当一个区块生产者要做一个区块的时候,他收集所有的交易,把它们放到他的区块中,然后把区块发送给对等体。

实现共识

为了正常工作,像加密货币这样的去中心化系统应该不断尝试实现共识。这基本上意味着每个节点都应该拥有相同的区块和交易集,它们以相同的顺序存储。大多数时候,共识会顺利实现。正确的交易和区块会传播,而不正确的交易和区块会消亡。然而,有可能在某个阶段,两个区块会指向同一个父区块。换句话说,链将在两个链中分叉。分叉在PoW和PoS系统中都可能发生。在PoW链中,两个矿工可以同时找到一个哈希,并且两个矿工都会指向同一个区块,也就是之前被开采的区块。在PoS链中,一个区块生产者可以选择一个较早的,而不是最后一个区块作为其父区块。为了解决分叉问题,整个网络应该就哪个分叉将成为主分叉,哪个分叉将死亡达成一致。经验法则是 "链长者胜"。在PoS链中,这意味着最终一个分叉将比另一个分叉长,至少长一个区块,所有诚实的节点和区块生产者将在这个分叉上工作,并放弃另一个分叉。在PoW链中,"最长 "通常意味着 "做了更多的工作证明",所以获胜的分叉不是区块数最大的那个,而是有更多矿工工作的那个。

处理攻击

但当有欺诈节点试图覆盖历史或审查网络时,如何实现共识?有三种可能的情况。第一,攻击者不占多数。多数人要么在挖矿装备(PoW),要么在币(PoS)。在这种情况下,他的可能性相当有限。他可以尝试进行51%的攻击,但失败的可能性很大。他还得冒着浪费电费、挖矿电脑的风险,或者通过买币获得奖金。第二,攻击者控制了大多数人。在这种情况下,他几乎可以控制网络。然而,即使一些权威机构将控制网络,它也很可能会亏损。加密货币的魅力在于,它们是以博弈论原则为基础建立起来的。在加密货币中,拥有权力总是意味着拥有一些利益。它可以是GPU、ASIC、有价证券币或其他东西。攻击很可能会伤害许多网络参与者,而且会影响价格。攻击者拥有的挖矿设备和押金币如果会有价值的话,也会失去价值。对于一个人来说,如果控制了大部分的权力,甚至没有尝试进行攻击,这可能是危险的。如果事实会被人知道,就会迅速传播,很可能会影响价格。第三,大多数节点表现不好。事实上,大多数人甚至不需要某个人的协调。仅仅是行为不对,他们就不太可能进行双重消费,但他们可以阻止网络。这是非常不可能的事件,因为大多数人通常都会遵守法律,不过理论上是有可能的。与第二种情况一样,行为不端的大多数人很可能会受到市场力量的惩罚。

上一篇 下一篇

猜你喜欢

热点阅读