EOS正式上线时间轴以及步骤

目前大多数人其实并不知道EOS到底什么时候会正式上线,以及如何上线。

5月12日,BM按时发布了Dawn 4.0,根据文中的信息,以及EOSGo社区关于启动主链步骤的文章,本文整理了一下大致的时间节点,帮助大家更好的理解EOS主网启动的全过程。

6月1日,完成以太坊上EOS代币映射快照,如果不清楚或者想确保映射万无一失,可以看看:一图看懂什么是EOS映射

6月2日,由社区组织,从超级节点候选者中选出22个,其中1个负责启动BIOS(创始块),其它21个作为ABP(指定区块链生产者)。

6月第1周(具体时间还没定),发布 EOSIO 1.0,这个版本具备了任何人或者组织运行EOS区块链所需要的所有功能和模块。

6月第1周(预计),1个负责启动BIOS(创始块),21个ABP(指定区块链生产者)启动EOS区块链。

6月第1周(预计),所有EBP(候选超级节点)加入网络,进行10轮的选举,产生 21 个主节点和 49 个备选节点。

6月第1周(预计),投票确定宪法、然后验证整个系统正确性。验证无误后,EOS才可以开始转账,节点开始获得收益。

EOS开始转账后意味着,EOSIO 1.0主网正式运行。当EOS社区对某个主链达成共识后,交易所开始对接。BlockONE团队还会继续提供技术支持,新版本开发,以及问题修复。

注:EOS官方、以及EOS社区还未发布具体的上线时间点,本文的时间轴是根据目前所能搜集到的公开信息进行预计,实际时间点请关注blockone官方的消息。

参考链接:
https://medium.com/eosio/eosio-dawn-4-0-release-b25661a49ac2
https://forums.eosgo.io/discussion/876/%E5%90%AF%E5%8A%A8eos%E4%B8%BB%E9%93%BE-%E8%BF%98%E5%B7%AE%E4%BB%80%E4%B9%88

2018/6/3 更新IMEOS发布的社区启动计划

EOS中账户、钱包和密钥的关系

EOS对于账户的设计与ETH有很大的不同,引入了Account账户, Wallet钱包, 钱包密码, Key公私钥, Permission权限等众多概念,刚入门的时候感觉一头雾水。本文希望通过对这些概念的梳理,帮助读者能够很容易的上手EOS智能合约的开发。

eosacct

如图所示,右边是EOS Wallet钱包,里面只存放私钥,而且钱包有一个密码,需要输入密码才能解锁钱包,读取私钥。
左边是EOS Account账户,可以把它看成是一个保险箱,里面有EOS Token以及智能合约,而需要转移里面的EOS Token(或者执行智能合约),你需要钱包中对应的私钥来解锁这个保险箱。

EOS Dawn 3.0测试版本中创建一个账户的命令是:
cleos create account {创建者账户名} {新的账户名} 公钥1 公钥2

其中{创建者账户名}是为这个创建动作支付EOS的账户,公钥1和公钥2分别是两个不同权限的密钥对的公钥。

eosacct2

所以把权限系统加上,图就变成上面这个样子,一个保险柜有两个开关,不过打开后可以进行操作的权限是不同的。2个私钥可以存在一个钱包里,也可以如上图所示存在不同的钱包里(由不同的人控制)。

owner权限是账户的最高权限,可以修改其它权限。
active权限默认可以进行转账等操作,但不能修改权限。

每个保险箱有一个名字,就是EOS账户名。
转账和智能合约等操作的执行都是在Account这个保险箱进行,所以账户名在EOS世界其实是以太坊的地址。
与以太坊不同,EOS的账户名不再是一串很长很长的地址,而是一个你可以自定义的英文字母+数字(12345)+符号(.),最长12位,最短1位,全局唯一,先到先得,注册费用还没公布,但据最新的消息,长度不同注册需要的EOS也不一样。

昨天MediShares团队开发的“麦子钱包”上线了【EOS账户名一键抢注工具】,可以装一下玩玩 http://medishares.org/wallet/cn/

EOS主网上线的瞬间,账户名抢夺战应该会很有意思吧。

EOS.IO 技术白皮书 第二版

英文原文地址: https://github.com/EOSIO/Documentation/blob/master/TechnicalWhitePaper.md

译者: Harvey老狼,谭智勇, 宋承根@OracleChain, 梓岑@YOYOW,荆凯

译者注:本译文由 荆凯 在 Harvey老狼、谭智勇、宋承根@OracleChain 及 梓岑@YOYOW 所译第一版 EOS 技术白皮书基础之上修订增改而成。特此致谢。

第一版译文地址: https://github.com/BlockchainTranslator/EOS/blob/master/TechDoc/EOS.IO%20Technical%20White%20Paper.md

March 16, 2018

摘要:EOS.IO软件引入了新的区块链架构,旨在实现去中心化应用的纵向和横向扩展。这是通过创建一个类似操作系统的架构来实现的,可以在上面构建应用。该软件提供了帐户,身份验证,数据库,异步通信以及跨越多个CPU内核或集群的程序调度。该技术的最终形式是一个区块链架构,在治理区块链的场景下,可以最终扩展,足以支持每秒数百万笔交易,消除用户费用,实现去中心化应用的轻松快速地部署和维护。

请注意: 本文中提到的加密通证指的是使用EOS.IO软件所构建的区块链上的加密通证,并不是在EOS 通证发行相关的ETH区块链上的ERC-20兼容通证。

Copyright © 2018 block.one

无需授权,出于非商业目的和教育用途(即,除了收费或商业目的),任何人都可以使用、复制或者分发本白皮书中的任意材料,需要注明原文出处和适用的版权声明。

DISCLAIMER: This EOS.IO Technical White Paper v2 is for information purposes only. block.one does not guarantee the accuracy of or the conclusions reached in this white paper, and this white paper is provided “as is”. block.one does not make and expressly disclaims all representations and warranties, express, implied, statutory or otherwise, whatsoever, including, but not limited to: (i) warranties of merchantability, fitness for a particular purpose, suitability, usage, title or noninfringement; (ii) that the contents of this white paper are free from error; and (iii) that such contents will not infringe third-party rights. block.one and its affiliates shall have no liability for damages of any kind arising out of the use, reference to, or reliance on this white paper or any of the content contained herein, even if advised of the possibility of such damages. In no event will block.one or its affiliates be liable to any person or entity for any damages, losses, liabilities, costs or expenses of any kind, whether direct or indirect, consequential, compensatory, incidental, actual, exemplary, punitive or special for the use of, reference to, or reliance on this white paper or any of the content contained herein, including, without limitation, any loss of business, revenues, profits, data, use, goodwill or other intangible losses.

  • 背景
  • 区块链应用程序的要求
    • 支持百万级用户
    • 免费使用
    • 轻松升级和故障修复
    • 低延迟
    • 串行性能
    • 并行性能
  • 共识算法(BFT-DPOS)
    • 交易确认
    • 作为权益证明的交易(TaPoS)
  • 账户
    • Actions&处理器
    • 基于角色的权限管理
      • 命名权限级别
      • 权限映射
      • 权限评估
        • 默认权限组
        • 权限的并行验证
    • 带延迟的动作(Action)
    • 密钥被盗的账号恢复
  • 应用程序的确定性并行执行
    • 通讯延迟优化
    • 只读的动作处理器
    • 多账户事务的原子化
    • 区块链状态的部分验证
    • 排程的主观优化
    • 延迟事务
    • 上下文无关的Actions
  • 通证模型和资源使用
    • 客观度量和主观度量
    • 接收方付费
    • 代理能力
    • 交易成本与通证价值区分
    • 状态存储成本
    • 出块奖励
    • 工作提案机制
  • 治理
    • 冻结账户
    • 修改账户代码
    • 宪法
    • 升级协议和宪法
      • 紧急情况下的修改
  • 脚本和虚拟机
    • 由模式定义的动作
    • 由模式定义的数据库
    • 通用的多重索引数据库api
    • 将授权与应用程序分开
  • 跨链通讯
    • 用于轻客户端验证的merkle证明(LCV)
    • 跨链通讯延迟
    • 完成性证明
    • 隔离见证
  • 结论

 

背景

区块链技术源于2008年推出的比特币,自那时以来,企业家和开发人员一直在努力使该技术通用化,以便在单个区块链平台上支持更广泛的应用。

虽然一些通用区块链平台还在努力实现第一个能正常运行的区块链应用,针对特定场景的区块链应用诸如BitShares去中心化交易所(2014)和Steem社交媒体平台(2016)已经成为日活跃用户上万的成功应用。这两个应用成功的把性能提高到每秒数千笔交易,延迟降低到1.5秒,降低交易费用,并实现了与当前中心化服务器的方案相似的用户体验。

由于现有的区块链平台使用费用高昂,计算性能有限,阻碍了区块链的广泛应用。

 

区块链应用的要求

为了得到广泛使用,区块链上的应用程序要求区块链平台足够灵活,能够满足如下要求:

支持百万级别的用户

