[区块链]-- EOS.IO技术白皮书

EOS.IO技术白皮书

2017年6月26日git

摘要: EOS.IO软件引入了一种新的块链结构,旨在实现分散式应用的垂直和水平扩展。这是经过建立一个能够构建应用程序的相似操做系统的结构来实现的。该软件提供账户,身份验证,数据库,异步通讯以及数百个CPU内核或群集上的应用程序调度。所产生的技术是一个块链结构,每秒能够扩展到数百万个事务,消除用户费用,并容许快速,轻松地部署分散的应用程序。github

请注意:在本白皮书中说起的克隆陀螺参考经过EOS.IO软件的启动式摇杆灯上的CRYPTOGRAPHIC TOKENS。他们不要参考与EOS TOKEN分配相关的EUS-BLOCKCHAIN上分布的ERC-20兼容性手套。web

版权全部©2017 block.one算法

未经许可,任何人均可以使用,复制或分发本白皮书中的任何非商业和教育用途的材料(即除费用或商业用途外),前提是原始来源和适用的版权声明被引用。数据库

免责声明:此EOS.IO技术白皮书仅供参考。block.one不保证本白皮书的准确性或结论,本白皮书按“原样”提供。block.one不做出明确的声明和保证,明示,暗示,法定或其余方式,包括但不限于:(i)适销性,特定目的的适用性,适用性,使用,标题或不侵权; (ii)本白皮书的内容没有错误; (iii)此类内容不会侵犯第三方权利。block.one及其关联公司对因使用,参考或依赖本白皮书或本文所含任何内容而致使的任何损害赔偿责任概不负责,即便被告知有可能发生此类损失。设计模式

背景

Blockchain技术于2008年推出了比特币货币,自那时以来,企业家和开发人员一直在努力推广该技术,以便在单个块链平台上支持更普遍的应用。安全

虽然一些块链平台一直在努力支持功能分散的应用,可是诸如BitShares分散式交换(2014)和Steem社交媒体平台(2016)等应用程序特定的块链已经成为使用成千上万平常活动用户的大量使用的块链。他们经过将性能提升到每秒数千个事务来实现,从而将延迟下降到1.5秒,消除费用,并提供与现有集中式服务提供的用户体验类似的用户体验。性能优化

现有的块链平台因为费用高昂,计算能力有限,阻碍了普遍的块连接采用。网络

块链应用的要求

为了得到普遍的使用,块上的应用须要一个足够灵活的平台来知足如下要求:架构

支持数百万用户

破坏企业如Ebay,Uber,AirBnB和Facebook,须要可以处理数千万活跃平常用户的块链技术。在某些状况下,应用程序可能没法正常工做,除非达到了大量用户,所以能够处理大量用户数量的平台相当重要。

无偿使用

应用开发人员须要灵活性为用户提供免费服务; 用户没必要为了使用该平台或从其服务中获益而付出代价。能够免费为用户使用的块链平台可能会获得更普遍的采用。而后,开发商和企业能够建立有效的获利策略。

轻松升级和Bug恢复

构建基于块链的应用程序的业务须要灵活性来加强其新功能的应用程序。

全部非平凡软件都受到错误的影响,即便是最严格的正式验证。该平台必须足够强大,以便在不可避免的状况下修复错误。

低延迟

良好的用户体验须要可靠的反馈,延迟时间不超过几秒钟。更长的延迟会阻碍用户,并使构建在块上的应用程序与现有的非块链替代方案竞争力较小。

顺序性能

有些应用程序因为顺序依赖的步骤而没法用并行算法实现。诸如交换机之类的应用须要足够的连续性能来处理高容量,所以须要具备快速顺序性能的平台。

并行性能

大规模应用程序须要在多个CPU和计算机之间划分工做负载。

共识算法(DPOS)

EOS.IO软件使用惟一的分散式一致性算法,可以知足块上的应用程序的性能要求,即受权证据证实(DPOS)。根据这种算法,在采用EOS.IO软件的块上持有令牌的人能够经过持续的批准投票系统来选择块生产者,任何人均可以选择参与块生产,而且将有机会产生与总投票成正比的块他们已经收到了全部其余生产者。对于私人块链,管理层可使用令牌来添加和删除IT人员。

