今回は、Bitcoind 2.0プロジェクトとされてるColored Coinsの環境を作ってみる。
※Colored Coinsというのは、Bitcoinに色を付加することで、Bitcoinに様々な意味付け(価値付け)を可能にするプロジェクト。
関連する要素技術
- Open Assets Protocol
Colored Coinsのコンセプトを発展させた、Bitcoinのブロックチェーンの上に構築されるプロトコル。ユーザが作成したアセットの流通を可能にするColoed Coninsの実装。
Open Assets Protocolの仕様は↓
OpenAssets/open-assets-protocol · GitHub
- openassets Python module
Open Assets Protocolの参照実装。Pythonで実装されてる。OpenAssets/openassets · GitHub
- Colorcore
Colorcoreは、Open Assets Protocolと互換のあるColord Coinsのウォレット。コマンドラインとJSON/RPCのインターフェースを提供する。OpenAssets/colorcore · GitHub
openassets Python moduleのセットアップ
前提としてPython 3.4とpipを入れて下記ライブラリをインストール。
$ sudo pip3 install python-bitcoinlib ... $ sudo pip3 install openassets ...
Colorcoreのセットアップ
必要なソフトウェアをインストール
$ git clone https://github.com/OpenAssets/colorcore.git ... $ cd colorcore $ sudo pip3 install --upgrade -r requirements.txt ...
また、bitcoindが-txindex=1 -server=1のオプションで起動されてる必要がある。bitcoin.confに
... txindex=1 server=1 ...
と定義されてあれば大丈夫。
続いてconfig.iniファイルを編集。
... [bitcoind] # Replace username, password and port with the username, password and port for Bitcoin Core # The default port is 8332 in MainNet and 18332 in TestNet # rpcurl=http://user:password@localhost:8332 ...
このuserとpasswordの部分をbitcoin.confに定義しているrpcuserとrpcpasswordと同じ内容にする。(別のホストで動作してる場合はlocalhostの部分も書き換える)
colorcoreを使った操作
利用可能なコマンドは
$ python3 colorcore.py -h
で表示される。現在利用可能なコマンドは、
- server
ColorcoreのJSON/RPCサーバを起動する。起動するポートはconfig.iniにて設定可能でデフォルトは8080。
起動すると、
"http://対象のホスト:8080/操作コマンド"
の形式でPOSTリクエストを送ると(GETは許可されない)操作コマンドが実行される。コマンドに引数がある場合は、引数をリクエストのBodyに含める。 - getbalance
有効な自分の全てのBitcoinウォレットからbitcoinとcolored coinのアセットの資産を取得する。 - issueasset
アセットを発行するためのトランザクション(Bitcoinの標準のトランザクション)を生成する。
発行の際は、ウォレットに指定したアドレスの秘密鍵を保持してる必要があるのと、アセットの発行を成功させるために最低でも0.000006 BTCをそのアドレスに持っている必要がある。 - listunspent
未使用のトランザクションのアウトプットの配列を取得する。各アウトプットのアセットIDと量が分かる。ちなみに未使用のアウトプットじゃないと支払いに使えない。使用済みのアウトプットを利用すると二重支払いになる。 - sendasset
アセットを別のアドレスに送るためのトランザクションを生成する。 - sendbitcoin
Bitcoinを別のアドレスに送るためのトランザクションを生成する。 - distribute
トークンを作成するのと、作成したトークンをcrowdsaleの参加者に配布するために使う、トランザクションのバッチを生成する。
(crowdsaleというのは独自に発行したコインをビットコイン払いで販売し、開発費用等を捻出するBitcoinを使った新しいクラウドファウンディングのことらしい。)