Crypto Life

Tech in X

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

NEM デリゲートハーベスティングの仕組み

日本人はなぜかNEMが好きです。Twitter上ではRippleと並んで、NEMの批判が許されない雰囲気が漂っています。実際にNEMのノード数を見てみると、日本が他を引き離して堂々の1位です。

f:id:steinith310:20170617233122p:plain
NEM NodeExplorer


ちなみに、私が住むインドネシアの状況はというと、

f:id:steinith310:20170617233531p:plain


...1ノードもない。今ならインドネシアで最初のNEMノードになれそうですね。どうせなるなら、スーパーノードになりたいので、スーパーノードになるための300万XEMの寄付受付中笑


さて、NEMの魅力ですが、Ethereumほどの自由度はない一方、ドキュメント監査機能(アポスティーユ)やアセットの作成(モザイク)が、デフォルトで簡単にできる点は非常に魅力的ですね。しかしそれ以上に、「ハーベスティング」の存在がNEMの魅力を底上げしている気がします。

そもそもハーベスティングとは

ハーベスティングとは、NEMのトランザクションが詰まったブロックを承認する代わりに、そのブロックに詰め込まれたトランザクション手数料を受け取れる仕組みです。


Bitcoinでもマイニングによってトランザクション手数料を受け取ること(+新規コインの発行)ができますが、ASICと呼ばれるマイング特化のチップを利用して、ガンガン電気を使わないと収益が上がらない状況です。一方、ハーベスティングは「デリゲートハーベスティング」と呼ばれる方法を使えば、別のノード (NIS)に代わりにブロック承認作業をしてもらうことができ、高性能チップや電気代は必要ありません。


なお、どこかの雑誌がハーベスティングによってXEMが発行されるとアホなことを書いたようですが、ハーベスティングはあくまでも承認したブロックに含まれる取引手数料を受け取るだけなので、XEMが新たに発行されることはありません。

デリゲートハーベスティングの仕組み

デリゲートハーベスティング、一見魅力的ですがどのように動作しているのでしょうか?話を進める前に、少し用語の確認をしましょう。

Importance

NEMのハーベスティングはImportanceと呼ばれる、各アカウントに割り振られたスコアによってハーベストできる確率が変動します。インポータンスは主に保有しているNEMの量で決まりますが、それに加えて取引頻度や取引量なども考慮されて決定されます。

NEMの説明書 - ハーベスティングとは

ローカルハーベスティング

デフォルトのハーベスティング設定では、デリゲートハーベスティングではなく、ローカルハーベスティングが行われます。その名の通り、リモートのノード(NIS、NEM Infrastructure Server)ではなく、自身のPC上で動作しているノード (NIS)を利用してブロックの承認作業が行われます。


ローカルハーベスティングを行う際は、自身のアドレスにひもづく秘密鍵が自PC上のNISに渡されて、NISはその秘密鍵を利用してブロックに署名を行い、ブロックの承認を行います。なお、これはデリゲートハーベスティングでも同様ですが、ハーベスティングするには10,000XEM以上のXEM(正確には、VestedされたXEM)を保有している必要があります。

デリゲートハーベスティングとは?

さて、ハーベスティングを行う際には、ローカルハーベスティングで見た通り、自分自身の秘密鍵をノード(NIS)に渡す必要があります。しかし、秘密鍵を渡すということは、秘密鍵を受け取ったノードが自分のアドレスをコントロールできることを意味します。


自分が管理していないリモートノード(NIS)に代理でハーベスティングをしてもらう場合は、そのままだと自分が持っているXEMをリモートノードに奪われてしまうリスクがあるので、ちょっとした工夫が必要になります。デリゲートハーベスティングではブロック承認専用の「代理アカウント」を作成することで、この問題を解決しています。


まず、デリゲートハーベスティングでは、実際にハーベスティングを始める前に、NEMブロックチェーン上にトランザクションを送信します。このトランザクションは、自分自身のアカウント(以降、「本体アカウント」)が保有するImportanceを「代理アカウント」にマッピングします。これにより、代理アカウントは本体アカウントが保有するImportanceを利用して、ハーベスティングに参加することができるようになります。


このトランザクションはNEMのダッシュボードでは、「インポータンストランスファートランザクション (Importance Transfer Transaction)」と表示されます。その名の通り、本体アカウントのImportanceを代理アカウントにTransferしているということですね。
f:id:steinith310:20170617225519p:plain


代理アカウントはあくまでも本体の「代理」であり、代理アカウントは1XEMも保有していないので、安心して代理アカウントの秘密鍵をリモートノード(NIS)に渡すことができます。本体アカウントが持つImportanceの情報をもとにして、代理アカウントにブロック承認の機会をあたえられた場合には、リモートノード(NIS)が受け取った代理アカウントの秘密鍵を利用して、承認作業を実行します。


承認後、トランザクション手数料を受け取ることができますが、代理アカウントのアドレスにXEMを振り込むと、秘密鍵保有しているリモートノード(NIS)に、そのXEMを奪い取られてしまうおそれがあります。そこで、ハーベスティングしたトランザクション手数料は、本体アカウントのアドレスに対して振り込むようにすることで、リモートノード(NIS)がトランザクション手数料を奪い取ることができない仕組みにしています。

How Local and Delegated Harvesting Works


デリゲートハーベスティングを維持する理由と仕組み

デリゲートハーベスティングが存在することで、NEMではImportanceに応じて平等にブロックの承認機会が与えられることになります。Bitcoinではブロック承認機会が特定のマイナーに集中してしまっていますが、NEMではネットワーク利用者にネットワークへの貢献度に応じて平等にブロック承認機会(=トランザクション手数料の受け取り)が巡ってくることになります。


また、ハーベスティングを代理で実行してくれるリモートノードにインセンティブがないように思われますが、リモートノードのほとんどはスーパーノードと呼ばれるノードです。スーパーノードは取引手数料とは別に、NEM Supernode Rewards Programと呼ばれる財源からスーパーノード維持の対価としてXEMをもらうことができるため、ノードを維持するインセンティブが生まれています。


スーパーノードについて詳しくはこち
cryptocoin.hatenablog.com

最後に

デリゲートハーベスティングの仕組み、バッチリですか?
分かった人も、分からなかった人も、Let's harvesting!


実際にデリゲートハーベスティングをはじめたい人はタヌ神様ブログをチェック!
NEMのNANO Walletでハーベストする - 逆襲のタヌ神


Twitter上でのご要望にお応えして300万XEM支払い用のQRコードを置いておきます(警告!金額にはご注意ください
f:id:steinith310:20170618095831p:plain


少額でも寄付をいただける方は、こちらへいただけるとマジで嬉しいです!!
NBTNGAXWNRNKW5Q4TX6MJW4U7YIAGAE55YTJ3IMR

Layer2解説 第2回 アトミックスワップ

前回、マイクロペイメントチャネルについて解説記事を書きました。通常の順序で行くと、次の記事はライトニングネットワークになりますが、ここではいったん寄り道をしてアトミックスワップ(atomic swap)を先にご紹介したいと思います。

cryptocoin.hatenablog.com


というのも、マイクロペイメントチャネルとアトミックスワップの仕組みは似ており、マイクロペイメントチャネルを理解していると、アトミックスワップの話がスムーズに頭に入ってくるからです。また、アトミックスワップで使われる手法はライトニングネットワークでも利用されていることから、先にアトミックスワップを理解することでライトニングネットワークの理解が容易になります。

そもそもアトミックスワップとは?

アトミックスワップとは、異なるチェーン(コイン)間でコイン交換を実現する方法です。通常、コインの交換(例えばBitcoinとLitecoinの交換)には取引所が使われますが、その場合には取引所を信頼する必要があります。例えばBitcoinからLItecoinに交換したいときに、Bitcoinを取引所に預けた後でその取引所がBitcoinを持ち逃げすると、一時的であっても預けていたBitcoinが取引所に奪われてしまいます。


また、「Bitcoinを持つAlice」と「Litecoinを持つBob」との間で相対でコイン交換をしようとしても、AliceがBitcoinをBobに渡した後で、BobがAliceにLitecoinを渡さずに逃げてしまう可能性があります。当然逆もしかりで、先にBobがAliceにLitecoinを渡したとしても、Aliceが受け取ったLitecoinを持ち逃げしてしまうおそれがあります。


この問題に対応するべく、P2P取引所のひとつであるBitsqureでは「仲介人」という仕組みを利用しています。例えば、当事者間で認識齟齬、紛争が発生した場合には、仲介人の判断で送金の実施、キャンセルができるようになっています(2 of 3マルチシグを利用)。しかし、この手法は仲介人の判断に依存しており、真にトラストレスということはできません。

注目が高まる分散型オープンソース・エクスチェンジ「Bitsquare」とは | ビットコインの最新情報 BTCN|ビットコインニュース
Bisq - The decentralized Bitcoin exchange


アトミックスワップは第三者を介さず、なおかつトラストレスにコインの交換を行うことができるため、これらの問題を解決することができます。

アトミックスワップ理解のための前提 スクリプト

「Bitcoinを送金する」とよく言いますが、実際には、Transaction Outputを送金先の人にロックすると言ったほうが今後の話を理解しやすくなります。


例えば、「AliceがBobにBitcoinを送金したい」場合、AliceはトランザクションのOutputにBobだけが解読できる情報を記載します。これで、このTransaction Outputは、誰もが使えるわけではなく、Bobに"ロック"されている状態になります。BobはBobが持っている秘密の情報を利用してトランザクションのInputに署名することで、そのTransaction Outputを利用することができるようになります。このOutputには、上記例のように「Bobだけが解読できる情報」を埋め込むこともできますし、「AliceとBobの2人が揃わないと解読できない情報(マルチシグ、2 of 2)」のような複雑な条件も埋め込むことができます。


また、このスクリプトはチューリング完全ではないものの、一種のプログラム言語として動作するので、単純な条件分岐処理を埋め込むこともできます(詳しくは、OP_IFで検索してみてください)。


スクリプトについてはこちらにまとめています
cryptocoin.hatenablog.com

アトミックスワップの仕組み

前回同様、マルチシグとタイムロックが登場します。また、先にマイクロペイメントの仕組みを理解した方が理解が早いと思うので、まだ前回の記事をお読みでない方は先にそちらを読むことをオススメします。

cryptocoin.hatenablog.com

基本的な流れ

基本的な流れは以下の通りです。

  1. AliceがBobにBitcoinを渡すトランザクションを作成する。但し、このトランザクションを使用するにはBobの署名と、Aliceが持つ秘密情報 (X)が必要 (BTC Pay Transaction)
  2. BobがAliceにLItecoinを渡すトランザクションを作成する。但し、このトランザクションを使用するにはAliceの署名と、Aliceが持つ秘密情報 (X) が必要 (LTC Pay Transaction)
  3. LTC Pay TransactionをAliceが使用して、AliceはLItecoinを手にいれる。このとき、Aliceの持つ秘密情報 (X) もブロードキャストされる
  4. BTC Pay TransactionをBobが使用して、BobはBitcoinを手にいれる


勘の良い方はお気づきかもしれませんが、秘密情報(X)がアトミックスワップの実現のために重要な鍵となります。それでは順をおって、処理の流れを見ていきましょう。

1. AliceがBobにBitcoinを渡すトランザクションを作成する (BTC Pay Transaction)

Aliceは、BobにBitcoinを渡すトランザクションを作成します。正確に言うと、Aliceは、以下の情報のいずれかがないと解読できないTransaction Outputを作成します。


BTC Pay Transactionの利用条件
1) BobとAliceの両方の署名(マルチシグ、2 of 2)
2) Bobの署名とAliceだけが知るXという情報


