Crypto Life

Tech in X

ブロックチェーンを中心にテクノロジーや東南アジアのスタートアップ情報を提供

Proof of Workってなんだろう?

f:id:steinith310:20170218212030j:plain
Bitcoinを勉強していると必ず出てくるワード、「Proof of Work」。「仕事の証明」ってなに?、タイムシートのこと?と思われる方も多いかと思います(いない)。自分の中でも細かな点はモヤモヤがあった部分ですので、今回はこのProof of Workを少し深掘りして説明することで、モヤモヤを解消していこうと思います。

Proof of Workの辞書的定義

まず言葉の定義からしたいと思います。Bitcoin界の聖書、サトシナカモト論文では次のようにProof of Workを記載しています。

The proof-of-work involves scanning for a value...The proof-of-work (also) solves the problem of determining representation.

「Proof of Workはある値を探し出すという行為である。(中略)これにより、(分散型ネットワークで)一意に合意するという問題を解決する」(ざっくり訳)


ここでいう「一意に合意する」とは、「トランザクションを含んでいるブロック」を一意に確定させることを指しています。それでは、まず一意にブロックを確定させるアプローチの概要を説明し、その次に技術的にどのように実現しているか(ある値とは何か?どのように探し出すのか?)を確認していこうと思います。

Proof of Workの概要

まずはBitcoinの取引の流れを振り返り、そこから生じる疑問を解決することでProof of Workによって、どのようにブロックが確定するの確認していこうと思います。

Bitcoinの取引の流れ

まず、Bitcoinの取引の流れを簡単におさらいします。


最初にBitcoinの送金者は送金内容をネットワーク上にアナウンスします。アナウンスされた送金内容は各ノードで検証され、取引内容に問題がなければ各ノードで保存されます。非常に単純な仕組みですが、この仕組みだけでは二重送金の問題を解決できていません。


例えばAさんがBさんに対して1BTCを送金した後で、Aさんが同じコインを利用して、1BTCをCさんに送金したとします。このとき、各ノードとしてはA→Bの取引と、A→Cの取引のどちらを正当なものと扱うかを決めないといけません。ノードによって正当な取引が異なっていると、決済ネットワークとしての機能を果たせていないことになってしまいます。


アプローチとしてはいくつかありますが、まず一番に考えつくのは、最初に受信した取引を正当なものとして扱うというアプローチです。しかし、Bitcoinには中央集権のサーバはなく、分散ネットワーク上で各ノードが取引内容を検証するので、あるノードはA→Bの取引を正当なものとして扱い、別のノードはA→Cの取引を正当なものとして扱うという状態になってしまう可能性があります。


逆に、「受信したタイミングではなく、送金したタイミングを基準に正当性を確認すればよいのでは?」と考えることもできるかもしれませんが、送金時間は送金者が自由に変更できてしまうので、いつまでたっても取引が安全ではないことになってしまいます。


このように送金した時間や受信した時間など、「タイミング」を基準に取引の正当性を保証することは、分散型ネットワークでは難しいことがわかります。

ブロックチェーンとPoWによるトランザクションの確率的証明

そこで、Bitcoinでは「タイミング」を取引完了の基準に利用せず、「取引が台帳に含まれているかどうか」を基準とするというアプローチで解決しています。つまり、ブロックチェーンという各ノードが管理する台帳を作成し、その台帳に記載されている取引を正当なものとして扱う、というアプローチです。


もちろん、すぐに疑問がわいてくるかと思います。受信したタイミングを基準にしていたときと同じように、「どうやってブロックチェーンを全員同じ形で保有するんだ」という疑問です。ここで登場するのが、マイニングという概念です。冒頭で触れた「ある値を探し出す」という問題を解くことができたノードのブロックを正当なブロックとして定義することで、全員が同じブロックチェーンを参照できる仕組みにしています。この問題を解く一連の行為をマイニングと呼び、マイニングを行うノードをマイナーと呼んでいます。


これで一件落着しそうですが、もうひとつ問題が残っています。「問題を解くことができたブロックを正当なブロックとするアプローチ」では、ほぼ同じタイミングで問題を解くことができたノードが複数現れた場合に、各ノードはどちらのブロックをブロックチェーンにつないだらよいか判断できません。


もちろんこのことをBitcoinでは想定しており、各ノードはどちらのブロックも正当なものとしてブロックを取り扱い、保持することにしています。そして、一番長いブロックチェーンを正当なものとして定義しています(正確には累積Difficultyが最も大きなチェーン)。


以下の図を使って簡単に説明します。まず、最初に受け取ったブロック(ブロック3 (A))をブロックチェーンにつなぐとともに、2番目に受け取ったブロック (ブロック3 (B))はセカンダリチェーンという領域に格納されます (下図のInitial Condition)。

f:id:steinith310:20170218182740j:plain

各マイナーはどちらのブロックに対して次のブロックを繋ぐかを決定した上で、マイニングを実施します。仮にあるマイナーがセカンダリチェーンのブロックに対してマイニングを行って、一番最初にブロックを発掘したとします。マイナーはそのブロックをBitcoinネットワーク上に通知し、各ノードはそのブロックを検証した上で受け入れていきます。セカンダリチェーンに格納されていたブロックは、プライマリブロックチェーンに移動し、そのブロックに対してマイナーが発掘した新ブロックを繋ぎます。


このようにブロックチェーンは時に分岐し、プライマリブロックチェーンの入れ替えが起こることを許容した仕組みになっています。ブロックチェーンの分岐は過去のどの時点に対しても発生しうるので、Bitcoinは取引を100%は保証できない仕組みになっています。ただ、このことがBitcoinの欠点かというとそんなことはありません。ブロックの作成には次の章で説明するように計算量が必要になり、過去のブロックを変更してあるトランザクションをなかったことにすることは、そのトランザクションを含むブロックから現在のブロックに至るまでの計算量と同じだけの計算量を必要とします。そのため、ブロックが蓄積されるにつれて実質的に100%に近い確率でトランザクションを保証できます。


ナカモト論文内で確率的な証明がされていますが、例えばトランザクションを覆そうとする悪意を持った人がマイニングパワーの10%を保有している場合でも、5ブロック蓄積されれば0.01%の確率でしかそのトランザクションが覆されることはありません。

Proof of Workの技術的な実現方法

次にProof of Workの核となる、「Work」 とはどのようなものなのか、技術的な点も含めて確認していきます。


Bitcoinにおける「Work」のオリジナルな解説は、ナカモト論文でも参照している以下の論文で紹介されています。どのようなものかというと、「先頭N桁が0であるハッシュ値が見つかるまで、ブロックヘダー(ブロックの要約情報)に対してひたすらハッシュ値の計算を行うというものです。
http://www.hashcash.org/papers/hashcash.pdf


ブロックヘダーにはトランザクションを要約した情報(マークルツリー)、ハッシュ値の何桁目までが0である必要があるかを決定するDifficultyなどの情報とともに、Nonceとよばれる情報が保持されています。このNonceを変更しながらブロックヘダーに対してハッシュ計算を繰り返すことで、先頭N桁が0になるハッシュ値を探していきます。なお、桁数Nを決めるDifficultyは2016ブロックごとに計算し直され、約10分でNonceが発見されるように調整されます。


ハッシュ計算のイメージ
f:id:steinith310:20170218175223j:plain


このWorkには重要な特徴があり、最も早く先頭に0がN個並んだハッシュ値を見つける特殊な解法(アルゴリズム)があるわけではなく、ブルートフォース、つまり総当たりをするしかないという点です。これにより、アルゴリズムの優越ではなく、純粋に計算量の多寡に基づいてハッシュ値が発見されることになります。


また、ブロックに含めるトランザクションを変更することで、ブロックヘダー内のマークルルートの値は変化しますので、計算結果として必要なNonceは各マイナーによって異なります。これにより、基本的には計算量の多寡に基づきつつも、必ずしも計算量が多くはないマイナーでもブロックを発掘するチャンスがあります。例えば、計算量の多いマイナーAが取り込んだトランザクションをもとにして作成したブロックヘダーはNonceが1,000,000,000,000,000,000、マイナーBが取り込んだトランザクションをもとにして作成したブロックヘダーはNonceが10の場合、Nonce=0から順番にハッシュ値を検証していった場合は、マイナーBが(計算量にあまりにも差がある場合は負けるかもしれませんが)勝利することになります。


