openassets-rubyを組み込んでbitcoinを使うrailsプロジェクトを作ってみる。
github.com
1. まずはともあれbitcoinに接続できないと始まらないので以下の記事とか参考にbitcoinの環境を構築するqiita.com
2. bitcoindを起動する。confirmationとか自由にやりたいのでregtest環境で起動する
% bitcoind -regtest -daemon
3. blockが何もないので101ブロック生成する。(※マイニング報酬は101ブロック目からもらえるので)
% bitcoin-cli generate 101
4. railsプロジェクトを生成して移動
% rails new bitcoin-sample % cd bitcoin-sample
5. Gemfileにopenassets-rubyとbitcoin-rubyを追加して
# bitcoin gem 'openassets-ruby', '0.6.5' gem 'bitcoin-ruby', '0.0.12'
↑これをGemfileにコピペ
bundle installする
% bundle install --path vendor/bundle
6. openassets-rubyからbitcoin rpcに接続するための設定ファイルを作る。以下の内容をコピペして config/openassets.ymlに保存する。
# README: https://github.com/haw-itn/openassets-ruby#configuration default: &default network: mainnet provider: bitcoind cache: tmp/cache/openassets.db dust_limit: 600 default_fees: 10000 min_confirmation: 1 max_confirmation: 9999999 rpc: &rpc <span style="color: #d32f2f">user: bitcoinrpc</span> <span style="color: #d32f2f">password: rpcpassword</span> schema: http <span style="color: #d32f2f">port: 8332</span> host: localhost mainnet: &mainnet <<: *default testnet: &testnet <<: *default network: testnet rpc: <<: *rpc port: 18332 regtest: ®test <<: *testnet network: regtest development: <<: *regtest test: <<: *regtest production: <<: *mainnet
※赤文字のところは、bitcoin環境構築の時に編集したbitcoin.confの内容と同じにする。
7. bitcoinの操作をするためのmoduleを作る。以下の内容でlib/util/bitcoin_util.rbを作成する。
require "openassets" module BitcoinUtil class << self def api @@api ||= OpenAssets::Api.new(config) end def provider api.provider end def config YAML.load_file("#{Rails.root}/config/openassets.yml")[Rails.env].deep_symbolize_keys end def reload @@api = nil end end end
8. lib/以下をautoloadして欲しいので、config/application.rbを編集する
module BitcoinRubySample class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 5.1 config.autoload_paths += Dir["#{config.root}/lib/*/"] # これを追加する
9. あとは rails c でirbを起動してBItcoinUtil.provider.listunspentでunspentが取得できるか確認。以下は実行例
$ rails c Running via Spring preloader in process 48190 Loading development environment (Rails 5.1.4) irb(main):001:0> BitcoinUtil.provider.listunspent => [{"txid"=>"c3b0010de3f00af02ccbf63519c26904b2c936a5f168625a4f44a9870ec6018f", "vout"=>0, "address"=>"mqufuvgnXTvfPu17arLvSY1VwJhTANowpe", "scriptPubKey"=>"210301e21b8ce18594be5c3d299196b59eede1f3abed3fe3cb28f02b41d976ae5ce7ac", "amount"=>50.0, "confirmations"=>101, "spendable"=>true, "solvable"=>true}]
以上で、とりあえずbitcoinを色々操作できる環境は完成。
それぞれのライブラリとしては次の通りの役割で使ってます。
・bitcoind - bitcoinの本体実際の処理のほとんどはこいつがやる(bitcoinネットワークにブロードキャストとかblockとってくるとか)
・bitcoin-ruby - rubyのclassでblockとかtransactionとか扱うためのライブラリ群。今回はopenassets-rubyが依存してるので入れてるだけで直接は使ってない。
・openassets-ruby - openassets protocolのruby実装。colord coinを取り扱うためのライブラリとかあるらしい。まだ使ったことないから詳しくはわかない。今回ではOpenAssets::Apiクラスが内部でbitcoindとRPCで色々やりとりできるのでそれを使ってbitcoinの情報にアクセスするために使いました。
openassets-ruby使ってcolord coinの発行とかもそのうち書きます。