我使用docker安装安装了oyente,如链接中所述
https://github.com/enzymefinance/oyente使用以下命令。码头工人拉隆古恩&码头工人我可以分析旧的智能合约,但在新的合约上尝试时会出现编译错误。我需要更新solc的版本,但我做不到。
在容器上,当前版本为solc,solidity编译器命令行接口版本:0.4.21+commit.dfe193c.Linux.g++.
我读到更新它的最好方法是使用命令npm,所以我执行了以下命令,但我遇到了错误,因为我认为npm版本也不是新的。
docker exec -i container_name bash -c "npm install -g solc"
我会很感激的,因为我现在正努力解决这个问题好几个小时。提前感谢,Ferda
Docker的标准模型是映像是不可变的:它包含应用程序的固定版本及其依赖项,如果需要更新其中的任何一个,则需要构建一个新映像并启动一个新容器。
因此,这部分的第一部分看起来像任何其他Node包更新。在主机系统上没有节点的情况下安装节点。运行npm update --save solc
以安装新版本并更新package.json
和package-lock.json
文件。如果Docker没有参与进来,你会做同样的更新。
然后,您可以使用docker build
重建Docker映像。这与最初构建映像时运行的命令相同。一旦创建了新映像,就可以停止、删除和重新创建容器。
# If you don't already have Node, get it
# brew install nodejs
# Update the dependency
npm update --save solc
npm run test
# Rebuild the image
docker build -t image_name .
# Recreate the container
docker stop container_name
docker rm container_name
docker run -d --name container_name image_name
npm run integration
git add package*.json
git commit -m 'update solc version to 0.8.14'
一些常见的Docker/Node设置试图将node_modules
库树存储在匿名卷中。这不容易更新,并且隐藏了根据图像构建的node_modules
树。如果您有这种设置(可能在Composevolumes:
块中(,我建议删除任何隐藏图像内容的卷或装载。
请注意,此路径根本不使用docker exec
。把这看作是在运行的进程中安装调试器:当你需要它时,它非常有用,但一旦进程或容器退出,你在那里做的任何事情都会丢失,它不应该是你正常操作工具包的一部分。