



比特币是一种协议,可以通过使用同样协议的客户端应用程序进行访问。“比特币钱包”是比特币系统最常见的用户界面,就像Web浏览器是HTTP最常用的用户界面一样。比特币钱包有很多种类型,就像有很多网络浏览器一样(例如Chrome、Safari、Firefox和Internet Explorer等)。就像我们都有自己喜欢的浏览器,不同比特币钱包的质量、性能、安全性、隐私和可靠性也各不相同。比特币协议还有一个参考实现,其中包括一个“Bitcoin Core”的钱包,该钱包的最初版本是由中本聪编写实现的。
比特币钱包是比特币生态系统中开发最活跃的应用程序之一。竞争激烈,就在此刻可能又有新钱包正在被开发,而前一年的几款钱包已不再被积极维护。许多钱包专注于特定平台或用途,一些更适合初学者使用,另一些则为高级用户提供了丰富的功能。选择钱包是高度主观的,它取决于使用场景和用户的专业知识水平。因此,推荐一个特定的品牌或钱包是没有意义的。然而,我们可以根据平台和功能对比特币钱包进行分类,并对所有不同类型的钱包提供一些清晰的介绍。尝试使用几种不同的钱包,直到找到一个能满足你需求的钱包,这是值得的。
比特币钱包可以根据平台进行如下分类:
桌面钱包
桌面钱包是作为参考实现而创建的第一种类型的比特币钱包,许多用户为特定功能、自主性和资金控制而使用桌面钱包。在Windows和Mac OS等通用操作系统上运行钱包有一定的安全隐患,因为这些平台往往配置不当且不安全。
移动钱包
移动钱包是最常见的比特币钱包类型。这些钱包运行在智能手机操作系统上(如iOS和安卓系统),往往是新用户的理想选择。很多移动钱包设计得简洁易用,但也有为资深用户提供全面功能的移动钱包。为了避免下载和存储大量数据,大多数移动钱包从远程服务器获取信息,但这一做法会向第三方透露你的比特币地址及余额信息,降低了你的隐私保护程度。
网页钱包
网页钱包通过网络浏览器访问,并将用户的钱包服务运行在第三方拥有的服务器上。这类似于网络邮件,完全依赖于第三方服务器。其中一些服务使用在用户浏览器中运行的客户端代码,能够保持比特币密钥在用户手中,尽管如此,对服务器的依赖性仍然会损害用户隐私。然而,大多数服务为了让用户使用得更便捷,会接管比特币密钥的控制权。如果拥有大量比特币,则不建议使用这种第三方系统。
硬件钱包
硬件钱包指能够使用专用硬件和固件存储密钥并签名交易的设备。它们通常通过USB数据线、近场通信(Near-Field-Communication,NFC)或可识别二维码的相机与桌面、移动设备或网页钱包连接。通过在专业硬件上处理所有比特币相关操作,这些钱包对许多类型攻击的抵抗力更强。这种硬件签名设备经常被称为“硬件钱包”(俗称冷钱包),但它们需要与功能齐全的钱包配对才能发送和接收交易信息,用户在使用硬件钱包时,安全性和隐私性重度依赖于与之配对的钱包所提供的安全性和隐私性。
另一种对比特币钱包进行分类的方法是根据它们的自治程度以及与比特币网络进行交互的方式:
全节点
全节点是一个程序,它校验所有比特币交易的完整历史记录(每个用户的每一笔交易)。全节点还可以存储之前验证的交易,并向本机或者通过网络给其他比特币程序提供数据。全节点使用大量的计算机资源——每日比特币的交易需要的资源相当于每天观看一个小时流媒体视频所需的资源——但全节点为用户提供了完全的自治性。
轻量级客户端
轻量级的客户端,也称为简单支付验证(Simplified Payment Verification,SPV)客户端,需要连接到全节点或其他远程服务器以接收和发送比特币交易信息,但在本地存储用户钱包。它可对接收到的交易进行部分验证,并能独立创建转账交易。
第三方API客户端
第三方API客户端是通过第三方API与比特币交互的客户端,而不是直接连接到比特币网络。这时钱包可能由用户或第三方服务器存储,但客户信任三方服务器会提供准确的信息并保护隐私。
比特币是一种点对点(Peer to Peer,P2P)网络。全节点即为网络中的一个点:每个点都会独立验证每一笔已确认的交易,并能够自主为其用户提供数据。轻量级钱包和其他软件则是客户端:每个客户端都依赖从一个或多个全节点来获取有效数据。比特币客户端可以对接收到的部分数据进行二次验证,并且可以与多个点建立连接,以减少对单个点的完整性依赖,但是客户端的安全性最终依赖于点的完整性。
一个非常重要的需要额外考虑的因素是谁掌控私钥。正如我们将在后续章节中看到的那样,比特币的访问权限是由“私钥”控制的,它们就像很长的密码。如果只有你一个人知道这些私钥,那么你就掌控了自己的比特币。相反,如果你没有控制权,那么你的比特币就是由第三方在管理,最终由他们代理你来控制你的资金。私钥管理软件可以根据控制方式分为两个重要类别:钱包(你控制私钥)以及三方托管资金账户(由保管人控制私钥)。为了强调这一点,我(Andreas)创造了这个金句:汝钥汝币,他钥他币(Not your keys,not your coins)。
结合这些分类,比特币钱包可以分成几个类别,其中最常见的三种是桌面全节点钱包(你掌控私钥)、移动轻量级钱包(你掌控私钥)以及基于网络的第三方账户(你不掌控私钥)。不同类别之间的界限通常很模糊,因为许多钱包在多个平台上运行,并且可以以不同的方式与比特币网络进行交互。
Alice不懂信息技术,最近才从她的朋友Joe那里听说了比特币。一次聚会上,Joe正兴致勃勃地向周围的人讲解比特币,并做了演示。Alice感到很好奇,于是问Joe如何才能使用比特币。Joe说,对于新用户来说,移动钱包是最佳选择,他推荐了几个他最喜欢的钱包。Alice下载了Joe推荐的一个钱包,并将它安装到了手机上。
当Alice第一次运行钱包应用程序时,她选择创建一个新的比特币钱包。因为她选择的钱包是一个非托管钱包,所以Alice(并且只有Alice)能控制她的私钥。因此,她负有备份私钥的责任,因为丢失私钥意味着她将无法使用她的比特币。为了方便备份,钱包会生成一个恢复码,可用于找回她的钱包。
现在大多数非托管比特币钱包都会为用户提供恢复码以供备份。恢复码通常由程序随机选择的数字、字母或单词组成,用作钱包生成私钥的基础。示例见表1-1。
表1-1:恢复码样例
恢复码有时也被称作“助记词”或“助记词组”,你应该将这些词记在脑中。但把这些词组写在纸上要比大多数人的记忆更加省事和可靠。它的别称是“种子词”,因为它为那个生成钱包所有密钥的函数提供了输入(“种子”)。
如果Alice的钱包出现了问题,那么她可以重新下载一个钱包软件,并输入恢复码以重建包含她曾发送或接收的所有区块链上交易的钱包数据库。然而,仅用恢复码恢复,并不能还原Alice在钱包中额外输入的数据,比如她为特定地址或交易所设置的标签。虽然失去这些额外数据并没有丢失资金那么严重,但它们仍然具有特定的重要性。想象一下,如果你需要复查一份旧的银行或信用卡对账单,而你的收(付)款名称都被涂掉了。为了防止用户数据丢失,许多钱包提供了除恢复码之外的备份功能。
现今,额外备份功能对一些钱包而言比过去更加重要。许多比特币支付现在都使用“链下技术”进行,并非每笔支付都存储在公共区块链中。这降低了用户的成本并提高了隐私性,还提供了其他好处,但这意味着像恢复码这种依赖链上数据的恢复机制无法保证找回用户所有的比特币。对于支持链下技术的钱包,频繁备份钱包数据库显得尤为重要。
值得注意的是,当第一次向新的手机钱包发送资金时,许多钱包通常会重新验证你是否已安全备份了恢复码。这可能只是一个简单的提醒,也可能要求用户手动重新输入恢复码。
虽然许多合规的钱包会提示你重新输入恢复码,但也有不少木马应用程序模仿钱包的设计,坚称你需要输入恢复码,然后将输入的码传送给恶意软件开发者,以便他们窃取你的资金。这相当于试图诱骗你提供银行密码的钓鱼网站。对于大多数钱包应用程序而言,它们请求你输入恢复码的两种情况只有在钱包初始化时(在你收到任何比特币之前)以及在恢复钱包期间(在你丢失对原始钱包的访问之后)。如果应用程序在其他时间要求你输入恢复码,则请咨询专家以确保你没有被网络钓鱼。
Alice现在准备开始使用她的新比特币钱包。她的钱包应用程序随机生成了一个私钥(在4.1.1节中会有更详细的描述),该私钥将被用来生成指向她钱包的比特币地址。此时,她的比特币地址尚未为比特币网络所知,也不会在比特币系统的任何部分“注册”。她的比特币地址仅仅是与她可以进行资金访问的私钥相对应的数字。这些地址是由她的钱包独立生成的,无须调用或依赖任何服务。
比特币有多种不同的地址和收款码。你可以将这些地址或收款码分享给其他比特币用户,这样他们就可以直接向你的钱包发送比特币。与他人分享地址或收款码时,你无须担心比特币的安全性。即便其他人知道了你的比特币地址,他们也无法从你的钱包中提取资金——所有支出都必须由你来控制。然而,如果你给两个人同一个地址,他们就能看到彼此发送给你的比特币数量。如果你将地址公开,则每个人都能看到其他人发送了多少比特币到该地址。为了保护你的隐私,每次请求付款时,你都应使用新地址生成新收款码。
Alice单击“接收”按钮,屏幕上展示了一个二维码,如图1-1所示。
二维码通常是一种黑白点组成的正方形图形,它是一种条形码,包含了可以通过Joe的智能手机相机扫描的信息。
图1-1:Alice运用手机比特币钱包中的“接收”界面,展示了二维码形式的地址
发送到本书中的地址的资金将会丢失。如果你想测试发送比特币,请考虑捐赠给一个接受比特币的慈善机构。
新用户的首个任务就是获取一些比特币。
比特币交易是不可撤销的。大多数电子支付网络,如信用卡、借记卡、PayPal以及银行账户转账都是可以撤销的。对于出售比特币的人来说,这一差异带来了极高的风险,即买家在收到比特币后可能会撤销电子支付,实际上这是对卖家的诈骗。为了降低这种风险,接受传统电子支付换取比特币的公司通常要求买家进行身份验证和信用评估,这可能需要几天甚至几周的时间。作为一个新用户,这意味着你不能即刻通过信用卡购买比特币。然而,只要有点耐心和创造性思维,你就不需要等待了。
作为一名新手,这里有一些获取比特币的方法:
· 找到一个拥有比特币的朋友,并直接向他购买。很多比特币用户就是这样开始的。这种方法最为简单。想要遇到拥有比特币的人,一种方式是参加 Meetup.com 上列出的当地比特币聚会。
· 通过出售产品或服务来赚取比特币。如果你是程序员,那就出售你的编程技能。如果你是发型师,就提供通过剪发换取比特币的服务。
· 在你所在的城市使用比特币AT M。比特币AT M是一种接受现金并将比特币发送到你智能手机上的比特币钱包的机器。
· 使用与你银行账户关联的比特币货币交易所。如今许多国家都设有数字货币交易所,为买家和卖家提供一个用当地货币交换比特币的场所。像BitcoinAverage( https://bitcoinaverage.com )这样的汇率列表服务,通常会列出每种货币的比特币交易所。
比特币相较于其他支付系统的一个优势是:当正确使用时,它能为用户提供更多的隐私保护。获取、持有和花费比特币并不需要你向第三方透露敏感的个人身份信息。然而当比特币涉及货币兑换等传统系统,比如数字货币交易所时,通常要遵守国家和国际法规。为了将比特币兑换成本国货币,你通常需要提供身份证明和银行信息。用户应当知道,一旦比特币地址与身份关联,关联地址的其他比特币交易也可能变得容易识别和追踪——包括之前进行的交易。这也是许多用户选择在交易所账户之外多维护一个独立的钱包的原因之一。
Alice经朋友介绍认识了比特币,因此她可以轻松地获取她的第一笔比特币。接下来,我们将看看她如何向朋友Joe购买比特币,以及Joe如何将比特币发送到她的钱包。
在Alice向Joe购买比特币之前,他们必须就比特币与美元之间的汇率达成一致。这就引出了比特币新手常问的一个问题:“比特币的价格是谁定的?”简而言之,比特币的价格由市场决定。
比特币和大多数其他货币一样,采用浮动汇率。这意味着比特币的价值会根据其在各个交易市场的供求关系波动。例如,比特币对美元的“价格”是根据在每个市场上比特币与美元最近的交易计算得出的。因此,价格在每秒钟都会出细微的波动。一个定价服务会聚合多个市场的价格,并计算出一个成交量加权平均值,这个值代表了货币对(例如,BTC/USD)在广义市场的汇率。
市面上有数以百计的应用程序和网站可以提供当前的市场汇率,以下是一些最受欢迎的:
Bitcoin Average(https://bitcoinaverage.com)
该网站提供了一个简单的视图,展示了每种货币的成交量加权平均值。
CoinCap(https://coincap.io)
一个聚合服务平台,列出了包括比特币在内的数百种加密货币的市值和汇率。
芝加哥商品交易所比特币参考汇率(https://oreil.ly/ACieC)
一种可供机构和商业合同参考的基准汇率,作为芝加哥商品交易所(Chicago Mercantile Exchange,CME)投资数据源的一部分提供。
除了这些网站和应用程序之外,大多数比特币钱包还会自动转换比特币和其他货币对应的价格。
Alice决定购买0.001比特币。在她和Joe查看了汇率之后,她给了Joe相应的现金,打开了她的移动钱包应用程序,并选择了“接收”。这会显示出一个二维码,上面是Alice的第一个比特币地址。
Joe在他的智能手机钱包中选择“发送”功能,并打开了二维码扫描器。这样他就可以用手机摄像头扫描二维码,而不必输入Alice那一长串的比特币地址。
Joe已将Alice的比特币地址设置为接收者。Joe输入的金额是0.001比特币(BTC),参见图1-2。一些钱包可能会以不同的单位显示金额:0.001BTC即1毫比特币(mBTC)或者100000聪(sats)。
图1-2:比特币钱包发送界面
有些钱包可能会提示Joe为这笔交易添加一个标签。如果输入标签,则几周或几个月后,Joe就能回忆起他当初发送这0.001比特币的原因。有些钱包还会就交易手续费进行提示。根据钱包的类型及交易发送的方式,钱包可能会要求Joe手动输入交易手续费率,或者提供一个推荐的费用(或费率)。交易手续费越高,交易确认的速度就越快(参见后文“确认”部分)。
Joe认真核对了一遍,确保输入的金额无误,因为他即将转账,一旦操作失误,后果将不可逆转。他反复确认了地址和金额后,按下发送按钮进行交易。Joe的手机钱包创建了一笔交易:从Joe的钱包获取资金,并使用Joe的私钥签名交易,将0.001BTC发送到Alice提供的地址。这向比特币网络表明Joe已授权将资金转移给Alice的新地址。随着交易通过点对点协议传输,它迅速在比特币网络中传播。仅仅几秒钟后,网络中大多数连接良好的节点都会收到这笔交易并首次得知了Alice的地址。
与此同时,Alice的钱包会不断地在比特币网络上“监听”新的交易活动,寻找任何与其包含地址相匹配的交易。在Joe的钱包传输交易的几秒钟后,Alice的钱包就会显示它正在接收0.001比特币(BTC)。
最初,Alice的地址会显示来自Joe的转账状态为“未确认”,这意味着交易已经传播至网络,但还未在比特币交易账本中被记录,这个账本被称为区块链。如要将状态改为确认,交易必须被包含在一个区块中并被添加到区块链上,这个过程平均每10分钟发生一次。用传统金融术语来说,这相当于清算。关于比特币交易的传播、验证和清算(确认)的更多细节,详见第12章。
Alice现在自豪地拥有了0.001比特币,并且可以使用。在接下来的几天里,Alice通过比特币ATM和数字货币交易所购买了更多比特币。在第2章中,我们将了解她第一次购买比特币背后的底层交易和传播技术的更多细节。
[1] 《比特币:一种点对点的电子现金系统》( https://oreil.ly/KUaBM ),中本聪。