比特币的技术指南(适用于非程序员)

这里写图片描述
翻译:青水评级

比大多数人更好地理解比特币需要18分钟。

在18分钟内,您将很好地理解哈希函数,公钥加密和Merkle树如何在比特币中出色地使用。

这篇文章的目的是为关键的比特币技术提供一个半技术性指南。我们发现如何实现在两个实体交易时,解析比特币交易过程发生的所有事情。

当然,我们以Bop(鲍勃)和Alice(爱丽丝)为主角表述。

假设:爱丽丝生活在一个正在经历大规模经济衰退的国家,人们普遍认为这是一场人道主义灾难。在这个国家,恶性通货膨胀、饥饿、失业和暴力犯罪阻碍了公民享有最基本的人权。

尽管经济不景气,生活还是要继续,人们仍然需要购买商品和服务。爱丽丝迫切地需要修理已经破损的屋顶。但修理这个屋顶需要一天多的时间,而且使用过度膨胀的国家货币来定价这项服务几乎是不可能的。

历史上,每当一个国家的货币崩溃时,公民倾向于采用稳定的外汇来对冲通货膨胀。许多经历过恶性通货膨胀时期的南美洲国家在试图为服务定价时,非正式地采用了美元。但现在,爱丽丝很难找到实体美元钞票,而且这种危机已经进入第三个年头。为了对冲恶性通货膨胀,她提议用比特币支付屋顶修复工鲍勃,虽然这比她自己国家的货币更加不稳定。

鲍勃需要0.001 BTC才能开始维修屋顶,但他没有比特币钱包。除了给他寄钱,爱丽丝还需要教鲍勃如何制作钱包和使用比特币。

1、爱丽丝想把 0.001 BTC 发送给鲍勃

要在 Bitcoin 网络中进行交易,每个参与者都需要下载一个特定的软件来与其他网络参与者互动。这就是所谓的客户端,它向服务器发送特定的数据请求。例如,Web浏览器就是一种从服务器请求和解释数据的客户端。当一个URL被访问时,浏览器客户端会向存储网站内容的服务器发送一个请求,一旦得到了数据,它就会显示给用户。

比特币客户端的工作方式也是相似的,但有一个关键的区别。比特币客户端不是从中央服务器访问数据,而是与网络的其他成员进行交互,以获取和验证数据的完整性。这一点很容易确定,因为该网络的每个参与者基本上都存储着相同的数据库。这也是Bitcoin网络的一个关键点,因为它的去中心化属性为网络参与者或节点之间数据交换的完整性提供了独特的安全保障。

根据定义,节点是网络的独立参与者。当我们提到Bitcoin网络的节点时,我们谈论的是那些已经下载并运行比特币客户端的用户。总的来说,节点就是比特币网络的基础组成部分; 一组互联机器运行客户端和交换数据。

节点可以通过运行两种类型的客户端,一个完整的客户端或一个轻客户端。 让我们先来看看它们之间的区别:

完整的客户端(也称为全节点,或”厚”客户端)

正如我们许多人所知道的,区块链只是一种结构,可以用来存储数据。在比特币中,交易每10分钟被添加到区块中,然后链接(连接)到前一个区块。这个数据结构的目的是确定一个单一的和不变的真相,来记录发生了什么以及何时发生。

完整的客户端,也称为完整的节点,在他们的计算机中存储着区块链的一套完整副本,它由网络中所有交易的所有区块组成; 从创世区的第一个交易开始,这是第一个被开采的区块,一直到软件能够找到的最新块。完整的节点是比特币网络的支柱,并且强制执行由软件(哈希算法或智能合约)规定的规则。这些规则保证了区块链上所有的储存数据的安全性、格式统一性和一致性,以及新数据修改为分类账的过程。

由于完整节点存储所有网络中发生的事务的副本,因此能够验证任何其他用户发起的事务的有效性。为了做到这一点,软件会查看用户所有过去的交易,从而防止恶意行为者发送超越他们所拥有的资金。由于这是数字货币,防止比特币被使用两次的唯一方法(Ctl + c,Ctl + v)是高度关注所有交易。(避免数字经济的双花问题,也叫双重支付)

从其他节点下载整个区块链可能需要一段时间,因为目前比特币区块链的大小是164GB。然而,这个过程每个用户只需要做一次。在已经下载好的区块链的基础上,用户每10分钟只需下载一个新区块,并且这些都是由客户端自动在后台完成的。

轻型客户(亦称「瘦客户」)

