プラスプラス開発者ブログ

岩手県盛岡市のシステム開発会社「株式会社プラスプラス」の開発者ブログです。

WindowsでEthereum環境構築にAndroidくわえました。

岩手と若手って見間違えるよね。やっぱり視力が悪い「軽く熊」です。

本当はsolidityをやろうかと思っていたのですが、やっぱり利便性を考えると
パソコンじゃなくてスマホだよね!?っという事で突然ですが、
イーサリアムのプライベートネットにAndroid端末を加えちゃいます!


やるべきことは2つです。
・gethの起動オプションを変更して外部端末がアクセスできるようにする。
AndroidからEthereumを操作する手段(ソフト)を用意する。

機器構成は感じです。
f:id:plusplus-calc_kuma:20180608123043p:plain
パソコンとルータの接続は有線でも無線でもどちらでも構いません。
使用するAndroid端末はAndroid Ver 5.0の普通のスマホです。

注意!
パソコンのファイアウォールによりAndroid端末からのアクセスがブロックされ、
動作しない場合にはセキュリティソフトの設定変更が必要になります。
少なくともWindows Defenderはブロックを仕掛けてきます!
ブロックを許可すれば動くと思いますがダメな場合もあるかもしれません…。
そんな時はファイアウォールを一時的にOFFにすれば動くハズ。危険なのでお勧めしませんが。

最初にgetnの設定変更です。
もし、コマンドプロントでgethを既に起動している場合には
gethだけでなくコマンドプロンプトも終了してください。


まずは最初にコマンドプロンプトを起動して、
ipconfig で自分のIPアドレスを調べます。

> ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
   接続固有の DNS サフィックス . . . . .:
   リンクローカル IPv6 アドレス. . . . .: fe80::49fa:8787:4edd:cf4d%5
   IPv4 アドレス . . . . . . . . . . . .: 192.168.1.20 ← コレね!
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 192.168.1.1


次はgeth.exeを起動します。最初のコマンドに変更はありません。

 > geth --datadir ./test1 init ./genesis.json


2個目のコマンドにRPCのオプションを追加します。
※--rpcaddr の後にはipconfigで調べた自分のIPアドレスを記述します。
--rpcaddr は省略する事も可能ですが、その場合はlocalhost扱いになるので今回の目的には合いません。

 > geth --networkid 1234567890 --port 50303 --datadir ./test1 --maxpeers 0 --nodiscover --rpc --rpcaddr 192.168.1.20 --rpcport "8545" --rpccorsdomain "*" --rpcapi eth,web3,personal,net console  2>>node.log

正常に設定されていれば、別のコマンドプロントを起動してnetstatで確認できます。

> netstat -na
アクティブな接続
  プロトコル  ローカル アドレス      外部アドレス           状態
 ...省略
 TCP         192.168.1.20:8545      0.0.0.0:0              LISTENING ← 指定IPで8545ポートがあればOK
 ...省略

これでパソコン側の作業は完了です。

次はAndroid側なのですがEthereumを操作するソフトを自分で作れる訳もなく、
本を読んでいると眠くな…そんな知識も技術も無いので他力本願の方法を探しました。

答えは簡単。metamask作戦です。

パソコンであればChromeにアドオンのmetamaskを追加するだけでアラ!?不思議。
簡単にEthereumが使えるのです。
「よーし、AndroidChromeにmetamaskを追加しちゃうぞー(笑)…あれ?」

AndroidChromeはアドオン非対応なのを知りませんでした (T_T)

最初から頓挫しそうになりましたがどうやらfirefoxのアドオンなら問題ない事が判明したので、
Android端末にfirefoxとアドオンmetamaskをインストールします。

firefoxを普通にPlayストアからインストールして起動します。
初めてForefox Focus なるものの存在を知りましたがスルーしました。

f:id:plusplus-calc_kuma:20180608152929p:plain
firefox を起動したら右上のメニューアイコンをタップします。


f:id:plusplus-calc_kuma:20180608152937p:plain
メニューの「アドオン」をタップします。


f:id:plusplus-calc_kuma:20180608152944p:plain
すべてを見ている時間は無いのですがアドオンを見ることにします。


f:id:plusplus-calc_kuma:20180608152954p:plain
検索部分に「metamask」を入力して検索するとすぐに見つかります。


f:id:plusplus-calc_kuma:20180608153010p:plain
Firefoxへ追加でインストールされます。


