随着Nano的发展,我们学习到开发者和交易所是如何使用网络和RPCs的。我们开始思考在安全性和并发性方面提升网络的方法。Nano成功的关键之一在于减少浪费(waste)使得网络尽可能有效率的运转。
Nano网络目前有四种类型的区块(open,change,send,receive),每一种类型的区块有轻微的区别,当然这些区别没有实际的需求(without real need)。通过引入通用区块(Universal Blocks),这四种类型的区块被合并成一体。
这次的协议升级会增加网络的效率,帮助提升安全性,开发者和交易所构建一个区块所需要的代码将被简易化(simplifies code needed)。本文将详细阐述通用区块的优点以及实施方案。
签名来检查绩效的增强
目前区块的签名是在运行主要账本的植入过程(running the main ledger insert process)中被检查的。这会带来一些缺点:
这些签名是连续处理的,意味着在签名被处理的过程中数据库锁打开的时间较长(database locks are held open longer),而这是不必要的。
通过查看区块,我们不知道是哪个账户验证了签名。在我们找到验证签名的账户数量之前,I/O操作必须执行以此从区块中找到相关账户。
需要一个额外的数据库索引(database index)来把头区块的哈希(head block hashes)映射到它们相关联的账户。这个过程中,数据库索引和I/O的开销是不必要的。
当账户本身在区块里面时,我们便可以查看无限制数量的签名,同时避免了任何I/O操作。尽管通过高并发和交易的低延迟性来增加了网络绩效,不可否认的是,这个改变(即引入通用区块)的缺点是会增加区块大小。总体来说这是一个可以接受的平衡(acceptable tradeoff)。
删除账本支持
任何不在真实区块里的数据,比如:账户,余额,代表人等是额外需要在账本里存储和储藏的数据。这对于历史节点(historical node)来说不是问题,但是对于区块删除来说意味着数据需要被存储以此来保持一致性。有了这些变化,每一个区块是一个账户在具体某一时刻的完全代表,这允许当移除旧区块的时候删除的账本变得更有进攻性。
有效余额和代表人锁定
目前一个账户的余额只有在发送区块(send block)才能被广播,一个账户的代表人是一个不常引用的数据(an infrequently piece of data),因此计算某个特定区块哈系的余额或者决定账户的代表人会需要很长的I/O操作。通过使用缓存表(by using cache tables)现有的账本如此工作。尽管这会有缺点:需要进一步的复杂性来保持缓存一致。另外一个问题是随着轻钱包的布置,现有余额(current balance)难以找回,这使得创造新的交易的难度稍微加大。随着通用区块的布置,我们可以通过查阅某一个区块来简单的获悉余额和代表人信息,而不是需要查询上一个拥有余额信息的发送区块的链,然后再添加所有的接受(adding all receives)。
首次展示
通用区块的支持将被添加至Nano version 11中,它会有两个阶段:
Parse canary:这个阶段会允许通用区块的解析(parsing),给所有人机会手动从旧版本更新换代。当大部分网络和代表人升级到版本11的节点时区块会生成。
Generate canary:这个阶段会允许通用区块的默认生成。此阶段会在更多的网络已经迁移和更新后展示。
一旦一个账户生成了通用区块,它今后便可能只产生通用区块。对于冷钱包不需要任何操作,当你想用冷钱包交易时,你需要升级到支持通用区块的最新钱包版本。
我们团队会协助交易所更新通用区块,新的开发文档会提供给想建立在Nano之上的开发者。谢谢大家的支持!
热搜
专注于技术类文章翻译的币圈自媒体
加密资产基础类设施和公链项目分析
第三代分布式账本技术爱好与研究者
SorosCryptoMania
一个人的命运,除了个人的奋斗,还要看历史的进程
领取专属 10元无门槛券
私享最新 技术干货