Contractfuzzer 复现(2)

本文实现Contractfuzzer源码解析,在本地复现运行Contractfuzzer

一、前期准备

下载Contractfuzzer 的源代码

二、代码修改和部署

Contractfuzzer的源代码分为三个部分,第一个是 test,第二个是fuzzer,第三个私链

1、test

test 需要做的修改非常少,只需要安装babel模块,然后在 package.json 中插入 "type": "module",就可以直接运行,运行的时候一定要传入六个参数,不然需要对代码进行修改,可以直接复制下面这段启动代码,直接将私链的RPC地址改成自己的私链地址(后面第三步会详细讲)就可以

node runFuzzMonitor.js --gethrpcport http://172.22.109.122:8545 --account 0 --value 100000000

2、fuzzer

fuzzer 有两种方法可以让你的代码跑起来

(1)将main.go文件中的这些文件路径换成对应的本地文件地址,然后对main.go文件进行go build main.go就可以。(其中要注意一个点,就是listen_port端口是用来接收私链传过来的数据,这里开了哪个端口,后面在改私链上的 API 时就需要将端口设置为现在定义的端口,然后test_port是用来将产生的测试用例发给私链的,如果你的test 和fuzzer运行在同个主机里,这个不需要更改,注意端口也是8088,在 test 中的RunnerMonitor函数中可以看到定义的端口)

Contractfuzzer 复现(2)_第1张图片

(2)可以和run.sh文件中的代码一样,通过命令行将文件的地址动态的传入,前面的-abi_dir是代码用来识别辨认是哪个文件的标识,在main.go文件中进行定义

 

3、私链

需要修改的是go-ethereum-cf 中的 core/vm/hacker_contractcall.go 文件中的url,

需要将文件中的这个url中的 localhost 改成你运行fuzzer文件的主机地址,这个url就是私链和fuzzer之间进行数据交互的 API ,修改之后将build/bin文件夹删除,再运行make all 这时会生成新的geth和其他工具,生成geth之后可以将Ethereum文件夹(数据文件夹)也上传到虚拟机中 ,在Ethereum中用新生成的geth运行私链。

./../go-ethereum/build/bin/geth --fast  --identity "TestNode2" --rpc -rpcaddr "0.0.0.0"  
--rpcport "8545" --rpccorsdomain "*" --port "30303" --nodiscover  --rpcapi 
"db,eth,net,web3,miner,net,personal,net,txpool,admin"  --networkid 1900   --datadir 
/home/zheng/桌面/Ethereum --nat "any" --targetgaslimit "9000000000000"  --unlock 0 --
password "pwd.txt"  --mine console 2>>geth.log

要注意的是这个私链的id 要为1900,不然会运行失败

启动链之后有的需要解锁账户,开启挖矿,有的时候不需要。

到了这里就可以完成Contractfuzzer的复现了

你可能感兴趣的:(区块链,测试工具)