つまり、試行回数を多くすれば計算量の割合に応じて発掘できるブロック数が決まるものの、一回一回の試行では誰でも発掘できるチャンスがある仕組みになっています。ルーレットを続けていくと最終的には確率通りの割合で勝率が決まってきますが、一回一回の試行では2の黒とか3の赤とかどれが出るかはわからないのと同じです。


この計算には大量のメモリは不要で、純粋にコンピューティングパワーのみが必要になってくるので、一般にこのマイニングにはASICとよばれるハッシュ値の計算に特化したハードウェアが利用されます。ASICはハッシュ計算のスピードが圧倒的に早いため、一般のCPUやGPUを使用したPCではマイニングで勝利することはほとんど不可能と言われています。


一方、Ethereumなどで使用されているWorkは、計算に大量のメモリを必要とする仕組みにしています。そのため、ASICを利用したマイニングが原則できない仕組みになっています。思想的には、資本が少ない個人は資本投資ができないためマイニングによる利益を全く享受できない一方、資本の多い特定のマイナーのみが集中的にマイニング利益を得ることができるのは、富の偏りを産むとともに、特定のマイナーが取引の承認行為を支配することによりネットワークの安全性が低下するという発想があるようです。


ASICを利用できる場合の収益イメージ
f:id:steinith310:20170218191453p:plain

まとめ

トランザクションを含んでいるブロックは、マイナーたちによる何百万回ものハッシュ値の計算により作成(=発掘)されています。そのブロックを覆すためには、そのブロックから現在のブロックまでを計算したのと同じだけの量の計算量が必要となります。まとめると、この計算量によるブロックの正当性の保証のことをProof of Workとよび、これによりそのブロックに含まれるトランザクションが確率的に確定するという仕組みになっています。

ヘッジファンドによるMt Gox債権買取からBitcoin価格を予想してみる

f:id:steinith310:20170215134907j:plain
久々にみんな大好きMt Goxニュースです。


日米のヘッジファンド数社が、Mt Goxに対する債権保有者から債権額の4分の1で債権の買い取りを始めたようです。買い取りを始めたのは、Argo PartnersというNew Yorkに拠点を置くヘッジファンドなど4社で、破産、清算した会社に対する債権に対する投資をメインにしているヘッジファンドのようです。

FTの記事(会員登録が必要)
https://www.ft.com/content/821ae69a-f0d1-11e6-8758-6876151821a6
Coindeskの記事
http://www.coindesk.com/bitcoin-hedge-funds-reportedly-racing-buy-mt-gox-claims/

買い取り仲介サイト
MyGoxClaim.com – Help and information on selling your MtGox bankruptcy claim.


買い取りの内容

ヘッジファンド各社は各債権者が申し立てている債権額の15%の値段で、債権を現金で買い取ることを表明しているようです。「現金」、しかも「債権額の15%」で買い取るという点がポイントで、今のレート(1BTCあたり約1000ドル)を考慮すると、もしBitcoin建てで返還された場合は、ヘッジファンドは大きな利益を得ることができます。なお、債権額はMt. Goxが破産手続きを開始した際の市場価格である、438ドルで計算されています。


最終的に債権者にBitcoinで返金するか、現金で返金されるかは未だ決まっていませんが、ヘッジファンドとしてはBitcoin建てで返金されることを期待して賭けに出たわけです。喪失したBitcoin約85万BTC、そのうち現在回収できた(というか、主にウォレットに入っていたのに気づいた)Bitcoinの額は約20万BTC(202,185BTC、2016年9月21日時点)ですので、仮にBitcoin建てで返金されるとするとMt Gox破産時に保持していたBitcoinの4分の1(20万 / 85万 = 23.5%)はそれぞれの債権者に返還されることになります。


ただ、北米での事業をめぐってCoinLabなどからMt Goxは訴訟を受けており、この訴訟が完了するまでは債権者にBitcoinまたは現金が分配されることはありません。また、CoinLabが仮に勝訴して全額債権が認められた場合は、7,500万ドルがMt Goxに対する債権額として増えることになるため、ヘッジファンドの取り分は目減りします。


いずれにせよ、Mt Goxの債権者としては、現在のタイミングでヘッジファンドに売却して損失額を確定させるか、このままキープしてBitcoinを回収(もしくは現金回収)することに賭けるかという選択肢が生まれたわけです。

ヘッジファンドは儲かるの?

買い取る側のヘッジファンドですが、どれくらい儲かる想定で買い取りを始めたのでしょうか?いくつかのパターンに分けて、ヘッジファンドの取り分をシミュレーションしてみました。

前提
  • 2019年2月 (2年後) に債権者への分配が実施される
  • MtGox破産時のレート: 438ドル
  • 現在のレート: 1011ドル
  • ヘッジファンドは債権額の15%で現金買取
  • ヘッジファンドが買い取った債権額は100 BTC (= 43,800ドル)、買取額は6,570ドル (=43,800×15%)とする
  • ヘッジファンドの管理コストや資金調達コスト、税金などは無視する
パターン1 CoinLabの請求棄却 + BTCで債権者に分配

この場合、債権額 (BTC建て)の約25%が債権者に返還されることになります。上記前提で計算すると、6,570ドルの投資に対して、25,275ドルヘッジファンドの収益となります。収益性を図る指標である、IRR(内部収益率)を計算すると、IRRは96%となります。ヘッジファンドのIRRは良くても30%程度ですから、十分すぎる収益を手に入れることができます。
世界のPEファンドはどのくらいのIRRなのか?|王子の備忘録ブログ


パターン2 CoinLabの請求棄却 + 現金で債権者に分配

パターン1との違いは現金建てで債権者に債権額が返還されることになる点です。このとき、債権額はMtGox破産時のレート(1BTC=438ドル)で計算されることが予想されますので、パターン1よりも収益が悪化します。ただし、Bitcoin価格がMt Gox破産時の倍以上に高騰しているので、Bitcoin建てでは25%の返金だったのが、日本円建て(もしくはドル建てで)で計算すると債権額の約50%が返金されることとなります。


結果として、21,940ドルヘッジファンドの収益となり、IRRは83%となります。


パターン3 CoinLabの請求容認 + BTCで債権者に分配

この場合、7500万ドル分を破産財団から差し引いた上で、ユーザの取り分を計算する必要が有ります。本来は7500万ドル全額が破産財団から引かれるのではなく、通常の債権同様Mt Goxに対する全ユーザの債権総額に対して債権額を按分した割合分だけ引くのかもしれませんが、破産法の規定がよくわからないので、一旦7500万ドル全額が優先して回収されてしまう前提で計算しています。


計算すると、15,244ドルヘッジファンドの収益となり、IRRは52%となります。


パターン4 CoinLabの請求容認 + 現金で債権者に分配

計算すると、14,043ドルヘッジファンドの収益となり、IRRは46%となります。


現在のレートを前提にすると、どの想定パターンでもヘッジファンドは大儲けできそうです。
ちなみに、パターン1「CoinLabの請求棄却+BTCで債権者に分配」パターンの場合は、2022年までにBTCで支払いが行われれば、現在のレートであればIRR30%を維持できそうです。一番収益性の悪いパターン4であったとしても、2020年中頃までに支払われればIRR30%を維持できそう。

価格の予想とまとめ

ヘッジファンドめちゃくちゃ儲かるやん」と思ってしまいそうですが、ここまでの話はBitcoin価格が今現在の水準をキープするという前提での話でした。例えばBitcoin価格が500ドルになるという前提で計算をすると、パターン3とパターン4では赤字になってしまいます。


個人的には裁判でCoinLab側の主張が認められることは見込み薄なんじゃないかと思っているので、パターン3と4を除いた最悪パターンである、パターン2でギリギリ黒字を保てるラインを調べてみると、約300ドルとなります (IRR≒0%)。実際には、資金調達コスト、人件費などがあるため、IRR=5%を最低ラインとすると、パターン2での採算ラインは380ドル近辺になります。このあたりの値段がヘッジファンドが考える今後数年での最低ラインかなと予想してみます。


冒頭のFTの記事ではBitcoin建てでの返金にヘッジファンドがギャンブルしたとしていましたが、返金方法はあまり大きな差ではなく、どちらかというと「債権額の返還までの期間」、「Bitcoin価格」、「裁判の行方」に賭けているといえそうです。いずれも予想が難しそうな変数なので、ギャンブルには違いありませんね。

怪しいアルトコインを見分ける3カ条

