matsushinRailsでコントラクトコードを実行して、独自トークンを発行するツイートシェアはてブLINEPocket前回のDApps学習ではRailsからスマートコントラクトを動作させるサンプルアプリを作成しました。超簡単!!RailsでEthereum上のコントラクトコードを実行する2018年4月30日その際OpenZeppelinのようなライブラリの使い方がわからなかったため、今回はOpenZeppelinを利用して独自トークンを発行し、送金が行えるサンプルアプリをRailsで作ってみました!OpenZeppelinとは基本的なスマートコントラクトのフォーマットを提供するライブラリ群。導入する事で少ない作業量で実装ができるようになります。今回作ったコードはこちらにおいています。サンプルアプリでは独自トークンを自動で発行して、別のアドレスに送金する。んやっていることはとてもシンプルだけど色々ハマった・・。その代わり、その分学びがあったはず。本記事の前提RailsとSolidityでサンプルアプリを作っているため、両方の基礎知識がない方は理解が難しいかもしれません。動作させた環境は以下になります。v1.1.0サンプルアプリを動作確認してみるまずは動作させて動きを見てみましょう。いっても独自トークンを発行して送金するだけなので、だいたい想像つく方は飛ばして実装ポイントだけ見てもらえばと思います。install.env.sampleファイルをコピーして.envファイルの作成。変えてご利用ください。sGanacheを起動する最後にトップ画面(http://localhost:3000)にアクセス。エラーが発生しなければOK!それでは次に動作を確認していきましょう。動作確認トップ画面にアクセスすると2アドレス分のトークン/ETH残高が表示されます。画面アクセス時にデフォルトのトークンが発行されアドレス1に全て割り当てられます。アドレス1はGanacheが自動で発行する最初のアドレスで、アドレス2が2番目のアドレスになります。独自トークンの発行を行います。「アドレス2に送金する」をクリックして送金画面へ。送金量を入力して送金実行!アドレス1のトークン残高が減り、アドレス2のトークン残高が送金した分増えていればOK!動作が確認できたので次は自分が実装をしていく中で色々ハマったので、その辺りを整理していきます。できず困っていました。Truffleでコンパイルする事で解決できましたので手順を解説します。importして継承したクラスを少し実装しているだけのとてもシンプルなコードです。何とこれだけでERC20に準拠のトークンが作れちゃうから便利ですね。OpenZeppelinのインストール下記コマンドを実行していインストールを行う。zeppelin-soliditytruffle利用時のコントラクトの連携方法Rails側でのコントラクトとの連携部分のコードです。#{e.message}")falseendendendポイントは2点。デプロイは1度だけ行うこと。あとはデプロイ時に発行されたコントラクトアドレスを使い回す。しないとトークンの保管が初期化されてしまいます。1つはコントラクト作成時(Ethereum::Contract.create)にtruffleオプションを使うこと。することでtruffleで作成したプロジェクトを利用できるようになります。ん仕組みを考えるとデプロイは1度だけとか当たり前なのだけど・・実装することで理解が深まる。モデル名についてRails側のモデル名とコントラクトのクラス名を同じにしてはいけません。詳しくはよくわかっていないのですが、同じにしてしまうと挙動がおかしくなってしまいました。モデルのインスタンスを作るとコントラクト側のクラスのインスタンスができてしまうような感じ?これめっちゃハマった。実装のポイントについては以上です!まとめさて、今回は独自トークンの発行と送金の処理をRailsで行ってみました。昨日丸一日かけてRailsから、truffleを使って作成した独自トークンを送金するサンプルアプリを作って学んだこと。(@matsushin11)2018年5月5日Solidity側のコードはほとんど書いていないため、Solidity力はあまり上がりませんでした。スマートコントラクトの連携部分を多少書いて動かしたので、仕組みの理解に繋がりました。あとライブラリのコードリーディングをしたりしたのでERC20の仕様の理解が進んだのがよかったです。今回のサンプルアプリはトークンの発行者から決まったアドレスに送金するだけでしたが、トークンの保有者なら誰でも送金できるようにしたいです。今回のサンプルアプリではアドレス1からアドレス2に送金した後、次はアドレス2からまた別のアドレスに送金するような。この辺り実装しようとしてうまくいかなかったのですよね。StandardToken.solにあるtransferFromメソッドがうまく使えませんでした。後まだローカル環境でしか動作させていないので、本番環境の手前のテスト環境で動かして見たいです。この辺り知りたいですね〜。AMtransferFromの問題について、実装の方は解決できましたでしょうか?もし既知であれば無視していただいて構わないのですが、僕もローカルで試してみてうまく動かなくて色々ためした結果、1つの解が見つかったのでお伝えしようかと思いまして。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。新しい投稿をメールで受け取る無料で学べる!!CryptoZombiesでSolidityの学習してみた【5/5の資産公開】じわじわ上がってきた。山場はGW後?RECOMMENDこちらの記事も人気です。SDKベータ版を使ってTruffleと連携させてスマートコント...Golang2019.5.10ecs-deployでECSにアプリをCIからデプロイする〜その1〜プロフィールまつしん(matsushin)プログラミング・仮想通貨・スポーツが好き。教師を目指していたが、IT業界は伸び続けると思いその道へ。新卒でSIer→Webプログラマ→リモートワーク普段はRailsでお仕事してます。