您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 行业资讯 > 正文

浅析比特币的设计初衷、实现原理和交易跟踪

发表于:2018-03-14 作者:沈星繁 来源:51CTO

本文的目标是使读者对比特币有一个感性认识,对读者的技术水平不作要求。

与本文相关的内容有:

“比特币被保存在数字钱包中”,“区块链技术可以被用于传递资金”。类似这样的内容越来越多的出现在了大众媒体上。对于一般人来说,这些内容似乎复杂难懂,甚至会形成误导。阅读本文可以帮助你自如的参与到有关比特币的话题之中,而不再是一个”不明觉厉“的听众。

比特币简介

尽管人们称比特币为去中心化的数字货币,但我更愿意将其形容为一种 数字资产。对于一种陌生的货币,人们总会想知道其依托的政府,以及设定其利率的机构是什么。但要理解比特币,第一步就是抛开这些有关”货币“的成见。

作为一种数字资产,你可以购买,拥有,或者转让比特币。目前(2015年9月)已经产生了约1400万个比特币。比特币以每10分钟25个的速度增加,最大限额为2100万个。按照这个速度,最后一个比特币将会在2139年末产生。

通常,比特币账户发起一笔交易后,在几秒钟内就能收到来自全球范围内的确认,大约一小时后这笔交易就可以被认为是安全完成了。比特币有相应的价格(通常以美元为单位,但也可以换算为其他任何东西)。与石油和黄金类似,这一价格是由比特币交易所中的市场供求关系决定的。

比特币的设计初衷

2008年,中本聪发布了比特币白皮书,其中关于比特币的定义是:

一种基于P2P技术的电子现金,允许支付款项通过网络直接转让到目标账户,而不必经由第三方金融机构操作。

所以,电子现金的意义就是:它是一种无记名资产,就像你口袋里的现金一样,你可以随意使用它而不需要得到第三方的许可。

在比特币之前,并没有严格意义上的电子现金:尽管资金在银行或 Paypal 等金融机构中以数字的形式存储,但我们必须遵守这些机构的条款才能设立账户,转移资金也必须通过这些机构进行。

为什么要使用比特币?

我认为比特币和国际上承认的其他货币类似,只不过它依托的是互联网,而不是任何具体的地理位置。换句话说:如果互联网是一个国家,比特币就是它的货币。这是我们第一次拥有完全数字化的资产,它不依托于任何机构,任何人都可以向现金那样简单的使用它。

比特币交易 

比特币可以无视地理位置或者国境的限制进行交易 。比特币支付速度相对较快 - 初步确认可以在几秒钟内完成,并在大约一小时内得到”清算“。在正常金融体系缺失的情况下,比特币不失为经由互联网进行价值交换的一种有效手段。

潜在使用场景 

由于传统的实体银行天然带有成本压力,因此对于某些地区,它们不会提供足够的金融服务。此时比特币就可以成为一种有效的补充手段。此外,一些国际交易可能存在较大风险,或者需要较长时间(通常可达数日),而且还需要人工手续和缴纳税金。使用比特币则可以避免这些烦恼。 有些人在销售数字商品时可能希望使用数字货币。比特币也可用于小额交易场景(数额对应人民币在”分“的级别),当前基于信用卡的收费结构对于这种情况的处理不够简单。当然还有更多的用途等待我们发现。

价格波动  

就像其他货币一样,比特币的价格也会波动。比起其他货币,比特币的价格波动相当大(尽管波动率在下降)。因此如果你用当地货币来计算你的财富,购买比特币本质上是一场对其未来价格变化的赌局。你可以在Tradeblock的网站上看到历史价格曲线。

货币兑换  

和其他货币类似,假如你想把手上的货币(比如说英镑)兑换成比特币,你必须找到一个卖家和你交易。显然这一过程伴随着额外支出:有时候它们以手续费的形式出现;也可能直接被计入了兑换价格之中。随着时间的推移,比特币交易所将会在世界各地出现,兑换比特币的费用也会越来越低。

保持理性

很多时候比特币被形容为“交易迅速”,“交易免费”或“低交易成本“的。虽然对于只涉及比特币的交易来说确实如此,但在其他情况下保持理性仍然是必要的。一旦涉及到其他传统货币,货币转换所产生的额外兑换费用仍需仔细考虑。

尽管比特币被大众广泛使用还不太现实,但对于新兴经济体中,没有银行或Paypal等服务的自由开发者/设计师来说,比特币可以帮助他们将提供劳动力和获取报酬完全数字化。当然,如何将比特币转为当地货币的问题仍然需要解决,但这比如何在没有足够金融服务的情况下获得报酬简单多了。

值得注意的是,虽然比特币催生了许多其他类似的加密货币,如莱特币(Litecoin),狗狗币(Dogecoin),但由于其网络效应和相对较高的安全性和健壮性,比特币仍然是最受欢迎的加密货币。

