post Image
OpenAsset入門

bitcoinの流通の仕組みであるブロックチェーンを拡張して、bitcoin以外に色々な情報を付けることが可能になる「OpenAssetProtocol」の使い方をご紹介します。

bitcoinそのものの入門につきましては、こちらをご参照ください。

導入

標準のbitcoinのブロックチェーンでは、bitcoinの送金や残高照会等しかできません。例えば、金融取引でよくある「借用書」や「利子」の扱いなども現在の仕様では困難です。
但し、幸いなことに、bitcoinのブロックチェーンには拡張領域が準備されてあり、それの使い方を定める一つの方法として「OpenAssetProtocol」があります。このようなbitcoin互換の拡張仕様の総称を「カラードコイン(色つきコイン)」と呼び、現在世界中で標準化の取り組みがなされています。
その中でも、このOpenAssetは、比較的実装がシンプルでライブラリも充実していますので、ここでは、そのRuby実装版について、使い方をご紹介します。

公式サイト:https://github.com/haw-itn/openassets-ruby

実行環境・前提

  • MacBook Pro (Retina 13-inch、Early 2015)
  • Mac OSX El Capitan (10.11.3)
  • bitcoind v0.12.99
  • openassets-ruby v0.4.6
  • ruby 2.2.2 (rvm利用)
  • 実行日 = 2016-06-02

ダウンロード&インストール

ターミナルから以下を実行してください。

% git clone https://github.com/haw-itn/openassets-ruby.git
% cd openassets-ruby
% bundle install   (または、bundle update)

bitcoinについては、こちらを参考にしてください。

インストール時のトラブルシュート

  • bundleが存在しないとき:最初に「gem install bundler」を実行してください。
  • rubyのバージョンが合わないとき:先にrvmかrbenvを導入してください。(方法は割愛します)
  • rvmをお使いの方で、OpenSSLに関してエラーが発生するとき:以下をお試しください。rubyインストール時にdisable-binaryオプションを付けない場合、SSL接続時に端末内部の証明書リストを参照してしまうそうで、もし証明書更新がされていない場合、SSL接続ができなくなります。
% rvm osx-ssl-certs update all
% rvm install 2.2.2 --disable-binary

<こういうケース>

osada@mbp16a% ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"
"/etc/openssl/cert.pem" # <- rubyの使う証明書

osada@mbp16a% /usr/local/etc/openssl/cert.pem # <- 期待値

動作確認

今回はirb経由で使い方を学びます。Webアプリケーション等から使う場合は、本サイトの後半をご覧ください。

bitcoinの準備

bitcoindを動作させておいてください。(参考:こちら

※テンポよく動作検証したい場合は、スタンドアロンで動作するregtest環境かzero-confirmation(別途説明)の利用をご検討ください。

OpenAssetAPIの準備

最初に、OpenAssetProtocolのAPIを受け付けるインスタンスを作成します。
以下はtestnetのbitcoinのブロックチェーン上で動くAPIです。

% irb
> require 'openassets'  # <- コレ
> require 'pp'          # <- 画面表示整形用のオマケ
> # APIの作成
> api = OpenAssets::Api.new({:network => 'testnet',
>                      :provider => 'bitcoind', :cache => 'testnet.db',
>                      :dust_limit => 600, :default_fees => 10000,  
>                      :min_confirmation => 1, :max_confirmation => 9999999,
>                      :rpc => {:user => 'osada', :password => 'abc123', 
>                      :schema => 'http', :port => 18332, 
>                      :host => 'localhost'}})                      

アセットの残高照会

> api.get_balance

アセットの発行

アセット(例えば独自通貨)を新規に生み出します。以下の例では、oa_addrのアドレスについて、量が150のアセットを発行しています。第三引数にURLがついていますが、ここにはアセットに関する情報(小数点の位置や利用期限など規約)を記載することができます。

> oa_addr = 'akEJwzkzEFau4t2wjbXoMs7MwtZkB8xixmH'
> api.issue_asset(oa_addr, 150, 'u=http://hogehoge.com', oa_addr, nil, 'broadcast')
  • ここで、oa_addrとはOpenAssetProtocolで使うアドレスを指します。bitcoinのアドレスとは異なりますのでご注意ください。このアドレスは、get_balanceなどで確認することができます。
  • oa_addrの実態は、bitcoinのアドレスから計算されたものですので、bitcoinアドレスと一対一対応になっています。
  • アセットには”asset_id”が自動で設定されます。このIDを使って、アセットの種類を管理します。このIDは、get_balanceなどで確認することができます。
  • OpenAssetは、bitcoinのブロックチェーン上で動作するため、取引の一つである「アセットの発行」が確認(confirm)されるまで、利用(確認用の表示なども)することができません。
  • 第5引数以降は今は気にしなくて構いません。

アセットの送付

> oid = 'oZHPr3qzQHG63fPdyeKexdHx72HuRR2wML'
> from = 'bWzjcndf7TriQ46AUsgSvvZPDC5a6ukqnEQ'
> to = 'bXDUsHqNmNCtHWkd7uW4AUWaHvg8TvQP9Jc'
> api.send_asset(from, oid, 100, to, 10000, 'broadcast')

100は、assetの量。10000はトランザクション手数料です。

発展・議論

(別途まとめて記載します。)

付録

類似用語の理解

  • ワレット(Wallet)とアドレス(address)の違い
    0個以上のアドレスの集合体をワレットと呼ぶ。bitcoin送受信にはワレットではなく、アドレスを送受信の指定先に使う。ワレットの存在意義は、アドレスの管理。

  • アカウント(Account)とアドレス(address)の違い
    アカウントは、アドレスの備考欄の位置づけ。所有者や用途を書いていおくイメージ。アカウントは空白文字でも良い。アカウントを指定して送受信はできない。送受信に指定できるものは、あくまでアドレスのみ。

  • アドレス(address)とOAアドレス(oa_address)の違い
    前者はbitcoin送受信用、後者はOpenAsset送受信用。OAアドレスは、アドレスから計算によって求められるため、一対一対応である。では、なぜ、OAアドレスが存在するのか。その理由は、bitcoin/OpenAssetを送信するときに、間違えないようにするためだとか。

  • AssetIDのイメージ
    Assetの用途、マークといったもの。他のAssetと区別をするために使う。

  • BitcoinとOpenAssetProtocolの違い
    Bitcoinは、世の中で仮想通貨として価値があると考えられているもの。OpenAssetは、Bitcoinのおまけで付いている負荷情報。5円玉(bitcoin)にシールで紙(OpenAsset)が貼ってあるようなもの。

  • Bitcoinから見たOpenAssetProtocolの振る舞い
    OpenAssetの情報は意識しないため、ただのbitcoinが送受信されているだけに見える。そのため、OpenAssetを理解しないノードを経由するときには、OpenAssetの情報が落ちてしまう可能性あり。

参考

http://techmedia-think.hatenablog.com/entry/2015/05/03/190805


『 Bitcoin 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。