|全面比较智能合约语言:Solidity仍是当前最佳选择( 四 )


|全面比较智能合约语言:Solidity仍是当前最佳选择
本文插图

F、 Bamboo
Bamboo[18]是一种面向以太坊虚拟机的智能合约语言 。 它的语法有点类似于Solidity的语法 , 并且支持所有相同的默认类型 。 该语言的目标是显式地建模状态转换 。 函数返回时必须显式声明当前协定的状态 。 状态被建模为具有一组离散函数的多个合约 , 这些函数仅在合约处于给定状态时可用 。
图7中的列表展示了另一个示例钱包智能合约 。 有三种状态:钱包 , 空墙 , 满墙 。 钱包状态是在合约部署期间执行的初始状态 。 如果我们需要更多的初始化 , 我们将在默认块中进行初始化 , 而不是立即将合约转换为空wallet状态 。 在合约中 , 它有一个映射状态的访问权 。 调用方将资金存入钱包后 , 它将转换为FullWallet状态 , 现在只能调用取款函数 。
|全面比较智能合约语言:Solidity仍是当前最佳选择
本文插图

G、 Mandala
Mandala[8]是一种在研究发展阶段提出的语言 。 它的定义特征是使用代数数据类型 。 这些类型有多个构造函数 , 每个构造函数都有多个字段 。 它支持Java等泛型类型 。 该语言的主要设计目标是安全性和可审计性 , 因此它不是图灵完备的 , 不允许在编译时上线未知的循环 。
图8显示了另一个钱包示例 。 每个Mandala智能合约由多个模块组成 , 这些模块限制功能和对状态的访问 , 这与Bamboo使用契约管理状态的方式非常相似 。 在这种情况下 , 合同很简单 , 没有必要 。 Drop关键字意味着任何调用方都可以删除此值而不使用它 , Persist关键字表示可以持久化该值 。 类型也被参数化 , 因此可以想象出多种钱包类型 , 例如Wallet[Eth]、Wallet[Btc] 。 在取款功能中 , 金额值是通过参数分解从钱包对象中提取出来的 , 而不是直接引用 。
|全面比较智能合约语言:Solidity仍是当前最佳选择
本文插图

五、 讨论
目前 , Solidity是开发新型智能合约项目的最佳选择 。 它提供了一个强大的工具、文档和示例生态系统 。 许多智能合约和去中心化的应用程序都是用Solidity构建的 , 并部署了以太坊区块链 , 每天处理大量交易 。 它正在积极的开发中 , 语言设计者正在添加新的功能 , 迫使开发人员明确他们的意图 , 避免简单的错误 。
第二个不错的选择是Vyper , 但它远不及文档和开发人员工具那样可靠 。 尽管如此 , 它的设计更注重安全性 , 并提供了很好的保护措施来防止容易被利用的漏洞 。 它类似于Python的语法使许多开发人员熟悉它 。
这里讨论的其他语言还不够成熟或开发不够活跃 , 不足以在新的开发项目中认真考虑 。 LLL实际上是由Ethereum基金会使用的一些早期智能合同 , 但是它的语法和对低级别内存管理的要求使得它很难重新命名 。 Mandala还没有编译器 。 虽然它显示了安全管理状态的希望 , 但它处理类型的方式与已建立的语言大不相同 , 因此呈现出陡峭的学习曲线 。 Bamboo有一种管理状态的新方法 , 它迫使开发人员明确意识到在智能合约的整个生命周期中 , 哪些功能和应用程序状态是可用的 。 然而 , 这个项目已经两年没有新的提交了 , 并且缺少编译器之外的任何工具 。 Flint是一种死气沉沉的语言 , 除了最初描述其设计的研究论文外 , 我们无法找到任何信息 。 因此 , 尽管它引入了许多有助于编写更安全的智能合约的功能 , 但对于开发来说 , 这是一个不可能的选择 。 Obsidian仍处于早期发展阶段 。 它显示了它的前景 , 因为它专注于开发人员的人机工程学和安全性 , 但是它的所有权概念加上TypeState , 使得开发人员可以一下子记住很多可移动的部分 。


推荐阅读