我第一次通过乔·阿姆斯特朗(Joe Armstrong)了解到了 Erlang/OTP,他将世界分解成可以像人类一样互相聊天的进程。当我开始在 ArcBlock 区块基石[1]工作时,我们的任务是建构一个区块链平台,我们要求将 Erlang/OTP 普遍用作后末端服务,以及我们的区块链研发框架:Forge。
本文中叙述了这些原因,并且因为 OTP 的功能,我们以求建构一个具备高度实用性、可立刻积极开展生产的区块链框架,它不仅获取运营区块链网络的关键服务,同时很大地修改了新一代应用于和服务的必须。区块链框架入门Forge 是区块链开发工具,它很大地修改了建构框架以反对多链网络,即创立自己的链(Build Your Own Chain,BYOC)这一概念的过程。
在 Forge 之前,创立一条区块链是很有挑战性的。如果人们想自己发链,首先必须设置一个区块链系统的有所不同组件,还包括共识算法、点对点网络等。
在花费大量精力使这些组件协同工作之后,开发者还必须要求如何调整链的有所不同参数,例如通证供应总量和分配、特定交易设置和管理员访问控制等。如果充足幸运地让区块链运营一起,但如果找到即使有一些严重错误,则必须暂停所有运营的节点,并从头开始,新的展开设置。
在 Forge[2],我们用于 Erlang/OTP 早已能用的功能和优点获取一个协助开发者已完成所有艰难工作的框架。例如,如果您用于 Forge 启动一个区块链,唯一的拒绝是通过在配备或运营时落成或停止使用它们来设置不道德。更加最重要的是,如果您期望在链启动时展开改版,则可以热升级系统的各个部分,而需要重新启动整个网络节点——这是任何产品级应用于或服务的关键特性。在 Forge 框架的设计规划阶段,我们还评估了其他区块链社区的风行语言,如 Golang。
Golang 有它的益处,还包括一些十分高级的库;然而,为了建构我们想获取给客户的强劲平台,确实推展我们南北 Elixir 的有三件事。把问题修改为进程首先,必须将简单的问题分解成为进程。区块链本身是许多问题的混合解决方案,OTP 使我们可以解构并逐一解决问题它们。将有所不同的进程分组到应用于的灵活性也有助代码库确保。
例如,当用户必须建构区块链节点时,这是一个十分类似于建构操作系统的过程。我们必须选曲一个“应用程序”列表,为互相交换事件协同工作(例如,区块链系统交易),继续执行这些事件,然后存储改版后的状态。为了协助每个人解读其工作原理,很更容易把结构分解成几个核心应用程序:•共识应用程序:管理与共识算法涉及任务的进程•存储应用程序:管理与文件系统涉及任务的进程•Forge 应用程序:继续执行智能合约并反对 RPC 界面的进程•事件应用程序:管理事件订阅者的进程•索引应用程序:持续从状态数据库捕捉数据并将其索引至涉及数据库的进程在这些应用程序中,Forge 还有一些其他进程,它们相互合作,协助进程并处置区块链的交易活动。
例如:•当用户收到交易时,gRPC 服务器不会对其展开处置并将其推至内存池的阵列•若交易有效地,它将被放入内存池,然后涌进整个网络;否则,它不会被退出•当区块实时给我们后,交易会被一个相接一个缴纳并由智能合约引擎继续执行决定这些活动有可能很艰难。然而,在 OTP 的协助下,我们需要通过一种持续的分而治之的方法精彩地管理负责管理的进程——将事物的组织成应用程序,将每个应用程序的组织成一个监控树根,并且每棵树由许多小进程构成。
当必须所发时,我们可以输入进程池;当必须相同的顺序处置时,我们用于单个进程——从本质上谈,它的收件箱当作消息队列,这确保了任务以准确的顺序获得处置。“不易瓦解”第二是“让它瓦解”的思想。区块链系统由许多通过网络关联的运营实体包含。
最重要的是,我们必须有必要的错误处理系统,在网络不平稳或其他车祸中断再次发生时需要保持长时间运营。例如,如果一个进程必须加载链上信息来处置 RPC 催促,并且因网络不平稳而瓦解,在这种情况下,重试几次就可以修缮问题。
那么,OTP 中的监控器可以协助完全恢复进程。这正是乔·阿姆斯特朗(Joe Armstrong)所说的“撰写一次,总有一天运营”的极致相比较。
为区块链准备就绪我们自由选择 Erlang/OTP 的第三个最重要原因是它为区块链系统获取了许多出众的内置功能,比如热升级、所发和高可用性。区块链框架的一个起到是以混合的方式运营框架代码和客户自己代码,这必须安全性隔绝才能长时间工作。例如,用户自定义的智能合约有可能用于与框架定义的合约完全相同的变量名。
其他配备可能会更换系统的某些部分(例如,客户有可能可以用自己的部署更换共识引擎),并且可以在运营时将新功能加到到现有的区块链节点中,而会影响可用性和稳定性。因此,Forge 是在巨人的肩膀上打造出的,这是一个经过战斗考验的生产系统,需要获取我们所必须的特性。对外开放灵活性用于 Erlang/OTP 让区块链框架享有高于其他语言的十分最重要的优势,就是灵活性。
作为区块链研发框架,Forge 在设计时乃是拓展对外开放的:您可以通过加到更好的应用程序来拓展框架,以构建更加简单的功能,比如用于有所不同的共识引擎。在我们基于 Erlang/OTP 的框架中创立的区块链网络容许用户在必须时热升级他们的智能合约,而需要重开整个系统,这为用户在运营时获取了很大的灵活性。例如,如果必须移除区块链系统中的一个节点来升级部分代码,则必须同时升级所有节点,以便它们用于完全相同的代码逻辑集并输入完全相同的结果。
在这种情况下,OTP 容许在交易中包括部分升级,所有节点都可以继续执行交易务并同时升级代码。总结如果可以自由选择建构面向未来的区块链框架,我们团队还是将 100% 用于 Erlang/OTP。当他人还在希望建构和确保简单的系统时,Erlang/OTP 早已在高压环境中拒绝接受了时间的考验。
当今的 Erlang/OTP 解决问题了我们面对的大部分挑战,让我们的团队需要更好地注目于建构高级功能特性,并让它们更为用户友好关系。原文载有于 Erlang Solutions Blog[3]References[1] ArcBlock 区块基石: https://www.arcblockio.cn[2] Forge: https://www.arcblockio.cn/zh/forge-sdk[3] Erlang Solutions Blog: https://www.erlang-solutions.com/blog/erlang-and-elixir-for-blockchain-4-key-advantages.。
本文来源:JN江南体育-www.ahxccy.com