想要同Ebay,Uber,AirBnB和Facebook这些企业竞争,需要能够处理数千万日活跃用户的区块链技术。 在某些情况下,除非用户数足够庞大,否则应用程序可能无法正常运作,因此,能够应对大量用户的平台至关重要。

使用免费

应用开发人员需要具备灵活性,能够为用户提供免费服务; 用户不必为了使用平台或从平台的服务中受益而付费。用户可以免费使用的区块链平台,自然会得到更多人的青睐。有了足够的用户规模,开发者和企业可以创建对应的盈利模式。

轻松升级和故障修复

基于区块链构建应用程序的企业,需要区块链平台具备灵活性,可以为其应用添加新特性来增强完善。区块链平台必须对软件和智能合约的升级提供支持。

所有的非小型的软件都可能会有缺陷,即使是用了最严格的形式验证也是如此。当bug不可避免出现时,区块链平台必须足够健壮,能够修复这些bug。

延迟低

及时的反馈是良好用户体验的基础。延迟时间如果超过了几秒钟,会大大影响用户体验,严重降低基于区块链的应用相对于现有的非区块链应用的竞争力。区块链平台应当支持低延迟的交易。

串行性能

有些应用程序由于必须顺序执行命令,从而无法用并行算法进行实现。诸如交易所之类的应用经常需要足够的串行操作处理性能,以应对大量的交易。因此,区块链需要提供强大的串行性能支持。

并行性能

大型应用程序需要在多个CPU和计算机之间分配工作负载。

共识算法(BFT-DPOS)

EOS.IO软件采用了目前为止唯一能够符合上述性能要求的去中心化共识算法 — 委托权益证明Delegated Proof of Stake (DPOS).。根据这一算法,在使用EOS.IO软件构建的区块链上持有通证的人,可以通过一个持续进行的投票系统来选择区块生产者。任何人都可以选择参加区块生产,只要能够说服通证持有人为其投票,就会有机会参与区块生产。

EOS.IO软件可以让区块每0.5秒生成一个。任何时刻,只有一个生产者被授权产生区块。如果在计划的某个时间内没有成功出块,则跳过该块。如果有一个或更多的区块被跳过,则在区块链上会有0.5s或者更久的空白。

使用EOS.IO软件,区块的产生是以126个区块(每个出块者六个区块,乘以21个出块者)为一个周期。在每个出块周期开始时,会根据通证持有人所投票数选出21个区块生产者。被选中的区块生产者的顺序会根据15个及以上的区块生产者的同意,制定出块顺序的安排。

如果出块者错过了一个块,并且在最近24小时内没有产生任何块,则这个出块者将被剔除在考虑范围之外,直到他们通知区块链可以重新开始产生区块。这确保了网络的顺利运行,把被证明为不可靠的区块生产者排除在出块排程之外,通过这一方式使得错过区块的数量最小化。

在正常情况下,DPOS块链不会经历任何分叉,因为区块生产者并非竞争关系,他们合作产生区块。如果有区块分叉,共识将自动切换到最长链。这一方式之所以有效,是因为区块链分叉上增加区块的速度,与具有相同共识的区块生产者的比例直接相关。换句话说,具有更多生产者的区块链长度将比具有较少生产者的区块链增长速度更快,因为,有更多生产者的区块链分叉上,丢块更少。

此外,没有块生产者可以同时在两个区块链分叉上生产块。如果一个块生产者发现这么做了,就可能被投票出局。这类双重生产的密码学证据,也可能会被用来自动移除作恶者。

在传统的DPOS算法上增加了拜占庭容错算法(Byzantin Fault Tolerance) ,所有的出块者都要对所有区块签名,以此来确保在同一时间戳或者同一区块高度上,没有区块生产者能够同时在两个区块上签名。一个区块有了15个区块生产者的签名,该区块就被认为是不可逆的。任一拜占庭区块生产者如果想在同一时间戳或者同一区块高度的两个区块上签名,就不得不留下密码学证据。在这一模式下,一秒之内就可以达成不可逆的共识。

交易确认

使用DPOS算法的区块链,一般出块者都是100%参与的。一笔交易在广播后平均0.25秒,就可以认为具有99.9%的确定性了。

EOS.IO 在DPOS之外,还增加了异步拜占庭容错(aBFT, asynchronous Byzantine Fault Tolerance ), 来实现更快的不可逆性。aBFT算法使得在1秒内就可以对不可逆性得到100%的确认。

作为权益证明的事务(TaPoS)

EOS.IO软件要求每个交易都要将最近区块的区块头哈希的一部分包括在其中。 这一哈希有两个目的:

1.防止在区块链分叉上的交易重放,这些交易并不包含参考区块;

2.通知区块链网络,某一用户及其资产(stake)处于特定的分叉上

随着时间的推移所有用户都能直接对区块链进行确认,这使得伪造链难以作伪,因为伪造的链无法从合法的链上转移交易。

账户

EOS.IO软件允许使用唯一的可读的名称来实现对帐户的引用,名称最长为12个字符。该名称由帐户的创建者选择。账户创建者必须留出RAM空间用于存储新的账户,直至新建的账户抵押了通证以获得自己的RAM空间。

在去中心化的情境下,应用程序开发人员将为创建帐户支付名义成本来注册新的用户。通常企业已经以广告和免费服务等形式,为所获取的每个用户花费了大量资金。相比之下,创建新的区块链帐户所需的资金成本是微不足道的。并且幸运的是,没有必要为已经由另一个应用程序注册的用户创建帐户。

动作(Action)及处理器

每个帐户可以将结构化的Action发送到其他帐户,并且可以定义Action被接受后的处理脚本。EOS.IO软件为每个帐户提供其自己独有的数据库,只能由自己的action处理程序访问。Action处理脚本还可以向其他帐户发送Action。Action和自动的action处理程序的组合正是EOS.IO定义智能合约的方式。

为了支持并行执行,每个账户都可以在其数据库中定义任意数量的范围(scope)。区块生产者会对事务进行排程,不会在访问scope的内存时出现冲突,因此事务可以进行并行执行。

基于角色的权限管理

权限管理主要涉及对某一特定Action是否得到正确授权进行确定。权限管理的最简单形式是检查事务是否具有所需的签名,但这意味着已经知晓了所需的签名。通常,授权是与个人或由个人组成的团队绑定在一起的,并且通常会进行划分。EOS.IO软件提供了一个断言式的权限管理系统,可以让帐户就何人在何时能够做何事上,进行细粒度和高级别的控制。

至关重要的是,身份认证和权限管理被标准化实现,并与应用程序的业务逻辑分离。这使得开发某种工具以通用方式管理权限成为可能,并为性能优化提供了巨大的空间。

每个帐户都可以通过其他帐户和私钥的任何加权组合来控制。这种机制创建了一个能够真实反映权限在现实中的组织情况的层次化权限结构,并使得多用户对账户的控制比以往任何时候都更容易。多用户控制是提升安全性的最重要因素,如果能正确地使用,可以极大地消除黑客盗窃的风险。

EOS.IO软件允许帐户可以定义何种密钥和/或账户3的组合,可以向另一账户发送特定类型的Action。例如,可以为用户的社交媒体帐号提供一个密钥,并提供另一密钥用于访问交易所。甚至用户可以给予其他帐户许可让其代表自己的帐户行事,而无需向其他帐户分配密钥。

命名权限级别

 

使用EOS.IO软件,帐户可以定义命名权限级别,每个权限级别可以从更高级别的命名权限派生。每个命名权限级别定义一项授权;这一授权是密钥和(/或)其他账户的命名权限级别所组成的多签名检查的阈值。例如,帐户的“朋友”权限级别可以设置为帐户中的某项Action能被该账户的任何朋友的帐户平等地控制。

另一个例子是Steem区块链,其具有三个硬编码命名的权限级别:owner,active和posting。Posting权限只能执行诸如投票和发布等社交行为,而active权限除了更改所有者之外,可以做其他任何事情。owner权限用作冷存储,它能够做所有事情。EOS.IO对这一概念进行了通用化,允许每个帐户持有者定义自己的权限层次结构以及动作的分组。

权限映射

EOS.IO软件允许每个帐户定义在合约/动作或任何其他帐户的合约,以及账户自己的命名权限级别之间进行映射。例如,账户持有人可以将账户持有人的社交媒体应用程序映射到帐户持有者的“朋友”权限组。通过此映射,帐户的任何朋友都可以和帐户持有者一样,在帐户的社交媒体上发布内容。即使他们会作为帐户持有者来发帖,他们仍然使用自己的密钥来为Action签名。这意味着总是可以辨别出来哪些朋友以何种方式使用了其帐户。

权限评估

当从@Alice向@bob发送类型为“Action”的动作(Action)时,EOS.IO软件将首先检查@alice是否为@bob.groupa.subgroup.Action定义了权限映射。如果没有找到任何结果,那么将会检查@bob.groupa.subgroup,然后是@bob.groupa,最后是@bob的映射。如果此时仍然没有找到匹配的结果,那么假定的映射将是命名权限组 @alice.active

一旦识别出权限映射,则启动多签名阈值校验过程对签名授权进行校验,把该授权与命名权限相关联。如果失败,那么它会遍历父权限,最终遍历到其所有者的权限,@alice.owner

