暗号通貨とブロックチェーン研究所

暗号通貨とブロックチェーンに関する技術やトレンド情報を解説していきます。

0xプロトコルの概要と注目すべき理由

0x(ゼロエックス)とはイーサリアム上のスマートコントラクトで実装されたDEX(分散型取引所)を構築するためのプロトコルのことです。0xをプロトコルとしてその上にDEXを構築することで、異なるトークン間の取引における流動性が高まり、取引の高速化や手数料の低下が実現できることから注目を集めています。

0xproject.com

White paper


豆知識:DEX(分散型取引所)とは?

DEXとは中央に管理者をおかずに非中央集権(分散管理)で成り立つ取引所のことです。ゆえに顧客の資産を保有していません。Bitflyerなどの中央集権取引所では秘密鍵の管理を取引所が行うため、ハッキングや倒産、内部者による不正引き出しなどにより、自分の資産が失われてしまうリスクがあります。しかし、中央管理者が不在のDEXでは秘密鍵の管理を自分で行うため資産を安全に保護することができるのです。しかし、一般ユーザーからすると秘密鍵の管理をするハードルは高いため、それを踏まえた上でのユーザービリティの解決が課題となっています。

0xの仕組み

0xにはメイカー、テイカー、リレイヤー(中継者)という3種類の登場人物がおり、取引の流れは以下のようになっています。またメイカーの注文をまとめたものをオーダーブックと呼びリレイヤーが管理します。

リレイヤーは売買注文をオフチェーンで管理し、トランザクションだけをブロックチェーンに記録します。つまり0xはトランザクションブロックチェーンに記録するためのスマートコントラクトを提供するためのプロトコルでユーザー間におけるWallet to Walletの取引を可能にしたのです。

f:id:tomoya415:20180809081355p:plain

豆知識:メイカーとテイカーって何?

イカーとは新規で注文を出した人のことで「1ETH買いたい!」「1ETH売りたい!」と意思表示をします。これを指数注文といいます。
イカーとは注文を取りに行く人で、メイカーの注文をもとに売買をします。これを成行注文といいます。

Off-chain order relay On-chain settlement

Off-chain order relay On-chain settlementとは0xの特徴を言い表した言葉で、名前の通りオーダーはオフチェーンで行い、決済はオンチェーンで行います。従来のDEXは全ての処理をブロックチェーン上で行なっていたため、トークンの交換だけでなく、注文や修正、キャンセルと何をするにもガス代(手数料)が発生する上に取引の承認に時間がかかっていました。この課題を0xはOff-chain order relay On-chain settlementによって解決しようとしているのです。

それではWhite paperを追いながら、0xプロトコル上での取引の流れ(トークンAとトークンBの交換)を見ていきましょう。

※画像、説明ともにWhite paperからの引用になります。つたない英語ですので誤訳などありましたら、教えてください。

f:id:tomoya415:20180809081543p:plain
source:https://0xproject.com/pdfs/0x_white_paper.pdf

1. Maker approves the decentralized exchange (DEX) contract to access their balance of Token A .
2. Maker creates an order to exchange Token A for Token B, specifying a desired exchange rate, expiration time (beyond which the order cannot be filled), and signs the order with their private key.
3. Maker broadcasts the order over any arbitrary communication medium.
4. Taker intercepts the order and decides that they would like to fill it.
5. Taker approves the DEX contract to access their balance of Token B.
6. Taker submits the makers signed order to the DEX contract.
7. The DEX contract authenticates makers signature, verifies that the order has not expired, verifies that the order has not already been filled, then transfers tokens between the two parties at the specified exchange rate.

  1. イカーはDEXコントラクトがトークンAにアクセスすることを承認する。
  2. イカーは保有するトークンAをトークンBと交換するための注文を作成し、希望するレート、有効期限を指定しメイカーの秘密鍵で署名する。
  3. イカーは注文をネットワークにブロードキャストする。
  4. イカーは注文を受け取り、希望する注文を決める。
  5. イカーはDEXコントラクトがトークンBにアクセスすることを承認する。
  6. イカーはメイカーが署名したオーダーをDEXコントラクトに送信する。
  7. DEXコントラクトはメイカーの署名、注文の期限、注文がすでに成立していないことを確認し、指定されたレートでトークンAとトークンBの決済を行う。

このように取引の中でイーサリアムブロックチェーンを活用したオンチェーン処理はstep.7だけで、それ以外の処理はオフチェーンで行われます。

次にOff-chain order relayにおけるリレイヤーの役割に焦点を絞って解説をしていきます。

f:id:tomoya415:20180809081736p:plain
source:https://0xproject.com/pdfs/0x_white_paper.pdf

1. Relayer cites a fee schedule and the address they use to collect transaction fees.
2. Maker creates an order, setting feeA and feeB to values that satisfy Relayer’s fee schedule, setting feeRecipient to Relayer’s desired recieving address and signs the order with their private key.
3. Maker transmits the signed order to Relayer.
4. Relayer receives the order, checks that the order is valid and that it provides the required fees. If the order is invalid or does not meet Relayer’s requirements, the order is rejected. If the order is satisfactory, Relayer posts the order to their order book.
5. Takers recieve an updated version of the order book that includes Maker’s order.
6. Taker fills Maker’s order by submitting it to the exchange contract on the Ethereum blockchain.

  1. リレイヤーは取引手数料と手数料を受け取るためのアドレスをメイカーに提示する。
  2. イカーは注文を作成し、提示された取引手数料をセットする。リレイヤーの希望する受け取りアドレスにfeeRecipientをセットし、メイカーの秘密鍵で署名する。
  3. イカーは署名された注文をリレイヤーに送信する。
  4. リレイヤーは注文を受け取り、注文が有効であること、必要な手数料が提供されていることを確認する。注文が有効な場合はオーダーブックに書き込み、無効な場合は注文を拒否する。
  5. イカーはメイカーの注文が更新されたオーダーブックを受け取る。
  6. イカーが希望する注文があった場合は、イーサリアムブロックチェーンのDEXコントラクトに提示する。

この流れにおいて特筆すべきはリレイヤーが取引手数料を決めていることです。0xプロトコルにおけるリレイヤーのインセンティブは取引手数料になります。そしてその手数料の設定額をリレイヤーの裁量に任せることで他のリレイヤーとの競争を生みバランスを保っているのです。

WTEH(Wrapped ETH)

Wrapped ETHとはETHをERC20仕様に変換することです。
現在0xではERC20トークンしか取り扱うことができないので、ETHと他のトークンの取引を可能にするために必要な処理となっています。

0Xのメリット

DEXにおけるネットワークの流動性問題の解決

中央管理することなく売り手と買い手をつなげる役割を持つDEXですが、鶏と卵問題が往々にして発生してしまいます。DEXにおける鶏と卵問題とはそのプラットフォームに売り手がいなければ買い手は集まらないし、反対に買い手がいなければ売り手が集まらないようにプラットフォームが初期に抱える問題のことです。つまり流動性問題とは売り手と買い手が集まらないことにより、取引高や売買数が少ない状態のことをさします。

これの何が問題なのかというと、流動性が低くなることで市場相場に対してトークン価格が適切に反映されなくなり、売り手と買い手で価格のバランスが崩れてしまうことにあります。

しかし、0xプロトコル上で構築されるリレイヤー(DEX)は他のリレイヤーにもアクセスすることができるので、メイカーの注文をリレイヤーが集約していくことで流動性を高めることができます。

f:id:tomoya415:20180809082104p:plain
source:https://blog.0xproject.com/front-running-griefing-and-the-perils-of-virtual-settlement-part-2-921b00109e21

例えば、アリスがDEX(A)で1ETHを売りたいと注文を出した場合、その情報は0x上で集約されDEX(B)を使っているボブがアリスの注文を受けることができるのです。これにより新規でリリースされたDEXやDappsでも高い流動性を実現することができるのです。

