見出し画像

【保存版】徹底解説!ImmutableX上のNFTをETHチェーンに持って行く方法

こんにちは、CryptoGamesの高橋です。

クリスペをやっている会社です。

また、最近、ImmutαbleXでのコレクティブNFTを発表したCryptoMaidsチームのアンバサダーに就任しました。

本日はImmutαbleXでのあれやこれやをかなり網羅的に説明していきたいと思います。

では、早速見ていきましょう。

1 サンプルマーケットプレイスを立ち上げる

まずは、公式が公開しているサンプルのマーケットプレイスを立ち上げてみましょう。

これを実際に触りながらやると理解が深まると思います。

1ー1 git cloneを行う

こちらのプロジェクトを落としてきましょう。

もし「git cloneって何?」という場合は、下の記事の第2章の2で解説しておりますので、ご参考までに。

こんな感じで落としてきました。

スクリーンショット 2022-02-05 6.50.22

1ー2 「.env」ファイルを作成する

「.env.example」から「.env」ファイルを作りましょう。

コピーしてファイル名を変えるだけです。

スクリーンショット 2022-02-05 6.54.53

中身は特に変えていません。

1ー3 依存関係のインストール

できたディレクトリに行き、依存関係をインストールしましょう。

yarn installがうまくいかなかったので、npm installをしています。)

cd imx-reactjs-integration-example 
npm install

下のようになれば成功です。

スクリーンショット 2022-02-05 6.59.39

1ー4 ローカルで立ち上げる

次のコマンドを実行してみてください。

npx yarn start

しばらくすると、「localhost:3000」でこのように立ち上がると思います。

スクリーンショット 2022-02-05 7.06.09

これで立ち上げ成功です。

2 ウォレットの接続を行う

2ー1 ウォレットにRopstenのETHを入れる

まずは、ウォレットにテスト用のRopsetnのETHを入れましょう。

スクリーンショット 2022-02-05 7.15.43

このように、ウォレットアドレスを入れて「Send me test Ether」を選択するとテスト用のETH(Ropsten)が受け取れます。

2ー2 ウォレット接続する

「Setup」を選択すると、ポップアップが立ち上がります。

進んでいきましょう。

スクリーンショット 2022-02-05 7.18.41

下のように初回の接続時には、ImmutableX Keyの設定が必要です。

スクリーンショット 2022-02-05 7.19.03

内容に同意ができたら、チェックをつけて先に進んでみましょう。

スクリーンショット 2022-02-05 7.19.16

最後まで行くと、このように接続が完了しました。

しかし、実はこのウォレット、Ropstenが0.5ETH入っています。

でも表示は0となっています。ここは後で触れていきます。

2ー3 ウォレット接続をコードで確認する

ではウォレット接続時のコードを見てみましょう。

「App.tsx」を見てみると、、なんと接続自体は1行だけでした。

スクリーンショット 2022-02-05 7.28.50

ちなみに、その下の2行のコードは接続時に取得した

① ウォレットアドレス
② バランス(残高)

を格納している処理です。

なお、ImmutableXの処理を行う際には、下のように

スクリーンショット 2022-02-05 7.29.12

① Link
② ImmutableXClient

の2つが非常に大事です。

今回はこのうち、「Link」を使っていました。

3 ETHの預け入れ(Deposit)を行う

3ー1 ETHの残高が異なる?

下のように、私の場合、テスト用のウォレットに0.5ETHあるにもかかわらず、表示は0になっています。

スクリーンショット 2022-02-05 7.38.58

これは、ImmutableXへ預けている(deposit)ETHが0であることを示しています。

3ー2 Depositを行う

では、Depositを行っていきましょう。

「Deposit and withdrawal」に行き、預けたいETHを入力してから「Deposit ETH」を選択します。

スクリーンショット 2022-02-05 7.39.28

ちなみに、進んでいくと、このようにガス代がかかることがわかります。

スクリーンショット 2022-02-05 7.39.43

今回はテスト用のETHなので、実際のお金は痛みませんが、どのタイミングでガス代が発生するかということは抑えておくのが良いと思います。