Default Permission Groups 默认权限组

EOS.IO 的技术还允许所有帐户都有一个可以做所有事情的“owner”权限组,和一个除了更改所有者组之外可以执行所有操作的“active”权限组。所有其他权限组均派生自“active”权限组。

并行权限评估

权限评估是个“只读”的过程,通过事务对权限进行的修改,在一个区块结束时才会生效。首先,这意味着所有事务的所有密钥和权限评估可以并行执行。其次,这种机制意味着可以快速验证权限,而不需要启动可能会回滚的代价高昂的应用程序逻辑。最后,这意味着当接收到挂起的事务时, 可以执行事务权限验证;而在取消挂起、事务生效时,无需重新执行验证。

考虑到所有因素,权限验证占据了交易验证中很大比例的计算量。使之成为只读和并行的过程,可以显著提高性能。

在对区块链重放,以便从Action的日志中重新生成确定性的状态时,并不需要再次评估权限。事务被包含在一个已知的状态良好的区块中这一事实,使其可以跳过评估的步骤。这极大地减少了在对日益增长的区块链重放时的计算工作量。

强制延迟的动作(Actions)

时间是安全的关键组成部分。在大多数情况下,在私钥被使用前不可能知道其是否已经被盗用。基于时间的安全机制在人们使用一些特殊的应用程序时更为关键,这些应用程序需要在连网的电脑上保存密钥,便于人们日常使用。EOS.IO软件允许应用程序的开发者指定某些Action在包含在区块后、实际应用之前,必须等待的最短时间段。在此期间,这些动作可以被取消。

当这类Action被广播时,用户可以通过电子邮件或短信收到相应通知。如果他们未曾授权,那么他们可以登录其帐户来还原帐户数据并撤回Action。

所需的延迟取决于操作的重要程度。支付一杯咖啡可以在几秒钟内确认,不需延迟,而买房子可能需要72小时清算周期。将整个帐户转移到新的控制者手上可能最多需要30天。具体延迟的选择取决于应用程序开发者和用户。

密钥被盗后的恢复

EOS.IO软件为用户提供了一种在密钥被盗时恢复其帐户控制权的方法。 帐户所有者可以使用在过去30天内活动的所有者(owner)权限的密钥,以及账户所有者所指派的帐户恢复合作伙伴的许可,来重置其帐户上的所有者密钥。不经过帐户所有者的配合,帐户恢复合作伙伴无法重置其帐户的控制权。

对于攻击帐户的黑客而言,由于其已经“控制”该帐户,因此尝试执行恢复过程没有任何收获。此外,如果他们的确进行恢复的过程,那么恢复合作伙伴可能需要身份认证和多因素认证(如电话和电子邮件)。这或者会暴露黑客的身份,或者黑客在恢复过程中毫无所得。

这个过程与简单的多重签名机制有极大的不同。通过多重签名的交易,有一个对象会执行并参与每一笔交易。然而,通过恢复过程,恢复过程的合作伙伴仅参与了恢复的过程,并没有权力参与日常的交易。这极大降低了相关参与者的成本和法律责任。

应用程序的确定性并行执行

区块链共识取决于确定性(可重现)行为。这意味着所有并行执行都能在不使用互斥体或其他锁的原语的情况下正常运行。没有锁,必须有方法来确保可能需要进行并行操作的事务,不会产生非确定性的结果。

2018年6月份发布的EOS.IO软件版本会是单线程运行的,但是包含了未来需要进行多线程和并行执行所用到的数据结构。

基于EOS.IO软件构建的区块链,一旦并行执行的功能开启,区块生产者的工作是将Action传递到单独的碎片(shard)中,以便它们可以并行地评估。每个帐户的状态只取决于传递给它的消息。区块生产者的输出会产生排程表,并且将被确定性地执行,但是生成排程的过程不必是确定性的。这意味着区块生产者可以利用并行算法来对事务进行排程。

并行执行的部分还意味着当脚本生成新的Action时,它不会立即发送,而是在下一个周期中发送它。无法立即发送的原因是因为接收方可能会在另一个碎片(shard)中主动修改自己的状态。

通信延迟优化

延迟时间是一个帐户将动作(Action)发送到另一个帐户并收到响应所需的时间。EOS.IO软件的目标是使两个帐户能够在单个区块内来回交换Action,而不必在每个Action之间等待0.5秒。为了实现这一点,EOS.IO软件将每个区块分为周期(cycle)。每个周期分为多个碎片(shard),每个碎片(shard)包含一组事务列表。每个事务包含一组要传递的动作(Action)。该结构可以被可视化为树,其中各层依据其特性被顺序处理或者并行处理。

 

在一个周期中生成的事务可以在任何后续的周期或区块中传送。区块生产者不断地向一个区块中添加cycle,直至达到了最大的时钟时间,或者没有新生成的需要传送的事务为止。

可以使用区块的静态分析来验证在给定周期(cycle)内是否存在两个碎片(shards)包含了修改同一个帐户的事务。只要这种静态分析机制一直起作用,就可以通过并行运行所有线程来处理区块。

只读Action处理器

部分账户可能会处理一些只需要决定通过与否的动作(Action),而不会改变自己内在状态。这种情形下,只需要在一个特殊的周期内的一个或多个碎片(shards)中只有某一特定账号的只读Action处理器被包含在其中,这些处理器就能并行进行。

多账户的原子事务

有时,我们希望确保 Action 可以被多个帐户以原子化地方式传递和接收。在这种情况下,两个Action会被放置在同一笔事务中,两个帐户将被指派相同的碎片(shard),Actions会按顺序执行。

Partial Evaluation of Blockchain State 对区块链状态的部分评估

大规模区块链技术组件应该是模块化的。不需要每个人都运行所有东西,特别是如果他们只需要使用应用的一小部分时,更是这样。

出于将交易状态显示给用户的目的,交易所应用程序的开发者将维护一个完整的节点。这款交易应用不需要其他社交媒体应用的相关状态。EOS.IO系统允许任何完整节点可以选择性地运行任意的应用子集。如果你的应用程序不需要依赖其他程序的状态, 那么传递给其他应用的Action将被安全地忽略。

对任务排程的主观优化

EOS.IO系统不能强制阻止区块生产者向其他帐户发送的任何Action。每个区块的生成者对处理一笔事务的计算复杂度和时间都有自己的主观度量,无论这一事务是由用户生成的还是由智能合约自动生成的。

在使用EOS.IO软件来构建而启动的一条区块链中,在网络层上所有交易的带宽成本,都会基于所执行的wasm命令的数量来计费。但是,使用该软件的每个单独的区块生产者会使用它们自己的算法和测量方式来计算资源的使用情况。当一个区块生产者发现一笔事务或帐户已经消耗了大量的计算能力时,他们会在生成自己的块时拒绝该交易;但是,如果其他区块生产者认为该事务有效,他们仍然会处理。

一般来说,只要有一个区块生产者认为一笔事务是有效的,并且所消耗的资源是在限制范围内的,那么其他所有的区块生产者也会接受,但可能要花费多达1分钟才能使该笔事务传播到这一区块生产者处。

在某些情况下,区块生产者可以创建一个区块,其中包括在可接受范围之外的事务。在这种情况下,下一个区块生产者可能会选择拒绝这个区块,而这一僵局将会被第三个区块生产者终结。这与一个大区块导致网络传播延迟所引发的情况没有什么不同。社区会注意到这种滥用权力的模式,并最终撤销对该恶意区块生产者的投票。

对计算成本的主观评估,可以让区块链不必去精确地度量运行某些任务所需要的时长。有了这个设计,就不需要精确地对指令计数,这将极大地增加优化的可能,而不会打破共识。

延迟交易

EOS.IO 软件支持延迟事务,事务可以安排在未来执行。这可以让计算转移到不同的碎片(shard)和/或创建长期运行的持续的流程,可以为持续的事务排程。

上下文无关的Action

上下文无关的动作(Action)涉及到这样的计算: 只依赖事务的数据,而不依赖区块链的状态。例如,签名验证的计算,只需要事务数据和签名来确定签署该事务的公钥。这是区块链上必须执行的最昂贵的计算之一,但是因为这一计算是上下文无关的,所以可以并行执行。

上下文无关 Action 就像其他的用户Action一样,只是它们无法访问区块链状态来执行验证。这不仅能使 EOS.IO 可以并行处理所有上下文无关的动作(Copntext Free Actions),例如签名验证,更重要的是,这为通用的签名验证提供了支持。

在支持上下文无关动作(Context Free Actions)的情况下,可伸缩性技术如Sharding、Raiden、Plasma、State Channels等,变得更加可并行化,实用性更强。这一发展可以实现高效的跨区块链通信和潜在的无限可扩展性。

通证模型和资源使用

请注意: 在本篇白皮书中,所指的加密通证是使用EOS.IO软件所构建区块链中的加密通证。 并不是在 EOS 通证发行过程中所用的基于以太坊的ERC-20兼容通证.

所有的区块链都是资源受限的,需要系统防止其滥用。在使用 EOS.IO 软件的区块链中,应用程序会消耗三大类资源:

1. 带宽和日志存储 (磁盘);

