宣布新的 MultiChain 钱包 PlatoBlockchain Data Intelligence。 垂直搜索。 哎。

宣布新的MultiChain钱包

迈向性能和可扩展性的重要一步

经过两个月的深入开发和测试,我们很自豪地发布具有完全重写的节点钱包的最新版MultiChain Alpha。 这个新的钱包改变了在MultiChain中创建,接收和存储交易的性能和可伸缩性。

在详细介绍之前,让我提供一些背景信息。 当我们开始开发MultiChain时,我们决定使用 比特币核心,这是公共比特币网络的标准节点。 用编程术语来说,这意味着MultiChain是比特币软件的“叉子”。 我们的主要推理是,从某种意义上讲,比特币是(并且继续是)价值最高,经过最艰难测试的加密货币生态系统。

从正面来看,与从头开始编写区块链节点相比,该决定帮助我们快速进入了市场。 尽管公共和私有区块链之间存在许多差异,但它们具有大量的技术共同点,包括对等协议,交易和块结构,数字签名创建和验证,共识规则,密钥管理以及对节点API。 来自比特币核心的分叉使我们能够利用其成熟度,并专注于MultiChain为区块链增加的内容–可配置性,许可和本机资产支持。 因此,我们能够在开始开发仅2015个月后于6年XNUMX月发布第一个Alpha版。

但是,除了这些好处之外,我们还必须接受一个事实,即比特币核心的某些方面在架构上很差。 虽然它们在小规模上可以正常工作,但是随着使用量的增加,它们的性能会急剧下降。 由于公共比特币网络仍然限制为每秒几笔交易,因此对于大多数比特币核心用户而言,长期以来这不会成为问题。 但是,由于私有区块链的目标是每秒数百或数千笔交易,所以我们知道,迟早需要消除这些瓶颈。

比特币核心的钱包

在这些痛点中,比特币核心中的“钱包”始终是最关键的。 它的工作是存储与节点特别相关的交易,因为它们涉及其拥有的区块链地址或“只看”所跟踪的活动地址。 例如,每次向一个节点发送资金或从一个节点发送资金的交易都必须存储在该节点的钱包中。 而且,每当节点创建交易时,它都必须搜索新交易将花费的先前钱包交易的一个或多个“未使用输出”。

那么,我们从比特币核心继承的钱包又怎么了? 实际上,三件事:

  • 所有钱包交易都保存在内存中。 这会导致启动时间变慢,并且内存使用量迅速增加。
  • 许多操作都会对电子钱包中的每个旧旧交易进行低效率的“全面扫描”。
  • 钱包中的每笔交易都被完整存储,包括任意“元数据”,从节点的角度来看,这些“元数据”没有任何意义,并且已经存储在磁盘上的区块链中。 这非常浪费。

结果是,存储了大约20,000笔交易,Bitcoin Core的钱包速度大大降低。 在200,000万左右后,它几乎停止运转。 更糟糕的是,由于MultiChain区块链每次交易最多允许8 MB元数据(相比之下,比特币的80个字节),即使有少量交易,钱包的内存需求也会迅速膨胀。

重要的是要澄清这些缺点仅适用于比特币核心的 电子钱包把钱转出,而不是其一般的交易处理能力。 换句话说,它可以轻松地处理和存储数百万(甚至数十亿)与自己的地址无关的交易,因为这些交易是保存在磁盘上而不是内存中。 例如,许多流行的比特币交易所和钱包按原样使用Bitcoin Core,但将自己的交易存储在外部而不是在节点内部。

MultiChain的新钱包

我们本可以对MultiChain用户提出同样的要求,将他们自己的交易存储在节点之外。 但是,这并不是一个正确的解决方案,因为它会使每个链参与者的设置和维护大大复杂化。 因此,相反,我们咬紧牙关,从头开始重写了钱包。

