EOS 基本概念

EOS 是一款允许任何人创建并启动智能合约的软件平台。智能合约是一段自动执行并验证用户操作的计算机代码。区块链通过在有效的用户操作顺序上达成共识来确保安全,然后应用其确定性状态机来获取当前应用状态。EOS 引入了一种新的块链架构,旨在实现分布式应用的性能扩展,这是通过创建一个可以构建应用程序的类似操作系统的架构来实现的。该软件架构提供帐户、身份验证、数据库、异步通信以及在数以百计的 CPU 或群集上的程序调度。该技术的最终形式是一个块链体系架构,该区块链理论上每秒可以支持数百万个交易,同时普通用户无需支付使用费用。

启动过程

每个系统都有自己的启动过程,EOS 的启动过程可以总结为以下流程:

img

图片引用自 EOS启动过程简化版 - 一张炫图带你了解EOS启动过程

架构

img

图片引用自 Introducing EOS Application Stack

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

  • Query Services + GraphQL:
    EOS 应该会把比如用户账号管理、转账等封装成微服务;GraphQL 在 React 框架里使用已经比较简便。

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

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

名词解释
GraphQL 是一个由 Facebook 提出的应用层查询语言。 使用 GraphQL,你可以基于图模式定义你的后端,然后客户端就可以请求所需要的数据集。

共识算法

EOS 采用 BTF-DPOS 共识算法,根据这种算法,在使用 EOS 构建的区块链上持有通证的人,可以通过一个持续进行的投票系统来选择区块生产者。任何人都可以选择参加区块生产,只要能够说服通证持有人为其投票,就会有机会参与区块生产。

DPOS:
委托权益证明(Delegated Proof of Stake )

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

区块产生

EOS 继承了 BTS,Steemit 的石墨烯框架,白皮书里也写着用 DPOS 共识算法,也就是3秒出一个块。关心 EOS 开发或者关注 BM Twitter 的人可能知道,实际上 EOS 的共识效率为:

  • 出块时间:500毫秒
  • 最终不可逆:<= 2秒

怎么做到的呢?让BM来告诉你:
EOS 使用混合 dpos 和 bft 达到0.5秒出一个块,1-2 秒确认块并使块最终不可逆。为什么可以从 3 秒一块提高到 0.5 秒一块?EOS使用了一些优化措施,我以后会详细讲。为什么 1-2 秒就可以确认?背后的原理就是使用 bft(拜占庭)算法收集 2/3 的出块者的签名,并把签名写入区块中,来达到快速确认的目的。bft 算法证明很复杂,它可以实现不超过 1/3 节点的容错,也就是只要 2/3 的节点确认就行。

EOS 可以让区块每 0.5 秒生成一个。任何时刻,只有一个生产者被授权产生区块。如果在计划的某个时间内没有成功出块,则跳过该块。如果有一个或更多的区块被跳过,则在区块链上会有0.5s 或者更久的空白。EOS 区块的产生是以 126 个区块(每个出块者六个区块,乘以 21 个出块者)为一个周期。在每个出块周期开始时,会根据通证持有人所投票数选出 21 个区块生产者。被选中的区块生产者的顺序会根据 15 个及以上的区块生产者的同意,制定出块顺序的安排。如果出块者错过了一个块,并且在最近 24 小时内没有产生任何块,则这个出块者将被剔除在考虑范围之外,直到他们通知区块链可以重新开始产生区块。这确保了网络的顺利运行,把被证明为不可靠的区块生产者排除在出块排程之外,通过这一方式使得错过区块的数量最小化。

区块分叉

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

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

交易确认

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

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

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

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

  1. 防止在区块链分叉上的交易重放,这些交易并不包含参考区块;
  2. 通知区块链网络,某一用户及其资产(stake)处于特定的分叉上;

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

EOS 存储

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

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

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

IPFS

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

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

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

应用背景

一个高性能的区块链系统需要满足极高的TPS需求,那么必然会导致区块数据的高速增长,了保持实用性,这些块链可能定期截断其交易并且记录区块链状态快照。除此以外,区块链分类账簿会被复制每一个节点从而导致不必要的备份开销。在事务日志或区块链状态中存储批量数据是一个既不实用的也不可扩展的分散文件存储解决方案。

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

不良数据

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

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

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

隐私

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

参考文章

推荐资源

优质播客:

工具网站:

0%