2. 计算和计算积压 (CPU);

3. 状态存储 (RAM).

瞬时使用和长期使用的这两类组件都会消耗带宽和计算。区块链系统将维护所有Action的日志,这些日志将会被所有的完整节点下载和存储。通过日志,可以重构所有应用程序的状态。

计算债务( computational debt)是指通过对 Action 的日志重新生成状态的计算消耗。如果计算债务的增长太大,就有必要对区块链的当前状态进行快照,并抛弃区块链的历史状态。如果计算债务增长过快,区块链将会耗用6个月的时间来重放1年的交易。因此,对计算债务进行谨慎管理是至关重要的。

区块链存储的状态指那些可从应用程序逻辑访问的信息。它包括诸如订单和帐户余额等信息。如果应用程序不读取该状态,则不应该存储它。例如,博客文章的内容和注释不被应用程序逻辑读取,因此它们不应该存储在区块链的状态中。与此同时,博文或评论是否存在这一状态信息、投票数和其他属性将作为区块链状态的一部分被存储起来。

区块生成者可以公布它们可用的带宽、计算资源和状态的容量。EOS.IO系统根据账户在期限为三天的抵押合约中所抵押的通证数量,允许每个帐户可以消耗一定比例的可用容量。例如,假设一个基于EOS.IO系统的区块链应用启动,如果一个帐户持有该区块链提供的总通证的1%,那么这个帐户就有可能利用该区块链1%的状态存储容量。

使用EOS.IO系统的区块链上,带宽和计算能力的分配是基于部分储备机制的,因为它们是短暂的(未使用的容量不能存储下来为将来使用)。EOS. IO系统将使用类似于Steem的算法来限制带宽使用速率。

客观和主观度量

正如前面所讨论的,可度量计算的使用对性能和优化有很大的影响;因此,所有资源的使用限制最终都是主观的,并且根据各自的算法和估计来执行。通常由区块生产者创建自定义的插件来实现。

除此之外,有些无足轻重的东西,可以进行客观度量。所传递动作(Actions)的数量和存储在内部数据库中的数据大小,这些都很容易进行客观测量。EOS.IO软件允许区块生产者在这些客观的度量上应用相同的算法,但是也可以在主观度量上选择更严格的主观算法。

接收方支付

历来是由企业为办公空间、计算电力以及运营业务所需的其他费用买单。客户从企业购买特定产品,而这些产品的销售收入将用于支付企业的运营成本。同样,没有任何网站要求访问者为维护服务器而支付小额费用。因此,去中心化应用程序不应该强迫它的客户为使用区块链而向区块链支付直接费用。

使用EOS.IO软件的区块链不要求用户直接向区块链支付使用费用,因此不限制或阻止企业制定其产品的货币化策略。

虽然接收方可以付费,EOS.IO 软件允许发送方为带宽,计算和存储付费。这样的话,应用开发者可以选择最适合他们应用程序的方式。在很多情况下,对于不想要自己实现定量配给系统(rationing system)的开发者而言,发送方付费这一方式显著降低了复杂性。应用开发者可以将带宽和计算能力代理给他们的用户,然后采用“发送方付费”的模式来使用应用。从终端用户的角度来看仍然是免费的,但是从区块链的视角看,这是属于发送方付费的模式。

授权能力

在一条使用EOS.IO系统开发的区块链上,通证的持有人可能不需要立即消耗可用带宽的全部或部分资源,他们可以选择将未消耗的带宽委托或租赁给他人;在这一区块链上运行EOS.IO 软件的区块生产者将识别这一授权并分配相应的带宽。

将交易成本与通证价值区分开

EOS.IO软件的主要优点之一是,应用程序可用的带宽数完全独立于通证的价格之外。如果应用程序所有者持有相应数量的通证,那么应用程序可以在固定的状态下,使用固定的带宽资源持续运行。开发人员和用户不会受到通证的市场价格波动的影响,因此不会依赖于喂价。换句话说,使用EOS.IO程序运行的区块链,可以让区块生产者能够自然地增加每单位通证可用的带宽、计算资源和存储资源,这与通证的价值无关。

使用EOS.IO软件的区块链,区块生产者每次产生区块,都会得到一定的通证奖励。通证的值将影响一个区块生成者能够有钱购买的带宽、存储和计算量;这个模型自然会利用通证价值的上涨来提高网络性能。

状态存储成本

带宽和计算可以可以代理给他人,但是应用程序状态的存储需要开发者持有通证,直至状态删除为止。如果程序的状态永不删除,那么实际上这部分通证就退出了流通。

出块奖励

在使用EOS.IO软件构建的区块链上,每生成一个区块,出块者都会得到一些新的通证作为奖励。在这一状况下,新创建的通证数量是由所有区块生产者公布的期望报酬的中位数而决定的。可以配置EOS.IO软件,限制区块生成者所得奖励上限,使得通证供应的年总增长率不超过5%。

工作提案系统

在基于EOS.IO 软件的区块链上,通证持有人除了选举区块生产者,还可以选出一些旨在造福社区的工作提案。获胜的提案能够得到通证奖励,所配置的每年通证的膨胀率减去已支付给区块生成者的部分,就是这部分奖励的最大值。这些提案将按照所得到的选票比例来获得通证的分配,上限是他们进行工作所要求的通证数量。所选出的提案可以由通证持有人新选出的提案所替代。

实现工作提案的系统合约,可能不会在2018年6月份首网启动时就绪,但是资金机制会上线。区块生产者开始获得奖励时,就会开始为提案系统累积基金。由于工作提案系统会以WASM实现,所以日后可以无需分叉就能够将其加上。

治理

治理是社区之中成员的如下过程:

1. 有些事实无法通过软件代码来收集,而人们通过搜集这些事实,就主观问题达成共识;

2. 执行他们达成的决策;

3. 通过宪法修正案,来变更治理规则。

基于EOS.IO 软件的区块链实现的治理过程,有效地引导了区块生产者的现有作用。以前的区块链缺乏定义好的治理过程,依赖于临时、非正式和经常存在争议的治理过程,从而导致不可预知的结果。

基于 EOS.IO 软件的区块链认为,权力来自于通证持有人,他们将权力代理给区块生产者。区块生产者被赋予了有限和经审查的授权,可以冻结账户,更新有缺陷的应用,并提出对基础协议进行硬分叉的变更。

EOS.IO 软件内嵌了区块生产者的选举机制。在对区块链进行任何更改之前,这些区块生产者必须批准它。如果区块生产者拒绝按通证持有人的期望做出变更,那么可以投票将其替换。如果未经通证持有者的允许区块生产者就擅作更改,那么所有其他非出块的全节点验证者(交易所等)将拒绝该更改。

冻结账户

有时,智能合约会发生异常或不可预知的状况,无法按预期执行;有时,应用程序或帐户可能会利用漏洞,使其消耗不合理的巨量资源。当此类问题不可避免地发生时,区块生产者应当有权力纠正。

所有区块链上的区块生产者都有权选择将哪些事务包含在区块之中,这给予了他们冻结账户的能力。使用 EOS.IO 软件的区块链将这一权力正式化了,对一个账户冻结的决策会提交给21个节点进行投票,如果得到15个节点及以上的通过,则会冻结账户。如果出块者滥用权力,他们可以被投票换掉,而冻结的账号也会解冻。

更改账户代码

当其他一切都失败了,而“无法停止的应用程序”以一种不可预知的方式运行时,使用 EOS.IO 软件的区块链,允许区块生产者在不需要硬分叉整个区块链的情况下就能替换掉帐户的代码。与冻结帐户的过程类似,替换账户的代码需要得到被选中出块节点中17 / 21个节点的投票同意。

Constitution 宪法

EOS.IO 软件使得区块链可以在签名用户之间建立P2P的服务协议或约束性合约,即所谓“宪法”。宪法内容定义了无法通过代码来强制履行的用户义务;通过确立司法权和适用法律以及其他公认的规则,促进争议的解决。每一笔在网络中广播的事务,其签名信息中必须包含宪法的哈希值,因此明确的将签名者绑定至合约。

宪法还定义了源代码协议的人类可读的意图(intent)。在错误发生时,这一意图用于分辨bug和特性的区别,帮助社区确定什么样的修复措施才是合理的。

协议和宪法的升级

EOS.IO 软件定义了如下过程,借助于此,可以对由源代码和宪法所定义的协议,进行变更:

1. 区块生产者提出变更宪法的动议,获得出块者中 15/21 的投票通过。

2. 区块生产者对新 宪法的赞成态度,需要维持持续30天。

3. 所有的用户都需要表示接受新的宪法,作为未来的交易能够处理的条件。

4. 区块生产者采纳对源代码的变更以反应宪法的变化,并用新宪法的哈希值将变更提交到区块链上.

5. 区块生产者对新代码的赞成态度,需要维持持续30天.

6. 代码的修改7天之后生效, 源代码通过后,给非出块的全节点一周的时间进行更新。

7. 所有未升级代码的全节点,会自动关闭。

根据EOS.IO 软件的默认配置,更新区块链增加新特性的过程往往耗时2~3个月,而只需要进行非关键问题的修复却不需要修改宪法的更新,需要1到2个月时间。

