はじめに

今回はgethを起動させてプライベートネットワークでオフライン環境のRemixを利用したいと思います。
以前にオンライン環境のRemixを利用してコントラクトHelloWorldを実行しました。オンライン環境のRemixでコントラクトを実行したい方は以下の記事をご覧ください。
「Solidityで記述するコントラクトHelloWorld」で利用したコントラクトHelloWorldを今回も利用します。
まだ、Ethereumの環境構築を終えていない方は以下の記事を先にご覧ください。
gethとRemixの関係性

Remixでコントラクトを実行すると、web3.js経由でgethと通信します。
rpcを利用してGethを起動させる
初めてgethの起動を行なう方は以下の記事を参考にしてください。ディレクトリは以下の記事で作ったtestnet_blockを使用しています。
~$cd testnet_block testnet_block$geth --networkid 11112 --dev --datadir /Users/username/testnet_block --mine --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "*" --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" console 2>> /Users/usernane/testnet_block/geth.log
- –rpc gethのRPCサーバとしてのAPIを有効化します。
- –rpcport 8545 ポート番号を8545に指定していることを表しています。
- — rpccordomain “*” 任意のドメインの利用を許可しています
- — rpcapi JSON-RPC APIを通して受け付けるHTTP-RPCインターフェースを指定します。ブラウザからHTTP通信が行なえます。
これでgethを起動させることが出来ました。次にRemixの起動を行います。
Remixの起動
オフライン環境のRemixの環境構築をまだ行なっていない方は以下の記事をご覧ください。こちらの記事でRemixの環境構築の方法を紹介しています。
remix-ide-gh-pagesフォルダの中のindex.htmlを開いてください。
index.htmlを開いたら、HelloWorld.solファイルを作成し、以下のコントラクトを貼ってください。
pragma solidity ^0.4.3; //コントラクト contract HelloWorld{ //状態変数 string public greeting; constructor(string _greeting){ greeting = _greeting; } //メソッド function setGreeting(string _greeting){ greeting = _greeting; } function greet() public constant returns (string) { return greeting; } }
Remixの使用方法がわからない方は以下のサイトをチェックしてください。
これにて、「gethを起動してプライベートネットワークでRemixを利用しコントラクト実行」する準備が整いました。
コントラクトの実行
これからgethとRemixをつなげてコントラクトを実行します。
まず、environmentをweb3 providerに変更してください。

web3 providerに変更したら、「Are you sure want to connect to an ethereum node?」と聞かれるので、OKを押してください。
その後、Web3 Provider Endpointの入力欄が出てきます。こちらはgeth起動時に指定したポート番号8545がRemix内でデフォルトで指定されているのでそのままOKを押してください。
そしたら、以下のように任意の文字を入力してください。入力時にダブルクオーテーションを忘れないようにしてください。

Createボタンを押したら、コントラクトが実行されます。

Detailsボタンを押すと、実行内容を詳細に見ることが出来ます。
- web3 provider:実際にEthereumノードにアクセスしている実行環境です。ブロックチェーン上にコントラクトを登録し、その上でコントラクトの関数を実行します。
- JavaScript VM:web3 providerと違ってEthereumノードにアクセスせずにブラウザ上でコントラクトの関数を擬似的に実行します。つまり、ブロックチェーン上ではなく、JavaScript VM(Virtual Machine)上の実行環境です。
まとめ

いかがでしたでしょうか?今回はgethとRemixの両方を使ってコントラクトを実行してみました。gethの起動コマンドはじっくり見てみるとわけのわからないような文字が並んでいるように思えるかもしれません。gethについてもしっかり学んでいきましょう。そして、「gethとRemixの関係性」の章で紹介したweb3.jsも重要なキワードなので押さえておきましょう。