ビットコインの情報サイトの運営者ブログ

サイトには掲載していない仮想通貨に関する時事的な情報や個人的な感想など。中級者以上向け。

Segwitとソフトフォークについて考える

当ブログではSegwitに関する記事をいくつか(解説発展)書いてきたわけですが、そのSegwitの有効化のためのマイナーの投票がそろそろ始まろうとしています。これまでもビットコインでは、同様の手順を経て何回かソフトフォークが実行されてきましたが、ここまで注目されるのは初めてではないでしょうか。

というわけで、最近ハードフォークの記事を書いたこともあり、「ソフトフォーク」というワードを重点的に見ながらSegwitに関する内容を書いていきたいと思います。

なお、今回のソフトフォークによるSegwit実装に関連してビットコイン開発チームも気合を入れてbitcoincore.orgに関連記事を書いており、今回の内容はその記事の大体のまとめ的なもの+補足です。最後に参考リンクとして貼っておきます。

Segwitの有効化はいつどのように始まる?

Segwitは95%以上のマイナーの賛成により実装されるかどうかが決定されます。具体的には11月15日以降の最初のdifficulty(採掘難易度)の調整期間中に95%以上のブロックがSegwit支持のマイナーにより採掘された場合に、実装されることになります。

最近ではフルノードのSegwit支持が25%程度になった!なんてニュース記事が出ていたこともありましたが、投票のおいてマイナー以外のフルノードは関係なく、過去のソフトフォークでも半分程度のフルノード支持でも問題なく有効化されています。25%と聞くとかなり少ないように聞こえるかもしれませんが、そもそもフルノードは、単にバージョンアップに気が付かないでそのままSegwit未対応の旧バージョンを利用し続けているというケースも多く、過去の例を見渡してもこの時点の25%というのはまあ普通の数字ではないかと思います。

ビットコインのdifficultyの調整期間は2016ブロック(約2週間)ごとであるため、2016の95%である1916ブロック以上がSegwit支持のマイナーに採掘された場合、ということになります。最初の期間のスタートは日本時間の11月20日頃と推定されており、実際の状況は以下のページより確認できます。

Bitcoin Core :: Segregated Witness Adoption

採用が決定された場合は、さらに2016ブロックおいて実際にSegwitが稼働することになります。逆に95%に達しなかった場合は、次の調整期間の2016ブロックに持ち越し、1年間たっても達しなかった場合は、不採用ということになります。

実際に投票期間が始まってからでないと分かりませんが、一部Segwit不支持のマイニングプールがあるため、すぐ採用されるのは難しいのでは?という見方も多いようです。

Segwitの欠点とリスク

Segwitはいいことづくめでメリットやらはいろんなところで解説されていますが、意外と欠点やリスクについては書かれていません。簡単にその欠点とリスクをまとめておきます。

 ①トランザクションサイズ、ブロックサイズ

たまに勘違いされることがありますが、Segwitはトランザクションのサイズを小さくするものではなく、より多くのサイズ(現在の1MB制限から理論的には最大4MB、実質的には2MB程度まで)が1ブロックに含められるようになるものです。

むしろ、Segwitによりトランザクションのサイズは増加します。ただし、これは無視できるほど微々たるものなので、1ブロック当たりの実質的なサイズ上限が2倍程度になるという点が主でしょう。

サイズが上昇すれば、それだけコンピュータのリソースを消費するという意味であり、マイナーやノードの集中化のリスクがあります。また、ブロック情報の転送時間もより長くなることになり、マイナー間のタイムラグによるブロックチェーンの分岐(孤立ブロック、orphan blockの生成)が発生する確率がより高くなり、セキュリティが低下する可能性が考えられます。

②ブロックの検証時間の増加

Segwitという新しい要素が追加されることにより、ブロックの検証作業も増加することになります。通常のPCなどでは無視できるレベルなので、今回はほとんど影響がないと思われますが、同様にノードの負担が増え集中化のリスクとなり得ます。

③バグのリスク

バージョンアップの際には新しいバグがつきものであり、今回も当然リスクはゼロではありません。とはいえ全く何もいじらないという訳にはいかないので(中にはビットコインは簡単に新技術を実装できるのが逆に問題だという人もいますが)、なるべく可能性を減らすように努力するしかありません。

ご存知のとおり、Segwitはかなり長い期間テスト・検証が行われているので、重大なバグが発生する可能性は低いと言えるでしょう。

④手数料の低減によるリスク

Segwitのメリットとしてよく紹介されてきた一つに、送金手数料が下がるというものがあります。一見いいことしかないように思えますが、ビットコインネットワークのセキュリティの根幹の役割を果たしているマイナーからみれば、採掘報酬が減ることになり、採掘のインセンティブが減りハッシュレートが低下する可能性もあるので、ネットワーク全体としてはデメリットにもなり得ます。

さらに、最近はSegwitの導入により実装が容易になると言われているLightning NetworkなどのOff chain(ブロックチェーン外)で取引を行う技術の開発が活発ですが、これはより大きいマイナーの報酬減少につながります。

現在はマイナーの報酬全体に対する手数料の割合は小さいので、問題にはならないと考えられますが、数十年後などの長期的な視点で見ると問題となってくるかもしれません。

⑤ソフトフォークによるリスク

Segwitはソフトフォークにより実装される予定です。そのため、ソフトフォーク自体のリスクがあります。今回の本題ということで次にソフトフォークについて説明していきましょう。

ソフトフォークとは何か

 ハードフォークの説明はこれまでも何回かしてきましたが、バージョン前後で互換性がない、というわかりやすいものです。しかし、ソフトフォークは前方互換性があるとか後方互換性があるとかわかりにくいものになってしまっています。