新钱包有何不同? 如果您有数据库方面的经验,答案可能很明显:

  • 它们不是将钱包交易保存在内存中,而是以合适的格式存储在磁盘上,并在必要时检索感兴趣的交易。
  • 除了执行完整的钱包扫描外,还可以通过各种方式对交易进行“索引编制”,以使满足特定条件的交易能够快速定位。
  • 任何大于256字节的交易元数据都不会存储在钱包中。 相反,钱包包含指向该元数据在区块链本身中位置的指针。

换句话说,我们已经重建了节点内钱包,使其能够由数据库正确驱动(使用 级别数据库),而不是依靠无法有效搜索的单纯的内存结构。 毫不奇怪,差异(在3.4 GHz Intel Core i7上测得)非常明显:

多链钱包交易吞吐量

内存使用

这些图显示,一旦旧钱包包含250,000万笔交易,其发送速率将降至3 tx / sec,并增加600 MB的节点内存使用量。 相比之下,新钱包可维持超过100 tx /秒的速度,仅增加90 MB。 我们在这一点上停止了对旧钱包的测试,但是即使存储了6-8百万笔事务,新钱包仍将继续以每秒100 tx的速度发送数据,并且由于使用数据库缓存,其使用的RAM约为250 MB。

这些测试是在实际条件下执行的,节点的钱包中有多个地址和资产(因此有许多未使用的交易输出)。 在理想的情况下(一个地址,一个资产,几个UTXO),持续发送速率超过400 tx / s。 无论哪种方式,作为此重写的一部分,我们还正确地在干净的内部接口之后抽象了所有钱包的功能。 这样,将来便可以轻松支持其他数据库引擎,从而实现更高的健壮性和速度。

重申一下,所有这些数字都是指节点可以在其本地钱包中创建,发送和存储交易的速率,而不是在处理其他节点创建的交易方面的吞吐量。 对于一般的网络吞吐量,MultiChain当前可以处理200至800 tx / sec,这取决于其运行的硬件。 (对任何有希望在常规硬件上保证数字达到100,000 tx / sec的区块链软件持怀疑态度,因为瓶颈是数字签名验证,这需要实时执行。如果节点未验证单个交易签名,则无法跨信任使用区块链边界,使其不比常规的分布式数据库好。)

最后,我想提到MultiChain的下一个主要功能,该功能需要重写此钱包。 称为流的此功能为区块链上的通用数据存储提供了高级抽象和API。 您可以将流视为时间序列或键值数据库,并具有去中心化,数字签名,时间戳和不变性等与区块链相关的附加好处。 我们知道许多可以使用此功能的区块链用例,我们已经在努力构建它。 关注此空间。

请发表任何评论 在LinkedIn.

技术附录

从MultiChain alpha 22开始,您可以通过检查以下内容来验证当前正在运行的钱包版本 walletdbversion 的领域 getinfo or getwalletinfo API调用。 值 1 表示原始的比特币核心钱包,以及 2 表示新的MultiChain钱包。

如果在现有链上运行新版本的MultiChain,它将不会立即切换到新钱包。 您可以通过停止节点然后重新运行来升级钱包 multichaind 与参数 -walletdbversion=2 –rescan。 您可以使用以下类似方法降级 –walletdbversion=1 –rescan.

默认情况下,当您在新链上启动节点时,它将自动使用新钱包。 您可以通过运行来更改 multichaind 第一次使用参数 –walletdbversion=1.

有了新的钱包,所有 多链API 除了旧的事务查询API以外,其工作方式与以前完全相同 getreceivedbyaddress, listreceivedbyaddresslisttransactions (使用 listwallettransactions or listaddresstransactions 代替)。 此外,新钱包不支持与比特币核心实施不佳且即将弃用的“账户”机制相关的API调用和参数,而MultiChain从未正确支持该机制。 使用错误消息可以安全地禁用这些调用。

资料来源:https://www.multichain.com/blog/2016/07/announcing-the-new-multichain-wallet/

时间戳记:

更多来自 Multichain