仮想通貨サービス BitCapitalZ の日記

仮想通貨関連のブログです Ripple, Ethereum 仮想通貨2.0に注目しています

【Factom】現状公開されている API について

現在にわかに注目を集めつつある Factom の 2015/2/2 時点で公開されている api の概要を紹介致します。
Factom 自体についてはこちらの Koji さんのブログによくまとまっています。
ざっくりいうと、P2P上でデータを管理できるものです。

現在 API はアルファ版が公開されており、こちらからドキュメントをダウンロードできます

こちらが Factom のシステムのダイアグラムです

f:id:yuma300:20150202234448p:plain

Factomclient Daemon を用意してそれが http ベースの API のエンドポイントを提供するようです。

Factomclient DaemonBitcoin でいうところの bitcoind みたいなものですね。Factomclient Daemon は8088ポートで APIのリッスン、8087ポートで Factomexplorer の ウェブページ を提供します

この Factomclient Daemon はなんと golang で作られているようです。

Factomclient Daemon の用意の仕方はドキュメントをご参照下さい。

Factom にデータを保存について

Factom でデータを保存しようとするとき、以下のステージがあります。


Commit: ハッシュ化されたデータにサインをする
Reveal: サイン済みのハッシュ化されたデータをチェーンIDでソートされる
Submit: Commit と Reveal を行う

データを保存するときのステップは

1. 新しいデータを保存するためのチェーンを作成

factomexplorer (http://demo.factom.org:8087/) の Chains のプルダウンから + を選んで作成
チェーンの名前を“helloWorld ”とした場合、それに対する ChainID が“d5f39e4c4e041c37dfe0d65c7405d215924650891a689425c736e974c88d5ba0 ”になります。
“d5f39e4c4e041c37dfe0d65c7405d215924650891a689425c736e974c88d5ba0 ”は Base4エンコードされると "1fOeTE4EHDff4NZcdAXSFZJGUIkaaJQlxzbpdMiNW6A="になります。

2. チェーンの中のブロックにデータを入れる

factom­-cli (https://github.com/FactomProject/factom-cli) を用いて以下の要領のコマンドで入れます。

echo "Here is Entry data" | factom­cli ­c "d5f39e4c4e041c37dfe0d65c7405d215924650891a689425c736e974c88d5ba0" ­e "extIDforDB"

3. 入れたデータを確認

factomexplorer (http://demo.factom.org:8087/) で確認できます。factomexplorer の Explorer タブからブロックの一覧が表示されるので目的のブロックをクリックします。

チェーンの中のブロックは以下の API でも参照できます。

API:
GET http://localhost:8088/v1/dblocksbyrange/XXX/YYY

Response:
[{"Header":{"BlockID":4,"PrevBlockHash":"f2O+qd8fTqi/fmnicH7b6TsEEEJI
JnE31OHiTBAeEoE=","MerkleRoot":"3/RkucLUFUNzNKW6CeFOYHKOrRdvV4KMvOmuU
8jeT5M=","Version":1,"TimeStamp":1421371497,"BatchFlag":0,"EntryCount
":2},"DBEntries":[{"MerkleRoot":"EqDqNN/H8ZaW+A9ysYStDuvFKw4BZzKckH23
03U3Drs=","ChainID":"1fOeTE4EHDff4NZcdAXSFZJGUIkaaJQlxzbpdMiNW6A="},{
"MerkleRoot":"u4mV1kw9o87+ukRCQt1NbyB2zaOy3+t2lS2tyrEXd3I=","ChainID"
:"AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}]}]

クレジットについて

factom にデータを保存するには実際にはクレジットの支払いが必要です。クレジットの残額確認や追加は以下のAPIでできるようです。

POST http://localhost:8088/v1/creditbalance?&pubkey=wallet

{"PublicKey":"NWNGhTqjv9rAxuxdpfsgjxmmFI6y8VMSgPm8+lOMmDc=","Cr
edits":0}

POST http://localhost:8088/v1/buycredit?&to=wallet&value=100

どうも現状ではデータ保存するのにクレジットを必要とされないようで、テスト的にいくらでもクレジットが追加できるぽいです。