ソフトフォークの定義がいくつか考えられる中でわかりやすいのは、(ビットコインの場合)「新バージョンで新ルールを導入し、以前は有効だったブロックが無効になる」というものです。ハードフォークでは逆にルールが削除され、以前は無効だったブロックが有効になります。

例えば、新しく「1トランザクション当たりのサイズ上限を1KBにする」というルールをプロトコル自体に導入するとします。新ルールの導入なのでソフトフォークです。このとき、新バージョンではすべてのトランザクションが1KB以下となります。旧バージョンから新バージョンのトランザクションを見ると、もちろんすべて有効です。そのため互換性があることになります。しかし、逆に新バージョンから旧バージョンを見ると、1KB以上のトランザクションは無効になってしまいます。つまり、旧バージョンのマイナーにより生成された(有効と見なされたトランザクションを含む)ブロックは新バージョンから見ると無効になるのです。

よって、もし旧バージョンのマイナーがブロックを生成すると、一時的にブロックチェーンが分岐することになります。しかし、旧バージョンから見ると新バージョンのブロックも有効であるため、一番長いブロックチェーンを優先するというルールに基づき、旧バージョンのブロック生成速度が新バージョンのブロック生成速度を上回らない限り、新バージョンで生成されたブロックチェーンが最終的には有効となり、ハードフォークのような永続的な分岐にはなりません。

ちなみに、上述したようにルールを削除する際はハードフォークとなります。一度導入した「1トランザクション当たりのサイズ上限を1KBにする」というルールを撤廃するとします。このときは、旧バージョンではすべて1KB以下のトランザクションです。しかし、新バージョンでは1KB以上のトランザクションも生成されるので、そのようなトランザクションを含んだブロックは旧バージョンからは無効と見なされてしまいます。つまり互換性がなく、永続的なブロックチェーンの分岐が発生する可能性があります。

一度Segwitをソフトフォークにより導入した後に、やっぱり実装をとりやめるとなったときは、ハードフォークになるというのはなかなか面白いと言えるでしょう。

Segwitと並んでよく議論されるブロックサイズ上限1MBの引き上げは、1MBという上限ルールを「削除」した後に新たな上限を新設しなければいけないので、ハードフォークが必須といわれています。(Segwitによる今回の実質的なサイズ上限の引き上げは、1MB制限自体が削除されたり変更されるわけではありません。)

ソフトフォークによるリスク

それではソフトフォークを実施する際のリスクを考えていきましょう。

 ①旧バージョンのウォレットでビットコインが使用できない、同期や表示が正しく行われない

先の例をそのまま使うと、新バージョンで1KB以上のトランザクションが無効とみなされる場合、旧バージョンのウォレットをそのまま使っていると、1KBを超える無効な取引を作成してしまう可能性があります。

ただし、今回のSegwitの場合は、なるべく互換性を保てるかたちでの実装であるため、そのようなことはなく、ウォレットを使用する一般ユーザーは旧バージョンでも問題なく使用できます。新たなSegwitのトランザクションは旧バージョンから見ると全く訳の分からない謎のトランザクションということになるので、新バージョンから送られたビットコインは旧バージョンのウォレットでは無効と見なされて使用できないんじゃないの?と思いがちですが、Segwitのトランザクションは、旧バージョンからは「誰にでも使用できる」ビットコインに見えるように実装されています。つまり旧バージョンのままでも誰でも使用できる=自分でも使用できるということで、問題なく送金が可能です(新バージョンのマイナーから見ると所有者は決まっているので、実際に誰でも使用できるわけではありません。)。

もちろん、ブロックに取り込まれていない未確認状態のトランザクションは無効とみなされたり正しく表示されない可能性があります。その他これらの新旧ノードでの認識の不整合を悪用して、二重支払い攻撃のリスクも高まりますので、ソフトフォークの実施直後は特に最低1確認をもって支払い完了と見なすことが推奨されています。また、アップデートしなくてもよいとはいってもできるだけ更新するのが良いと思います。

②ブロックチェーンの分岐

最低1確認は必須だけど、もっといえば特にソフトフォーク実施直後は6確認以上待った方がいいというのが、このリスクです。

 ビットコインではソフトフォークを行う場合、95%以上のマイナーの同意が必要としています。これは、ブロックチェーンの分岐を防ぐためです。しかし、95%の同意があったとしても5%は旧バージョンのままであり、つまり20ブロックに1ブロック程度はブロックチェーンが分岐する確率があることになります。先に説明したように分岐が永続することはありませんが、運が悪ければ何ブロックかは分岐が続く可能性もあります。。

分岐してしまうと、ちょうど分岐時に送金した取引が無効とみなされる可能性があり、二重支払いのリスクなどがあります。

実際に2015年に同様にソフトフォークによりBIP66という新技術を実装した際には、6ブロック分の一時的なブロックチェーンの分岐が発生してしまいました。このときの直接の原因は「SPVマイニング」と呼ばれるマイニング方法であり、ソフトフォークによる5%の旧バージョンの存在が引き金となったかたちでした。

事件の発端は、5%いる旧マイナーがブロックを生成したところからはじまります。通常なら新マイナーからは無効と見なされて終わりなのですが、このとき「SPVマイニング」を行っていた新マイナーから、旧マイナーのブロックが有効と誤って判定されてしまい、無効なブロックの上に新バージョンのブロックを積み重ねるということが行われてしまったのです。SPVマイニングとは、ブロックの一部だけを検証して無効か有効化を判定し採掘を行う方法です(マイナーは必ずしもフルノードである必要はありません。)。SPVウォレットという言葉をご存知の方も多いと思いますが、そのSPV(簡易検証)と同じ意味です。このときの検証にBIP66が適用されてるかいないかが含まれていなかったために、新バージョンのマイナーであったにもかかわらず古いバージョンブロックが有効と判定されてしまったのです。約半分程度のマイナーがSPVマイニングを行っており、6ブロックという長い分岐となりました。