Emergency Changes 紧急情况下的变更

如果需要进行软件变更,以便修复正在损害用户利益的有害漏洞或安全漏洞,区块生产者可以加速这一变更过程。通常而言加速新特性更新过程或修复无害的bug,都是违反宪法的行为。

脚本 & 虚拟机

EOS.IO 软件首先是一个平台,协调已认证信息(称为Action,动作)在账户间的传递。脚本语言和虚拟机的实现细节将独立于 EOS.IO 技术。任何开发语言或虚拟机,只要具有确定性,经过了恰当的沙盒化并具有足够的性能,,都可以与 EOS.IO 软件的 API集成。

模式(schema)定义的动作(Action)

在账户之间发送的所有动作都是通过模式(schema)来定义的,这是区块链共识状态的一部分。这一模式(schema)使得 Action 可以在二进制和JSON格式之间无缝转换。

模式定义的数据库

数据库状态也是由类似的模式所定义的。这确保了所有应用程序所存储的所有的数据,都能够以人类可读的 JSON 格式解析,又利用了二进制文件的高效性进行操作和存储。

通用的多重索引数据库 API

开发智能合约需要定义好的数据库模式,用于追踪,存储和寻找数据。开发者通常需要按照多个字段对相同的数据排序或索引,并维持所有索引的一致性。

验证与应用程序相分离

为了尽可能优化并行运算,并把从程序日志中重新生成应用程序状态时相关的计算债务( computational debt )降至最低,EOS.IO 软件将验证逻辑分为三个部分:

1. 验证动作( Action) 的内在一致性;

2. 验证所有前置条件的有效性; 以及

3. 修改应用程序的状态

对Action 内部一致性的验证是只读的,不需要访问区块链状态,这意味着它执行时,可以将并行运算最大化。对前置条件(如所需的账户余额)的验证也是只读的,因此也可以受益于并行运算。只有对应用程序状态的修改才需要写的权限,必须对每个程序顺序处理。

验证(Authentication)是一个只读过程,用于检验一个动作(Action)是否可以生效。应用(Application)是实际起作用的过程。这两种计算都需要实时进行,不过,一旦一笔事务包含在了区块链之中,就不需要再进行验证操作了。

区块链跨链通讯

EOS.IO 软件旨在促进区块链间的跨链交互,这通过简化Action存在证明(proof of Action existence)和Action顺序证明(proof of Action sequence)的生成过程来实现。这些证明与围绕Action 传递而设计的应用架构结合起来,将跨链通讯以及验证证明的细节对应用的发者隐藏,展现给开发者的是高层次的抽象。

用于轻客户端验证的Merkle证明(LCV)

 

如果客户端不需要处理所有的事务(transaction), 那么,与其他区块链交互将变得非常容易。毕竟,一个交易所只会关注交易所的出账和入账信息,而不会关心其它。更理想的情况是,对于交易所自身所维持的链来说,如果可以将轻量级的默克尔存款证明应用其中,那么就不必完全依赖自己的区块生产者。至少,某个区块链的生产者在同步另一条区块链时,会希望尽可能减小开销。

LCV的目标是能产生相对轻量级的交易存在证明,其他人只需要追踪一个相对轻量级的数据集,就可以对此进行验证。既然如此,目标就是证明一笔特定的事务被一个特定的区块所包含,并且 某一条特定的区块链的验证历史中,已经包含了该区块了。

比特币的轻量级验证方式是,假设所有节点都可以读取区块头数据的完整记录,区块头数据每年增长4MB。 假设每秒产生10笔交易,一个有效的证明需要512 bytes,这对于一个出块时间为10分钟的区块链来说是可行的。但对于一个出块时间为 0.5 秒的区块链来说,这就远远谈不上“轻量”了。

EOS.IO 软件的轻量级证明中,在某笔交易被包含到区块链之后,只需要对任意一个不可逆的区块头进行验证即可。使用下图中的哈希链表架构,可能只需要不到1024个字节大小的证明,就可以验证任意一笔交易的存在。

给定区块链上任意一个区块的区块id,以及一个不可逆的可信区块的区块头。可以证明某个区块是包含在区块链上的。这一证明的算法复杂度是(log2(N)),其中 N 是区块链上的区块数量。给定 SHA256 加密算法的类型,只用 864 个字节,你就能够证明在一条包含了 1亿个区块的链上,一个任意的区块是否存在。

生成区块的时候如果使用合适的哈希链表来产生这些证明,只会带来很小的增量开销,这意味着没有理由不以这种方式去生成区块。

对其他链上的证明进行验证时,在时间、空间和带宽方面都有很大的优化空间。跟踪所有区块头数据(420 MB/年)可以让证明的尺寸最小。只跟踪最近的区块头,可以在长期存储文件的最小化和证明尺寸的最小化之间,得到均衡。或者,一个区块链可以采用惰性评估的方式,只记录过去证明的中间哈希值。新的证明只需要包含指向已知的sparse tree(稀疏树)结构的链接。实际使用的方式,需要根据在merkle 证明中所引用的交易位于外链上所占的比例来决定。

在一条区块链上,可以将另外一条区块链的所有区块历史都包含其中,不需要再进行跨链的证明。在跨链关联密度达到一定程度之后,这会是更高效的做法。出于性能考虑,理想情况是尽可能降低将跨链证明的频率。

跨链通讯延迟

与外部区块链通讯时,区块生产者必须等到一笔事务(transaction)经过外部区块链的确认,达到了100%的不可篡改的确定性之后,才能够接受该笔事务,认可为有效的输入。在一条基于 EOS.IO 软件的区块链上,借助于DPOS 0.5秒的出块速度,并使用了额外的拜占庭容错的不可篡改性,这一过程大约耗时为0.5秒。如果某个链上的区块生产者不等到交易不可篡改,就像一个交易所接受了一笔存款而后这笔操作又撤销了的情况一样,这会影响这条链共识的有效性。EOS.IO 软件使用了 DPOS 和 aBFT(异步拜占庭容错)算法,提供快速的不可篡改性。

完成性证明

使用外部区块链的merkle 证明,知道所有处理过的事务都是有效的,和知道没有事务被跳过或忽略,这两者之间有明显差别。虽然无法证明最近的所有事务都是已知的,但是,要证明在事务的历史中不存在遗漏,还是可能的。EOS.IO 软件为传递给每个账户的每个Action都指定了一个序列号,使得这一点成为可能。用户可以用这些序列号来证明,与某个账户相关的所有的 Action 都得到了处理,并且是按顺序处理的。

隔离见证

隔离见证(SegWit) 是指,在不可逆地将一笔事务包含到区块链中之后,事务的签名不再具有相关性了。一旦事务具有不可篡改性了,签名数据可以被剪掉,其他所有人都能够达成当前的状态。由于在大多数的事务之中签名数据占据了很大一部分,SegWit 能够明显地降低磁盘使用量,减少同步时间。

同样的概念可以用在跨链通讯的merkle证明中。一旦一笔证明被接受,并不可逆的记录到区块链之后,想达成正确的区块链状态,用作证明的sha256 哈希的2kb文件就不再需要了。同样使用隔离见证,给跨链通讯所带来的节省程度,是给普通签名带来节省程度的32倍。

隔离见证的另外一个例子是Steem的文章。在这一模式下,(在区块链中)一篇帖子只包含博客内容的sha256哈希函数值,博客正文会被放在隔离见证数据中。区块生产者只需要验证内容是存在的,并且具有给定的哈希值,而不需要在链上存储博文的内容,就能够从区块链的日志中恢复到当前的状态。这样做可以在不必永久保存博文内容的情况下,就能够证明所说的内容曾经存在过。

结论

EOS.IO 软件是基于已为实践所证实的概念和最优实践的经验来设计的,代表着区块链技术的根本性进步。它是全球性可扩展的区块链社会宏伟蓝图的一部分 ,在其中,可以轻松部署和管理去中心化的应用程序。

EOS生态网站收集整理

EOS官方Github

https://github.com/EOSIO/eos
在这里你能看到BM大神最新的代码修改,以及EOS团队开发的生态周报项目,比如钱包之类的最新进展。

EOS官方文档

https://eosio.github.io/eos/
这是官方文档地址,包括如何配置开发节点,以及提供给智能合约开发者的接口方法。EOS开发者必读。

币乎的EOS板块

https://bihu.com/?category=hots&code=EOS
币乎的EOS板块有非常多EOS生态的文章,新入场的战友可以读读,最近关于超级节点的内容特别多。

数字货币钱包排行榜

http://tokenwallet.cc/
这个网站对市面上所有钱包做了打分和排名,包括最新出的EOS系钱包,比如E-Token,麦子钱包,蚂蚁钱包等。

EOS Go

https://eosgo.io/
独立EOS社区,第一时间报道EOS社区的各种消息,并每天组织群里各种重要消息。最近关于超级节点报名的消息都是由EOS Go整理的。

EOS Tracker

https://eostracker.io/
区块数据浏览器,目前基于测试网络,可以对EOS网络有一个直观的了解。

EOS Projects