このように、Withdraw時にガス代が発生します。

スクリーンショット 2022-02-05 7.52.40

少し時間をおいて更新すると、上のようにETHが入ったことがわかります。

3ー3  depositをコードで確認する

では、コードを見てみましょう。

「Bridging.tsx」を見ると下のようになります。

スクリーンショット 2022-02-05 7.56.38

link.deposit()に、次の2つを渡しているだけでした。

①type (何をdepositするか ここではETH)
②amount(いくらdepositするか)

とてもシンプルですね。

4 マーケットプレイスを表示しよう

ETHをdepositしたので、何か買いたいです。

「Marketplace」の構成を見てみましょう。

4ー1 マーケットプレイスの構成

文字がたくさんでわかりにくいですが、実態はあまり難しくないと思います。

スクリーンショット 2022-02-05 8.11.17

ざっくりと、次のような構成になっています。

{order_id:5574, 注文ID:5574の詳細 },
{order_id:5349, 注文ID:5349の詳細 },
{order_id:4888, 注文ID:4888の詳細 },

そして、最初の注文ID:5574の価格は、なんと1,555ETH(笑)

買わせる気がないですねw

ちなみに、weiとETHの変換は、このサイトが便利です。

こんな感じで変換することができます。

スクリーンショット 2022-02-05 8.23.42

4ー2 マーケットプレイスをコードで確認する

「Mαrketplace.tsx」を見てみると、下のように「client.getOrders()」で注文情報を取ってきているようです。

スクリーンショット 2022-02-05 8.49.19

そして、「client」の元は「ImmutableXClient」です。こちらも非常に大切なツールです。

そして、userの部分に注目してください。

こちらは「0xc120a52ad90bb926bafcdfc9161740dcf4a2cea1」のユーザーの注文(販売)情報を取ってきていたようです。

4−3 マーケットプレイスを自分のウォレット情報に変更しよう

もし、ご自身でImmutableXのNFTを作成していないようでしたら、ぜひこちら、ご確認ください。

また、私のこちらのテストウォレットを試しに使ってみても大丈夫です。

0x961aEa560D4C38B08D9300D8219062Fe853c8315

こんな感じで変更してみましょう。

スクリーンショット 2022-02-05 9.01.06

マーケットプレイスを見てみると、変わったはずなんですが、、いまいちよくわからないですね。

スクリーンショット 2022-02-05 9.03.19

次の章で細かく見てみましょう。

4ー4 ImmutαbleXのマーケットプレイスで販売状態にする

では、ImmutαbleXのテストのマーケットプレイスに行き、NFTを販売状態にしてみましょう。

(↑自分の在庫状況が表示されるため、ImmutableXでNFTを作っていない場合は表示されないと思います。)

スクリーンショット 2022-02-05 9.05.59

こちらを販売状態にしてみましょう。

このNFTを選択してみます。

「List for sale」を選択します。

また、このトークンアドレストークンIDは後ほど参照していきます。

トークンアドレス:0x864c6f6c32d2584e717c91d510f193e6ce4d3f76
トークンID:8

スクリーンショット 2022-02-05 9.12.45

下のように0.02ETHで販売状態にしました。

スクリーンショット 2022-02-05 9.14.24

下のように、0.02 ETHで販売状態になりました!

スクリーンショット 2022-02-05 9.20.15

さて、これがローカルで表示されているかを確認してみましょう。

4ー5 マーケットプレイスで確認する

さて、ではマーケットプレイスを見てみると。。

下のようにorder_id:21310として、先ほど販売状態にしたNFTがマーケットに並んでいることがわかります。

スクリーンショット 2022-02-05 9.24.02

4ー6 assetbookとorderbook

上を実現しているのが、このassetbookorderbookです。

ざっくりとですが、次のようになります。

assetbook:アセット情報を共有する
orderbook:注文情報を共有する

スクリーンショット 2022-02-05 9.30.11

今回やったことは