EOS.IO软件使块可以精确地每3秒生产一次,正好有一个生产者被受权在任何给定的时间点产生块。若是在预约时间内不产生块,则跳过该时隙的块。当跳过一个或多个块时,块链中存在6个或更多个第二间隙。

使用EOS.IO软件块是以21轮生产的。在每轮开始时,选择了21个独特的块生产者。全面批准的前20名自动选择每一轮,最后一位制片人与其余制片人的投票数成正比。所选择的生产者使用从块时间导出的伪随机数进行混洗。这种洗牌是为了确保全部生产商保持与全部其余生产商的平衡链接。

若是生产者错过了一个块,而且在最近24小时内没有产生任何块,则它们将被删除,直到它们通知块状物再次生成块的意图。这确保了网络的顺利运行,经过最小化未被安排的被遗漏的块的数量被证实是不可靠的。

在正常状况下,DPOS块链不会经历任何叉,由于块生产者合做生产块而不是竞争。若是有叉子,共识将自动切换到最长的链条。该指标的工做原理是将块添加到块链链中的速率与共享相同共识的块生产者的百分比直接相关。换句话说,具备更多生产者的块状叉子的长度将比具备较少生产者的长度增加。此外,没有块生产者应该同时在两个叉上生产块。若是一个块生产者被捕获,那么这样的块生产者可能被投票。这种双重生产的密码证据也可用于自动清除滥用者。

交易确认

典型的DPOS块链有100%的块生产者参与。在广播时间平均1.5秒后,交易能够认定为99.9%肯定。

有一些很是状况下,软件错误,Internet拥塞或恶意块生产者将建立两个或更多个分支。为了绝对肯定交易是不可逆转的,节点能够选择在21个块生产者中等待15个确认。根据EOS.IO软件的典型配置,在正常状况下平均须要45秒。默认状况下,全部节点将考虑由21个生产者中的15个确认的块不可逆,而且不会切换到不包括长度的排除此块的分支。

一个节点有可能向用户发出一个很高的可能性,他们在叉子开始后的9秒内它们位于少数分支上。在连续2次错过的块以后,节点在少数分支上的几率为95%。有3个连续的错过的块有99%的肯定性在少数叉。能够生成一个强大的预测模型,它将利用关于哪些节点丢失的信息,最近的参与率以及其余因素来快速地警告操做者出现什么问题。

对这种警告的反应彻底取决于业务交易的性质,但最简单的反应是等待15/21确认,直到警告中止。

交易证实(TaPoS)

EOS.IO软件要求每一个事务都包括最近的块头的散列。这个哈希有两个目的:

  1. 防止不包括引用块的叉的事务重播; 和
  2. 向网络发出特定用户及其股份在特定分支上的信号。

随着时间的推移,全部用户最终直接确认块链,这使得难以伪造假冒链,由于假冒将没法从合法链路迁移交易。

账号

EOS.IO软件容许全部账户的长度为2到32个字符的独特的可读名称引用。该名称由账户的建立者选择。全部账户必须在建立时用最小的账户余额来支付,以支付存储账户数据的费用。账户名称还支持命名空间,所以账户@domain的全部者是惟一能够建立账户@ user.domain的用户。

在分散的状况下,应用程序开发人员将支付建立账户的名义成本以注册新用户。传统业务已经以广告,免费服务等形式得到的每一个客户花费大量资金。相比之下,新的封锁帐户的资金成本不大。幸运的是,没有必要为已经由另外一个应用程序注册的用户建立账户。

消息和处理程序

每一个账户能够将结构化消息发送到其余账户,而且能够定义脚本以在接收到消息时处理消息。EOS.IO软件为每一个账户提供本身的私人数据库,只能由本身的邮件处理程序访问。消息处理脚本还能够向其余账户发送消息。消息和自动消息处理程序的组合是EOS.IO如何定义智能合同。

基于角色的权限管理

权限管理涉及肯定消息是否被正确受权。权限管理的最简单形式是检查事务是否具备所需的签名,但这意味着所需的签名已是已知的。通常来讲,权力是与我的或我的群体有约束力的,每每是划分的。EOS.IO软件提供了一个声明式权限管理系统,可让账户细粒度和高级别地控制谁可以作什么和什么时间。