https://eosprojects.org/
各种EOS生态项目的集中展示,随时了解各种EOS生态的新IDEA。

EOS Index

https://eosindex.io/
另外一个EOS生态项目列表,关注最新项目机会的必备网站。

EOS Drops

https://www.eosdrops.io/
EOS空投项目列表,比较有名的是Everpedia项目的空投,除此之外还有不少项目。

Dan的Blog

以前在Steemit: https://steemit.com/@dantheman
后来闹掰了,换成Medium了: https://medium.com/@bytemaster

《失控》中对EOS和ETH关系的预言

《失控》中的故事是这样的,哈佛大学有一个进化学者叫汤姆,这个汤姆做了一个很伟大的小实验,他用自己的电脑当了一回上帝,做了这么几件事:

1、在电脑里准备了一块专用空间,就好像画出了一个伊甸园。

2、汤姆他们写了一个80个字节的编码,就是一个可以自我复制的电脑程序,这就有点像上帝造人,所以就把这个80字节的编码给它起名叫亚当。然后把亚当放在了伊甸园里让它繁殖。

3、他们给伊甸园里还设定了一个叫收割者的程序,这个收割者吧会把这个空间里不能复制的或者疯狂复制的亚当全部都清除掉,换句话说,汤姆给这个世界引入了死亡的机制。

4、他们给这个亚当设定了一个微小的变化,就是这个亚当每一次自我复制的时候,都有10%的几率会产生一个非常微小的变异,但是变异的细节统统不管,这个就相当于赋予了亚当生物遗传变异的功能。

做完这几件事之后,Tom敲了一下回车,这个空间里的亚当就开始自我复制了起来。Tom等人就去休息了,等他们一觉醒来,发现这个空间里经历了一次史诗般的进化历程:

第一阶段:
80个字节的亚当疯狂的复制,一会就把整个空间给占满了;因为有突变的机制,进化就产生了,进化出了一个之后45字节的程序,然后这个45取代了亚当,成为了伊甸园的优势物种。查看这个45发现,它是一个寄生程序,靠吃掉80,也就是亚当来繁殖自己,随着亚当被消耗,45的数量也大幅下降。

第二阶段:
剩下的80进化成了79,变成79之后,就对45免疫了,所以原来的优势物种不行了,很快,又出现了一种51个字节的程序进化出来,以79为“食”,把“79”消灭到了几乎灭绝的程度。这个时候,又出现了一个神奇的事,就是在寄生程序45身上,又出现了一种“寄生虫”,它只有22个字节,它除了寄生在45身上复制自己的信息外,别的什么事都不做。最后22成为了“伊甸园”的主人。

Tom点开这个22发现它的内部非常简单,没有任何一个人类的电脑天才能写出这种天才代码。而这一切都是在Tom睡觉的时候发生的,这个例子说明了从下到上的系统有多强大。

ETH就是那个80,EOS就是那个45。

顺带提一句,这个例子也从一个角度说明了书名《失控》的意义,就是只有失控了才能产生多样性,进化体的天性就是喜欢钻常规的漏洞。

EOS存储白皮书中文翻译

摘要

EOS.IO存储是一种建议的去中心化的文件系统,旨在为每个人提供永久存储和托管任何网页浏览器可访问的文件的能力。

与其他建议的替代方案不同,除了完全可退还的存款之外,EOS.IO存储上的存储或带宽将不会产生预付费用或固定费用。用户可以在需要存储和带宽的时候持有代币,并且在不需要存储和带宽的时候出售代币。

基于星际间文件系统(IPFS)和EOS.IO软件,EOS.IO存储服务将由区块生产者提供,并且为那些持有基于EOS.IO软件的区块链的令牌的人提供服务。区块生产者被激励去复制和托管那些允许任何人通过Internet浏览器的访问的文件。

背景

IPFS

IPFS是用于存储内容可寻址文件的新兴标准。内容可寻址存储是一种基于其内容而不是其位置来检索的信息的存储机制。换句话说,使用IPFS存储的所有文件的名称都是从其内容的散列中生成。

这意味着同一个文件在每台计算机上都具有相同的名称,并且更改文件内容会导致文件名称的更改。这也意味着当您从服务器下载一个文件夹时,您可以根据服务器提供的内容重新计算文件名称来验证文件是否为您请求的文件。

IPFS还提供P2P网络层,允许计算机根据其唯一的名称发现和共享文件。然而,该P2P网络层不提供或保证存储,托管或带宽。根据目前的结构,IPFS网络希望用户能够提供自己的服务器和相关的基础架构。

EOS.IO

EOS.IO是一款允许任何人创建并启动智能合约的软件平台。智能合约是一段自动执行条款并验证用户操作的计算机代码。区块链通过在有效的用户操作顺序上达成共识来确保安全,然后应用其确定性状态机来获取当前应用状态。

因为区块链的安全性很大程度上取决于它被大量复制并且100%可用,不适合存储大型的可能被修改的文件。例如,假定每个事务为100个字节,一个每秒可以处理100万笔交易的高性能区块链会以超过100MB/s的速度增长。为了保持实用性,这些块链可能定期截断其交易并且记录区块链状态快照。除此以外,区块链分类账簿会被复制每一个节点从而导致不必要的备份开销。在事务日志或区块链状态中存储批量数据是一个既不实用的也不可扩展的分散文件存储解决方案。

为了解决这个问题,一些块链应用程序选择存储IPFS文件名。这个过程确保了智能合同是引用确定和不可破坏的文件,但是不保证这些文件的可用性。IPFS不保证文件的可用性;如果节点拒绝使自己可用,那么文件可能会消失。一个无法访问的文件可能最终会破坏智能合同的效用和目的,因为各参与方无法验证文件的含义。例如,考虑一个通过其IPFS名称引用遗嘱的合同。可能由于忘记支付进行中的文件托管服务或者死者的财产未能安排支付档案托管,导致包含遗嘱的文件不可用,从而引起合约失败。智能合同不能只需存储IPFS文件名,并确信文件将始终存在并在需要时可访问。

区别与联系

Filecoin是一个由IPFS后面的团队创建去中心化的存储网络,用于激励在IPFS上存储文件。根据加密证明的最新发展,此协议创建一个无信任存储证明(proof-of-storage)和备份证明(proof-of-replication)。然后该协议激励个人运行审核员来抽查存储提供者。

当有人想从该网络中存储或者获取一份文件时,存储提供者会收到Filecoin代币。其基本思想是存在大量未使用的存储空间存在在全球的家用电脑和服务器上。Filecoin旨在使拥有未使用存储空间的所有者从中获利,同时减少对第三方对存储提供者的信任需求,反之亦然。

Filecoin采用的模式与其他分散式存储解决方案Maidsafe,Storj和Siacoin类似。他们都试图收集用于存储和数据检索的小额支付,并且他们都创建自己的专用货币。除此之外,所有这些产品的目标都是出租位于低速网络连接下的存储空间的家庭电脑存储提供者。最后,他们都要求用户不断购买加密货币来支付存储和带宽。这意味着这些文件可能不适用于大众通过浏览器免费访问。

这些网络上的存储和带宽成本可能高于使用云服务提供商如Amazon S3的成本。例如,在撰写本文时,Storj收费每GB下载\(0.05,而亚马逊每GB下载\)0.01,Storj收费每月每GB$0.015,而亚马逊每月每GB收取0.0125美元非频繁访问存储。

尚不清楚Filecoin,Maidsafe,Siacoin或Storj的设计是否可以扩展适用于大量用户和大量访问。随着用户和文件的数量的增加,定期付款的数量也将增长。随着基础事务负载的增长,光是维持现状就会不断给基于单线程的区块链造成压力。需要存储文件的用户甚至需要设置自己的服务器以进行自动加密付款或者他们将不得不每月登录手动执行付款。零知识证明和抽查会消耗带宽和CPU资源,其成本可能大于存储的实际成本并管理带宽。

对比

DropBox, Mega, GoogleDrive 与 iCloud 这些服务为用户提供2GB至50GB的免费存储空间和一些带宽服务。这些服务是出售加价付费产品的免费增值服务。不幸的是这些服务既没有公共文件命名系统,如IPFS,也不集成一个开放的P2P网络,也不是去中心化的。每个都完全受到各自的控制单一法律实体,并且停机时间或改变他们的定价模式不是一个罕见的情况。

EOS.IO存储设计

为了本文的目的,我们假设有人部署了基于EOS.IO一个名为TOK的本地代币的区块链。在TOK区块链上部署了一个文件系统智能契约@storage,这个智能契约允许每个用户定义一个目录结构其中所有文件都是指向IPFS文件的链接。

用户通过签署一个事务并且在TOK链上广播来创建到IPFS文件的链接。该事务包括相对于用户的“主目录”的路径,对应的IPFS文件名和文件大小。用户还可以指定它们希望文件由TOK区块生产者存储和托管。

然后,用户将通过由EOS.IO存储软件定义的标准化REST应用程序编程接口(API)将文件上传到其中一个区块生产者。生产者验证文件具有由用户指定的大小和IPFS名称,即制作者会在TOK区块链上广播一个事务,表示该文件已被接收。其他区块生产者将通过IPFS网络复制该文件。