f:id:steinith310:20170514232212p:plain


利用条件2)で登場したXは、Aliceが任意に選ぶことができる乱数です。AliceはこのXを公開せずに、手元にとっておきます。最終的にこのXという情報をBobが署名とともにブロードキャストすると、BobはこのTransaction Outputを利用することができます。


以下の引用は、具体的なTransaction Outputの例になります。以下のスクリプトの6行目 (OP_HASH160から始まる行)のように、Xにハッシュをかけた値 (H(x))を、Transaction Outputに埋め込んでおきます。このトランザクションを利用したいBobは自分の署名とともにXをTransaction Inputに埋め込みます。もし、Xにハッシュをかけた値がH(x)となれば、Bobはこのトランザクションを利用できるということになります。

OP_IF
// Refund for A
2 <pubkeyAlice> <pubkeyBob> 2 OP_CHECKMULTISIGVERIFY
OP_ELSE
// Ordinary claim for B
OP_HASH160 <H(x)> OP_EQUAL <pubkeyBob> OP_CHECKSIGVERIFY
OP_ENDIF

Alt chains and atomic transfers


さて、このトランザクションをマイクロペイメントでいう「Deposit」としてブロードキャストするわけですが、Bobが失踪してもAliceがDepositした金額を回収できるように、ブロードキャストの前にRefund Transactionを作成する必要があります。もちろん、AliceがDepositしたBitcoinをすぐには引き出せないように、Refund TransactionにはTimeLockをかけておきます。


Refund TransactionにAliceとBobが署名することで、BTC Pay Transactionの利用条件1)を満たしますので、もしBTC Pay Transactionが利用されずにTimeLock期限が到来したら、AliceはいつでもこのDepositした金額を回収することができます。


f:id:steinith310:20170514222349p:plain

2. BobがAliceにLitecoinを渡すトランザクションを作成する (LTC Pay Transaction)

続いて先ほどとは逆に、BobがAliceにLitecoinを渡すトランザクションを作成します。手順1. とほぼ同じことを実施するのですが、一点だけ注意が必要です。それは、Bobがトランザクションを作成する際にも、BTC Pay Transactionで利用したのと同じH(x)を条件式に利用することです。

OP_IF
// Refund for A
2 <pubkeyAlice> <pubkeyBob> 2 OP_CHECKMULTISIGVERIFY
OP_ELSE
// Ordinary claim for B
OP_HASH160 <H(x)> OP_EQUAL <pubkeyAliceb> OP_CHECKSIGVERIFY
OP_ENDIF


ハッシュ関数は一方向関数であり、元の数字からハッシュ値を導くことは容易にできますが、ハッシュ値から元の数字を導くことは(ほぼ)不可能です。つまり、H(x)からXを導くことはできませんから、Aliceは安心してH(x)をBobに伝えることができます。


f:id:steinith310:20170514222725p:plain

3. LTC Pay TransactionをAliceが使用する

1.で見た通り、AliceはXという値を知っています。そのためAliceは、LTC Pay Transactionを即座に利用可能です。


f:id:steinith310:20170514223520p:plain

4. BTC Pay TransactionをBobが使用する

3.でAliceがLTC Pay Transactionを使用するまで、BobはBTC Pay Transactionを使用することはできませんでした。しかし、3.でAliceがLTC Pay Transactionを使用したことで、BobはXの値を知ることができたので、BobもBTC Pay Transactionを使用することができます。


f:id:steinith310:20170514223641p:plain


以上の通り、AliceとBobはお互いを信頼することなく(トラストレスに)、お互いが持っていたBTCとLTCを交換することができました。

まとめ

マルチシグとXという秘密情報を導入することで、二者間でトラストレスに通貨の交換ができました。今回登場したXという秘密情報を利用するアイデアは、最近話題のライトニングネットワークでも鍵となる考え方です。


ライトニングネットワークの場合は第三者を中継してBitcoinを送金するため、途中でBitcoinを中継者に持ち逃げされてしまうおそれがあります。Xという秘密情報を導入することで、最終的な受取人にBitcoinが渡った後でないと、中継者はBitcoinを受け取れないという仕組みにしています。詳細は次回!

Layer2解説 第1回 マイクロペイメントチャネル

BitcoinでLightning Networkを実現する方法はいくつか提唱されていますが、いずれの実装方法もマイクロペイメントチャネルを拡張することで実現しようとしています。今回は、マイクロペイメントチャネルの仕組みを見ていきたいと思います。

マイクロペイメントチャネルの概要と理解のための前提

マイクロペイメントチャネルとは、二者間でブロックチェーンを利用せずに複数回の少額送金を実施するための技術です。複数回の少額送金をブロックチェーン上で実施しようと思うと以下のような問題に突き当たります。


送金者側の負担:取引ごとの手数料
現在Bitcoinでは1トランザクションあたり、数十円から数百円の手数料がかかっており、例えば継続して少額の決済をするような場合(例えば、ガス代金の支払いなど)には、毎回毎回手数料がかかることで手数料負担が重くなってしまいます。


受取人側の負担:非効率なトランザクションによる手数料上昇
少額決済を繰り返すと、ウォレットの中には細かな単位のBitcoinが積み重なることになります。Bitcoinの取引手数料は、送金額ではなく、送金トランザクションのサイズで決まるため、それらのBitcoinを送金に利用しようとすると、トランザクションサイズが大きくなり、取引手数料が高くついてしまいます。


マイクロペイメントチャネルを利用すると、一定期間の間に実行された送金/受金を相殺して一つのトランザクションにまとめた上でブロックチェーンに書き込むため、送金者の取引手数料を節約することができます。また、トランザクションがひとつにまとまるので、受け取ったトランザクションを利用するときにトランザクションサイズが大きくなることも防げます。


さて、これからマイクロペイメントチャネルの仕組みを解説していきますが、マイクロペイメントチャネルを理解するにはいくつかの前提となる知識をおさえる必要があります。

  • マルチシグ (2 of 2)
  • Locktime

(トランザクションの構造(Input / Output)はわかっている前提です。)

マルチシグ

通常のBitcoinの送金は、「送金先のアドレス」を指定します。アドレスはPublic Keyに対してハッシュ値をかけたものなので、この送金方法をP2PKH (Pay-to-Public-Key-Hash)と呼びます。この場合、受け取ったBitcoinを受取人が使うためには、受取人であることを証明するために受取人の秘密鍵で送金トランザクションに対して署名する必要があります。


これに対して、複数人が署名することで、はじめてBitcoinを利用できるということにしたい場合があります。例えば、企業の調達部門が資材の対価をBitcoinを使用して支払う場合に、調達担当者に加えて経理担当者の承認を必要とするといった場合です。これを実現するのがマルチシグです。


マルチシグを使いたい受取人は、まず受取人のPublic Key全て(上の例の場合は、調達担当者と経理担当者のPublic Key)を送金者に教えます。送金者は受け取ったPublic Keyの両方を受取人とする形で、トランザクションを作成しネットワークに送信します。受取人は、受取人全員(上の例では、調達担当者と経理担当者)が署名したトランザクションをネットワークに送信することで、受け取ったBitcoinを送金に利用できます。


なお、マルチシグは一般的に「2 of 2」のように、「数字1 of 数字2」の形で表現されます。数字2は受取人の数を表し、数字1は受け取ったBitcoinを利用するために必要な署名の数を表しています。例えば「1 of 2」の場合は、受取人は2人いますが、受け取ったBitcoinを利用するには2人のうち1人の署名があれば十分ということになります。

Locktime

「一定時間経過しないとBitcoinを利用できない」ということを実現するための仕組みがLocktimeです。


送金者はLocktimeにブロックの高さ、または時刻を指定します。指定されたブロックの高さ、または時刻以降にならないと、そのトランザクションは各ノードに伝播されたり、ブロックに取り込まれたりすることはありません。

マイクロペイメントチャネルの仕組み