认证和权限管理必须标准化并与应用程序的业务逻辑分开是相当重要的。这使得开发工具可以以通用方式管理权限,并为性能优化提供重要机会。

每一个账户均可以经过其余账户和私钥的任何加权组合来控制。这建立了一个层次化的权限结构,反映了权限如何组织在现实中,并使得多用户对资金的控制比以往任什么时候候都更容易。多用户控制是安全性的最大贡献者,使用正常时,能够大大消除黑客盗窃的风险。

EOS.IO软件容许账户定义密钥和/或账户的组合能够将特定消息类型发送到另外一个账户。例如,能够为用户的社交媒体账户提供一个密钥,另外一个用于访问交换机。甚至能够给予其余账户许可,表明用户的账户行事,而无需分配密钥。

命名权限级别

使用EOS.IO软件,账户能够定义命名权限级别,每一个权限级别能够从更高级别的命名权限派生。每一个命名权限级别定义一个权限; 权限是由其余账户的密钥和/或命名权限级别组成的阈值多签名检查。例如,账户的“朋友”权限级别能够设置为账户被任何账户的朋友平等地控制。

X- 200454545 CEEC X- 发布许可只能执行诸如投票和发布等社交行为,而主动权限能够作全部事情,除了更改全部者。业主许但是为了冷藏,是可以作的一切。200新新新新新新旗新新旗新新旗新新旗新新旗新新旗新新旗新新旗新新旗新新旗新新旗旗新新旗旗新新旗新新旗新新旗新新旗旗新新旗新新200新200新200新200新200新200新新200新200新新200新新旗新新200新新旗新新200新新旗新新200新新旗新新200新新款旗新新款200新新新200

命名消息处理程序组

EOS.IO软件容许每一个账户将本身的消息处理程序组织成命名和嵌套组。这些命名的消息处理程序组在配置其权限级别时能够由其余账户引用。

最高级别的邮件处理程序组是账户名称,最低级别是该账户正在接收的单独邮件类型。这些组能够这样引用:@ accountname.groupa.subgroupb.MessageType。

在这种模式下,交换合同有可能将订单建立和取消分开存入和退出。经过交换合同进行分组是交换用户的便利。

权限映射

EOS.IO软件容许每一个账户定义任何账户的命名消息处理程序组与其本身的命名权限级别之间的映射。X- 20045 X- 200 X- 200 200 200 -40 200 200 -40 200 200 -40 200 200 200 200:200:经过此映射,任何朋友均可以做为帐户持有者的社交媒体发布。即便他们将做为账户持有者发布,他们仍然会使用本身的密钥来签名。这意味着老是能够肯定哪些朋友使用该账户,以什么方式。

评估权限

当传递类型为“ Action ” 的消息时,从@alice到@bob,EOS.IO软件将首先检查@alice是否为@ bob.groupa.subgroup.Action定义了一个权限映射。若是没有发现,那么@ bob.groupa.subgroup而后@ bob.groupa和最后@bob的映射将被检查。若是没有找到进一步的匹配,则假定的映射将是命名权限组@ alice.active。

一旦识别出映射,则使用阈值多签名过程和与所命名的权限相关联的权限来验证签名权限。若是失败,那么它会遍历父权限,最终遍历全部者的权限,@ alice.owner。

 

默认权限组

EOS.IO技术还容许全部账户拥有一个能够完成全部操做的“全部者”组,而一个“活动”组除了更改全部者组以外,还能够执行全部操做。全部其余权限组均派生自“活动”。

并行评估权限

权限评估过程是“只读”,而且事务的更改权限在块的结尾以前不会生效。这意味着全部事务的全部密钥和权限评估能够并行执行。此外,这意味着能够快速验证权限,而不须要从新开始昂贵的应用程序逻辑。最后,这意味着事务权限能够被评估为接收到待处理的事务,而且在应用它们时不须要从新评估。

全部考虑的事项,权限验证表明验证交易所需的计算的很大比例。使之成为一个只读和平行可并行化的过程,能够显着提升性能。

当从消息的日志重放块连接从新生成肯定性状态时,不须要再次评估权限。事务被包含在已知的好的块中的事实足以跳过这个步骤。这大大减小了与播放愈来愈多的块链相关的计算量。