※今まではリレイヤー=DEXという構図で説明をしてきましたが、上図のようにトークンの交換が必要なDappsもリレイヤーに含まれます。

DEXにおける取引速度の低下と高額な手数料問題の解決

先述した通りイーサリアムブロックチェーンをベースで構築されているDEXでは全ての処理をブロックチェーン上で行なっていたので、トークンの交換だけでなく、注文や修正、キャンセルと何をするにもガス代(手数料)が発生する上に取引の承認に時間がかかっていました。

しかし、0xではOff-chain order relay On-chain settlementにより決済以外の処理をオフチェーンで実行することで取引速度の低下と高額な手数料の問題を解決しています。

ただ、現状のDEXもOmiseがPlasmaを、Kyber NetworkはCosmosを活用した取引の高速化を構想しており将来的には取引速度という面での0xの優位性は失われることも考えられます。

代表的なリレイヤーやプロトコル

DEX

DDEX

0xの代表的なリレイヤーで現在取引高1位のDEX。
ercdex.com

Rader Relay

現在取引高2位のDEX。
radarrelay.com

Paradex

最近Coinbeseに買収されたことで話題になったDEX。
paradex.io

Dapps

Dharma

借り入れをしたい人と貸し出しをする人を仲介するP2Pレンディングサービス。
Dharma

dydx

暗号通貨での分散型デリバティブ取引の実現を目指すプロトコル

dydx.exchange

0xの課題

秘密鍵の管理における利便性の低下

この問題は0xだけでなくDEX全体が抱えている問題ですが、DEXでは中央管理者がいないので秘密鍵の管理をユーザー自身が行わなければなりません。秘密鍵を自身で管理することで資産を自己管理できる訳ですが、その反面秘密鍵の管理という手間が増えてしまうのです。
リテラシーが高いユーザーやエンジニアからすればさほど問題に感じないかもしれませんが、一般ユーザーからすれば大きな手間であることは間違いありませんし、そもそも秘密鍵とは何かを理解している一般ユーザーは少ないように感じます。当然秘密鍵を失くしてしまえば資産を失うことになるので、一般ユーザーからすれば秘密鍵の管理は大きなリスクでありDEXを使わない大きな理由となりえます。そのため0xを含めてDEXではそれらを踏まえた上での利便性の向上が大きな課題となっています。

秘密鍵の管理を自分ですることで安全性を保っているDEXですが、ユーザーには自分の資産を自分で守るだけリテラシーが求められていることを頭に入れておきましょう。

フロントランニング問題

フロントランニング問題とは、攻撃者が攻撃対象者のオーダーよりも先に自身のオーダーを処理することで攻撃対象者に不利なレートで取引させる手段のことです。マイナーは、基本的にガス代の高いトランザクションから処理するので、攻撃者は攻撃対象者よりも意図的に高いガス代を設定することで先回りして処理することができてしまいます。

詳細はこちらの記事をご覧ください。
zoom-blc.com

流通量が低い

0xはDEXの流動性問題を解決するためアプローチを実現させていますが、仮想通貨取引所全体から見るとDEXの流動性は低く、取引高1位のDDEXよりBitflyerの取引量の方が100倍以上多いのが現状です。
0xはプロトコルのでは構築されるリレイヤーが増えれば増えるほど流動性が高まる仕組みとなっているので0xを活用するDEXを増やすことが今後重要になってきます。
近々行われるバージョンアップデートによりERC20以外のトークンの取り扱いが可能になることが予定されておりリレイヤー構築のための環境整備も徐々に進みつつあり、流動性問題に関しては近い将来の解決が予想されています。

注目すべき理由

0xに注目すべき理由は0xはDEXではなくプロトコルでありプラットフォームであるということです。
例えばアプリ開発プラットフォームであるApp StoreGoogle Playを思い浮かべて見るといいでしょう。アプリ単体では競合にすぐに模倣されてしまいますが、プラットフォームは簡単に模倣されることはありません。なぜなら、プラットフォーム上にすでにエコシステムが出来上がっているからです。
つまりApp StoreGoogle Playはこのエコシステムにより優位性を保っているのです。今後新たにアプリプラットフォームが立ち上がったとしても開発者や企業がそのプラットフォームに移行することは著しく低いと考えられApp StoreGoogle Play以降にアプリプラットフォームは生まれていません。

このようにプラットフォームにおける先行者優位性は非常に高く、DEX領域において0xはそのポジションを取れる最も近いプレイヤーです。DEX視点で考えても0xを活用することで初期段階からある程度の流動性を得ることができ参入するメリットは高いと言えます。

これらの要因から今後0xは注目するに値するプロジェクトだと考えられます。

参考


最後まで読んでいただきありがとうございました。認識違いなどありましたら、ご指摘お願いいたします。

Twitterはこちら

Plasmaの課題を解決するPlasma Cashと今後の発展(Plasma XT、Plasma Debit、More Viable Plasma)

Plasma Cashは2018年3月9日にイーサリアム創始者のVitalik Buterin氏によって発表されたイーサリアムのスケーラビリティ問題を解決するための技術のことで、Plasmaの抱える課題を改善することでさらなるスケールが期待されています。

youtu.be


Plasmaに関してはこちらの記事をご覧ください。

tomoyaishida.hatenablog.com

Plasmaの課題を整理

ユーザーによるチェーンの監視が必要

Plasmaではネットワークの参加者はプラズマチェーンを監視し続けなければなりません。なぜなら監視をしないと不正が起きた際に気づくことができない上に不正の証明ができないからです。

ユーザーはPlasmaチェーンのデータを全てダウンロードしなければならない

上述した不正の証明を行うためにユーザーはPlasmaチェーンのデータを全てダウンロードしなければなりません。なぜなら、そのPlasmaチェーンのどこに不正なトランザクションが含まれているかわからないからです。ユーザーによるチェーンの監視を常時行うことは現実的ではないため全てのデータをダウンロードしてチェックする必要が生まれています。しかしデータサイズが大きくなればなるほどユーザーに負担がかかりユーザビリティが損なわれてしまいます。

※Plasmaでは子チェーンにおけるコインの管理方法はイーサリアムのようなアカウントベースではなく、UTXOベースで行われています。

Plasmaの課題を解決するPlasma Cashの仕組み

プラズマチェーンにデポジットしたトークンを固有のidで管理

Plasma Cashでは、Plasma Cashチェーン上にデポジットした全てのトークンにユニークなidを振り分け、それぞれを固有の物(No Fungible Token)として扱います。また、トークンに振られるユニークなidのことをトークンIDと呼びます。

f:id:tomoya415:20180729131959p:plain

一つ一つにidが振られたユニークなトークンをNo Fungible Token(NFT)といい、区別されることのない代替可能なトークンをFungible Tokenといいます。NFTを取り扱うことができる規格にERC721があり、最も有名なDappsであるCryptoKittiesに実装されています。

Plasma Cashチェーンの構造

Plasmaでは、トランザクションのインデックス順にマークルツリー構造が成り立っていましたが、Plasma Cashではデポジット時に付帯されたトークンIDと各ノードのインデックスが対応するようにマークルツリー構造が成り立っています。これによりユーザーは自身のトークンIDとインデックス番号を照会することで、そのトークンが有効性を証明できるようになりました。よってPlasma Cashではトークンの有効性を証明をするためにデータを全てダウンロードする必要がなくなったのです。

f:id:tomoya415:20180729132332p:plain

トークンが使用され、そのトランザクションが正常に処理されると、使用されたトークンIDに対応した位置(インデックス)のノードにトランザクションのデータが保持されます。そのため、二重支払いを防ぐ(トークンが使われていないことを証明)ためには、トークンIDに紐づくインデックス番号のノードが空であることにより、未使用トークンだと証明することができます。

