如何对模型驱动的智能合约进行开发
扫描二维码
随时随地手机看文章
智能合约开发既复杂又昂贵。与可靠地编写智能合约相比,将智能合约建模为图形状态有很多优点。您可以专注于业务逻辑,而不是纠结于技术细节,甚至非程序员也可以理解您的合约在做什么。
你可以产生坚实的代码,不需要审计了。您可以轻松地为不同的智能合约代码切换平台或目标语言。我们使用YAKINDU Statechart工具的开源版本将智能合约建模为状态机。通过这种方式,您可以使用模拟器测试模型,并最终生成可靠的代码。
问题是什么?
区块链的智能合约开发是复杂的。如果你想为以太坊区块链开发智能合约,你必须学习一种全新的编程语言,如solid。如果您成功地编写并测试了您的第一个智能合约,那么下一个障碍如下:由于您无法在将智能合约部署到主网之后更新它,因此必须有人确保智能合约代码能够抵御攻击。
虽然关于已知的攻击载体确实有很好的资源,但是在智能合约中找到这些安全漏洞需要大量的经验。
过去的经验表明,智能合约经常遭到黑客攻击,导致资金被盗。由于保护智能合约的工具还不够成熟,无法发现所有可能的安全缺陷,因此需要对智能合约进行审计。只有少数专家能够以一种部署的方式对智能合约进行代码审查,而不会让您夜不能寐。这是智能合约开发的第二个问题——它是昂贵的。
这种结合使得个人或小型初创公司开发高质量的智能合约变得非常困难。
工具救援!
两年前,我们开始开发YAKINDU solity工具——这是一个集成开发环境,提供诸一些敏感的帮助、智能代码建议、快速修复、重构、模板和实时验证等功能。
今年,我们将核心功能提取到所谓的语言服务器中,可以在许多编辑器(如Atom或Visual Studio代码)中重用。虽然这极大地改善了开发人员的体验,但这并不是故事的结尾。
智能合约开发对于非可靠性专家来说仍然是难以掌握的。
由于我们也是YAKINDU Statechart工具(一种状态机建模环境)的开发人员,所以我们对状态机如何简化智能合约的开发进行了一些研究,并开始将我们的语言服务器集成到YAKINDU Statechart工具中。
这基本上意味着我们可以在建模状态机时访问诸如全局变量、常量和函数之类的内置特性。集成的仿真引擎允许验证模型的行为。智能合约的可靠性代码是由模型生成的,只需单击一个按钮。
什么是状态机?
大多数软件开发人员认为状态机比实际情况更复杂,并且在日常工作中倾向于离线状态机。这并不奇怪——状态机通常被认为过于复杂和学术化,不适合实际应用。
如果你看过维基百科上关于有限状态机的文章,你就会发现一些术语,比如计算的数学模型、确定性(DFA)和非确定性(NFA, GNFA)自动机以及幂集构造。这听起来并不有趣,对吧?
事实上,我们将在这里使用状态机来进行智能合约开发,它们与学术上毫无对应之处——它们是为许多不同应用程序开发软件的有效方法。
例如,它们经常用于嵌入式系统领域,以建模汽车或飞机等反应性系统。反应性系统是一个系统,它对外界由传感器或人机接口(如电梯或咖啡机)触发的事件做出反应。智能合约也一样,外部世界的事务触发对智能合约的内部状态的更改。
状态机的基本构件是状态和转换。状态机由有限数量的状态组成。机器一次只处于一种状态,这种状态称为活动状态。它可以通过触发器或在特定条件下从一种状态更改到另一种状态。
示例:管理许可证的智能合约
例如,我们开发了一个用于许可证管理的智能合约。这个用例非常适合区块链,因为只要合约没有终止,许可证持有人仍然控制着许可证协议。
一个智能合约维护单个许可证的生命周期。创建之后,许可证进入有效状态,初始预算为10个代币。与智能合约交互有两个不同的接口。
许可证所有者可以增加预算来延长许可证期限。许可证管理人员可以根据时间段定期收取许可证费用。如果没有更多的预算可用,许可证进入无效状态,直到一个新的预算被添加到合约之后,许可证持有人才可以随时终止合约,并将收到剩余的预算。
看看上面的图片。我认为这个模型比500行可靠代码更全面、更容易理解。
模型驱动的智能合约开发的优点是什么?
首先,您可以在更高的抽象级别上建模智能合约。在隐藏所有技术细节时,可以将重点放在要开发的域逻辑上。图形状态机甚至可以被完全没有编程经验的人理解。
关注您的业务模型,而不是技术细节或编程语言。生成的智能合约代码具有更高的质量。一旦确保代码生成器生成正确和安全的代码,您就不必审计使用该代码生成器生成的每个合约。这将减少小型创新创业公司以及大公司将他们的商业案例迁移到区块链技术的障碍。
模型是独立于平台的。通过使用不同的代码生成器,您可以为不同的语言(如solid、Vyper或Yul)生成智能合约。也许在未来,会有另一个像以太坊一样强大的区块链。
很高兴知道您可以重用您的模型来生成另一个区块链的智能合约。
您可以执行和测试模型。在将模型部署到区块链之前,您可以使用内置的模拟器轻松地执行模型,以验证模型的行为是否符合预期。
该工具仍处于早期开发阶段,代码生成器还没有准备好投入生产。生成高质量的合同代码是一项相当艰巨的任务,但我们希望我们将很快有一个工作原型可供下载!