具备强制延迟的消息

时间是安全的关键组成部分。在大多数状况下,不可能知道私钥是否在使用以前被盗用。基于时间的安全性在人们有须要将密钥保存在链接到互联网的计算机上进行平常使用的应用程序时更为关键。EOS.IO软件使应用程序开发人员能够指定某些消息在应用以前必须等待最小时间段包含在块中。在此期间,他们能够取消。

而后,当广播其中一个消息时,用户能够经过电子邮件或短信接收通知。若是他们没有受权,那么他们可使用账户恢复过程来恢复账户并收回消息。

所需的延迟取决于操做的灵敏度。喝咖啡能够绝不拖延地在几秒钟内不可逆转,而买房子可能须要72小时清算期间。将整个账户转移到新的控制可能须要最多30天。选择的确切延迟取决于应用程序开发人员和用户。

从被盗钥匙恢复

EOS.IO软件为用户提供了一种在钥匙被盗时恢复其账户控制的方法。账户全部者可使用在过去30天内活跃的任何全部者密钥以及其指定的账户恢复合做伙伴的批准,以重置其账户上的全部者密钥。账户恢复合做伙伴没法在全部者的帮助下重置账户的控制权。

因为黑客已经“控制”该账户,所以尝试执行恢复过程,黑客没有任何收获。200新新新新新新旗新新旗新新旗新新旗新新新200新200新新200新200新新200新200新200新200新新200新200新新200新200新新200新200新新200新200新新200新200新新200新200新新200新新新200新200新新200新新200新新200新新200新新新新200新新200新新200新新200新新200:这可能会危及黑客或在黑客中得到黑客。

这个过程也与简单的多签名安排很是不一样。经过多签名交易,另外一家公司是执行的每一个交易的缔约方,可是经过恢复过程,代理只是恢复过程的一方,而且没有平常交易的权力。这大大下降了全部参与者的成本和法律责任。

肯定性并行执行应用程序

块链共识取决于肯定性(可重现)的行为。这意味着全部并行执行都不能使用互斥体或其余锁定原语。没有锁,必须有一些方法来保证全部账户只能读写本身的私有数据库。这也意味着每一个账户顺序处理消息,并行性将在账户级别。

在基于EOS.IO软件的块链中,块生成器的工做是将消息传递到独立的线程中,以便并行评估它们。每一个账户的状态只取决于传递给它的消息。调度表是块生成器的输出,而且将被肯定性地执行,可是生成调度的过程没必要是肯定性的。这意味着块生产者能够利用并行算法调度事务。

并行执行的一部分意味着当脚本生成新消息时,它不会当即发送,而是在下一个周期中调度它。没法当即发送的缘由是由于接收方可能会在另外一个线程中主动修改本身的状态。

最小化通讯延迟

延迟时间是一个账户将消息发送到另外一个账户所需的时间,而后收到响应。目标是使两个账户可以在单个块内来回交换消息,而没必要在每一个消息之间等待3秒。为了实现这一点,EOS.IO软件将每一个块分为周期。每一个循环分为线程,每一个线程包含事务列表。每一个事务包含一组要传递的消息。该结构能够被可视化为树,其中交替层被顺序和并行处理。

Block

    Cycles (sequential)

      Threads (parallel)

        Transactions (sequential)

          Messages (sequential)

            Receiver and Notified Accounts (parallel)

在一个周期中生成的交易能够在任何后续周期或块中传送。块生产者将不断添加一个块的循环,直到最长的挂钟时间过去,或者没有新的生成的交易。

可使用块的静态分析来验证在给定周期内没有两个线程包含修改同一个账户的事务。只要保持不变量,能够经过并行运行全部线程来处理块。

只读消息处理程序

一些账户可能可以在经过或失败的基础上处理消息而不修改其内部状态。若是是这种状况,那么这些处理程序能够并行执行,只要在特定周期内的一个或多个线程中只包含特定账户的只读消息处理程序。

具备多个账户的原子交易

有时,最好确保邮件被原子地传递到多个账户并被其接受。在这种状况下,两个消息都放在一个事务中,两个账户将被分配相同的线程,而且消息顺序应用。这种状况对于性能来讲不是理想的,当涉及“计费”用户的使用时,他们将经过交易引用的惟一账户的数量来计费。

