使用 Vyper 实现智能合约——一种 Python 方法
许多正在学习如何编写智能合约的程序员将学习Solidity语言。有丰富的在线教程和书籍资源,将教我们关于Solidity的内容。当与Truffle框架相结合时,Solidity形成了开发智能合约的“杀手”组合。几乎所有存在于以太坊区块链上的智能合约都是用Solidity编程语言编写的。
在本文中,我们将探讨如何用Vyper编程语言编写智能合约。
主题
- 介绍
- 设置环境
- 使用Vyper创建智能合约
- 将智能合约部署到 Ganache
- 与智能合约交互
- 与其他智能合约交互
- 以编程方式编译代码
介绍
Vyper是什么?
Vyper是一种面向合约的python编程语言,以以太坊虚拟机(EVM)为目标。Vyper有非常简单/可理解的语法:Vyper的原则之一是使开发人员几乎不可能编写具有误导性的程序。
为什么要用Vyper ?
- 安全性:在Vyper中构建安全的智能合约应该是可能的。
- 语言和编译器的简单性:语言和编译器实现应该力求简单。
- 可审核性:Vyper代码应该最大限度地让人可读。此外,编写具有误导性的代码应该是最困难的。读者的可读性比作者的可读性更重要,对于没有使用Vyper经验的读者(以及一般没有编程经验的读者)来说,简单性尤其重要。
因此,Vyper提供了以下特性:
- 边界和溢出检查:对数组访问和算术。
- 支持有符号整数和十进制定点数
- 可判定性:可以计算任何Vyper函数调用的gas消耗的精确上限。
- 强类型
- 小而易懂的编译器代码
- 对纯函数的有限支持:任何标记为常量的东西都不允许改变状态。
设置环境
Vyper需要Python 3.6软件。所以,如果我们没有安装Python 3.6软件,我们必须安装它,然后按照下面的步骤进行:
$ python3 -m pip install --user virtualenv
$ pip install vyper
$ virtualenv -p python3.6 vyper-venv
$ source vyper-venv/bin/activate
(vyper-venv) $ pip install vyper
(vyper-venv) $ vyper --version
使用Vyper创建智能合约
现在让我们用Vyper创建一个智能合约。首先,我们将创建一个扩展名为.vy的文件,并将其命名为hello.vy,如下:
name: public(String[24])
@external
def __init__():
self.name = "Satoshi Nakamoto"
@external
def change_name(new_name: String[24]):
self.name = new_name
@external
def say_hello() -> String[32]:
return concat("Hello, ", self.name)
下面是编译vyper文件的方法:
(vyper-venv) $ vyper hello.vy
由此,我们将得到以下输出:
这是智能合约的字节码。要部署智能合约,就需要字节码,但要访问智能合约,需要abi。如何得到abi呢?可以通过以下命令来实现:
(vyper-venv) $ vyper -f json hello.vy
由此,我们将获得以下输出:
如果我们想在一个编译过程中同时得到abi和字节码,可以在编译过程中合并这两个标志,如下所示:
(vyper-venv) $ vyper -f json,bytecode hello.vy
这将给我们以下输出: