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

EOS.IO技术白皮书

2017年6月26日

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

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

版权所有©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/

 

 

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值