比特币的实现原理

比特币交易经由一个庞大的计算机网络完成。这一网络验证并追踪每一笔交易,随后将其添加到一张列表中,这张列表记录了全部的比特币交易。

交易跟踪:比特币区块链

有一个名为“比特币区块链”的文件(当然,被分割成了若干个部分),被保存在世界各地的数千台电脑上,包括我家里的笔记本电脑。当你看到“区块链”这个词时,可以联想一下“数据库”或者是“列表”。有关区块链的简单介绍,请参阅区块链技术的简介

我电脑中的区块链文件截图。你可以看到区块链文件被分割成了多个部分,每个部分都是 134MB,总共占据了将近 50GB 空间。

区块链文件包含所有的比特币交易历史,即从一个账户到另一个账户的比特币交易信息。这通常被称为比特币账簿,类似于银行账户的交易记录。

简化的银行分类账和比特币账簿,它们非常相似

比特币网络

所有保存区块链文件的计算机还同时运行着一个可以联网的程序。通过该程序,这些计算机组成了一个可以互相联系的网络,并不断交换如下信息:

  • 新的交易(截至写作时,平均每秒钟就有一笔新的比特币产生,当然这些交易并不是稳定产生的)
  • 更新比特币区块链(每隔10分钟左会有一个包含有效交易的“页”或者说“区块”产生。随后区块会被确认并分发至网络上的其他计算机)

当你进行一笔新的比特币交易时,一个交易指令会被发送给比特币网络上的其他计算机。网络上的计算机会验证这一指令并将其转发给其他计算机。经过一段时间后,你的交易信息会被包含在某个区块内,随后被添加到网络中所有计算机上的比特币区块链文件中。

点对点网络(P2P)

比特币数据的分发基于 P2P 而非 C/S 模型。P2P 就像是一个朋友圈,每个人都会向周围的人分享新闻(关于新交易和新区块),最终这些信息会传达给网络中的每个人。C/S 模型则正好相反,后者更像是传统组织中的上下级关系,上级只负责分发信息,是所有信息的来源;下级只负责接收信息。一旦上级出现了问题,整个信息分发就会失败。

P2P 模型比起 C/S 模型来说有一个巨大优势:对于 P2P,整个网络并不依赖于可能会出问题的一个中心点。

C/S 模型与 P2P 模型对比

比特币如何储存?

每个比特币都会和一个“比特币钱包地址“相关联,而比特币区块链负责跟踪每个比特币的具体归属。事实上,用于管理地址,余额和交易的比特币”钱包“应用并不实际存储比特币,它只存储进行交易所需的密钥或密码。

比特币帐户:钱包地址

在银行中,你可以通过建立多个账户的方式来分开存钱;在比特币中对应的”账户“就是钱包地址。比特币钱包地址与银行帐号类似,但也有一些差异。

下面是一个比特币钱包地址的例子:1MKe24pNsLmFYk9mJd1dXHkKj9h5YhoEey。就像使用银行账户一样,如果你要从其他人那里收款,你需要提供你的比特币钱包地址,这样付款方才知道应该向谁付款。下图是一个典型的进行比特币交易时的聊天记录:

BTC 或者 XTC 都是比特币的官方缩写(原文使用 BTC 表示比特币),就像 GBP 代表英镑一样

比特币钱包

在银行中,我可以使用同一个用户名/密码控制多个账户(例如工资账户,储蓄账户,税务账户等)。同样的,一个比特币钱包应用可以控制多个比特币钱包地址,显示它们的余额或者用特定钱包地址发送和接收比特币。

为了获取准确的钱包信息,你需要连接到网络或者某个区块链文件。随后钱包会读取区块链里面的交易记录并计算出每个钱包地址相应的余额。

你可以使用比特币钱包的创建钱包地址功能获得用于收款/付款的地址。比特币钱包还带有许多增加易用性的功能等待你去发现。

比特币是如何被发送的?

比特币交易

每个比特币地址都有一个用于付款的私钥。私钥可以被看作是一种密码,只不过私钥是通过数学方法由地址计算出来的。因此私钥和传统密码或者 PIN 不同,它具有唯一性且不可更改。

对于之前提到的地址(1MKe24pNsLmFYk9mJd1dXHkKj9h5YhoEey),其对应私钥为:5KkKR3VAjjPbHPzi3pWEHVQWrVa3C4fwD4PjR9wWgSV2D3kdmeM。任何拥有这个私钥的人,包括现在正在阅读的你,都可以从这个地址付款。

私钥既不是由某些机构颁发的(例如银行),也不是由个人随意编造出来的,而是由钱包程序自动地通过地址计算得出。

私钥

显然私钥需要被妥善保管且永不公开。由于私钥无法被更改,记住长长的私钥是相当令人痛苦的。因此大多数钱包应用会用你的密码对私钥进行加密。随后每当支付时,你只需要输入你所设置的密码即可。

钱包并不会实际“存储”比特币,事实上比特币钱包存储的是允许你转移或“花费”比特币的私钥。因此复制钱包并不会使你拥有的比特币数量增加一倍,而只是生成了一个拥有相同密钥的副本。如果有人设法复制并读取你的钱包,他们甚至可以直接清空你的账户。这就像你把银行保险柜密码告诉了另外一个人,你们都可以打开保险柜,但保险柜本身并不会被复制。

比特币钱包只保存私钥,而不是比特币!

比特币付款的流程

比特币付款的实质就是将一定数目的比特币从付款方的地址上解除关联,然后将它们与收款方的地址相关联。

你很容易就可以想到一个付款指令所应该包含的内容:

  1. 发送比特币的数目
  2. 付款方钱包地址
  3. 收款方钱包地址

数字签名

付款指令生成后,程序会使用付款方地址对应的私钥对其进行加密。这一数字签名用于证明付款操作的发起者是付款方钱包地址的所有者(正常情况下只有钱包所有者才知道私钥)。

签名后的付款指令会被钱包应用发送到网络上的其他所有计算机(称为“节点”或者“验证节点”)。

验证节点  

当第一台计算机收到付款指令时,它会检查一些技术细节以及业务逻辑细节(例如,该付款操作是否试图凭空创建比特币?这些比特币是否已经发送到了其他地方?等等)。

验证节点进行的技术细节和业务逻辑验证

如果这些测试全部通过,那么该计算机会将指令转发给网络上的其他节点,每个节点都会对收到的指令运行相同的验证测试。请记住,在这个网络上,节点之间不会相互信任,因此它们会对所有收到的指令运行相同的测试。最终,网络上的所有节点都收到了这笔付款,且它在这些计算机上的状态都被显示为“未经确认的交易”。为什么是未经确认的?因为这笔付款虽然已经通过了验证,但它尚未添加到比特币账簿中。

比特币是如何被跟踪的?

交易记录是如何被添加到每个人的区块链上的?

除了传递彼此之间交易的信息外,某些特定的节点(网络里的一部分的计算机)还可以将这些交易以块的形式添加到区块链中。这就是大家所熟知的“挖矿”。这一操作这通常被描述为“通过解决复杂的数学计算来获得比特币”。事实上,这个过程并没有这么复杂,你甚至可以在没有计算器的情况下手动完成这个任务; 它只是故意采用了许多暴力的计算步骤。

挖矿  

挖矿实际上是一种猜谜游戏,获胜机会的大小取决于你的计算机性能在所有正在运行的计算机中的排名。最先猜到正确数字的计算机会生成并分发一个新的区块。网络上的其他计算机都会对收到的区块进行快速验证,确认收到的区块合规后将其添加到自己的区块链中。矿工在挖矿这一过程中能收获什么呢?每个区块的成功提交者都能获得一定数目的比特币奖励(本文写作时是每个区块奖励 25 个比特币,大约每 4 年减半,2016 年 7 月时降为每区块奖励 12.5 个比特币)。大约每 10 分钟就会有一个新的区块生成。

点击此处了解更多关于比特币挖矿的内容。

这一奖励机制促使了比特币挖矿产业的火热,甚至催生出了专门生产比特币挖矿硬件(称为 ASIC)的公司。这些硬件专为数字密集运算设计,能够快速解决猜数字一类的问题。

比特币在设计上要求生成区块的时间稳定在 10 分钟左右,由于交易记录被存放在区块中,因此这也是一笔比特币交易被最终确认所需要的时间。

慢一点,更安全

通过在设计上故意减缓区块的生成速度(事实上,绝大多数时间都被耗在了猜测数字上,生成区块这一操作本身是相当快的),而且使生成区块这一操作需要大量算力投入,攻击方伪造区块的成本将大大超出其收益。

更重要的是,伪造的区块仍然需要通过其他计算机的验证,这就意味着即使是伪造的交易,其业务逻辑也必须是正确的,凭空创造比特币是不可能的。

比特币安全

本节分为两个部分:

支付安全

  1. 区块控制
  2. 支付安全  

就像上文提到的,付款方钱包地址的私钥是进行比特币支付的唯一凭证。你需要在私钥被盗的风险和备份以防丢失的风险之间平衡。曾有人把存有私钥的旧电脑扔掉,而那个私钥控制着价值数百万的比特币。

区块控制  

区块控制包含两个部分。首先是由一些专业节点执行的区块创建(“挖矿”); 其次是由所有节点进行的区块验证。就像让一大群会计师和审计师各自独立审计同一本分类账,比特币的愿景是让成千上万的独立节点参与验证以保持系统诚实可靠。区块交易的独立和多重验证可以有效避免出现单一个人或团体控制整个网络区块链的情况。