f:id:steinith310:20170212171801j:plain
あるアルトコインがBitcoinとどのような点が異なるかを測定する尺度として、Mastering Bitcoinの中では以下の3項目が紹介されていました。

  1. マネタリーポリシー
  2. コンセンサスメカニズム
  3. 特有の機能(匿名化、Ethereumなどのプログラム実行プラットフォームなど)


本の中では、これらの要素が並列なものとして記載されていますが、各要素とマーケット評価との関係には差があるかと思います。有名なアルトコインの特徴とその現状を確認していくことで、どの要素がマーケット評価に直結するかを確認していこうと思います。なお、統計的な分析は全くしていないです笑

Mastering Bitcoin

Mastering Bitcoin

そもそもアルトコインってなんだ?

アルトコインとは、Bitcoin以外の暗号通貨のことを指します。暗号通貨はBitcoinの発明により登場した分散型の通貨のことですが、今ではBitcoinだけではなく500種類以上の通貨が開発されています。有名どころでいうと、Bitcoinと瓜二つのLitecoinやCoinの送金以外の機能を付与したEthereum、NEMなどがあげられます。


2016年末時点でのアルトコインの時価総額ランキング
cryptocoin.hatenablog.com


BitcoinやLitecoinのソースコードは公開されており、それをもとにして誰でも新規にアルトコインを開発することができるので、魑魅魍魎がはびこる怪しげな世界になっています。


マネタリーポリシー

それでは、個々のアルトコインを特徴付けるポイントを一つずつ見ていきたいと思います。まずはマネタリーポリシーから。


マネタリーポリシーとは、通貨価値が次第に上昇していくデフレ型に設計されているか、あるいは次第に通貨価値が下落していくインフレ型に設計されているかという通貨供給面での特徴を指します。これは主にコインを発行するタイミングや発行量に依存して決まります。BitcoinやLitecoinは2100万BTC (8400万LTC) が上限に定められておりデフレ型に設計されている一方、Ethereum(時価総額2位)やMonero(時価総額5位)のように発行上限が定められていないインフレ型通貨(または非デフレ型)もあります。

Bitcoinの供給イメージ
f:id:steinith310:20170212142559p:plain

Ethereumの供給イメージ
f:id:steinith310:20170212161426p:plain

Ethereumは時価総額が暗号通貨界で2位と主要なポジションを占めていますが、その評価の理由は分散型のプログラム実行基盤としての役割であり、マネタリーポリシーがBitcoinと異なるからという理由ではありません。また、Ethereum同様にインフレ型で設計されていたFreicoinは、一時高騰したものの、今では時価総額9BTCとほとんど価値がない通貨になってしまいました。
f:id:steinith310:20170212162624p:plain

逆にこれといった特徴がないコインはデフレ型で設計すればうまくいくのかというと、暗号通貨上位ランキングに顔を出している通貨はBitcoinの機能以外の何かしらの特徴があるのが現実。デフレ型で設計しても、Bitcoinと同じものが出来上がるだけなので、当然といえば当然です。


唯一の例外は、Litecoin (時価総額4位)でしょうか。LitecoinとBitcoinの違いは、Litecoinの通貨供給量Bitcoinの約4倍である点と、PoWアルゴリズムにScriptを使用している点ですが、このことがLitecoinを現在の地位に押し上げているとは言い難いでしょう。


Litecoinは「Bitcoinの2番手コインとして、発行タイミングが良かったという偶然」と、「SegWitをBitcoinに先駆けて実装することが期待されるなど、実際に動くBitcoinのテストネットとしての役割」という2点が、今のLitecoinのポジションを築いている理由かと思います。

コンセンサスメカニズム

Bitcoinではどの取引が正当なものであるかを判別するために、PoW (Proof of Work)という仕組みが用いられています。これは取引が記録される台帳( =ブロックチェーン)に取引内容を書き込む人を、「計算量が多い問題を最初に解くことができた人」と定義することで、台帳の二重更新を防止しようという試みです。ブロックチェーンに書き込む人が一意に決まりさえすればいいので、Bitcoin以外のコインではPoWではなく、PoS (Proof of Stake)やPoI (Proof of Importance)といった別のコンセンサスメカニズムを採用している通貨も存在します。


Mastering BitcoinではPeercoin (時価総額30位)やBlackcoin (時価総額50位)などをコンセンサスメカニズムの独自性の例として紹介していますが、いずれも暗号通貨界で重要なポジションを占めているとは言いがたい状況です。ここまで見てきた通り、マネタリーポリシーやコンセンサスメカニズムは確かにBitcoinとの違いを特色づけるものではありますが、マーケットからの評価とは直結しないことがわかるかと思います。

特有の機能

結局あるアルトコインがマーケットから承認されるかどうかは、この点にかかってきます。
Bitcoin上で実現できていない機能や、実現できているけどBitcoin仕様の制約がある機能を実装しているアルトコインは、やはり注目を浴びやすくなります。現在暗号通貨上位を占めている通貨は、主に以下のいずれかの仕組みをマーケットから評価されているようです。

匿名化

このカテゴリーには、Monero(時価総額5位)、Dash (時価総額6位)、Zcash(時価総額13位)などが当てはまります。


匿名化というと、Bitcoinが匿名だという印象の方もいるかもしれませんが、Bitcoinは全取引履歴がブロックチェーン上に完全に公開されているため、世間での印象とは異なり透明性が非常に高い設計になっています。ただ匿名で通貨のやりとりをしたいという需要も強く、Bitcoin上にアドオンする形でZerocoinという匿名化の仕組みが開発され、そのZerocoinから派生する形でMoneroやZcashといった新しい暗号通貨が生まれてきました。

Zcoin and Zcash: Similarities and Differences - ZCoin Blog

しかし、各国の捜査当局からすると、マネーロンダリングや違法薬物などの取引に使用されるおそれがあるため、これらの匿名型通貨に対する規制を強化するのではないかという見方もあります。実際、MoneroはAlphaBayと呼ばれる世界最大級のオンラインダークマーケットで使用されています。
btcnews.jp


先日もFBIがMoneroに対して懸念を表明するなど、Moneroを利用した違法取引の摘発に向けて動きが加速することが予想されます。日本でも暗号通貨の規制法(資金決済法の改正)が今年施行される予定で、その際にMoneroやZcashのような匿名コインが認可されるかはひとつの注目ポイントだといえそうです。
www.coindesk.com

プラットフォーム

Bitcoinにない、あるいは大きな制限が加わっている機能を実現する通貨が、このカテゴリーに入ります。たとえばEthereumでは、Bitcoinでは実現できないチューリング完全(ループ処理や分岐処理など、プログラムに必要な要素がすべて含まれた状態)なプログラムを分散ネットワーク上で実現するための仕組みが備わっています。チューリング完全な仕組みにすると、無限ループなどをプログラムに組み込むことで、簡単にネットワークをダウンさせるような攻撃ができてしまいそうですが、プログラム実行にgasというお金を必要とすることで、そのような攻撃を防いでいます。


また、NEMでは最近Twitterで話題になったとおり、NEMにアドオンする形で任意のファイルにタイムスタンプを付与できるApostilleと呼ばれるウォレット機能が実装されています。この機能はBitcoin上にColored Coinをアドインして所有権の存在証明をしようとした試みと似ていますが、NEMには「Mosaic」と「メッセージ送信」という2つの機能が実装されているため、Bitcoinよりも容易にColored Coinに似た機能を実装することが可能になっています(ぶっちゃけまだよくわかっていないのは秘密)。

NEMアポスティーユのホワイトペーパー日本語訳 - クリプトストリーム

また、変わり種として、Steem(時価総額9位)のようにSNSへの貢献度によって報酬をもらえるようなコインもあります。
www.jpbitcoinblog.info

まとめ

マネタリーポリシーやコンセンサスアルゴリズム自体は、技術的には面白いところですが、マーケットからするとそれは各アルトコインの本質ではなく、末梢に過ぎないということでしょうね。


ということで、新しい怪しげなコインを見つけた時は、本当にそのコインが他のアルトコインと異なる価値を提供できそうかを慎重に検討する必要があります。「PoWと違い環境に優しいマイニングアルゴリズム」とかはどうでもいいんじゃ!流行るコインはわかりませんが、マネタリーポリシーとコンセンサスアルゴリズムの新規性のみを押すアルトコインは無視でよしですね(ただ一番危険な奴は、特有の機能があるように見せかけて、実は実現可能性が全くなかったりするやつですが)。