Plasma Cashのメリット

監視の効率化

PlasmaではMerkle Tree全体を監視しなければなりませんでしたが、Plasma CashではMerkle Treeの中でも自身のトークンIDを持つノードとそれに関するPlasmsチェーン(Merkle Proof)のみを監視すれば良いので、監視が効率的になりました。

検証の効率化

PlasmaではPlasmaチェーンのデータを全てダウンロードし不正がないか検証しなければなりませんでしたが、Plasma Cashでは自身のトークンIDを持つノードとそれに関するPlasmaチェーンのみ検証すれば良いので、ユーザーの負担が軽減されました。

残高確認の効率化

Plasmaでは処理されたトランザクションを親チェーンに反映させるには、マークルルートが親チェーンにトランザクションとして送信され、ブロックに取り込まれることで、Plasmaチェーンに承認されることになります。そしてトランザクションがPlasmaチェーンに取り込まれたら送信者と受信者双方のアカウント残高を更新しなければならないので、送信者は受信者に対してPlasmaチェーンを監視しブロックが取り込まれた段階で確認メッセージを送信する必要がありました。そして受信者が確認メッセージを受け取った段階で両者の残高は更新され受信者は受け取ったETHを使えるようになるのです。

しかしPlasma Cashではこの確認作業を行う必要はありません。なぜなら、デポジット時に付帯されたトークンIDを用いてExitを要求するため、悪意の第三者によるトークンの生成や二重使用を防ぐことができるからです。

Plasma Cashの課題

トークンの分割送金

前述したようにPlasma Cashにはデポジットしたトークンに固有のIDが割り当てられています(NFT)。しかし、NFTは分割不可能であるため利用する上で制約が生まれてしまいます。
例えば現状のPlasma Cashでは10ETHデポジットし、そのうちの3ETHだけ使用することが現状できません。ユーザービリティの観点から考えるとこれでは多くのユーザーにとっては使用不可の状態にあると考えられます。またDEXなどの大量取引にも向いていません。
ユーザーが分割や結合をする際に新たなトークンIDに書き換える方法なども提案されていますが未だベストな解を見いだせていないのが現状です。

データサイズ

Plasma Cashになったとしてもまだデータサイズが大きいという問題があります。Plasmaが抱えていたデータサイズの問題と比べるとかなり削減されたものの、今後スマホなどのモバイル端末やIoTデバイス等ストレージに制限がある端末での活用を想定した場合さらなる削減が必要だと考えられています。

複雑なExit

ExitとはPlasma Cashチェーンからイーサリアムのメインチェーンにトークンを戻す行為のことを指します。Plasma CashのExitの仕組みを説明すると、まずExitをする際には少額の保証金(Security Deposit)が必要になります。これは不正を防ぐための仕組みであり、例えばAliceがPlasmaチェーン上に5ETHしか持っていないのに、10ETHをメインチェーンに戻そうとした場合に、ネットワークを監視しているすべてのノード (ユーザー)は不正の申告ができ、本当に不正が行われていた場合は、不正を発見したノードは保証金を受け取ることができます。

また、Exitをする際にはトークンのトランザクション履歴を二つ提出しなければなりません。なぜ二つなのかというと、ブロック生成者が不正なデータを含めてトークンを引き出そうとした場合に、不正なデータは最新のトランザクションと次のトランザクションの間に含まれるからです。

このように現状のPlasma CashではUXの課題がまだまだたくさんあります。これはイーサリアム以外のブロックチェーンにも言えることですがユーザービリティが改善されることで一般ユーザーへの普及が進んでいくでしょう。

Plasma Cash活用事例

Loom Network

CryptoZombiesでお馴染みのLoom Network

github.com

medium.com

Omise GO

東南アジアを中心に決済ネットワークを形成する長谷川氏率いるOmise GO

github.com

最新のPlasmaの動向

f:id:tomoya415:20180729133711p:plain

Plasma界隈は開発が盛んに行われているので、ものすごい速さでアップデートされていきます。

Plasma XT

Plasma XTはPlasma Cashのデータサイズ問題を解決するために提案されました。ブロックのMerkle Treeとトークンの所有者情報(アドレス、署名)を一定のチェックポイントごとに証明データとして提出する仕組みで、チェックポイントが正しい場合において、不正を証明するためにはチェックポイント以降のデータを使うだけで済み、Plasmaチェーン全体を監視する必要がなくなります。これによりPlasma Cash以上のデータ削減が期待されています。

詳細はこちらの記事で詳しく紹介されています。

scrapbox.io

Plasma Debit

Plasma DebitはPlasma Cashのトークンの分割送金ができない問題を解決するために提案されました。Plasma Debitにはデポジット額の残高管理をする仕組みがあり、例えばAliceが10ETHをデポジット(オペレーターに5ETH、残高5ETH)し、Bobが6ETH(オペレーターに3ETH、残高3ETH)をデポジットした場合、5ETH(Alice)+3ETH(Bob) = 8ETHがオペレーターの残高になります。

AliceからBobへの1.5ETHを想定した場合、Aliceの残高を3.5ETHに減らし、Bobの残高を4.5ETHにし、オペレーターはトランザクションによってそれぞれの合計残高が変化しないことを確認後トランザクションを承認し残高を更新します。

これはビットコインのライトニングネットワークにも使われている双方向ペイメントチャネルという仕組みで一定のトランザクションをまとめてから定期的にメインチェーンへと書き込込みを行います。

ペイメントチャネルに関してはこちらの記事で紹介しています。

tomoyaishida.hatenablog.com


ライトニングネットワークを理解している人は、ライトニングネットワークの仕組みをイメージしてみるとわかりやすいかもしれません。

More Viable Plasma

More Viable PlasmaはPlasma MVPのexit priotrityの算出基準を変更したもので、Confirmation Signatureが不要になりました。ただし、Plasma cashが改善した、ユーザーがPlasmaチェーンのデータを全てダウンロードしなければならない問題と不正の監視をしなければならない問題をMore Viable Plasmaは抱えています。またMore Viable Plasmaでは定理証明を行い、正当性を証明しています。

詳細はこちらの記事で詳しく紹介されています。

scrapbox.io


どの技術も研究段階ではあるものの着実に前に進んでいる印象です。最新の情報を知りたい方はEthreum Researchをのぞいてみましょう。Vitalikなども参加して質の高い議論が行われています。

ethresear.ch

参考

Plasma#3に参加してPlasmaをもっと知りたいと思い調べていた内容をようやくまとめる時間が取れました。最新のPlasmaの動向で紹介した3つの実装に関してはまだまだResearchできていないのが現状です。認識違い等ございましたら遠慮なくご指摘ください。

ツイッターのフォローもよろしくお願いいたします!

twitter.com

イーサリアムのスケーラビリティ問題を解決するPlasmaの仕組みと重要性を理解する

Plasmaは2017年8月にイーサリアム創始者のVitalik Buterin氏とライトニングネットワークの共同開発者であるJoseph Poon氏によって発表された、イーサリアムのスケーラビリティ問題を解決するための技術のことです。Plasmaが実装されることでイーサリアムブロックチェーンの負担が減り、秒間数十億のトランザクション処理やより大きなデータサイズのトランザクション処理、スマートコントラクトの実行速度を大きく向上させることが見込まれていることから注目を集めています。

豆知識:イーサリアムのスケーラビリティ問題とは?

現在イーサリアムは多くのDappsのベースとなっているためブロックチェーン内でのトランザクションが集中してしまい処理が滞ってしまう問題が起きています。これは交通渋滞のようなもので交通量に対して適切な道路(イメージは2~3車線道路)が整備されていなければ渋滞が発生してしまうように、増加するトランザクション数に対して適切なシステムが構築できいないことにより、処理の遅延が生まれてしまったのです。これをスケーラビリティ問題といい、Dappsを普及させるために対策が急がれています。

