学习
实践
活动
专区
工具
TVP
写文章

关于以太坊新语言Vyper的最全介绍与解读

2018年6月12号,区块链安全团队 PeckShield 曝光了名为 tradeTrap 的以太坊智能合约漏洞,该漏洞可让黑客随意操控币价、随意增发 Token,目前已影响十余种可在交易所交易的 Token;2018年7月9日,以太坊代币“假充值”漏洞攻击预警,提醒相关交易所、中心化钱包、代币合约需要特别警惕,已经发现有交易所及中心化钱包遭受此攻击。

以太坊问题频出,Vyper及时发布

以太坊的安全问题越来越频繁,而现有以太坊智能合约语言Solidity在安全性上的保障被众多使用者质疑。解决途径迫在眉睫。以太坊的更新以及Vyper的设计,为数字资产的安全和稳定做出保障。Vyper是一种由 python 灵感启发的编程语言,着重于安全、简洁、和稳定性,从而为以太坊的安全再加一层防护。

新的以太坊语言Vyper已经发布,到目前为止在社交媒体上获得了热烈的评论。这种语言是被丢弃的Serpent语言的升级版,它为开发者提供了Solidity的一种替代选择,一些早期的开发者认为这是一种进步。

像Solidity一样,Vyper编译为以太坊虚拟机(EVM)的字节代码,而Vyper的设计目的是简化这个过程,旨在创建更易理解的智能合约,减少攻击点,增加透明度,目前Vyper Beta已经准备好测试工作。Vyper的创建不是为了取代Solidity,而是为了与其一起使用,因为它们共享相同的字节代码以增强安全性,据此看来,Vyper未来将大有可为。

什么是Vyper

Vyper是一种由python灵感启发的合约导向型编程语言,专注于以太坊虚拟机。目前这种语言还处于实验阶段。

与Solidity一样,Vyper会编译到以太坊虚拟机(EVM)字节码。Vyper的设计目的是为了简化这一过程,从而更容易地理解智能合约,减少攻击点和提高透明度。

Vyper出现的契机

Vyper的创始人John Max Skaller曾这样说过,建造Vyper有两个原因:首先,我喜欢 Python,特别是它的简单性。但我不喜欢它缺乏范围确定性,凡事都需要做大量更改来取得进展。因此我决定在保留与Python兼容性的同时,通过建造高级得多的编程语言,并在其中建造函数性编程语言的某些概念来改正这些问题。第二个原因是性能。我有一个称之为interscript的主要Python程序,一个有读写能力的编程(LP)工具,它不仅受到Python中缺乏良好结构(如上所述),而且还受性能问题的困扰。

Vyper的语言特性

Vyper这种新语言被设计是基于以下三点原则和目标来的:

安全:在Vyper上创建安全地智能合约

语言和简单编译器:语言和编译程序实施应当力求简单

可审核性:Vyper代码应最大程度上满足人类可读性需求。此外,Vyper应将编写误导性代码的可能性降到最低。读者对简单性的要求比编写者更高,对于那些Vyper使用经验不足(以及编程经验较少)的读者来说,简单性尤为重要。

Vyper 是以函数性语言 Ocaml (3.00) 编写的 Python 语言的实现。与其它 Python 实现比较,Vyper 提供了一些(可选的)语言扩展:更强大的范围确定规则和一些新的函数性特性。

对于以EVM为目标的代码来说,高效地执行智能合约是非常必要的,因为在诸如小额交易这样的特定用例中,效率低下的代码将变得代价非常昂贵。在这种情况下,Vyper在逻辑上看起来很像Solidity,在语法上类似于Python,而不是许多面向对象的编程范例。

这这个0.1.0 beta版本中,根据Blockgeeks上的测评,Vyper与此前的语言相比有三个关键的改进。首先,测评指出,程序员所熟悉的许多结构都被忽略了。追求简单的Vyper消除了类继承、函数重载、操作符重载和递归,因为在技术上没有必要创建一种图灵完备的语言。

Vyper的设计机制和原理

对此,Skaller曾作出相关的说明:Vyper的构思是不需要为程序记录文档(在编程后),而是编写包含程序的文档。interscript独立于排字和编程语言,可以通过以Python编写的任意可执行代码在文档中扩展。即尽管有大量预构建的构造可以满足“日常”需要,但一个人可以随意生成代码和文档。但除非LP很快,否则它永远不能作为主流技术接纳。我花费了许多工作使它变得快一些,但结果,Python 还是无法快到执行所需要的操作:解释语言中逐个字符地处理字符串就是无法快起来。所以想要构建一个Python编译器,至少它能生成可以优化这种代码的机器二进制文件。这是某些Vyper扩展的一个原因,从而使优化成为可能。我从来没有编写过编译器;构思是编写一个解释器,可以在编译时装入所有程序模块,然后将产生的字典“冻结”到可执行二进制文件中。现在的Vyper就是这样的解释器。

Vyper 的一个特别新颖的特性是其以 Ocaml 的实现。许多人可能认为编译器/解释器是以 C 实现的(与本质接近);或者对于已定义的机器,编译器可以以 Python 自身实现。Ocaml 直接生成机器代码。相对于 C 来说,它运行得相当不错,对于某些工作甚至会更快。它还带有一个无用信息收集器。Ocaml 是一种高级语言,与 C、C++、Python 或大多数其它所谓的“高级”语言不一样。Ocaml 和 Python 一样,是混合的函数性/命令语言。Vyper 比 Python 更多地强调 Python 的函数性方面。它纠正了一些明显的设计缺陷,特别是缺少词法范围确定的问题。在实际中,函数性编程后面有强大的理论支持,而对于命令编程则没有任何理论支持。这意味着从开发角度来说,函数性编程语言比任何命令编程语言通常要好得多,但往往缺乏与基本硬件规则体系结构相近的系统性能。有意思的是,下一种实现,尽管来自不同角度,在某些方面要胜过 Vyper。

该项目的另一致命“杀手”是 Stackless Python。它执行的某些任务是我当前使用的编译器所执行的任务,而这些是 Vyper 可能永远都做不到:它使“超轻量型线程”(由事件调度器驱动的合作多任务)的实现成为可能。 Vyper 是以 Ocaml 实现的,而后者使用机器堆栈;必须避免它,因为堆栈切换(用于同时从一个服务器处理许多客户机)非常昂贵。

目前的进展情况

据Vyper创始人John Max SkallerVyper透露:Vyper现在不再进行开发,但它以后可能得到增强。目前Vyper Beta已经准备好投入测试工作。

根据进展情况,目前Vyper可提供以下功能:

1. 边界和溢出检测:在数组访问及算法层面

2. 支持带符号位的整数和定点小数

3. 可判定性:可计算所有函数调用的gas消耗的精确上限

4. 强类型:包括对单位的支持(例如时间戳,时间,秒,wei,wei每秒,米每秒平方)

5. 小而易懂的编译器代码

6. 对纯函数的有限支持:任何标记为常量的内容都不允许改变状态

未来,Vyper在功能和性能上会更为的完善,上线后也能为以太坊带来更佳的用户体验和安全性。

扫描上方微信

备注“入群”,小助手拉你进群

活动多多,交流多多

矩阵财经出品

转载请注明:矩阵财经(矩阵数字经济智库)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180712G07Z7I00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券