因为性能和成本缘由,最好是尽可能减小涉及两个或更多使用量较大的账户的原子操做。

块状态的部分评估

扩展块链技术须要组件是模块化的。每一个人都不该该运行一切,特别是若是他们只须要使用一小部分的应用程序。

交换应用程序开发人员运行完整节点,目的是向其用户显示交换状态。这种交换应用程序不须要与社交媒体应用程序相关联的状态。EOS.IO软件容许任何完整节点选择要运行的任何应用程序子集。传递到其余应用程序的消息将被安全地忽略,由于应用程序的状态彻底来自传递给它的消息。

这对与其余帐户的沟通有一些重要的影响。最重要的是,不能假定另外一个账户的状态在同一台机器上可访问。这也意味着,尽管启用容许一个账户同步调用另外一个账户的“锁”是诱人的,但若是其余账户不驻留在内存中,则此设计模式会中断。

账户之间的全部状态通讯必须经过包含在块链中的消息传递。

主观最佳努力调度

EOS.IO软件没法让块生产者向任何其余账户发送任何消息。每一个块生产者对处理交易所需的计算复杂度和时间进行本身的主观测量。不管交易是由用户生成仍是由脚本自动生成,这都适用。

在采用EOS.IO软件的推出的块链中,在网络级别,不管是执行0.01ms仍是完整10ms,全部事务都将收取固定的计算带宽成本。然而,使用该软件的每一个单独块生成器可使用它们本身的算法和测量来计算资源使用。当块生产者判定交易或账户消耗的计算能力不成比例时,他们在生产本身的块时简单地拒绝交易; 然而,若是其余块生产者认为它有效,他们仍将处理该交易。

通常来讲,只要一个block生产者认为交易是有效的,而在资源使用限制之下,全部其余块生产者也会接受它,可是交易找到该生产者可能须要1分钟。

在某些状况下,生产者可能会建立一个块,其中包含超出可接受范围的数量级的事务。在这种状况下,下一个块生产者能够选择拒绝该块,而且该绑定将被第三个生产者打破。这与若是大块形成网络传播延迟会发生什么不一样。社区会注意到一种虐待的模式,最终从流氓制片人那里取消选票。

这种对计算成本的主观评估使块链没必要精确地和肯定地测量运行多长时间。经过这种设计,无需精确地计算大量增长优化机会的指令,而不会突破共识。

令牌模型和资源使用

请注意:在本白皮书中说起的克隆陀螺参考经过EOS.IO软件的启动式摇杆灯上的CRYPTOGRAPHIC TOKENS。他们不要参考与EOS TOKEN分配相关的EUS-BLOCKCHAIN上分布的ERC-20兼容性手套。

全部块链都受到资源限制,须要系统来防止滥用。使用使用EOS.IO软件的块链,应用程序可使用三大类资源:

  1. 带宽和日志存储(磁盘);
  2. 计算和计算积压(CPU); 和
  3. 状态存储(RAM)。

带宽和计算有两个组成部分,即时使用和长期使用。块链维护全部消息的日志,而且该日志最终被全部完整节点存储和下载。使用消息日志能够重建全部应用程序的状态。

计算债务是必须执行的从消息日志从新生成状态的计算。若是计算债务增加太大,则须要对块状态进行快照,并丢弃块链的历史。若是计算债务增加太快,可能须要6个月才能重播1年的交易。所以,重要的是计算债务获得认真的管理。

块链状态存储是可从应用程序逻辑访问的信息。它包括订单和账户余额等信息。若是状态从未被应用程序读取,则不该该被存储。例如,博客内容和评论不会被应用程序逻辑读取,所以它们不该该被存储在块状态中。同时,一个帖子/评论,投票数和其余属性的存在确实被存储为块状态的一部分。

块生产者发布其带宽,计算和状态的可用容量。EOS.IO软件容许每一个账户消耗可用容量的必定百分比,与3天合同中持有的令牌数量成正比。例如,若是启动了基于EOS.IO软件的块链,而且若是一个账户持有根据该块链可分配的总令牌的1%,则该账户有可能利用1%的状态存储容量。