この例はソフトフォーク固有の問題ではありませんが、様々なかたちで分岐のリスクは高まることになります。

③ルール撤回によるハードフォーク

一度ソフトフォークにより導入されたルールが撤廃されることにより、強制的にハードフォークが行われてしまうリスクです。例えばSegwitのトランザクションは旧バージョンから見ると「誰にでも使える」ので、撤回されてしまえばSegwitを利用したビットコインはすべて盗まれてしまうことになります。その他特に説明はしませんが、大きな混乱となることが簡単に予想できると思います。

しかし、ルールを撤回するには一度有効化された後にマイナーが旧バージョンに再び戻って採掘を行うしかなく、現実問題として可能性はゼロではありませんがかなり低いと考えられます。万が一そのようなマイナーが現れた上にある程度のユーザーも味方した場合、Ethereum Classicのような状況になる可能性も考えられますが、The DAOの件と今回のSegwitではまるで質が違うので、低いと言えるでしょう。また、ハードフォークなので、従来のSegwit有効後のブロックチェーンが消滅するわけではありません。マイナーがただ勝手に切り替えるだけでは、人知れず新しいアルトコインを作るのと一緒で無価値なコインが新しく生まれるだけで、その他の既存ユーザーに影響はないと言えます。

ハードフォークとソフトフォーク

ハードフォークとソフトフォークを比較した際、ソフトフォークのほうが安全であるというのが一般的です。それは、ハードフォークにも上記の①②③のリスクが同じかそれ以上あるためです。ノードがアップグレードしていなくても、ソフトフォークでは重大な問題にはなりませんが、ハードフォークはウォレット利用の一般ユーザーを含めた全ノードのアップデートが必須となり様々な混乱要因となります。

もちろんソフトフォークも気軽に行えるようなものではなく、開発チームも95%の投票という非常に高い支持率を要求することで安全を確保しようとしています。

唯一ハードフォークが優れているのはコードをより柔軟にできるという点でしょう。例えば、Segwitをハードフォークにより実装するとトランザクションのサイズ自体をソフトフォーク実装よりも小さくすることも可能です。コードという点から見た時により安全にできる場合もあるかもしれません。

しばらく前にSegwitはハードフォークで実装すべきかソフトフォークで実装すべきかという議論が巻き起こったことがありましたが、結局ソフトフォークでやるべきという意見が大勢でした。安全を考えると、ソフトフォークでは実装できない、または実装にかなり無理があるという場合に限って、ハードフォークが検討されることになるのだと思います。

参考リンク

Bitcoin Core :: Segregated Witness Costs and Risks

Bitcoin Core :: Segregated Witness Upgrade Guide
 

Electrum2.7系で実装されたビットコインの「opt-in RBF」とは何か

最近はSegwitやら価格上昇やらZcashやらが話題になっているようですが、中でも最も実利用に影響が出ているのが、ビットコインネットワークの混雑が原因の必要取引手数料の上昇です。しばらく前に普通に送れた取引手数料ではなかなか承認・確認されず、数十円相当以上の手数料にするのが安全な状況のようです。

そんな手数料の話題に関連して、実際にはちょっと古めの話ですが、「opt-in RBF」について書きたいと思います。Bitcoin Coreには0.12.0(2016年2月リリース)の段階ですでにopt-in RBFが実装されているので、当時も少し話題になったことがありましたが、現実問題として他に実装するウォレットがほぼ皆無であったため、使用する人はほとんどいなかったと思います。(opt-in RBFを有効にしたトランザクションを検知する機能はほとんどのウォレットが実装済み)

10月末現在でも、実装されている主要ウォレットはGreenAddress(GreenBits等含む)と最近実装したばかりのElectrumしかありません。

opt-in RBFとは何か?

opt-in RBFはopt-in Replace-by-Feeの略です。Replace by Feeという言葉が示すように、最初に送ったトランザクションが未確認の状態の時に、手数料を引き上げることによってトランザクションを再送信して、前の古いトランザクションと置き換えることが可能となります。要するに、あるアドレスAからBにBTCを送信したとき、仮に手数料が少なすぎて全くブロックに取り込まれず未確認状態が続く場合、手数料だけを引き上げてAからBに同じものを再送信することですぐ確認してもらえるので、非常に便利な機能といえます。

RBFの前についているopt-inには選択などの意味があります。opt-in RBFを利用するときは、必ず「送信時にRBFを使用します」というマークを付けることになります。受け手は、マークを見ることで、このトランザクションは新しい別のトランザクションに置き換わるかもしれない、と判断することが可能になります。つまり、受け手としては未確認の状態のopt-in RBFマークがついたトランザクションを受け取ったとき、最低でも1確認を待たないと二重支払い的な攻撃をされる恐れがあるので注意する必要があるといえます。RBFは0確認ができなくなるからけしからん!という人はマークのついたトランザクションをすべて拒否すればいいでしょう。

このことから、実際に確認したわけではありませんが、未確認状態でも支払い完了と見なす通販などでのビットコイン決済では、opt-in RBFマークのついているトランザクションは拒否している可能性が高いと思われ、商品・サービス購入の支払いの際にはopt-in RBFは使用しないのが無難です。友人等個人相手に送信するときや、寄付を送る時などに限定して使用するのがいいでしょう。

そもそもRBFって今まで不可能だったの?

opt-in RBFという機能自体はビットコインの最初期にすでに実装されており、中本哲史が実装したものでした。しかし、初期のRBFは元のトランザクションよりも低い手数料でも置換することが可能であることなどから、ネットワーク攻撃に利用されてしまったため、長い間機能が無効にされていました。それが一部改良され今年実装されたということになります。

