- 用 solidity-coverage 的 api 在合约代码中插桩,在经 solidity-compiler 编译成字节码
- 部署插桩后的合约到内置的 ganache 中,ganache 会记录插桩后合约的代码执行明细
- 启动 express 服务, 将 / 反向代理到 ganache, 当收到 /coverage.x 请求后调 solidity-coverage 的 api 生成报告,重定向到报告页面
-
不要把插桩后的合约代码部署到公链环境
插桩后的代码在执行过程中会多出很多 gas 消耗
-
部署到公链环境时,不要调用 npm run cov-deploy
原因同上
-
从 yongyang2021/solidity-coverage-example 镜像启动服务端
服务端监听的端口默认是 3000, 可以通过 PORT 环境变量修改
可以映射配置文件 ganache.json 到 /app/ganache.json 覆盖 ganache 的配置
如下 ganache.json 文件配置了一个开发者账号和数据持久化目录
{ "accounts": [ { "secretKey": "*****", "balance": "0x845951614014880000000" } ], "db_path": "/app/database" }
docker-compose.yml 文件:
version: '2' services: cov_server: image: 'yongyang2021/solidity-coverage-example:v0.0.5' ports: - 3001:3001 volumes: - ganache.json:/app/ganache.json - database:/app/database environment: - PORT=3001
-
利用 docker 容器部署合约到刚才启动的服务端
- 配置环境变量 COV_HOST=192.168.1.1, 这里不建议填写 localhost,因为 docker 容器默认不是 host 模式, mac 用户需要填 host.docker.internal
- 配置环境变量 COV_PORT=3001, 这里对应服务端的 IP
- 配置环境变量 COV_KEY=**, 填写开发者账号
- 映射 local 文件夹到容器中,接受部署合约完成后的地址
- 映射 artifacts 接收 abi 文件
docker-compose.yml 文件:
version: '2' services: cov_client: image: 'yongyang2021/solidity-coverage-example:v0.0.5' volumes: - local:/app/local - artifacts:/app/artifacts environment: - COV_HOST=192.168.1.1 - COV_PORT=3001 - COV_KEY=** entrypoint: 'npm run cov-deploy'
-
第2步的容器停止后,完成后访问
http://localhost:3001/coverage.x
, 可以看到合约的构造器已经被调用过一次