Plasmaの仕組み・特徴

今回はPlasmaのWhitepaperを追いながら仕組みや特徴を解説していきます。(画像はWhitepaperからの引用です)

日本語訳もあります。

github.com

Plasmaはイーサリアムブロックチェーンを親チェーン(ルートチェーン)として、階層的なTree構造が成り立っています。従来のイーサリアムではトランザクションの処理をメインチェーンのみで行わなければなりませんでしたが、Plasmaではそれぞれのプラズマチェーンにおいてブロックが追加される毎に、そのブロックのヘッダーハッシュを上位階層のプラズマチェーンに伝え、それぞれのプラズマチェーンの最終的な状態のみをルートチェーンに送信することでルートチェーンの負担を軽減させています。

仕組み自体はビットコインのライトニングネットワークと似ていますが、ライトニングネットワークはオフチェーンで処理をするのに対し、Plasmaはオンチェーンで行われるという違いがあります。

f:id:tomoya415:20180722190458p:plain
source: https://plasma.io/plasma.pdf

この階層構造を親と子で表現すると、親チェーンのブロックが承認されて始めて子チェーンに追加されたブロックは承認され、これを階層的に繰り返すことで子チェーンのトランザクションがルートチェーンにまとめて記録されるのでトランザクションの効率化が見込まれています。Plasmaが大規模になればなるほど多くのブロックチェーンが連携し、並列処理できるトランザクション数が増加することでスケーラビリティ問題の解決へと近づきます。

ここからはより深くPlasmaの仕組みをみていきます。

このようにプラズマチェーンが1階層の場合は、アリスが持っている1ETHはプラズマブロックのみに記録され、ヘッダーハッシュをルートチェーンに送信することができます。不正があるヘッダーハッシュをルートチェーンにコミットしてしまった場合は、ブロックはロールバックされ、作成者にはペナルティが課せられます。

f:id:tomoya415:20180722190638p:plain
source: https://plasma.io/plasma.pdf

プラズマチェーンが多階層(今回は3階層)の場合、アリスの1ETHは3階層目のプラズマチェーンにのみ記録され、それ以降のプラズマチェーンには記録されません。情報伝達は一定の間隔で行われ、もし親チェーンで不正が発覚した場合は、その親チェーンを回避するためのルート探索が行われます。

f:id:tomoya415:20180722190909p:plain
source: https://plasma.io/plasma.pdf

Plasmaは仕様に従っていれば自由に実装できるので、目的や用途に応じて様々な場面での活用が期待されています。ここ最近注目を集めているDEX(分散型取引所)においてもPlasmaは活用できDepositの保護機能による資産流出リスクの軽減、並列処理による取引量増加などが期待されています。

MapReduce

f:id:tomoya415:20180722191255p:plain
source: https://plasma.io/plasma.pdf

Map Reduceとは親チェーンが子チェーンにトランザクションの処理を分割し、並列処理により実行速度を高速化させる仕組みのことです。親チェーンの下にいる子チェーンに分割し、さらに下にいる孫チェーンに分割しというように下の階層にいるプラズマチェーンに処理を分割させていきます。処理が終了するとその結果をまとめて上の階層にいる親チェーンに送り、最終的にはルートチェーンに送信されます。また分割する処理を水平方向に展開することで1つのチェーンでの処理数を軽減することができます。この処理をReduce処理といいます。どんなに分割し、階層を増やしてもルートチェーンには1度しか書き込まないので、大量のトランザクション処理や大規模なスマートコントラクトに対応することが可能になりました。

悪意のユーザーに対するセキュリティ

Plasmaの仕組みとして、ネットワークの参加者はプラズマチェーンをを監視し続けなければなりません。なぜなら監視をしないと不正が起きた際に気づくことができないからです。もし監視をしていた場合は後述するFraud proofにより不正を証明することができます。

しかし、監視をするためにはルートチェーンに連なるプラズマチェーンを全てダウンロードしなければならないので、利便性を損なうという観点からPlasmaがもつ課題となっています。

Fraud Proof

f:id:tomoya415:20180722191059p:plain
source: https://plasma.io/plasma.pdf

プラズマチェーンの運用は不特定多数に任されているため、悪意のある参加者により不正が行われる可能性を秘めています。例えば利用しているプラズマチェーンが悪意のある者によって運営されていた場合、プラズマチェーン上で利用している資金が奪われるリスクも考えられます。

このような不正を防ぐためにFraud proofという仕組みが活用されます。プラズマチェーン内の全ての状態はFraud proofにしたがって実行されるため、万が一不正が行われていた場合、全てのブロックチェーンのデータを持っているアリスは不正の有無を親チェーンに証明することができます。この仕組みをFrand proofといいます。不正があった場合、ブロック4はロールバックされ最新のブロックはブロック3になります。これによりユーザーは不正が行われる以前のブロック3から安全に資金を引き出すことができ、不正を行なったブロック4の生成者は罰せられます。

Plasma MVP

Minimal Viable PlasmaはPlasmaの最小限の簡易実装として、主にDepositとブロックチェーン運用周辺の実装提案がされています。

有名どころでは東南アジアを中心にペイメント事業をしているOmise社が展開しているOmise GOなどに活用されています。

github.com

大まかな仕組みを理解した上でコードにも目を通すことでより理解は深まると思います。

Plasmaの重要性

こちらの記事でも書きましたが、今後イーサリアムはAppStoreやGoogle Playのようなプラットフォームになることが予想され、イーサリアムの周りにはたくさんのサービスや開発者が生まれることが予想されます。

しかしこれらはあくまでもイーサリアムのスケーラビリティ問題が解決されたらの話なので、解決されるまではワールドコンピューターという構想も夢のまま終わってしまいます。だからこそ、イーサリアムを裏から支え発展のための基盤を作るPlasmaが重要視されているのです。

最後までお読みいただきありがとうございました。認識違いなどありましたら、ご指摘お願いします。

ツイッターのフォローはこちらからどうぞ!

twitter.com

ライトニングノード(Lightning Network/Lnd)を立ち上げてみた!

ライトニングネットワークとはビットコインのスケーラビリティ問題を解決するセカンドレイヤーの技術のことで、直接繋がっていない二者間のマイクロペイメントを可能にし、オフチェーンでトランザクションをまとめてからブロックチェーンに書きこむことで取引の高速化と効率化を実現しました。

簡単にいうとライトニングネットワークとはビットコイン実用化への未来を担う重要な技術ということです。

ライトニングネットワークの詳細はこちらの記事をご覧ください。

tomoyaishida.hatenablog.com

そんなライトニングネットワークに触れるためにライトニングノードを立ち上げてみました。

今回はLndというLightning-Labs製のライトニングネットワークをテストネットで触れてみたいと思います。

推奨環境はUbuntuのようですが、僕は通常のMac OSで行いました。

また今回はNeutrinoと呼ばれるブロックチェーンのブロックのヘッダーのみを同期させるライト・クライアントを使用しています。これによりユーザーはフルノードと同期せずにライトニングネットワークを使用できます。また、Neutrinoには悪意のあるノードに繋がらないようにするプライバシー保護の役割があります。

github.com

まずはじめにlndはGo言語で書かれているので、Go言語をインストールする必要があります。バージョンは1.9以上が必要です。

$ sudo apt-get install golang-1.10-go


Macの方はこちら。

$ brew install go


インストールが完了したらバージョンの確認をして見ましょう。

$ go version


/usr/local/binにシンボリックリンクを貼ります。(Macは不要)

$ sudo apt-get install golang-1.10-go


Go言語のパスを設定します。

$ export GOPATH=~/gocode


続いてlndの実行ファイルの保存先にもパスを通します。

$ export PATH=$PATH:$GOPATH/bin