在启动的块链上采用EOS.IO软件意味着带宽和计算容量因为是暂时的(未使用的容量不能保存以备未来使用),所以分配在一个储备的基础上。EOS.IO软件使用的算法相似于Steem用于限速带宽使用的算法。

客观和主观测量

如前所述,仪器的计算使用对性能和优化有重要的影响; 所以,全部资源使用限制最终都是主观的,而且块生产者根据其各自的算法和估计来执行。

也就是说,客观上有些事情是微不足道的。传递的消息数量和存储在内部数据库中的数据的大小能够客观地进行测量。EOS.IO软件使块生产者可以对这些客观测量采用相同的算法,但能够选择对主观测量采用更严格的主观算法。

收款人付款

传统上,支付办公空间,计算能力以及运营业务所需的其余成本的业务。客户从业务中购买具体产品,从产品销售收入用于支付经营成本。一样,没有网站有义务让访问者访问其网站以支付主机费用。所以,分散的应用程序不该该迫使其客户直接支付块链来使用块链。

使用EOS.IO软件的推出的块链不须要其用户直接支付块链以供其使用,所以不会限制或阻止业务肯定其产品的本身的获利策略。

委托能力

发起采用可能不须要当即须要消耗所有或部分可用带宽的EOS.IO软件的块上的令牌持有人能够向其余人发放或租用这些未被带宽的带宽; 在这样的块上运行EOS.IO软件的块生产者将会认识到这种容量委托并相应地分配带宽。

将交易成本与令牌价值分开

EOS.IO软件的主要优势之一是应用程序可用的带宽量彻底独立于任何令牌价格。若是应用程序全部者在使用EOS.IO软件的块上持有相关数量的令牌,则应用程序能够在固定状态和带宽使用状况下无限期运行。在这种状况下,开发商和用户不会受到令牌市场中任何价格波动的影响,所以不依赖于价格饲料。换句话说,采用EOS.IO软件的块链使块生产者可以天然地增长每一个令牌的带宽,计算和存储,而不依赖于令牌的值。

使用EOS.IO软件的块链也会在每次生成块时授予块生产者令牌。令牌的价值将影响生产者负担得起的带宽,存储和计算的数量; 这种模式天然地利用上升的令牌值来增长网络性能。

国家存储成本

虽然能够委派带宽和计算,应用程序状态的存储将须要应用程序开发人员持有令牌,直到该状态被删除。若是状态永远不会被删除,则令牌被有效地从流通中移除。

每一个用户账户须要必定量的存储空间; 所以,每一个账户必须保持最小的平衡。随着网络存储容量的增长,这种最小化所需的平衡将会降低。

阻止奖励

使用EOS.IO软件的块链将在每次生成块时向块生成器授予新的令牌。X- 20045 X- 200 X- 200 200 X- 200 200:200:EOS.IO软件可能被配置为执行生产者奖励的上限,使得令牌供应的年度总增加率不超过5%。

社区福利申请

除了选择块生产者,根据EOS.IO软件的一个块,用户还能够选择3个社区福利应用程序,也称为智能合同。这3个应用程序将得到高达每一年令牌供应量的配置百分比的令牌减去已经支付给块生产者的令牌。这些明智的合同将会得到与每一个应用程序从令牌持有者那里得到的投票成比例的令牌。选举的应用程序或智能合同能够由新选举的应用程序或令牌持有者的智能合同替代。

治理

治理是人们对主观事项达成共识的过程,不能彻底由软件算法来掌握。基于EOS.IO软件的块链实现了一个有效指导块生产者现有影响的治理流程。没有一个明确的治理过程,先前的块链依赖于致使不可预测的结果的临时,非正式和常常有争议的治理过程。

基于EOS.IO软件的块链认识到权力来源于向块生产者受权的权力持有人。给块块生产者提供有限的检查权限,以冻结账户,更新有缺陷的应用程序,并为底层协议提出硬分支更改。

嵌入EOS.IO软件是块生产者的选举。在对块状物进行任何改变以前,这些块生产者必须批准它。若是块生产商拒绝进行令牌持有人所需的更改,那么它们能够被投票。若是块生成器未经令牌持有者的许可而进行更改,则全部其余非生产性全节点验证器(交换机等)将拒绝该更改。

冻结账户