由于运行一个完整的节点有几个要求,例如需要足够的存储空间和内存,所以设计轻客户端是为了减少与网络的交互,减少拥有和使用比特币的麻烦。例如,轻型客户可以在智能手机上运行。相比于存储一个完整的区块链副本,轻型客户只存储每个区块的标题,这基本上是包含在其中的所有事务的摘要。

仅仅存储区块标题需要更少的磁盘空间,但它限制了轻型客户端可以做的事情。轻型客户端无法完全验证事务的有效性,但如果将事务包含在区块中,可以通过查看标题来确认,其主要目的是向网络广播交易。完整的节点接收并验证轻型客户端的事务,并将它们与所有其他未处理的事务一起添加到一个单独的桶中。当矿工发出命令时,完整节点只允许这些未经处理的交易添加到他们的区块链。

2、爱丽丝帮助鲍勃下载了一个比特币轻型客户端,这将使他能够快速创建一个账户并获得资金。

多个客户端和服务上传时间

现如今,共有几十个不同的比特币客户端可供下载。这种多样性是十分必要的,因为它降低了因一个客户端的错误而破坏整个网络的风险。如果一个客户端发生错误,用户也可以下载其他客户端并进行交易。

这就是比特币在99.99%的时间上都可以运行的原因。没有多少互联网服务具有可与其相比稳定性,对于一个9年前由一位不知名人士发起的开源项目而言,这本身就是一件了不起的事情。

钱包

尽管全节点客户端和轻型客户端都可以作为用户的钱包,但比特币钱包的定义与客户端不同。从技术上讲,钱包用于收集来自发送和接收比特币所需的数据。这些数据包括一个公共地址和一个私人密码。

比特币身份和钥匙

由于比特币是为点对点支付而建立的,所以网络中的所有用户都需要一个公共身份,使他们能够识别每一笔交易的当事人。就像银行账户一样,这个地址需要是独特的,但用户必须能够公开分享。相反,用户也需要通过唯一私有身份证明来授权交易,以便证明资金的所有权。

比特币通过三个独特的标识来达成以上操作:

私钥

私钥是一个完全随机数字和字母组合,用以与特定地址的比特币关联。私钥,如支票帐户的密码一样,用于授权交易。下面是一个私钥的例子。

cxprv9xg3pXGrrmSQNqRCZRFmphUZpkzt8s43ESotbcPXk5fLXt6NT3fh2tTPyQ7tW2SWAS9uWjhDJzzex9m8qmAHsJvTN1hctsgiYFK9Moo9Nx1

正如看到的,对于一个人来说,要记住私钥是极其困难的。建议你把它写下来存放在与网络隔绝的书籍夹层或保险箱,因为如果你碰巧写错一个字母,你将永远失去你的资金。当然,你可以使用一种称为记忆键的东西,以人可读的格式来表示私钥。信不信由你,以下十二个单词的记忆键代表了上面的私钥。

faith joke visa range turkey expose they bacon gentle hill cushion recipe

这样更容易记住,但这却是比特币最不受重视的方面之一。这是人类历史上第一次,你可以在没有第三方的情况下将你的财富储存在你的大脑中。

这意味着,如果爱丽丝居住的国家局势变为内战,她就可以逃离这个国家,并且仅凭这十二个字就能转移她的财富。这十二个词也可以在之后装入任何比特币钱包。

公钥

公钥来自于使用奇异代数的私钥,并在用户的私有和公共身份之间充当中间人。公钥是由私钥经过hash算法,准确说是椭圆曲线算法产生的,下面是一个公钥的例子。

xpub6E9pP9ny45P14SNMCzCBFCPwr2QHgWQqZggJg6sMjnGgPo8Hf9tzPwtzHYeKXn6GdACpoKRcvkb2w6pvcAj6kwdw5mKLyDErWXKX8Bhozed

地址

地址来自公钥,使用哈希函数。但是现在需要注意的是,公钥和地址是不一样的。

我们经常被问到”如果用户使用地址进行交易,公钥的意义何在?” 这种中介背后有几个技术上的原因,这都归结于隐私和可扩展性。用户可以从他们的公钥中导出多个地址,这使得人们很难(但不是不可能)在网络中指定一个单一的身份。 下面是一个地址的例子。

1LGpghBaX7AGbxA5dvpVwR7vMy53R8HcXX

易于验证,几乎不可能回溯
正如图中所示,私钥、公钥和地址之间存在一种数学关系。这是通过使用一个称为数学陷阱门的原理来实现的; 一种单向的数学函数,可以很容易地在一个方向上执行(即从私钥中获得公钥),但几乎不可能在相反的方向上执行(即从公钥中推导出私钥)。

这里写图片描述

