Python也可以编写智能合约:从NEO开始
天道唯
发表于 2022-11-26 14:50:19
2450
0
0
8 }) g; T% w3 R- u. Y
环境搭建! [8 d% I( L1 F: z: j; E
基于macOS或Ubuntu,windows用户请自备虚拟机。
安装Docker及拉取镜像
macOS:4 K" B, g9 N% D. ^! Q1 L) @6 j
1.点我去下载,下载后安装并启动,启动成功后任务栏会有个Docker的图标,点击可以查看运行状态+ K" F! x8 j1 N! |1 A
( F& e/ ?8 T3 K, I/ N6 @
2.拉取私链镜像,打开终端执行( x3 f H8 X5 N' {4 f
docker pull cityofzion/neo-privatenet! x" t6 }3 b. p+ I8 s
Tip:由于国内环境问题,docker镜像的拉取往往会非常慢,所以我们可以配置一些国内的镜像加速,如DaoCloud的Docker 加速器,免费注册一下,按照说明配置即可,非常简单和方便。2 d _+ m6 @# f" R) x
3.运行Docker容器,执行& o& n' }1 W4 G. _, } H4 e
Ubuntu:
1.安装Docker,执行
sudo apt install docker.io3 a# I& E4 y+ X A, t
2.启动Docker,执行(安装成功后应该会默认已启动)) c' D' G% y" P* R( ]
sudo service docker start
3.拉取私有链网络镜像,执行* q3 K4 d, U) D0 R
sudo docker pull cityofzion/neo-privatenet( b! R7 ^& y( E2 T
4.运行docker容器,执行
sudo docker run --rm -d --name neo-privatenet -p 20333-20336:20333-20336/tcp -p 30333-30336:30333-30336/tcp cityofzion/neo-privatenet' B" u& ^ W' T! T: j, L
安装Python3和levelDB
macOS:
没有安装过Homebrew的请先执行下面的命令,已安装的忽略。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
1.macOS是自带Python2的,我们需要安装Python3
brew install python3
2.安装levelDB9 Z& ^! G, M3 O# a% ?$ W
brew install leveldb: U. x! U& |) y2 P+ F
Ubuntu:
简单粗暴的依次执行下面命令:
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++
Tip:因为NEO最低需要Python3.6的环境,Homebrew是会安装最新版本的Python,而apt-get源上直接install python3安装的是python3.5,所以这里我们指定的python3.6。$ s* _$ D U5 U# {% q# F9 U* e, R
neo-python2 ^- H# Q1 c. s* a. Q
从GitHub克隆neo-python项目/ p' G; {' S* r+ c( _9 z
git clone https://github.com/CityOfZion/neo-python.git4 R7 W' x) m0 |- N0 F: J8 D% y
创建并进入虚拟环境
cd neo-python
python3 -m venv venv # 创建虚拟环境,Ubuntu这里使用 python3.6 -m venv venv. y( }% J0 y$ W9 m, \4 i
source venv/bin/activate # 进入虚拟环境,退出虚拟环境使用命令 deactivate
安装依赖包; m2 c* h5 T4 [/ b
pip install -r requirements.txt1 |- K3 x1 W* R" i: @" H8 I* D- z2 n! a
pip install -e .
启动连接到私有链网络,进入NEO cli命令行
np-prompt -p # 退出命令行 在命令行输入 quit9 |. H( h7 O6 R. h" |
+ ?( Y4 w+ m3 Z1 t3 `: F$ b
出现如下界面进入了NEO命令行,那么恭喜你已经成功搭建好所有环境,如果你报错了,请接着往下看。/ i5 e' I7 ~* }
np-prompt -p 可能出现的错误
错误一: J+ \1 L7 o! P7 @# I+ U
Traceback (most recent call last):) M6 _! o. N# Y S, O4 b
File "/home/parallels/Code/neosc/neo-python/venv/bin/np-prompt", line 11, in
load_entry_point('neo-python', 'console_scripts', 'np-prompt')()
File "/home/parallels/Code/neosc/neo-python/venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 480, in load_entry_point/ v" @* j5 c# t7 D$ P, j
return get_distribution(dist).load_entry_point(group, name)! t! A1 e0 P/ Q
File "/home/parallels/Code/neosc/neo-python/venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2693, in load_entry_point
return ep.load()
File "/home/parallels/Code/neosc/neo-python/venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2324, in load3 y/ ~. \- y* t9 q
return self.resolve()' {/ }$ d: Z) o- `# @* n' h
File "/home/parallels/Code/neosc/neo-python/venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2330, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)# m1 |$ m. A8 B
File "/home/parallels/Code/neosc/neo-python/neo/bin/prompt.py", line 28, in
from neo.Implementations.Wallets.peewee.UserWallet import UserWallet
File "/home/parallels/Code/neosc/neo-python/neo/Implementations/Wallets/peewee/UserWallet.py", line 8, in # ~$ t1 H' R/ v$ [) E: ]
from neo.Wallets.Wallet import Wallet
File "/home/parallels/Code/neosc/neo-python/neo/Wallets/Wallet.py", line 13, in
from Crypto.Cipher import AES
File "/home/parallels/Code/neosc/neo-python/venv/lib/python3.6/site-packages/Crypto/Cipher/__init__.py", line 3, in , Q+ y3 b5 e4 H( W/ q
from Crypto.Cipher._mode_ecb import _create_ecb_cipher
File "/home/parallels/Code/neosc/neo-python/venv/lib/python3.6/site-packages/Crypto/Cipher/_mode_ecb.py", line 29, in
from Crypto.Util._raw_api import (load_pycryptodome_raw_lib,8 x) s" Y" m- H: w8 W8 q' \
File "/home/parallels/Code/neosc/neo-python/venv/lib/python3.6/site-packages/Crypto/Util/_raw_api.py", line 32, in
from Crypto.Util.py3compat import byte_string
ImportError: cannot import name 'byte_string'6 @; y2 ~. p; [$ D- D
这是因为依赖包的版本问题,解决方案如下
# 卸载依赖包
pip uninstall pycrypto
pip uninstall pycryptodemo# N( s% E2 j. j% [2 u `9 F$ |- |
# 重新安装依赖包
pip install pycrypto- a( D+ B- F! f1 T
pip install pycryptodemo
pip install -e .- F# N5 a0 W8 z6 p; d
错误二3 y) M D1 {4 I0 @
......! T$ ?5 i4 p7 U* o$ V
Traceback (most recent call last):" G- U5 U7 k4 }! y) c5 H; d( W
File "/home/parallels/Code/neosc/neo-python/venv/bin/np-prompt", line 11, in
load_entry_point('neo-python', 'console_scripts', 'np-prompt')()( p. H: y3 }$ T# L: B
File "/home/parallels/Code/neosc/neo-python/neo/bin/prompt.py", line 1061, in main, S6 Y; d5 d; t% b
settings.setup_privnet(args.privnet)3 a% p$ j& f/ \: C5 R
File "/home/parallels/Code/neosc/neo-python/neo/Settings.py", line 228, in setup_privnet
self.check_privatenet()
File "/home/parallels/Code/neosc/neo-python/neo/Settings.py", line 314, in check_privatenet/ f6 ?+ j. F% z" Z! K2 u/ _' P
version = client.get_version()
File "/home/parallels/Code/neosc/neo-python/venv/lib/python3.6/site-packages/neorpc/Client.py", line 283, in get_version7 [7 g7 B( L2 I; L
return self._call_endpoint(GET_VERSION, id=id, endpoint=endpoint)
File "/home/parallels/Code/neosc/neo-python/venv/lib/python3.6/site-packages/neorpc/Client.py", line 310, in _call_endpoint
raise NEORPCException("Could not call method %s with endpoint: %s : %s " % (method, endpoint.addr, e))
neorpc.Client.NEORPCException: Could not call method getversion with endpoint: http://127.0.0.1:30333 : HTTPConnectionPool(host='127.0.0.1', port=30333): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused',))
说明你没有启动docker容器并进行端口映射,请看第一部分安装Docker及拉取镜像
成为第一个吐槽的人