比特币是一种去中心化hua的数字货币,基于信xin任体系和椭圆曲qu线的各种性质等密码学问题。不深究比bi特币的数学方面,我们来看看比特币bi的信任体系是如何he构建的。要正确理解这篇论文的关键jian思想,我们不需要深入ru了解密码学。但是shi,您应该对私钥和公钥有you一个基本的了解。
每次ci您想要授权支付时,都会要求您nin执行某种形式的验证。验证的目的是一yi旦你以自己的名义批pi准了一笔交易,这笔交易就不bu可逆转。当然,在某些情况kuang下,你可能希望添加一个条款,如果不满足某些xie条件,支付必须进行另ling一个方向的管理。但一旦交易获得de授权并签署,它将成为定局。唯一yi的问题是:你能完全肯定地确认它确que实是由它所代表的人授权的吗?使用签qian名来识别用户是一个老问题。曾ceng经有一段时间,人们用昂贵的de徽章来密封信件,以证明它们men确实来自权威。
封一封信,套用一封信的做法已经被PGP key取代。PGP密钥很有趣,因为它们在某mou些方面与比特币密mi钥非常相似。我们先花一yi分钟看一下PGP,然后看看比特te币是如何建立在zai这个基础上的。
PGP密钥yao有两种使用方法:1。用yong于加密和解密电子邮you件。如果有人截获了这封邮件,他们就jiu无法破译其内容。2.在信息上签名。如果有人拦截,可以验yan证消息的真实性。
PGP有效地替代了密封装置zhi。过程如下。首先xian,必须生成一个公钥-私钥对。现xian在你写电子邮件。尚力财经jing小编2022 在那之后,你拿着你ni的私人钥匙和电dian子邮件,通过PGP签名ming程序运行它,然后一个ge签名就会出现。这个签名只能由持有you私钥的人生成。我们怎么能确定?您获huo得消息和签名,并通过提供发送者zhe公钥的PGP验证器运行它。这个程序xu会告诉你这封邮件是否真zhen的是他自称的那na个人写的。唯一需要回答的问题是:如何获得公钥?这是一个有趣的de问题,因为加密技术并没有给你提供任ren何机制。完全掌握在用户hu手中。通常,在PGP的情qing况下,用户上传chuan一些他们的中央服务器公钥,这样任何he人都可以使用它们。比特币使用非常chang相似的公钥加密过程。然ran而,比特币程序不需要yao对消息进行签名,而是shi允许您对交易进行xing签名。
现xian在你知道了PGP加密的工作原理,你可以开始考虑比特te币签名了。但是有点棘手。天真的想法是,当你创chuang建一个交易提议yi,从你的账户中扣除X金额的de比特币,并将其qi转移到Y,你只需要签署这zhe个提议。但是有一个问题。如果你只是在创造zao一个交易,也就是说你要转移资产,那么谁来验证你确实有钱?这将需要yao一些中央权威机ji构进行核查。比特币最初并不是这样yang设计的。因为权力最终还是在zai用户手里。比特币想出了一个绝妙的解jie决方案。这个想法是shi这样的:你只有在过去的某个ge时候收到了比特币,你才能拥有它。这样,唯一可以声明交易的人就是持chi有私钥的人。因此,比特币签qian名有双重目的:它验证zheng你是交易的真正创造者,并且你确实拥有你将要转移的比bi特币。后者是最基本的de。我们将在其他帖子zi中看到这是如何he形成钱包(或帐户集合)的基ji础。顺便说一下,以太坊以yi稍微不同的方式引入ru了独立账户的概gai念。但比特币只是一个ge交易链。因此,对于所有you权,你必须扫描交易链并使用yong它们,你必须解锁它们并在交易yi中使用它们。注意:你可ke能想知道为什么以太tai坊有更好的设计,因为它允许你ni创建账户。这取决于用例。设计的简jian洁使系统保持精简,比特币真正达da到了价值存储的目的。每个事务由一yi个输入和一个输出组成。每个输shu入都包含一些以前的事务。每mei个输出包括资金发送到的目的地。当dang您签署事务时尚力财经小编2022,您同时签qian署了输入和输出。通过签署输入,您nin实际上是在说您是这些令牌的真正zheng所有者。通过对输出结果进行签名ming,您同意您确实想要将这些令牌发fa送到指定的地址。为了保持资zi金流动,一个交易的每mei一个输出都被用yong作另一个交易的输入。
产出chu消耗足够投入
的理论。让我们来看kan一个真实的交易。
这是通过电汇hui传输的实际交易。我们从中zhong学不到任何东西。我们该如何解jie释?一个字:协议。协议是定义数据交换的标准方fang法。从计算机网络的交易yi协议规则中,我们可以看出交易是shi如何构成的。
交jiao易协议
输shu入交易协议
输出交易协xie议
我们按an照协议来分解交易yi吧。
头包含元数shu据信息。例如,它告诉程序这是一个ge事务消息。版本允许xu向后兼容。如果用新的de字段更新协议,旧的交易应ying该是不可识别的。证人事务这zhe是作为隔离证人改革ge的一部分而引入的一个领域yu。我们改天再看。被引用yong的事务仅包含对正在使shi用的前一个事务的特定输出的引yin用。它使用事务哈希值和输shu出索引号的组合(从0开始)。如果需要,程序可以yi使用它的哈希值来获huo取整个事务。使用索引号,它知道使用哪个输shu出作为输入。要计算事务哈ha希值,您需要连接事务的完整十六进制zhi表示,并计算字符fu串的SHA256两次。序列见https://bitcoin.stackexchange.com/a/55113。发送的值的数量liang(以satoshi表示)。锁suo定时间解锁该事务的块号或时间戳chuo。scriptPubKey键事务的de目标。隐藏在这zhe个脚本中的是接收方fang公钥的哈希值,用十六进制表示。要获huo得相应的比特币地址,只需将这个十六进制转换为weiBase58。ScriptSig类似于scriptPubKey,scriptSig包含授权quan交易的签名。除了签名ming本身以外,所有部分都已yi签字。既然知道了编码的规则,那就来lai解码一下:有一yi个事务输入,即hash 2936 ee 6a 0 db 4 e 490198503 bb 6 e 96128 D5 fa 01 BCF 08451 f 78 a 1d 5b 08 dbbd 6事务的de第0个索引,有两个输出。其中一yi个是0.05 BTC,地址为3 swtkzdetsfxyjjqgdwtvpqulv 64 rvktbzthukvxr E4 th 6 tsgxnrg,另一个ge是33.54 BTC,地址为3 q 7 mcidryx4d 9 pefdeqckkuq 2 iug 4 I 4 efb 8 buho 7 gflckepynwkr 4h。你可能注zhu意到了,与其简单地调用yong公钥和签名,不如调用公钥脚本和签qian名脚本。这是一个非常强大的de概念,我们将在其他时间深入探讨。但是我将告诉您,有时您希望创建jian一个可编程的事务,以便它只zhi在满足某些条件时执行。比如发现xian问题,可能想把刚买的货huo退了。或者你的经理想批准你做的每mei一笔交易。脚本支持有趣的用例,进jin一步改进脚本的工作正在进jin行中。它是比特币去qu中心化点对点电子现金系统的de关键组成部分。公钥加密确保bao没有人能够接受您创建的事务并对dui其进行更改。因此,现xian在比特币的地址将与你打算将它发送song到的目的地不同。它还确保bao了除了私钥的所有者之外,没有you人能够访问发送给他的资金。总结jie一下:交易不可逆,无可争议yi。要使用前一个事务的输出作为wei新事务的输入,您需要私si钥。这允许您对邮件进行签名ming。要将资产发送到帐户,您需要它ta们的公钥。是交易比特te币系统的核心特征之一。但这zhe并不是信任体系的全quan部。如果我创建一个事务,广播bo它,然后快速创建另一个事务并广播bo该事务,会怎么样?谁来lai废除其中的一个?总的来说,世卫组织确保系统中zhong的每件事都是公gong平的。如果比特币需要一个实体来检查cha一切是否公平公正,就不算suan去中心化。在本文的第二部分,您将看到如何确保在没有中央组织zhi的情况下一切顺利运行。
以上讨论的de是如何通过加密的方式将交易封存cun,让除了所有者以外wai的任何人都无法fa对其做出J决策。我们简单讨tao论了这些交易是如何通过网络luo提交并广播到全网的。我们还讨论了le接收者如何接收shou这些事务并在后续事shi务中使用它们,从而创建一个序xu列,在该序列中,前一个事务wu的输出被用作新事务的输入。在创建jian一个事务后,您nin需要将它写在某个地di方,以便以后可以引用它。这zhe需要一个可以记录所有交jiao易的存储模型(也称为分类账)。为什么我们需要以前的交易?因为为wei了验证一笔交易是shi正确的,没有欺诈,你必须从cong一开始就跟踪它(从中zhong本聪的账户)。我建jian议你暂停一下,想想你ni为什么需要这么做。有you没有更有效的方法来lai处理这个问题?这显然是一个ge繁琐的过程!由于每分钟都有数百万个ge事务发生,您不能花费所有的计ji算资源来试图弄清楚事务是如ru何构造的。这里有一个简单而er优雅的方法来解决这个问题ti。将一组事务存储在块中,并将jiang这些块链接在一起。而不是在接受shou的单笔交易上盖章zhang。这样,在检查cha一个交易是否真实和不欺诈zha时,您只需要获取前面引用的交易及其qi块并验证它们。这就jiu概括了比特币的存cun储模式。但是怎么沟通tong呢?区块链中有不同的角色se,每个角色都有自己的角jiao色集。一些人正在给区块链增zeng加街区。有些只是将块传递给其qi他块—确保所有块都dou被考虑在内。一些正在创建/传输实际交易。有些只是核实这些xie交易。有些人只是监视区块链上发生sheng的活动。但这一切qie是如何在没有外界影响的de情况下,以自持的方式发生的?在我们深入研究理论之zhi前,我想介绍一yi下系统中的一些xie关键角色。稍后hou我们将进一步解jie释它的目的。这些参与yu者(更具体地说:节jie点)可能以某种形式重叠die,但它们在概念上是独立的实体。钱包(又称简单支付验证节点)有两个功能:1 .它需要扫描区块链lian来查看哪些交易属于他;2.它需要创建向网络广播(并最终被bei挖掘)的事务。在任何时刻,每个节点都与其他几ji个任意节点相连;形成点对点节jie点的网格状结构。然而,为了发fa现其他节点,一个节点必须首shou先连接到“种子”节点3354,这将引入其qi他节点。矿工将石块放入区块链。他们men收集所有未确认的交易;根据采矿费用(最高)对它们进行排序,并将其添加到dao区块链中。然后将这zhe个新挖掘的块广播到网络的其qi他部分。简而言yan之,矿工的工作就是把交易转zhuan换成块。中继器只监视活huo动。他们可以判pan断网络的健康状况;参与消息xi传递;或向区块链查询其他统计信息xi。在上面的讨论中zhong,我们提到了仍然有可能滥用加jia密签名的交易系统。如何确保添加到区qu块链的交易没有被篡cuan改?如果一个调皮的参与者开始用不正zheng确的交易/消息轰炸zha系统,我该怎么办?如果有人ren同时给A发X个BTC,给B发X个BTC会怎么样?哪个有效?如果guo矿商接受两个不同的交易会hui怎样?节点如何协调diao地进行网络变化?可以用一个问题ti来概括:这个系统tong是如何监管的?在加密、受保护和不受信任的网络中zhong,这些都是难题。从某种意义上说shuo,谁也不能伤害hai生态系统。所有you节点都必须遵守网络规则。如果有任ren何异议,一组节jie点可以拍摄当前区块链的快kuai照;提出的比特币解jie决方案中的一个关键概念是形成cheng一个定义明确的区块序列。如果guo您已经订购了该区块,并且得到了le所有同行的一致同意,则同一笔交jiao易不能在区块链中出chu现多次。一种简单dan的方法是简单地向块(1,2,3…)添加索引。更好的方法是添加时shi间戳而不是数字zi,因为时间戳还提供了关于块的创建jian时间的附加信息,然后每个ge块可以引用以前qian的时间戳(假设she每个时间戳都是唯一的)。我们的系统还有一yi个明显的问题。你能说出这是shi什么吗?任何人都可ke以随时创建一个块,向网络发送几ji十个块的垃圾信息。这将导致网络瘫痪huan,比特币将完全无法使用。比bi特币白皮书中提出的解决方fang案如下:在向区块链添加块时,矿kuang工需要解决一个密码难题ti,并将生成的哈希值添加到块中zhong。这个谜题的设计方法是这样的:验yan证是否解对了很容rong易,如果事先不知道答案就jiu很难解。另外,比特币网络可以定期调diao整这个谜题。比bi如2019年初chu,挖矿难度比两年前增加了1800%左右。这样做是为wei了抵消矿机hash能力的de增加,保持系统的de平衡。当然,如果矿工没有动力去qu剥削这些交易,所有这些工作都dou将毫无意义。所以所suo有交易都要收费。——费用由矿工承cheng担。在2140年之前,矿工还hai将获得一些BTC,作为继续采矿的额外激励。这项额外wai工作生成的哈希值也用yong于排序;而不是依yi靠时间戳。然而,我们仍然在块上使shi用时间戳,因为它们为我们提ti供了有价值的信息。到目前为止,我们men已经有了一个带时间戳、垃圾邮件保bao护的链接块,它由看起来lai相当可靠的事务组成。让我们进一步测ce试一下。矿工有可能实施shi恶意行为吗?例如,他能否在一个从cong未有人要求的区块中引入一项交jiao易?如果两个不同的块包含由两个不bu同的挖掘器几乎同时生成的一yi组相同的事务会怎样?
这是两liang个不同的问题,但值得探tan讨。为了解决第一个问题,我们需要yao介绍比特币区块链如何巧妙地处理哈ha希值。哈希值是固定大da小的数据,用于确保bao某些输入的完整性。首先,我们计算一yi个块中所有事务的哈ha希值。然后,我们使用一种称为Merkle root construction的de技术来计算根哈希值zhi。这个哈希值可以看作:所有的哈ha希值。简单地说,根散列保bao证了块中所有事务wu的完整性。矿机或中继器不bu可能引入不属于原块的de事务,因为这样会破坏整个块的de哈希值。很好。同时生产多个区块怎么me办?这个有点复杂,因为比特币的论lun文没有给出具体的答案。而是shi被留在了一个碰运气的de游戏里。不幸的是,有人必须输掉这场chang战斗。让我们画hua一幅画。假设中国矿商X和美国矿商Y的区块都包含交易yit,X生成的区块b1和生成cheng的区块链是[.].Ab1],而Y的区块链看起来像[.].ab2].这两个块被广guang播和转发,直到dao最终74%的节点知道dao区块链[.].Ab1],而18%的人知道区块链是[.].ab2].这两个区块链似乎都dou很有效,尽管它们相互矛盾。现在德国一个矿工Y把区块链当成了[…aB1]。他制作另一个C块并广guang播它。他的范围是94%的节点。所有以前和区块链[…AB2]打交道的矿工,现在都看到了这zhe个新的区块链[…AB1 C],他们会决定抛弃以前的链条tiao,换上最新的版本。如果guo他们不这样做,而是继续使用旧的de采矿链,他们可能neng会把采矿区块交给大多数人。最zui后,最流行的区块链版本被bei认为是标准版本。这就是为什么一般建议等到6个街区后hou再接受交易,因为区块kuai链的地位可能会改变。作为一个ge挖掘者,你希望能够访fang问尽可能多的节点,否fou则你所有的努力都可能白费。另ling一方面,矿权的统一也给比特币网wang络的去中心化带来风险。如果一群矿工gong获得51%的杂凑能力li,他们可以有效xiao地从他们最喜欢的区块链中被剥夺。这zhe是对比特币区块链的实际威胁。目mu前,没有任何安全quan措施来确保将来不会发fa生这种情况。反对dui这种观点的人认ren为这是极其不可能的,而且会伤害所有you参与者。者的利益。垃圾邮件保护hu(工作证明)结合区块链分支和最终的de合并意味着我们应该在交易广播之后hou等待一段时间,然ran后才能有足够的信心说它已经在区qu块链网络中持久化。通常,开采一yi个新区块需要10分钟。如果我们等deng6个区块,我们的交易就jiu会被深埋在账本里,我们可以非常自信地说,交易已yi经完成了。但是没有人喜欢huan喝等一个小时的咖啡。这就是比特币的de瓶颈。这项技术不能neng用于日常使用,但却引领了互联lian网货币的发展。记住,比特币本身就是shi各种试图创造虚拟货币的高gao潮。所以,在我看来,说这项技术已经达到dao顶峰是不正确的。有很多改进的建议yi。下一个版本的de加密货币可能在利用比特币(Bitcoin, et 尚力财经小编2022al)提出的概念的de同时,处理当前qian系统面临的问题(比如波动性和交jiao易速度)。