2016年年末時点の時価総額ランキング
cryptocoin.hatenablog.com


本当は100コインくらいを対象に、もっと細かな要素を加味してガリガリ分析したいところですが、データセットを作るところに手間取りギブアップ。。。

PBoCによるBitcoin規制の動きまとめ

f:id:steinith310:20170210021817p:plain

中国の大手取引所のOKCoin、HuobiがBitcoin、Litecoinの引き出し停止を発表したことを受けて、Bitcoin、Litecoinの価格が急落しています。

f:id:steinith310:20170210015615p:plain

ビットコインチャート・相場・価格/Bitcoinの【bitFlyer】

 

Bitcoinに関しては1000ドル台中頃だったのが、一時900ドル台前半になるなど、波乱の展開でした。原因となった中国の取引所の動きですが、2017年に入ってからPBoC(中国人民銀行)の介入の動きが激しくなったことへの対応になります。

 

後から状況を振り返ることができるように、1月から今月にかけてのPBoCの動きと、それに関するニュース記事をまとめておきます。なお、日付については数日間違っている可能性もあるのでご参考までに。また、この記事は適宜アップデートしていこうと思います。

 

PBoCの動き

1月5日(木)

PBoCの担当者が、中国の主要Bitcoin取引所関係者と会合。当局は取引所に対して、「法と規制に従う」ことを求めました。このとき会議に参加した取引所は、大手三大取引所であるBTCC、OKCoin、Huobiです。

 

この発表を受けて年初から上り調子だったBitcoinの価格は、1000ドルを割ってしばらく低迷期に入ります。

f:id:steinith310:20170210020948p:plain

https://jp.investing.com/currencies/btc-usd

China's Central Bank Issues Warnings to Major Bitcoin Exchanges - CoinDesk

 

1月11日(月)

PBoCが中国の3大取引所(BTCC、OKCoin、Huobi)に対して、立ち入り検査を行うことを発表しました。

China's Central Bank to Conduct Ongoing Bitcoin Exchange Visits - CoinDesk

 

1月13日(水)

BTCC、OKCoin、Huobiが信用取引を停止したことを発表しました。これまで中国の取引所は信用取引と取引手数料無料を武器に取引量を拡大していましたが、これを機に取引量を大きく減らしていくこととなります。

Chinese Exchanges Curb Bitcoin Margin Trading | Bitcoin Magazine

 

1月24日(火)

BTCC、OKCoin、HuobiはBitcoinとLitecoinの取引について、0.2%の取引手数料を導入しました。

China's Bitcoin Exchanges End No-Fee Trading in Market Shake-Up - CoinDesk

 

この影響で、三大取引所にこれまではいってこなかった、BTC100とCHBTCがそれぞれ取引量の1位と2位に躍り出ました。

Bitcoin Volume is On the Move to New No-Fee Exchanges - CoinDesk

 

2月3日(金)

Bitcoin価格が1000ドルを回復しました。

Bullish Sentiment Fuels Bitcoin's Return to $1,000 - CoinDesk

 

2月8日(水)

PBoCが1月5日に開かれた主要Bitcoin取引所との会合に含まれていなかった小規模な取引業者と会合を開きました。会合に出席した取引所は、以下の9取引所です。

  • BTC Trade
  • Yunbi
  • HaoBTC
  • CHBTC
  • BTC100
  • BitBays
  • Yuanbao
  • Dahonghuo
  • Jubi 

この会合後、多くの取引所は取引手数料を導入することを発表しました。ただし、YuanbaoとBitBaysはPBoCの規制強化に対して、懸念を表明しています。

 

また、この会合の中で、マネーロンダリングが議題に上ったことが報じられています。なお、この日の会議には3大取引所(BTCC、OKCoin、Huobi)は含まれていなかった模様です。

China's Central Bank Meets With More Bitcoin Exchanges - CoinDesk

 

2月9日(木)

PBoCが中国の取引所に対して、マネーロンダリング対策を要求しました。これは前日2月8日の会合を受けたものです。

China's Central Bank Issues New Warning to Bitcoin Exchanges - CoinDesk

 

このPBoCの発表後、中国大手取引所のOKCoin、HuobiがBitcoinとLitecoinの引き出しを一ヶ月間停止することを発表。なお、中国元の引き出しやその他サービスは引き続き継続するとのことです。ちなみに引き出しを停止する目的は、PBoCから要求されたマネーロンダリング対策の実装のためとのこと。

 

残る大手取引所のBTCCも声明を出して、マネーロンダリング対策のために内部システムをアップグレードすることを発表しました。影響はOKCoinやHuobiほどではなく、BitcoinとLitecoinの引き出し時間が72時間になる程度にとどまるとのことです。

Two of China's Biggest Exchanges Stop Bitcoin Withdrawals - CoinDesk

 

2月14日(火)

PBoC前理事がCCTVのインタビューで「Bitcoinをなくすことは不可能」 と発言しました。PBoCへの牽制とも捉えられるので、今後のPBoCの動きが注目されます。

 

2月17日(金)

中国の取引所やブロックチェーン業界の自主規制に関するセミナーが北京で開かれました。PBoC前副理事、北京の金融当局者などが出席し、AMLなどについて話し合いが行われたようです。

 

PBoCはこれまで規制を強めていましたが、ここに来て前理事や前副理事などがソフトランディングさせようとする動きを見せているように思えますね。

 

まとめ

市場価格が1000ドルを超えて、PBoC側の対応が注目されていた中で発表されたのが、本日の大手取引所のBitcoin引出停止でした。今のところ、1000ドルは割っているものの1月6日のPBoCと大手取引所の面談ほどのインパクトは出ていないようです。

 

2月9日発表の効果があまりないとなると、PBoCとしてはもう一段規制を強めてくるかもしれません。

 

中国の動き(規制前)については、こちらもどうぞ。 

cryptocoin.hatenablog.com

 

ビットガールズ公式ソング「恋のクラウドセール – Girls Go ICO」のテクニカルな解説

今月のビットコイナー反省会を見ていたら、Bit Girls公式ソングがリリースされたとの情報が!Bitcoin的には意外にしっかりした歌詞だったので(ポエム的には。。。笑)、テクニカルな解説(とポエムの訳)を加えていきます。


ビットコイナー反省会Ep13 ゲスト ブロガーしゅうまいさん

曲はこちらのサイトから聞くことができます。

ビットガールズ:番組公式テーマソング「恋のクラウドセール – Girls Go ICO」が完成

 

歌詞一番(赤字が元の歌詞)

You! テクニカルには読めなくても成り行きでもいいじゃない

訳「私のことはよく知らないかもしれないけど応援してよ」

Bitcoin投資に限らず、株式投資も同様ですが、チャート分析結果に基づいて購入する方法をテクニカル分析と言います。逆に、投資資産の価値を算定してその算定価値に基づいて投資するのはファンダメンタルズ分析ですね。

 

また、分析後実際に買う際には、2つの選択肢があります。ひとつは指値買いでこれは指定した価格で取引所に注文を出し、売り手とマッチングが成立した場合のみ購入可能な方法です。逆に成り行き買いは購入数量だけ指定して、購入金額は指定してない購入方法のことを指します。

 

Me! トレカブ主の秘密鍵で運命揺れるトランザクション

訳「応援してくれるみなさんの力で私たちの運命が決まってしまうのよ」

トレカブはBitgirls用語で、各Bitgirlsごとに配布されているトークンのことを指します。このトレカブ数に応じて、HYOUというトークンが配られて投票に活用できます。以下の写真はトレカブの例ですが、ものすごく風⚪︎店の写真っぽい

f:id:steinith310:20170206022017p:plain

秘密鍵Bitcoinの送金(トランザクション)の際に必要になるもので、送金者の真正性を証明するものです。トランザクションとブロックチェーンの関係についてはこちらにまとめています。

cryptocoin.hatenablog.com

 

織り込み済みのチャートでは今が底、今夜にもTo da moon!

訳「今手をつけておかないと、他の人に取られちゃうわよ」

チャートには基本的には非公開の情報も含めて、情報が価格に織り込まれていると考えられています。To da moonはよくわからないけど、価格が月まで届いちゃうぞってこと?

 

I I Aye Aye 愛を下さい Lie Lie Nai Nai 嘘じゃない

訳「投票してね。損はさせないから」

省略。

 

Hard Fork 絶対不可の 恋のクラウドセール