尽管这些操作背后的数学方法令人兴奋(以一种很好的方式),细节更多关于椭圆曲线密码学和其他的技术。现在,请记住,当爱丽丝签署一项交易时,她实际上是在使用她的私钥来创建一个签名。通过这个签名,每个人都可以很容易地验证爱丽丝有一个与地址关联的私钥,但同时却不知道私钥到底是什么。

现在,让我们分享一些奇妙的推测:

问: 用户可以生成多少比特币地址?

答:1,461,501,637,330,902,918,203,684,832,716,283,019,655,932,542,976

问: 地球上有多少沙粒?

答: 9,223,372,036,854,775,807

我们应该要了解,需要用整个太阳的能量才可以强制从公钥中回推出私匙。

数学是如此的不可思议。

3、鲍勃通过他的轻型客户端创建了一个钱包,并通过电子邮件将自己的比特币地址发送给爱丽丝。

交易

简单地说,比特币交易是一个附有签名的信息,用以授权将资金从一个账户转移到另一个账户。每个交易都包含发件人的地址、接收者的地址和由发件人私钥生成的签名。

比特币区块链有一个本地的多输入会计系统,每个交易都有输入(余额的来源)和输出(余额的流向),这很像一个借贷系统。用户的余额基本上是与从其公匙中得到的地址有关的所有借方的总和,减去已经发送到其他地址的所有贷方的总和。一旦在交易中使用,余额就被认为是被花掉了。

4、爱丽丝现在有鲍勃的地址(1Few1623…)了,这也是她开始交易所需的唯一东西

这里写图片描述

当爱丽丝启动一个0.001BTC的交易,或者10毫比特(mBTC)时,她的比特币客户端将查看所有以前与其公钥相关的未使用输出(debits),并显示她的总余额。 然后,爱丽丝扫描或复制鲍勃的地址,添加交易金额,并选择她希望资金以多快的速度到达鲍勃。鲍勃接收爱丽丝交易的速度取决于爱丽丝愿意支付多少网络费用。

5、爱丽丝决定她将支付多少费用,这与鲍勃获得资金的速度成正比

比特币依赖于某些网络参与者将未经处理的交易分组到一个区块中,并将该区块添加到分类账中,这个活动叫做挖矿。矿工收取一个区块内所有交易的费用。因此,他们有优先处理高额交易的经济动机。如果爱丽丝希望鲍勃在不到一小时内收到资金,她将不得不向矿工支付更高的费用。

由于鲍勃不会马上需要这笔资金,所以爱丽丝决定支付每千字节2.21 mBTC 的交易费,这足以确保鲍勃在50分钟内或者5个区块内收到她的交易。爱丽丝预览了这笔交易,看看她将支付多少费用。

这里写图片描述

按每千字节2.21mBTC的交易费率,由于其交易规模为336字节,网络费支付总额为0.743 mBTC,即4.65美元(2.21* 336)。

注意: 截图是在比特币交易达到历史最高水平。如今,类似交易的成本将低于1美元。

从本质上讲,比特币交易就是分类账条目的交换,它们被表示为输入和输出。爱丽丝发起的具体交易只包含一个输入和两个输出。为了给鲍勃发送10 mBTC,爱丽丝的客户端使用过去的交易作为输入,以证明她的余额高于发送的数量。一天前,爱丽丝把98.525 mBTC存入了她将用来把钱寄给鲍勃的地址。她的客户端将使用这笔交易作为输入,因为它的值高于她将发送给鲍勃的数量。她的客户端还会把昨天的存款和10mbtc (即,变化)之间的差额发回给爱丽丝。

同时,共创建了两个输出:第一个输出将10 mBTC发送给了鲍勃,因为它代表了爱丽丝发送的内容,第二个输出的87.78mBTC作为变化差值回到了爱丽丝的地址。要注意的是,爱丽丝将收到的87.78 mBTC输出已经计算了她将为网络收费支付的0.74 mBTC。

这里写图片描述

有时,输入和输出会令人困惑。这是因为前一个交易的输出变成了新交易的输入。在上面的例子中,输入0是前一天存款的输出。因为该输出在任何其他交易中都没有使用(即它是未使用的输出),它可以用作新交易的输入。一旦被使用,它就变成了一个已使用输出,不能被视为未来交易的输入。

在这个特定的交易可以广播到网络之前,爱丽丝需要通过签署这个交易来证明她拥有与此地址相关联的私钥。爱丽丝可以通过加载用于存储它的文本文件或手动输入她的12个单词的记忆键。爱丽丝的客户端会将交易中的所有细节组合起来,将其转换为十六进制格式。

转换之后,爱丽丝的整个交易看起来是这样的:

0100000001148e2d38c3689aad33912d200466fae64f5838f78b3b9f86b01c248720e6c4a601000000fdfe0000483045022100c30774a82e9073eddb6087f41a59072d29eaee7c3d1421d6f87176ebdff4d7d0022062de162d52c6b547fa24691df56c9da4d6eb7ee73af414af4b60ccce9e69e9e601483045022100f3e2f4a4b970c266a6bd8673cc4ebceea552d8f95a08a35f9961b4d82dfbb8b1022006bd96c993d8b3abb5f709575a0bd4aaa3dfc7ef4be2332e5742dea07d0cc3a9014c69522102645819411857186df087f733675574e37372b4de78471b5c87b832d977f3007e21034df63462f237819e46a9aa586a87597fde69df7ed2b5b583de38ae0d4abc183a2103ec10bb20748527001b900474f72440e1a9591305b991f79cbf0897413ec0cfb753aeffffffff0240420f00000000001976a9147fd627956048ff5b5cff26183df231540c637d2e88acd8f185000000000017a914167a1e9c105bd7bc1a5e86d3d576078a63f0472c8700000000

上面的字符串是与网络的其他成员共享的。一旦被广播,围绕爱丽丝的节点验证交易的有效性,并将其传播到其他节点,直到交易被矿工处理。如上所述,每个节点都存储一篮未经处理的交易。这就是所谓的记忆池,或者mempool。

当记忆池填满时,网络中的节点存储大量未处理的交易时,导致内存不足,每千字节的网络费率就会增加。结果,网络采矿费用也就增加了。

因此,比特币记忆池被用作拥塞控制和交易成本的代理,因为更多未经处理的交易 = 记忆池中更少的空间 = 更高的费用。这里需要强调,比特币网络收费只根据交易规模(kilobytes)来定价,而不考虑发送的数量。

区块挖矿的验证

比特币的发明者中本聪从未用过”挖矿”这个词来形容嵌入比特币协议的数学竞争。相反,这个术语之所以受到欢迎,是因为它描述了一种与现实世界活动相似的行为,这种活动具有概率性,而且不能保证成功。

金矿主知道,即使他们在挖矿中花费了大量的资源,也不能保证可以找到一种珍贵的金属。尽管这可以作为一个有用的类比来描述活动的概率性质,但采矿这个术语对于理解这个过程本身没有任何帮助,而这个过程是比特币在用户采用和网络安全方面的最大成就之一。

矿工们的实际活动与现实世界的锁匠的工作更类似,而不是一个真实世界的矿工。

想象一下,每隔十分钟,比特币协议就会给其网络中的锁匠们一个未知密钥的闭合锁。只有当其中一个锁匠能够打开锁并将一组新的交易附加到链条上,才会发布奖励。为了找到钥匙,锁匠必须尝试数以百万计的不同组合,这需要花费时间和精力。锁匠必须通过向其他锁匠展示真正的密钥,来证明自己的工作,之后其他锁匠也可以自己复制和验证这个密钥。生产这把钥匙,就是证明工作已经完成的证据,它会自动给予成功的锁匠一个奖励,而这种奖励实际上与他的努力成正比。

这就是工作证明。

这里写图片描述

协议总是知道有多少锁匠试图找到锁的钥匙,那么在锁匠找正确钥匙之前,每次平均需要10分钟。如果网络中只有十几个锁匠,锁会很小,而且可以很容易地使用一个有很少凹槽的短钥匙打开。相反,如果有数百个锁匠参与这个挑战,协议将给他们一个大锁,需要一个带有许多凹槽的长钥匙。至于比特币,在找到正确的密钥之前,需要测试数以百万计的不同组合。

想想比特币发行的时候,只需要一个简单的算法代码文件就能生成一个有效的密钥。现在,这个活动只能通过ASIC来完成,ASIC是为计算特定算法的最优化硬件。比特币ASICs的崛起类似于出售电子金属磨床给这些锁匠,成指数的增加他们测试不同的密钥组合的能力。随着这项活动的经济效益刺激了价值的增加,锁的尺寸也增加了。

比特币锁现在已经变的巨大,这有助于网络的安全。考虑到活动本身的竞争性和概率性,同一个锁匠不太可能在一段时间内连续找到锁的钥匙。不可预测性是一个重要特征,因为它减少了一个恶意的活动人通过连续挖掘来使资金翻倍的可能性。然而,当与专门硬件相结合时,难度的增加为普通用户设置了进入门槛,最终必然转化为某种集中化。

社区的杰出成员现在正在讨论是否接受或审查ASICs的使用。ASIC制造商+矿商的合流有潜在的危险性。但需要注意的是,它确实通过数量级(当然是以牺牲去中心化为代价)来增加网络安全。

