#100daysofcode 6 兼RailsからJSON-RPCでEthereumにつなぐ
ethereum.rbを使えばよいんじゃないかって気もするけど、RubyもRailsも勘で書いている人に向けて
簡単に手順
①JSON-RPCのAPI一覧を参考に、Ethereumを操作したい内容をcurlで書く
JSON RPC · ethereum/wiki Wiki · GitHub
お試し用に
curl -H 'Content-Type:application/json' -X POST http://localhost:7545 --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":,"id":1}'
②curlコマンドをRuby用に変換してくれる便利サイトに張り付ける
curl-to-ruby: Convert curl commands to ruby's net/http
すると
require 'net/http' require 'uri' require 'json' uri = URI.parse("http://localhost:7545") request = Net::HTTP::Post.new(uri) request.content_type = "application/json" request.body = JSON.dump({ "jsonrpc" => "2.0", "method" => "web3_clientVersion", "id" => 1 }) req_options = { use_ssl: uri.scheme == "https", } response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http| http.request(request) end
のように変換してくれるので、
取得したJSONをresultに取得して、必要な部分をsourceに格納する。
begin # responseの値に応じて処理を分ける case response # 成功した場合 when Net::HTTPSuccess # responseのbody要素をJSON形式で解釈し、hashに変換 @result = JSON.parse(response.body) # 表示用の変数に結果を格納 @source = @result["result"] end end
をcontrollerに追加してあげて、
後はviewに
<p> source: <%= @source %> </p>
とでも書いてあげれば
source: EthereumJS TestRPC/v2.1.5/ethereum-js
のような表示が出るはず。
#100daysofcode 5
Javascriptを離れて別のことを・・・。
現在会社でRubyを少し触っている。
世に出すWEBサービスを作るとかではなく勉強会レベルのもので、RailsとEthereumを使用した(一応)ブロックチェーンを使用したポイントサービスというもの。
会社で時間をとって、AWSの環境ももらって少しずつやていたが、どうもRails側とEthereumの接続がうまくいかない。
具体的にはスマートコントラクトの呼び出しで、JSON-RPCをたたいてどうにかしようとしているが、そもそもGethが安定せず、なぜかすぐ落ちる。
Gethがうまく使えないとRailsからのスマートコントラクト実行が検証できず、作業が進まない・・・。
というか、ここ1カ月(実際は4日ぐらい)は作業が進んでいない状態。
このまま無駄に遊んでいても仕方ないので、Gethの部分は他のメンバーに任せ。
自分はAWSではなくローカルPC環境でササっと動く環境を作り、検証を行う方針となった。
Railsの構築はAWSのCloud9を使用していたので、正直Railsの環境セットアップはまじめにやってなかったし、自宅PCのWindows10でRailsを使用するのはなんだかめんどくさそう・・・。と思っていた。
やっと、今日になってやり方を調べたところ・・・
非常に素晴らしい内容が・・・!!
ってかいつのまにかLinuxが使える機能って正式に実装されてたんだ。
ということに今更感動しているところ。
OSは、仕事でRedhatを使用しているからCentOSがあれば一番使いやすいけれど、選択肢にないので仕方なくUbuntuをインストール。
で、一個注意点。
$ gem install bundler
ERROR: Could not find a valid gem 'bundler' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - timed out (https://api.rubygems.org/specs.4.8.gz)
とエラーが出た場合は、
ruby on rails - gem update --systemがタイムアウトします。 - スタック・オーバーフロー
にあるようにIPv6を無効化してやりましょう。
以上
#100daysofcode 3
盛大に体調を崩してたので久しぶりに・・・。
今日は会社で進めているブロックチェーン関連を進める。
Ruby on Railsからコントラクトを呼び出そうとしているけど、今日進めようとしたら、そもそもブロックチェーンにつながらなくなってしまった。
Cannot start mining without etherbase err="etherbase must be explicitly specified"
Fatal: Failed to start mining: etherbase missing: etherbase must be explicitly specified
と出る。
geth起動オプションの --minを外し、miner.setEtherbase("ユーザのアドレス")をしてからminer.startすれば起動するけど、毎回これをやらないとうまくいかない・・・。
明日以降も適当に進めてみるけど、もうtruffleとganacheだけで進めた方が楽な気がしてきた。
#100daysofcode 1
結局3日坊主になってたので再開。
しっかりとプログラミングを勉強しなおすためにUdemyでJavascriptをやり直す。
今日はSection2の9まで。
導入と環境の構築、変数の説明まで。
飛ばしたい内容だけど、基礎からしっかりやり直したいのでしっかりと聞いてみる。