ログイン毎に上記コードを実行しなくても済むように~/.bashrcに設定をします。

$ vi ~/.bashrc
#Vimを開き書きコードを記述したら:qwで保存して終了です。
$ export GOPATH=~/gocode
$ export PATH=$PATH:$GOPATH/bin


ここでついにライトニングノードをインストールします。

$ go get -d github.com/lightningnetwork/lnd


インストールには約5分以上かかります。待ちきれない人は下記のコマンドの方が早くインストールできます。

$ git clone https://github.com/lightningnetwork/lnd.git
$ GOPATH/src/github.com/lightningnetwork/lnd


コンパイルし、lndの実行ファイルを作成し配置します。

$ cd $GOPATH/src/github.com/lightningnetwork/lnd
$ make && make install


そして、ライトニングノードの立ち上げです!

$ lnd --noencryptwallet --bitcoin.active --bitcoin.testnet --bitcoin.node=neutrino --neutrino.connect=faucet.lightning.community


lndログの確認

$ less ~/.lnd/logs/bitcoin/testnet/lnd.log


Macの場合

$ less ~/Library/Application Support/Lnd/data


lndノード情報取得

$ lncli getinfo


補足になりますが、ノード立ち上げ時に設定したオプションをlnd.confにあらかじめ設定しておけば毎回指定する手間が省けます。

$ mkdir ~/.lnd && cd ~/.lnd
$ touch lnd.conf


次にlnd.confを開き設定を書き込みます。

$ vi lnd.conf

下記を記述します。

#ノードIPアドレスとライトニングネットワークのポート番号(xxx.xxx.xxx.xxxとなっている部分にIPアドレスを入れる)
#ノードを立ち上げるだけなら不要
externalip=xxx.xxx.xxx.xxx:9735

#テストネットのための設定
noencryptwallet=1

#ノードの名称
#立ち上げるだけなら不要
alias=xxxxxx

#ビットコインのP2Pネットワークに接続
bitcoin.active=1

#ネットワークの接続先を指定(この場合はテストネット)
bitcoin.testnet=1

#ビットコインフルノードの接続先を指定(今回はneutrino)
bitcoin.node=neutrino

#他ノードに対してチャネルを貼る際の承認数を指定(テストネットなので1を指定するが、メインネットの場合は3以上)
bitcoin.defaultchanconfs=1

#neutrinoの接続先を指定
neutrino.connect=faucet.lightning.community

#autopilotをon(自動的に他ノードに接続しチャネルを貼る)
autopilot.active=1


以上でセットアップは完了です!

暗号通貨界隈の技術の発展スピードはとても早いので、もしうまくいかない方は公式のGithubをチェックしてみてください。英語ですが、とても詳しく記述されているのでどこかしらに答えが書いてあるはずです。(インストール方法は/docs/INSTALL.md)

github.com

続編も近日公開するので、しばしお待ちを!

よろしければTwitterのフォローもよろしくお願いします!

twitter.com

今更聞けないイーサリアムの特徴とアルゴリズム、ロードマップを理解する

イーサリアム(Ethereum)とはスマートコントラクトを用いてアプリケーションの開発を行えるプラットフォームのことで、中央管理者のいないP2Pネットワークを用いて作られるこれらのアプリケーションはDapps(Decentralized Applications=分散型アプリケーション)と呼ばれています。そしてこのプラットフォーム上で使われる通貨の名称がイーサ(Ether=ETH)になります。ビットコインはBTCを送金や決済、資産としての発展を目指していますが、イーサリアムはETHをイーサリアムネットワーク上のトランザクションの手数料(Gas)として機能させています。つまりETHとはイーサリアム上でDappsを動かすための燃料のことなのです。

イーサリアムとイーサは混同しがちですが、イーサリアムはプラットフォームの名称でイーサはイーサリアム上で使える通貨の名称でDappsを動かすための燃料であるということを覚えておきましょう。

イーサリアムの特徴

スマートコントラクト

スマートコントラクトとはイーサリアム上で実行可能なデジタル契約のことで、第三者を仲介せずに自動履行することができます。イーサリアムブロックチェーンを用いることで契約の改ざんが不可能かつトラストレス(第三者を介さない)であることから安全性と透明性の高い取引の実現、また自動化によるコストカット(人件費や時間コスト)が実現することから注目されています。

実はスマートコントラクトの概念自体は1997年頃に提唱されており、初めての活用が自動販売機と言われています。自動販売機は「利用者がお金を入れる」「商品を選択する」という2つの条件が満たされたとき「商品を提供する」という契約が自動で履行されます。

つまり、この時代には存在しなかったブロックチェーン技術を活用できる現在において、スマートコントラクトの真価が発揮されようとしているのです。

計画的なハードフォーク

イーサリアムではトランザクションの処理速度の向上やセキュリティの改善のためにプロトコルをアップデートするためのハードフォークが4段階に分けられ計画的に予定されています。

1回目のハードフォーク:Frontier(フロンティア)2015年7月に実施済み

フロンティアは正式リリース前の開発者向けβ版(テスト版)リリースにあたり、基本機能の実証実験やバグの発見、開発者側にイーサリアムの分散化システムの開発方法を知らせる目的がありました。

2回目のハードフォーク:Homestead(ホームステッド)2016年3月に実施済み

ホームステッドでは、マイニング難易度の調整アルゴリズムの変更が行われました。これにより取引の承認に必要な時間が平均5~20秒に早まったことからイーサリアムのユーザービリティが向上しイーサリアム上でのアプリケーション開発への参入者が増加しました。また通貨としての価値もこの時期に大幅に増加しています。