有时,智能联系人以异常或不可预测的方式行事,不按预期执行; 其余时候,一个应用程序或账户可能会发现一个使它消耗不合理数量的资源的漏洞。当这些问题不可避免地发生时,块生产者有权纠正这种状况。

全部块链中的块生成器都有权力选择哪些交易包含在块中,这使得它们可以冻结账户。使用EOS.IO软件的块链经过将冻结账户的过程以17/21的积极生产者的表决方式来形式化这一权威。若是生产者滥用权力,他们能够被投票,一个账户将被解冻。

更改账号

当全部其余故障和“不可阻挡的应用程序”以不可预测的方式运行时,使用EOS.IO软件的块链容许块生成器替换该账户的代码,而不会硬分配整个块链。与冻结账户的过程相似,代码的替换须要17/21票当选的块生产者。

宪法

EOS.IO软件使块链能够在签署该协议的用户之间创建点对点服务条款协议或绑定合同,称为“宪法”。本宪法的内容规定了用户不能彻底执行代码的义务,并经过确立司法管辖权和法律选择以及其余相互接受的规则来促进争议解决。在网络上进行的每一次交易都必须将宪法的哈希值做为签名的一部分,从而明确地将签署者绑定到合同中。

该宪法还定义了源代码协议的可读意图。这个意图用于在错误发生时识别错误和功能之间的差别,并指导社区对哪些修正是正确或不正确的。

升级议定书和宪法

EOS.IO软件定义了能够经过如下过程更新规范源代码及其章程定义的协议的过程:

  1. 块生产者提出修改宪法并得到17/21批准。
  2. 块生产商连续30天保持17/21批准。
  3. 全部用户都须要使用新宪法的哈希签署交易。
  4. 块生产者采用更改源代码来反映构成的变化,并使用git提交的散列将其提交给块链。
  5. 块生产商连续30天保持17/21批准。
  6. 代码更改将在7天以后生效,在批准源代码后,给予全部完整节点1周升级。
  7. 不升级到新代码的全部节点自动关闭。

经过默认配置EOS.IO软件,更新块添加新功能的过程须要2到3个月,而修复不须要更改章程的非关键错误的更新可能须要1到2个月。

紧急变动

若是须要软件更改来修复有害的错误或正在对用户形成伤害的安全漏洞,块生产者可能会加速进程。通常来讲,可能违反宪法加速更新以引入新功能或修复无害的错误。

脚本和虚拟机

EOS.IO软件将首先是协调将认证消息传递到账户的平台。脚本语言和虚拟机的细节是实现具体的细节,大部分独立于EOS.IO技术的设计。具备足够性能的肯定性和正确沙盒的任何语言或虚拟机能够与EOS.IO软件API集成。

模式定义的消息

在账户之间发送的全部消息由一个模式来定义,该模式是块状共识状态的一部分。此模式容许在消息的二进制和JSON表示之间进行无缝转换。

模式定义数据库

数据库状态也使用相似的模式定义。这确保全部应用程序存储的全部数据都是一种格式,能够被解释为可读的JSON,可是以二进制的效率存储和操做。

将认证与应用程序分离

为了最大程度地实现并行化机会,并最大限度地减小从事务日志从新生成应用程序状态的计算负担,EOS.IO软件将验证逻辑分为三个部分:

  1. 验证消息内部一致;
  2. 验证全部前提条件是否有效; 和
  3. 修改应用程序状态。

验证消息的内部一致性是只读的,不须要访问块状态。这意味着它能够以最大的并行性来执行。验证前提条件(例如所需的余额)是只读的,所以也能够受益于并行性。只有修改应用程序状态才须要写入访问,而且必须按照每一个应用顺序处理。

认证是验证是否能够应用消息的只读过程。申请其实是在作工做。实时两个计算都须要执行,可是一旦事务被包含在块链中,则再也不须要执行认证操做。

虚拟机独立架构

这是基于EOS.IO软件的块链的意图,能够支持多个虚拟机,并根据须要随时随地添加新的虚拟机。所以,本文不会讨论任何特定语言或虚拟机的细节。也就是说,有两台虚拟机正在被评估用于基于EOS.IO软件的块链。

Web组件(WASM)

Web组件是构建高性能Web应用程序的新兴Web标准。经过几个小的修改,Web组件能够肯定性和沙盒。Web Assembly的好处是业界的普遍支持,它使得能够熟悉的语言(如C或C ++)开发合同。