話を簡単にするため、例を用いて説明していきます。登場人物は以下の通りです。
Alice:Bitcoin送金者。ガス会社であるBob Corporationと契約してプロパンガスを利用している。
Bob:Bitcoin受取人。Bob Corporationを経営している。

基本的な仕組み

マイクロペイメントチャネルでは、AliceとBobのマルチシグアドレスに対して、Aliceが一定額のBitcoinをDepositすることで取引開始となります。ここでは仮に、Aliceがマルチシグアドレスに対して、10 BTCをDepositしたと仮定して話を進めます(このDepositトランザクションをOpening Transactionと呼称することとします)。


Opening Transactionをブロードキャストする前に、Aliceの10BTCがマルチシグアドレスにロックされたままにならないように下準備が必要になります。例えば、以下のような事態が考えられます。

  • Bob Corporationが倒産
  • Aliceがガス会社を乗り換えようと思った時に、Depositしている10BTCをBob Corporationに人質として取られる


この事態を防ぐため、Opening TransactionのDeposit額全額(10 BTC)をAliceに返金するトランザクションにAliceとBobが署名して、Aliceがそのトランザクションを保持しておきます (以後、Refund Transactionと呼称します)。また、すぐにDepositがAliceによって引き出されることを許容すると、今度はBob CorporationがAliceに騙されてしまうおそれがあるため、このトランザクションにはLockTimeを設定しておきます。例えば、ガス契約期間を1ヶ月間と仮定して、このトランザクションが利用できる日を1ヶ月後のX月31日としておきましょう。BobはX月31日を過ぎた後もマイクロペイメントチャネルを閉じないでいると、このトランザクションによって全額をAliceに戻されてしまうので、X月31日までにマイクロペイメントチャネルを閉じる必要があります。


f:id:steinith310:20170512012446p:plain


さて、Bob CorporationはAliceとガス契約を結んでいます。話の単純化のために、Aliceが1回ガスを使用すると、使用量に関わらずAliceはBobに対して1BTCを支払わなければならないとします。


X月1日、Aliceはガスを一回利用しました。AliceはBobに対して1BTCを支払わなくてはなりません。そのために、AliceはOpening TransactionをInputに利用したトランザクションを作成してAliceの署名を施し、Bobに対してこのトランザクションを送信します (以後、Pay-to-Bob Transaction1と呼称します)。この時点ではまだBobの署名がなく、ブロードキャストされていないため、このトランザクションがブロックチェーンに書き込まれることはありません。


Pay-to-Bob Transaction1
■Input
Opening Transaction
■Output
to Bob Address 1BTC
to Alice Address 9BTC


BobはもうこれでAliceとの契約を終わりにしたければ、Aliceへのガス供給をストップして、Pay-to-Bob Transaction1にBobの署名を加えた上で、他のノードにブロードキャストします。しばらくした後、このPay-to-Bob Transaction1はブロックチェーンに書き込まれて、取引が確定します。すなわち、マイクロペイメントチャネルがクローズされることとなります。


ここでは、BobはAliceと引き続き契約を継続したいため、このトランザクションをブロードキャストせず、Bobの手元にとっておいたとします。


X月2日、Bobの思惑通り、Aliceは再びBob Corporationの高額なガスを利用したため、AliceはBobに1BTCを追加で支払わなければなりません。ここでAliceは新たなトランザクションを作成して、Aliceの署名を加えた上でBobにこのトランザクションを渡します(Pay-to-Bob Transaction2とします)。


Pay-to-Bob Transaction2
■Input
Opening Transaction
■Output
to Bob Address 2BTC
to Alice Address 8BTC


このトランザクションはPay-to-Bob Transaction1と同様に、Opening TransactionのOutputをInputとして消費します。同じOutputが二回使われることはないため、Pay-to-Bob Transaction1とPay-to-Bob Transaction2は両方とも利用されることはなく、どちらか片方だけが利用されることになります。受け取ったBobが取引を確定させたい場合は、当然受け取る額が大きいPay-to-Bob Transaction2をブロードキャストすることになります(仮にBobがPay-to-Bob Transaction1をブロードキャストした場合は、Bobは1回分のガス利用料を取り逃がすことになります。Bobが損するだけなので、Bobがそれを選ぶのは自由ですが、BobがPay-to-Bob Transaction1をブロードキャストするインセンティブはありません)。


f:id:steinith310:20170512013029p:plain

双方向での送金

さて、Aliceはここに来てやっと、ガス料金が高すぎることに気づきます。Bobに文句を言い、ガス料金を1回あたり1BTCから、1回あたり0.1BTCに減額してもらうことができました。しかも、過去分にも遡求して適用してくれるそうです。


BobはAliceに対して1.8BTC (2 - 0.2)を返金する必要があります。通常の取引であれば、BobからAliceに1.8BTCを送るだけですが、せっかくなので既に作られているマイクロペイメントチャネルを利用して返金することにします。返金するためには、以前の取引をなかったことにして、新たに0.2BTCをAliceからBobに送ることにすればよさそうです。そこでAliceは、以下のトランザクションを作成・署名して、Bobに送りました。


Pay-to-Bob Transaction3
■Input
Opening Transaction
■Output
to Bob Address 0.2BTC
to Alice Address 9.8BTC


f:id:steinith310:20170512094218p:plain


これに安心したAliceは、Bob Corporationは返金に応じてくれて、Bitcoinも使えるいい会社だと友達にも紹介し始めます。紹介された友達はAliceの勧誘に応じて続々とBob Corporationと契約を結びました。


しかし、Bob Corporationの経営は悪化していました。できる限りのBitcoinを受けとった上で計画倒産するべく、最後に送られてきたPay-to-Bob Transaction3ではなく、2BTCを受け取ることができるPay-to-Bob Transaction2をブロードキャストして、ペイメントチャネルをクローズしてしまいます。これにより、Aliceは0.2BTC支払うだけでよかったはずが、2BTCを支払うことになってしまいました。さらには勧誘した友達からもそっぽを向かれてしまいます。Aliceは裁判所で戦うことを決意しました。


f:id:steinith310:20170512094055p:plain


このままAliceとBobの法廷闘争を続けてもいいのですが、法廷闘争になる前にこの事態を防ぐことはできなかったのでしょうか?よくよく考えてみると、Bobの詐欺行為を防げなかった原因は過去分のトランザクションを取消しできていなかった点にありそうです。

過去トランザクションの取り消し

それではどのようにすれば、過去トランザクションを取消すことができるでしょうか?ここでは再びマルチシグとLocktimeを利用することで、この問題を解決します。どういう発想をするかというと、「もし過去のトランザクションをBobが使ってしまった場合、Depositしていた全額をAliceに戻してしまうという約束にしておけば、Bobが過去のトランザクションを使うインセンティブをなくすことができる」と考えます。


さて、AliceとBobのマルチシグにAliceが10BTCをDipositしたところまで時間を遡ります。
今回Aliceは、Bobに騙されない方法を考案しました。最初の1BTCのガス代支払いのために、Aliceは以下のPay-to-Bob Transaction1をBobに送ることにしました。


Pay-to-Bob Transaction1
■Input
Opening Transaction
■Output
to マルチシグ (Bob Temporary Address1 & Alice Address) 1BTC
to Alice 9BTC


f:id:steinith310:20170512015210p:plain


騙されてしまった最初のPay-to-Bob Transaction1からの変更点は、「Bobに1BTCを送金するOutoput」が、「マルチシグへ1BTCを送金するOutput」になっている点です。注意が必要なのは、マルチシグで使われているBobのAddressはTemporary、つまり捨てアドレスである点です。ここではその意味には深く入らず、先に進むことにします(後で過去トランザクションを無効化するタイミングで、なぜ捨てアドレスを利用したかがわかります)。


さて、Bobが1BTCを最終的に獲得するには、このトランザクションに加えて、マルチシグからBob Addressへの支払いトランザクションを作成する必要があります。そこで、Aliceは以下のトランザクションに署名して、Bobに送っておきます。なお、このトランザクションにはLockTimeを設定しておきます。ここではOpening TransactionのLocktimeより1日だけ前のX月30日にLockTimeを設定しておきましょう。


Pay-to-Bob Transaction1-a
■Input
Pay-to-Bob Transaction1
■Output
to Bob 1BTC
LockTime付き


Bobは1BTCの受け取りで取引を確定させたければ、Pay-to-Bob Transaction1とPay-to-Bob Transaction1-aトランザクションに署名をしてブロードキャストすれば取引を確定できます(Locktime分、受け取りを待つ必要はありますが)。


さて、Aliceはガスを再び利用してしまったので、もう1BTCを支払う必要があります。今回はPay-to-Bob Transaction2を送るのに加えて、過去分のトランザクション(Pay-to-Bob Transaction1)を取り消してみたいと思います。まずは、さきほどと同様にAliceはトランザクションを作成します。


Pay-to-Bob Transaction2
■Input
Opening Transaction
■Output
to マルチシグ (Bob Temporary Address2 & Alice Address) 2BTC
to Alice 8BTC


このトランザクションをBobに送り、Bobがこの新規トランザクションの状態を承認した場合は、BobはBob Temporary Address1を作成するのに利用した秘密鍵をAliceに送ります。これで準備完了、Bobは過去のトランザクションを使えなくなりました。捨てアドレス (Temporary Address)を使用していたのは、秘密鍵をAliceに暴露するためだったのです。


ここで例えばBobがTransaction1を誤ってブロードキャストしたとします。Bobとしては「Pay-to-Bob Transaction1-a」を利用して、BitcoinをBobのアドレスに送ろうと考えます。しかし、このトランザクションはLocktimeが設定されていてX月30日までは送金を確定することはできません。そこでAliceは、約束を破ったBobに対して制裁を加えるべく、さきほど受け取った「BobのTemporary秘密鍵」と「Aliceの秘密鍵」を利用して、以下のトランザクション (以下、Remedy Transactionと呼称します)を作成してブロードキャストします。これにより、AliceはDipositしていた10BTC全額を回収することができます。


