NEO 编程日活动:编写智能合约

周六参加了 NEO区块链编程日-用python来写智能合约,记录下。

环境准备

docker 安装 neo-privatenet

sudo apt install docker.io
sudo docker pull cityofzion/neo-privatenet
sudo docker run --rm -d --name neo-privatenet -p 20333-20336:20333-20336/tcp -p 30333-30336:30333-30336/tcp cityofzion/neo-privatenet

docker 镜像体积比较大,国内下载速度慢的话可以用 DaoCloud 加速器

neo-python 项目初始化

这是 neo 的 python sdk,需要 python 3.6 及以上版本,ubuntu 18.04 自带的即可满足,否则可选择 ppa 安装:

sudo apt install software-properties-common python-software-properties
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.6 python3.6-dev python3.6-venv python3-pip libleveldb-dev libssl-dev g++

拉取项目并创建 Python 虚拟环境:

git clone https://github.com/CityOfZion/neo-python.git
cd neo-python
sudo apt install python3-pip
pip3 install virtualenv
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
pip install -e .

愉快地玩耍

输入 np-prompt -p 进入 neo 命令行,开始各项操作。
比如打开 neo-python 项目根目录自带的钱包,默认密码为 coz

neo> open wallet neo-privnet.sample.wallet
[password]> ***
Opened wallet at neo-privnet.sample.wallet
neo> 

写智能合约

CityOfZion/python-smart-contract-workshop 项目包含了四个例子,注释里也有详细说明。可以把这四个文件复制到 neo-python 里,逐个尝试下。config deug on 打开调试信息显示。

build&test

写完 .py 文件先 build and test
如:build 4-domain.py test 0710 05 True False query ["test.com"],build 命令格式:
build path/to/file.py test {input_params} {return_type} {needs_storage} {needs_dynamic_invoke} param1 param2 etc..

import

引入 build 产生的 .avm 文件:
import contract 4-domain.avm 0710 05 True False
之后输入 各项信息及密码:

[Contract Name] > domain
[Contract Version] > 1
[Contract Author] > tt
[Contract Email] > aaa@bbb.com
[Contract Description] > test domain

记录下 hash 便于后续调用,也可以用 contract search 命令查找智能合约。
编译和发布智能合约需要消耗 GASGASNEO 是 neo 区块链里面的俩种通货。

use

testinvoke xxxxxx query ["test.com"],其中xxxxxx 表示 contract hash。

参考资料