四、如何存储和使用比特币
4.1.简单本地存储
让我们从存储比特币最简单的方式开始:简单地把它们放在本地设备上。总结一下,花一个比特币,你需要知道一些公开信息和一些秘密信息。公开信息是区块链上的信息——硬币的身份、价值等等。秘密信息是比特币的所有者(大概就是你)的秘密密钥。你不需要太担心如何存储公共信息,因为你总是可以在需要的时候检索它。但是秘密签名密钥是您最好跟踪的东西。所以实际上,存储你的比特币就是存储和管理你的密钥。
存储比特币就是存储和管理比特币密钥。
当弄清楚如何存储和管理密钥时,应该记住三个目标。第一个是可获得性:当你想花你的硬币的时候,你能够真正地花掉它。第二是安全性:确保没有人能花你的硬币。如果有人获得了使用你的硬币的权力,他们可以把你的硬币寄给他们自己,然后你就不再拥有这些硬币了。第三个目标是方便:管理你的钥匙应该相对容易。可以想象,同时实现这三个目标是一个挑战。
不同的密钥管理方法在可用性、安全性和便利性之间提供了不同的权衡。
最简单的密钥管理方法是将它们存储在您自己的本地设备上的文件中:您的计算机、电话或其他一些您携带、拥有或控制的小工具。这非常方便:拥有一个智能手机应用程序,只需按几个按钮就可以消费硬币,这是无与伦比的。但是这个选项对可用性或安全性来说不是很好——如果你丢失了设备,如果设备崩溃,你必须擦除磁盘,或者如果你的文件被破坏,你的密钥丢失了,你的硬币也丢失了。安全方面也是如此:如果有人偷窃或闯入你的设备,或者用恶意软件感染它,她可以复制你的密钥,然后把你所有的硬币发给她自己。
换句话说,将您的私钥存储在本地设备上,尤其是移动设备上,就像是将钱放在钱包里一样。有一些零花钱是有用的,但是你不想随身携带你一生的积蓄,因为你可能会失去它,或者有人可能会偷走它。所以你通常做的是在你的钱包里储存一点信息——一点钱,而把你的大部分钱放在别的地方。
钱包
如果在本地存储你的比特币,你通常会使用钱包软件,该软件可以跟踪你的硬币,管理你的密钥细节,并通过一个漂亮的用户界面使事情变得方便。如果你想把价值 4.25 美元的比特币送到当地的咖啡店,钱包软件会给你一些简单的方法。钱包软件特别有用,因为你通常想要使用许多不同的地址和与之相关联的不同密钥。回想一下,创建一个新的公钥/私钥对很容易,您可以使用它来提高您的匿名性或隐私性。钱包软件给你一个简单的界面,告诉你钱包里有多少钱。当你想花比特币时,它会处理使用哪些密钥、如何生成新地址等细节。
编码键:Base 58 和 QR 码
要消费或接收比特币,你还需要一种与对方交换地址的方式——比特币要发往的地址。有两种主要的方法被用来对地址进行编码,以便它们可以从接收者传递到消费者:作为文本串或作为 QR 码。
为了将一个地址编码成一个文本串,我们获取密钥的位,并将它们从二进制数转换成基数为 58 的数。然后我们用一组 58 个字符把每个数字编码成一个字符;这被称为“58 进制记数法”为什么是 58?因为这是可以用作字符的大写字母、小写字母和数字的总数(减去一些可能会混淆或看起来像另一个字符的数字)。比如大写字母“O”和零都去掉了,因为太像了。如果有必要的话,这允许通过电话读出编码的地址,或者从打印的纸上读出并输入。理想情况下,通过我们现在讨论的 QR 码等方法,可以避免这种手动通信地址的方法。
1a 1 zp1 EP 5 qgefi 2 dmptftl 5 slmv 7 div FNA
在创世纪区块收到第一个比特币区块奖励的地址,base-58 编码。
编码比特币地址的第二种方法是 QR 码,一种简单的二维条形码(图 4.1 )。二维码的优势在于,你可以用智能手机给拍一张照片,钱包软件可以自动将条形码转化为代表相应比特币地址的比特序列。例如,这在商店中很有用:结账系统可能会显示一个二维码,你可以通过扫描该码并向该地址发送硬币来用手机支付。它对于电话到电话的转移也是有用的。
图 4.1。代表实际比特币地址的二维码。请随意给我们发送一些比特币。
虚荣的地址
一些个人或商人喜欢有一个以一些人类有意义的文字开始的地址。例如,赌博网站 Satoshi Bones 让用户向位置 2-6 包含字符串“Bones”的地址汇款,如 1 boneseet-cabpjlzab 1 vkfgysy 6 zqu 3 sx(所有常规地址都以字符 1 开头,表示 Pay-to-PubkeyHash。)
地址是哈希函数的输出,哈希函数产生看起来随机的数据,那么字符串“bones”是如何出现在地址中的呢?如果 Satoshi Bones 只是简单地编造这些地址,缺乏反转哈希函数的能力,他们就不会知道相应的私钥,因此不会实际控制这些地址。相反,他们反复生成私钥,直到他们幸运地找到一个散列到这个模式的私钥。这样的地址叫做虚空地址,有工具可以生成。
加速虚位地址生成
在比特币中,如果我们称私钥为 x ,公钥就是g^x。指数运算表示所谓的“椭圆曲线群中的标量乘法”地址是H(g^(x)),公钥的哈希。我们不会在这里讨论细节,但是取幂是地址生成中非常耗时的步骤。
生成虚假地址的简单方法是选择一个伪随机的 x ,计算H(g^(x)),如果结果地址无效,则重复上述操作。一种更快的方法是,如果第一个 x 失败,尝试 x + 1,并继续递增,而不是每次选择一个新的 x 。那是因为g^(x)+¹=g g^x,我们已经计算过 g ^(x) ,所以我们只需要对每个地址进行一次乘法运算,而不是取幂,这样快多了。事实上,它将虚位地址的生成速度提高了两个数量级以上。
这需要做多少工作?由于每个字符有 58 种可能性,如果你想找到一个以特定的 k 字符串开始的地址,你将需要平均生成 58 个 ^(k) 地址,直到你幸运为止。因此,要找到一个以“bones”开头的地址,需要生成超过 6 亿个地址!如今,这样的搜索可以在普通的笔记本电脑上完成。但是随着所需名称中每个额外字符的出现,搜索变得更加困难。寻找一个 15 个字符的前缀将需要不可行的计算量,并且(在没有发现底层散列函数中断的情况下)应该是不可能的。
4.2。冷热储存
正如刚才提到的,在你的电脑上存储比特币就像把钱放在你的钱包里一样。这叫热储。这很方便,但也有些冒险。相比之下,冷库离线。它被锁在某个地方,没有联网,而且是存档的。所以冷藏更安全,更有保障,但当然没有热储方便。这就好比你身上带着一些钱,但是把你一生的积蓄放在一个更安全的地方。
要有单独的热存储和冷存储,显然你需要为每一个都有单独的密钥——否则,如果热存储被破坏,冷存储中的硬币将很容易受到攻击。你需要在热面和冷面之间来回移动硬币,所以每一面都需要知道对方的地址或公钥。
冷存储没有联机,因此热存储和冷存储无法通过任何网络相互连接。但好消息是,冷库不一定要在线才能接收硬币——由于热库知道冷库地址,它可以随时向冷库发送硬币。在任何时候,如果你的热钱包里的钱变得多得令人不安,你可以将其中的一部分转移到冷库,而不会因为连接到网络而使冷库面临风险。下一次冷库连接时,它将能够从区块链接收到有关这些转账的信息,然后冷库将能够操纵这些硬币。
但是管理冷存储地址有一个小问题。如前所述,出于隐私和其他原因,我们希望能够在不同的地址用不同的密钥接收每枚硬币。所以当我们把一个硬币从热面转移到冷面时,我们希望使用一个新的冷地址。但是因为冷端不在线,我们必须有一些方法让热端找出那些地址。
直截了当的解决方案是冷端一次生成一大批地址,然后将它们发送给热端,让热端逐个使用。缺点是我们必须定期重新连接冷端以传输更多地址。
分级确定性钱包
更有效的解决方案是使用分级确定性钱包。它允许冷端使用基本上无限数量的地址,而热端知道这些地址,但双方之间只有短暂的一次性通信。但是这需要一点加密技巧。
在第 1 章中讨论密钥生成和数字签名时,我们看了一个生成公钥(充当地址)和私钥的函数 generateKeys。在分层确定性钱包中,密钥生成的工作方式不同。我们不是生成单个地址,而是生成我们所谓的“地址生成信息”,我们不是生成私钥,而是生成我们所谓的“私钥生成信息”给定地址生成信息,我们可以生成一个地址序列:我们应用一个地址生成函数,该函数将地址生成信息和任何整数 i 作为输入,并生成序列中的第 i 个地址。类似地,我们可以使用私钥生成信息生成一个私钥序列。
使这一点有用的加密魔法是,对于每个 i ,第 i 个地址和第 i 个秘密密钥匹配——也就是说,第 i 个秘密密钥控制并可用于消费来自第 i 个地址的比特币,就好像这一对是以传统方式生成的一样。这就好像我们有一系列规则的密钥对。
这里另一个重要的加密属性是安全性:地址生成信息不会泄露任何关于私钥的信息。因此,把地址生成信息给任何人都是安全的,这样任何人都可以生成第 i th 密钥。
并非所有的数字签名方案都可以被修改以支持分层的确定性密钥生成。有些可以,有些不可以,但好消息是比特币使用的数字签名方案 ECDSA 确实支持分层确定性密钥生成。即冷端生成任意多个密钥,热端生成相应的地址(图 4.2 )。
它是这样工作的。回想一下,正常情况下一个 ECDSA 私钥是一个随机数 x ,对应的公钥是g^x。对于分层的确定性密钥生成,我们需要另外两个随机值 k 和 y :
私钥生成信息: k,x,y Ith 私钥:x[I]=y+H(kI) 地址生成信息: k, g^(y) Ith 公钥:g^(x[I])=g^(H(kI)g^(y)
这个方案具有我们想要的所有属性:每一方都能够生成其密钥序列,并且对应的密钥匹配(因为对应于私钥 x 的公钥是 g ^x )。它还有一个我们没有谈到的属性:当你给出公钥时,这些密钥不会相互链接——也就是说,不可能推断它们来自同一个钱包。让冷端生成大量地址的稻草人解决方案确实具有这一特性,但是我们必须小心地在新技术中保留它,因为密钥实际上不是独立生成的。这个属性对于隐私和匿名很重要,这是第六章的主题。
图 4.2。分层确定性钱包的方案。冷端创建并保存私钥生成信息和地址生成信息。它将后者一次性转移到热端。热端每次向冷端发送硬币时都会顺序生成一个新地址。当冷端重新连接时,它按顺序生成地址,并检查向这些地址的区块链转移,直到它到达一个没有收到任何硬币的地址。如果它将一些硬币送回热端或以其他方式花费它们,它也可以按顺序生成私钥。
这里我们有两个安全级别,热端处于较低的级别。如果热端受到损害,刚才讨论的不可链接性属性将会丢失,但私钥(和比特币)仍然是安全的。一般来说,这种方案支持任意多的安全级别——因此有了“分层”这个术语——尽管我们还没有讨论细节。例如,当一个公司有多级授权时,这可能是有用的。
现在,让我们讨论存储冷信息的不同方式,无论是一个或多个密钥,还是密钥生成信息。第一种方法是将它存储在某种设备中,并将该设备放在保险箱中。它可能是一台笔记本电脑,一部手机或平板电脑,或一个拇指驱动器。重要的是关掉设备并锁好,这样如果有人想偷它,他们就必须打开锁着的储藏室。
大脑钱包
我们可以使用的第二种方法叫做大脑钱包。这种方法只使用一个秘密密码来控制对比特币的访问。它不需要硬盘、纸张或任何其他长期存储机制。该属性在您的物理安全性较差的情况下(例如,可能在国外旅行时)特别有用。
大脑钱包背后的关键技巧是有一个可预测的算法将密码短语转换成公钥和私钥。例如,您可以使用合适的散列函数对密码短语进行散列运算,以导出私钥,并且给定私钥,可以以标准方式导出公钥。此外,结合前面讨论的确定性钱包技术,我们可以从一个密码短语生成一个完整的地址和私钥序列,从而实现一个完整的钱包。
然而,如果对手能够猜出密码短语,他也可以获得大脑钱包中的所有私钥。在计算机安全中,我们必须假设对手知道你用来生成密钥的过程,并且只有你的密码才能提供安全性。因此,对手可以尝试各种密码,并使用它们生成地址;如果他在这些地址中的任何一个地址发现区块链上的任何未用交易,他可以立即将它们转移到自己名下。对手可能永远不知道(或不关心)硬币属于谁,并且攻击不需要闯入任何机器。猜测大脑钱包密码并不针对特定用户,而且不留痕迹。
此外,不像猜测你的电子邮件密码的任务,这可以由你的电子邮件服务器进行限速(称为在线猜测),利用大脑钱包,攻击者可以下载带有未兑换硬币的地址列表,并尝试尽可能多的潜在密码,因为他有计算能力来检查。注意,攻击者不需要知道哪些地址对应大脑钱包。这叫做离线猜测或者密码破解。更具挑战性的是想出既容易记忆又不容易被猜到的密码。生成密码短语的一种安全方法是使用一个自动程序来选取一个随机的 80 位数字,并将该数字转换为密码短语,不同的数字会产生不同的密码短语。
实际上,明智的做法是使用一个故意变慢的函数从密码短语中导出私钥,以确保攻击者尽可能长时间地尝试所有可能性。这被称为键拉伸。为了创建一个故意缓慢的密钥导出函数,我们可以采用像 SHA-256 这样的快速加密哈希函数,并计算它的 2 ^(20) 次迭代,将攻击者的工作量乘以 2 ^(20) 倍。当然,如果我们让它太慢,它将开始变得让用户讨厌,因为他们的设备必须在任何时候重新计算这个功能,他们想从他们的大脑钱包中花硬币。
如果大脑钱包密码无法获取——它被忘记了,没有被写下来,也猜不到——那么硬币就永远丢失了。
生成难忘的密码短语
一个产生大约 80 比特熵的密码短语的过程是从 10,000 个最常见的英语单词中随机挑选 6 个单词(6 log [2] (10000)大约是 80)。许多人发现这些比随机的字符串更容易记忆。以下是通过这种方法生成的一些密码:
磨损至合金对焦好减
土荷假累点场合
图 4.3。公钥编码为二维条形码和 base-58 符号的比特币纸质钱包。
纸质钱包
第三个选项叫做纸钱包 ( 图 4.3 )。我们可以将密钥材料打印到纸上,然后将纸放在一个安全的地方。显然,这种方法的安全性就像我们使用的纸张的物理安全性一样好或不好。典型的纸质钱包以两种方式对公钥和私钥进行编码:二维条形码和 58 进制。就像大脑钱包一样,存储少量密钥材料就足以重新创建一个钱包。
防篡改装置
我们可以存储离线信息的第四种方法是把它放在某种防篡改设备中。要么我们把密钥放入设备,要么设备生成密钥;无论哪种方式,设备被设计成没有办法输出或泄露密钥。相反,该设备用密钥签署声明,当我们按下按钮或给它某种密码时,它就这样做。一个优点是,如果设备丢失或被盗,我们会知道它,并且密钥被盗的唯一方式是设备被盗。这不同于将密钥存储在笔记本电脑上。
一般来说,人们可能会使用这四种方法的某种组合来保护他们的密钥。对于热存储,尤其是保存大量比特币的热存储,人们愿意努力设计新颖的安全方案来保护。我们将在下一节讨论这些更高级的方案之一。
4.3。分割和共享密钥
到目前为止,我们已经研究了存储和管理控制比特币的密钥的不同方式,但我们总是把密钥放在一个地方——无论是锁在保险箱里,还是在软件里,还是在纸上。这给我们留下了单点故障。如果那个仓库出了问题,我们就有麻烦了。我们可以创建和存储密钥材料的备份,但是尽管这降低了密钥丢失或损坏的风险(可用性),但它增加了被盗的风险(安全性)。这种权衡似乎是根本性的。我们能否获得一份数据,并以可用性和安全性同时提高的方式存储它?值得注意的是,答案是肯定的,这又是一个使用密码术的把戏,叫做秘密共享。
想法是这样的:我们想把我们的密钥分成若干个 N 的片段。我们希望以这样一种方式来实现,如果给定这些片段中的任何一个 K ,那么我们可以重建原始秘密,但是给定的片段少于 K 个,我们将无法了解原始秘密的任何信息。
鉴于这种严格的要求,简单地将秘密分割成小块是行不通的,因为即使是一个小块也能提供秘密的一些信息。我们需要更聪明的东西。因为我们没有分割秘密,所以我们称单个组件为“份额”,而不是片段。
假设我们有 N = 2 和 K = 2。这意味着我们基于这个秘密生成了两个部分,我们需要这两个部分都能够重建这个秘密。让我们称我们的秘密为 S,它只是一个很大的(例如,128 位)数。我们可以生成一个 128 位的随机数 r,并使两个份额分别为 r 和 s⊕r(⊕代表按位异或)。本质上,我们用一次一密来加密 s,并把密钥(r)和密文(S ⊕ R)存储在不同的地方。密钥和密文本身都不能告诉我们任何秘密。但是给定两个份额,我们简单地将它们异或在一起以重构秘密。
只要 N 和 K 相同,这个技巧就有效——我们只是为前N–1 份生成N–1 个不同的随机数,最后一份将是与所有其他N–1 份进行异或运算的秘密。但是如果 N 大于 K,这个就不管用了,我们需要一些代数。
看一下图 4.4 。首先我们在 y 轴上生成点(0, S ),然后通过该点绘制一条随机斜率的直线。接下来我们在那条线上生成点,我们想要多少就有多少。原来这是一个 S 的秘密分享,其中 N 是我们生成的点数, K = 2。
这种方法为什么有效?首先,给定生成的两个点,你可以通过它们画一条线,看看它在哪里与 y 轴相交。这给了你 S。但是如果你只给了一个点,它不会告诉你任何关于 S 的信息,因为直线的斜率是随机产生的。通过你的点的每条线都是同样可能的,它们都将在不同的点与 y 轴相交。
只有一个微妙之处:为了让数学工作,我们必须对一个大质数 P 进行模运算。不需要保密,只要非常大就行。并且秘密 S 必须在 0 和P–1 之间。所以“在线上生成点”,我们的意思是我们生成一个随机值 R ,也在 0 和P–1 之间,我们生成的点是
T54
图 4.4。 N 秘密共享取 2 的几何图解。S 代表秘密,编码为一个(大)整数。这条线的斜率是随机选择的。离开y-轴的点(具体来说,它们的y-坐标 S + R,S + 2 R ,…)对应份额。任何两个这样的点都足以重建 y 轴上的点,从而重建秘密。所有的算术都是以一个大质数为模来完成的。
x = 1,y=(S+R)modP
x = 2,y=(S+2RmodP
x = 3,y=(S+3RmodP
诸如此类。秘密对应的点 x = 0,y=(S+0RmodP,正好是 x = 0, y = S 。
这个方法与 K = 2 和 N 的任意值共享一个秘密。这已经很好了——例如,如果 N = 4,你可以把你的密钥分成四份,放在四个不同的设备上,这样如果有人偷了其中的任何一个设备,他们就不会知道你的密钥。然而,即使其中两个设备在火灾中被烧毁,您也可以使用另外两个设备来重建密钥。正如承诺的那样,我们提高了可用性和安全性。
但是我们可以做得更好:我们可以与任何 N 和 K 秘密共享,只要 K 不超过 N 。要了解如何操作,再次查看图 4.4 。我们用直线代替其他形状,因为直线是一次多项式。所以要重建一条线,我们需要两个点,不少于两个。如果我们想让 K = 3,我们会使用抛物线,它是一个二次多项式,或者二次多项式。构造一个二次函数正好需要三个点。表 4.1 说明了该程序。
有一个叫做拉格朗日插值的公式,它允许你从多项式曲线上的任意 K 点重建一个 KK–1 次多项式。这种方法是用直尺通过两点画一条直线的几何直觉的代数版本(和推广)。因此,我们有办法将任何秘密存储为 N 份,这样即使对手知道最多K–1 份,我们也是安全的,同时我们可以容忍最多N–K份的丢失。
表 4.1。秘密共享背后的数学原理
注意:通过 K 次K–1 的随机多项式曲线上的一系列点来表示秘密,当且仅当至少有 K 个点(“份额”)可用时,才允许秘密被重构。
顺便说一下,这些都不是比特币特有的。您可以立即秘密共享您的密码,并与您的朋友分享,或者将它们放在不同的设备上。但是没有人真的用密码这样的秘密做到这一点。方便是一个原因;另一个原因是,对于重要的在线帐户,还有其他安全机制可用,例如使用 sms(文本消息)验证的双因素安全。但是对于比特币,如果你把密钥存储在本地,你就没有这些安全选项。没有办法让比特币地址的控制依赖于短信的接收。在线钱包的情况有所不同,我们将在下一节对此进行探讨。但没有太大的不同——只是把问题转移到了不同的地方。毕竟,在线钱包提供商将需要一些方法来避免在存储他们的密钥时出现单点故障。
门限密码术
但是秘密共享仍然有一个问题:如果我们用这种方式把一个密钥分开,然后我们想用这个密钥来签名,我们仍然需要把这些份额放在一起,重新计算初始秘密,以便能够用这个密钥签名。我们将所有份额放在一起的点仍然是一个易受攻击的点,对手可能会窃取密钥。
密码术也可以解决这个问题:如果股份存储在不同的设备上,我们可以以分散的方式生成比特币签名,而无需在任何一台设备上重建私钥。这被称为阈值签名。最佳用例是具有双因素安全性的钱包,对应于情况 N = 2 和 K = 2。假设您将钱包配置为在桌面和手机之间分割其密钥材料。然后你可以在你的桌面上开始支付,这将创建一个部分签名并发送到你的手机上。然后,你的手机会提醒你支付细节——收款人、金额等等——并要求你确认。如果细节核实了,你就可以确认,然后你的手机会使用它的私钥完成签名,然后将交易广播到区块链。如果你的桌面上有试图窃取你的比特币的恶意软件,它可能会启动一项交易,将资金发送到黑客的地址,但随后你会在手机上收到一个未经授权的交易警报,你就会知道出事了。阈值签名背后的数学细节很复杂,我们在这里不讨论它们。
阈值签名
门限签名是一种加密技术,它采用单个密钥,将其分成几份,分别存储,并在不重建密钥的情况下对交易进行签名。多重签名是比特币脚本的一项功能,通过它,您可以指定在多个独立的密钥之间分割对地址的控制。尽管这两种技术之间存在一些差异,但它们都通过避免单点故障来提高安全性。
多重签名
一个完全不同的选项可用于避免单点故障:多重签名,我们在第 3 章中提到过。比特币脚本直接允许你规定在不同的密钥之间分割对一个地址的控制,而不是获取一个单独的密钥并将其分割。然后,这些密钥可以存储在不同的位置,并分别生成签名。当然,完整的、已签名的事务将在某个设备上构建,但是即使对手控制了这个设备,她所能做的只是阻止它被广播到网络。在没有其他设备参与的情况下,她无法生成其他交易的有效多重签名。
举个例子,假设本书的作者安德鲁、阿文德、艾德、约瑟夫和史蒂文是一家公司的联合创始人,而这家公司有很多比特币。我们可以使用多重签名来保护我们的大量比特币。我们五个人中的每个人都将生成一个密钥对,我们将使用五取三多重签名来保护我们的冷存储,这意味着我们三个人必须签名才能创建有效的交易。
因此,我们知道,如果我们五个人分别保管自己的密钥,并以不同的方式保护它们,我们是相对安全的。对手必须破解五个密钥中的三个。如果我们中的一个甚至两个去流氓,他们不能偷公司的硬币,因为你需要至少三把钥匙才能做到这一点。与此同时,如果我们中的一个人丢失了钥匙或被公共汽车碾过,我们的大脑钱包丢失了,其他人仍然可以取回硬币,并将它们转移到新的地址,并重新保护钥匙。换句话说,多重签名可以帮助你以一种相对安全的方式管理大量冷藏的硬币,并且在任何激烈的事情发生之前需要多人采取行动。
这里,我们通过解释该技术如何有助于实现双因素(或多因素)安全性来激发门限签名,并通过解释该技术如何有助于一组个人共享对共同持有的资金的控制来激发多签名技术。但是这两种技术都适用于这两种情况。
4.4。在线钱包和交易所
到目前为止,我们已经讨论了如何自己存储和管理比特币。现在我们讨论如何使用其他人的服务来帮助你做到这一点。你可以做的第一件事是使用在线钱包。
在线钱包
一个在线钱包就像一个你自己管理的本地钱包,只不过信息存储在云中,你可以通过电脑上的网络界面或智能手机上的应用程序来访问它。2015 年流行的一些在线钱包服务是比特币基地和 blockchain.info 。
从安全的角度来看,至关重要的是,该网站提供了在你的浏览器或应用程序上运行的代码,并且还存储了你的密钥。至少它将有能力访问你的钥匙。理想情况下,网站会用一个只有你知道的密码来加密这些密钥,但当然你必须信任他们会这么做。你必须相信他们的代码不会泄露你的密钥或密码。
与自己动手相比,网上钱包有一定的利弊。一个很大的好处就是方便。你不需要在电脑上安装任何东西就能在浏览器上使用在线钱包。在你的手机上,你可能只需要安装一个应用程序一次,它不需要下载区块链。它将在多种设备上工作——你可以有一个在你的桌面和手机上访问的钱包,它将会工作,因为真正的钱包存在于云中。
然而,也有安全方面的担忧。如果该网站或操作它的人被证明是恶意的或以某种方式受到损害,你的比特币就有麻烦了,因为该网站提供了对你的比特币有不良影响的代码。
理想情况下,网站或服务由受过更好培训的安全专业人员运营,或者在维护安全方面比你更勤奋。因此,你可能希望他们做得更好,你的硬币实际上比你自己储存更安全。但最终,你必须信任他们,你必须相信他们不会妥协。
比特币交易所
要了解比特币交易所,我们先来说说传统经济中的银行或类似银行的服务是如何运作的。你给银行一些钱——存款——银行承诺以后会还给你。当然,至关重要的是,银行实际上并不只是把你的钱放进里屋的一个盒子里。银行所做的只是承诺,如果你要钱,他们会还给你。银行通常会把钱放到其他地方,也就是投资。银行可能会保留一些钱,以确保它可以在一个典型的日子,甚至可能是一个不寻常的日子,满足取款的需求。许多银行通常使用所谓的部分准备金:他们保留一定比例的活期存款以备不时之需。
比特币交易所是一种业务,至少从用户界面的角度来看,其功能与银行类似。他们接受比特币的存款,并会像银行一样,承诺在以后需要时返还。你也可以通过从银行账户转账的方式将法定货币(美元和欧元等传统货币)转入交易所。交易所承诺根据 T4 的要求偿还其中一种或两种货币。该交易所允许您进行各种类似银行的活动。你可以支付和接收比特币。也就是说,你可以指示交易所向特定的一方支付一些比特币,或者你可以要求其他人代表你将资金存入特定的交易所——将比特币存入你的账户。你也可以把比特币换成法定货币,反之亦然。通常情况下,比特币交易所通过找到一些想用美元购买比特币的客户和另一个想用美元出售比特币的客户来进行交易,并将他们匹配起来。换句话说,他们试图找到愿意在交易中采取相反立场的客户。如果有一个双方都能接受的价格,他们将完成交易。
假设你在某个交易所的账户里有 5000 美元和 3 个 BTC,你用这个交易所下单购买 2 个 BTC,每个 580 美元。交易所找到愿意接受交易另一方的人,交易就发生了。现在你的账户里有 5 个 BTC 而不是 3 个 BTC,还有 3840 美元而不是 5000 美元。
这里需要注意的重要一点是,当你和同一家交易所的另一位客户发生交易时,比特币区块链上实际上没有发生任何交易。交易所不需要去区块链将比特币或美元从一个账户转移到另一个账户。在这个交易中发生的所有事情是,交易所现在向你做出了一个不同于他们以前做出的承诺。之前他们说,“我们给你 5000 美元和 3 BTC”,现在他们说“我们给你 3840 美元和 5 BTC。”这只是改变了他们的承诺——通过美元经济或区块链并没有发生实际的货币流动。当然,交易中的另一个参与者的承诺以相反的方式改变了。
使用交换有利也有弊。一个很大的优势是,交易所有助于将比特币经济和比特币的流动与法定货币经济联系起来,这样就可以很容易地来回转移价值。
缺点是风险。你面临着和银行同样的风险。这些风险分为三类。
三种风险
第一个风险是银行挤兑的风险。当许多人同时出现并要求退款时,就会发生挤兑。由于银行只保留部分准备金,它可能无法应对同时发生的提款。这种危险源于恐慌行为:一旦谣言开始流传,说某家银行或交易所可能陷入困境,并可能开始拒绝兑现取款,那么人们就会蜂拥而入,试图抢在人群前面取款,于是需求就会排山倒海。
第二个风险是,银行所有者可能只是操纵庞氏骗局的骗子。这是一个计划,有人让人们给他们钱,以换取未来的利润,但实际上是拿他们的钱,并用它来支付利润给以前购买的人。这样的计划注定最终会失败,并导致许多人损失大量金钱。在最近的记忆中,伯尼·麦道夫最出名的一次就是成功了。
第三个风险是黑客的风险:有人——甚至可能是交易所的雇员——会设法穿透交易所的安全系统。由于交易所存储着控制大量比特币的关键信息,他们需要小心自己的软件安全和程序——他们如何管理冷存储和热存储等等。如果出了问题,你的钱可能会在交易所被偷。
所有这些事情都发生了。我们已经看到由于相当于银行挤兑而倒闭的交易所。我们看到交易所倒闭是因为交易所的经营者是骗子,我们也看到交易所倒闭是因为有人闯入。事实上,统计数字并不令人鼓舞。2013 年的一项研究发现,40 家比特币交易所中有 18 家因为失败或无力支付交易所承诺支付的款项而关闭。
这方面最著名的例子当然是 Mt. Gox。Mt. Gox 一度是最大的比特币交易所,但它最终破产了,无法支付所欠的钱。Mt. Gox 是一家日本公司,它最终宣布破产,让许多人想知道他们的钱去了哪里。截至 2014 年,Mt. Gox 的破产正在通过日本和美国法院进行,我们还需要一段时间才能确切知道钱去了哪里。我们知道的一件事是,这涉及大量资金,Mt. Gox 已经没有这笔钱了。因此,这是一个关于使用交易所的警示故事。
将此与银行联系起来,我们发现大多数发达国家的银行没有 45%的失败率,部分原因是监管。政府以各种方式监管传统银行。
平整岸线
政府经常对银行施加最低准备金要求。在美国,银行被要求持有的流动形式的活期存款比例通常为 3 %- 10 %,因此银行可以在必要时应对提款激增。政府还经常监管银行可以使用的投资类型和资金管理方法。目标是确保银行的资产投资于风险相对较低的地方,因为从某种意义上讲,银行的资产实际上是储户的资产。
作为这些监管形式的交换,政府通常会采取措施帮助银行或储户。首先,政府发行存款保险。也就是说,政府向储户承诺,如果遵守这些规则的银行倒闭,政府将至少赔偿部分存款。政府有时也充当“最后贷款人”如果一家银行遇到困难,但基本上是有偿付能力的,政府可能会介入并贷款给该银行,帮助其渡过难关,直到它能够根据需要调动资金,使自己走出困境。
所以传统银行都是这样监管的。比特币交易所不是。比特币交易所或其他比特币业务是否应该或如何受到监管,这是我们在《T4》第七章中再次提到的话题。
储备证明
比特币交易所或其他持有比特币的人可以使用一种名为“储备证明”的加密技术,让客户放心他们存入的钱是安全的。目标是让持有比特币的交易所或企业证明其拥有部分储备——他们保留了人们存款的 25%甚至 100%的控制权。
我们可以把储量证明问题分成两部分。首先是证明交易所持有多少储备——这是相对容易的部分。该公司只是发布一个有效的自付交易的索赔准备金金额。也就是说,如果他们声称拥有 10 万个比特币,他们创建了一个交易,在这个交易中,他们向自己支付 10 万个比特币,并显示该交易有效。然后,他们签署一个挑战字符串——一个由公正的一方产生的随机位串——用与签署“支付给自己”交易相同的私钥。这证明了知道私钥的人参与了保留证明。
我们应该注意两点。严格来说,这个过程并不能证明声称拥有储备的一方事实上拥有它,而只是证明无论谁拥有那 10 万个比特币,都愿意在这个过程中合作。尽管如此,这看起来像是一个证据,证明有人控制或认识控制一定数量资金的人。此外,请注意,你可以总是少申报:该组织可能有 150,000 个比特币,但选择向自己支付 100,000 个。因此,这份准备金证明确立了公司拥有的最低准备金,而不是最高准备金。
负债证明
第二块是证明一个公司持有多少活期存款,这是比较难的部分。如果交易所能够证明其储备和活期存款,那么任何人都可以简单地将这两个数字相除,以确定其部分储备。我们将提出一个方案,允许交易所对其活期存款进行超额索赔,而不是超额索赔。因此,如果该公司能够证明其准备金至少达到一定数额,其负债至多达到一定数额,那么两者加在一起,它就证明了其部分准备金的下限。
如果交易所根本不关心用户的隐私,它可以简单地公布它的记录——特别是每个活期存款客户的用户名和金额。现在,任何人都可以计算交易所的总负债,如果它遗漏了任何客户或谎报了他们的存款价值,就有可能让这些客户暴露欺诈行为。该公司可以编造虚假用户,但它只能通过这种方式增加其声称的总负债的价值。因此,只要没有客户投诉,出版物就能让公司证明其存款的下限。当然,诀窍是在尊重用户隐私的同时证明这个下限。
图 4.5。负债证明。交易所公布 Merkle 树的根,该根包含叶子上的所有用户,包括存款金额。任何用户都可以请求包含在树中的证明,并验证存款金额被正确地传播到树的根。
为此,交换可以使用 Merkle 树,在第 1 章的中讨论过。回想一下,Merkle 树是用散列指针构建的二叉树,因此每个指针不仅指示我们可以从哪里获得一条信息,还指示该信息的加密散列是什么。交易所通过构建 Merkle 树来执行证明,在 Merkle 树中,每个叶子对应于一个用户,并且通过发布其根散列来执行证明(图 4.5 )。与上一段中讨论的简单协议类似,每个用户负责确保自己被包含在树中。此外,还有一种方式让用户集体检查存款总额。现在我们来深入探讨一下细节。
我们将为每个哈希指针添加另一个字段或属性。此属性是一个数字,表示树中哈希指针下的子树中所有存款的比特币货币总值。要做到这一点,对应于每个散列指针的值应该是它下面的两个散列指针的值之和。
交换构建该树,加密地签署根指针以及根属性值,并发布它。根值当然是总负债,我们感兴趣的数字。交易所声称所有用户都在树的叶子中被表示,他们的存款值被正确地表示,并且这些值被正确地沿树向上传播,因此根值是所有用户的存款金额的总和。
现在,每个客户都可以到组织要求提供正确包含的证明。然后,交换机必须向客户展示从用户的叶子到根的部分树,如图 4.6 所示。然后,客户验证:
图 4.6。包含在 Merkle 树中的证明。显示叶节点,以及从叶到根的路径上的节点的兄弟节点。
1.根哈希指针和根值与交换签名和发布的相同。
2.哈希指针始终是一致的;也就是说,每个哈希值实际上都是它所指向的节点的加密哈希值。
3.叶子包含正确的用户账户信息(例如,用户名/用户 ID 和存款金额)。
4.每个值都是其下两个值的总和。
5.这两个值都不是负数。
好消息是,如果每个客户都这样做,那么这个树的每个分支都将被探索,并且有人将验证对于每个哈希指针,它的关联值等于它的两个孩子的值的和。关键是,交换不能在树的任何部分向不同的客户呈现不同的值。这是因为这样做要么意味着找到哈希冲突的能力,要么向不同的客户呈现不同的根值,我们认为这是不可能的。
让我们回顾一下。首先,交易所证明他们至少有 X 数量的储备货币,方法是进行该数量的自我交易。然后,他们证明他们的客户最多有一笔存款。这说明他们的储备分数至少是 X / Y 。这意味着,如果比特币交易所想要证明他们持有所有存款的 25%(或 100%)的准备金,他们可以以任何人都可以独立验证的方式做到这一点,并且不需要中央监管机构。
您可能会注意到,这里给出的两个证明(通过签署一个挑战字符串的储备证明和通过 Merkle 树的负债证明)揭示了许多私人信息。具体来说,它们揭示了交易所使用的所有地址、储备和负债的总价值,甚至一些关于个人客户余额的信息。真正的交易所不愿公布这些信息,因此,储备的加密证明一直很少。
最近提出的一项名为“准备金”的协议也提供了同样的偿付能力证明,但没有披露总负债或准备金或使用的地址。这个协议使用更高级的加密技术,我们在这里不做介绍,但它是另一个展示如何使用加密技术来确保隐私的例子。
偿付能力是监管的一个方面,比特币交易所可以自愿证明这一点,但监管的其他方面更难保证,正如我们在第七章中讨论的那样。
4.5。支付服务
到目前为止,我们已经讨论了如何存储和管理比特币。现在让我们考虑一下商家——无论是在线商家还是当地零售商——如何以实用的方式接受比特币支付。支持比特币支付的商家一般都会这样做,因为他们的客户希望能够用比特币支付。商家可能不想持有比特币,而只是在一天结束时收到美元或任何当地法定货币。他们想要一种简单的方法来做到这一点,而不必太担心技术,改变他们的网站,或建立某种类型的销售点技术。
商家也要低风险。各种风险都是可能的:使用新技术可能会导致他们的网站关闭,让他们损失金钱。处理比特币存在安全风险——有人可能会打开他们的钱包,或者一些员工可能会带着他们的比特币逃走。最后还有汇率风险:比特币的美元价值可能会不时波动。可能想以 12 美元出售披萨的商人希望知道她将获得 12 美元或接近 12 美元的价格,并且在她可以将这些比特币兑换成美元之前,用该披萨交换的比特币的价值不会大幅下降。
支付服务的存在是为了让顾客和商家都能得到他们想要的东西,弥合这些不同需求之间的差距。
对于商家来说,通过支付服务接收比特币付款的过程可能是这样的:
1.商家访问一个支付服务网站,填写一个描述商品、价格和支付窗口小部件展示的表格,等等。图 4.7 显示了一个来自比特币基地的表单示例。
2.支付服务生成 HTML 代码,商家可以将其放入自己的网站。
3.当客户单击支付按钮时,后台会发生各种事情,最终商家会收到一条确认消息,称“客户[客户 id]已为项目[项目 id]支付了金额[值]。”
图 4.7。用于生成比特币支付按钮的示例支付服务接口。商家可以使用这个接口生成一个 HTML 代码片段,嵌入到她的网站上。
图 4.8。涉及用户、商家和支付服务的支付过程。
虽然这种手动过程对于销售一两件商品的小网站或者希望接受捐赠的网站来说是有意义的,但是复制粘贴成千上万件商品的 HTML 代码当然是不可行的。因此,支付服务还提供了编程接口,用于向动态生成的网页添加支付按钮。
现在让我们更详细地看看支付过程,看看当客户用比特币购物时会发生什么(下面的步骤在图 4.8 中说明):
1.用户在商家网站上挑选一件商品进行购买,到了支付的时候,商家会提供一个包含“用比特币支付”按钮的网页,这是支付服务提供的 HTML 代码片段。该页面还包含交易 ID(对商家有意义的标识符,允许她在自己的会计系统中查找记录)以及商家希望支付的金额。
2.如果用户想用比特币支付,他可以点击那个按钮。这将触发对支付服务的 HTTPS 请求,表明按钮被点击,并传递商家的身份、商家的交易 ID 和金额。
3.现在支付服务知道这个顾客——不管他是谁——想要用比特币支付一定的金额,所以支付服务弹出某种盒子或者启动与用户的一些交互。这为用户提供了如何支付的信息,然后用户将通过自己喜欢的钱包向支付服务发起比特币转账。
4.一旦用户创建了支付,支付服务将把浏览器重定向到商家,传递来自支付服务的消息,到目前为止看起来没问题。这可能意味着,例如,支付服务已经观察到交易广播到对等网络,但是交易到目前为止还没有接收到足够的(或任何)确认。就用户而言,这就完成了支付,商家的货物装运等待支付服务的最终确认。
5.支付服务稍后直接向商家发送包含交易 ID 和金额的确认。通过这样做,支付服务告诉商家,该服务在一天结束时欠商家钱。然后,商家将货物运送给用户。
最后一步是支付服务通过向商家的银行账户存款,以美元或某种法定货币的形式向商家汇款。这发生在固定结算期结束时,可能一天一次,而不是每次购买一次。支付服务保留一小部分作为费用;这就是这些服务的收入来源。根据支付服务的不同,这些细节可能会有所不同,但这是一个总体方案。
概括一下,在这个过程的最后,客户支付比特币,商家获得美元,减去一小部分比例,大家都很开心。回想一下,商家想要以特定数量的美元(或任何当地法定货币)出售商品。支付服务处理其他一切——从客户那里接收比特币,并在一天结束时进行存款。
至关重要的是,支付服务吸收了所有风险。它吸收了安全风险,因此需要有良好的安全程序来管理其比特币。它吸收了汇率风险,因为它接受比特币,支付美元。如果美元兑比特币的价格大幅波动,支付服务可能会亏损。但如果它在另一个方向大幅波动,这项服务可能会赚钱,但这是有风险的。承担这些风险是支付服务业务的一部分。
请注意,支付服务可能是大规模运营的,因此它接收大量比特币,并支付大量美元。它将不断需要将收到的比特币兑换成更多的美元,这样才能保持循环。因此,支付服务必须是连接法定货币和比特币经济的交易所市场的积极参与者。因此,该服务不仅需要考虑汇率是多少,还需要考虑如何大量兑换货币。
也就是说,如果它能解决这些问题,该服务在每笔交易中收取的费用将使其成为一项潜在有利可图的业务,因为它解决了客户支付比特币的愿望与商家获得美元并专注于销售商品的愿望之间的不匹配。
4.6。交易费用
交易费这个话题在前面的章节中已经出现过,在后面的章节中还会再次出现。在这里,我们讨论了比特币交易费用的实际细节。
当交易被放入比特币区块链时,该交易可能包含交易费。回想一下,交易费被定义为进入交易的硬币总价值减去出来的硬币总价值之间的差额。投入总是必须至少与产出一样大,因为常规交易不能创造硬币,但如果投入大于产出,则差额被视为交易费,该费用归制作包含该交易的区块的矿工所有。
为什么交易费会存在?原因是有人不得不承担一些费用来传递你的交易。比特币节点需要中继你的交易,最终,矿工必须将你的交易构建成一个区块,这样做需要一点成本。例如,如果一个 miner 的块因包含您的事务而稍大,则传播到网络的其余部分需要稍长的时间,并且如果另一个 miner 几乎同时发现另一个块,则该块被孤立的可能性稍高。
因此,整合你的交易是有成本的——对点对点网络和矿工都是如此。交易费的理念是补偿矿商处理你的交易所产生的成本。在当前系统中,节点不接受金钱补偿,尽管运行一个节点当然远比当矿工便宜。一般来说,你可以随意设定交易费。你可以不交费用,也可以把费用定得相当高。一般来说,如果你支付更高的交易费,你的交易会被更快更可靠地传递和记录。
为了了解矿工如何设置交易费用,我们现在来看看参考实现中的交易费用。但是我们注意到一些警告。首先,这里讨论的细节是 2015 年发布的版本 0.10.0,在以后的版本中可能会有所不同。其次,违约政策背后的基本原理在很大程度上是为了防止大量低价值交易对区块链造成“污染”。这并不是试图准确模拟矿商的交易处理成本。
当然,矿商可以自由偏离默认政策。截至 2015 年,交易费占矿商收入的 1%或更少,因此矿商基本上坚持默认。但随着大宗报酬减少,交易费开始在矿商收入中占据更大比例,我们可以预计交易费要求会出现更多变化。
默认交易费用如下。如果交易满足以下三个条件,则不收取任何费用:
1.事务的大小小于 1000 字节,
2.所有输出都等于或大于 0.01 BTC,并且
3.优先级足够高。
优先级定义为(输入年龄输入值之和)/(交易规模)。换句话说,考虑交易的所有投入,对每一个投入,计算投入的年龄及其比特币价值的乘积,并将所有这些乘积相加。请注意,事务输出未使用的时间越长,老化的时间就越长,当它最终被使用时,它对优先级的贡献就越大。
如果您满足这三个要求,那么您的交易将被免费传送并记录在区块链中。否则要收费。该费用约为每 1000 字节 0.0001 BTC,截至 2015 年,这只是每 1000 字节一美分的零头。每个输入的事务大小大约为 148 字节,每个输出为 34 字节,其他信息为 10 字节。所以一个有两个输入和两个输出的事务大约是 400 字节。
如果您进行的交易不符合费用要求,它可能会进入区块链,但要更快更可靠地记录您的交易,通常需要支付标准费用。因此,大多数钱包软件和支付服务在其处理的支付中包含标准费用结构,因此当你从事日常比特币业务时,你会看到一些交易费用。
4.7。外汇市场
我们所说的货币兑换是指将比特币兑换成美元和欧元等法定货币。在第 4.4 节中,我们讨论了货币兑换服务,但在这里,我们将它们视为一个市场——其规模和范围、运作方式,以及该市场的一些经济学知识。
在许多方面,它的运作就像是两种法定货币之间的市场,比如美元和欧元。价格会根据人们在某一天购买欧元和美元的意愿而波动。在比特币世界里,像bitcoincharts.com这样的网站显示不同交易所各种法定货币的比特币汇率。
如果你浏览这个网站,你会发现交易量很大,价格会随着交易的进行而实时变动。这是一个流动性很强的市场,你可以去很多网站买卖比特币。2015 年 3 月,最大的比特币美元交易平台 Bitfinex 的 24 小时交易量约为 7 万 BTC,约合 2100 万美元。
另一个选择是在现实生活中与人们见面交易比特币。有些网站可以帮你做到这一点。例如,在localbitcoins.com上,你可以指定你的位置以及你希望用现金购买比特币。然后,该网站列出了在你搜索时愿意在该地点出售比特币的人,并告诉你他们提供的比特币价格和数量。然后,你可以联系他们中的任何一个,安排在某个地方见面(例如,在咖啡店或公园),给他们美元,并接受比特币作为交换。对于小额交易,在完成交易之前,只需在区块链上等待一两次确认就足够了。
最后,一些地方有定期聚会,人们去那里交易比特币。你可以在预定的日期和时间去某个公园或街角或咖啡馆,与一群想要买卖比特币的人做生意。有人可能更喜欢亲自获得比特币而不是在线获得比特币的一个原因是,比特币是匿名的,以至于在公共场所的交易可以被认为是匿名的。然而,由于银行规定,在交易所开户一般需要提供政府颁发的身份证。我们将在第 7 章中对此进行更详细的讨论。
供求
像任何市场一样,比特币交易所市场为想做一件事的买家和想做相反事情的卖家牵线搭桥。这是一个相对较大的市场,每天有数百万美元通过它。它不像纽约证券交易所或美元欧元市场那样大,但也大到足以建立一个共识价格。一个想参与这个市场的人至少可以买入或卖出适量的股票,而且总能找到交易对手。
这个市场的共识价格——就像流动性市场中任何东西的价格一样——是由供求关系决定的。我们指的是可能被出售的比特币的供应,以及拥有美元的人对比特币的需求。通过这种市场机制,将价格设定到供需匹配的水平。让我们更深入地探讨一下这个问题。
比特币的供应量是多少?这是你可能在其中一个市场购买的比特币数量,等于目前流通的比特币供应量。固定数量的比特币在流通。截至 2015 年底,大约是 1500 万,比特币目前的规则规定,这个数字会慢慢往上走,最终达到 2100 万的上限。
你可能还包括比特币的活期存款。也就是说,如果有人在比特币交易所将钱存入他们的账户,而该交易所没有维持全额准备金来满足所有存款,那么该交易所的活期存款将大于该交易所持有的硬币数量。
根据你问的关于市场的问题,把活期存款包括在供给中可能正确,也可能不正确。基本上,当活期存款可以在市场上出售时,你应该在市场分析中包括活期存款。例如,如果你用美元兑换了比特币活期存款,而交易所允许活期存款比特币兑换成美元,那么它们也算。
同样值得注意的是,当经济学家习惯性地谈论法定货币的供给时,他们通常不仅包括流通中的货币——即纸币和金属货币——还包括活期存款的总量,因为逻辑上人们可以实际上花掉他们的活期存款来买东西。因此,尽管很容易说比特币的供应量目前固定在 1500 万,最终固定在 2100 万,但出于某些目的,我们必须包括活期存款,这些活期存款的功能类似于货币,因此供应量可能不会像一些比特币倡导者所说的那样固定。我们需要看看我们正在谈论的特定市场的环境,以理解货币供应的正确定义是什么。但是,让我们假设我们已经根据所分析的市场就使用什么样的供应达成了一致。
现在让我们看看需求。对比特币的需求有两个主要来源:作为法定货币交易的中介和投资。
首先,我们考虑调解法定货币交易。想象一下,爱丽丝想从鲍勃那里购买一些东西,并希望向他转账一定数量的美元,但他们发现使用比特币来进行这种转账很方便。这里假设爱丽丝和鲍勃都没有兴趣长期持有比特币。我们一会儿将回到这种可能性。因此,爱丽丝会用美元购买比特币并进行转账,一旦他们收到足够多的确认信息,让鲍勃满意,他就会卖掉这些比特币,换成美元。这里的关键点是,在交易过程中,中介这一交易的比特币必须退出流通。这就产生了对比特币的需求。
需求的第二个来源是比特币有时被用作投资。也就是说,有人想购买比特币并持有它们,希望它们的价格在未来会上涨,这样他们就可以出售它们并获利。当人们购买并持有时,这些比特币就退出了流通。当比特币的价格较低时,你可能会预计会有很多人想购买比特币作为投资,但如果价格涨得很高,那么对比特币作为投资的需求就不会那么高了。
一个简单的市场行为模型
我们可以做一些简单的经济建模来理解这些市场的行为。我们不会在这里做一个完整的模型,虽然这是一个有趣的练习。让我们具体看看交易中介需求,以及这可能对比特币价格产生的影响。
我们首先定义一些参数。参与市场的每个人通过比特币达成的总交易价值为 T 。该值以美元/秒为单位。这是因为为了简单起见,我们假设想要调解这些交易的人在头脑中有交易的某个美元值(或者我们将转换成美元的一些其他法定货币)。因此,每秒钟有一定数量的美元交易需要被调解。比特币需要停止流通以调解交易的持续时间是 D 。这是从付款人购买比特币到收款人能够将它们卖回市场的时间,我们将用秒来衡量。此次购买可用的比特币总供应量为 S ,等于现有的所有硬通货比特币(目前约为 1500 万,最终将达到 2100 万)减去人们作为长期投资持有的比特币。换句话说, S 是四处流动并可用于中介交易的比特币数量。最后, P 是一个比特币的价格,用美元衡量。
现在我们可以做一些计算。首先,我们计算每秒钟有多少比特币可用于服务交易。总共有 S 个比特币可供使用,由于它们退出流通的时间为 D 秒,平均每秒钟就有 S/D 个比特币成为新的可用比特币。它们从非流通状态中出现,可用于中介交易。这是供应方面。
在需求端——每秒需要调解交易的比特币数量——我们需要调解价值 T 美元的交易,而要调解价值 1 美元的交易,我们需要 1/P 比特币。因此 T/P 是每秒钟为人们想要进行的所有交易提供服务所需的比特币数量。
所以在特定的第二时间点,供给是 S/D ,需求是 T/P 。像大多数市场一样,在这个市场上,价格会波动,使供给与需求相一致。如果供应高于需求,那么一些比特币将无法出售,因此出售比特币的人将愿意降低要价来出售它们。而根据我们对需求的公式 T/P ,当价格下降时,需求增加,供需会达到平衡。
相比之下,如果供给小于需求,那么一些人希望获得比特币来调解交易但无法获得,因为没有足够的比特币可用。这些人将不得不出价更高来获得他们的比特币,因为有限的比特币供应将面临很多竞争。这推动价格上涨,再次参考我们的公式,这意味着需求将下降,直到达到平衡。在均衡中,供给必须等于需求,所以我们有
这给了我们一个价格公式:
*S*/*D* = *T*/*P*
这个等式告诉我们什么?我们可以进一步简化它:我们可以假设 D ,即你需要持有一个比特币来调解交易的持续时间,不会改变。总供应量 S 也没有变化,或者至少随着时间的推移变化很慢。这意味着价格与以美元衡量的调解需求成正比。因此,如果对美元中介的需求增加一倍,那么比特币的价格也应该增加一倍。事实上,我们可以将价格与对事务中介需求的一些估计绘制成图表,看看它们是否匹配。当经济学家进行这种比较时,这两者往往非常匹配。
*P* = *TD*/*S*
请注意,总供应量 S 只包括不作为投资持有的比特币。因此,如果更多的人购买比特币作为投资, S 会下降,我们的公式告诉我们 P 会上升。这是有道理的——如果投资方有更多的需求,那么你需要支付的交易价格就会上涨。
这不是一个完整的市场模型。为了有一个完整的模型,我们需要考虑投资者的活动。也就是说,当投资者认为未来价格会更高时,他们会要求比特币,因此我们需要考虑投资者的预期。当然,这些预期与未来的预期需求有关。我们可以建立一个更复杂的模型来解释这些预期,但我们不会在这里这样做。
底线是,比特币和美元之间,以及比特币和其他法定货币之间存在市场。这个市场有足够的流动性,你可以以可靠的方式进行适度的买卖,尽管价格会波动。最后,只要你有办法估计不可知因素,比如未来人们会有多愿意使用比特币来调解交易,就有可能创建一个经济模型,来了解这个市场的供求关系,并预测市场可能会发生什么。这种经济建模很重要,而且信息量很大,今天肯定有人在做一些细节,但是这个市场的详细经济模型超出了本文的范围。
延伸阅读
保护比特币与银行保护货币的方式有一些相似之处,也有重要的不同。罗斯·安德森安全教科书的第 10 章名为“银行和簿记”,是一本很好的读物。整本书可以在网上免费获得:
我们引用的分析比特币交易所关闭的研究是:
Anderson, Ross. *Security Engineering*. Hoboken, NJ: John Wiley & Sons, 2008.
阿迪·萨莫尔关于秘密共享的论文:
Moore, Tyler, and Nicolas Christin. “Beware the Middleman: Empirical Analysis of Bitcoin-Exchange Risk.” In *Financial Cryptography and Data Security*. Heidelberg: Springer 2013.
一篇描述条款的论文,一个保护隐私的偿付能力证明协议,是:
Shamir, Adi. “How to Share a Secret.” *Communications of the ACM* 22(11), 1979.
用户很难选择容易记忆又难以猜测的密码,因为现代密码破解技术非常聪明有效。本文介绍了一种这样的技术:
Dagher, Gaby, Benedikt Bünz, Joseph Bonneau, Jeremy Clark, and Dan Boneh. “Provisions: Privacy-Preserving Proofs of Solvency for Bitcoin Exchanges.” In *Proceedings of the ACM Conference on Computer and Communications Security*. New York: ACM Press, 2015.
2014 年实际交易费用调查见:
Weir, Matt, Sudhir Aggarwal, Breno De Medeiros, and Bill Glodek. “Password Cracking Using Probabilistic Context-Free Grammars.” Presented at the 2009 IEEE Symposium on Security and Privacy, Oakland, CA, 2009.
A survey of transaction fees in practice through 2014 is given in:
Möser, Malte, and Rainer Böhme. “Trends, Tips, Tolls: A Longitudinal Study of Bitcoin Transaction Fees.” Presented at the Second Workshop on Bitcoin Research, Puerto Rico, 2015.