アトミックスワップとは、第三者を介さずトラストレスにコインの交換を行うことができる技術です。従来であれば、どこかの会社が運営・管理している仮想通貨の取引所や交換所で仮想通貨のやり取りを行う必要がありました。
しかし、アトミックスワップを使えばそのような取引所を介さず個人間で仮想通貨の交換を行うことが可能なのです。
そこで、当記事ではアトミックスワップのメリットと問題点、そしてその仕組みについてお伝えしていきます。
アトミックスワップとは
アトミックスワップ(Atomic swaps, Atomic cross-chain trading)とは、信頼できる第三者を必要とせずにある仮想通貨を他の仮想通貨に交換できる技術です。
例えば、アリスは持っている5BTCを100LTCに交換したいと思っています。一方、ボブは100LTCを5BTCに交換したいと思っています。このような状況のとき、アトミックスワップを使うことにより、アリスとボブは安全に互いのコインを交換することができるのです。
これによりフラットなP2Pネットワークで非中央集権性を維持しながら仮想通貨やトークンの交換ができるようになると期待されています。つまり、取引所の破綻やGOXリスクを避けることが可能になります。
実際に、ビットコイン、ライトコイン、Vertcoin、Viacoin、Decred間でのアトミックスワップは実際に行えることが確認されています。また、スマートコントラクトを使用することによりビットコインとイーサリアム間でのアトミックスワップにも成功しています。(2017年10月)
Bitcoin-Ethereum Atomic Swap Code Now Open Source | coindesk
さらに、Komodo、Blocknetなどアトミックスワップを使用するプロジェクトも進行しています。
アトミックスワップの問題点
第三者を介さずに信頼していない相手と安全にコインの取引を行えると説明したアトミックスワップですが、そこにはいくつかの解決すべき問題点・課題点があります。ここでは以下の4つの問題点をお伝えします。
- 時間がかかる
- 取引手数料がかかる
- 限られた通貨間でのみ可能
- プライバシー問題
時間がかかる
後半の「アトミックスワップの仕組み」で説明するように、アトミックスワップはオンチェーンで行われます。厳密に言うと、ペイメントチャネルを開くことと閉じることはオンチェーン処理になります。(ペイメントチャネル内ではオフチェーン処理です)
つまり、ブロックの生成時間がボトルネックとなり、アトミックスワップのトランザクションが承認されるまでに時間がかかるということです。
ビットコインの場合、ブロック生成時間は約10分間であり、トランザクションが99.9%以上承認されるまでにはその後6ブロック追加されることが必要なので、最悪の場合アトミックスワップを使った仮想通貨の交換は1時間かかってしまうことになります。
さらに、安全に取引をするためにHTLCという特殊なタイムロックを使うが、もし送金を取り消すことになった場合はタイムロックが解除されるのを待つ必要がありその時間まで送金額はロックされてしまう問題があります。
なので、オンチェーンでのアトミックスワップは小さな取引で使用するのではなく、大きな取引でのみ適していると考えられます。
取引手数料がかかる
アトミックスワップはオンチェーン処理なので当然トランザクション手数料がかかってしまいます。現状のスケーラビリティ問題を抱え込んでいるビットコインだと手数料も無視できる料金ではなくなってきています。
限られた仮想通貨間でのみ可能
現状アトミックスワップは全ての仮想通貨で行うことはできません。以下のような条件を満たしている仮想通貨同士でのみアトミックスワップは可能です。(イーサリアムはスマートコントラクトを使うことによりビットコインとのアトミックスワップを行うことができました。)
- 両コインのトランザクションスクリプトにおいて同じハッシュ関数が使われている
- トランザクションスクリプトにおいてデジタル署名が必要である
- トランザクションスクリプトにおいてCLTVとCSVのタイムロックが使える
タイムロックのCLTVやCSVについては後述します。ライトコインなどは元々ビットコインのブロックチェーンから分岐したコインであるので、このような条件を満たすことが簡単でアトミックスワップを行うことができました。つまり、現状ではビットコインのためだけの技術なのです。
個人的にアトミックスワップが普及するためにはこの問題点は必ず改善されなければならないと考えています。
なぜなら、アトミックスワップが普及すれば、当然アトミックスワップが行えることがデファクトとなり、仮想通貨の技術面に制限を加えることになってしまいます。それにより自由なテクノロジーの発展が阻まれたり、イノベーティブなテクノロジーが登場しにくくなってしまうことが考えられます。また、機能的に特徴あるコインが使いにくくなってしまいます。
また、仮想通貨内でビットコインとそこから派生したコインの経済圏とその他のコインの経済圏というように分裂してしまうことも予想できます。
実験的ではあるもののスマートコントラクトを使うことにより、イーサリアムとのアトミックスワップが成功したようにさまざまな仮想通貨間でアトミックスワップが行えるように現在も開発が進められています。
HTLC(Hashed Time Lock Contract)
ライトニングネットワークと同様、アトミックスワップにおいてHTLCはとても重要な役割を果たします。
HTLCとは、ハッシュ関数元の値の入力とタイムロックによってトランザクションアウトプットでロックすることができないことです。要するに、ある条件を満たさないと送金ができないということになります。
繰り返しになりますが、HTLCの解除には特定のハッシュ関数の入力とタイムロックの解除が必要になります。
まず、「ハッシュ関数元の値の入力」とは、ある乱数Rをハッシュ関数に入れることであるハッシュ値が得られるとき、その値Rのことを指します。つまり、Rの値を知っていればHTLCを解除することができます。
ただし、『ブロックチェーンの技術「一方向性ハッシュ関数」を理解しよう』で解説しているようにハッシュ関数は逆算不可能なので、Rからハッシュ値を得ることは簡単でも、ハッシュ値からRを得ることはできないことに注意してください。つまり、Rを知らずにそのハッシュ値だけ知っていてもHTLCは解除できないということです。
また、HTLCはタイムロックによっても解除することができます。タイムロックとはある決められた時間が経過すれば解除されるということです。
タイムロックにはCLTV(Check Lock Time Verify)とCSV(Check Sequence Verify)という2つのタイプがあります。それぞれの条件について具体例を見ていきましょう。
- CLTV:2018年1月10日14時まで、ブロック高550043まで
- CSV:2週間後まで、ブロックがあと10個追加されるまで
この例を見ても分かるように、CLTVは絶対的な条件を指定することができ、CSVは相対的な条件を指定することができます。
また、トランザクションスクリプトとライトニングネットワークの仕組みについて知っていると、以下のアトミックスワップの仕組みもスムーズに理解できるので以下の記事も併せてご覧ください。
参考:ビットコインおけるトランザクションスクリプトの仕組みとその種類
参考:ビットコインにおけるライトニングネットワークの仕組みを分かりやすく解説
アトミックスワップの仕組み
アトミックスワップを使って、アリスが持っているビットコイン(BTC)とボブが持っているライトコイン(LTC)を交換する例で考えていきましょう。
この場合の大まかな流れは以下の4つのトランザクションにより構成されています。
- ビットコインをアリス→マルチシグアドレス①に送るトランザクション
- ライトコインをボブ→マルチシグアドレス②に送るトランザクション
- ライトコインマルチシグアドレス②→アリスに送るトランザクション
- ビットコインをマルチシグアドレス①→ボブに送るトランザクション
これらのトランザクションを実行することにより、安全にアリスはライトコインを手に入れ、ボブはビットコインを手に入れることができるのです。安全に取引するために、アリスとボブを仲介しているマルチシグアドレスに特殊なタイムロックであるHTLCをかけておきます。
ここで、このマルチシグアドレスは金庫のような役割であると理解しやすいです。ある特別な鍵を持っていないとこの金庫からコインを取り出すことはできません。
1.アリス→マルチシグアドレス①:ビットコイン
まずはアリスが、アリス自身からボブへビットコインを送るトランザクションを作成します。正確には、アリスはボブに直接ビットコインを送るのではなく、上述したように特殊なマルチシグアドレスに送り、ある条件を満たすことでボブがそのマルチシグアドレス①からビットコインを受け取ることができるようになります。
このマルチシグアドレスはHTLCでロックされています。なので、このマルチシグアドレス①を解除するには以下の3つの条件のうちいずれかが必要になります。また、それぞれの条件によって送信先は異なります。
- アリスだけが持つ値Rとボブの署名(タイムロック)(ボブへ)
- アリスとボブの署名(アリスへ)
- 時間切れ(アリスへ)
この時点ではボブがHTLCを解除しようとすると、アリスが持つ値Rが必要になるのでボブの署名だけでは解除できないことが分かります。また決められた時間(例えば3日間)でトランザクションが実行されなければビットコインはアリスの元へ返金されます。
2.ボブ→マルチシグアドレス②:ライトコイン
上の手順と同様に、ボブはHTLCがかけられているマルチシグアドレス②にライトコインを送ります。このHTLCでも上記で使用したハッシュ関数と同じものを使うので、アリスが持っている値RがHTLCをアンロックする鍵となります。
- アリスだけが持つ値Rとアリスの署名(タイムロック)(アリスへ)
- アリスとボブの署名(ボブへ)
- 時間切れ(ボブへ)
そして、この段階でアリスとボブは署名に必要な互いの秘密鍵を交換します。つまり、アリスはボブの署名をできるようになり、ボブはアリスの署名をできるようになるのです。これにより、条件1−2と条件2−2でアンロックが可能になりますが、この場合は両者に元のコインが戻るだけです。
もしアリスが悪意を持ってボブに秘密鍵を渡さなかった場合、つまりボブはアリスの秘密鍵を手に入れることができず、アリスだけが両者の秘密鍵を持っている状況の場合はHTLCのタイムロック(条件2−3)によりボブにライトコインが返金されます。
逆にボブが悪意を持っていた場合もHTLCのタイムロック(条件1−3)によりアリスにビットコインが返金されます。
3.マルチシグアドレス②→アリス:ライトコイン
アリスは値Rを知っているので上記のトランザクション(条件2−1)を実行し、ボブがマルチシグアドレス②に預けたライトコインをアリス自身に送ることができます。しかし、このトランザクションはタイムロックされていることに注意してください。つまりすぐにアリスはライトコインを手に入れることはできなく、例えば5分後などに手に入れることになります。
このときアリスが使った値Rはボブに対してブロードキャストしなければなりません。なので、このトランザクションが実行された時点でボブは値Rを知ることができます。
ちなみにもしこのときアリスが値Rをブロードキャストしなかったら、タイムロックの時間差を利用して、アリスがライトコインを手に入れる前にボブはアリスの署名と自分の署名を使うことでライトコインを引き戻すことができます。(条件2−2)
4.マルチシグアドレス①→ボブ:ビットコイン
ボブは上記で得た値Rを使って、マルチシグアドレス①のHTLCを解除しビットコインを自分自身に送ることができます。(条件1−1)
以上のように暗号学的トリックを使うことで、アトミックスワップを利用したコインの交換を安全に行うことができるのです。