訳「私への投票はいつでも有効よ」

Hard Forkは、クライアントソフトウェアのバージョンアップに伴い、旧仕様が無効になり、新仕様のみが有効になることです。時には旧仕様派が抵抗し、ブロックチェーンが永続的に分岐することもあります(EthereumのEthereum Classicへの分岐などが有名です)。

 

クラウドセールスはクラウドファンディングの一種で、投資を募る人が自ら暗号通貨を作成し、その暗号通貨を配布した対価として現金を受け取るスキームのことをいいます。

 

I I Aye Aye 愛を下さい Bye Bye Nai Nai まだ終わらない

訳「投票してね。損はさせないから」

省略。

 

Market Cap 改ざん不可 We’re Bit Girls GO ICO

訳「応援してくれたことは証拠として残るわよ。We're Bit Girls Go 金よこせ」

Market CapはMarket Capitalizationの略で時価総額のことです。ICOクラウドセールと同じで、新規作成した暗号通貨の対価に、投資家から資金を調達することを指します。

 

歌詞二番

You! ショートよりもロングなのは気持ち次第でシグナルじゃない

訳「他の人に目移りせずに私に投票してくれるのは、周りに流されたからじゃなくて、あなたの気持ちからなのよね?」

ショートはBitcoinを売り建てで持つこと、ロングはBitcoinを買い建てで持つことですね。シグナルというのは、チャートなどの分析から「ここが買い時だ」というサインが出たことを指しています。

 

Me! 胸騒ぎのハッシュレートでヨコヨコからのボラの予感

訳「でも、私最近注目されてるみたいなの」

ハッシュレートはBitcoinのマイニング力を指す指標で、マイニングのためにどれくらいのマシンパワーがあるかを指しています。ヨコヨコからのボラはおそらく、しばらくチャートに動きがなかったのが、これから取引量が増えて価格の変動量(ボラ=ボラティリティ)も増加するということでしょう。

 

夢のサトシのお告げでは爆上げの、あの日まで HODL Tight!

訳「私の人気は伸びるわよ。応援し続けてね!」

サトシはみなさんご存知Bitcoin論文を発表したBitcoin産みの親ですね。HODLはBitcoin価格が下がってもHoldし続けることらしいです。もともとは、Bitcoin関連のコミュニティで流行った言葉とのこと(これは初めて知った)。

HODL - Genx Notes

 

I I Aye Aye 愛を下さい Lie Lie Nai Nai 嘘じゃない

訳「投票してね。損はさせないから」

省略。

 

Blockchain 取消不可の 恋のクラウドセール

訳「あなたの応援は永遠に有効よ。」

Blockchainは過去の取引を改ざんすることが非常に難しい仕組みになっています。

 

改ざんするにはマシンパワーが必要になりますが、そのマシンパワーを改ざんに回すより、マシンパワーをBitcoinの採掘に回したほうが利益が出るため、改ざんへのインセンティブが非常に低くなっています(現実問題、改ざんをするためのマシンパワーを保持しているグループは現在存在しません)。

 

クラウドセールは説明済みなので略。

 

I I Aye Aye 愛を下さい Bye Bye Nai Nai まだ終わらない

訳「投票してね。損はさせないから」

省略。

 

Market Cap 改ざん不可 We’re Bit Girls GO ICO

訳「応援してくれたことは証拠として残るわよ。We're Bit Girls Go 金よこせ」

説明済みのため省略。

 

歌詞三番

プールに溢れたトークンも受け止める、待てないのConfirmation!

訳「応援してくれた人は誰であっても私の味方」

作成されたトランザクションは約10分間に一度、マイナーによってマイニングされブロックチェーンに記録されます。ブロックチェーンにトランザクションが記録されると二重支払いの可能性が低くなりますが、100%ではありません。しかし、そのトランザクションが含まれるブロックの後ろにブロックが積み重なることで改ざんされる可能性はだんだんと減少していきます。

 

このブロックが積み重なっていくことをConfirmationといい、通常は6Confirmation (当該トランザクションを含めて6ブロック分が作成される状態)されると取引は100%安全とみなされています。

 

もちろん、Confirmationをせずともトランザクションを正当なものとして受け止めることはできますが、その場合はコインの受け取り手がリスクを負うことになります。

 

I I Aye Aye 愛を下さい Lie Lie Nai Nai 嘘じゃない

I I Aye Aye 愛を下さい Sigh Sigh Nai Nai 息も付けない

Blockchain 取消不可の 恋のクラウドセール

I I Aye Aye 愛が足りない Bye Bye Nai Nai まだ終わらない

Market Cap 改ざん不可 We’re Bit Girls GO ICO

We’re Bit Girls GO We’re Bit Girls GO

We’re Bit Girls GO ICO

以上、繰り返しなので省略。

 

まとめ

この歌詞、なかなか詳しい人が書いていますね笑。ちなみに、佐野真彩ちゃんと朝倉香ちゃんが好きです。でも、本当はビットガールズに出てくる吉木りさのほうが好き。

 

Bitgirls情報はこちらから。

bitgirls.io

インドネシアでBitcoinを入手する方法 Indodax口座開設編

f:id:steinith310:20170204235247p:plain

超マイナーな読者層向けですが(笑)、インドネシアでBitcoinを購入、取引する方法をご紹介します。インドネシアでは投資方法が「定期預金」か「投信購入」くらいに限られているので、是非投資のオプションにBitcoinも追加してみてください。

 

ちなみに、今回ご紹介する取引所であれば、Bitcoin以外にもEthereum、NEMなどの主要な暗号通貨は取引可能なようです (ルピアとは直接交換できず、Bitcoinとの取引に限定されているようですが)。

 

(2018年1月15日 追記)

現在インドネシアでは、Bank Indonesiaがビットコインを決済手段として使うことを禁じているほか、OJKがビットコイン取引の規制を検討しています。現時点で未確定のため記事は残していますが、現在の状況を考慮すると、インドネシアで取引を行うことはオススメしません。

(2018年6月2日 追記)

→最近韓国、シンガポール系の取引所なども設立されており、以前より見通しは若干楽観的ですが、取引所には多額の現金、仮想通貨を置かないようにすることをオススメします。例えば、Indodaxなどの取引所で仮想通貨にした後、Binanceなどの別の取引所か、自分のウォレットに引き出すことを推奨します。

www.cryptocoiner.info

 

Bitcoinってどうやって手に入れるの?

Bitcoinを手に入れる方法は、以下の3種類が考えられます。

  1. 採掘(マイニング)して入手する
  2. Bitcoinを既に持っている人から入手する
  3. 取引所で購入する

1番については、専用のマイニング装置を揃えなければ実質不可能なので却下。2番については、まわりにBitcoinを持っている人がいたり、ビジネスを営んでいる人なら可能ですが、あまり一般的ではありません。

ということで、「3. 取引所で購入する」に絞ってインドネシアでの購入方法をご紹介します。

 

取引所での購入

インドネシアでルピア建でBitcoinを購入するには、以下のインドネシア最大手の取引所を利用することをオススメします。インドネシア語だけでなく、英語で基本的にはやりとりができるので、日本人の方でも気軽に始められるかと思います。

 

Indodax (旧Bitocoin.co.id)

vip.bitcoin.co.id

 

手順

以下のステップでBitcoinを購入できます。

  1. ユーザ登録
  2. 認証
  3. 入金
  4. Bitcoin購入

 

1. ユーザ登録

まずはBitcoin.co.idにユーザ登録をします。

f:id:steinith310:20170204235247p:plain

メールアドレスとインドネシアでの携帯電話番号を入力し、Registerを押すと携帯電話番号とユーザ名、パスワードなどの入力を求められるので、必要事項を入力してください。入力を完了すると、指定したメールアドレス宛にメッセージが来るので、URLをクリックしてアカウントをActivateしてください。

f:id:steinith310:20170204235808p:plain

Activateしたあと、携帯電話番号の確認のためにSMSにパスコードが送られてきます。パスコードを画面上で入力すると、登録完了です。

 

2. 認証

認証のために、2種類の情報をBitcoin.co.idのサイトにアップロードする必要があります。

  • 所定の文言を記入した紙と一緒に撮った写真(顔を判別できるもの)
  • パスポートの写真のページ