3回目のハードフォーク:Metorpolis(メトロポリス

メトロポリスとはByzantium(ビザンティウム)とConstantinople(コンスタンティノープル)という2段階アップデートを行うハードフォークのことです。ビザンティウムは2017年10月に実施され、zk-snarkの実装に伴うプライバシー保護(匿名性)の強化、マイニング難易度の調整(ディフィカルティボムの調整)、マイニング報酬の変更(5ETH→3ETH)が行われました。

コスタンティノーブルは2018年内に実施予定で、PoWからPoSへの移行準備が行われる予定です。

※ディフィカルティボムとはマイニングの難易度を上昇させる仕組みのことです。これによりマイナーはブロックの生成を行うことはできず報酬を得ることができなくなります。これは最後のハードフォークであるセレニティで行われるPoSへの移行の際に古いチェーンを保持するメリットをなくすことでコミュニティに分裂を回避し新しいチェーンへの移行をスムーズにする目的があります。しかし、開発の遅延によりPoSへの移行準備が整わないうちにディフィカルティボムの影響によりマイニングの難易度が上昇する自体が起きてしまいました。そこでビザンティウムアップデートではディフィカルティボムの調整が行われたのです。

4回目のハードフォーク:Serenity(セレニティ)

セレニティとはイーサリアムで行われる最後のハードフォークのことで詳細時期は未定ですがブロック承認方法の変更が行われる予定です。これまでの承認方法であるPoWからCasper(キャスパー)と呼ばれる独自のPoSへと移行が予定されています。

アカウント

ビットコインネットワークではアカウントという概念は秘密鍵により示され、秘密鍵を持つ者がそのビットコインの所有権を証明できました。

イーサリアム においてはEOAとコントラクトアカウントという2つのアカウントがあり、どちらも20バイトのアドレスと状態を持っています。

EOA(Externally Owned Account):ユーザーが保持するアカウント

秘密鍵の署名でコントロールされており、紐づく残高とアドレスがある。ユーザーはEOAを通してイーサリアムネットワーク上で送金などができる。

コントラクトアカウント:スマートコントラクトのアカウント

EOAからトランザクションを介して生成され、EOAのトランザクションをトリガーにコントラクトのコードを実行する。スマートコントラクトからスマートコントラクトの生成やコードの実行も可能であり、これがスマートコントラクトとして機能する部分。アドレスと紐づく残高、コード情報を持っている。

ビットコインネットワークでは残高はUTXOで表現されていましたが、イーサリアムネットワークではアカウントに紐づく残高が存在し、ブロックチェーン上で管理されています。

アカウントの内部構造

アカウントを表すデータはState Treeに保存されており、中にはEtherの残高情報が入っています。イーサリアムを利用する全ユーザーの残高情報をブロックに入れるとブロックサイズが肥大化してしまうので、State Treeはブロックの外に保存しておき、各ブロックにはState Treeのroot値のみを保存しています。

  • nonce:EOAの場合は、そのアカウントが送ったトランザクションの数。コントラクトアカウントの場合は、そのアカウントが作ったコントラクトの数。
  • balance:アカウントが所持している通貨量(残高情報)。
  • storageRoot:アカウントが持っているデータのマークル木のルートハッシュ アカウントに紐づくStorage Treeのルートノードを表す値。デフォルトでは空。
  • codeHash:EVMのハッシュ値。EOAアカウントの場合は空文字のハッシュ、コントラクトアカウントの場合は実行コードのハッシュが入っている。

GHOSTプロトコルとブロックの生成速度

イーサリアムではGHOST(Greedy Heaviest Observed Subtree)プロトコルにより最も重いチェーンがメインチェーンに選択されています。重いチェーンとは最も計算が蓄積されているチェーンのことで、最も長いチェーンを採用するビットコインとはアルゴリズムが異なります。重いチェーンを採用する理由はブロックの生成時間が短いからです。詳細を今から解説して行きます。

ブロックの生成速度

ブロックチェーンがフォークしやすくなる

ブロックチェーンがフォークしやすくなるとは、つまり承認速度が上がったことでマイナーが同時にマイニングに成功する機会が多くなってしまうということです。ブロックチェーンの構造上、複数のチェーンが存在することは認められておらず、一つのチェーンを選択しなければなりません。そのためマイニングにつぎ込んだコストが無駄になってしまいます。

②マイニングの中央化が加速してしまう

マイナーがマイニングに成功すると、生成したブロックをネットワーク全体のノードに伝える必要があり、そのための伝搬時間を要することになります。そのためマイニングに成功したマイナーは、他のマイナーよりも早く次のマイニングを始めることができ、さらに次のマイニングを成功させる確率が上昇してしまいます。ブロックの生成速度が短い場合にこのような状態が起きやすくなると言われています。

この問題をGHOSTプロトコルは解決しました。

GHOSTプロトコルではUncleブロック(承認されなかったブロック)も考慮して、最も計算が蓄積されているチェーンをメインチェーンとしているので、例えuncleブロックを生成してしまったとしても無駄にはならずブロックチェーンのセキュリテイに貢献していることになります。(①の問題の解決)また、uncleブロックを生成したマイナーにも報酬を与える仕組みとなっているため、マイニングの中央化を解消しています。(②の問題の解決)GHOSTプロトコルにおいてはuncleブロックの存在が大きく関わってきているのです。

PoWからPoSへの移行

先述したように、イーサリアムでは最終ハードフォークであるセレニティでPoWからPoSへの移行が計画されていますが、そもそもなぜ移行するのでしょうか?

大きな理由はPoWではネットワークの維持に多大なマシンパワーと電力がかかってしまうため、それらのコスト下げる目的があります。特にイーサリアムではスマートコントラクトによりネットワーク全体で大きな処理能力が必要になってきます。また暗号通貨の保有量に応じてブロック生成の報酬を受け取れるため51%攻撃に強いなどセキュリティ面のメリットもあります。他にもスケーラビリティ問題を解決するシャーディングと言われる技術もPoSを前提に作られております。

では、なぜ最初からPoSを導入しなかったのでしょうか?それは初期段階からPoSを導入してしまうと富の集中化が起きてしまうからです。PoSは仕組み上、コインを多く保有する者ほどコインを多く手に入れられるため初期段階ではコインの保有率を分散させる必要があります。つまりリリース時にコイン保有者が1名(100%保有)であった場合には、その後発行される全てのコインはこの人に割り当てられるのです。そのためICOを実施することでできるだけ多くの人にコインを所有してもらう必要があったのです。イーサリアムにおいてはPoSへ移行するまでのPoWの期間を長めに保持することで、十分にコイン保有者を分散させることに成功しました。

以上がイーサリアムの概要になります。今後イーサリアムはAppStoreやGoogle Playのようなプラットフォームになることが予想され、イーサリアムの周りにはたくさんのサービスや開発者が生まれると思われます。その波に乗るためには早い段階から全体像を掴み、コアな技術に触れておくことが大切になるでしょう。

よろしければTwitterのフォローもよろしくお願いします!

twitter.com

ビットコインの少額決済を可能にするライトニングネットワークとは?

ライトニングネットワークとは、直接繋がっていない二者間のマイクロペイメントを可能にした技術のことです。オフチェーンでトランザクションをまとめてからブロックチェーン上に記録することで取引の効率化と高速化を実現しました。それによりビットコインの暗号通貨決済が日常生活に普及する可能性を秘めていることから注目を集めています。

ライトニングネットワークの仕組み

ライトニングネットワークの仕組みを理解するために、まずはペイメントチャネルの仕組みを理解しましょう。

ペイメントチャネルとは、トランザクション処理をオフチェーン(ブロックチェーンの外)で実行し、最後の取引だけをブロックチェーンに記録することで取引の高速化と少額の決済を可能にした技術のことです。通常の取引ではマイニングの際に手数料が発生するため、何度も同じ人とやり取りをする場合はその度に手数料が発生してしまいます。特に少額の支払いを行う際は、取引手数料が支払額を上回ってしまう場合もあるため、ビットコインは今まで少額決済に向いていませんでした。

f:id:tomoya415:20180722160045p:plain

アリスとボブにおける2者間の取引において、例えば送金と返金があったとします。

  • アリスからボブに1BTCを送金
  • ボブからアリスに1BTC返金

通常の取引の場合は、2つのトランザクションブロックチェーンに記録しなければなりません。そのため、時間も手数料かかってしまいます。

しかし、ペイメントチャネルを活用した場合を考えて見ましょう。

ペイメントチャネルはオフチェーンを利用した取引で、ブロックチェーンに記録をするのは確定した最後の取引だけです。つまりペイメントチャネルを活用すれば送金と返金を行なった2つのトランザクションブロックチェーンへの記録が1回で済むのです。それにより無駄な手数料がかかることのない効率的な取引が可能になりました。

具体的な仕組みは以下になります。

  1. オンチェーンでマルチシグのアドレスにデポジットを送る。
  2. オフチェーンでアリスからボブにトランザクションを作る。
  3. オンチェーンで最終的なトランザクションのみを記録する。

次はライトニングネットワークの説明です。

ペイメントチャネルでは繋がっている2者間での取引に限定されるので、別の人と取引をするには新たにペイメントチャネルを開かなければならず、複数の人と取引をするための利便性を備えていませんでした。

そこで第三者を経由して、ペイメントチャネルで直接繋がっていない二者間の取引を可能にしたのがライトニングネットワークです。

f:id:tomoya415:20180722160213p:plain

例えば、下記の取引があったとします。

  • アリスからキャロルに1BTC送金
  • キャロルからボブに1BTC送金

今まではアリスからボブに送金をしたい場合は、アリス-ボブ間でチャネルを開く必要がありました。しかしライトニンングネットワークでは、アリス-キャロル、キャロル-ボブ間のチャネルが開いていれば、キャロルを経由してアリス-ボブ間の送金が可能になったのです。

ライトニングネットワークはこれを同時にネットワーク上で何千人単位で行うことで、中継の人を知らなくても無駄なトランザクションを減らして効率的かつ高速な取引を実現させました。

しかしこれだけでは第三者であるキャロルの信用が必要になり、ビットコイン最大の特徴であるトラストレスを失うことになってしまいます。そこでライトニングネットワークではトラストレスを実現させるためにHash Time Lock Contract(HTLC)という仕組みを実装しました。

Hash Time Lock Contractとはライトニングネットワークで安全な送金を実現させるための技術のことでハッシュとタイムロックという仕組みを活用しています。トランザクション内にハッシュを入れることで、ボブだけがロックを解除してビットコインを使用できるようになっており、中継役を担う第三者はロックの解除ができないので、トラストレスな仕組みが実現しました。

ハッシュに関してはこちらの記事を参考にしてください。

tomoyaishida.hatenablog.com

チャネルの閉じ方

取引終了後チャネルを閉じるためには、最終的なトランザクションをブロードキャストするだけです。これによりブロックチェーンへの記録は終了です。

ライトニングネットワークのイメージがよく伝わるので、こちらの動画をご覧ください。

youtu.be

ライトニングネットワークのメリット

マイクロペイメントが可能になる。

マイクロペイメントとは少額単位での送金を可能にする送金システムのことです。1円以下の支払いもできることからデジタルコンテンツの支払いに向いています。

例えば、

  • 記事を1ページ読むたび、動画を1秒を見るたびに課金。
  • クラウドサービスの利用量や転送量、APIへのアクセス数に応じて課金。
  • IoT機器の使用時間ごとに課金。

といった、従来のシステムではできなかったマネタイズができるようになります。これを現状のシステムで実現しようとした場合、クレジットカードで支払わなければならず、手数料が5~10円ほどかかってしまうので、秒単位の支払いをすることは現実的ではないのです。

秒速で送金ができ、取引量が増える。

ライトニングネットワークはオフチェーンであるためトランザクションの承認が早く取引の高速化、取引量の増加が実現しました。

ビットコインはブロックの生成時間に取引速度が依存しているため、10分ごとにしかブロックが生成されません。そのため最短でも送金可能までに10分かかってしまいます。しかしライトニングネットワークであれば一瞬で送金できます。

また取引量に関してもビットコインは1秒間に7件の送金しかできませんが、ライトニングネットワークであれば1秒間につき1000件以上の処理ができるようになります。また最終的には1秒間に数万件以上の処理を目指しており、クレジット決済の処理能力を上回るポテンシャルを持っていると考えられます。

スケラビリティ問題の解決

ライトニングネットワークはブロックチェーンから切り離された場所(オフチェーン)で処理を行ってくれるので、処理件数がどんなに増えてもブロックチェーンの処理件数には問題は起きません。そのため、利用者の増加に伴い生まれるスケーラビリティ問題を解決してくれるのです。

ライトニングネットワークの懸念点・問題点

中央集権的ネットワークになる可能性がある

ライトニングネットワークの仕組み自体は分散的ですが、特定のノードにより中央集権状態が生じる可能性があります。ライトニングネットワークはその仕組み上、中継するノードはデポジットを行わなければなりません。ネットワークが巨大化することで中継するノードは継続的に巨額のデポジットをしなければならず問題視されています。またその中で手数料で収益をあげる銀行のような中央集権ビジネスモデルが成立してしまう懸念があります。さらには、それにより規制対象となり自由な取引が阻まれる恐れがあります。

マイナーの手数料が減る

取引がオフチェーンで行われるためマイニングの手数料が減ってしまいます。ビットコインネットワークはマイニングにより成立しているので、マイニングを行うマイナーのインセンティブ設計が非常に重要です。今後ビットコインはマイニング成功報酬が減っていくので、将来的には手数料だけがマイナーの報酬になった場合、どのようなインセンティブ設計を行うかが課題となります。

セキュリティ

ブロックチェーンの外であるオフチェーンで管理することになるので、ブロックチェーンとは別の堅牢なセキュリティ対策が必要になります。しかし、ライトニングネットワーク上で堅牢なセキュリテイを作れるかは断言できず、それらを踏まえて少額決済のための決済プラットフォームと言われています。現状では財布と金庫の関係性のように、利便性と安全性はトレードオフとなっています。

なぜ、今まで実装されなかったのか?

ライトニングネットワークを実装するための基礎的な要件をビットコインが満たしていなかった(マリアビリティ問題の解決と半永久的なペイメントチャネルの実装)からです。

しかしその後マリアビリティ問題はSegwit、半永久的なペイメントチャネル の実装はOP_CSVによりそれぞれ解決に導かれます。

それによってライトニングネットワークは実装可能になりました。

マリアビリティ問題とは?

P2Pネットワークを介してトランザクションがマイナーのもとに伝えられる途中でトランザクションの一部の領域であるscriptSigがハッカーによる改ざんを受ける可能性がありました。この問題のことをマリアビリティ問題と言います。

悪意のハッカーや受取主により、scriptSigが改変されると、ハッシュ関数に入力して得られるトランザクションIDが元のトランザクショントランザクションIDと異なってしまいます。それにより、送金主の認識しているトランザクションIDとハッカーにより改変されたトランザクションIDで二重に存在してしまい、マイナーのもとに改変されたトランザクションIDが先に伝えられてしまうと、マイナーはこのトランザクションIDを本物のトランザクションIDと認識してしまいます。そのため、後から本物のトランザクションIDが伝えられた際には、二重送金と認識され拒否されてしまうのです。

そして、多くのウォレットでは、ウォレット上で認識されているトランザクションIDをもつ取引が拒否されると、自動で同じ取引を繰り返すようになっています。それは改ざんを受けた場合に限らず取引が拒否されることは稀に起こりうるためです。そのため、実際には済んでいる取引をまだ済まされていないものと認識し、二重送金をしてしまう問題が発生してしまうのです。

Segwitとは?

Segwitとはトランザクションの中のscriptSigを切り離しサイドチェーンに記録する技術のことで、ハッカーにより改ざんを防ぐことができます。さらにトランザクション内に格納するデータ容量が縮小されることでスケーラビリティ問題の解決にも一翼を担っています。

OP_CSVとは?

OP_CSVとは時限トランザクションを作るための仕組みのことで、今ままでは絶対的な時間指定(〇月〇日)しかできませんでしが、相対的な時間の指定(あるトランザクションの承認されてから5ブロック後など)ができるようになったことで、期限を定めない半永久的なペイメントチャネルが作れるようになりました。

ライトニングネットワークを活用したアプリ「Lapps」

Lappsとはライトニングネットワーク上で動作するアプリのことで、マイクロペイメントを活用したプロダクトが主流となっています。

File Bazaar

コンテンツクリエイターをターゲットにした電子商取引ツール。デジタルコンテンツのクリエイターはFileBazaarを利用することで、マイクロペイメントによる支払いを受け取ることができ、デジタルコンテンツでの簡単かつ透明なマネタイズが実現します。

PayperCall

APIコール一回一回に対しての少額課金ツール。

ライトニングネットラークの発展に伴い、今後新たなLappsが続々とリリースされることが予想されます。

エンジニアの方もBizDevの方もアンテナを貼っておいた方が良さそうです。

よろしければTwitterのフォローもよろしくお願いします!

twitter.com

ビットコインのマイニングって何?

ビットコインのマイニングとは、ビットコインの取引情報をデータの整合性をとりながらブロックチェーン上に記録していく作業のことを指します。マイニングに成功すると新たなビットコインが発行され、マイナーは報酬としてビットコインを得ることができます。マイニングをすることで新たなビットコインが生まれるところが、鉱山から鉱物を採掘することに似ていることから「マイニング(採掘)」という名前がつけられました。

誰がマイニングをするのか?

結論から言うと、ビットコインネットワークに参加している全ての人がマイニングをすることができます。
ビットコインは銀行の取引のように中央に特定の管理者が存在しないため、ビットコインネットワークに参加している人が、取引情報をデータの整合性をとりながら、ブロックチェーン上に記録していかなければならないのです。
中央管理者(第三者)を介さずにオープンなネットワークの参加者により信頼できる合意形成を可能にしたことが、ビットコインブロックチェーンが注目を集めている所以です。

どのようにマイニングをするのか

マイニングとは「ビットコインの取引情報をデータの整合性をとりながらブロックチェーン上に記録していく作業のこと」と先ほど述べましたが、取引情報をブロックチェーンに書き込む際にそのデータが本物であることを証明しなければなりません。

その証明作業のことをProof of Work(PoW)と呼び、計算量の多い問題を解くことでブロックチェーン への書き込みと新たなブロックの生成を参加者に合意させます。

ブロックチェーンへの書き込みができるのは、最も計算が早かった1人のみで、報酬としてビットコインを得ることができます。

これがマイナーのマイニングに対するインセンティブであり、マイニングによりビットコインネットワークは中央管理者を必要とせずに動くことができるのです。


※1 マイニングは誰でも参加できますが、マイニングに成功しビットコインを得ることができるのは、一部の強力な(計算力が高い)PCをもつ者のみであり、多くの場合それはマイニング事業を行う企業になります。なので残念ながら個人参入したところでまず勝つことはできません。

※2 ビットコインは発行上限が2100万枚と決められており、2140年には発行が終了します。つまり、マイニングによりビットコインを得ることはできなくなってしまいます。

以上がマイニングの仕組みになります。

暗号通貨始めたばかりの初心者ですので、間違いなどがあれば教えていただきたいです。

よろしければTwitterのフォローもよろしくお願いします!

twitter.com

ブロックチェーンに使われる暗号技術とProof of Work、改ざんが極めて困難な理由

ブロックチェーン技術の大きな特徴として、第三者を介さないオープンなネットワークでありながら改ざんが極めて困難なことが挙げられます。なぜ誰にも管理されない非中央集権(decentralized)なネットワークながら信頼性を担保できているのかその仕組みを解説していきます。

基本の暗号技術①「ハッシュ関数

まずはじめに基本的な暗号技術であるハッシュ関数の仕組みを説明します。
ハッシュ関数とは入力した値に対して全く違う値が出力される暗号方式のことで出力される値をハッシュ値といいます。

ハッシュ関数の特徴

①同じ値が出力される
同じ値を入力した場合、同じ値が出力されます。入力値が少しでも異なれば違う値が出力されます。

②不可逆性(一方向性)がある
ハッシュ値から元の値を複合することは計算量的に極めて困難であり、不可逆性があります。

③固定長出力
出力値は入力値に関わらず固定長が出力されます。例えば出力値が32バイトであるハッシュ関数を利用する場合、入力値が1バイトでも、100バイトでも、32バイトの出力になります。

ハッシュ関数の種類

ハッシュ関数には様々な種類がありますが、ビットコインではSHA-256とRIPEMD-160が使われており、公開鍵をSHA-256でハッシュ化し、さらにRIPEMD-160でハッシュ化することでSHA-256よりも短いビット長のアドレスを得ています。

基本の暗号技術②「公開鍵暗号

公開鍵暗号は公開鍵と秘密鍵と呼ばれるキーペアにより成り立ち、暗号化の鍵を公開鍵として公開し、復号する鍵(秘密鍵)をもつ人のみが復号できる暗号方式です。公開鍵はビットコインを受け取るために使われ、秘密鍵ビットコインを支払う際のトランザクションに使われます。

公開鍵で暗号化されたものは秘密鍵でしか復号できません。そのため秘密鍵を失くした場合は、二度と復号することができないので注意が必要です。また秘密鍵は自分以外の人に教えてはいけません。なぜなら、秘密鍵を教えることは暗号化によって守られているビットコインの安全性を危険に晒すからです。

基本の暗号技術③デジタル署名(電子署名

デジタル署名は公開鍵暗号を応用し、送られたデータの送信者が本人で間違いないか、伝送経路上でデータが改ざんされていないかを確認するための技術です。

送信者
①送信するデータをハッシュ関数でハッシュ化する。
②出力されたハッシュ値を送信者の秘密鍵で暗号化し、署名を作成する。
③データと署名をセットにして受信者に送信する。

受信者
①受信したデータを送信者と同じハッシュ関数でハッシュ化してハッシュ値を得る。
②受け取った署名を送信者の公開鍵で複合する。
③①で得たハッシュ値と②で復号したハッシュ値を比較して一致していることを確かめる。

この流れでわかること

  • 送られてきたデータの送信元が正しいか

送信者の公開鍵で復号できデータのハッシュ値が一致した場合、受信者は保持している公開鍵のペアである秘密鍵を持つものから送信されたことがわかります。

  • 伝送経路上でデータが改ざんされていないか

ハッシュ値が一致していることからデータが改ざんされていないことがわかります。なぜなら、ハッシュ関数の特性上、同じ値を入力した場合、同じ値が出力されるからです。

Proof of Work(PoW)とは?

Proof of Work(PoW)とは、計算量の多い問題を解くことでブロックチェーン への書き込みと新たなブロックの生成を参加者に合意させることです。

計算量の多い問題を解くとはNonce(ナンス or ノンス)を見つけることで、約10分間かけて計算を行い一番最初にNonceを見つけたマイナーがブロックチェーンにブロックを追加することができます。

マイナーがPoWの解であるNonceを見つけブロックを生成すると他のノードに伝搬し、受け取ったノードは有効なブロックか検証を行います。そしてそのブロックが有効であった場合のみ別ノードに伝播します。

tomoyaishida.hatenablog.com

改ざんが極めて困難な理由

ブロックチェーンが改ざんできない理由を説明するためには、ブロックチェーン を形成するブロックの構造を理解する必要があります。

ブロックチェーンを形成する一つのブロックは「ハッシュ値 + ブロックの取引情報 + Nonce 」という構造を持っています。

例えば、ブロック1の取引情報をハッシュ関数に通すとハッシュ1が生成されます。そして、次のブロック2を生成する際に、「ハッシュ1 + ブロック情報2 + Nonce」をハッシュ関数に通すとハッシュ2が生成され、次のブロック3を生成する際には、「ハッシュ2 + ブロック情報3 + Nonce」をハッシュ関数に通しハッシュ3を生成します。ここで生成されたハッシュ1~3の繋がりをハッシュチェーンと呼びます。

このハッシュ値を繋げたハッシュチェーンの仕組みが改ざんに対して、強力な効果を発揮しているのです。

過去のブロックのトランザクション(取引情報)を改ざんする場合、再度Nonceを見つけなければならない上に、ブロックは親のハッシュを持っているため改ざんしたブロックの子ブロックのハッシュも変更してNonceの再計算が必要になります。

ハッシュ関数の特性上、入力値が異なると出力値が変更されてしまいます。つまり、ハッシュ1の値を変更すると、ブロックに2に含まれるハッシュ1の値も変更しなければならず、それによりハッシュ2の値が変更され、同様にブロック3内のハッシュ2の値も変更しなければなりません。つまり、トランザクションを改ざんするとその先に続く全てのハッシュ値を再計算しなければならないのです。

当然、再計算を行なっている間もマイナーは新しいブロックの生成を続けるため、改ざんしたブロックチェーンの長さが、本物のブロックチェーンの長さに追いつくことは基本的にありません。
ブロックチェーンは一番長いブロックが本物とみなされるので、これらの理由から改ざんが極めて困難だといわれているのです。

最後までお読みいただきありがとうございました。暗号通貨・ブロックチェーンを勉強し始めたばかりの初心者ですので、間違いなどがあれば教えていただきたいです。

よろしければTwitterのフォローもよろしくお願いします!

twitter.com