Remedy Transaction
■Input
Pay-to-Bob Transaction1
■Output
to Alice 1BTC


f:id:steinith310:20170512015931p:plain


このように、Bobが過去のトランザクションを使用した場合には、Aliceは(LockTimeが到来するまでは)いつでもDepositしていた全額を回収可能ですので、Bobが過去のトランザクションを利用するインセンティブはなくなります(今の例ではそもそもBobが過去トランザクションを利用するインセンティブはありませんでしたが、Transaction3を作成した時のようにBobの取り分が少なくなるパターンでは、Bobが過去トランザクションを利用するインセンティブが生まれるので、このような仕組みで過去のトランザクションを無効化する必要があります。)


以上の通り、過去トランザクションを取消すことができました。あとは、Bobが最新のトランザクションを確定させたくなったら、最新トランザクションをブロードキャストすることで、トランザクションをブロックチェーンに書き込み、いつでもペイメントチャネルを閉じることができます。


さらに、Aliceの側からもペイメントチャネルを閉じることができるように、Bobもトランザクションを作成・署名してAliceに渡しておくというステップを追加すれば完成です。ここは大した話ではないと思うのですが、文章で書くとダラダラ長くなってしまうので、詳細を知りたい方は以下のリンクの解説記事その1をご覧ください。


Layer2解説、第2回はアトミックスワップ
cryptocoin.hatenablog.com

参考資料

概要記事
http://doublehash.me/micropayment-bitcoin/#more-1083
ビットコインの Lightning Network メモ
Working with micropayment channels (英語)


解説記事 (英語)
解説記事その1。体系的にまとまっていて、なおかつわかりやすい。
Lightning Networks Part I: Revocable Transactions – Rusty Russell's Coding Blog

解説記事その2。Lightning Networkの解説資料だが、前半はほぼマイクロペイメントチャネルの説明。詳細解説版。
https://lightning.network/lightning-network-paper.pdf


マルチシグやLocktime
安定のMastering Bitcoin。

Mastering Bitcoin: Unlocking Digital Cryptocurrencies

Mastering Bitcoin: Unlocking Digital Cryptocurrencies


cryptocoin.hatenablog.com

Ethereumプロジェクト紹介 第2回 EncryptoTel

前回の「Ethereum プロジェクト紹介」では、Melonportを取り上げました。今回は、ICO情報サイトのcoinscheduleの情報を元に、直近のEtheruem ICOに関わるプロジェクトを見ていきたいと思います。まずは、EncryptoTelを取り上げます。

Coinschedule - The best cryptocurrency ICO list. Only selected ICO crowdfunding projects


掲載予定
EncryptoTel (今回)
MobileGO
Veritaseum
Back To Earth
Populous
FundRequest

(*) ここに掲載しているプロジェクトは、これから調査予定で、現時点では詳細を調べていません。ここに掲載する情報は投資をオススメするものではなく、ただの調査リストとお考えください。


前回の記事
cryptocoin.hatenablog.com

EncryptoTel

公式サイト
Encrypto Telecom
f:id:steinith310:20170422183558p:plain

Whitepaper
http://ico.encryptotel.com/assets/pdf/EncryptoTel_WP_v1.pdf


このプロジェクトでは、SkypeやLine通話のようなWeb通話を暗号化することで、個人間、企業間の通話を盗聴から防ごうというプロジェクトです。公式サイトでは個人間の通話に関しても情報が掲載されていますが、メインとなるターゲットは企業で使用されているPBX(後ほど記載)を、EncryptoTelでリプレースすることのようです。


具体的な使用方法ですが、ZoiperなどのIP電話の統合管理ソフトと接続して利用する形になるようです。設定方法はこちらのPDFにまとまっています。
https://encryptotel.com/files/OtherMobile.pdf


PBX
PBXとはPrivate Branch Exchange (構内交換機) の略で、企業内で電話交換をするための装置になります。いわゆる、「内線」を実現するための機械、仕組みです。最近では複数拠点間でIP通信を実現し、電話代を抑えることが可能なクラウド型PBXも登場しています。EncryptoTelはこのクラウドPBXの一種としてカテゴライズできるかと思います。


基礎から始めるIP-PBX[第1回 IP-PBXのイメージを掴もう] | Call Center Trends


クラウド全般にいえることですが、企業がクラウドを導入しようというときに最も懸念する点が「セキュリティ」です。複数社で機能を共有することで規模の経済が働くため、一般的にクラウドのほうがコスト面で優れていますが、外部ネットワークに接続する必要があることから、盗聴の危険性は少なからず上昇します。これに対して、例えばクラウドベンダーのAWSなどではVPNだけではなく、専用線の引き込みを認めるなどしてセキュリティに対する懸念払拭に取り組んでいます。

仕組み

さて、肝心のEncryptoTelのWhitepaperを読んでみます。しかし、残念ながら、Whitepaperを読んでも思想やら、提供予定の機能紹介ばかりで、技術的な仕組みが全く書かれていません(笑)。推測100%ですが、以下のような感じかと考えています。


ユーザ登録機能:ブロックチェーンを利用
PBX機能:ブロックチェーンを利用+PBX用のスーパーノードを構築 (?)
通話履歴管理+課金機能:ブロックチェーンを利用
通話機能:通常のP2P通信を利用


例えばSkypeでは、ユーザ登録情報を中央のサーバで一元管理しています。その部分は確かに中央集権的な仕組みを利用せずとも、ブロックチェーンを利用することができるのでサーバ構築・運用費用分のコスト削減は可能かと思います。


また、ブロックチェーンとは一切関係がありませんが、Bitcoin / Litecoinでの利用料支払いを認めることで (他にはUSD, EURで支払いが可能)、通話通信だけでなく、支払いに関しても匿名性を担保しようとしています。

開発方針

現在β版としてEncryptoTelがサーバを保有する形でのクラウド型システムを提供しているようです。ICOにより開発資金を集め、現在のクライアントサーバ型のシステムから、ブロックチェーンを利用したシステムに変更を図っているようです。

トークンの用途

トークンはPBXやIP通話の利用料の支払いに利用されるようです。BitcoinやLitecoinでの支払いも同様に認めるようですが、ETT (EncryptoTel Token)を利用した場合は、ディスカウントすることでETT保有意欲を高める政策です。それに加えて、ETTを保有することで、EncryptoTelの意思決定への参加や、経営状況を確認するサイトへのアクセスができるようになる予定です。
The EncryptoTel Token (ETT): fuel for our telecommunications ecosystem



また、トークンの管理方法は少し特殊な方法を採用しており、EtheruemとWavesの2環境でシームレスにトークンを保持する仕組みになっています。この仕組みの実現には、Blockswapが利用されています。ちなみにBlockswapは次号でお届けする予定の、「MobileGo」でも使用されており、ICOの際のスタンダードになりつつあるのかもしれません。
What is BlockSwap and why will MobileGo use it? — Steemit


問題点

PBXの仕組みをどのようにブロックチェーン上で実現するつもりなのかの詳細がありません。PBXを実現するためには、当然ですがPBX内のネットワークと外部の電話網を接続する必要があります。当然ブロックチェーン上でPBXを実現しようとする場合も同様で、ブロックチェーンを保持する各ノードから既存電話網に接続されている必要があります。


通話だけを行うノードもブロックチェーン上に存在すると仮定すると、一種のスーパーノードとしてPBXノードを定義する必要があります。仮にこのPBXノードをEncryptoTelが維持する構成だとすると、結局既存のクラウド型PBXとやっていることは同じになりますので、ブロックチェーンを利用する必要がまったくありません。


唯一新規性があるとすれば、ペイメントまで含めた匿名化ですが、これに至ってはPBX用のブロックチェーンとは一切関係ないため、例えば既存のPBX業者がBitcoin支払いを認めたらそれだけで新規性は失われてしまいます。


肝心の通信暗号化にしても、Skypeなどでも既に採用されているTLSを利用しているだけで新規性は全くなく、ブロックチェーンを利用する必要性も特にありません(おそらく通信はSkypeなどと全く同様のP2P通信でしょう)。

結論

開発資金を集めるためだけのICOのように思えます。既存のクラウドPBXで十分でしょう。




あとがき
EncryptoTelはともかく、ICOプロジェクトを調べると、既存ビジネスや技術の勉強 (今回だと、PBX)ができていいですね(笑)

Bitcoin紀行 in シンガポール

ある朝、目を覚ました時、これはもうぐずぐずしてはいられない、と思ってしまったのだ。私はシンガポールのランデヴーホテルにいて、土曜の朝をどう過ごそうかと、ベッドの中で考えていた。


Bitcoinを使ってカフェをめぐる。ジャカルタでは到底できないことであるが、シンガポールでならもしかしてという思いがあった。シンガポールは元々はマレー人の土地を、イギリスのラッフルズが開発した土地であるが、インド洋と太平洋を結ぶ重要な場所に位置したことから、貿易港として発展してきた街である。貿易港という性格から、多様な人種が共存しており、いかにもBitcoinを使うのに適していそうな土地柄であった。


そのような思いを抱きながら、シンガポール行きの飛行機に乗り込んだまでは良かった。しかし、シンガポールにいざ着いてしまうと、当初の目的を忘れさせるシンガポールの魅力に抗えなかった。


マーライオン、マリーナベイサンズ。書いてみると陳腐だが、どれもシンガポールを代表する観光スポットであり、一度は行って見なければと思ってしまう。さらに、実際に行ってみるとどこも想像を超えて楽しませてくるので、ますます深みにはまってしまう。
f:id:steinith310:20170416232705j:plain

