比特币钱包同步

让我们谈谈数字钱包与比特币网络的同步。 我们概述了主要方法,其工作原理和复杂性。 该材料不仅对开发人员有用,而且对普通用户熟悉数字钱包的功能以及使用钱包的安全操作方面也很有用。

根据本文的资料,记录了区块链在线课程“将钱包与比特币网络同步 ”的演讲之一。

基本钱包功能


让我们从数字钱包的基本功能开始:

  • 备份私钥;
  • 付款接受;
  • 余额显示;
  • 显示交易记录;
  • 发送付款。

要备份私钥,您只需要负责存储和管理密钥的模块。 但是,对于其余四个功能,您肯定需要使用比特币网络。 实际上,为了读写公共事务数据库,您至少必须成为该网络的节点之一,并遵循规范来处理和交换其中的数据。 因此,必须具有有关某个钱包的地址参与的所有交易的数据。 准备新交易并进行付款时,也需要网络当前状态的数据。

数字钱包用户在接受和发送付款时必须可靠地知道的最重要的事情是他们的交易状态。 显然,如果发送了事务,但未收到完整的确认,则认为事务未完成。 结果,接收者不能接受付款以例如退货或提供服务。

在分布式网络中工作的困难


使用分布式网络是一个相当复杂的主题,通常会遇到以下问题。 其中一种方法是检查从分布式网络接收的数据的方法,第二种方法是优化此数据的数据存储。 这些需求有些冲突,因为存储的数据量更大,可以更完整地验证新事务和块。 对于这些问题,没有理想的解决方案,不可能可靠地使用最少的资源来处理事务,因此您必须寻求一些平衡,这是对简单性和安全性的折衷。

另一个问题如下。 要在整个网络节点上的特定地址处获取交易历史记录,您必须遍历整个区块链(从创始到最后一次知道),这是足够长的,因为这是大量数据,而蛮力是一种有效的方法。 因此,您可以使用某些方法来优化查询。 为此,在常规网络节点上使用特殊的加载项,这有助于对区块链建立索引并缓存一些数据,从而加快对流行指标的搜索。 根据这个原理,任何区块链浏览器都可以工作,例如blockchain.info,它可以快速返回几乎任何地址,任何交易等数据。

因此,存在几种根本不同的方法来实现数字钱包与分布式网络的交互和同步。 让我们看看它们。

使用支付网络进行钱包同步的方法


主要有三种方法。 第一个假设钱包本身是比特币网络的完整节点。 第二种方法使用所谓的受信任节点。 实际上,这是一个奇怪的主机,但是钱包用户信任他。 第三种方法涉及使用简化付款验证(SPV)方法与轻量级版本与其他网络节点直接交互。 此技术使您可以相当高的可靠性来验证事务的有效性,而不必诉诸于启动完整的网络节点。 让我们仔细看一下每种同步方法。

图片

与完整的主机一起工作


在第一种情况下,一切都非常简单。 您的钱包有一个存储整个区块链的模块,以及一个与比特币网络其他节点通信的模块。 因此,您始终可以检查新的传入事务:它确实符合协议规则,是否承担双重费用等。您完全可以控制数据验证。

这种方法的缺点是需要分配大量磁盘空间来存储完整的区块链,以使网络节点保持不间断运行并及时进行软件更新。

经常接受和发送大量付款的普通用户使用此方法,这需要高度的可靠性。 此外,所有提供比特币集中存储和在线访问钱包的主要服务都必须使用这种方法。 因为对安全性以及与比特币的独立工作有很高的要求。

重要的是要了解集中式比特币存储的用户完全取决于此服务以及该服务使用的网络节点的正确操作。 实际上,如果将硬币存储在这样的服务上,则它们不属于用户而是属于服务。

请注意,即使对于普通用户,使用这种方法也是最简单,最可靠的方法之一。 为此,您只需要获取源代码或现成的二进制文件(例如Bitcoin Core)并运行该软件。 仅对于计算机的要求,可以考虑一个明显的缺点。

