如何用 Python 进行 DeFi 应用的开发?( 二 )


Michelson 在架构上对标的是以太坊 EVM, 与 EVM 相比其相似之处有
1)是一种 stack 语言
2)使用链上存储
3)采用 gas 费用模型
4)图灵完备
Michelson 与 EVM 的主要区别是 ,
1)静态类型
所有进入 Michelson 智能合约的数据 , 都需要明确定义其类型 。 避免了跟类型不匹配有关的程序 bug, 如浮点溢出、除以 0 等 。
2)原子计算
一个 Michelson 智能合约必须完成执行后才能调用其它智能合约 。 这一点避免了以太坊上经常发生的 re-entrancy 攻击 (如著名的 DAO 攻击) 。
3)明确的调用失败
执行期发生的失败只有三种 , 明确失败(用 FAILWITH 语句处理)、gas 耗尽、数量溢出 。 这一点避免了以太坊上常出现的隐含模代数、错误指令、stack 溢出等类型的常见执行期攻击 。
4)严格的语义
大小写、空格、短行都有严格规范的要求 , 让代码审计变得更方便 。
可以看到 Michelson 相比 EVM 在安全上有诸多的改进 , 可以更好地抵御以太坊上经常出现的攻击类型 。
SmartPy 开发工具包
Tezos 上的 Dapp 开发者并不需要掌握 Michelson 语言。 这是因为开发者可以使用基于 Python 的 SmartPy SDK, 并将 Python 代码写的智能合约编译成 Michelson 语言 。 因此 Dapp 开发者只需要会 Python 就可以轻松上手 。
SmartPy 是一个 Python 库 , 而 SmartPy.io 让用户能够在一个浏览器中执行 Python 脚本 。 Smartpy 的官方网站提供了一个在线编辑器() , Dapp 开发者可以直接用 Python 编写代码并编译成 Michelson 智能合约 , 然后部署到 Tezos 主网上 。 其使用界面设计相比以太坊的 Remix 在线编辑器更简洁明了 , 非常容易上手 。 Smartpy 还自带了一些现成的开发模版 , 方便开发者参考学习 。
SmartPy.io 的界面如下 。 屏幕左侧区域是代码编写区 , 开发者可以轻松地使用 Python 来写入并编辑合约的代码 。 Smartpy 不需要像 Remix 一样分两步编译和执行 , 按一下代码区上方的执行按钮就一步搞定 , 非常方便 。 执行结果立马就可以在屏幕右侧显示出来 , 包括合约调用的入口、存储状态、编译的 Michelson 代码等 。
如何用 Python 进行 DeFi 应用的开发?文章插图
【如何用 Python 进行 DeFi 应用的开发?】除了在线编辑器 , SmartPy 还有一个命令行版本 SmartPyBasic, 让开发者在本地环境也可以编译运行 SmartPy 代码 。
部署的智能合约可以用 SmartPy Contract Explorer 进行查看 , 合约的当前状态和历史操作都一览无余 。
目前 SmartPy 已经支持 Python 常见的许多功能 , 如本地变量 , 变量类型判断 , Lambda 函数等 。 少数不支持的功能如 array , 可以用 map 来代替 。 这也就意味着学习 SmartPy 不需要投入很多的时间和精力 , 开发者可以专注于实现更好的功能 。
以下是一些关于 SmartPy 入门的训练课程:
Cryptoverse Wars:
Blockmatics SmartPy Developer course:
总结
Tezos 通过智能合约语言分层的设计 , 在虚拟机层采用基于 Ocaml 的Michelson 智能合约脚本语言 , 增强了可读性与安全性 。 这样的设计对 Dapp 开发者来说非常便利 。
另一方面还提供了 SmartPy SDK, 这样就可以用 Python 编写智能合约然后编译成 Michelson 语言 , 充分发挥 Python 的简洁与易懂的优点 。这些特性的组合可以帮助 DeFi 应用跨过目前安全问题的障碍 , 为用户提供更优质的服务 , 并帮助他们省下一笔昂贵的安全审计费用 。
附:Michelson 与 SmartPy 语言特征详细说明及 dapp 开发实例
一个简单的托管合约:
tic-tac-toe 井字游戏 dapp :
本文是 LongHash 与 Tezos 基金会之间合作关系的一部分 , 但文中的观点不代表 Tezos 基金会 。