EOSIO开发更新(多索引API,上下文无关操作和新的解释器)

in #eos7 years ago

本文翻译自Daniel Larimer的medium更新日志,发表时间,2018/02/16。

EOSIO开发更新(多索引API,上下文无关操作和新的解释器)

在block.one的过去几周里,一些非常重要的更新会影响开发人员,可伸缩性和稳定性,因此非常高效。

通用多索引数据库API

开发智能合约涉及定义数据库模式以跟踪,存储和查找数据。开发人员通常需要对多个字段进行排序/索引的相同数据,并保持所有索引之间的一致性。

熟悉Steem和BitShares开发的人员知道boost :: multi_index_container的强大功能。这些容器提供了强大,灵活和安全的API。我一直希望为我们的WebAssembly合同提供一个类似的灵活和强大的系统。我很高兴地报告说,我们已经对智能合约如何访问数据库进行了更改,以便我们可以向开发人员提供非常类似的API。

数据库迭代器

实现这一点的很大一部分是创建基于迭代器的新数据库API。迭代器给WebAssembly一个句柄,通过它可以快速查找并遍历数据库对象。通过将查找数据库中的下一个或上一个项目的复杂性从O(log(n))更改为O(1),此新API可显着提高性能。

上下文无关操作

上下文无关操作涉及仅依赖于事务数据的计算。这种计算的主要例子是签名验证。只给出交易数据和签名,我们可以计算签署交易的公钥。这种计算是区块链必须执行的最昂贵的单个计算之一。由于此计算是上下文无关的(不依赖于区块链状态),因此可以并行执行。

上下文无关操作与其他用户操作相似,只是它们无法访问区块链状态来执行验证。这使EOSIO能够像签名验证一样并行处理所有上上下文无关操作。更重要的是,这可以实现通用签名验证。

要理解广义签名验证的重要性,请考虑区块链间通信的用例。在这个用例中,用户必须提供一个包含多达128个sha256操作和/或14个签名验证的merkle证明。所有这些数据和计算都是为了证明某个特定行为发生在外部链上的特定区块和/或证明某个特定区块是由大于2/3生产者验证的。业务逻辑只需要验证块ID是否有效以及该操作是否在该块中。业务逻辑不需要计算来证明操作在块中,而不需要从签名派生公钥的计算。

通过支持上下文无关操作,以太坊(Sharding,Raiden,Plasma,State Channels等)提出的大多数可伸缩性技术变得更加高效,可并行和实用。这将与EOSIO的其他方面协同工作,以实现高效的区块链间通信和无限的可扩展性。

SegWit

SegWit或隔离见证的概念是交易签名在交易不可分割地包含在区块链中后并不真正相关。一旦它不可变,签名数据可以被修剪,其他人仍然可以导出当前状态。由于签名代表大部分事务处理的大部分,这意味着磁盘使用和同步时间的显着节省。

这种相同的概念可以用于区块间通信的merkle证明。一旦证明被接受并且不可逆转地登录到区块链中,证明使用的2KB sha256散列就不再需要派生出适当的区块链状态。在区块间通信的情况下,这种节省比正常签名节省的成本高32倍。

SegWit的另一个例子是用于Steem博客文章。在这种模式下,一篇文章将只包含sha256(博客内容),博客内容将在隔离的见证数据中。块生产者会验证内容是否存在并具有给定的哈希值,但博客内容不需要存储以便从区块链日志中恢复当前状态。这使得能够证明内容曾经是已知的而无需永久存储所述内容。

关于SegWit如何在比特币中实施存在争议,但大多数与比特币相关的针对SegWit的争论在代表证明权益的背景下并不相关。例如,使用DPOS可以:

要求块生产者保留完整的记录

Inter-blockchain Merkle Proofs可以从公共数据中重新生成
区块制作者是公开的,负责提供证据证明其区块是有效的,并且交易存在适当的签名授权。
使用BFT-DPOS时,需要100%的块生产者合谋导致签名丢失,并且我们有21次独立验证。

WebAssembly解释器

EOSIO现在支持Web Assembly的两种不同的执行引擎。最初的JIT实现在初始的“慢”编译步骤之后提供快速执行,并且新的Binaryen解释器提供符合标准的参考实现,而没有任何缓慢的启动步骤。

当编译器优化x86时,块生产者将能够使用解释器。此外,如果对于哪个输出是“正确输出”存在争议,我们将能够使用标准定义的Binaryen解释器,将JIT实现作为必须产生相同输出的优化。

在我们的性能测试中,Binaryen解释器的速度约为JIT实施速度的20%但是,对于大多数事务来说,WASM执行时间只占整个事务处理时间的一小部分。数据库访问和其他区块链计算仍然代表了大部分处理时间。在我们的估计中,对于简单合同(如货币),解释者只影响真实世界的表现约5%。

我们将继续关注6月份EOSIO最初发布时的正确性,稳定性和安全性。也就是说,可扩展性和优化一直在我们的脑海中,EOSIO的一切都在设计中。

新的团队成员

我们想欢迎Arhag加入这个团队。 Arhag一直是BitShares和Steem的长期贡献者,目前正在与我们合作开发数据库API。

结论

开发正在快速进行,我们对这些最新开发感到非常兴奋。

Sort:  

Congratulations @ld909! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

Click here to view your Board

Do not miss the last post from @steemitboard:

Valentine challenge - Love is in the air!

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @ld909! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Do not miss the last post from @steemitboard:

Valentine's day challenge - Give a badge to your beloved!
Vote for @Steemitboard as a witness to get one more award and increased upvotes!