怠け者仕事

三日坊主にならない程度に備忘録

#100daysofcode 6 兼RailsからJSON-RPCでEthereumにつなぐ

ethereum.rbを使えばよいんじゃないかって気もするけど、RubyRailsも勘で書いている人に向けて



簡単に手順



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を使用するのはなんだかめんどくさそう・・・。と思っていた。

 

やっと、今日になってやり方を調べたところ・・・

 

qiita.com

 

非常に素晴らしい内容が・・・!!

ってかいつのまにか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をやり直す。

www.udemy.com

 

今日はSection2の9まで。

導入と環境の構築、変数の説明まで。

 

飛ばしたい内容だけど、基礎からしっかりやり直したいのでしっかりと聞いてみる。

(読了)

読み終わったのでメモ

 

www.amazon.co.jp

為になったこと

  • 「睡眠の90分サイクル」は個人差がある上、睡眠直後と起床直前では入れ替わりのサイクルが異なるため、あまりあてにしない
  • 入眠には体の深部温度と表面温度の差が鍵となる
  • 翌日普段よりも早く起きなければいけない場合でも、入眠時間は普段と変えない方が良い
  • 「昼食後に眠くなる」は昼食の有無に関係ない
  • 午後眠くなることの原因は定かではないが、著者は昼食を控えめにすることを意識している

 

知ってたので読み飛ばしたところ

  • 寝る前のスマホは良くない
  • 仮眠は効果がある
  • ただし長すぎると逆効果