結局、着いた初日は観光に明け暮れてしまい、Bitcoinを使ってカフェをめぐるという当初の目的はすっかりと頭から消え去ってしまっていた。




そんな中到着2日目、土曜の朝を迎えたわけであるが、Twitterを見ているとあるワードが目に飛び込んできた。


Bitcoinはコーヒーを買うためのものではない」


この私がやろうとしていたことを真っ向から否定する言葉を見た時、私はもうぐずぐずとしてはいられないと思ってしまったのだった。シンガポール人 - 中国人というべきかもしれないが - は合理的な人種だ。オランダ、イギリス統治時代には植民地官僚として、都市設計や警察機構を担っていた。そこには、現地人の反感を直接支配層に向けないという白人支配層の狡猾な理由もあったわけだが、中国人の持つ合理的な思考もその一因であろう。


そんなシンガポール人がBitcoinの決済をしていないというのは、Bitcoinがコーヒーを買うような少額決済に向かないという、ある種の証拠を与えてしまうことになる。そのような間接的な証拠を提示するわけにはいかなかったのである。

Aristry Cafe

外は快晴であった。雨の中出て行くのは憂鬱だが、この天気であれば、気分よく出発できそうだ。地図を見ながら、この日のターゲットを決める。とりあえず1件目として選んだのは、Aristry Cafeであった。ここを1件目に選んだ大した理由はなく、以前あるブログでそこのコーヒーを酷評していたのが気になったからであった。


だいたい、Bitcoinを受け入れるようなコーヒー屋がうまいコーヒーを出すわけがないか。そう思いながら、マリーナベイサンズを抜ける約5キロの心地よいランニングの後に、アラブストリートの近くに位置する、そのコーヒー屋にたどり着いたのであった。


店内は朝の光が絶妙に差し込んでおり、気持ちの良い空間が広がっていた。注文したコーヒーとハッシュドポテトのブランチメニューもなかなかの味であった。ビットコイナーらしくない味だ、と思いながらも、これがビットコイナーのグローバルスタンダードなのかと妙な感慨に耽りながら、ランニングでクタクタの胃に朝食を流し込んだ。
f:id:steinith310:20170416233924j:plain


胃に満足感を覚えた後、会計をしようとレジに向かうが、この瞬間はいつも一種の背徳感を覚える。フィアット通貨が世の中のスタンダードなのに対して、大して便利でもないBitcoinをあえて使うのはたいそうな言い方をすれば革命家的な、悪くいうと少しイタい人というレッテルを貼られてる気になってしまう。もっとも、受け取る側も同じ穴の狢であるので、気にする必要はないわけだが。


「この店ではBitcoinが使えるって聞いたんだけど?」
Bitcoinね?ちょっと待ってね。」


幸先順調である。少し褐色の肌をしたマレー系美人がBitcoinと囁くことに微かな興奮を覚えながら、その瞬間を今か今かと待った。


しかし、どうも様子がおかしい。この美人な店員はあまり決済の仕方が分かっていないようであった。たまらず奥から、こちらもマレー系と思われる男の店員がでてくる。


Bitcoinは今は取り扱っていない。」


あー、そうか。ビットコイナーにしては、おしゃれなカフェだと思っていたが、使えないということを聞いて、納得がいった。


男の店員曰く、最近はトランザクションの承認に時間がかかるから、決済をやめているとのことであった。所詮、その程度のビットコイナーだったのだなと思いつつ、シンガポール人のビジネス感覚にしばらく感心してしまった。彼らにとってBitcoinは手段であって、目的ではないのだと。


New Green Pasture Cafe

気をとりなおして、2件目のNew Green Pasture Cafeに向かう。ここはGoogleマップ上の評価で、星5を付けており期待していたカフェであった。


しかし、ビルの前まで行ってそれが大きな期待外れであることがわかった。カフェは中華街のフォーチュンビルという建物の4階に入っていたのであるが、外見からはどう見てもBitcoinが使えるようには見えないのである。
f:id:steinith310:20170416235538j:plain


おそらく周辺の再開発をした際に、立ち退きを迫られた中小小売業者が優先的に入居したビルなのであろう。Bitcoinの先進的なイメージとはかけ離れた、東南アジアのゴタっとした空間が広がっていた。だいたい、フォーチュンビル、占いビルという名前からしてセンスがない。


4階に上ると、これまた期待ができない雰囲気の店があった。New Green Pastureと言うから、緑の多い公園内にでもあるのかと思ったが、実態は緑色の照明を灯して、店内で薬草を栽培する怪しげな店であった。幸か不幸か、まだ営業時間外であったため、この日はホテルに帰ることにする。1日で2回も痛い目を見るのは精神衛生上よくなかった。


その日はインド人街でカレーを食べた後、ガーデンズバイザベイに行き、久々に都会の、だが新鮮な空気を味わった。同じ東南アジアでもここまで差が出るのはどこに原因があるのかと、答えの出ない考えに耽りながら、その夜は更けていった。
f:id:steinith310:20170416234348j:plain


翌朝、前日と同じようにランニングをしながら、次のカフェに向かうことにする。Sarniesというこちらもなかなか評判の良いカフェであった。店の前まで行っても、前日AristryやNew Green Pastureに感じた違和感はない。オシャレ過ぎず、かといって雑多でもない、シンプルないかにもBitcoinを取り扱っていそうなカフェであった。


意を決して乗り込もうと思ったのだが、またもやアクシデントに見舞われる。そのカフェはモールの中にあるのだが、モールの自動ドアが開かないのだ。扉の前を行ったり来たりするが、一向に開かない。おかしい、と思い、Googleマップを見ると、開店時間は確かに8時と書いてある。


もう少し粘ろうか、そうも思ったが、時計の針は既に10時を回っている。空腹感には勝てず、結局別のカフェに行くことにしてしまった。


喜園珈琲店は、地元の人たちが朝ごはんを取ろうと賑わっていた。ビーフンや揚げものなど色々な誘惑があったが、店の定番であるカヤトーストとコーヒーを頼むこととする。カヤトーストは一般的には薄手のパン生地にカヤジャムと言われる甘みの強いジャムを塗った料理だが、ここのカヤトーストは厚手の食パンを使用しており、独特のフワフワ感とジャムの甘さがマッチした絶品であった。
f:id:steinith310:20170416234525j:plain

さて、ホテルに帰り、この後どうするかと考えた時に、結局1店舗しかBitcoin取扱"候補店"に行っていないことに気がついた。Bitcoinを使ってカフェを巡るという酔狂なことをしようとしながら、結局何もやらずに貴重な休日を潰そうとしている。だめでもともと、トライしてみよう。そのような気持ちが、頭の中を駆け回った。


その日の午後、私は再びNew Green Pasture Cafeにいた。時刻は2時頃、意外に人も入っている。少なくとも、大麻の販売所ではない、と安心して入って行ったが、なんのことはない、ベジタリアン向けのお店であった。
f:id:steinith310:20170416234137j:plain


先払い式である旨を丁稚風の男に告げられ、おもむろに尋ねてみる。


「ここではBitcoin使える?」
「ワット?」
Bitcoin!」
「ジャパニーズ円は使えねえよ」


これはダメだ。BitcoinのBすら知らない。諦めて、ベトナム風春巻とコーヒーを頼むが、お昼に銀座いつきの天丼を食べて満腹な上に、春巻自体大して美味しくもなく、なぜここにトライしてみようと思ったのか、少し冷めたコーヒーをすすりながら考えこんでしまった。


春巻を食べていると、途中店主と思われるおばあさんが食事の感想を尋ねてきた。老獪そうな雰囲気から、もしかすると、最初の店員ではなく、このおばあさんと最初から話していれば、実は…と裏でBitcoin取引ができたのかもしれないが、それを聞く気力もなく、新緑の牧場を後にした。

Sarnies

カフェがダメなら…と、BitcoinのATMに向かうことにする。クラークキーセントラルの地下には、BitcoinのATMがあるという噂であった。そこに行けば、少なくともBitcoinのチャージをすることはできるし、うまく行けば情報も手に入る。私はそこに賭けてみることにした。


シンガポールリバーを望むクラークキーは夜になると、川沿いのバーやクラブで賑わうデートスポットである。その川沿いにあるクラークキーセントラルの地下一階に、中華系の店主が経営するシルバーショップがあり、そこにはBitcoinのATMが設置されていた。そこで持っていたフィアットを全てBitcoinに変えると、店主から情報を聞き出すことにした。
f:id:steinith310:20170416234727j:plain


Bitcoinが使えるって言われてるレストランにいくつか行ってみたけど、どこも使えないね。どこか使えるところ知ってる?」
「ほとんどないな。ただ、このデビットカードにチャージすればどこでも使える。こっちのが、ベターだ、カンファタブルだ、ラピッドだ、セーフティーだ!」


そういうことを聞きたかったわけではない。シンガポール人の野暮さを嘆きながらも、こちらも無理してBitcoinを使おうとしている論理的な理由があるわけではなかったため、弱みがなかったわけではない。そこにBitcoinがあるから、とでもいえば格好がつきそうなものだが、そのBitcoinが使える店を探し回っているのであるから、話にならない。結局、店主もBitcoinを使えるカフェを知ってはいないようであった。


しかし、少なくともフィアットBitcoinを繋ぐ接点を見つけられたことで、気持ちは少なからず高ぶった。こうなったら、最後にあのSarniesだけでも試してみようじゃないか。


いざ、切符を買い、電車に乗り、ふと店の位置を再確認しようと思いGoogleマップを開いた。Sarniesと打ち込むと、朝に訪れたSarniesとは異なるところに赤いマークが表示されている。


なんと朝行ったSarniesは全く関係のない店であった。危うく全く関係のないSarniesに行き、Bitcoinが使えないことを嘆いてジャカルタに帰るところであった。逆に、このタイミングで気づいたのは、一人のビットコイナーへのsatoshiからの啓示のようにも思われた。しかも、方向的にも乗り換えがスムーズにできそうだ。