工作证明和哈希函数

如你所知,上述数学谜题是以密码学哈希函数为基础的。一般来说,哈希函数映射文件中的每一个数据,给它分配标识符,并且生成一个固定长度的输出。换句话说,使用哈希函数将任何大小的数据压缩到标准输出,这个输出被称为哈希。可以通过一个哈希函数将整个国会图书馆放在一起,然后将输出与它的哈希值进行比较; 这两个输出将具有相同的大小。

为了产出工作证明,比特币矿工使用SHA-256; 这最初是一种由美国国家安全局设计的压缩敏感信息的散列函数。在能够向区块链中添加区块之前,矿工必须使用SHA-256功能,将区块内的数据与一个特定的、未知的数字结合起来,这个数字叫做nonce。矿工需要找到一个nonce,当与一个区块内的数据结合在一起时,产生一个哈希值,该哈希值需要以目标个数的零的开始。

哈希函数对最轻微的变化都非常敏感。因此,矿工必须在10分钟内尝试数以百万计的不同的非线性组合,以便找到一个与区块合并时,以目标数个零起始的nonce。如果你仔细阅读前面的部分,你会发现,锁匠们正在努力寻找的关键是nonce。

这里写图片描述

更改已添加到区块的交易需要更改整个区块链。比特币之所以有效是因为其区块链的数据结构使其不可改变; 一旦一个区块被挖掘出来,其中的任何东西都不能在不影响整个区块链的情况下被改变。

Merkle Tree

这是通过一个叫做MerkleTree的数据结构来实现的,这种结构将每个区块中的数据组合起来,这样所有的数据都是相互依存的。正如下图,爱丽丝与鲍勃的交易生成Hash1,然后与Hash0(发生在同一时间的另一个交易的散列)生成 Hash01。 协议对每一个未经证实的交易都是这样做,这些交易将被添加到区块中,直到找到一个根哈希。

这里写图片描述

根哈希是一个区块内所有交易组成的散列。如果更改这些交易中任何微小的数据,那么根散列将会完全不同。这就是为什么术语区块链被高度普及的原因; 对于许多不同的应用程序来说,这种数据结构的不可变性是非常可取的。

在关于轻型客户端的部分中引用的区块头是将根哈希与区块链中前一个区块的区块头结合起来。这就是在区块链中将区块基本连接在一起的原因。区块头还包括其他数据片段,比如nonce,当前的时间戳和挖掘它的困难度。

6、最后,爱丽丝的交易和许多其他交易一起被添加到一个区块中。一旦这个区块被挖掘出来,鲍勃就可以下载并验证交易是否已被确认

激励机制和奖励

比特币协议有一个本地激励机制,奖励那些能够提供有效工作证明的矿工。这一数额每四年变为之前的一半。当前它是每个区块12.5 BTC奖励。 矿工们还从加入他们区块的每一笔交易中收取网络交易费用。

2009年1月比特币网络刚刚推出时,每个区块的奖励是50 BTC。正如预期的那样,截止2012年11月奖励减半至25 BTC,2016年7月降至12.5 BTC。在2140年,比特币协议将停止生成新的硬币和采矿奖励,奖励将只会基于网络费用。 届时,将有大约2100万比特币在流通。

由于比特币提供了一个以稀缺物资为基础的独特的经济结构,它极大地促进了比特币的采用。激励和工作证明POW是通过一种算法来定义的,这种算法可以精确地模拟比特币的通货膨胀。这使得比特币有可能成为未来硬币的优秀候选者,因为它的货币政策是由软件形式的数学算法决定的。

最后的评论

我第一次玩比特币的代码库是在2012年秋天,当时我还在上大学。我记得起初对它不屑一顾,我现在明白是因为无知。比特币的简单性可能非常具有欺骗性,很容易忽视它的优雅。

无知是比特币多次被宣告死亡的真正原因。毕竟,理解密码学,计算机科学和经济学的这种组合需要时间和精力,这不应该是一个惊喜。

但是一旦你得到它,它的技术辉煌是不可否认的。

我要非常感谢Andreas M. Antonopoulos撰写的《Mastering Bitcoin》。它让我开始了解比特币协议中许多未被充分认识的方面。如果您没有技术背景,我强烈推荐他的最新着作《The Internet of Money》。

英文原文地址:
https://medium.com/digitalassetresearch/a-guide-to-bitcoins-technical-brilliance-for-non-programmers-e28211e797c0

原文作者:Lucas Nuzzi

猜你喜欢

转载自blog.csdn.net/yellowfitman/article/details/81304223