存储配额

总的来说,区块生产者投票表示他们想要的总存储容量。生产者投票的中位数是所有生产者必须提供的预期容量。生产者会被激励去提高存储容量来竞争TOK持有人的投票。在宽限期中,那些提供的存储空间低于平均值的生产者可以增加其可用容量。

为了使用户能够使用存储,他们必须首先通过在@storage智能合合约锁定TOK来预定它- 基本上是一笔完全可退还的押金。用户可以通过解除对区块生产者存储和托管文件的要求来解锁他们的TOK,尽管这些文件仍然可以通过其他IPFS主机可用。假设TOK的价格是恒定的,该持续的存储和带宽成本为0。当某人的文件被存储期间,TOK的市场价值可能会上涨或下降。无论哪种方式,一个人无需为其存储和带宽使用支付任何TOK。

每个TOK令牌可用的存储量是由Bancor算法确定,该算法维持恒定储备比率(CRR)为10。CRR意味着存储容量永远不会被用完,因为对应的开销(每兆字节锁定的TOK)将随着空闲容量的缩小而上升。基于大多数TOK持有人不要求访问他们所有的存储的事实,CRR被设定为10来最小化网络过度配置的成本。

下面的方程将Balance定义为所有各方消耗的储存量的总数。Supply是供应量区块生产者的实际拥有的存储总量,而CCR是恒定的准备金率。

总体上来说,生产者可以调整CRR(向上或向下)或调整总存储量供应(向上或向下),但将存储供应绝不可能低于已经声明的存储空间。

不良数据

EOS.IO软件旨在将智能合约与具有法律约束力的仲裁结合起来。除了有代码之外,这些合约也可以强加主观要求到各个参与方。区块生产者和存储用户签订智能合同协议的同时,也附带签订一个法律合约允许区块生产者负责控制不良数据内容。根据网络提供的仲裁争议解决机制,任何人都可以发起判定任意存储文件是非法的裁定,并且该文件将被删除如果对应的存储和托管违反法律或其他合同。

EOS.IO存储协议将允许块生产者删除任何法律或仲裁要求删除的文件。不是所有的块生产者都要遵守相同的法律法规;因此,由TOK持有者的社区决定区块生产者是否在正确合理地删除文件。有不正当行为的生产者可以在区块链宪法的仲裁之前被投票否决。

重要的是使用IPFS网络从根本上限制了EOS.IO存储器检查数据的能力。如果其他人将文件托管IPFS网络,即使当块生产者不再存储或提供一个特定的文件,该文件可能仍然可用。标识符仍然是文件的准确描述符,任何独立的完整节点也可以使用独立的IPFS节点访问文件。个人可以选择自己托管它或付款给他人来代替他们托管文件。在这种情况下,个人或他们的服务提供商将承担托管和提供文件的责任。

隐私

EOS.IO存储是托管公共数据的平台。需要隐私的用户可以在上传文件之前对其应用加密算法。尽管加密文件的内容将是私人,但是上传文件的区块链帐户的身份仍然可以被所有人看到。

去中心化和复制

EOS.IO存储的核心将是IPFS,它提供了一个去中心化的网络,在这个网络上任何人都可以托管通过其地址识别的文件。区块生产者代表20或更独特和独立的个人或组织,每个人或组织都可以在全球不同的司法管辖区复制和托管数据。这些生产者可以是位于能够支持高吞吐量EOS.IO交易量的数据中心。只要20个块生产者中至少有一个在线并提供文档,该文件对所有人都是可用的。

通过这种方法提供的复制和带宽可用性将显著大于使用较低级别复制的其他分散式解决方案。由于区块生产者需要维持正常运行时间保留他们的投票并获得生产块的报酬,该服务的可靠性也将大大增加。

根据提出的存储智能合同和相应的法律义务,不在总票数前25名的生产者将无法提供EOS.IO存储服务;但是,在被选入前25名后,它们应该表明他们能够快速启用服务的能力。

EOS.IO存储的经济学

天下没有一个免费的午餐,所以是谁实际在支付由区块生产商提供的存储空间和带宽?现有的去中心化解决方案都依赖于每月小额支付,但这是不可持续的,因为它创造了不断增长的基本转账负载,并且很难在不信任具有付款能力的第三方的情况下进行自动化。小额支付创造了不利于大规模采纳的交易阻力。我们通常看到消费者对支付小额贷款的抵制并且偏爱固定费用或一次性付款[1]。

储存经济学

使用EOS.IO存储的所有TOK持有人将通过EOS.IO每年5%的通货膨胀的部分来支付该费用。更具体来说,在已存储文档的用户删除文档之前,由于无法出售TOK,他们面临这种供应通货膨胀。那些需要永久存储的用户将经济有效地消耗他们的TOK。只要新存储请求锁定TOK的速率比TOK通货膨胀率快,那么TOK货币将会有效货币通货紧缩。这将反过来增加向区块生产者支付的TOK的价值使他们能够扩大存储供应。

如果存储需求大幅度减少,解锁的TOK可能进入市场导致有效价格通胀超过自然通胀。换句话说,价格的TOK可能会下降,区块生产商可以维持的存储容量也会下降。幸运的是,由于需求下降,生产者可以简单地减少驱动器数量降低成本也从而降低可用空间。不然,他们也可以降低用于计算锁定的TOK数量的恒定储备比率(CRR)来预留存储容量。

底线是那些需要存储的人通过金钱的时间价值来支付费用。从而取消小额支付,交易阻力,和惊喜费用。

带宽经济学

上传和存储文件的人可能与下载该文件的个人有很大的不同。请假设YouTube的去中心化版本,有人上传了一部家庭电影,然后被数百万人观看。发布视频的人不想或无法支付百万观众带来的带宽消耗。

在这种情况下,每个人为自己的带宽付费是理想的。这又是一个小额支付不是可行的情况,因为它的成本交易(心理和网络)成为有效妨碍大规模采用的收费墙。也就是说,所有用户永远锁定足够的TOK来合理的满足每个人的平均带宽需求,而不用感觉每次观看他们都被收取费用。

除了给所有用户提供TOK带宽外,区块生产者可以提供免费增值服务给所有由TOK持有人通过通货膨胀补贴的互联网用户。每个区块制造商自主决定将向匿名互联网浏览器提供多少免费服务。由TOK持有者决定向哪个区块生产商投票和支付金额。

此外,上传文件的个人可以选择提供那些下载它的带宽费用,例如分发电影预告片的电影制片厂。

结论

通过彻底改变经济模式,EOS.IO存储有潜力从根本上改变去中心化存储市场。消除小额贷款的开销和对成本的新理解将促进应用程序的创新,如从前不可行的去中心化的视频托管。这是史上第一次,一个由分布式加密保护的平台提供托管服务,可以媲美由中心化供应商提供的免费增值服务的托管服务。

作者:抖抖
文章来源:https://mp.weixin.qq.com/s/lphAMp14_951XhBr1uKYqw

EOS系统架构和传统互联网应用架构对比和解析

EOS最近在Steemit上发布了系统的整体架构,虽然讲得不是清晰,但大致轮廓可以猜出来,本文将做一个简单的分析

原文:https://steemit.com/eos/@eosio/introducing-eos-io-application-stack

架构图
eos-arch-en

通过对比传统web服务模块,可以比较容易理解各个模块的用途

EOS:eosd
Web:数据库
提供数据存储,只是eosd是基于状态的区块链数据存储方式,以及通过transaction执行智能合约进行状态的修改。

EOS:Query Services + GraphQL
Web:REST & Graph QL & 微服务
EOS应该会把比如用户账号管理、转账等封装成微服务;GraphQL在React框架里使用已经比较简便。
名词解释:GraphQL 是一个由Facebook提出的 应用层查询语言. 使用 GraphQL, 你可以基于图模式定义你的后端. 然后客户端就可以请求所需要的数据集。

EOS:Client(React.js)
Web:前端
因为EOS架构中将GraphQL默认集成,那么前端使用React.js将是最优的框架选择,所以有意给EOS开发应用的开发者可以关注React多一些了

EOS:IPFS File Storage
Web:文件存储
从架构图上看包含了文件的存储,和服务器端程序的存储;并没有明确是用filecoin的链,还是基于IPFS协议有block producer提供存储;文中说是免费的,所以应该是基于IPFS自建;说是免费的,但同时和代币持有量有关,这点文中还没有讲清楚。

思考:

  1. 类比目前互联网应用的架构模型比较方便开发者上手,同时也提供与目前互联网应用类似的体验
  2. 支付模型目前看不清,但与以太坊按计算量付费的模型相比EOS目前描述的模型非常复杂和动态,因为EOS不止需要限制计算,还要限制带宽、存储等
  3. 最后文中也提到应用开发者可以通过类似的架构来提供链外数据接口,从而实现应用的高可扩展性

如何检查你保存EOS的以太坊钱包被正确的设置了EOS公钥

背景:目前EOS的代币是基于以太坊的ERC20的代币,其在ICO结束后48小时会被冻结,并映射到EOS公链上。所以上一篇文章介绍了如何建立映射的方法,此文讲讲如何确认你的公钥被正确映射了。

