ビットコインって流行っているよね。
少し前にマウント・ゴックスが破産して、
マイクロソフトが決済を取りやめにしたり

2014年から急激に下落したものの
既に当時の価格に迫ってきています。
ホットワードでもあるFintechのBitcoin、聞いたことは誰にでもありますが
実際に触った(?)、所持している人はまだまだ少数かと思います。
bitcoin APIを実際に手を動かして実装してみよう。
さて、いざBitcoinApiを使ってみると言っても
初見の場合には何がなんだかさっぱりわかんない!!だと思います。
ちょっと前までの自分と全く一緒です。
そのうちまとめますね。
railsが既にインストールされていればすぐに始められます。
railsのバージョンは特に関係ないです。
実際にmacではなくwindows10+vagrant+centos7でも問題なく動いたので
最悪macじゃなくても仮想環境で同じようなWebアプリが作成可能です。
仮想環境で仮想通貨をいじる感覚はたまりませんね。
ターミナルでデスクトップに移動してRails new しましょう。
| 
					 1 2  | 
						$ cd Desktop $ rails new walet  | 
					
もしインストールしていなければrbenvを使ってインストールしてください。
たぶんコピペで大丈夫。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22  | 
						$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/…/install )” $ echo 'export PATH=/usr/local/bin:$PATH' >> .bash_profile $ source .bash_profile $ brew doctor $ brew update $ brew install ruby-build $ brew install rbenv $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> .bash_profile $ echo 'eval "$(rbenv init -)"' >> .bash_profile $ source .bash_profile $ rbenv install -l $ rbenv install 2.2.3 $ rbenv global 2.2.3 $ rbenv versions $ ruby -v $ gem install rails $ gem install bundler $ rbenv rehash $ source ~/.bash_profile $ rails -v $ rails new wallet $ cd wallet  | 
					
今回の勉強会で使用したのはblock_ioというGemです。
このgemを使用してBitcoinAPIを手軽に操作することが出来ます。
| 
					 1  | 
						gem 'block_io'  | 
					
まずはBitcoinAPiであるblock_ioサインアップをして自分のアカウントを作成します。
実際に使うならいくらか入金しておきましょう。
config/initializers/block_io.rb にAPIKeyなどを記述します。
| 
					 1  | 
						BlockIo.set_options :api_key=> '0000-0000-8f6e-79fe', :pin => 'SAMPLESAMPLE', :version => 2  | 
					
https://block.io/
Refarenceもさほど長くないので参考にしてみてください。
APIを使って新しいアドレスを作成してみます。
今回はHomeControllerを作ってみます。
app/controller/home_controller.rb
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19  | 
						  def index     data = BlockIo.get_balance     @balance = data['data']['available_balance']     all_address = BlockIo.get_my_addresses     @addresses = all_address['data']['addresses']     price_usd = BlockIo.get_current_price     @price = price_usd['data']['prices'][3]['price']   end   def quick_send     BlockIo.withdraw :amounts => '0.0001', :from_addresses => '3LeHRsVz9U4gZqRNc52cgha4PYz37GUqtb' , :to_addresses => '3ECdULY7m1JB1h9W5LLFG9bffk8QLoLSNa'     redirect_to :back   end   def new_address     @label = params[:new_address][:label]     BlockIo.get_new_address :label => @label     redirect_to :back   end  | 
					
Viewにも記入します。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  | 
						balance: <%= @balance %>                                                         <%= @addreses %> <a href="/new_address">New Address</a> <form action="/new_address" method="get">   <div class="field">                                                                                         <label for="name">Name</label><br>     <input id="name" name="new_address[name]" type="text">   </div>   <div class="field">     <label for="label">Label</label><br>     <input id="label" name="new_address[label]" type="text">   </div>   <div class="actions">     <input name="commit" type="submit" value="Create Address">   </div> </form> <a href="/new_address">New Address</a>  <a href="/quick_send">send 0.0001 BTC</a>  | 
					
routes.rbにも記入します。
| 
					 1 2 3 4  | 
						  #get 'home/index'   root :to => 'home#index'   get '/new_address' => 'home#new_address'   get '/quick_send' => 'home#quick_send'  | 
					
ここまで来たところで、実際にbitcoin APIを使ってWebアプリを作ることになりました。
APIでどういったこと出来るかは、Documentにあるので各々作業に取り掛かりました。
https://www.block.io/api/simple/ruby
使いやすいのが、Withdrowとnewadrressやpriceなのかと思います。
そこで、今回はユーザーを作成し
そのユーザーがアップロードした画像を気に入った
そのときに自動的にアドレスを作成し
オリジナルのアドレスから希望するユーザーに
0.0001bitcoinを送金する機能を実装しました。
ビットコインを実際に扱ってみて一番感じたことは
ビットコインを扱うことが想像以上に簡単だったことです。
ちょこっとコードを書けば、仮想ではありますが実際の通貨を
送金出来てしまうことに
そして取引手数料が高すぎでした。
もちろん元々の送金額が少ないだけなので
本来は決して高すぎる額ではありません。
それでも開発中にワンクリックするたびに送金額の十倍以上も
手数料で取られていたのは笑ってしまいました。
0.0001bitcoin を送金したら
手数料は、ななんと.........
0.0030
うぉぉぉぉぉぉぉぉい!!!!!!
たけえよたけえw!!!
もちろん決してそれが高いわけではないです。
送る金額が少ないだけなんだけどね。
相対的なはなし。
でもちょっとびっくりしたので(笑)
今回の記事は
ちょっと雑だったな...
じゃあね~