与受信任的主机一起工作


这种方法与前一种方法的区别在于,钱包逻辑和交易验证逻辑是分开的。 有一个所谓的可信比特币网络节点。 粗略地说,这是最常见的完整比特币网络节点,用户将其委托给他进行交易验证。 例如,它可以是他的朋友支持的主机,而用户可以委托他检查他们的交易。

这种方法通常用于移动数字钱包。 假设一家开发手机钱包的公司支持受信任的站点,并承诺将确保正确验证交易。 在这种情况下,用户相信公司对数字钱包开发人员的信任,实际上相信承诺。 但与此同时,值得了解的是,用户可以独立存储其私钥并确保在其设备上进行交易。 但是,用户不会检查交易确认的状态,而是会询问受信任的节点。

这种方法的优点和缺点是什么? 与前面的情况一样,尽管是间接的,但是您可以影响比特币网络中交易的验证,因为用户仍然具有受信任的网络节点。 优点是,它无需在其设备上存储区块链的完整副本。 但是,依赖于受信任节点是一个缺点,因为在发生故障的情况下,用户无法始终切换到另一个受信任节点。 由于交易验证是在远程服务器上进行的,因此您需要确保钱包和进行验证的服务器之间的数据传输通道的可靠性。 通过这种方法,出现了诸如“中间人”之类的威胁。

使用可信主机时,私钥与钱包地址分开存储。 在这种情况下,节点本身无法可靠地知道其需要跟踪的地址的更改。 这意味着数字钱包应不时将其感兴趣的地址列表通知受信任的节点。

这种方法的缺点是数字钱包依赖于可信节点,特别是在访问支付系统的相关数据方面。 一旦用户失去对受信任节点的访问权限或该节点拒绝服务,用户就会失去与网络的连接。 因此,用户失去了接收和发送付款的能力。 为了减少失去访问受信任站点的风险,可以选择多个受信任站点。 这意味着在正常情况下,用户可以连接并使用一个受信任的节点,但是如果访问丢失,则数字钱包会自动连接到另一个受信任的节点。 实际上,对于每个连接,钱包都会从受信任节点列表中随机选择一个节点。

该方法主要用于移动钱包,因为它允许您验证交易并简化移动应用程序的操作。 这样的比特币手机钱包的例子有Mycelium和Coinomi。 分布式实验室还开发并维护了一个名为Bitxfy的钱包,并在其中应用了此方法。

与SPV主机一起使用


将数字钱包与比特币网络同步的第三种常见方法是轻量级网络节点。 这是简化付款验证(SPV)。 通过这种方法,您可能不需要运行完整的节点或选择受信任的节点。 假定数字钱包直接与网络的其他节点进行通信:实际上,它选择了数十个其他人的完整节点并与其保持连接。 区别在于,轻量级节点与其他节点以相等的方式进行通信,与它们交换P2P消息,但不存储整个交易历史记录。 在这里,为了验证传入的交易,使用了SPV技术。 实际上,轻量级节点仅对进行整个网络节点的那些检查中的最重要部分进行检查。

在这种情况下,工作如何工作? SPV节点不像整个节点那样接收块,而仅接收块头,后者要小得多(80字节)。 标头包含必要的数据,以验证此块中特定交易的确认。 更具体地说,在块头中有一个Merkle Root字段,其中根据Merkle Tree方案计算出了该块中所有事务的哈希值。

图片

Merkle Tree方案允许您检查特定事务的哈希值是否包含在Merkle Root中,而无需在该块中包含所有其他事务。 因此,有了交易,该交易的区块头和Merkle分支(您可以从一个完整的节点请求),数字钱包可以确保该交易确实在特定区块中得到确认。

为什么不能将其视为对交易的完整验证? 当然,用户可以获得特定网络节点的独立性,并且可以直接与分布式网络进行通信。 为此,他不需要存储整个区块链。 但是缺点是,轻量级客户端无法完全独立地验证交易,因为您没有为此所需的所有必要数据(例如,未使用的硬币)。 他仅检查验证者对交易进行验证的事实-也就是说,他确保此交易已由其他节点以及网络(矿工)的大多数计算能力的所有者完全检查。 在这种情况下,可靠性再次归结为信任大多数处理能力用于公平操作。 换句话说,您无需亲自验证交易,而是将其信任大多数人。

