見出し画像

スマートコントラクト開発環境RemixをUbuntu16.04にインストールしてみよう!

remixとは

コントラクトの開発にはRemixという統合開発環境を使うのがおすすめです。コードをコマンドラインでコンパイルしてブロックチェーンにデプロイする等の作業がこのRemixだけで完結します。

solidityとは

solidityとは「イーサリアムのスマートコントラクトを実装するための高水準なコントラクト指向言語」です。

前提

この記事を実践するには下記でリンクでさくらサーバーをレンタルしてUbuntu16.04 をOSインストールしている必要があります。あとEthereum環境も必要です。

環境作成

必要なものをインストールしていきます。

$ sudo apt-get install curl

//nvmのインストール
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash
$ export NVM_DIR="$HOME/.nvm"
$ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
$ nvm install 7

//version確認
$ node --version
v7.10.1
$ npm --version
4.2.0

//ubuntuではbuild-essentialをインストールする必要がある
$ sudo apt-get install build-essential

remixをcloneしてきましょう。

//remixをcloneしてきます
$ git clone https://github.com/ethereum/remix-ide.git

portを開放します。remixは8080番を使うので外部からアクセスできるようにしなくてはいけません。

$ cd /
$ sudo vi /etc/iptables/iptables.rules
----------------------------
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
//8080でportを開放するために追記
-A INPUT -p tcp --dport 8080 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
----------------------------

//設定した内容を適用
$ sudo /sbin/iptables-restore < /etc/iptables/iptables.rules

次はremixの起動まで行きましょう。

//npmで実行
$ npm install
$ npm run setupremix
$ npm start
> remix-ide@0.6.3 start /home/ubuntu/remix-ide
> npm-run-all -lpr serve watch onchange remixd

[watch   ] 
[watch   ] > remix-ide@0.6.3 watch /home/ubuntu/remix-ide
[watch   ] > watchify src/index.js -dv -p browserify-reload -o build/app.js
[watch   ] 
[onchange] 
[onchange] > remix-ide@0.6.3 onchange /home/ubuntu/remix-ide
[onchange] > onchange build/app.js -- npm-run-all lint
[onchange] 
[serve   ] 
[serve   ] > remix-ide@0.6.3 serve /home/ubuntu/remix-ide
[serve   ] > execr --silent http-server .
[serve   ] 
[watch   ] WS server listening on  40142
[remixd  ] 
[remixd  ] > remix-ide@0.6.3 remixd /home/ubuntu/remix-ide
[remixd  ] > ./node_modules/remixd/bin/remixd -s ./contracts
[remixd  ] 
[remixd  ] example: --dev-path /home/devchains/chain1 --mist --geth --frontend /home/frontend --frontend-port 8084 --auto-mine
[remixd  ] 
[remixd  ]   Usage: remixd -s <shared folder>
[remixd  ] 
[remixd  ]   Provide a two ways connection between the local computer and Remix IDE
[remixd  ] 
[remixd  ]   Options:
[remixd  ] 
[remixd  ]     -s, --shared-folder <path>            Folder to share with Remix IDE
[remixd  ]     -m, --mist                            start mist
[remixd  ]     -g, --geth                            start geth
[remixd  ]     -p, --dev-path <dev-path>             Folder used by mist/geth to start the development instance
[remixd  ]     -f, --frontend <front-end>            Folder that should be served by remixd
[remixd  ]     -p, --frontend-port <front-end-port>  Http port used by the frontend (default 8082)
[remixd  ]     -a, --auto-mine                       mine pending transactions
[remixd  ]     -r, --rpc <cors-domains>              start rpc server. Values are CORS domain
[remixd  ]     -rp, --rpc-port                       rpc server port (default 8545)
[remixd  ]     -h, --help                            output usage information
[remixd  ] [WARN] Any application that runs on your computer can potentially read from and write to all files in the directory.
[remixd  ] [WARN] Symbolinc links are not forwarded to Remix IDE
[remixd  ] 
[remixd  ] [WARN] Symbolic link modification not allowed : ./contracts | /home/ubuntu/remix-ide/contracts
[remixd  ] Shared folder : ./contracts
[remixd  ] Sun May 13 2018 15:14:53 GMT+0900 (JST) Remixd is listening on 127.0.0.1:65520
[watch   ] Error: Cannot find module './soljson.js' from '/home/ubuntu/remix-ide/node_modules/solc' ←ココ
[onchange] 
[onchange] > remix-ide@0.6.3 lint /home/ubuntu/remix-ide
[onchange] > standard | notify-error
[onchange] 

エラーが発生していますね。。。画面も真っ白や!!!
※ローカルの環境からhttp://XXX.XX.XXX.XX:8080にアクセスしています。
XXX.XX.XXX.XXはUbuntuのIPです。8080はremixの使用portなので指定しています。

[watch   ] Error: Cannot find module './soljson.js' from '/home/ubuntu/remix-ide/node_modules/solc' ←ココ

/home/ubuntu/remix-ide/node_modules/solcにsoljson.jsがないというエラーが発生していますね。ディレクトリの中身を確認してみましょうか。