ただし、この「機能」はブロックに取り込まれず未確認の状態、つまりビットコインのコンセンサス外のことであり、ビットコインネットワークのプロトコルというわけではなくマイナーやノードのローカルルール的なものです。例えば、とあるマイナーが手数料が高い以外は同じ後から来たトランザクションで置換するということは今も昔も変わらずに可能ではありました。公式のBitcoin Coreを使用しているノードがほとんどだとは思いますが、Bitcoin Core以外に独自ノードを作成・運用すれば、opt-in RBFのような機能を実装したり、あるいはopt-in RBFマークが付いていようがいまいが、すべて置換可能にすること(Full RBFと呼ばれる)はいつでも可能ですし、実際にBitcoin Coreへの実装前からそのように運用されているノードもあったようです。

今年公式のBitcoin Coreで実装されたというのは、事前にマークさえ付ければ手数料を引き上げて再送信し早く取引を承認させることが、非常に高い確率で可能になったという意味があります。(以前もRBFを採用するマイナーに運良く拾われれば可能ではありましたが、多くの場合単なる二重支払いと見なされ成功確率は低いものでした。)

実際にElectrumでRBFを使用してみよう

デフォルトの設定では、ElectrumはRBFはオフの設定になっています。メニューの「ツール」→「設定」から「Enable Replace-By-Fee」にチェックを入れましょう。すると送信タブに「Replaceable」欄が表示されるので、この欄にチェックを入れるとRBFマークを付けて送信できます。

取引履歴を見ると「Replaceable」の表示がつき、なかなか確認されない場合は右クリックで「Increase Fee」を選ぶにより手数料を上げることができます。決済などでは拒否される可能性もあるので、使用場所は十分考えてください。

「良い」ハードフォークと「悪い」ハードフォーク

昨日、最近頻繁に行わているEthereumネットワークへの攻撃対策のため、イーサリアムが再びハードフォークを行ったようです。The DAOの件とは違い、理由が理由であるため今回は前回ほど大きな反対意見が出ることなく無事に実行されたと思われます。

そこで今日はハードフォークについて改めて考えてみます。

ハードフォークって何?

以前このブログでも多少書いたと思いますが、ハードフォークとは元々はソフトウェア開発関係の用語で、後方互換性・前方互換性のないアップデートのことです。ビットコインを例にすれば、ハードフォーク後の新バージョンでは、旧バージョンにより送信されたトランザクションを無効と見なし、旧バージョン側でも新バージョンにより送信されたトランザクションを無効と見なすということになります。

ここで少し混乱しやすいのが「フォーク」という言葉です。フォークには分岐するという意味があり、ブロックチェーンの分岐自体のことも「フォーク」と呼ぶことがあります。ハードフォークが行われる際には、新バージョンと旧バージョンで互換性がないので、ブロックチェーンの「フォーク」が発生することになります。(Ethereum Classicのように旧バージョンを使い続ける人がいない限り、旧バージョンは分岐せず実質的に消滅することになります。)

仮想通貨の世界では、フォークという言葉はさらに転じて、ハードフォーク(バージョンアップ)した際に発生する永続的なブロックチェーンの分岐状態のことを「ハードフォーク」と呼ぶこともあります。これに対して「ソフトフォーク」は一時的な分岐状態という意味で使われます。

過去、ビットコインにハードフォークはあったのか

ビットコインでは過去ハードフォークが行われたと言う人も行われていないと言う人もいます。

第一にハードフォークが行われたとされるのは、2010年8月に脆弱性を突いて総発行予定数を超える大量のビットコインが生み出された事件です。一時的に実質的な偽造がされてしまったいう点とロールバック的な対処が行われたという点ではビットコイン史上最大の事件といえますが、この対処はソフトフォークによりなされたので、ハードフォークであるというのは勘違いです。

第二は、2013年3月にバージョン0.8.0へのアップデート後にバグにより発生したブロックチェーンの分岐です。発生当時はハードフォークではないかと思われたようですが、その後の調査により、前のバージョンにすでに含まれていたバグであり、理論的には0.8.0へのバージョンアップがなされていなくても発生していた可能性があるという話もあるので、ハードフォークではなかったというのが一般的ではないかと思います。ただし、ハードフォークをブロックチェーンの分岐状態という意味で使うのであれば、ハードフォーク的な分岐は実際に発生していたので、ハードフォークが発生したとも言えるでしょう。

いずれにしてもビットコインでは意図してハードフォークが行われたことは過去にはないとは確実に言えるでしょう。

ハードフォークの何が悪いのか

では、しばしば悪者扱いされるハードフォークですが、何が問題とされるのでしょうか?

①ハードフォークの内容

まず問題とされるのがハードフォークで何が変わるのか、ということです。ハードフォークとは互換性のないアップデートなので、理論的に言えばどんな変更も可能となってしまいます。

例えば、ビットコインの総発行数は2100万BTCと決定されている、といろんなところに書かれていますが、ハードフォークを行えば総発行数を増やすことも減らすことも自由にできてしまいます。決められているというのは、仮に変えるようなアップデートを行っても誰も賛同しないだろうという前提のもとでしかないのです。実際にアルトコインの一つであるDogecoinなどでは、スタート時は発行枚数が有限の通貨であったのものの、その後しばらくしてハードフォークが行われ総発行数が無限に変更されたことがあります。

The DAO事件の際に実行したハードフォークではこの内容に大きな問題があると考える人が多かったためにEthereum Classicのようなフォーク版が誕生してしまったのだと思われます。一方で今回のイーサリアムのハードフォークは、セキュリティ対策という誰もが納得しやすい大義名分があるため、少なくとも前回ほどは反対意見が少ないなか実行されました。そのため、ゼロではありませんが、今回をきっかけに第二のEthereum Classicが生まれるような可能性は低いと言えるでしょう。

②ハードフォーク自体の問題

そもそもハードフォーク自体にも問題はあります。互換性が失われるので、ウェブウォレットやサーバークライアント型のウォレットの利用者を除き、その他のビットコインネットワークの参加者全てはアップデートをしないと使い物にならなくなってしまいます。全利用者にアップデート情報がいきわたるのは難しく、一時的なマイナーやノードの集中化などが発生する可能性があります。また、単純に送金トラブルが多発する可能性もあります。タイミングを見計らって単発でハードフォークを行う場合はそこまで問題とならないかもしれませんが、頻繁にハードフォークを行うと懸念が大きくなると言えるでしょう。

また、ブロックチェーンが完全分岐するというハードフォークの性質が①の内容の問題と合わさって、問題となる可能性もあります。特にビットコインやイーサリアムなどのようにコミュニティが大きい場合、Bitcoin Classicのように分裂する動きが出てきたり、Ethereum Classicのように実際に分裂してしまうこともあります。逆にコミュニティが小さい場合はそこまで問題とならず、大事件のように伝えられるビットコインやイーサリアムでのハードフォークとは対照的に、その他のアルトコインの世界ではハードフォークは日常茶飯事に行われており、むしろアップデートを頻繁に行う開発力のある通貨ということで評価されることもあります。

ビットコインにハードフォークは必要か

イーサリアムの現状を見ていたり、ビットコインコミュニティの分裂具合を見ていると、ハードフォークは(特にコミュニティがある程度大きい規模の場合)軽々しく行うものではないと思いますが、やはり自由に仕様変更できるというのは魅力的ですし、将来的には全く行わないという訳にはいかないでしょう。

今回はハードフォークについて書きましたが、ハードフォークより安全だと思われているソフトフォークの危険性についてもいずれ書いてみようと思います。

The DAOトークンからETH(ETC)への変換方法総まとめ

しばらく前のことなのでもう変換済みの方も多いかもしれませんが、DAOトークンからETC(Ethereum Classic)への変換が可能となりました。ICO後半に割高価格でDAOトークンを買った人への返金オプションも少し前に対応されたので、改めて最後にまとめておきます。

2017年はじめごろには引き出せなくなるらしいので、記念品としてとっておきたい人以外は早めに変換しておきましょう。

なお、全手順についてMyEtherWalletを使うのが楽です。普段Mistを使っている人でも、Mistのウォレット形式をそのままMyEtherWalletで読み込むことが可能です。Mistだけでやりたい人は自分で調べて実行できるレベルの人でないと恐らく難しいと思うので省略します。

①DAOトークンからETHへの変換:現在DAOトークンを持っている人

以前の記事で紹介した通りです。MyEtherWalletから「DAO払い戻し(Withdraw DAO)」タブを選択、さらに「ETHでDAOを払い出し(Withdraw DAO for ETH)」を選択すれば100DAO=1ETHで変換できます。送金手数料(スマートコントラクト実行手数料)のため、アカウントにETHを忘れずに入れておくようにしましょう。

②DAOトークンからETCへの変換:1,919,999ブロック時点でDAOトークンを持っていた人

ハードフォーク(7/20夜)の時点でDAOトークンを持っていた人のみが対象となります。同様に、MyEtherWalletから「DAO払い戻し(Withdraw DAO)」タブを選択してトークンを保有していたアカウントを読み込めば、「ETCでDAOを払い出し(Withdraw DAO for ETC)」からDAOをETCに変換できます。こちらは、払い戻し先のアドレスを指定できます。なお、試してみると分かると思いますが、ETCに変換できるように尽力してくれた善意のハッカー集団(ホワイトハット)に寄付を送ることもできます。好きなパーセントを入力してください。

①と同様に、送金手数料としてアカウント内にETC残高がある必要があります。持っていない人はShapshiftなどで少量購入しないといけないかもしれません。(MyEtherWalletにも書いてありますが、英語でメールを送っても手数料分無料配布してくれるようです。)

ETCのReplay Attackの問題は未だに根本的には対応されていないので(多くのウォレットが分けて送れるように対応されましたが)、返還後は誤ってETHとETCを同時に送信してしまわないように注意しましょう。

③extraBalanceのETH払い戻し:The DAOのICO後半に1ETH=100DAOよりも高い価格で購入した人

この人たちも払い戻しできるようになっています。購入したアカウント(DAOを購入するためにETHを送信した元アカウント)を同様にMyEtherWalletで読み込んでください。「DAO払い戻し(Withdraw DAO)」タブ内の「Withdraw extraBalance」を選択すれば実行できます。送金手数料としてETHを忘れずに入れておきましょう。

そのアカウントが払い戻しできるかどうかは以下のリンク先などから確認できるようです。MyEtherWalletの左側にも読み込み後残高が表示されます。(ExtraBalanceトークンというのが配布されているので、必要に応じて変換前に別のアカウントに移動することも可能です。)

Ethereum Account 0x5c40ef6f527f4fba68368774e6130ce6515123f2 Info

TheDAOData/CreatedTokenEventsWithNonZeroExtraBalance_v4.xlsx at master · bokkypoobah/TheDAOData · GitHub

イーサリアムのおすすめPC用ウォレット(2016年9月時点)

当ブログでは、MistやらMyEtherWalletやらイーサリアム用のウォレットについて、触れてきましたが、最近のアップデートによりMyEtherWalletはかなり進化しており、機能的にはMistと変わらないレベルになっています。

回しものではありませんが、今のイーサリアムウォレット(PC用に限る)のおすすめは公式のMist(Ethereum Wallet)ではなくずばりMyEtherWalletであると断言して簡単に説明を書いていきます。

インストール方法