然而,在实践中,矿工们联合进入“矿池”,以便更频繁地产生区块。在矿池中,一个人创建候选块,其他人开始“挖掘”它。如果由任何参与者成功算出区块,获得奖励会和矿池分成。这样每个参与者的都能更频繁的获取奖励,但是数量会减少,就像彩票联合会一样。这种稳定的资金流更有利于设备成本的支付。因此,矿池所有者对比特币网络有更大的影响力。这一影响力包括区块的创建,协议的更改,甚至是潜在的重写区块的可能。

简单的说,如果你能够重写最近的区块,你就可以“撤回”你的付款,也就是双重付款攻击。假设你向收款方发送了一些比特币,并且这笔交易已经被写入到了区块之中。接下来你又创建了多个不包含这笔交易的区块,根据最长区块链原则,系统将抛弃之前的区块链,转而选择你所创建的区块链。当然你还需要覆盖掉之前那笔交易,你可以创建一笔金额相同的交易,只不过收款方是你自己或是你的朋友。如果你将这笔交易写入了你所创建的新区块链之中,那么你之前交易就会被覆盖掉。这个链接里有一个双重付款攻击的例子。点击这个链接可以了解更多有关区块链不变性的内容。

这种“洗牌”的能力随着你投入挖矿的算力增加而增加,但随着你想替换区块链的长度增加而减少(越老的区块越难以替换)。由于每个区块都需要一定的算力投入,替换区块就意味着你需要与整个网络的算力对抗。

欺诈风险

说到比特币的安全性,不得不提到传言被盗的 Mt Gox,一个早期的比特币交易所。比特币交易所是提供购买或出售比特币服务的网站。如果你想购买比特币,你首先要将相应的资金打入交易所的银行账户。当交易所确认资金到达之后,你才可以从交易所的卖家处购买比特币。同样地,比特币卖家在出售比特币之前需要将待出售的比特币打入交易所的钱包里,随后才能进行出售。交易所作为代管方,同时保管资金和比特币,等到交易完成后才允许转出。

目前还不确定 Gox 发生了什么,但传言包括私钥被盗,审计出现问题,允许无抵押交易等。就像你们不会把花旗银行资金滞留或资金被盗问题怪到美元头上一样,Gox 资金被盗一事和比特币网络本身并没有关联,而是交易所在实际操作上的问题。

什么是去中心化?

让我们回到“比特币是一种去中心化的数字货币”。我们已经看到,比特币是数字化的,但并不算是一种真正的货币(尽管比特币很易于使用,也有一个由市场决定的价格)。那么什么是“去中心化”呢?

分布式验证 

“中心化”意味着网络中有一个中心控制点;“去中心化”则相反,网络控制权由所有参与者共享。在比特币网络中,每个参与者可以成为验证节点或区块的创建者。比特币规则的制定遵循“少数服从多数”,每个参与者根据其算力都具有相应的投票权。只要准备好足够的资金去购买算力(包含硬件,电力和维护费用),任何人都可以成为验证节点并获得更高的投票权。因此,比特币网络的规则只由所有验证节点的共识制定,而非由单一的某个机构制定。

验证的规则(一个有效的交易应该是什么样的?)被写入到所有验证节点都运行着的软件中。

开源代码  

代码开源意味着每个验证节点都可以确切地看到他们正在运行的程序的源代码。最常用的版本(称为'参考实现')存储在这里。任何人都可以为参考实现贡献代码,不过提交的更改还需要经过社区维护者的检查才能合并到参考实现里。

从理论上讲,只要符合比特币的技术和业务协议,任何人都可以自己实现一个比特币客户端。例如,你可以编写你自己的比特币客户端,拥有更酷的特效或更友好的界面。但是,如果你想更改某些协议规则,则需要说服大多数验证节点(矿工)使用根据新规则编写的客户端。以下是对技术协议进行了一些更改的示例版本

改变规则

综上所述,只要你达成多数共识就可以改变规则(有流言说比特币 2100 万枚的上限是无法更改的,事实上,只需要一行代码就可以修改这个上限,然而你必须说服比特币网络上的大多数人执行你的规则)。让其他矿工同意运行你的代码才是真正的挑战,因为他们已经为老版本投入了大量资金,并不愿意接受任何可能损害他们挖矿奖励的东西 - “火鸡不会为圣诞投票”。

结语

现在你可能已经猜到,比特币远远不止我上文提到的内容。为了给出一个简单的介绍,我不得不将许多复杂精细的概念简化。但我仍然希望你能通过这个博客学到更多比特币相关的知识,例如挖矿数字令牌以及更底层的区块链技术……

原文链接:https://cloud.tencent.com/developer/article/1055228