マルチシグを調べてみた

in #japanese7 years ago

こんばんは。daokasweepです。

今日はNEMの機能の一つ、マルチシグについて学んでいきたいと思います。

マルチシグとは

NEMでは通常のアカウントとは別に、マルチシグのアカウントを作ることができます。

通常のアカウントとの違い、複数人の署名がないと自由に送金することができません。

マルチシグのアカウントを作る際に、署名できる人を複数人指定し、そのうち何人の署名が必要かを決めます。

例えば、2/3とした場合は、指定した3人のうち2人の署名がないと送金することができないとなります。

マルチシグの活用法

マルチシグの活用例としては、エスクローが引き合いに出されることが多いです。

エスクローは買い手・売り手の間に信頼できる第三者を置いて、安全性を確保する取引方法です。

なぜエクスローが必要なのか

例えば、ネットオークションを想像してみてください。

通常、買い手が先にお金を支払ってから、売り手が商品を送るのが一般的ですが、

この売り手が悪意を持っていた場合、商品を送らずお金だけを持ち逃げする可能性があります。

買い手としては、先に商品が届いてからお金を渡したい所ですが、同様に売り手側としては先に商品を渡すと、買い手がちゃんとお金を払わず商品を持ち逃げするリスクを抱えてしまいます。

そこで、買い手と売り手の間に信頼できる第三者を置いて、スムーズな取引ができるようにしたのがエクスローとなります。

従来からの不動産売買、WebサービスとしてはAirbnb、Uber、メルカリが代表的な例です。

従来のエクスロー取引

escrow_1.png

メルカリを初めとした従来型のエスクローは以下の流れで取引が行われます。

  1. Aさん(購入者)がCさん(仲介者)に代金を支払う
  2. CさんはAさんからの入金を確認したら、Bさん(販売者)に商品の発送を依頼する
  3. BさんはAさんに商品を発送する
  4. Aさんは商品が問題なく届いたのを確認したら、Cさんにその旨を報告する
  5. CさんはAさんから無事商品が届いた報告を受け、Bさんに代金を支払う

従来型のエクスローの問題点

従来型のエクスローでは以下の問題点を抱えています。

  • 間に仲介者が入ることで、取引コストが高くなってしまう
  • 仲介者から販売者にお金が渡るのに時間がかかってしまう

間に仲介者が入ることによって、取引の安全性が確保される反面、取引にかかる時間やコストが増えてしまうのがデメリットとなっています。

マルチシグを活用したエスクロー

escrow_2.png

エスクローにマルチシグを活用した場合、以下の様な流れになります。

  1. Aさん、Bさん、Cさんを署名人に指定し、そのうちの2人の署名が必要なマルチシグアドレスを作成する
  2. Aさんがマルチシグアドレスに商品代金を送金する
  3. Bさんはマルチシグアドレスに代金を送金されたのを確認したら、Aさんに商品を発送する
  4. Bさんはマルチシグアドレスに自分のアドレスに送金するリクエストを作成し、そのリクエストに署名する
  5. AさんはBさんから無事商品が届いたことを確認したら、3.の送金リクエストに自分の署名を追加する
  6. AさんとBさんの署名が付与されたため、自動的にマルチシグアドレスからBさんの商品代金が送金される

マルチシグを活用するメリット

エスクローにマルチシグを活用した場合、以下のメリットがあります。

  • 特に何の問題もない取引だった場合、仲介者は何もする必要がないため、取引コストを軽減することができる
  • マルチシグアドレスに必要な署名数が集まれば自動的に送金されるため、Bさんに代金が振り込まれるまでの期間が短く済む
  • 万一、仲介者に悪意をもってマルチシグアドレスから代金を引き出そうとしても、自分だけの署名では引き出す事ができないため仲介者の悪意からも保全される

仲介者必要な例

マルチシグを利用したエスクローの場合、特に何の問題もなければ仲介者は何もする必要はないのですが、以下の様なトラブルがあった場合は、仲介者が必要となります

販売者が商品を送らなかった場合

escrow_3.png

Aさんがマルチシグアドレスに代金を送ったにも関わらず、Bさんが商品を送らなかった場合、以下の様な流れになります。

  1. Aさんはマルチシグアドレスに商品代金を送金する
  2. Bさんはマルチシグアドレスに代金が送金されているのを知っているのにも関わらず、いつまで経ってもAさんに商品を送らない
  3. Aさんは仲介者であるCさんに商品が届かない旨を申し立てを行いつつ、マルチシグアドレスから自分のアドレスに代金を送り返すリクエストを作成し、署名する。
  4. Cさんは、事実関係の確認を行い、Aさんの申し立てを認定したら、Aさんが作成した返金リクエストに署名する
  5. AさんとCさんの署名が付与されたため、マルチシグアドレスアドレスからAさんに代金が送り返される

購入者が代金支払いのリクエストに署名しなかった場合

escrow_4.png

Bさんが何の瑕疵もなくきちんと商品を送ったのにも関わらず、Aさんが支払いの署名を拒否した場合は、以下のような流れになります。(①〜③は正常時と同じため省略)

4 Aさんは商品を受け取ったにも関わらず、支払いリクエストの署名を拒否する

BさんはCさんに支払いリクエストに署名するように申し立てを行う

5 CさんはBさんの申し立てを確認し、認定したらBさんが作成した支払いリクエストに署名を行う

6 BさんとCさんの署名が付与されたため、マルチシグアドレスからBさんに代金が支払われる

いずれのケースの場合も、トラブルが発生してもマルチシグアドレスによって、Cさんの仲介が入るまでお金が保全されています。

まとめ

エスクローを例に、マルチシグの活用を見てきましたが、このようにマルチシグを活用することによって、なんのトラブルもなければ購入者も販売者も仲介者を意識しなくても、安全性の高いスムーズな取引を行う事ができます。

またエスクローを行う事業者も正常時の取引は自動的に処理され、なんらかのトラブルがあった場合の仲裁のみを行えばよいので、比較的低コストでエスクローのプラットフォームを建てることができます。

NEMではこのようなマルチシグをつかったエスクローの仕組みをnanoWalletやNIS APIを利用して実現することができます。

次回は実際にnanoWalletを利用したマルチシグのデモをしてみようと思います。