Tezos(特所思)作为著名的 PoS 公链,其亮点并不仅仅只是 Staking,Tezos 的形式化验证特征同样也是其主要技术亮点之一。形式化验证能让 DeFi 的安全性方面如虎添翼,让用户对资金的智能合约安全更加有信心。

形式化验证方法和 DeFi 安全

DeFi 的爆发式增长吸引了不少开发者,著名的 DeFi 协议如 Compound、Uniswap、Syntheix 累计收获了上亿美元的资金。但是,DeFi 存在一个重大漏洞:安全性。

这个漏洞的代价是昂贵的,它给一些区块链项目(比如以太坊)的网络效应带来了负面的影响。过去几个月被攻击的 DeFi 项目就包括 Curve.fi、Lendf.Me、PegNet 等,其损失从数十万美元到数千万美元不等。tBTC 在上线几天后通过自查及时发现了 bug 并冻结了存币,避免了一场灾难。

而对于注重安全性的 DeFi 开发者来说,Tezos 的形式化验证方案能够在加强安全性的同时赋能 DeFi 应用。

在传统互联网应用中,如果服务器被黑客攻击,只需要对服务器端用户数据进行回滚就可以挽回用户损失。因此,重视用户体验的传统互联网应用可以以牺牲安全性换取速度和功能上的快速迭代。 然而在 DeFi 应用中,由于区块链的不可篡改性,智能合约一旦上线并出现安全隐患,对用户造成的损失是巨大且不可挽回的。

因此,DeFi 应用开发的过程需要用大量的测试和昂贵的审计以获取足够的安全性,而反过来会牺牲迭代的速度,影响了产品的易用性。并且,因为安全审计的价格昂贵,很多开发者并没有能力发起 DeFi 应用。

区块链开发人员目前仍然是稀缺的,导致人工审计的成本非常高昂。因此越来越多地使用机器辅助验证是目前的趋势,而机器辅助审计中的形式化验证方法更是确保安全性的不二法宝。

形式化验证指的是用数学中的形式化方法对算法的性质进行证明或证伪,方法有两种:

  • 一种是模型检验,即把系统所有可能的状态列出并进行一一检验,此种方法全自动化但只适合小型系统;

  • 另一种是演绎验证,首先把系统代码标记成抽象数学模型,然后对定理进行证明,此种方法适合大型系统,但是首先需要人工将系统的运作方法转换成验证系统可以理解的语言。

形式化验证方法在很长一段时间里,由于其成本较高昂,主要应用于学术、国防军工、航空航天等领域,在商业领域应用较少。由于传统互联网应用与区块链应用的运行环境有着本质的不同,其开发流程也应当相应地进行调整,其中最关键点在于安全验证环节的投入比例。

函数式语言在公链领域的应用

许多区块链项目为了保证安全性,在底层架构、虚拟机或智能合约的语言方面,选择了函数式语言,如 Ocaml、Haskell、Erlang 等。函数式语言由于其严格的变量类型定义和编译检验,以及拥有较好的形式化验证工具链(比如 CoQ ),在安全领域拥有很好的口碑。常见过程式语言编写的代码,一般必须重新用函数式语言标记方能进行形式化验证。

我们看到,在以上项目中,Tezos 支持的智能合约高级语言的种类最丰富,不仅包括 Pascal, Ocaml, Haskell 等多种函数式语言,也包括了 Python 这一应用普遍的语言。而 Cardano、Aeternity 都需要开发者学习一门新的函数式语言,使得开发门槛变得较高。

Michelson 语言的安全特性