打开 MEW 在线钱包:
https://www.myetherwallet.com/#contracts

‘Select Existing Contract’ 中选择 ‘EOS Contribution’

然后选择"Keys"

输入你保存EOS的以太坊地址

点击‘Read’

检查输出的 EOS公钥地址是否正确。

如何生成以及注册eos公钥

ERC: EOS在完成ICO后是会将目前在以太坊网络的ERC20代币转到EOS自己的区块链网络的,所以以下操作的意义就是为了将目前你以太坊钱包里的EOS,映射到将来的EOS网络中做的准备,而且在EOS ICO结束前是必须完成的操作。

原文链接:https://steemit.com/eos/@peterchen145/39yu5j-eos

公钥映射只需要在2018 年 7月3号之前完成就可以了。

大家不要紧张。

第一步:生成eos密钥对(key-pair)

1.访问EOS Token Generator,

看到如下界面

这个页面是由@nadejde基于eos官方源码开发的,他只保留了生产密钥的功能,其他的都去除了。感兴趣的,可以看他的原始文章:https://steemit.com/eos/@nadejde/eos-key-generator,

代码在这:https://github.com/Nadejde/eos-token-sale

官方代码在这:https://github.com/EOSIO/eos-token-distribution

2.点击 Generate EOS key

过一会就会生成你的密钥对:

一定把你的私钥(private key)保存好了,私钥是没办法恢复的,切记切记。

第二步:注册/映射eos密钥

注册eos密钥就是把刚才生成的密钥对建立映射关系,把公钥映射到以太坊地址上。在整个代币分发过程结束后的48小时后,erc20 代币将不能转移,而是根据映射的密钥重新生成eos区块链。

这么说好像挺复杂,简单来说就是这个过程很重要,记住这点就行了。

不过也请放松,2018年7月3号还很遥远,你有大把时间把这事情搞清楚。

注册/映射你的eos密钥对只需要在整个ico完成前进行就可以了。

你只需要注册/映射eos密钥一次就行了,注册多次只是浪费钱,除非你想更新密钥映射。

下面就是注册/映射eos密钥的步骤:

1 访问这个地址https://www.myetherwallet.com/#contracts

2 在Select Existing Contract下拉列表中选择eos contribution

3 点击access

4 这时会在access下出现这些内容:

在select a function下拉框中选择register

5 然后会出现新的内容:

在key 这栏输入你的公钥,注意是公钥。

6 然后解锁你的钱包:

7 点击解锁

8

然后,点击write

9 这时弹出一个提示框

转账数额 设为0,gas limit用默认的就行,如果钱包没有帮你自动生成gas limit,就写:90000;如果交易失败了,就提高gas limit。

10 点击生成交易。

11

点击“是的,我确定!发送交易”

12 如果一切顺利,会在页面底部出现一个绿色条,包含着一链接。

基于EOS.IO 软件的区块链存储成本

原文链接:https://steemit.com/eos/@eosio/storage-costs-on-blockchains-using-eos-io-software?from=singlemessage&isappinstalled=0

ERC:这篇文章对于理解EOS很关键,是目前可用预见的最大成本瓶颈。

在EOS.IO技术白皮书中,我们讨论了一个采用未经修改的软件包的区块链的一些特征。在本文中,我们描述了一种资源分配方法,即如果您拥有1%的代币,那么软件将为您分配该区块链1%的可用存储容量。如果有10亿个代币以及1TB的存储空间,那么每存储1024字节将花费大约1个代币。价值30亿美元的市值相当于每1024字节花费3美元。如果代币达到Ethereum的市值,那么每1024字节可能是30美元,或者说每个字节约3美分。

我们也知道,用EOS.IO软件创建的每一个帐户都大约有1000字节的数据,包括为了追踪权限、账户余额和其他杂项开销。这意味着每个帐户的成本将为30美元,不过仍然太高。

提高节约成本的能力

为了在代币价格比较高的时候降低成本,我们需要增加容量。为了将每个帐户的成本降至0.01美元,我们将需要3000TB的存储空间。如果我们可以使用SSD,这种存储将耗资约100万美元。如果一个基于EOS.IO的区块链达到300亿美元的估值,每年可以分配15亿美元给区块生产者(通货膨胀率为5%),那么这种100万美元的资金是微不足道的。

不幸的是,SSD比RAM大约慢2500倍,并且最近Steem升级到chainbase时,许多Steem见证人发现强制要求操作系统“转换”到SSD可能断然终止进程。这意味着我们需要3000TB的RAM速度级的存储。这并不罕见,Google将其整个数据库保留在RAM中,不同寻常的是一个新的平台需要这么多的RAM。

新的存储技术

英特尔最近开始出货其第一款基于新的3D XPoint技术的Optane SSD。这是第一款可以配置用作RAM的SSD,尽管它比传统RAM稍微慢点,但是比原来的SSD拥有更快的性能。他们将在今年晚些时候发布这些1.5TB容量的驱动。

通过这些新技术,我们认为高性能内存的成本将大幅下降,区块生产者应该能够扩大可用内存以降低成本。代币的市场估值越高,区块生产者将能够支付更多的存储容量。

挑战的真实本质

EOS.IO软件的RAM存储器的代币化使其除了存储价值之外还拥有货币价值。这种附加的货币价值使得相对于没有货币价值的实际存储来说是昂贵的。黄金在工业中并没有被大量使用,是因为它的货币价值超过了其工业价值。使用EOS.IO软件的人创建的代币通过要求当选的区块生产者提供性能证明,有效地地将RAM存储容量货币化。

像一家银行的黄金储备一样,大部分时间它只是存储在那儿从未被使用过。实际上,区块生产者可以宣称“3000TB的存储容量”,但实际上他们只有3TB的容量,1000倍的备份储量。在这种模式下,就像黄金支持票据的存储的费用会如同黄金的价值一样降低,容量存储的成本也会降低。除非突然有人决定购买1%的货币,并尝试存储30TB的数据,而实际可用的只有不到3TB,除此之外将一切正常。

阻止内存银行的运转

只要大多数人从来没有试着去使用他们名下的存储空间,那么一个区块链网络可以以每个代币获得“廉价存储”的方式来操作。随着可用存储量的降低,价格将不得不增加。任何时候,一旦有人想要使用100%的可用存储空间,那么他将不得不支付100%的流动代币;然而,只想使用1%的可用存储空间的人可能只需要支付0.01%的流动代币即可。这个里面使用的准确的方程式需要做一些建模和估计,但是使用第一个存储字节的初始价格比使用所有可用存储的每字节价格便宜1000倍是可能的。

你可以这样理解,一开始你可以启动1000倍的储备率,随后会降至1倍,因为实际的存储百分比被消耗了。所以如果你有1TB真正的RAM,你可以从1000TB的虚拟RAM(1000倍)开始。在消费第一个100GB(10%)之后,您的存储率可能下降到100倍,导致新的虚拟RAM为100TB。当你消耗500GB(50%)的时候,您的储备率将降至20倍,同时拥有的虚拟内存为20TB。随着虚拟RAM下降,每个代币的虚拟RAM也将自动降低从而增加每个附加存储单元的价格。

可变定价的影响

市场自然会消耗资源,直到市场价格不断变化之后导致供需平衡。如果存储的初始定价太便宜,它将迅速被消耗掉,直到价格上涨到只能存储有价值的数据。在这一点上,区块生产者可以增加存储能力或最大储备率来降低价格。代币持有者将投票给价格最实惠的区块生产者,如果代币价格上涨,区块生产者将能够承担额外的能力。

可变定价的另一个因素是在不使用时释放闲置内存的财务激励。随着代币价值增加,使用这些代币来维持存储的机会成本也增加。智能合约开发者们将基于最小化内存使用量及最大化回收利用的原则来设计应用程序。

内存蹲守攻击

这种算法的一个副作用是想要消耗大量内存的人有财务激励机制促使他们成为第一个去消耗内存的人。一旦他们消耗了内存,他们可以在合约中重新规划使用它们。如果他们需要钱,他们可以释放这些内存。第一时间储备内存将快速推高价格,到达投机需求与实际需求的平衡点。

幸运的是,由于保留的内存是“不可传输的”,并且初始的内存成本比购买实际的物理RAM还要贵一百倍左右,所以这个攻击得到了很大的缓和。这个网络使用的每个字节的内存被复制并存储在超过100个完整节点中,并且通常很多都是次节点。网络必须为这些人支付足够的费用来保证购买和维护内存的并行操作。因此,在100个节点上复制的去中心化的RAM每个字节的费用,通常会比中心化的RAM高100倍左右。区块生产者应该注意保持存储率设置,使得当分解所需的冗余级别时,每个字节的成本不会低于这个网络使用的实际存储的成本。

总结

市场自然而然且不可避免地将货币属性加入EOS.IO软件创建的代币中。有必要对消耗额外内存单元的成本进行动态定价,以保持实际价格与真正应用程序开发的价格是对等的。这与新内存技术相结合将确保:在基于EOS.IO软件的区块链上存储数据的成本对于去中心化应用程序开发人员来说是合理的。