上次被远程的坑了,太惨了。。。

安装

选一个docker,pull,没了,2333333

docker pull 4c0n/remix-ide

比较老, 不是最新版的,下次看看最新版怎么搞

老版本

这个docker也行:mnxzyw/remix-ide-docker

docker pull mnxzyw/remix-ide-docker

新版and修改后的本地编译器版本

其它方法:

https://www.jianshu.com/p/a4ab7aac87c3

编译器本地化

但是你以为这就完了么,天真,这样的版本很容易碰到Complier not loaded的坑爹问题,所以还是下载本地的比较好

首先,先把js下载到本地:

1
git clone https://github.com/ethereum/solc-bin.git

但其实,下载也是超级慢,有很多非release版本,所以呢,我觉得直接用脚本下releases版本就好,文末附

然后上传到docker中

1
2
$ docker cp path/to/solc-bin/ dockerID:/home/remix/.nvm/versions/node/v10.15.3/lib/node_modules/remix-ide/assets
$ docker run -itd -p8080:8080 -p65520:65520 mnxzyw/remix-ide-docker:local

最后修改 ./remix-ide/build/app.js的内容,(这里用搜索比较好)

1
2
3
4
5
6
$ find / -name app.js
# /home/remix/.nvm/versions/node/v10.15.3/lib/node_modules/remix-ide/build/app.js
$ cd /home/remix/.nvm/versions/node/v10.15.3/lib/node_modules/remix-ide/build/
$ cp app.js app-https.js
$ vim app.js
# 如果没有vim,就本地下载直接修改回传吧
solc-bin下载详情

当然啦,其实不下载到本地,改成http也会快很多的

修改成本地地址 修改成http请求

其实不止这行代码,凡是https请求solc-bin.ethereum的请求我都换成本地的了,我觉得后续手动更新也比总是等远程来的方便的多Orz。

最后,可以保存这个带有本地complier js的版本为镜像docker commit -a "author" -m "message" containerID mnxzyw/remix-ide-docker:local

image-20191115113823951

Remix的简短使用说明

编译运行界面

发布调用界面

新版本的基本也差不多,就是位置变了而已,毛太多问题啦~

新版连接本地RPC

注意,如果连接不上,可以试试在启动节点的时候加参数--rpccorsadmin "*"

(下载solc-bin的脚本,写得比较简陋):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# -*- coding: utf-8 -*-
#!/usr/bin/python3
# getjs.py
import json
import os
import urllib.request

# come from http://solc-bin.ethereum.org/bin/list.json
data = {
"0.5.13": "soljson-v0.5.13+commit.5b0b510c.js",
"0.5.12": "soljson-v0.5.12+commit.7709ece9.js",
"0.5.11": "soljson-v0.5.11+commit.c082d0b4.js",
"0.5.10": "soljson-v0.5.10+commit.5a6ea5b1.js",
"0.5.9": "soljson-v0.5.9+commit.e560f70d.js",
"0.5.8": "soljson-v0.5.8+commit.23d335f2.js",
"0.5.7": "soljson-v0.5.7+commit.6da8b019.js",
"0.5.6": "soljson-v0.5.6+commit.b259423e.js",
"0.5.5": "soljson-v0.5.5+commit.47a71e8f.js",
"0.5.4": "soljson-v0.5.4+commit.9549d8ff.js",
"0.5.3": "soljson-v0.5.3+commit.10d17f24.js",
"0.5.2": "soljson-v0.5.2+commit.1df8f40c.js",
"0.5.1": "soljson-v0.5.1+commit.c8a2cb62.js",
"0.5.0": "soljson-v0.5.0+commit.1d4f565a.js",
"0.4.26": "soljson-v0.4.26+commit.4563c3fc.js",
"0.4.25": "soljson-v0.4.25+commit.59dbf8f1.js",
"0.4.24": "soljson-v0.4.24+commit.e67f0147.js",
"0.4.23": "soljson-v0.4.23+commit.124ca40d.js",
"0.4.22": "soljson-v0.4.22+commit.4cb486ee.js",
"0.4.21": "soljson-v0.4.21+commit.dfe3193c.js",
"0.4.20": "soljson-v0.4.20+commit.3155dd80.js",
"0.4.19": "soljson-v0.4.19+commit.c4cbbb05.js",
"0.4.18": "soljson-v0.4.18+commit.9cf6e910.js",
"0.4.17": "soljson-v0.4.17+commit.bdeb9e52.js",
"0.4.16": "soljson-v0.4.16+commit.d7661dd9.js",
"0.4.15": "soljson-v0.4.15+commit.bbb8e64f.js",
"0.4.14": "soljson-v0.4.14+commit.c2215d46.js",
"0.4.13": "soljson-v0.4.13+commit.fb4cb1a.js",
"0.4.12": "soljson-v0.4.12+commit.194ff033.js",
"0.4.11": "soljson-v0.4.11+commit.68ef5810.js",
"0.4.10": "soljson-v0.4.10+commit.f0d539ae.js",
"0.4.9": "soljson-v0.4.9+commit.364da425.js",
"0.4.8": "soljson-v0.4.8+commit.60cc1668.js",
"0.4.7": "soljson-v0.4.7+commit.822622cf.js",
"0.4.6": "soljson-v0.4.6+commit.2dabbdf0.js",
"0.4.5": "soljson-v0.4.5+commit.b318366e.js",
"0.4.4": "soljson-v0.4.4+commit.4633f3de.js",
"0.4.3": "soljson-v0.4.3+commit.2353da71.js",
"0.4.2": "soljson-v0.4.2+commit.af6afb04.js",
"0.4.1": "soljson-v0.4.1+commit.4fc6fc2c.js",
"0.4.0": "soljson-v0.4.0+commit.acd334c9.js",
"0.3.6": "soljson-v0.3.6+commit.3fc68da.js",
"0.3.5": "soljson-v0.3.5+commit.5f97274.js",
"0.3.4": "soljson-v0.3.4+commit.7dab890.js",
"0.3.3": "soljson-v0.3.3+commit.4dc1cb1.js",
"0.3.2": "soljson-v0.3.2+commit.81ae2a7.js",
"0.3.1": "soljson-v0.3.1+commit.c492d9b.js",
"0.3.0": "soljson-v0.3.0+commit.11d6736.js",
"0.2.2": "soljson-v0.2.2+commit.ef92f56.js",
"0.2.1": "soljson-v0.2.1+commit.91a6b35.js",
"0.2.0": "soljson-v0.2.0+commit.4dc2445.js",
"0.1.7": "soljson-v0.1.7+commit.b4e666c.js",
"0.1.6": "soljson-v0.1.6+commit.d41f8b7.js",
"0.1.5": "soljson-v0.1.5+commit.23865e3.js",
"0.1.4": "soljson-v0.1.4+commit.5f6c3cd.js",
"0.1.3": "soljson-v0.1.3+commit.28f561.js",
"0.1.2": "soljson-v0.1.2+commit.d0d36e3.js",
"0.1.1": "soljson-v0.1.1+commit.6ff4cd6.js"
}

url0 = "http://solc-bin.ethereum.org/bin/"
for tiem in data:
file = data[tiem]
url = url0 + file
#os.path.join将多个路径组合后返回
print("downloading with " + url)
LocalPath = os.path.join('./solc-bin',file)
urllib.request.urlretrieve(url,LocalPath)