前に少し触れましたが、やはりmyetherwallet.comにアクセスするのではなくソースコードをダウンロードして実行するのが良いと思います。

GitHub - kvhnuke/etherwallet at gh-pages

最近できたのか見落としていただけか分かりませんが、上のリンクから画面右部の緑ボタン「Clone or download」→「Download ZIP」を選択することにより、必要なファイルだけをまとめてダウンロードできます。(前の記事で紹介したときはChrome拡張機能版など不必要なソースコードも同時にダウンロードするものでした。)

使い方はビットコインなどに触れたことがあれば恐らく直観的に分かると思うので、申し訳ないですが省略します。

Mistとココが変わらない

必ずしもMyEtherWalletの使用をおすすめできなかったのは、単純にMistを使わなければならない場面が多く存在したのも大きい理由の一つです。現在ではそういう場面はほとんどなくなった気がします。

①日本語対応

最近のアップデートで日本語対応しました。index.htmlを開いて右上から選択できます(初期状態は「English」)。英語が苦手な人でも使えるようになりました。

②独自トークンが使える

Mistと同様にEthereum上で作成されたトークンを自由に表示・送信できるようになりました。「Send Tokens(トークン送出)」タブからアカウントを開いた後、「Custom」欄を選択しコントラクトアドレスなどを指定することで、トークンを自由に追加できます。

例えば、前はDAOやDigixなどごく一部を除いては、ICOで購入したりして入手した様々なトークンを表示するにはMistを利用しなければなりませんでしたが、現在ではMyEtherWalletで扱えます。

③スマートコントラクトを実行できる

「Deploy Contract(コントラクトをデプロイ)」タブからスマートコントラクトコードを実行(ネットワークに送信)できるようになりました。現実問題、一般ユーザーが利用することはほとんどないと思われますが、これで実質的にMistと遜色ないレベルになったと言えます。

ただし、コードを書いたりはできないので、スマートコントラクト関係をいじろうと思うと、MyEtherWalletでは微妙かもしれません。

Mistよりココが優れている

①生の秘密鍵をバックアップできる

ウォレットを作成すると、暗号化されたKeystore/JSONファイル以外にも生の秘密鍵が表示されます。普段使いは暗号化されたKeystore/JSONファイルのほうが良いでしょうが、緊急時のバックアップの際などは生の秘密鍵を紙ベースなどで保存していると何かと安心です。

秘密鍵が晒されるということである意味弱点にもなり得ますが、紛失リスクと盗難リスクを天秤にかけた場合、個人的には概して利点と言えるのではないかと思います。(ちゃんとリスクは理解して使いましょう。)

②オフライン取引ができる(コールドストレージとして利用できる)

MyEtherWalletでは「Send Offline(オフライン送出)」タブから、取引をオフライン環境下のPCで作成した後、オンライン環境のPCに移してネットワークに送信できます。通常のユーザーはほとんどこの機能を使うことはないでしょうが、うまく使えばMistより安全に使用することも可能です。

③同期を行う必要がない

ある意味ここが最大の利点です。ウェブ上から直接利用しようが、ローカルにダウンロードして利用しようが、膨大なブロックチェーンをダウンロードする必要がありません。しかし、外部サーバーなどに頼るということも意味するので、セキュリティ的には微妙かもしれません。

Mistは何がいい?

ではMistは何が良いのでしょうか?

1)公式ソフトである

最大の利点その1。開発者は名の知れた人で関わっている人数自体も多いです。MyEtherWalletはオープンソースですし、すでに公開から1年以上経っておりかなり多くの人が使っているので、実用には問題ないレベルだと思いますが、信頼性の面で大きく負けます。

2)ブロックチェーンをダウンロードする

最大の利点その2。外部に頼らず自前でブロックチェーンをダウンロードするのは、やはり安心できますしセキュリティ的に考えても良いです。ただし、利便性はもちろんセキュリティを考える上でも様々な要素がありますし、ウォレットファイルの紛失リスク、破損リスクなども考慮すると、ビットコインウォレットとしてBitcoin Coreをおすすめしないように玄人を除いてはMistもやはりあまりおすすめはできません。

3)DAppsブラウザとして

混同されて使われていますが、正確に言えば、実はMistはDApps(分散型アプリケーション)ブラウザのことであり、ウォレット自体はEthereum Walletという名称です。(Ethereum Walletという名称が一般的すぎて固有名詞とわかりづらいので、ここでは分かりやすくするため逆に混同して使っています。)

MistのGithubのダウンロードページを見てもEthereum WalletとMistで分かれてると思います。現時点では残念ながらまともに使えるDAppsは皆無ですし、MistにもEthereum Walletが内蔵されているので、どっちをダウンロードしても対して変わらないのですが、将来的にDAppsがリリースされるようになったら単なるウォレット用途ではなくDAppsブラウザとしてMistを使う場面も来るかもしれません。

まとめ

MyEtherWalletで作成できるKeystore/JSON形式のウォレットは公式ウォレットMist(Ethereum Wallet)にも対応しており簡単にインポート可能で、MyEtherWalletで作成したアカウントでトークンやらを受け取ってもなんとかなります。もしかしたら、Mistを使用しなければならない場面がくるかもしれませんが、迷った時はとりあえずはMyEtherWalletを試してみてはいかがでしょうか。

最近よくある仮想通貨の投資話からICOについて改めて考えてみる

なかなか個別の案件を見る時間がなく全然追いついていないのですが、最近もICOを行うプロジェクトが次々と出てきており各所で話題にもなっているようです。もしアドバイスを求められたら、この手のスタートアップは、仮想通貨業界に限らずほぼ確実に将来潰れてごく一部しか生き残らないので、とりあえず失敗して10年後には無くなっている、とでも言えば大体当たると思います。