在智能合约语言的设计上,Tezos 采用了一种取长补短的创新方案。Tezos 的智能合约底层采用基于 Ocaml 的 Michelson 语言,而开发者实际接触的是 Python 等高级语言,并不需要了解 Michelson 语言本身。如此以来,可以结合 Michelson 语言更好的安全性与可审计性,与 Python 等高级语言的易于编程性。

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 的官方网站提供了一个在线编辑器(https://smartpy.io/demo/),Dapp 开发者可以直接用 Python 编写代码并编译成 Michelson 智能合约,然后部署到 Tezos 主网上。其使用界面设计相比以太坊的 Remix 在线编辑器更简洁明了,非常容易上手。Smartpy 还自带了一些现成的开发模版,方便开发者参考学习。

SmartPy.io 的界面如下。屏幕左侧区域是代码编写区,开发者可以轻松地使用 Python 来写入并编辑合约的代码。Smartpy 不需要像 Remix 一样分两步编译和执行,按一下代码区上方的执行按钮就一步搞定,非常方便。执行结果立马就可以在屏幕右侧显示出来,包括合约调用的入口、存储状态、编译的 Michelson 代码等。

除了在线编辑器,SmartPy 还有一个命令行版本 SmartPyBasic ,让开发者在本地环境也可以编译运行 SmartPy 代码。

部署的智能合约可以用 SmartPy Contract Explorer 进行查看,合约的当前状态和历史操作都一览无余。

目前 SmartPy 已经支持 Python 常见的许多功能,如本地变量,变量类型判断,Lambda 函数等。少数不支持的功能如 array,可以用 map 来代替。这也就意味着学习 SmartPy 不需要投入很多的时间和精力,开发者可以专注于实现更好的功能。

以下是一些关于 SmartPy 入门的训练课程:

  • Cryptoverse Wars: https://cryptocodeschool.in/tezos/overview/

  • Blockmatics SmartPy Developer course: https://cryptocodeschool.in/tezos/overview/

总结

Tezos 通过智能合约语言分层的设计,在虚拟机层采用基于 Ocaml 的Michelson 智能合约脚本语言,增强了可读性与安全性。这样的设计对 Dapp 开发者来说非常便利。

另一方面还提供了 SmartPy SDK ,这样就可以用 Python 编写智能合约然后编译成 Michelson 语言,充分发挥 Python 的简洁与易懂的优点。 这些特性的组合可以帮助 DeFi 应用跨过目前安全问题的障碍,为用户提供更优质的服务,并帮助他们省下一笔昂贵的安全审计费用。

附:Michelson 与 SmartPy 语言特征详细说明及 dapp 开发实例

  1. 一个简单的托管合约: https://smartpy.io/demo/

  2. tic-tac-toe 井字游戏 dapp : https://smartpy.io/demo/

本文是 LongHash 与 Tezos 基金会之间合作关系的一部分,但文中的观点不代表 Tezos 基金会。

用 Python 进行 DeFi 应用的开发——不同的区块链项目是如何解决安全问题的?相关推荐

  1. java 区块链开发_Java开发人员的区块链入门

    java 区块链开发 顶级技术专家将区块链列为十大新兴技术之一,它们有潜力在未来十年内改变我们的世界,这值得您花时间学习. 如果您是一名具有Java背景的开发人员,并且想快速了解区块链技术,那么本文将 ...

  2. 柏链道捷首期“PDJ区块链极客马拉松”:靠谱的区块链项目这样来发掘和开发

    4月22日,首期"PDJ区块链极客马拉松"在北京国家会议中心大酒店举办.这是一场区块链精英专属的Hackathon活动,由柏链道捷(PDJ Education)联合CSDN.产业大 ...

  3. 区块链项目开发:双因素身份验证应用程序如何帮助保护你的加密帐户

    2019独角兽企业重金招聘Python工程师标准>>> 如果你使用任何加密数字资产交换,你将需要使用某种形式的双因素身份验证来保护你的帐户.简单来说,双因素身份验证是第二层安全性,涉 ...

  4. 区块链开发指南_区块链开发完全指南

    区块链将是技术的发展方向. 我认为未来将围绕区块链一新兴技术构建,这绝不是什么牵强附会.区块链最初被设计成一种公共的,无权限的技术,后来引入了另一种区块链,每种区块链都有自己独特的用例集.公共/无权限 ...

  5. 区块链开发指南_区块链开发权威指南

    区块链开发指南 by Haseeb Qureshi 由Haseeb Qureshi 区块链开发权威指南 (The authoritative guide to blockchain developme ...

  6. 区块链开发语言python_区块链开发中使用的最流行的编程语言

    我们目前正处于一个新兴的区块链开发行业中.区块链技术处于初期阶段,然而这种颠覆性技术已经成功地风靡全球,并且最近经历了一场与众不同的繁荣.由于许多资金充足的项目现在急于建立区块链网络并在其上部署分散的 ...

  7. 区块链开发语言python_区块链开发中经常使用的编程语言有哪些

    我们目前正处于一个新兴行业--区块链的发展中.区块链技术在很大程度上还处于萌芽阶段,然而,这种颠覆性的技术已经成功地席卷了全球,并经历了近年来前所未有的繁荣. 许多资金充足的项目现在都渴望构建自己的区 ...

  8. 视频教程-区块链项目:基于以太坊开发拍卖系统DApp教程(含资料)-区块链

    区块链项目:基于以太坊开发拍卖系统DApp教程(含资料) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动 ...

  9. 密码极客波卡生态系列分享会第一期:如何基于波卡开发区块链项目

    2020年10月20日,密码极客发起了第一期[波卡生态系列分享会].我们非常荣幸邀请到了Parity亚洲区技术总监贾瑶琪博士做客密码极客大咖直播间,为大家讲解<如何基于波卡开发区块链项目> ...

最新文章

  1. Docker无法修改devicemapper(四)
  2. 64位Ubuntu kylin 16.04搭建nfs网络文件系统
  3. js如何设置浏览器全屏效果?
  4. 配置文件上传的Action
  5. 零基础学习前端:学习路线、学习计划、实战项目和面试题简历分享。
  6. Python的算数运算符
  7. mysql主从搭建_手把手教你搭建MySQL主从架构
  8. 三角函数π/2转化_浅谈三角函数导数综合题(1)
  9. 如何判断 Oracle RAC 中的 Master 主节点
  10. 博主自传——蒟蒻的OI之路
  11. python执行excel公式 语法_Python读取excel文件中带公式的值的实现
  12. 51Nod 1378 夹克老爷的愤怒
  13. Python模拟二维码登录百度
  14. java聊天室(实训项目)
  15. Expected more than 1 value per channel when training, got input size torch.Size([1, **])
  16. 【Pytorch】常用函数功能介绍和注意事项
  17. 雷军:创业者要牢记的两个关键词
  18. 几种常用网络请求汇总
  19. 使用R做方差分析实现多重比较可视化结果
  20. KafkaManager安装教程

热门文章

  1. SSH私钥新格式转换
  2. Ubuntu18.04下成功实现ORB_SLAM2 奥比中光astra深度相机
  3. 绝地求生测试服画质优化软件,绝地求生Reshade安装教程-PUBG画质优化插件使用教程...
  4. 大数据Map Reduce 和 MPP数据库 的区别
  5. Android - 跨应用访问数据实战之 SharedPreference
  6. 疑论:对阿里巴巴的投资该歇手了
  7. cad注释比例和打印比例不一样_关于CAD里的比例问题我一直有疑问1:1与1:100的比例究竟有什么差别?标注时又怎样不影响?...
  8. 基于elementUI+nodejs+mysql实现用户注册功能以及上传头像功能
  9. 摩杰盒子助手V1.0
  10. osg glsl添加半透明