LoginSignup
17
10

More than 5 years have passed since last update.

OpenAsset入門

Posted at

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の情報が落ちてしまう可能性あり。

参考

17
10
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
10