本物のSarniesは中華街の入り口にある。店はきゅっと細長くこじんまりとしていたが、外にはオープンテラスもあり、過ごしやすい雰囲気であった。よく欧米人は何にでもcozyと表現するが、このカフェはまさにcozyと言う言葉で形容するのがぴったりなカフェであった。
f:id:steinith310:20170416234945j:plain

カフェラテを注文し、おもむろに、この旅行3回目の言葉を口にした。


Bitcoin使える?」
「使えるわ」


今回は大丈夫だろう。中華系の美人にそう言われ、やっぱり中華系美女に敵うものはないと思いながら、その時を待った。今思い返せば、Aristry CafeとNew Green Pasture Cafeの失敗もこのフィナーレのためにあったのだと、不思議な感慨にふけっていた。


「ここにタッチして」


そう言われ、戸惑いを覚えた。タッチ?QRコードじゃないのか。よくみるとその端末にはVISAと誇らしげなマークが鎮座している。


Bitcoinで払いたいんだけど」
「これでしょ?」


もしかして、この店ではBitcoinデビットカードで支払うことを、Bitcoinで支払うと言っているのか。確かに店側からしたら合理的だ。二重払いに悩むこともなく、一瞬でトランザクションは成立する。しかしだ。多くのビットコイナーがしたいことはそういうことではないはずだ。Bitcoinを使って、何かを買う。そこに意味はない。しかし、Bitcoinそのものを使うことに楽しみを見出しているのだ。


そんな想いも虚しく、QRコードの提示はなかった。しかも、先ほどフィアットを全てBitcoinに変えたため、支払うすべが残っていない。財布を見るとVISAのクレジットカードがある。助かった、と思った反面、それが意味することが頭の中を巡り、敗北感に打ちひしがれた。


シンガポール、そこは合理的な国だ。でも、何かが足りない。合理性を超えて面白いと思ったことを面白くやるという点が欠けているのかもしれない。カフェラテがやけに美味しかったことが、その想いに拍車をかけた。




帰りの空港で、シンガポール滞在の感想を書くアンケートがあった。シンガポールらしく、紙スタイルの原始的なものではなく、電子化された掲示板のようなスペースである。最後に何を書くかは決まっていた。


The bitcoin had failed in Singapore.



(*) この物語は実在の都市、出来事を元にしたフィクションである。

紹介したお店一覧

Aristry Cafe

New Green Pasture Cafe

Sarnies



inspired by 深夜特急

深夜特急〈1〉香港・マカオ (新潮文庫)

深夜特急〈1〉香港・マカオ (新潮文庫)

シンガポールBitcoinが使えるお店一覧
Ad Categories Bitcoin Accepting Restaurants, Cafes and Bars in Singapore

UASFによるSegwit導入の考察 - ブロックチェーン分岐の永続化を許容するか -

現在Bitcoin界には2種類の派閥があり、分裂危機が取りざたされています。


純化すると、ひとつはマイナーの利益を代表するBitcoin Unlimited、もうひとつは多くのユーザ(ノード)の指示を集めるBitcoin Coreです。分派のきっかけは、Bitcoin脆弱性(Malleability)に対応するSegwitの導入に関する意見の相違です。Segwitの導入はトランザクション手数料を低下させることにつながり、マイナー利益を損なうことになるため、Segwitを推進するBitcoin Coreに反対する形でBitcoin Unlimitedが生まれました。


Segwitの導入には、マイナー(正確に言うと、過去2016ブロック)の95%以上がSegwit導入賛成シグナルを送っているという条件があり、現在のシグナリング(30%程度)を勘案すると、いつまでたってもSegwitの導入は実現されない状況です。そのような状況で、ある匿名ユーザが「Segwitが導入されない場合にはユーザ主導でのSegwit導入 (UASF、User Activated Soft Fork)を実施する」という提案を行い、BIP148として審議中の状態になっています。

Bitcoinのバージョンアップ方法

Bitcoinのバージョンアップ方法は、大きく分けて2種類あります。ひとつは旧バージョンと新バージョンの互換性が完全になくなるハードフォーク、もうひとつは旧バージョンから見ても、新バージョンで採掘されたブロックが有効に見えるソフトフォークです。今回は、ソフトフォークに的を絞って話を進めます。


従来、Bitcoinのソフトフォークの際には、BIP9で定義されている方法を利用してきました。


BIP9とは、マイナーがブロックを採掘する際に、ブロック中のversion bitと呼ばれる領域に指定されたbit値をたてることで、そのソフトフォークの賛成を表明する方法です。逆にbit値をたてないことで、そのソフトフォークに対して反対を表明できるわけです。以下の図で言うと、Versionと書かれている部分の一番下の桁がSegwit導入への賛成/反対を示しています。

導入賛成/反対状況
2 (16進数) =Segwit導入賛成
0 (16進数) =Segwit導入反対(or 未準備)。

f:id:steinith310:20170409182430p:plain


BIP9で定められている通り、過去2016ブロック(約2週間)のうち95%のブロックがSegwit賛成を表明している状態になった時、Segwit導入がロックインされます。そして、さらに2016ブロック経過したタイミングで、Segwitが正式に導入されることになります。つまり、投票期間と実際の導入期間には、ずれがあるということになります。

f:id:steinith310:20170409170715p:plain
Bitcoin Core :: Version bits FAQ for miners

UASF

これに対して、UASFとはマイナーの投票によらずにSegwitをソフトフォークで実現する方法です。具体的には、ノードが利用するクライアントソフトウェアに、「Segwitが導入されていないブロックを無効なブロックと判定するコード」を組み込むことで、もしマイナーがSegwit未導入のブロックを採掘したとしてもノード側がそのブロックの受け入れを拒否するというアプローチです。


現在提案されているBIP148の実装では、2017年10月1日以降Segwit導入がロックインされていない場合には、Segwit未導入のブロックを拒否するという実装になっています。
bips/bip-0148.mediawiki at master · bitcoin/bips · GitHub


ちなみに、「ブロックチェーン分岐の永続化」を許容するかしないかで、UASFのハードルは大きく変わってきます。

ブロックチェーン分岐の永続化を許容しない場合

まず、ブロックチェーンの分岐の永続化を許容しない場合は、UASFを実施するにあたって、「マイナー」の少なくとも50%がSegwit導入マイナーである必要があります(ただし、必ずしもSegwit導入時点で50%を満たしている必要はなく、UASFによってSegwit側に鞍替えするマイナーがいる可能性も考慮する必要はあるかと思います)。


理由を簡単に見てみましょう。
Segwit導入ノードの比率に関わらず、Segwit未導入マイナーがSegwit未導入のトランザクションを含むブロックを採掘した場合には、当該ブロックがSegwit導入ノードで承認されることはありません。


一方、Segwit導入マイナーはSegwit導入済みトランザクションのみを採掘するので、必然的にブロックチェーンは分岐することになります。注意が必要なのは、ブロックチェーンの分岐はブロックチェーンの設計思想から許容されていることであり、重要なのはブロックチェーンの分岐が永続化するかどうかです。


さて状況を改めて考えてみると、旧バージョンを利用しているノードは新バージョンのトランザクションも正当なものとみなしますので、単純にBitcoinのルールに従い、「長さの長いブロックチェーンを正」とみなします。一方、新バージョンを利用しているノードは旧バージョンブロックチェーンを無効とみなすので、「新バージョン側のブロックチェーンを正」とみなすことになります。ブロックチェーンの分岐が永続化しない条件は、「長さの長いブロックチェーン」が「新バージョン側のブロックチェーン」と同一であることです。結局のところ、50%以上のマイナーがSegwit賛成側に最低限存在しないと、ブロックチェーンの分岐は永続化することになります。


ということで、ブロックチェーン分岐の永続化を防ぐためには、少なくとも半数のマイナーの協力を得ないと実現できないということになります。もちろん、この割合はBIP9型のソフトフォークに必要な95%という要件からはかなり緩和されていますが、Segwit賛成マイナー率は30%台をうろうろしていることを考えるといまだに厳しい比率だと言えます。

Segwit賛成票投票状況
Percentage of blocks signalling SegWit support - Blockchain

ブロックチェーン分岐の永続化を許容する場合

ブロックチェーン分岐の永続化を許容する場合には、無条件でUASFを発動できます。しかし、ブロックチェーンが完全に分岐するため、Ethereumのハードフォークのように2種類のコインが出来上がることになります。Ethereumの例で分かる通り、ブロックチェーンの完全分岐はコイン価格を下落させ、Bitcoinへの支持を弱めることにつながりかねません。


結局、ブロックチェーン分岐の永続化を許容するUASFの効果は、Bitcoin Unlimited側がブロックサイズの上限を1Mバイト以上に設定するハードフォークを行うのと同じになります(=完全にチェーンが分岐)。


6月10日追記
以下の動画で紹介されている通り、Re-Organaize (BIP148未導入チェーンが最初は長かったのが、BIP148チェーンの長さが途中で上回ると、BIP148未導入チェーンが無効になる)される可能性もあるので、ハードフォークの効果と同じとは言い切れないですね。ただ、Re-Organaizeされるまでは、2つのコインが発生している状態になるので、一時的でもコイン価格の下落は避けられません。

UASF/BIP148特別収録 with 大石哲之さん


最近の動き

3月27日にBitfuryがUASFによるSegwit導入支持を表明したブロックを採掘したことで話題になりました。

Bitfury Mines a Block Signaling UASF Mandatory Segwit Deployment - Bitcoin News


実際にブロックを見てみると、Bitfuryが採掘したブロックのCoinbase (マイナーが採掘報酬を埋め込むトランザクション) に「Segwit」、「BIP148」という文字が刻まれていることが分かるかと思います。