使用实现SPV节点方法的数字钱包的一个特点是需要与大量独立的完整网络节点保持网络连接。 这对于最大程度地降低节点仅从攻击者的节点连接和接收数据的可能性是必要的。 然后,攻击者可以向用户强加交易历史记录的替代(伪)状态。 结果,受害人可以接受来自交易的付款,根据攻击者的版本,该付款已确认,但实际上没有。 为了增加在网络的真实状态下接收当前数据的机会,用户应最大化用于通信的独立节点的数量。 数量越多,他们对用户进行串谋的可能性就越小。

正如您已经了解的那样,SPV节点要求网络连接稳定运行,尽管如此,它们甚至在移动应用程序中也经常使用。 这种与支付网络的同步方法非常普遍,并且已在许多流行的比特币钱包中使用。 其中包括比特币钱包,Electrum以及面包钱包。

常见问题


“在哪里可以找到您可以信任的完整节点?”

很难回答您可以信任的节点。 这是个人喜好问题。 有提供信任信息的服务,例如Blockchain.info,很少有人信任它们,尤其是涉及大量信息时。 选择受信任的节点时必须非常小心,因为它是用户和支付网络之间的中介。 由于DNS提供商出现问题,Blockchain.info崩溃了两天后,使用Blockchain.info作为可信任节点的钱包无法与比特币网络同步,并且至少可以正常工作。

-钱包团队给予什么保证,它的责任是什么?

这个问题比技术问题更合法。 正式发行的任何软件都具有“使用条款”,其中规定了如果开发人员的软件存在某些问题,可以向开发人员介绍的内容。 “使用条款”在不同的应用程序中有所不同。 与往常一样,用户在开始使用他们的产品之前会回答他是否信任开发人员的问题。

-谁决定是否信任节点?

仅拥有钱包的用户。 可信站点的价值在于极大地简化钱包。 您选择一个信任交易验证的特定节点。 他承担了执行验证操作的全部负担,您信任他传递给您的网络状态数据。 这是个人信任的问题,甚至更多。

-可以信任多少个站点?

您可以选择任意数量的受信任节点,以最大程度地降低丢失网络访问的风险。 例如,三个节点。 如果您在访问第一个时遇到问题,则可以连接到第二个并继续以完全相同的方式进行操作。

-如果储存硬币的服务器被地震完全或部分破坏,将会发生什么?

在这里,有必要说的不是硬币,而是关于用于访问这些硬币的密钥的存储。 考虑一种情况的两种选择。 如果提供访问比特币网络访问权限的服务器被破坏。 它不会以任何方式影响您。 您将暂时失去对分布式数据库的访问权限,但是您仍将具有允许您花费这些硬币的密钥。 如果存储密钥的服务器被破坏,而您没有这些密钥的备份副本,那么您将无法访问硬币。

-放一个钱包,放硬币,在纸上写一个种子短语并删除它是否安全?

实际上,是的。 您需要保存种子短语-这是足够的最小值。 区块链存储有关哪些硬币存储在哪些地址的信息。 您需要保存私钥才能访问这些硬币。 就您而言,这是一个种子短语。

-是否可以在本地在区块链上添加一些附加组件以便能够分析区块链上的数据?

您可以添加任何将分析区块链的软件。 这可能是用户自己编写的软件,或者可能有交钥匙解决方案。 这完全取决于您的目标。 如果您想优化查询来搜索与特定地址相关的特定交易,就像区块链浏览器一样,您可以使用将为区块链建立索引并缓存某些数据的软件。 此类软件的一个示例是BitCore(由BitPay支持)。 BitCore是开源的,您可以将其与整个网站一起使用。

Source: https://habr.com/ru/post/zh-CN416469/


All Articles