从零开始Ubuntu配置Oyente环境
在 从零开始WSL2配置ubuntu18.04环境 后,进行Oyente环境的配置。
安装go1.7
从官网All releases - The Go Programming Language 找到想要安装版本的链接
go下载到ubuntu
# 下载,其他版本在 https://go.dev/dl/ 中找到源链接
wget https://go.dev/dl/go1.7.linux-amd64.tar.gz
# 解压
sudo tar -C /usr/local -xzf go1.7.linux-amd64.tar.gz
# 软链接
sudo ln -s /usr/local/go/bin/* /usr/bin/
设置环境变量
sudo vim ~/.bashrc
在文件末尾添加
export GOPATH="$HOME/go"
export PATH="$PATH:/usr/local/go/bin:$GOPATH/bin"
export GOPROXY=https://goproxy.cn,direct
应用配置
source ~/.bashrc
检查版本
go version
安装Oyente相关库
安装solc。Oyente 目前只支持 0.4.19 以下的 solidity 版本
pip3 install solc-select
solc-select install 0.4.19
solc-select use 0.4.19
solc --version
中途报错
lyk@LAPTOP-G2IPOS6F:~$ solc-select install 0.4.19
Traceback (most recent call last):
File "/usr/lib/command-not-found", line 28, in <module>
from CommandNotFound import CommandNotFound
File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 19, in <module>
from CommandNotFound.db.db import SqliteDatabase
File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
尝试解决
Linux - python-dev 安装错误:导入错误:没有名为 apt_pkg 的模块 - 堆栈溢出 (stackoverflow.com)
cd /usr/lib/python3/dist-packages/
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
安装go-ethereum。Oyente 目前只支持 geth 1.7.3 和 evm 1.7.3
git clone https://github.com/ethereum/go-ethereum.git
cd go-ethereum
# 切换分支
git checkout v1.7.3
# 编译
make all
# 配置环境
sudo vim ~/.bashrc
# 增加 geth bin 目录到环境变量
# 以下路径根据实际安装路径进行修改
export PATH=$PATH:$HOME/go-ethereum/build/bin
# 退出并使修改命令生效
source ~/.bashrc
# 查看 geth 版本
geth version
安装z3,且Oyente 目前只支持 z3. 4.5.1
pip3 install z3-solver==4.5.1.0
安装crytic-compile 库,但 crytic-compile 库安装版本不可以超过 v0.1.13
pip3 install crytic-compile==0.1.13
出错
Modules/_sha3/sha3module.c:18:10: fatal error: Python.h: No such file or directory
#include "Python.h"
^~~~~~~~~~
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
----------------------------------------
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-fmw88jqb/pysha3/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-ketb4a0f-record/install-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in /tmp/pip-build-fmw88jqb/pysha3/
通过安装某个包解决
sudo apt-get install libpython3.8-dev
安装Oyente和测试运行
下载oyente
git clone https://github.com/enzymefinance/oyente.git
执行官网库的报错,原因不明
lyk@LAPTOP-G2IPOS6F:~/oyente/oyente$ python oyente.py -s greeter.sol
CRITICAL:root:Solidity compilation failed. Please use -ce flag to see the detail.
新建合约并且测试,成功
# 新建目录
mkdir ~/test
# 新建 .sol 智能合约
vim ~/test/test.sol
# test.sol 合约
pragma solidity >=0.4.19;
contract test {
function helloworld() pure public returns (string)
{
return "hello world";
}
}
# 进入 oyente 目录
cd ~/oyente/oyente
# 评估本地合约
python3 oyente.py -s ~/test/test.sol