f:id:steinith310:20170409181148p:plain
Transaction 82fcb9de58956b125256b9fe6a9af731f8aa2386a20180fbdc9a908522416c67 - chainFlyer


ただ、ここまで見てきた通り、UASFは特定日以降Segwit未導入ブロックを無効とみなすことでソフトフォークする手法ですので、今回のBitfuryによる採掘ブロックはUASFに対する支持表明をしたに留まります。

Ethereumプロジェクト紹介 第1回 Melonport

f:id:steinith310:20170326194024j:plain
最近のBitcoin分裂騒動や、Ethereumを利用したアプリケーション開発コンソーシアムにMicroSoftなどの大企業が参入したことにより、急速にBitcoinとEthreuemの時価総額の差が縮まってきています。EthereumはBitcoinと異なり、チューリング完全なプログラムを実行できることから、分散アプリケーション (DAPP)の実行基盤として注目を集めています。


今回から、Ethereum上で新たに登場してきた分散アプリケーションを調査、紹介していこうと思います。

Melonport 概要

記念すべき第1回として、分散型のアセットマネジメント基盤であるMelonportを取り上げたいと思います。なぜMelonportかというと、CEOのMona El Isaさん(ゴールドマンサックス出身、26歳でゴールドマンサックスVice Presidentとかいうとんでもない経歴笑)が美人すぎて、紹介動画を見ていても飽きないから笑

紹介動画

Melonport - Asset management on Blockchain - Ethereum London


さて肝心の中身ですが、Melonportはデジタル資産への投資を行うファンドマネージャーの行動をSmart Contractで統制するとともに、Ethereum上のブロックチェーンに取引内容を刻み込み監査可能にすることで、これまで不透明な世界であったファンドを、透明性が高い状態にすることを目的としています。


また、ヘッジファンドをスタートするためには、おおよそ1億5000万ドルの投資額が必要とされています。そのため、これまでは限られたプレーヤーでヘッジファンドは構成されており、手数料もETFなどと比べると非常に高価でした。Melonport Protocol上でファンドマネージャー業務に必要なすべての機能を提供することで、ファンドの選択肢を増やし、ファンドコストを切り下げることを目的としています。


ちなみにMelonportという名前は、ギリシャ語で「未来」を意味する言葉から取っているらしいです。
Melonport | Blockchain software for asset management

Melonportの仕組み

投資対象

Melonportでは投資対象となる、デジタルアセットを以下のように3分類しています。

  1. 実物資産にペッグした資産(金とレートが常に一致しているような資産)
  2. 暗号通貨などのデジタル資産
  3. デジタル資産のデリバティブ


上記例で分かる通り、投資先は暗号通貨に限定されているわけではなく、Smart Contractで制御できるすべてのデジタルアセットを含んでいることになります。究極的に言えば、いかなる実物資産もそれをペッグした形でデジタル資産化できるので、どのような資産であってもトレード対象とすることができるということになります。

ポートフォリオ

Melonportではファンドマネージャーは誰でも自らファンドを作ることができます。このファンドのことを、Melonportではポートフォリオと呼んでいます。ポートフォリオは技術的にはCoreとModuleに分けられます。CoreとModuleはいずれも、 Ethereum上のSmart Contractとして作成されます。


Core
Coreはどのポートフォリオでも必須となる構成要素となります。Coreは、ポートフォリオのルールや性質を決めることになる、Module群を束ねる役目を持っています。


Module
Moduleはポートフォリオが資産を取引するのに必要となる取引所の情報や、取引を実施するにあたって必要となるルールを提供します。ファンドの目論見書のようなものであり、Smart Contractでこの目論見書の内容を強制でき、かつ監査可能であることがMelonportの一番の特徴と言えます。


このModuleは誰でも作成することができ、Moduleの開発者はそのModuleの対価としてのCommissionをMelonportのトークンであるMLNで請求することができます。イメージとしては、Apple Storeを想像するとわかりやすく、Melonport上にいくつものアプリケーション(Module)が登録され、ファンドマネージャーはそれを選択して対価としてMLNを支払うことで利用することができるようになります。


例えば、Register Moduleとよばれるモジュールでは、投資対象のデジタルアセットや取引を行う取引所をSmart Contractを利用することにより制限することができます。最近「みんなのクレジット」で投資資金の使い込みやポンジスキームが発覚しましたが、そういったこともMelonportを使用することで防止することができます。


また、金融専門家がCEOなだけあって各国の規制対策も検討しているようで、モジュールにはKYC対応のためのモジュールなども用意されています。


投資方法

ポートフォリオへの投資方法は2種類が検討されています。ひとつはポートフォリオのShareをどこかしらの市場から購入すること、もうひとつはEtherを払い込むことで対象のポートフォリオの持分(Share)を購入することです。あえてEtherと書いたとおり、ポートフォリオへの投資の際にはMLNを使用する必要はなく、ETHを使用する仕組みになっているようです。


投資先のファンドを選択できるポータル画面
f:id:steinith310:20170326182359p:plain


なお、2番目のEtherを払い込むことによりポートフォリオに投資を行う場合には、価格がどのように決まるかが重要になります。投資家としてはポートフォリオを通して原資産に投資したいのであって、ポートフォリオの人気に対して賭け事をしたいわけではないからです。そのことを考慮して、Melonportでは需要により決定される価格ではなく、ポートフォリオに組み込まれた資産価格を元にShareの価格が決定される仕組みになっています。


また、投資信託の購入の際にはよくファンドの購入手数料が重要視されます。購入手数料の仕組みは今現在存在しているファンドの仕組みとほぼ同じであり、2種類の手数料から構成されています。ひとつは固定で必要となるManagement Fee、もうひとつはActive Fund (市場平均ではなく、売買によって市場平均を超えた超過利益を狙うファンド)を購入する場合のみ必要となるPerformance Feeです。

開発タイムライン

2016年12月時点のCOIN INTERVIEWでのコメントを参考にすると以下のようなタイムラインで開発を目指しているようです。現在はPoC (実現性の検証)が終わり、初回のICOを完了した状態です。今後2017年8月に向けて開発を進めていく予定です。

2017年2月 ICO
2017年8月 Draft Versionとして実装完了
2019年2月 ガバナンスの強化やフロントエンドの強化を完了
Melonport Announcement: Token (MLN) Pre-sale February 15th, 2017 — Contribution and Specification…


まとめ

個人的にはけっこう期待しているMelonportを紹介しました。ETFの登場で分散投資は簡単になりましたが、これまではETFを組成できる人は証券会社の限られた人たちであり、投資先も限定されていました。Melonportを使用することで、これまで投資できなかった対象に安価な手数料で簡単に分散投資できるようになることが期待されます。


第2回の対象はまだ未定です。心に響くプロジェクトがある方は教えて下さい笑

暗号通貨時価総額ランキング (2017年3月末)

f:id:steinith310:20170325182503j:plain
今年初めの以下の記事で、2016年年末時点での暗号通貨時価総額ランキングをまとめました。年初からBitcoinの価格が上昇する一方、BitcoinはBTC (Bitcoin Core)とBTU (Bitcoin Unlimited)への分裂が避けがたい状況であり、分裂直後はいずれのコインも暴落することが予想されています。それを受けて最近のBitcoin相場は非常に不安定な状態になっています。また、Ethereum、NEMなどのアルトコイン勢もBitcoinの価格上昇や、Microsoftなどの大企業が絡んだプロジェクトがスタートしたことをきっかけに価格が上昇しています。

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


暗号通貨の時価総額をまとめなおすにはいい機会だと思いますので、現在の状況を振り返ってみたいと思います。

生データはこちら
coinmarketcap.com

2017年3月 暗号通貨時価総額ランキング(カッコ内は2016年末時点)

1位 Bitcoin (1位) 147億ドル (155億ドル)

前回のランキングとほぼ同じ金額でBitcoinが1位です。前回のランキング時点では、1BTC=961ドルだったのが、現時点では1BTC=910ドルまで下がってしまっています。2017年は中国のPBoC (中国人民銀行)による突然の規制や米SECにBitocoin ETFが否決されたニュースなどいくつかの下落要因がありましたが、その混乱にもかかわらず1,000ドルを超える金額をキープしてきました。しかし、BTC/BTU分裂騒動では大きく値段を下げています。


外生的な下落圧力にはBitcoinの強さが証明されましたが、内側からの攻撃への耐性はまだまだ実験の途上ということでしょう。

2位 Ethereum (2位) 46億ドル (7.1億ドル)

前回から約7倍(!)値上がりしたEthereumが第2位です。順位は変わりませんが、DAO事件をきっかけに分裂したEthereum Classicを時価総額の面で大きく引き離してきました。ちなみにEthereum Classicも前回から比べると、約1.5倍の値段にはなっていますが、Ethereumと比べるともう勝ち目はなさそうです。


この3ヶ月でのEthereum関連のビッグニュースとしては、MicrosoftやJP Morganなどの大企業がEnterprise Ethereum Alliance (EEA)という組織を結成し、Ethereum上でアプリケーションを作成しようとしているニュースがあげられます。最近のIT業界界隈では、企業内に閉じた情報システムから脱却し、サプライチェーン全体をカバーして企業間ネットワークを作り上げていこうという動きがあり、Ethereumはそのプラットフォームとして注目を集めてきている状態です。
Here's Why Microsoft, JP Morgan Chase And These Entrepreneurs Are All-In On Ethereum | Inc.com


さらに最近では、Bitcoin上でConterPartyトークンを利用していたStorjが、Ethereum上のトークンであるERC20に鞍替えを表明するなど、Bitcoinの混乱を避けてEthereumを使用しようという動きが加速しそうです。StorjのCEOはEthereumのネットワークが拡大していることを鞍替えの理由としてあげており、Bitcoinに変わってEthereumが暗号通貨界の代表になることを予想しているといえそうです。
www.coindesk.com

