超簡単!!RailsでEthereum上のコントラクトコードを実行する

前回のDApps学習ではTruffle Boxesを利用してブラウザから操作できるサンプルアプリを作成しました。

Truffle Boxesを利用してブラウザから動作するDAppsサンプルアプリを作る

2018.04.15

次は普段はRailsでプログラムを書いているのでRailsからスマートコントラクトを動作させたいなと。

で、調べるとgemでethreum.rbなるものを発見し他ので、早速サンプルアプリを作ってみました!

使ってみるととりあえず動作させるだけならすぐできました。

まつしん

ちなみにNEMだとgemでnem-rubyがあります。

サンプルアプリ作成にあたって下記の記事をとても参考にさせてもらっています。

Rubyを使って、Ethereumへ接続し、SmartContractを実行する 

また今回作ったコードはこちらにおいています。

サンプルアプリでは単純にコントラクトコードをデプロイして、書かれたメソッドを呼び出せることを試しているだけになります。

開発の流れ

開発の流れとしては以下の通りで、前提としてはRailsの開発環境が整っており、Ganacheはインストールしているものとします。

開発手順まとめ

・rails newしてプロジェクトの作成

・gemのethereum.rbをインストール

・コントラクトコードを実装

・コントラクトコードの呼び出し処理を実装

・Ganacheを起動

・ブラウザで動作確認

動作させた環境は以下になります。

 動作環境

  • Rails v5.1.6
  • ethreum.rb v2.2
  • Ganache v1.1.0

rails newしてプロジェクトの作成

まずはRailsのプロジェクトを作成から。

gemのethereum.rbをインストール

Gemfileにethreum.rbを指定してインストールします。

環境はこれで準備完了になり、次から実装に移ります。

コントラクトコードを実装

プロジェクトのルートパス配下にcontractsフォルダを作成し、コントラクトファイルを作成して実装。

処理としてはデプロイ時に渡した文字列を呼び出せるようにしたり、デプロイしたオーナーのアドレス/残高が取得できるだけのシンプルなものとなっています。

 

コントラクトコードの呼び出し処理を実装

手前でコントラクトコードを実装したのでいよいよ ethereum.rbを利用したEthereumへの接続になります。 

急にHomeControllerと出てきていますが、Railsの細かいコードはGitHub上のコードを見てもらえればと思います。ここではethereum.rbの利用方法にのみフォーカスしています。

まず①でGanacheに接続するためにクライアントのオブジェクトを起動します。GANACHE_URLにはGanache起動後のRPC SERVER欄に表示されているURLを入力してください。

次に②でcreateメソッドでcontractというインスタンスを生成します。最後に③で作成したコントラクトをブロックチェーン上にデプロイを実行します。

view側では下記のようなメソッドでコントラクト側のメソッドを呼び出します。

 たったこれだけでRailsとEthereumの連携できちゃいました。簡単!!

contract.callの後にコントラクト側のメソッドをしているすることで実行できますが、他にも contract.transact_and_wait.say() のような呼び方もできます。こちらはブロックチェーン上への書き込み処理を行う場合に利用します。トランザクションが発生し、実行が完了するまで待つことになります。call メソッドはトランザクションが発生しないので読み取り専用に利用します。

 

Ganacheを起動

アプリと連携させるためにGanacheを起動させる。まだインストールしていない場合はここからダウンロードして、インストールを。

Ganacheはイーサリアム開発用のパーソナルブロックチェーンです。

起動するだけでアカウント・残高・契約作成、ガスコスト等をGUIで確認できるのでとても便利です。

 

ブラウザで動作確認

それでは最後に動作確認をしたいのでアプリを起動しましょう。

 

起動後にhttp://localhost:3000/にアクセスして以下のような画面が表示されればOK!

EthereumSample 🔊

 

まとめ

今回、RailsとEthereumを連携させてみましたがgemがすでにあったのでとても簡単に実現できることがわかりました。

てっきり手軽にRailsと連携ができるのはNEMだけかと思っていたので良い学びとなりました。

ただまだ初歩的な処理を書いただけなのでもう少し触ってみて利用方法を学んでいきたいです。

あとzeppelin-solidityのようなライブラリを使いたい。

やろうとしたのだけどどうしてもimportがうまくできない・・。この辺りもうもう少し探ってみたいですね。

ここがクリアできれば独自トークンの発行とかも簡単にできそう!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です