① ImmutableXのマーケットプレイスで販売したものを
② 別のマーケットプレイスで見ることができ
③ 購入することができる(これは後ほど)

であり、冷静に考えると、結構すごい仕組みではと思います。

これはアセットや注文の情報を共有することで可能になっています。

5 NFTを購入してみよう

5−1 購入の流れ

では、4ー4で販売状態にしたNFTを購入してみましょう。

order_idを入れて、Buyを押すと、ポップアップが出てきます。

スクリーンショット 2022-02-05 10.21.23

最後まで行くと購入が完了します。

そして「Inventory」で自分の所有しているアセットを見てみると、下のように購入できていることがわかります。

スクリーンショット 2022-02-05 10.21.59

5ー2 他のマーケットプレイスへの反映

他のマーケットプレイスである、ImmutableXのマーケットプレイスを見てみましょう。

スクリーンショット 2022-02-05 10.28.25

「assetbook」「orderbook」の機能により、このように他のマーケットプレイスにも反映が行われることが確認できました

5ー3 購入をコードで確認しよう

「Marketplace.tsx」を見ると下のようになっていることがわかります。

スクリーンショット 2022-02-05 10.32.05

「link.buy」とするだけで、購入のポップアップが立ち上がるようになります。

6 ImmutableXのNFTをメインチェーンに持って行く

6ー1 概要

ImmutαbleXのNFTをメインチェーンに持って行く際には大きく2つのプロセスを経ることになります。

① prepare withdrawal(準備)
② complete withdrawal(実施)

まずは①のprepare withdrawalを行い、withdrawable state(引き出し可能な状態)にします。

6ー2 prepare withdrawal(準備)

では、実際にやってみましょう。

下のように、トークンIDトークンアドレスを入れることでポップアップが立ち上がります。

そのまま進めていくとprepare withdrawalが完了します。

スクリーンショット 2022-02-05 10.37.31

しばらくすると、下のように「Withdrawals being prepared」となり、引き出しの準備を行っている状態になります。

まだこの状態では引き出しはできません

スクリーンショット 2022-02-05 10.42.07

6ー3 prepare withdrawalをコードで見てみよう

下のように、「Bridging.tsx」を見ると、「link.prepareWithdrawal」で実装していることがわかります。

スクリーンショット 2022-02-05 10.53.09

6ー4 引き出し可能状態の確認

6ー2によって「Withdrawals being prepared」という状態になりましたが、まだ準備中なので、すぐに引き出しができません。

しばらく待つと(数時間以上かかるかも)下のように「Ready for withdrawal」(引き出し準備)という状態になります。

スクリーンショット 2022-02-05 15.24.15

ポイントとしては「rollup_status」「 confirmed」になったことです。

確認が完了したようですね。これでwithdrawができます。

6ー5 withdrawal引き出しの実行

では、実際にWithdrawを行ってみましょう。

下のように「Complete NFT Withdrawal」を選択すると、ポップアップが立ち上がります。

スクリーンショット 2022-02-05 15.31.28

進んでいくと、下のように、ガス代が発生することがわかります。

ガス代が発生するタイミングは限られているので、いつ発生するのかを抑えておくのは良いと思います。

スクリーンショット 2022-02-05 15.31.40

完了したら、Etherscanを見てみます。

下のように完了したことがわかります。

スクリーンショット 2022-02-05 15.35.59

ここもポイントだと思いますが、Withdrawの際に、同時にミントも行われるというのは大事なところだと思います。

せっかくなので、ステータスがどう変わったのかも見てみましょう。

スクリーンショット 2022-02-05 15.48.18

上のように「withdrawn_to_wallet」「true」となったことで引き出しが完了したことがわかりました。

6ー6 コードで見てみよう

「Bridging.tsx」を見てみましょう。

下のように、「link.completeWithdrawal()」で実装しています。

スクリーンショット 2022-02-05 15.43.21

やはり、コードはとてもシンプルであることがわかりました。

7 NFTを販売しよう

7ー1 販売の流れ

では、次にNFTを販売状態にしましょう。

下のようにすると、やはりポップアップが立ち上がります。

