見出し画像

スマートコントラクトによるエスクロー決済 〜OpeaSeaを例に〜

こんにちはCryptoGamesのヤマピー( @yamapyblack )です。先日、社内勉強会で発表した内容を共有します。

テーマはスマートコントラクトによるエスクロー決済です。

エスクロー決済はOpeaSeaや、身近にはメルカリなどで行われている決済方法です。初めて聞いた方もいると思うので、後できちんと解説します。

スマートコントラクトでこんなこともできるのか、ということを知ってもらえれば幸いです。

エスクロー決済とは何か

まず、NFTではなく、現実世界でのモノの取引を考えます。

画像1

Bobさんが持っているアートをAliceさんが1000万円で買うとしましょう。

ここで必ず発生する問題があります。どっちが先に送るの?問題です。

1000万円持ち逃げされると困りますね。逆に、アートを送ったのにお金が振り込まれないのも困ります。

そこで、仲介業者を入れるのが一般的です。

画像2

この、仲介業者を入れて決済する方法をエスクロー決済と言います。

メルカリはこのパターンですね。その他、不動産の取引などでもエスクロー決済が一般的です。

仲介業者って信用できるの?

ここで次なる問題が発生します。仲介業者って信用できるの?という問題です。

仲介業者に1000万円持ち逃げされたらたまんないですからね。

仲介業者が信用できることがエスクロー決済の前提となります。

ではここで、OpenSeaの場合を見てみましょう。ここからは現実のアートではなく、NFTの取引を考えます。

画像3

30ETHでNFTアートを購入するとしましょう。ここで先程と同様、OpenSeaって信用できるの?という問題が発生します。

うーん、、、どうでしょうかね笑。OpenSeaってどこかのベンチャー企業だと思うんですが、本当に大丈夫なんですかね?NFTは高額のものもありますから。

実際はOpenSeaが信用できるか?より、コントラクトが信用できるか?が重要

実は、OpenSeaの場合は、会社が仲介しているというより、スマートコントラクトが仲介しています。

画像4

OpenSeaでNFTを購入する際、コントラクトに向けてトランザクションを投げています。

コントラクトはこちらです。ソースコードは公開されています。https://etherscan.io/address/0x7be8076f4ea4a4ad08075c2508e481d6c946d12b#code

このコントラクトがちゃんと書かれていることが重要です。

コントラクトは改ざんされないのですが、もしも脆弱性があったらアウトです。だからコントラクトの監査が必要だったりするんですね。

あれ、NFT発送してたっけ?

もう一度先程の図を見てください。

画像5

注目して頂きたいのは、②の発送手続きです。

OpenSeaでNFTを買った場合、持ち主がNFTの発送する必要ってありましたっけ?

結論から言うと、発送する必要はないですね。ここはメルカリとの大きな違いです。

どういう仕組みかと言うと、コントラクトが勝手にBobのNFTをAliceに届けています

画像6

これをするには、事前にapproveという処理が必要です。長くなるので今回は割愛します。

NFTの発送はコントラクトによって行われる、というのがポイントです。

エラー起きたらどうなるの?

以下の例を考えてみましょう。BobがNFTを持っていない場合です。

画像7

①のトランザクションがpendingの時に、BobがNFTをサブ垢に送りました。この場合、BobはNFTを持っていないので、エラーになります。

エラーになった場合、支払った30ETHはどうなるのでしょうか?

結論から言うと、これは大丈夫です。ロールバックされ、何も支払っていない状態に戻ります。

①〜③はワントランザクションで行われるため、エラーが起きると①の前の状態に戻ります。

このようにスマートコントラクトによって、安全なエスクロー決済を実現することができました。

まとめ

・スマートコントラクトでエスクロー決済が実現可能
・OpenSeaが信用できるか?より、コントラクトが信用できるか?が重要
・発送手続きが不要
・エラーが起きたらロールバックされる

スマートコントラクトでこんなことができるんだ!ということを多少なりとも実感して頂けたでしょうか?

CryptoGames社内では、こんな感じで知識をシェアする勉強会を実施しています。

現在、CryptoGamesではエンジニアを絶賛募集中です。

あなたもNFT業界で一緒に働いてみませんか?😎


いいなと思ったら応援しよう!

yamapy
サ、サポートありがとうございます😭