f:id:plusplus-calc_kuma:20180608153025p:plain
インストールするとメニューに追加されてる「metamask」をタップします。
これでmetamaskが起動します。


f:id:plusplus-calc_kuma:20180608153032p:plain
英語なので全然理解していませんが「Accept」(承諾)をタップします。
懲りずに2回目の長文確認が来ますが一番下までスクロールさせて
「Accept」をタップします。


f:id:plusplus-calc_kuma:20180608153042p:plain
ここからはパソコンのmetamaskとほぼ同じっぽいので操作も同じようです。
パスワードを2回入力して「CREATE」タップしてアカウントを作成します。

f:id:plusplus-calc_kuma:20180608162444p:plain
アカウントを作成すると「もしもの場合の12単語を保存の画面」になります。
「I'VE COPIED IT SOMEWHERE SAFE」<安全にコピーした>をタップするとホーム画面になります。
「SAVE SEED WORDS AS FILE」<単語をファイル保存>をタップすると
端末のダウンロードフォルダに保存されるようです。

クリップボードにコピーしてメモアプリで保存してから「I'VE COPIED (略」をタップしました。


f:id:plusplus-calc_kuma:20180608162506p:plain
ホーム画面です。
左上を見るとわかりますがメインネットに接続されています。
プライベートネットに切り替えたいので右上のmetamaskのメニューをタップします。
※この画面のメニューボタンは「firefox、metamask、アカウント」で3つもあります。


f:id:plusplus-calc_kuma:20180608162842p:plain
「Settings」をタップします。


f:id:plusplus-calc_kuma:20180608163155p:plain
New RPC URL に「http://自分のIPアドレス:8545」を入力します。
今までの流れでいくと「http://192.168.1.20:8545」になります。
入力が終わったら「Save」をタップします。


f:id:plusplus-calc_kuma:20180608163944p:plain
「Main Network」が「Private Network」なったら成功です。

後はこのアカウントの仮想通貨アドレスをパソコン側で入力すれば
送金してもらえるのですが、文字数が多いので面倒なんですよね…。

思いついたパソコン側に通知する方法は3つ。
1.自力でスマホを見ながらキーボードで入力する。
 → 努力さえすれば実行できる。
2.アドレスをクリップボードにコピーしてLINEやメールで通知する。
 → まともな考えだと思う。
3.QRコードを作成してカメラで読み込ませる。
 → ソフトとカメラがあれば以外に手軽だったりする。

無難な2の方法を使います。

f:id:plusplus-calc_kuma:20180608170320p:plain
ホーム画面のアカウントの右側にあるメニューボタンをタップします。
メニューが表示されるので「Copy Address to clipboard」をタップします。

これでクリップボードに仮想通貨アドレスがコピーされているので
後はLINEでもメールでも良いのでパソコンに通知します。

後はパソコン側から前回紹介した手順で送金すると
Android 側に送金され、etherが増えるのを確認できます。

f:id:plusplus-calc_kuma:20180608171650p:plain
入金を確認。1000ether 増えました!

当然ですが Android 側から送金することも可能です。
ホーム画面の「SEND」からEthereum-Walletと同じ感覚で送金できます。

何度か試していた時に送金がPendingになり、トランザクションが詰まる現象が発生する事がありました。
原因は手数料(ガス)の設定値が低すぎた為だったようです。
メインネット接続時にこの現象が発生すると非常にやっかいでキャンセルする方法を知らないと、
トランザクションが終わるまで仮想通貨が一切使えなくなります。

一応、キャンセルを試して見たのですが、いくら待ってもトランザクションが処理されませんでした。
しかし、端末を再起動するとなぜかトランザクション詰まりが解消され、
Pendingだったトランザクションが全て終わっていました。

これで複数台の端末をプライベートネット接続する事が出来るようになりました。
やれる事は広がったんですが、これから何を作ろうかなー?

次回、スルーされたsolidity…怒りの対決!!


シリーズ記事
WindowsでEthereum環境構築はじめました。その1
WindowsでEthereum環境構築はじめました。その2
WindowsでEthereum環境構築はじめました。その3
WindowsでEthereum環境構築にAndroidくわえました。 ← この記事だよ!
WindowsでEthereum環境構築でスマートコントラクトはじめました。
イーサリアムのスマートコントラクトで何ができる?
Androidでmetamask不要のウォレットアプリをビルドする
WindowsでEthereum環境構築でスマートコントラクト、JavaScript実行編