$ ll /home/ubuntu/remix-ide/node_modules/solc
total 96
drwxrwxr-x    3 ubuntu ubuntu  4096 May 13 15:20 ./
drwxrwxr-x 1078 ubuntu ubuntu 36864 May 13 15:25 ../
-rw-rw-r--    1 ubuntu ubuntu  1457 May 13 15:20 abi.js
-rw-rw-r--    1 ubuntu ubuntu    91 May 13 15:20 index.js
-rw-rw-r--    1 ubuntu ubuntu  1067 May 13 15:20 LICENSE
-rw-rw-r--    1 ubuntu ubuntu  2494 May 13 15:20 linker.js
drwxrwxr-x   14 ubuntu ubuntu  4096 May 13 15:20 node_modules/
-rw-rw-r--    1 ubuntu ubuntu  4594 May 13 15:20 package.json
-rw-rw-r--    1 ubuntu ubuntu  8040 May 13 15:20 README.md
-rwxrwxr-x    1 ubuntu ubuntu  3432 May 13 15:20 solcjs* ←ココ
-rw-rw-r--    1 ubuntu ubuntu  6020 May 13 15:20 translate.js
-rw-rw-r--    1 ubuntu ubuntu  7558 May 13 15:20 wrapper.js

solcjs*というものがありました。もしやこいつがsoljson.jsか。バグっぽい。ではこいつの名前をsoljson.jsに変えてみて試してみましょう

$ cp /home/ubuntu/remix-ide/node_modules/solc/solcjs /home/ubuntu/remix-ide/node_modules/solc/soljson.js

//確認してみましょう
$ ll node_modules/solc/
total 100
drwxrwxr-x    3 ubuntu ubuntu  4096 May 13 15:32 ./
drwxrwxr-x 1078 ubuntu ubuntu 36864 May 13 15:25 ../
-rw-rw-r--    1 ubuntu ubuntu  1457 May 13 15:20 abi.js
-rw-rw-r--    1 ubuntu ubuntu    91 May 13 15:20 index.js
-rw-rw-r--    1 ubuntu ubuntu  1067 May 13 15:20 LICENSE
-rw-rw-r--    1 ubuntu ubuntu  2494 May 13 15:20 linker.js
drwxrwxr-x   14 ubuntu ubuntu  4096 May 13 15:20 node_modules/
-rw-rw-r--    1 ubuntu ubuntu  4594 May 13 15:20 package.json
-rw-rw-r--    1 ubuntu ubuntu  8040 May 13 15:20 README.md
-rwxrwxr-x    1 ubuntu ubuntu  3432 May 13 15:20 solcjs*
-rwxrwxr-x    1 ubuntu ubuntu  3432 May 13 15:32 soljson.js* ←できてるね!
-rw-rw-r--    1 ubuntu ubuntu  6020 May 13 15:20 translate.js
-rw-rw-r--    1 ubuntu ubuntu  7558 May 13 15:20 wrapper.js

できていますね!では再度チャレンジ!

$ npm start

> remix-ide@0.6.3 start /home/ubuntu/remix-ide
> npm-run-all -lpr serve watch onchange remixd

[serve   ] 
[serve   ] > remix-ide@0.6.3 serve /home/ubuntu/remix-ide
[serve   ] > execr --silent http-server .
[serve   ] 
[onchange] 
[onchange] > remix-ide@0.6.3 onchange /home/ubuntu/remix-ide
[onchange] > onchange build/app.js -- npm-run-all lint
[onchange] 
[watch   ] 
[watch   ] > remix-ide@0.6.3 watch /home/ubuntu/remix-ide
[watch   ] > watchify src/index.js -dv -p browserify-reload -o build/app.js
[watch   ] 
[remixd  ] 
[remixd  ] > remix-ide@0.6.3 remixd /home/ubuntu/remix-ide
[remixd  ] > ./node_modules/remixd/bin/remixd -s ./contracts
[remixd  ] 
[watch   ] WS server listening on  43467
[remixd  ] example: --dev-path /home/devchains/chain1 --mist --geth --frontend /home/frontend --frontend-port 8084 --auto-mine
[remixd  ] 
[remixd  ]   Usage: remixd -s <shared folder>
[remixd  ] 
[remixd  ]   Provide a two ways connection between the local computer and Remix IDE
[remixd  ] 
[remixd  ]   Options:
[remixd  ] 
[remixd  ]     -s, --shared-folder <path>            Folder to share with Remix IDE
[remixd  ]     -m, --mist                            start mist
[remixd  ]     -g, --geth                            start geth
[remixd  ]     -p, --dev-path <dev-path>             Folder used by mist/geth to start the development instance
[remixd  ]     -f, --frontend <front-end>            Folder that should be served by remixd
[remixd  ]     -p, --frontend-port <front-end-port>  Http port used by the frontend (default 8082)
[remixd  ]     -a, --auto-mine                       mine pending transactions
[remixd  ]     -r, --rpc <cors-domains>              start rpc server. Values are CORS domain
[remixd  ]     -rp, --rpc-port                       rpc server port (default 8545)
[remixd  ]     -h, --help                            output usage information
[remixd  ] [WARN] Any application that runs on your computer can potentially read from and write to all files in the directory.
[remixd  ] [WARN] Symbolinc links are not forwarded to Remix IDE
[remixd  ] 
[remixd  ] [WARN] Symbolic link modification not allowed : ./contracts | /home/ubuntu/remix-ide/contracts
[remixd  ] Shared folder : ./contracts
[remixd  ] Sun May 13 2018 15:33:10 GMT+0900 (JST) Remixd is listening on 127.0.0.1:65520
[watch   ] NOW ASKING FOR CLIENT TO RELOAD
[watch   ] 21660639 bytes written to build/app.js (36.51 seconds) at 3:33:46 PM
[onchange] 
[onchange] > remix-ide@0.6.3 lint /home/ubuntu/remix-ide
[onchange] > standard | notify-error
[onchange] 

できたっぽい!!!画面はどうかな?

開けましたね!表示できました。バグかな~こういうの困っちゃいますよね。こういうトラブルがまだまだある状態なので新規の人は詰まりやすいですよね。わかります。とりあえず今回はここまで!
次はPrivateのEthereumと接続してContractをデプロイしていきましょう!

この記事が気に入ったらサポートをしてみませんか?