最後まで進めて行くと、販売状態にすることができます。

スクリーンショット 2022-02-05 11.03.01

ImmutαbleXのマーケットプレイスに行くと、下のように販売状態になっていることがわかります。

スクリーンショット 2022-02-05 11.04.04

7ー2 販売のコードを見てみよう

「Inventory.tsx」を見てみましょう。

販売額とトークンID、トークンアドレスを渡すことで実装していますね。

スクリーンショット 2022-02-05 11.10.41

8 販売をキャンセルする

8ー1 キャンセルの流れ

次のように「Cancel」を行うことで、ポップアップが立ち上がり、進めて行くと、キャンセルを実行できます。

スクリーンショット 2022-02-05 11.16.55

下のように、ImmutableXのマーケットプレイス上でも販売状態がキャンセルされました。

スクリーンショット 2022-02-05 11.17.28

8ー2 コードでも見てみよう

「Inventory.tsx」 を見ると、下のようになります。

orderIdを渡しているだけの、とてもシンプルな作りですね。

スクリーンショット 2022-02-05 11.22.22

9 ETHをImmutableXから引き出そう

9ー1 概要

基本的には第6章のNFTの引き出しと同じ流れです。

大きく2つのプロセスを経ることになります。

① prepare withdrawal(準備)
② complete withdrawal(実施)

まずは①のprepare withdrawalを行い、withdrawable state(引き出し可能な状態)にします。

9ー2 prepare withdrawal(引き出し準備)

Prepare ETH Withdrawalを選択すると、ポップアップが立ち上がり、引き出し準備を行います。

スクリーンショット 2022-02-05 11.27.55

注意点としましては、引き出しが完了していないこの時点で、DepositされているETHは差し引かれた金額になります。

スクリーンショット 2022-02-05 11.28.47

9ー3 コードを見てみよう

「Bridging.tsx」を見ると、次のようになりました。

typeとamount(量)を入れることで実装できるのですね。

スクリーンショット 2022-02-05 11.46.48

9ー4 引き出し可能状態の確認

下のように「Ready_for_withdrawal」となっていれば、引き出しを実行できます。(この状態になるまで数時間以上かかるかもしれません。)

スクリーンショット 2022-02-05 15.52.32

具体的には「rollup_status」「confirmed」となったことで、引き出しができるようになります。

9ー5 引き出しの実行

では、下のように「Complete ETH Withdrawal」を実行してみましょう。

このようにポップアップが立ち上がります。

スクリーンショット 2022-02-05 16.00.14

ちなみに、下のようにガス代が発生します。

このように、どこでガス代が発生するのかも抑えるのが良いと思います。

スクリーンショット 2022-02-05 16.00.42

最後まで行けば、引き出し完了です。

スクリーンショット 2022-02-05 16.08.10

9ー6 コードを見てみよう

「Bridging.tsx」を見てみましょう。

このようにシンプルに実装されています。

スクリーンショット 2022-02-05 16.09.57

10 NFTの送付

10ー1 NFT送付の流れ

下のように「transfer」を選択すると、ポップアップが立ち上がります。

なおこちらはサンプルに入っていなかったので、個別で実装したものです。

スクリーンショット 2022-02-05 11.52.05

ImmutαbleXのマーケットプレイスを見てみると、送付されたことが確認できました。

スクリーンショット 2022-02-05 11.52.56

10ー2 コードを見てみよう

下のように、link.transfer()を実施することで実装ができます。

スクリーンショット 2022-02-05 11.59.35

渡す値がドキュメントと少し違いましたので、ご注意ください。

スクリーンショット 2022-02-05 12.04.56

11 NFTの一括送付

最後にNFTの一括送付についてです。

下のように一括でNFTの送付も可能です。ポイントは「confirm」は一回で大丈夫というところだと思います。

スクリーンショット 2022-02-05 16.16.11

ImmutableXのマーケットプレイスでも下のように確認ができました。

スクリーンショット 2022-02-05 16.18.07

今回は以上です。

ぜひ皆さんもやってみてください。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