しかし、こんなICOでもまだましだと思うことがあります。それは、最近身近なところでもしばしば耳にする仮想通貨の投資話です。仮想通貨に関する話題が一般にも広まってきたのは喜ばしいことかもしれませんが、その裏で詐欺も広まるということは好ましいことではありません。実際のところ詐欺の証拠を掴むのはとても難しく、詐欺かどうかはわからないのですが、一般的なICOのスキームと比較すると非常にお粗末なものなのです。そのため、身近な投資話に惑わされそうな人の説得や、勧誘をしてくる不届きもの相手には詐欺と言って一蹴するのではなく、単純に失敗する可能性が高いと説得する方が相手の心には響くかもしれません。

そもそもICOとは何か

Initial Coin Offeringの略で株式の世界のIPO(新規公開、Initial Public Offering)に対応するものです。ICOではそのコイン、仮想通貨の開発者が新しく発行したコインを売りに出すことで、プロジェクトの資金調達を行うことになります。

IPOになぞらえられていることからコインがプロジェクトの株式に例えらえることもよくありますが、プロジェクトによっては、送金手数料としてしか利用できなかったり、何らかの投票が可能で議決権を持っていたりいなかったり、あるいは持っているだけで配当のようなものがあったりなかったり、性質は様々で株式と必ずしも一致するものではありません。

利用者としては、むしろクラウドファンディング的なものをイメージしたほうが良い場合が多いと思われます。

そもそもProof of Workでコンピュータによる採掘・発行が可能な仮想通貨以外は、すべてIPO的な形態を経て利用者に仮想通貨を配布しなければなりません。逆にICOを行わない仮想通貨というのは、Proof of Workしかないと言えるでしょう。(Proof of Workであっても事前採掘を行いICOによりユーザーにコインが配布されることもあります。)

一般的なICOの特徴・傾向

ICOにおいて重要視されるのは、①公平性②透明性の2点です。②の透明性は正直微妙なものもかなり多いのですが、特に公平性というのは仮想通貨の世界でかなり重要だと考えられています。

例えば、当時機能だけを見ればMastercoin(Omni)のクローンでしかなかったCounterpartyは公平・透明なICOとしてProof of Burnにより配布を行ってアピールし、すぐにMastercoinを追い抜きました。Proof of Work型のMoneroも公平なスタートをアピールして、クローン元そのものであったBytecoinを追い抜きました。

(もっともこれらはその後の開発状況が優れていたのも大きな成功要因だと思われます。)

スタートが不公平であったと言われるDashやNxtは失敗とは言えないものの、常に不公平という批判にさらされ続けています。

中には公平性や透明性の観点から、事前採掘されているコインはすべて詐欺、ICOを行うコイン(≠Proof of work)はすべて詐欺、とまで言う人もいます。

 お粗末な仮想通貨の投資話の例

しかし、上記の(海外の仮想通貨コミュニティを見れば)常識的なことを全く知らないとしか思えないさらに残念な投資話も最近は横行しています。

また、ブロックチェーンの利点をほとんど無視している話も多くあります。ICOは個人で世界中どこにいても少額から参加できるというのが良い点であり、これらの特徴を無視するからには相応の理由をきちんと説明してほしいものです。

地域限定販売

よく見かけるのが日本だけ先行販売という手法です。もし、地域通貨としてのプロジェクトならばアリだとは思いますが、そうでなければ意味がよくわかりません。世界規模で成長をしていきたいのなら公平性という点で大きな弱点を抱えることになるでしょう。

世界中どこからでも一瞬で送金できるというブロックチェーンの利点を無視しており、馬鹿にしてるとしか思えません。

宣伝場所が限定的

この手のお粗末な投資話はセミナーが一般的であり大抵bitcointalkなどの主要コミュニティでは宣伝されていません。一部でこっそりとICOを行うやり方は忍者ローンチ(ninja launch)と呼ばれ公平性を損なうため嫌われる手法の一つです。

ごく一部の人の間だけで流通させたい特殊なコインならいいのですが、世界展開したいなら大きな弱点です。

購入金額に最低金額が設定されている

ブロックチェーンの利点は世界中のどこからであっても1円でも低手数料で送金できるということにあります。それに対応するかたちで一般的なICOでも最低金額は設定されていないのが普通です。数百円とかならまだしも最低○万円などというのは論外です。

必ず値上がりすると宣伝されている

この世に永続的に必ず値上がりする仕組みというものは残念ながら存在しません。もしポンジスキーム(自転車操業)のように必ず儲かる仕組みが入っているなら、そのあとに必ず破綻する仕組みが含まれているということを示しており、逆に危険であると自ら宣伝しているようなものです。

ビットコインも必ず値上がりすると宣伝されることがよくありますが、実際はそうではないのでそうやって勧誘するのは正直どうかと思います。また、気持ちはわからなくもないですが、最近はまじめにやってそうなところでも運営側・開発側でコインの売買を煽るようなコインもしばしば見られ、外から見てる側からすると印象が悪くなるだけでは?と思ってしまいます。

一番恐ろしいのは「普通の」ICO

明らかに詐欺っぽいプロジェクトや失敗しそうなプロジェクトはまだ良いのですが、最もひっかかりやすいのが「普通の」ICOです。過去の一見真面目なプロジェクトもICOだけやってほとんど消息不明であったり、1年2年と経っていまだにスタートしてない、トークンを受け取れないというものも数多くあります。

詐欺だろうがそうでなかろうがICOの非常に大きいリスクはトークン配布が実際行われるのかわからない、あるいは配布が行われた時点の価格が全く不明という点です。ハイリターンかもしれないがハイリスクのICOに参加するか、あるいは公開後にいつでも売買可能な取引所でトレードするか、ちゃんとリスクを認識して投資するようにしましょう。