私はすでに登録が完了しているため表示されていませんが、赤枠で囲ったInformationあたりにポップアップで登録を促すメッセージが出てくるかと思います。この2つの情報を携帯電話などで撮影してサイト上からアップロードすると、約1日で認証完了の連絡がメールに送られてきます。なお、この作業は「3. 入金」と並行して作業可能です。

 

顔写真を送ることに抵抗がある方も多いと思いますが、インドネシアでは本人認証を正しくしないと、OJKなどの金融当局に睨まれて、取引所を閉鎖されかねないので、取引所側としてはMustな手続きになっています。ここを終えればBitcoin入手まであと少し!

f:id:steinith310:20170205001113p:plain

3. 入金

入金はいくつか方法がありますが、私はBCAのATMから振り込みを行っていますので、その方法を紹介します。まず赤枠のDeposit / Withdraw Rupiahを選択し、送金画面を開きます。

f:id:steinith310:20170205001449p:plain

その後、入金方法の選択画面が出てくるので、入金額と口座番号を入力し、入金方法に「BCA (ATM)」を選択しますす。その次の画面で振込先の銀行を選択させられますが、ここでは手数料の一番安いCIMB Niagaにしておきましょう (BCAからの送金手数料は6500ルピア)。

 

すると、以下のような画面が表示されます。

f:id:steinith310:20170205002205p:plain

ここでは振込先のCIMB Niagaの口座番号が表示されますので、Amount of Dipositに表示された金額をATMから振り込んでください。

 

なお、送金者の特定のために、Bitcoin.co.id側で入金予定額に3桁の金額を足したものを、Amount of Dipositには表示されています。例えば、5,000,000ルピアを入金額に指定した場合、5,000,000ルピアを入金するのではなく、Bitcoin.co.idから指定された3桁の金額 (例えば、123)を追加した5,000,123ルピアを入金する必要があります。難しく考える必要はなく、Amount of Dipositに表示された金額を入金すると考えていただけば問題ありません。

 

ATMの操作ですが、キャッシュカードを入れた後、まず「Transfer」を選択してください。「Bank Lain(「その他の銀行」という意味)」を選択すると、Bank Codeの入力を求められるので、CIMB NiagaのBank Codeの「022」を入力してください。すると、口座番号を求められるので、上の画像のBank Account Numberに表示された口座番号を入力し、最後に入金額を入力したら完了です。

 

送金完了後、レシートがATMから出力されますので、忘れずに持ち帰ってください!最後に、レシートの写真を撮って、サイト上にアップロードしたら手続きが完了します。概ね1営業日中には入金がサイトに反映されると思います。

 

ちなみに、ATMからのTransferの他には、Easy Payなどのローカルな決済システムを使うことはできますが、クレジットカードによる入金はまだ認められていないようです。そのため、ATM(またはオンラインバンク)からの入金が日本人には現実的かと思います。

 

4. Bitcoinの購入

Bitcoinの購入方法は2種類あります。ひとつは「Buy / Sell Bitcoin Instantlly」でBitcoin.co.idから提示された金額で直接購入する方法。こちらは取引所で取引されているものを買うわけではなく、Bitcoin.co.idから直接購入する形になるので即座に購入できますが、レートは若干悪くなっています。

 

そのため、通常はBitcoin Spot Marketを通して購入することになります。Total Rupiahのところに購入したいだけのルピアの値段を入れて、Price欄にBitcoinの価格を入力すると自動でBitcoinの予定購入量が表示されます。問題なければ、Continueを入力し取引を申し込みしてください。

 

市場でうまくマッチングすれば、Bitcoin.co.id上のルピアの額が減少し、かわりにBitcoinが手に入っているはずです!

 

 

税金

Bitcoin.co.idではBitcoin購入時に取引価格の10%をVAT(付加価値税)として徴収されます。これは、インドネシアではBitcoinの取引をモノの売買とみなしているためです。

https://help.bitcoin.co.id/en_US/apakah-perdagangan-bitcoin-di-bitcoin-co-id-dikenakan-pajak/

 

また、譲渡所得税についてBitcoin.co.idにメールで確認しましたが、あまりよい回答を得られませんでした。彼等曰く、自動徴収されるVAT以外は税金を全く払う必要がないと言っていましたが、利益が出ている場合は売却時に譲渡所得として算定されるはずなのでご注意ください。

 

通常、税金関係は年に1回会計事務所から書類の提出を求められると思いますので、その際に担当の会計士に確認することをオススメします。会計士に聞く限りは、Bitcoinを現金に戻さない限りは譲渡所得は発生しないため、インドネシアにいる限りはBitcoinを現金化しないほうがよいかと思います。

 

どうしてもトレードをしたいという人は、Bitcoin以外のアルトコインに投資して、利益確定の際にBitcoinに戻すことをオススメします。Bitcoinとして持っている限りは、課税されることはないので。

cryptocoin.hatenablog.com

 

 

なお、出張者でインドネシアに来ている方も、インドネシア国内でBitcoinを売買して利益を上げた場合はBitcoinの売買利益に限ってインドネシアでの国内所得とみなされて課税対象となるおそれがあるので、ご注意ください (そこまで捕捉しきれないとは思いますが)。

 

Bitcoin.co.id

vip.bitcoin.co.id

Mastering Bitcoinを読み解く 第3回 物理ファイル

「Mastering Bitcoinを読み解く」、第3回は物理ファイル編です。マニアックですね笑

 

Mastering Bitcoinからの情報も参考にしていますが、以下のフォーラム上の回答が非常に分かりやすくまとまっています(もう少し調べるとWikiに書いてありました笑)。物理的には、主に4つのデータフォーマットからBitcoinは構成されています。

bitcoin.stackexchange.com

Data directory - Bitcoin Wiki

Bitcoinのデータ構造

ブロックチェーン

まずはブロックチェーンそのもの。データベースは使用せず、Rawデータの形式で保存されています。ファイルパスは、blocks/blk*.dat。

インデックス

通常のデータベース同様、データへのアクセススピードをあげるために、ブロックチェーンを要約したインデックス情報を保持しています。ここには全ブロックのメタ情報とブロックへの参照情報が含まれています。

 

