スマートコントラクトによるエスクロー決済 〜OpeaSeaを例に〜
こんにちはCryptoGamesのヤマピー( @yamapyblack )です。先日、社内勉強会で発表した内容を共有します。
テーマはスマートコントラクトによるエスクロー決済です。
エスクロー決済はOpeaSeaや、身近にはメルカリなどで行われている決済方法です。初めて聞いた方もいると思うので、後できちんと解説します。
スマートコントラクトでこんなこともできるのか、ということを知ってもらえれば幸いです。
エスクロー決済とは何か
まず、NFTではなく、現実世界でのモノの取引を考えます。
Bobさんが持っているアートをAliceさんが1000万円で買うとしましょう。
ここで必ず発生する問題があります。どっちが先に送るの?問題です。
1000万円持ち逃げされると困りますね。逆に、アートを送ったのにお金が振り込まれないのも困ります。
そこで、仲介業者を入れるのが一般的です。
この、仲介業者を入れて決済する方法をエスクロー決済と言います。
メルカリはこのパターンですね。その他、不動産の取引などでもエスクロー決済が一般的です。
仲介業者って信用できるの?
ここで次なる問題が発生します。仲介業者って信用できるの?という問題です。
仲介業者に1000万円持ち逃げされたらたまんないですからね。
仲介業者が信用できることがエスクロー決済の前提となります。
ではここで、OpenSeaの場合を見てみましょう。ここからは現実のアートではなく、NFTの取引を考えます。
30ETHでNFTアートを購入するとしましょう。ここで先程と同様、OpenSeaって信用できるの?という問題が発生します。
うーん、、、どうでしょうかね笑。OpenSeaってどこかのベンチャー企業だと思うんですが、本当に大丈夫なんですかね?NFTは高額のものもありますから。
実際はOpenSeaが信用できるか?より、コントラクトが信用できるか?が重要
実は、OpenSeaの場合は、会社が仲介しているというより、スマートコントラクトが仲介しています。
OpenSeaでNFTを購入する際、コントラクトに向けてトランザクションを投げています。
コントラクトはこちらです。ソースコードは公開されています。https://etherscan.io/address/0x7be8076f4ea4a4ad08075c2508e481d6c946d12b#code
このコントラクトがちゃんと書かれていることが重要です。
コントラクトは改ざんされないのですが、もしも脆弱性があったらアウトです。だからコントラクトの監査が必要だったりするんですね。
あれ、NFT発送してたっけ?
もう一度先程の図を見てください。
注目して頂きたいのは、②の発送手続きです。
OpenSeaでNFTを買った場合、持ち主がNFTの発送する必要ってありましたっけ?
結論から言うと、発送する必要はないですね。ここはメルカリとの大きな違いです。
どういう仕組みかと言うと、コントラクトが勝手にBobのNFTをAliceに届けています。
これをするには、事前にapproveという処理が必要です。長くなるので今回は割愛します。
NFTの発送はコントラクトによって行われる、というのがポイントです。
エラー起きたらどうなるの?
以下の例を考えてみましょう。BobがNFTを持っていない場合です。
①のトランザクションがpendingの時に、BobがNFTをサブ垢に送りました。この場合、BobはNFTを持っていないので、エラーになります。
エラーになった場合、支払った30ETHはどうなるのでしょうか?
結論から言うと、これは大丈夫です。ロールバックされ、何も支払っていない状態に戻ります。
①〜③はワントランザクションで行われるため、エラーが起きると①の前の状態に戻ります。
このようにスマートコントラクトによって、安全なエスクロー決済を実現することができました。
まとめ
・スマートコントラクトでエスクロー決済が実現可能
・OpenSeaが信用できるか?より、コントラクトが信用できるか?が重要
・発送手続きが不要
・エラーが起きたらロールバックされる
スマートコントラクトでこんなことができるんだ!ということを多少なりとも実感して頂けたでしょうか?
CryptoGames社内では、こんな感じで知識をシェアする勉強会を実施しています。
現在、CryptoGamesではエンジニアを絶賛募集中です。
あなたもNFT業界で一緒に働いてみませんか?😎