Vyper是一种全新的以太坊开发语言,主要用于商用区块链,对区块链开发者来说可以提高安全性。
Vyper是一种通用的实验性编程语言,可编译为EVM(以太坊虚拟机)字节码,Solidity也是如此。但是,Vyper旨在大规模简化流程,以便创建更易于理解的智能合约,这些合约对所有相关方更加透明,并且被攻击的点更少。
任何针对EVM的代码都必须是超高效的,以最大限度地减少智能合约执行所需的gas,因为与低效代码的合约实际上需要更多的以太执行,并且可能很快变得非常昂贵,特别是在微处理器等用例中交易。最终的结果是Vyper看起来在逻辑上类似于Solidity,在语法上类似于Python,但没有很多面向对象编程范例——可能需要一个新的范式定义用于交易编程。
现在学习这些逻辑和语法上的差异将有助于你成为世界级的Vyper开发人员,因为截至2018年6月,Vyper仍处于v0.1.0-beta.1版本!
比较Python,Vyper和Solidity
在这里,我们介绍了Vyper高级的“原因”——为我们分析和编写Vyper代码提供了一个重点,包括智能合约。
关键改进1:简单
Vyper不包含大多数程序员熟悉的许多构造:类继承,函数重载,运算符重载和递归。对于图灵完备语言而言,这些都不是技术上必需的,并且它们通过增加复杂性来避免安全风险。由于这种复杂性,这些结构将使得智能合约由非专业人员进行审计时难以理解,如在Solidity合约中所见。
不常见结构是修饰符(这使得编写误导性代码变得太容易),内联汇编(这会使Ctrl+F中断)和二进制固定点(二进制固定点通常需要近似值)。
关键改进2:安全
用Vyper开发者自己的话说,Vyper“如果为了提高安全性的目标,它会故意禁止一些事情或者让事情变得更难。”
因此,Vyper并不是Solidity的全部替代品,而是一种在安全性至关重要的地方使用的优秀语言,例如用于处理患者健康元数据的智能合约或用于去中心化AI的模型渐变。
Vyper代码和句法差异
Vyper的构建尽可能与Python类似,同时努力实现安全性和简单性的目标,因此语言的整体感觉是相同的,尽管有许多不同需要注意。
执行文件
虽然Python脚本执行为
使用vyper编译脚本
状态变量
状态变量是永久存储在合约存储中的值,可以是任何类型,例如:
mapping
Vyper合约包含的第一件事是合约存储字段,例如代币余额映射:
这是一个定义键和相应值的状态变量。
Vyper映射基本上是初始化的哈希表,如上所示,所以“每个可能的密钥都存在,并映射到一个字节表示全为零的值:一个类型的默认值。”
关键数据不存储在映射中,而只是存储在哈希中,以查找其值。
在定义时,给出了类型,然后是映射语法:首先给出的值类型,然后是方括号中的键(地址),这类似于Python对数组的处理。
定义
你会注意到Vyper在定义名称(如balance)时使用冒号而不是Python的等号,尽管Python 3.6包含与变量注释相同的语法:
冒号语法用于变量注释,冒号用作赋值运算符,仅指定类型注释。Vyper使用此语法进行真值赋值。
整数类型
Vyper只有两种整数类型:uint256(对于非负整数)和int128(对于有符号整数),与Solidity的uint8到uint256的步长为8,而对于int8到int256则相同(这意味着int类型有64个不同的关键字) )。
布尔运算符,运算符,比较和函数
对大多数运算符而言,Vyper与Python的语法几乎相同,包括:
以及一些类似的内置函数:
还有一些新的:
List
Vyper中的列表使用格式声明,而设置值和返回语句的语法与Python相同。
例如:
Struct
结构是你自己定义的类型,哪些变量组,并使用访问,因此(有点类似于Python词典):
定义方法
方法(Vyper中的契约方法)在Python和Vyper中以相同的方式定义:
除了Python提供的功能之外,Vyper还包括特定于以太网的装饰器,例如@payable和@assert:前者用于使合约能够进行交易,后者用于表示布尔表达式:
注意用于定义函数的语法。与Python不同,Vyper在之后明确定义def行中的输出类型。
构造函数
构造函数遵循与Python相同的约定,并在区块链上实例化给定的合约和参数。init初始化程序并且只执行一次。例如:
与在Python中一样,用于断言实例变量。上面的函数使用装饰器进行修饰,以使其具有公共可见性,并允许外部实体调用它,与默认值相反(或者省略装饰器)这是私有的。
装饰器用于装饰只读取状态的方法,而使任何方法都可以通过付款来调用。
事件
你可以在索引结构中使用记录事件,如下所示:
编写Vyper合约
现在,让我们写几个简单的智能合约。以下代码段允许合约接收NFT(不可互换的代币)并能够针对该代币发送。
下面演示了,定义了一个具有明确给定类型的单个参数的函数,以及一个简单的代码体,使用断言语句来验证用户是否有权作为“委托投票”程序的一部分进行投票:
在讨论了语法和逻辑区别之后,代码并没有太令人生畏。vyper.online提供“使用委派投票”程序的完整源代码,使用结构选民和提案,以及以下恰当命名的函数:
与任何编程语言一样,事先规划出主要结构(在本例中为函数契约)会使编程变得更加容易。要记住Vyper的主要区别是缺乏OOP范例。在当前的开发阶段,你还无法进行外部代码调用。
允许外部代码调用的注意事项可以在以下开发建议中看到:
运行Vyper
要继续编写代码,请转到,并在“源代码”选项卡下编写代码示例,并在准备好后单击“编译”。Vyper实现和测试执行最常用的客户端(虽然在pre-alpha中)是,最初由Vitalik自己开发,允许用户添加操作码或修改现有操作码而无需更改核心库,从而实现更大的模块化和可扩展性比典型的客户端。
要获得,只需使用。
部署Vyper合约
虽然Py-EVM目前处于状态并且可能难以启动和运行,但有两种更简单的替代方法可以将Vyper合约部署到公共(以及奖励):
1)将从vyper.online生成的字节码粘贴到Mist或geth中。
2)使用myetherwallet合约菜单在当前浏览器中部署。
3)(即将推出)在未来,Vyper将与populus集成,允许你轻松部署Vyper合约。
为简单起见,我们将使用选项(1)和Mist(基于geth的fresh用户界面而不是基于终端的geth)部署合约。由于Vyper编译为与Solidity相同的字节码,因此我们不需要任何特定于Vyper的客户端,并且可以遵循这些稍微迂回的步骤:
1.转到vyper.online并在预先填写的投票“源代码”上单击“编译”。
2.复制“字节码”选项卡下的所有内容。
3.如果你还没有为你的操作系统安装Mist。
4.允许节点下载和同步(这会自动发生)。
5.在雾设置中选择“使用测试网络”。
6.创建一个密码(记住它…)。
7.输入合约。
8.在Mist界面中选择“Contracts”。
9.选择“部署新合约”。
10.转到“合约字节代码”选项卡。
11.粘贴你从vyper.online复制的字节码。
部署合约
1.选择“DEPLOY”并输入之前的密码。
2.确认已部署Vyper合约。
3.转到Mist中的“Wallets”选项卡。
4.向下滚动到“最新交易”。
5.你应该看到我们刚刚部署的合约!
处于“创建合约”状态,因为它没有被挖掘和验证。
结论
本指南提供了对Vyper的逻辑和语法介绍,允许我们开始编程和部署合约。根据本指南的知识,你应该能够为Vyper及其文档的开发做出贡献,并继续通过vyper.online编码来学习。
同样,Vyper并不是要取代Solidity,但是正如一项研究发现超过34,000份易受攻击的合约,在对更强安全性的需求比以往任何时候都更大,这使得Vyper成为以太坊的重要未来。
文章来自官方博客:
领取专属 10元无门槛券
私享最新 技术干货