3位 Dash (7位)6.8億ドル(0.8億ドル)

Ethereumの陰に隠れていましたが、地味にDashの時価総額は前回から8倍以上に跳ね上がり、3位に浮上しました。Bitcoinが全取引を第3者が閲覧できる透明性の高い仕組みなのに対して、Dashは取引を第3者が閲覧できない匿名性をその特徴としています。匿名性を特徴とする通貨は、Dash以外にもMoneroやZcashがありいずれも時価総額を上昇させていますが、DashはMoneroを抜き去り匿名通貨界隈では一歩飛び抜けてきた状態です。


cointelegraphの記事では、今回の急上昇の理由を以下のように分析しています。ひとつは、決済会社のBlockPayとのパートナーシップを発表し、Dashを決済手段として使用するオプションが増えたことです。


しかし、価格上昇の要因の本命は、もうひとつの理由である投機的な理由によるものです。
記事では、Dash取扱量1位のPoloniexでDashの信用取引を提供していることを、理由のひとつとしてあげています。信用取引でショートしていた人たちが、Dashの価格上昇による損失を抑えるためにDash購入に走ることで、結果としてさらにDashの価格が上昇するという正のスパイラルが発生していると説明しています。当然この動きはショートしている人たちがDashを一通り購入し直したタイミングで動きが止まりますので、価格上昇が継続することはないと思われます。

4位 Ripple (3位) 3.8億ドル (2.4億ドル)

4位はRippleです。時価総額はあげているんですが、いまいちパッとしないです。特に大きなニュースはなく、他の暗号通貨の価格上昇に乗っかって、少しだけ価格が上昇したといった感じです。その証拠に、他の通貨が7倍、8倍の値上がりをしているのに対して、Rippleは1.6倍程度の上昇にとどまっています。

5位 Monero (5位) 3億ドル (1.9億ドル)

5位はDash同様匿名型通貨のMoneroです。2017年当初は匿名型通貨はMoneroが主流になる勢いで、海外の掲示板でのアンケートでもMonero派の方が多かったようなのですが、資金はDashに向かってしまったようです。


Moneroについてはそこまで大きなニュースはなかったと思いますが、2017年2月に複数コインをひとつのウォレットで管理できるJaxxが、予定していたMoneroのウォレットサービス提供を中止したことを発表しています。原因としてMonero Developer Communityのサポートが不足していることをあげており、LightweightのAPIがサポートされていないことや匿名化の仕組みのサポートがうまくできていないことを理由としています。
Jaxx Cancels Monero Integration, Cites Difficulties Working With Community

EthereumがBitcoinを超える日は来るのか

EthereumはBitcoinの価格の3分の1まで迫っており、Bitcoinが分裂した際には資金逃避のためにアルトコインに資金が流れ込むことが考えられることから、EthereumはBitcoin分裂後暗号通貨界のトップに躍り出ることが予想されます。


2016年末まではBitcoinの1強でその立場は盤石かと思っていましたが、意外に早くBitcoinが表舞台から姿を消すことも考えられます。多くの発明品は初代の製品がそのまま市場の主流を占めたことは少なく、その改良品が世の中のスタンダードとして一般の人々に受けれられてきました。Blackberryに対するiPhoneのように、Bitcoinのその役目を終えて静かに息を引き取っていくこともあるのではないでしょうか?

2017年3月25日時点 暗号通貨ランキング
f:id:steinith310:20170325174414p:plain

まとめ

Bitcoinの価格がガラッと大きく動いた3ヶ月でした。これまでも外側からの攻撃には幾度となく耐えてきたBitcoinですが、内側からの攻撃はある意味初の体験であり、結果がどう転ぼうと大きな教訓を残しそうです。


以前「Bitcoinは民主的か?」という記事を書いた際には、Bitcoinは開発者とマイナーによる専制政治であり、民主的とは言い難いという結論を書きました。しかし最近では、仮にハッシュパワーに勝るBitcoin Unlimitedが一時的に優勢になったとしても、利用者がBitcoin Coreを利用している限り、最終的にマイナーは価格の下落に耐え切れず、Bitcoin Coreに戻らざるを得ないという議論もよく見ます。もしそうだとすると、最終的な意思決定者は開発者やマイナーではなく利用者となり、Bitcoinネットワークは民主的だという結論になりそうです(=ハッシュパワーではなく、利用者の多数決で意思決定が行われる)。
cryptocoin.hatenablog.com


BitcoinBitcoin利用者主導で通貨として進化を続けるのか、Bitcoinを見限ってアルトコインに移っていくことで自滅の道を歩むか。私は何があろうがHODLします笑

NEMのスーパーノードの役割

f:id:steinith310:20170219215819j:plain
最近Twitter上では、NEM上のApostilleを使った取引が紹介されたり、スーパーノードを構築したりとNEMの話題で大盛り上がりです。NEMの価格も1月に入って大幅に上昇し、1XEMあたり0.000004BTCだったのが、現在は0.000006BTCで取引されています。


f:id:steinith310:20170219214410p:plain
https://www.coingecko.com/ja/相場チャート/nem/btc


今回はTwitterでも話題に上がったスーパーノードについて、Bitcoinにおけるフルノードとの違いもふまえてまとめたいと思います。

Bitcoinにおけるノード

NEMにおけるスーパーノードを説明する前に、Bitcoinにどのようなノードが存在するかを説明します。Bitcoinではノードの種類は大きく2つに分けられます。一つは完全なブロックチェーンを保持するフルノード、もう一つはトランザクションの検証はするものの、ブロックチェーンは保持しないため二重支払いの有無はフルノードに依存するSPV(Simplified Payment Verification)ノードです。


この2つのノードのうち、全ブロックチェーン保有するフルノードの役割はBitcoinのネットワークの安定にとって非常に大きなものです。しかし、Bitcoinにおいてはフルノードになるインセンティブがなく、以下の記事で触れられているようにフルノードにも何かしらのReward(報酬)を与えるべきではないかという議論があります。
Should Full Bitcoin Nodes Get Rewarded like Miners? - Bitcoin News


NEMにおけるスーパーノード

NEMの世界でもノードはBitcoin同様、2種類存在します。ひとつは全ブロックチェーン保有しNEMネットワークのインフラとなるスーパーノード、もうひとつはそれ以外の通常ノードです。Bitcoinにおいては全ブロックチェーンを保持して、自ら二重支払いの検証ができるノードはすべてフルノードと呼びますが、NEMにおけるスーパーノードは全ブロックチェーンを保持している以外に幾つかの条件があります。

スーパーノードの要件

ひとつ目は金額要件です。スーパーノードになるには、3,000,000XEM以上を保有している必要があります。以前の記事でNEMネットワーク上のApositlleを利用したXEMの貸借を取り上げましたが、この貸借の目的はスーパーノードを構築することでした。なお、300万XEMは現在の価値でおよそ2万ドル(約225万円)の価値があります。

2017年6月4日 Update
気づいたら1NEM=24円ほどになっていたので、現在だと7200万円ほどつぎ込まないとスーパーノードは構築できません。。。

https://twitter.com/mizunashi/status/828899530389065729
cryptocoin.hatenablog.com



もうひとつの要件はシステム要件です。スーパーノードは他のノードからブロックチェーン情報を参照されるパブリックな役割がありますので、スーパーノードになるためには応答性能であったり、ブロックチェーンが最新状態であったりするなどのシステム的な性能を求められます。この性能は毎日全スーパーノードを対象に計測が行われ、要件を満たしていない場合は後述する報酬を受け取れない仕組みになっています。
NEMの説明書 - スーパーノードの必要条件
NEM Supernode Rewards Program - Blog Posts - NEM Forum


このようにBitcoinにおけるフルノードとは違い、NEMのスーパーノードにはかなり厳しめの要件が課されています。

スーパーノードのReward(報酬)

NEMにおいてスーパーノードがBitcoinのフルノードと大きく違う点は、「スーパーノードを運営することで報酬を受け取ることができる」という点です。NEMの最初のブロック(nemesis block)において、Sustainability Fundと呼ばれる、NEMネットワークを運営するためのFundが作成されており、そのFundの一部がスーパーノード用の報酬としてあてられています。なお、Fund資金が枯渇した後は、ブロックに含まれるトランザクション手数料の一部がスーパーノードの報酬に当てられる予定です。

Update: Sustainability Fund, Final Redemption Numbers



2016年6月にこの仕組みがスタートした際には、毎日70,000XEMがスーパーノード用の報酬として用意されていましたが、2016年9月に140,000XEM/日まで拡充しています。今後この報酬額はだんだんと増額されていく予定です。


なぜNEMにおいてスーパーノードのRewardが重要かというと、NEMのコンセンサスメカニズムと関係があります。NEMはPoI (Proof of Importance)という誰もが低スペックのマシンで参加できる(Raspberry Piでも参加できるほど)コンセンサスメカニズムを採用しています。Bitcoinの場合は多くのマイナーがフルノードの役割も兼ねていますが、誰もがマイニング(NEMの場合はハーヴェスティングと呼びます)できるNEMの場合は、Bitcoin以上にスーパーノード(フルノード)を維持する努力が必要になります。そのためNEMにおいては特別に財源を用意して、スーパーノードを構築するインセンティブメカニズムを用意しています。


なお、PoIの報酬は取引手数料をもとにしており、スーパーノードに対する報酬とは別の財源を利用していることになります。ちなみに、NEMのスーパーノード報酬やPoIの報酬は税務上所得として申告する必要があるので、ご注意を!

Bitcoinなどの税務処理 (アメリカ編ですが、日本も大きくは変わりません)
cryptocoin.hatenablog.com

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とよび、これによりそのブロックに含まれるトランザクションが確率的に確定するという仕組みになっています。