Segwitの次の可能性(シュノア署名・MAST)

最新バージョンのBitcoin Coreに組み込まれ、次バージョンには有効化かと思われるSegwitですが、トランザクション展性やスケーラビリティ問題への対策だけではなく、新技術の実装が容易になるという大きなメリットもあると言われています。

これは、分離された署名の格納領域であるwitnessの中にスクリプトのバージョンを記述する欄が導入されるためです。

そもそもビットコインはトランザクション内に記述されたスクリプトを元に動作しており、そのスクリプトによって通常の送金取引だけでなく、様々な処理を実行することができます。ビットコインのスクリプトは、イーサリアムのようにチューリング完全ではないので、できることには限りがありますが、例えば、OP_CHECKLOCKTIMEVERIFYという処理を使えば、一定期間使用できない凍結されたBTCを送ることもできます。また、OP_RETURNという処理を使えばその時点でスクリプトを停止して後ろに任意のデータを挿入することができるので、その任意のデータを元にCounterpartyやFactomなどをはじめとして数多くのビットコイン上のプラットフォームが構築されています。

これまでスクリプトや署名に関する仕様を変更するのはかなり困難でハードフォークが必要となる場合も多いと考えられていましたが、Segwitにより導入されるwitnessにより今まで困難だった仕様変更が容易になると言われているのです。

Schnorr signature(シュノア署名)

中でもSegwitにより期待されているのがSchnorr署名という新しい署名方式の導入です。

ビットコインにおいて署名というのは根幹的な役割を果たしており、BTCの所有権を証明するために利用されています。署名はプライベートキー(秘密鍵)を利用することにより取引データから作成され、取引データから作成された署名は公開鍵(アドレスの元)により正しいものであると誰でも確認できます。正しい署名と一緒に「AからBに1BTC送る」というトランザクションをネットワークに送信すれば、Aの秘密鍵の所有者が送金処理を実行したとAの秘密鍵を知ることなく誰でも確認できることになります。

一般的に署名の方式には様々なものがあり、ビットコインではECDSAという方法が利用されています。このECDSAに変わる署名方式として提案されているのがSchnorr署名という方式です。

Schnorr署名は数ある署名方式の中でも最もコンパクトな署名であり、署名検証のスピードもECDSAより速いと言われています。

Schnorr署名は、複数の署名を一つに統合できるのが大きな特徴です。多くの場合、ビットコインのトランザクションは複数の「入力(input)」から成り立っています。Blockchain.infoなどのブロックエクスプローラーを見れば分かると思いますが、複数のアドレスから同時に送信する場合もそうですし、一つのアドレスから送信する場合もしばしば入力が複数になることがあります。

(ここらへんはUTXOという基礎知識があれば理解できると思います。)

このような場合、一つ一つの入力それぞれについて、署名を同時に添付する必要があります。そのため、署名の分だけサイズが大きくなってしまうのです。サイズが大きくなるということは、取引手数料が高くなるということを意味します。Schnorr署名では、これらの署名を一つに統合することができます。多くの署名が一つに統合されるので、サイズ的に非常にコンパクトになるのです。

Schnorr署名は通常の送金だけではなく、特にマルチシグネチャでの送金に大きな利点があります。マルチシグネチャアドレスでは複数人の署名を必要としますが、Schnorr署名を利用すれば一つの署名の統合できるので、大きくサイズ削減を行うことができます。

署名のサイズが小さくなればトランザクション全体のサイズも小さくなり、スケーラビリティ問題に対する大きな対策になるというわけです。

Schnorr署名はサイズをコンパクトにするという目的が大きいですが、セキュリティ面から考えた新しい署名方式の導入も一部では推されています。

しばしばビットコインは量子コンピュータが実用化されたら崩壊する(例えば公開鍵から秘密鍵を算出できるようになる)と言われることがありますが、これも新しい署名方式の導入により防げると考えられます。Lamport署名という署名方式は量子コンピュータに対して耐性があると言われており、特に有効だと考えられています。ただし実際には、Lamport署名自体に欠点が多く存在し、現段階でのビットコインへの実装はあまり現実的ではありませんが、従来のECDSA自体にセキュリティ上の懸念があっても、今までより簡単に署名方式を変更できるようになったのは大きいと言えるでしょう。

MAST(Merkelized Abstract Syntax Trees、マークル化抽象構文木)

もう一つスケーラビリティ問題への対策になると考えられているのが、MAST(マークル化抽象構文木)という技術です。

現在のビットコインのスクリプトは、scriptPubKeyと呼ばれる欄に送信者が直接記述する方式となっています。しかし、現在のスクリプトシステムにはある程度サイズ制限があることや、スクリプトの内容がすべて全世界に公開されてしまうというデメリットも存在します。

MASTではビットコインのスクリプトの条件処理の部分ごとに分割し、それぞれをマークル木(各データをツリー構造にハッシュ化して短くまとめたもの)として統合しようとするものです。

これによりサイズ削減できるだけではなく、ツリーの一部の枝部分のみを実行して、残りの実行しない部分はハッシュ化されており第三者から見えないという意味でプライバシー保護にもなります。例えば、Aさんが通常の送金処理の他に「もし一年間使用しなければ、BさんにBTCの使用権を引き渡す」というスクリプトを添付して送信したとします。このとき、後半のスクリプトはハッシュ化されており、第三者には一切見ることができません。

条件処理を使うような複雑なスクリプトはあまり使用されていないのが現状ですが、今後広く使用されるようになればメリットの大きい技術だと考えられます。(プライバシーの観点から使用可能性が増えるとも考えられます。)

このMASTもSegwitにより導入されるwitnessを利用することで今までより容易に導入することができます。

参考リンク

Bitcoin Core :: Segregated witness: the next steps