Ethereme开发人员已经开始修改Web Assembly,以便与其Ethereum风味Web组件(WASM)一块儿提供合适的沙箱和肯定性。这种方法能够轻松地与EOS.IO软件进行调整和集成。

Ethereum虚拟机(EVM)

该虚拟机已被用于大多数现有的智能合同,而且能够适应于在EOS.IO块链中工做。能够想象,EVM合同能够在本身的沙箱内运行在基于EOS.IO软件的块链中,而且经过一些适应性EVM合同能够与其余EOS.IO软件块链应用通讯。

块间​​通讯

EOS.IO软件旨在促进块间通讯。这是经过使得容易产生消息存在的证实和消息序列的证实来实现的。这些证实与围绕消息传递设计的应用程序架构相结合,可让应用程序开发人员隐藏块间通讯和验证的细节。

轻型客户端验证的Merkle证实(LCV)

若是客户端不须要处理全部事务,则与其余块链集成更容易。毕竟,交易所只关心汇款和汇出的转帐,没有更多。若是交换链能够利用轻量级的merkle存款证实,而不是彻底信任本身的块生产者,这也是理想的。至少一个链的块生产者但愿在与另外一个块链同步时保持尽量小的开销。

LCV的目标是使得可以生成相对轻量级的存在证实,这些证实能够由跟踪相对轻量级数据集的任何人验证。在这种状况下,目标是证实特定事务被包括在特定块中,而且该块被包括在特定块链的通过验证的历史中。

比特币支持交易的验证,假设全部节点均可以访问块标题的完整历史,每一年总共有4MB的块头。每秒10个事务,一个有效的证实须要约512个字节。这对于块间隔为10分钟的块,对于具备3秒块间隔的块链再也不“轻”。

EOS.IO软件能够为包含交易点的任何不可逆的块头的任何人提供轻量级的证实。使用以下所示的哈希连接结构,能够证实任何具备小于1024字节的证实的事务的存在。若是假设验证节点跟踪过去一天中的全部块头(2 MB数据),则证实这些事务只须要200字节长的证实。

与使用适当的哈希连接生成块相关联的增量开销不多,以实现这些证实,这意味着没有理由不以这种方式生成块。

当验证其余链条上的证据时,能够进行各类各样的时间/空间/带宽优化。跟踪全部块头(420 MB /年)将保持尺寸小。仅跟踪最近的标题能够在最小的长期存储和证实大小之间进行权衡。或者,块链可使用懒惰的评估方法,其中记住过去证据的中间散列。新的证实只需包括指向已知稀疏树的连接。所使用的确切方法必然取决于包括由merkle证实引用的交易的外国块的百分比。

在必定的互联密度以后,简单地使一条链包含另外一条链的整个块历史而且一块儿消除对证据的须要变得更有效。出于性能缘由,最理想的是最小化链间证实的频率。

链间通讯的延迟

当与另外一个外部块连接进行通讯时,块生产者必须等到100%肯定交易在被接受为有效输入以前被其余块链不可逆地确认。使用基于EOS.IO软件的块链和带有3秒块的DPOS和21个生产者,这须要大约45秒。若是一个链条块生产者不等待不可逆转的话,那就像一个交易所接受一个后来被转换的存款,而且可能会影响该块的共识的有效性。

完整性证实

当使用来自外部块链的merkle证实时,知道全部处理的事务都是有效的,并知道没有任何事务被跳过或省略。虽然不可能证实全部最近的交易是已知的,但有可能证实交易历史上没有差距。EOS.IO软件经过为每一个交付给每一个账户的每条消息分配序列号来促进这一点。用户可使用这些序列号来证实用于特定账户的全部消息都已被处理,而且它们被按顺序处理。

结论

EOS.IO软件是根据通过验证的概念和最佳实践的经验而设计的,表明了块链技术的基本进步。该软件是全球可扩展的块社区的总体蓝图的一部分,其中能够轻松部署和管理分散式应用程序。

 

 

英文原文:

https://github.com/EOSIO/Documentation/blob/master/TechnicalWhitePaper.md#eosio-technical-white-paper

 

官方:

https://eos.io/