区块链技术提供了一种在没有中央权限的情况下仍能保持所有节点共识的方法。然而,这一技术面临着一些基本问题,例如缺乏实时交易结算和扩展性。尽管区块链的共识算法得到了改进,但一些区块链(如比特币和以太坊)目前还处于一次同步一个块的阶段。由此造成的确认时间缓慢,这一问题也是阻碍区块链技术应用于更多产业的最大因素之一。尽管Cardano和EOS这样的智能合约平台开始出现,公共分布式账本仍未得到广泛应用。
为了解决这些存在已久的问题,开发了一种基于有向无环图(DAG)的新模型。Fantom就是在DAG基础上发展起来的一种新型智能合约平台,旨在解决现存的公共分布式账本技术中的可扩展性问题。该平台计划通过使用现有的基于DAG协议改进版本将自己与传统的基于块的分布式账本存储基础架构区分开来。Fantom平台采用一种名为“lachesis协议”的新协议来维持共识。该协议将被整合到Fantom OPERA链中。其目的是允许在Fantom OPERA链之上建立一批程序,让所有的用户能够享受成本几乎为零的即时交易。
Fantom的目标是让世界上所有的交易机构能够相互兼容,并且创建一个能够以低成本实现实时交易和数据共享的生态系统。
Fantom的愿景是确保全球所有交易机构之间的兼容性,这些机构使用的是可在现实世界中进行大规模部署的快速DAG技术。与此同时,Fantom还想要创建具有高可靠性的新基础架构,从而实现实时交易和数据共享。
FANTOM的愿景是使用可在现实世界中大规模部署的快速DAG技术来授予全球所有交易机构之间的兼容性,并创建具有高可靠性的新基础架构,以实现实时交易和数据共享。
FANTOM希望能够在各种垂直行业中得到大规模应用,例如电信,金融,物流,电动汽车供应等等。FANTOM基金会计划创建FANTOM平台以及基于智能合约的新生态系统,供全球所有当前与未来的合作伙伴公司使用。
Fantom基金会还将引领下一代分布式账本技术的发展,从而促进精确性,可靠性以及连续性更高的全球交易。
该平台将开放其源代码供社区使用和更改,而且提供可用于创建分散应用程序(DApps)的各种应用程序支持工具。
技术概要
1. 绪论
Fantom平台拥有一项名为OPERA的独特技术。OPERA链作为一种新型分布式基础架构,旨在通过大规模快速处理块来解决现存区块链的扩展性问题。同时,OPERA链试图在分布式环境中实时处理交易信息以及“StoryData”。
“Story root”存储于事件数据中以记录详细的历史信息。其结构和一般交易结构相似,但是“Storyroot”在某些属性的继承方面意义更加广泛。“Story root”的运行原理将在接下来的科技论文中加以介绍和解释。
Fantom OPERA链将使用基于Scala的高级函数编程语言,这种语言遵循Fantom网络上的智能合约字节码。
Fantom OPERA链由三层组成:核心层(Core Layer)负责大规模处理交易,OPERA软件层(OPERA Ware Layer)负责支持智能合约以及其他功能,OPERA应用层(OPERA Application Layer)为第三方应用程序提供支持。OPERA核心层(the OPERA Core Layer)的目标是在Fantom生态系统中运行可靠的交易,以及在信息交换中运用核心链技术。OPERA核心层(OPERA’s Core Layer)作为一种链技术,理论上每秒可处理的交易多达300,000份。
2. OPERA链
2.1 Lachesis共识算法
2.1.1 介绍
OPERA链将使用名为Lachesis Consensus Algorithm(LCA)的新型共识算法,该算法旨在使用基于DAG的分布式账本技术来提高性能和安全度。LCA期望成为一种拜占庭容错(BFT)技术,这种技术能够保证与现有区块链类似的共识水平。它不仅可以防止特定节点故障导致的攻击,还能做到每秒处理300,00多份交易。OPERA链计划使用加密技术来增强节点之间
通信的安全性,并使用函数编程语言以获取完整的智能合约支持。
LCA打算在Lachesis协议的基础上形成“Lachesis DAG”。事件块之间的一连串链接形成DAG,DAG作为一个分布式系统,可存储不可更改的任意数据。事件块包括以下信息:交易,智能合约,历史信息以及之前交易的价值等。
中央权限操纵整个结构将一个事件块与之前的事件块连接起来。后期事件块的添加使得前几轮的事件块得到更加充分的验证。<图3.2.1-1>展示的是先前提到的Lachesis DAG的结构。
LCA打算完全异步运行,需要两份相同交易时(即双重支出问题),只有最早的交易会得到验证。交易之间的顺序由主链表辅助安排。
2.1.2 组件
LCA在Lachesis图上运行,它包括事件(Events),Clothos,Atro-pos和主链(Main Chain)。
事件块
事件块数据结构包括以下内容:
•存储数据:单个事件块可包含多个数据包,数据包的类型多样,具体包含哪种数据包取决于交易,智能合约,历史信息,声誉管理以及补偿等。
•签名:即创建事件块的用户的签名,用户可通过账户或是地址进行识别。
•前一个事件块的一个或多个哈希值:包含此值以提供事件块之间的链接。
同其他的区块链技术一样,只要新的事件块验证了之前全部事件块(包括其中的交易),所有新的事件块将只能验证其父事件块。新事件块将通过哈希(Hash)连接到其父事件块,并且所有的哈希(Hash)由父事件块衍生而来,因此,先前的事件块无法修改或删除。一个事件块连接成功之后,另一个节点将在这个已连接的事件块之上构建新的事件块。
标识表(Flag Table)
Flag Table作为一种数据结构,可以储存某一事件块(Clothos)的连接数据。这种数据结构包括以下内容:
•Clotho指数:包括每个Clotho的索引信息
•连接:包含与其他Clotho连接的信息
Clotho
Clotho是一个包含Flag Table的事件块,可以看到大部分之前事件块路径中创造的块。能够连接大多数事件块的事件块会被指定为“Clotho”,并被用于Atropos的任命与其他事件块的共识。
Atropos
Atropos作为主链(Main Chain)的一部分,是在Clothos信息的基础上指定的一组特殊的事件块。可用Atropos来验证特定阶段的事件块。
主链(Main Chain)
主链包括Atropos及相关事件块,主要用于事件块的验证以及整个系统结构的维护。
2.1.3 工作原理
Lachesis技术旨在实现高性能和安全的数据存储。所有的事件块都可从节点起进行异步创建,每个事件块都包含一组业务(如支付,汇款,智能合约,story,声誉以及奖励)。新的事件块会被连接到父事件块(之前事件块中最近的一个),而且该节点将通过Lachesis协议高速生成块。
Lachesis协议内容如下图,里面的所有事件块都得以连接。还有一种通过集合块进行连接的链,我们称其为主链。图3.2.1-2展示的是所有LachesisDAG上存在主链的假设。
主链作为一组事件块,可以验证一段时间内创建的事件块。LCA可以在维护主链的同时有目的性地生成错误事件块,从而有效解决诸如双重支付或恶意攻击等问题。主链还对异步产生的事件块之间的排序有影响,它会让先产生的事件块在序列中具有优先级。主链的核心是Atropos。
<图3.2.1-4>展示的是Clotho存在于某一Lachesis DAG中的例子
Lachesis DAG中存在一个Clotho,它与一组事件块中近七成的块具有联系。在事件块的随机分布中,Clotho所处的位置与大多数事件块位置的偏差最小。每个Clotho都有一个Flag Table,用于存储同另一个Clotho集的连接信息。
使用Flag Table(Clotho之间的连接信息)也就指定了Atropos。利用FlagTable的信息进行Atropos指定的过程中,事件块与Clotho组之间达成共识,这种共识将促成一个BFT(拜占庭容错)。
Atropos事件块是Cloth事件块的子集,它们为现存主链事件块的连接生成信息,并能完成新的主链。Clotho作为所有事件块的中间块,位于路径中的重要位置。 单个Atropos事件块可以检查某一轮(所有的父块都在这一轮中)的有效性。指定Atropos和Clothos的算法是在事件块本身及其所有祖先快的基础上确定的。LCA异步完成主链。
父块的子块不能连接到另一个父块,这就意味着已经生成的块无法修改或删除。
Clothos是特定时刻从顶点i到n-1的最短路径的总和。
Clothos会选择同一组中具有最大中心性的事件块。
<图3.2.1-5>为在某个Lanchesis DAG中选择Atropos事件块的示意流程图。假设1,2,3,4,5事件块为t点处的Clotho,13,14,15,16,17事件块为点t+1处的Clotho,27,28,29.30,31事件块为点t+2处的Clotho。所有的Clotho都有一个Flag表,这些表包含用于查找Atropos的连接信息。 Lachesis DAG包含快速查找Atropos的算法。要想让整个算法工作起来,Clotho需要找到Atropos,而且Atropos需要连接至主链。
Atropos 被确定以及主链创建成功之后,就可以确定无序事件块的顺序。可以根据Atropos的事件块连接信息来确定每个事件块精确的共识时间。
倘若两个事件块的共识时间相同,那这两个事件块就会利用Atropos时间戳来确定视点(viewpoint)。特定事件块的时间点值会决定交易顺序。
2.1.4 程序
<图3.2.1-7>展示的是Lachesis算法中的主要部分,简单易懂,一目了然。每个节点都可以同时异步自由创建新事件。这使得Lachesis与其他需要每个节点都参与共识的区块链技术不同。Lachesis算法旨在让每个节点能够平行创建块。每个节点都会通过向对方发送消息的方式来异步创建新的事件块。这些信息之间的交流将创建一个新的实体链。
这种简单的信息传递协议足以实现拜占庭容错(BFT)。每个节点收发信息的时候,都会通过在前一个事件块之后连接新的事件块来维持事件块的顺序。节点快速创建新的事件块之时,Lachesis算法会使用两种程序来创建主链并快速确定事件块的顺序。这两大程序无需每个节点参与通信。
<图3.2.1-8>是查找Atropos事件块以创建主链的算法。Atropos将被包含于主链中,查找它主要是通过“Find_Atropos”这一程序来完成。使用某一特定时间的Clotho就可以找到Atropos事件块。
<图3.2.1-9>展示了创建主链的过程。Lachesis算法的关键因素是维护好主链,其对保持块的整齐很重要。在Lachesis算法中寻找Atropos和Clotho主要是为了提高主链的速度。完备的主链应该能保证OPERA链的安全,且能在BFT的创建过程中发挥重要作用。
2.1.5 椭圆曲线加密技术
Fantom的技术特点之一就是安全性。Fantom希望用安全性很高的椭圆曲线密码系统(ECC)技术来增强签名和节点之间传输数据时的安全性。椭圆曲线加密的优点体现在它能够用较短的密钥长度确保较高的安全性,并允许在签名时进行高速计算。椭圆曲线密码系统(ECC)运用最有效的算法来解决离散对数问题,从而很轻松地设计出一个安全的密码系统。这一密码系统的效率更高,因为安全性相同的情况下,它的密钥长度较其他的加密系统更短。
RSA1024位密钥才相当于ECC160位密钥。此外,无论是在硬件还是软件中,椭圆曲线操作都易于实现。Fantom还打算通过使用ECC增加对硬件钱包和软件钱包的支持,并增强这些钱包的安全性。此外,Fantom对使用ECC的secp256k1参数也很感兴趣。
2.1.6 对攻击的响应
Lachesis协议可能会受到恶意团体的攻击,这些团体的目的是获取经济利益或损害系统。在此,我们会解释一些可能存在的攻击场景,以及Lachesis协议会如何采取预防措施。
2.2 功能语言
Fantom打算设计一个虚拟机来用现有的语言编写合同,以此来吸引大量开发人员。众所周知,Scala是一门支持式函数式编程语言,很可能成为源语言。Scala的优点如下:
Scala的开发是为了消除Java带来的不便,它让开发人员能够写出组织顺畅,条理清晰的代码。Scala的强类型功能可以促进开发,提高性能。例如,函数,宏和元组只是Scala提供的众多高级函数中的一部分。Scala作为一门精心设计的语言,集合了功能和面向对象的编程。字符串模式或Mixins包含类定义中的函数,让编写代码成为一件享受的事情。Fantom相信,Scala这样一种拥有全面文档的语言,是处于不同经验水平的开发人员的最佳选择。闭合器和函数是这门语言的一部分。Scala的最大优点是它能够同时提供面向对象和功能的编码模型。开发人员可以利用这两种方法的优势轻松编写简洁而且功能强大的程序。
测试和开发也很方便。和Java一样,Scala也能用短行代码写程序。尽管Java也有一些缩小代码长度的方法,但这些方法与标准编码风格有所不同,使得代码的可读性和效率有所降低。Scala本身具备的特点让写代码变得更加简洁,测试和分布变得更快。Scala拥有一个非扩展的API库,简洁但具备所有必需的功能。用Scala编写可扩展的软件可以让代码编写,测试,调试以及分配变得更加容易。该语言功能多样,可用于所有领域,包括桌面软件,游戏,网页应用程序,移动解决方案以及软件服务等。该语言也很适合编写智能合约。
Scala是一门使用非常广泛的函数式编程语言。一个名为“Play”的网页应用程序就是用Scala写的。这款应用程序已经成功登陆亚马逊和Coursera等众多IT平台。其优势已经通过产业中的实际应用得到了证明。Haskell作为广受数学家们支持的一种函数式编程语言,本身十分优秀,但其用户数量不及Scala。相对来说,Scala学习起来更容易,也更受欢迎,拥有的用户数量也更加庞大。而且Scala还支持面向对象的编程,这就进一步促进了其发展。此外,它具备所有精心设计的函数式编程语言的优点。运用删除“Side Effects”这一功能,许多编码错误以及任何可变的地方都可以提前进行识别,将代码传送到分布式环境中也变得更加容易。
Scala可以引进严格的编码技术进行编译和正式验证。正式验证作为一种数学方法可用来验证计算机程序的准确性。这一方法已用于维护军事系统,传输基础设施,加密和微处理器的软件和硬件。职能合约代码的正式验证如今也得到了认可,这一点在以太坊区块链上尤为突出。
下面就是Scala代码的一个例子,汇率一定的条件下,可用这个代码进行一定数量钱币的换算。
2.3 Fantom虚拟机
2.3.1 基于虚拟机的寄存器
现有加密货币平台使用的虚拟机(VM)大多以堆栈为基础,例如以太坊的以太坊虚拟机(EVM)。基于堆栈的虚拟机可以使用堆栈数据结构轻松执行指令。但是,如下所述,同基于寄存器的机器相比,基于堆栈的机器通常代码长度更长,执行速度更慢。DAG事件块中的存储价格十分高。代码会使用这种存储方式,因此很多指令十分昂贵。Fantom虚拟机旨在大幅减少容量并提升处理速度。基于寄存器的虚拟机可以将OPCODE的执行成本降低50%以上,并将性能容量提高近一倍。
2.3.2 基于堆栈的模型
堆栈是一种基本的数据结构。基于堆栈的虚拟机使用堆栈执行操作。假设我们正在执行一个简单的添加,则需要使用PUSH和POP操作来让四个命令行执行其他操作。基于堆栈的模型的优点是运算对象由堆栈指针进行隐式处理,即调用堆栈指针提供下一个运算对象(POP),并且不需要显式声明操作数地址。在基于堆栈的虚拟机中,所有算术和逻辑操作都是按下面这种方式完成的:首先弹出并计算堆积在堆栈上的值,然后将计算结果放在堆栈里。例如:
•加载A:将本地变量A存储到堆栈
•加载 B:将本地变量B存储到堆栈
•添加:添加两个值
•储存C:将操作结果存储到本地变量 C
2.3.3 基于寄存器的模型
基于寄存器的虚拟机在存储操作数时,会对CPU寄存器建模。即使没有PUSH或POP指令,命令也必须包括指针名称,而且命令操作数必须加以明确说明。例如,在基于寄存器的虚拟系统上执行“添加”时,该命令如下。您会发现此代码比之前基于堆栈的版本要短:
• 添加 AX,BX,CX; 添加AX与BX并存储到CX.
如前所述,此处并没有POP或PUSH指令,因此只有一行代码。但是,与堆栈不同的是,此处操作数(如AX,BX和CX)的地址必须加以明确说明。此处没有使用堆栈推送和弹出的开销,因此,基于寄存器的虚拟机的命令更快。
基于寄存器的模型的另一个优点是,无法用基于堆栈的方法进行的优化可由基于寄存器的模型完成。例如,执行两次相同的计算的时候,可将寄存器模型代码加以优化,使其仅能够进行单次计算,并将该值储存至计算机以备再次使用,从而提高代码的执行速度。
基于寄存器的模型的缺点是需要明确声明操作数地址,与基于堆栈的模型相比,这就增加了命令的平均大小。基于堆栈的虚拟机非常短,因为它不无需明确说明堆栈地址,而基于寄存器的虚拟机必须包含OPCODE里操作数的位置,这就增加了单个指令的大小。但是,正如Dalvik将其与Java虚拟机对比以后所证实的那样,整个代码库的规模可以大大缩减。
2.3.4 具备图灵完整性的虚拟机安全且强大
鉴于我们无法知道未来需要哪些类型的操作,提供图灵完整性对于建立DApp生态系统至关重要。然而,提供图灵完整性不可避免导致不可能达到决策的问题。为了解决这一问题,以太坊引入了“GAS”这一概念来避免停机问题。
但是在以太坊代码中,气体消耗量是硬编码的,没有硬叉就不可能灵活地改变这种情况。此外,尽管一些操作很关键,因为是执行器决定是否执行合同,但是低级程序可能会也可能不会执行这些操作。2016年9月发生的DDOS攻击以太坊虚拟机实际上就减慢了网络速度,几乎让其停机,因为攻击者能够利用低油价来攻击网络。
Fantom计划以理想中灵活的执行成本来设计出Fantom虚拟机,与此同时,该虚拟机操作节点的权限也要受到限制。Fantom认为,使用LCA即意味着无需执行所有节点的相同指令集。即使攻击可能发生,其灵活性也会将攻击对网络的影响限制在一定的范围内。
不仅以太坊虚拟机存在安全性和可行性问题,许多分布式分类账项目也存在上述问题。一些项目(如比特币)通过删除图灵完整性来减轻这些限制,以太坊则通过提供大量智能合约模板来支持正式验证。但是,缺少结果功能使得实现合适的DApp变得困难。
Fantom虚拟机希望提高安全性能和图灵完整性。此外,它还提供正确建立DApp生态系统的核心功能,例如外部代码链接,库和导入,以及可以网格超级计算机一起运行的强大可扩展性。基于Fantom的智能合约不仅可以独立工作,还能作为DApp框架的一个组成部分,与其他协约协同工作。
2.4 OPERA链的结构
与现有的区块链结构类似,Fantom的OPERA区块链结构有其独特特征。旨在囊括哈希(hash),签名,时间戳,地址,交易,智能合约,Story以及索引信息的新型数据结构里添加了“Story”的概念,详细讲解如下。
在OPERA链的事件块数据结构中,哈希(hash)是指前一个块的值。
交易是按块的交易列表中每份交易填充的值 。
智能合约包含账户创建的智能合约的信息 。
Story旨在记录不断变化的详细信息,例如有点分布历史的信息。即事件块中的交易里填充的Story的交易值。Story的结构与交易结构类似,但其结构已经扩展到拥有继承属性的信息。此外,它还添加了阻止将存储复制到事件块中的算法。
OPERA链包括一个外部持有账户和一个合约账户,前者由私钥控制,后者由控制代码控制。它还拥有一个Story帐户,该帐户由合同代码创建,以便管理Story信息。账户拥有可供Fantom使用的地址和Fantom代币。外部持有账户持有由私钥控制的地址,并且可将已获准交易的代币交给其他账户。外部账户可以创建新的合约账户。而且条件满足的前提下,预编程订单会执行合约账户。若有必要,一个合约账户可以调用另一个合约账户。但是,在未经外部账户调用的情况下,上述行为不成立。
OPERA链中智能合约功能应设计为根据预编程模式自动运行,即一旦满足某些条件,它就会运行。 智能合约的一些条件得到满足以后,一旦自动运行完成,OPERA链的Story也就得以创建。其功能是为智能合约储存交易以及一些Story数据。
分布式应用是一种能在OPERA链的分布式环境中运行的应用程序。分布式应用程序可利用Fantom网络的资源提供可靠性与安全性,还能帮助运行合约代码,这些代码存储在用户浏览器中的Fantom中。Fantom支持免费的网页生态系统,对创建新的基础架构做出了贡献,还能有效地用于超链接网络。此外,它可通过担任代理人或中央控制机构推动业务流程的变革,还能提供跨国境服务。
倘若创建了新的块,或者账户状态发生发生改变,OPERA链会存储这些数据。块头会使用Merkle树的哈西树结构来保存每个状态值。 在Fantom中,OPERA提供了实施智能合约的环境,对Story信息进行交易,并在每次创建块之后将块头信息保存至Story的根目录中。
2.5 OPERA链的性能
OPERA使用独一无二的Lachesis协议算法,旨在解决快速处理块时出现的延展性问题。与之前的区块链技术相比,第三代区块链的技术的性能有所改进,但创建块的速度依然很慢。OPERA链的目的是确保每秒高达300,000笔交易的快速创建和处理性能。凭借高可靠性和强扩展性,Fantom相信自己能够促进第三代区块链技术,这一技术可跨多重领域和产业得以大规模利用。OPERA链不仅要规模化处理大量交易,还要处理能够确保交易可靠性的Story和历史信息。
OPERA是基于Fantom的 Lachesis协议算法,旨在同步通过多次验证,同时测试交易的方向性和合法性。每个节点在处理分布于Fantom网络上的所有交易时,都应该提供最好的交易处理速度。过去,所有的参与者都按顺序验证每个块。但是,Lachesis协议算法将被设计为用分布式并行方法异步验证和处理事件块。
LCA处理的每个事件块的大小最多可扩展至100KB,鉴于块的传输速度更快了,Fantom认为事件块这一大小是足够的。例如,假设每个交易为260字节,那么单个事件块包含的交易将多达440个。如果每个节点创建一个事件块所需的时间为0.1s,则每个节点每秒将创建7到10个事件块。假设要求的交易数量是无限的,并且有100个节点参与,那么,每个节点每秒将异步同时创建7到10个事件块。一旦事件块的数量达到参与的所有节点的2/3时,Lachesis协议就会添加并验证另一个主链。如果可用的节点为100个,每秒就会创建700~1000个事件块,并同时得到验证。鉴于每个阶段都验证和处理大约700到1000个事件块,超3000,000TPS的性能可以实现。但是网络延迟等因素可能会降低tps。
OPERA的多层组织
Fantom的OPERA链是双层结构,由可支持各种应用程序的OPERA软件层组成,如通过付款,收款,保存,交付,商业和信誉数据处理事件块的OPERA核心层。与此同时,在OPERA核心层中,用于确保交易可靠性的核心链技术以及Fantom生态系统中的交换信息可以运行。
1 核心层
2 OPERA软件层
OPERA Ware层提供各类dApp所需的开源API、智能合约脚本、函数式编程语言、钱包以及中间件(如支付,信誉,奖励)。Fantom代币是OPERA软件层中交易的基本组成部 分。OPERA软件除了具备Fantom代币这一核心功能外,还支持与交易相关的适当奖励。根据每个参与者(消费者,公司和生产者)的信誉评分和交易记录,使用Fantom代币进行支付。
3 Fantom OPERA软件协议
OPERA软件使用交易,智能合约,Story,声誉以及奖励协议。
关于更多Fantom信息:https://fantom.foundation/
更多区块链信息:http://www.qukuaiwang.com.cn/news/
风险提示:区块链投资具有极大的风险,项目披露可能不完整或有欺骗。请在尝试投资前确定自己承受以上风险的能力。区块网只做项目介绍,项目真假和价值并未做任何审核!