このインデックスの作成には、Key-Value型のデータベースであるLevelDBが使用されています。ファイルパスは、blocks/index/*。 

Chainstate (UTXO管理DB)

UTXO (Unspent Transaction、まだ次の支払いに使用されていないトランザクション)を管理するファイルです。トランザクションの検証には、トランザクションで使用されている、過去のトランザクション情報がまだ未使用であるかを検証する必要があります。

 

このUTXO専用の管理ファイルを使用することで、トランザクションの検証を高速に実施することができます。なお、UTXOの管理にもインデックス同様Level DBが使用されています。ファイルパスは、chainstate/*。

UNDOファイル

通常のデータベース同様、データをRoll Backする必要がある場合に、このファイルが使用されます。Roll Backとは通常データベースに記録した情報が間違っていたり、不完全だった場合に、決められた復旧ポイントに戻ることを指します。

 

Bitcoinの場合は、Chainstate用にUNDOファイルが作成されています。具体的にどのような場面で使用されるかというと、ブロックチェーンが分岐して、そのクライアントが最長とみなしていたチェーン (A) よりも長いチェーン (B) が見つかった場合に使用されます。この場合、Bに含まれるUTXOを使用済みとマークするとともに、Aに含まれているUTXOをRoll Backする必要があります。BitcoinではUNDOファイルを利用して、このRoll Backを実現しているというわけです。ファイルパスは、blocks/rev*.dat。 

まとめ

基本的にはブロックデータとそのインデックス、Roll BackのためのUNDOファイルに、高速に検証するためのキャッシュ構造(UTXOファイル群)から構成されており、一般的なデータベースと思想は似ていますね。

 

ちなみに、Bitcoinの本体とは少し離れますが、Bitcoin CoreのWalletアプリにはBerkeley DBが使用されているようです。WalletをLevelDBに統合してしまうと既存ユーザへのインパクトが大きすぎるので、Berkeley DBからLevelDBに統合されることはないでしょう。

why need both level db for index of blockchain and Berkeley db for wallet? · Issue #4123 · bitcoin/bitcoin · GitHub

Mastering Bitcoinを読み解く 第2回 ネットワーク

「Mastering Bitcoinを読み解く」第2回です。今回はネットワークに関してまとめます。

 

第1回(トランザクション編)はこちら

cryptocoin.hatenablog.com

参考文献

Mastering Bitcoin

Mastering Bitcoin

 

 

ノード立ち上げ時の動作

BitcoinネットワークはP2Pネットワークであり、中央集権的なサーバーが存在しません。そのため、何かしらのウォレットアプリをダウンロードしてPC上にBitcoinノードを立ち上げたタイミングで、ネットワーク上のいずれかのノードを選択して接続する必要があります。

 

このノードの選択にはDNSが使用されます。DNS seedとよばれるDNSサーバー群がBitcoinノードのIPアドレス情報を管理しており、いずれかのDNS seedに問い合わせることで、接続先のノード情報をランダムに手に入れることができます。Bitcoin Coreクライアントの場合は、6つのDNS seed情報をデフォルトで含んでいます (Mastering Bitcoinでは5つと記載されていましたが、ソースコードを見る限り現在は6種類のようです)。

 

chainparams.cpp

f:id:steinith310:20170130225933p:plain

 

DNSについては、念のためリンクをはっておきます。

DNSとは - JPNIC

 

ブロックチェーンのSync

さて、Bitcoinネットワーク上の他のノードへの接続が完了した後で、フルノードの場合はブロックチェーン情報をダウンロードする必要があります。他のノードからこの情報を受け取るわけですが、その際には以下のようなステップで情報が交換されます。

 

  1. まずお互いにgetblocksメッセージを送信し、自分が持っている最後のブロックのハッシュ値を交換する。
  2. 1で受け取ったハッシュ値から、自分と相手のどちらが最新のブロックチェーンを保持しているかを確認する。
  3. 最新のブロックチェーンを保持している側は、invメッセージを使用して、不足しているブロックのハッシュ情報を相手方に送信する。
  4. 不足しているブロック情報をgetdataメッセージを利用して最新のブロックチェーンを持つノードに要求し、ブロック情報を受け取る。

 

一方SPVノード(Lightweightノード、全ブロックチェーン情報を保持しない軽量クライアント)は、ブロックヘダー情報のみを接続しているノードから受け取ります。

 

SPVノードのトランザクション検証

ルノードは全ブロックチェーン情報を保持しているため、トランザクションがブロックチェーンに含まれたか」、また「二重支払いされていないか」を容易に検証できます。一方、SPVノードの場合は全ブロックチェーンの情報を保持していないため、検証には工夫が必要になります。

 

トランザクションがブロックチェーンに含まれたか

SPVノードは、マークルツリー、マークルパスとよばれる仕組みを利用し、トランザクションを含むブロックを特定します。マークルツリーは二分木構造になっており、各リーフはそれぞれのトランザクションハッシュ値を格納しています。

 

ここでは、AとBという2つのトランザクションを保持する二分木を例に考えてみます。まず、AとBにそれぞれハッシュ関数を適用し、リーフA'とリーフB'を作成します。さらに、A'+B'にハッシュ関数を再適用することで、ルートAB'を作成します。

 

このツリーを使用すると、あるトランザクションがこのブロックに含まれることを簡単に検証することができます。例えば、Aというトランザクションがこのブロックに含まれているかを、あるSPVが検証したい場面を想定してみましょう。

 

SPVが「Aを検証したい」ということを接続しているノードに告げると、ノードはルートノード (AB') とリーフノード (B')の情報を送ってきます。SPVはAトランザクションにハッシュをかけてA'を作成して、B'の情報と組み合わせてAB'を作成します。SPVが作成したAB'と送られてきたAB'が一致しない場合は、トランザクションAの情報がそのブロックに含まれていないということになります。

 

二重支払いされていないか

マークルツリーを使用することで、すべてのブロックチェーン情報を持たないSPVでも、あるトランザクションが、ブロックに含まれているかどうかを検証可能であることがわかりました。しかし、二重払いが行われたかどうかは、全ブロックチェーン情報を持たないSPVでは検証できません。

 

そこで一般的には、対象のトランザクションを含むブロックの上に、6ブロック以上が積み重なったことをもって、二重支払いなしとみなします。

 

Alert System

Bitcoinコア開発メンバーが保持する秘密鍵で署名したメッセージを、全ノードに送付する機能です。一応、過去に利用されたこともあったようですが、現在ではコミュニティが発達してアラート機能を利用して周知する必要性が薄れてきたため廃止されました (Mastering Bitcoinにはまだ存在している前提で記載されていましたが、すでに完全廃止が決まった模様)。

btcnews.jp

 

まとめ

Mastering Bitcoinは2014年12月の販売から約2年しか経過していないにもかかわらず記述が古くなっている点が散見され、Bitcoinを取り巻く環境の変化するスピードの早さを感じました。

 

本やブログから情報を収集するにしても、最後は最新のソースコードを見て確認する癖が大事そうですね。

 

第3回はこちら

cryptocoin.hatenablog.com

 

 

Mastering Bitcoinを読み解く 第1回 トランザクション

遅ればせながらMastering Bitcoinを読んでみました。分かっていた気になっていたけど実は分かっていなかった点があぶり出されて、非常にすっきりした気分です(笑)。

Mastering Bitcoin

Mastering Bitcoin

 

 

備忘を兼ねて、解消された不明点をまとめますが、あまりにもきちんと理解できていなかった箇所が多いので、何回かに分けてまとめます。第1回はトランザクションから。

 

トランザクションのValidateの順番

あるノードから受信したトランザクションは、以下の検証ステップを経て、各ノードに正統なトランザクションとして受け入れられます。念のためですが、これはブロックチェーンへのブロック書き込みとは別の概念です。

  1. 受信したトランザクションに含まれるInputからUTXO(未使用のOutput, Unspend Transaction Output)を特定する
  2. UTXOからscriptPubKeyとよばれるスクリプト(一般的には、送信者のBitcoinアドレスを含む)を取り出す
  3. InputからscriptSigとよばれるスクリプト(一般的には、送信者のデジタル署名とPublic Keyを含む)を取り出して、scriptPubKeyとscriptSigを実行する

 

トランザクションの基礎はこちら。

cryptocoin.hatenablog.com

 

トランザクションスクリプト P2PKHとP2PK

ScriptPubKeyとScriptSigとサラッと書きましたが、どちらもトランザクションスクリプトとよばれるBitcoin専用の簡易言語で作られたプログラムのことを指しています。

 

なぜ専用の言語が使われるかというと、複雑な処理を認めないことでBitcoinネットワークへの攻撃を防止するためです。例えば、このプログラムはチューリング不完全な言語として設計されており、プログラム内でループ処理が認められていません。そのため、無限ループ処理を組み込んだ、DDoS攻撃を防止することができます。

 

トランザクションスクリプトは5種類のスクリプトが認めれています。最も一般的なスクリプトはP2PKH (Pay-to-Public-Key-Hash)と呼ばれるスクリプトになります。

 

P2PKHはその名前の通り、Public KeyのHash、すなわちBitcoinアドレスを支払い先に指定したScriptのことを指します。これとは別にP2PK (Pay-to-Public-Key)というトランザクションスクリプトもあり、この場合はPublic Keyを受取人に指定して送信することになります。P2PKの方がシンプルな構成ですが、セキュリティの観点からP2PKHがメインで使われています(多分。ちょっとここのP2PKHがメジャーな理由は自信なし)。

 

P2PKHを使用した場合のトランザクション検証の動きを簡単にまとめると、以下のような流れになります。

前提 InputとOutputに含まれる情報

Input: 送信者のデジタル署名、送信者のPublic Key

Output: 送信者のBitcoinアドレス

フロー
  1. 送信者のPublic Keyが本物であることを確かめるために、InputのScriptに含まれるPulic KeyがBitcoinアドレス(=Pubilc Keyにハッシュをかけたもの、Outputに含まれる)と一致するかを検証
  2. 一致した場合は本人性の確認のために、デジタル署名(Inputに含まれる)を送信者のPublic Key (Inputに含まれる)で検証

 

ちなみに、P2PK(Pay-to-Public-Key)を使用した場合は、Output (UTXO) に送信者のPublic Keyを含んでいるため、2番のデジタル署名の検証のみで終了です。

 

トランザクションスクリプト Multi-SignatureとP2SH

複数人の承諾がないと、Bitcoinを使用できないようにしたい場面があります。例えば、経理担当者の決済の他に、経理部長の承認を必要とするというような事例が考えられます。この場合、Multi-SignatureまたはP2SHのいずれかのトランザクションスクリプトを利用することで、上記スキームを実現することができます。

 

Multi-Signature

Multi-Signatureはひとりの受取人に対して、複数のPublic Key (N個)を指定する種類のスクリプトです。これに対して、受取人側はこのトランザクションをInputとして送金に利用するタイミングで、このトランザクションで指定されたPublic Key(N個)に対応するデジタル署名(N個以下)を付与することでトランザクションを送金に利用することができるようになります。

 

例えば、P2PKを使用する場合は、経理担当者のPublic Keyだけを送信先に指定していたのに対して、Multi-Signatureを使用する場合は経理担当者と経理部長両方のPublic Keyを指定してもらうことになります。

 

この会社が受け取ったBitcoinを送金手段として使用したい場合は、経理担当者と経理部長両方のデジタル署名をInputに付与することで送金できるというわけです。

 

ただ、この方法の場合は、送信者に複数のPublic Keyを指定してもらう必要があるため、通常のWalletアプリを使用して送金することができません。また、仮に指定できたとしても送信者の手間が増えてしまうのであまり一般に使用されていません。そこで、この問題を解消すべく生まれたのが、P2SHです。

P2SH

P2SH (Pay-to-Script-Hash) は、「Multi-Signatureで送信者が指定していた複数のPublic Key」に対して、Hashをかけたものを受信者のアドレスとして利用するというものです。この方法を利用すると、送信者としては通常のBitcoinの送金同様、アドレスを指定して送るだけの作業になるため、送信者側の負担が軽減されます。

 

逆に受信者は、当該トランザクションを送金に利用する際は、デジタル署名だけでなく、アドレス作成に使用したPublic Keyなどの情報をInputに添付する必要があります。

 

トランザクションスクリプト OP_RETURN

ちなみにもうひとつ、OP_RETURNというトランザクションスクリプトもあります。これは、Payment以外の目的でのBitcoin利用を拡充するために導入されたスクリプトです。Bitcoinの各ノードは、未使用のアウトプット (UTXO) を素早く探すため、UTXOプールとよばれるメモリを保持しています。UTXOが新たに生まれるとUTXOプールに格納され、逆にUTXOがインプットに使用されるとUTXOプールから削除されるという動きをします。

 

しかし、Bitcoin送金以外の目的でトランザクションを使用する際には、送金額が0コインとなっている場合があります。その場合、UTXOは二度とインプットに使われることはないにもかかわらず、UTXOプールに格納されてしまいます。これが繰り返されるとUTXOプールが肥大化して、メモリを使い切ってしまうおそれがあります。

 

そこで、もしOutputにOP_RETURNというコードが含まれている場合は、UTXOをUTXOプールに格納しないという仕様に変更することで、UTXOプールの枯渇を防ぐことができるようになりました。ちなみに、もしOP_RETURNが記載されたUTXOがインプットに入ってきた場合は、検証無効となり送金が拒否されます。

 

まとめ

まとめてみると、なかなかなボリュームの記事になってしまいました。ほぼ、トランザクションスクリプトに関する記事になってしまったので、トランザクションスクリプトの種類を最後にまとめておきます。

 

代表的なトランザクションスクリプト

  • P2PKH
  • P2PK
  • Multi-Signature
  • P2SH
  • OP_RETURN

 

第2回はこちら

cryptocoin.hatenablog.com

 

インドネシアのお金と汚職にまつわるお話

しばらくインドネシアに暮らしていますが、財布がやけにパンパンになります。「財布 パンパン」で調べると、クレジットカードの大量保有や、ポイントカードの大量保有が一般的な原因としてあげられていますが、インドネシアやその他の新興国ではちょっと原因が異なるようです。

 

財布パンパンの原因その前に 汚職とお金

インドネシアの汚職撲滅委員会 (KPK) は、ジャカルタ市内のショッピングセンターで、違憲審査で便宜を図る目的で現金を受領したとして、憲法裁判所の判事を逮捕しました。

www.thejakartapost.com

 

このとき、日本円で約2,000万円近くの現金を受け渡していましたが、このときインドネシアの通貨であるルピアではなく、米ドルとシンガポールドルが使用されました。なぜルピアを使わなかったのでしょうか?

 

新興国の貨幣

新興国では一般的に高額紙幣が発行されていません。インドネシアの場合も、紙幣の最高額は100,000ルピア、日本円で約1,000円となっています。米ドルやシンガポールドルで支払われたのも、米ドルの1ドルはインドネシアルピアで約10,000ルピアになってしまい、現金の形で受け渡すには量が多すぎるからでした。

 

インフレが進む新興国では、一般的に紙幣の最高額がインドネシアのように実態に追いついていません。また最近では、2016年11月にインドがこれまで存在していた高額紙幣を廃止して話題になりました。

インド現地レポート 「高額紙幣の廃止」のナゼがわかる、モディ首相の戦略 | Forbes JAPAN(フォーブス ジャパン)

 

目的のひとつとして、現金が汚職、人身売買などで使用されることを防ぐことを掲げており、現金を通したやりとりを極力削減し、金融機関を通した取引にシフトしていくことで、お金のやりとりを見える化していく狙いがあります。

 

インドネシアはインフレが進み、長年高額紙幣の発行が取りざたされてきましたが、今回発生した汚職事件のような現金の受け渡しがルピアで行われるのを防ぐためにも、しばらくの間は高額紙幣が発行されないことが予想されます。

 

ということで、新興国で財布がパンパンになるのは、高額紙幣が発行されていないためです。しかもATMによっては、最高紙幣の100,000ルピアではなく、50,000ルピアが登場することもあるし。。。

f:id:steinith310:20170128134403j:plain

新興国の金融課題

とはいえ、インフレが進み貨幣価値が希薄化する中で、何枚もの紙幣を日常生活で持つのは大変です。

 

そこでインドネシアでは、ジャカルタを中心にデビットカードや携帯電話会社の決済システムを使用した決済が急速に浸透しつつあります。例えば、大手のコンビニエンスストアであるIndomaretやalfamartなどでは、デビットカード決済を多くの店舗で受け入れていますし、ジャカルタであれば街中の多くのレストランではデビットカードによる決済が可能です。

 

 

しかし、そのインドネシアでも銀行口座を持っている人は約6,000万人にすぎません(2015年3月時点)。つまり、インドネシアの総人口の約75%の人は銀行口座を持っていないということになります。高額紙幣を廃止したインドは少し状況が異なり、口座開設率は99.7%まで達しているものの、口座預金残高が0円の割合が約75%となっており、アクティブに使っている割合はインドネシアとあまり変わらない率になっています。

 

この層にいかにリーチするかは、銀行やノンバンク各社にとって収益向上の大きなカギとなります。また、Bitcoinにとっても、実体経済での使用率向上のために、重要なターゲット層になります。

インド、銀行口座普及率が急増 貧困層向け政策奏功、99.7%に (1/2ページ) - SankeiBiz(サンケイビズ)

en.tempo.co

 

Bitcoin使用率の拡充にはスピードが必要

これらの層は中間層以下の、いわゆる低所得者層であることが多く、金融機関がローンを提供するなどの収益源とみなすには、与信管理能力がまだまだ不足しており、口座開設に向けたインセンティブが不足している状態です。一方、海外に出稼ぎに出ている割合は高く、家族への送金のために廉価な送金システムへの需要は高まっています。

 

Bitcoinの拡大のためには、新興国経済が成長し、これらの低所得者層の所得が改善し、銀行側の口座開設意欲が高まる前に、Bitcoinの世界に取り込んでいくことが重要になります。

 

ひとつの手段として、新興国の取引所各社が全国展開している大手コンビニなどと提携することで、情報を広め、利用率を向上していくことが考えられます。実際、インドネシア最大手取引所のBitcoin.co.idは前述したIndomaretと提携して、Bitcoinの販売サービスを展開しています。

インドネシアのビットコイン取引所が大手コンビニと提携 | ビットコインニュースの BitBiteCoin

 

まとめ

少々強引なタイトルでしたが、新興国ではまだまだBitcoin拡充の余地があるものの、スピードを持って低所得者層を取り込んでいかないと、規模に勝る金融機関に勝てないよという警鐘です。

 

実際デビットカードは相当便利なので、コンビニなどの日常生活で使える程度のメリットではあまりBitcoinが伸びていく余地はないため、Bitcoin浸透のスピードを上げてシェアをあげ、決済手段のデファクトスタンダードにしていく動きが重要だと考えています。

 

ただ、中央の人間がいないBitcoin界では、音頭をとって進めていくのが難しく、歯がゆいところです。