アプリケーション開発ポータルサイト
ServerNote.NET
Amazon.co.jpでPC関連商品タイムセール開催中!
カテゴリー【仮想通貨UbuntuDebian
Ubuntu Server 21.10でイーサリアムブロックチェーン【その8】
POSTED BY
2023-03-30

Ubuntu Server 21.10でイーサリアムブロックチェーン【その1】
Ubuntu Server 21.10でイーサリアムブロックチェーン【その2】
Ubuntu Server 21.10でイーサリアムブロックチェーン【その3】
Ubuntu Server 21.10でイーサリアムブロックチェーン【その4】
Ubuntu Server 21.10でイーサリアムブロックチェーン【その5】
Ubuntu Server 21.10でイーサリアムブロックチェーン【その6】
Ubuntu Server 21.10でイーサリアムブロックチェーン【その7】

続きです。前々回、truffle developでNFT購入トランザクション実行後TransactionRevertedWithoutReasonErrorになってしまったので、環境を変えてリトライします。

オンラインでコード開発、デプロイ、別アカウントからのコントラクト呼び出しができるRemix IDEがあるので、そちらを使い、パブリックネットワークのRinkebyで実行します。

1、接続、ワークスペース準備

https://remix.ethereum.org/

を開きます。デフォルトのワークスペースが出てるのでこれを変えてもいいんですが、とりあえずWorkspacesにある+ボタンで新規ワークスペースを作成します。

contracts, scripts, tests のなかに、デフォルトのファイルが設置されていますが、不要なので、右クリックですべて削除します。

2、ソースコードの設置と修正

contractsフォルダを右クリックして「New File」で、NFT_Test.sol を作成します。

【前々回のソースコードNFT_Test.sol】の、

import "openzeppelin-solidity/contracts/token/ERC721/ERC721.sol";
import "openzeppelin-solidity/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "openzeppelin-solidity/contracts/utils/Counters.sol";

を、

import "@openzeppelin/contracts@4.4.2/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts@4.4.2/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts@4.4.2/utils/Counters.sol";

に変更します。

3、コンパイル

SOLIDITY COMPILER タブを開いて、Compile NFT_Test.solをクリックしてコンパイルします。

コンパイルが成功すると、下のタブにCONTRACTのプルダウンリストができるので、NFT_Test(NFT_Test.sol)を選択したうえで、
その下の「ABI」や「Bytecode」ボタンで、コマンドラインコンパイラsolcが出力するようなABI JSONファイルやバイナリコードをダウンロードできます。

4、デプロイ

DEPLOY & RUN TRANSACTIONS タブを開きます。Rinkebyネットワークにデプロイしたいので、ENVIRONMENTでInjected Web3を選択します。

するとMETAMASKが反応して接続許可ダイアログが出ます。接続させたい=トランザクションの発行元アカウント=を選択して、ネットワークがRinkebyが選択されていることを確認し接続許可をします。

ここでは、デプロイは代表アカウントであるAccount 1に行わせますので、METAMASKでAccount 1を選択してDEPLOYタブのACCOUNTに反映させます。

CONTRACTプルダウンでNFT_Test - contracts/NFT_Test.sol を選択して「Deploy」します。METAMASKがガス代見積もり確認してくるので、払って良ければ承認します。

デプロイトランザクションの状況は右下タブのコンソール画面で確認できます。成功したらview on etherscanをクリックして、Etherscanで確認してみましょう。

デプロイが成功すると、Deployed Contractsにコントラクトのアドレスが表示され、関数群がリストアップされます。引数を入力して関数ボタンを押せば実行できる仕組みです。

5、別アカウントからNFTを購入=mintする

RinkebyネットワークにNFT_Testが登録されたので、別人として、METAMASKのAccount 2から購入してみましょう。

同じDEPLOY & RUN TRANSACTIONSタブで、METAMASKを開き、Account 2に切り替えます。まだ所有ETHは0.1持っているはずです。

タブのACCOUNTがAccount 2のアドレスに切り替わったことを確認して、コントラクトに送るお金=VALUEに10 Finneyを設定します。10Finneyは約0.01ETHです。

したらば、関数群の「mint」をクリックします。METAMASKが相手に送金するVALUE=0.01ETHと、ガス代見積もり確認してくるので、払って良ければ承認します。

NFT_Test.mint()が呼ばれて、0.01ETH送ってきているなら、Account 2にトークン1のNFTをくれるはずです。そのトランザクションの様子は右下タブで確認できます。

もしも0.01ETHより少ないVALUE支払いで呼んでしまうと、Error encountered during contract execution [execution reverted] などとなりトランザクションは失敗します。

無事成功すると、METAMASKはSuccessダイアログを出し、右下コンソールも緑色でSuccessがでます。成功も失敗も、トランザクション内容がview on etherscanで見れます。

6、トークン所有の確認

トークン番号1のNFTはAccount 2に渡ったはずなので、関数群のbalanceOfにAccount2のアドレスをペーストし呼んでみましょう。

uint256: 1

と表示されるはずです。また、ownerOfに1を入力して呼んでみましょう。トークン1の所有者は誰か?=Account 2のアドレスが表示されるはずです。

7、OpenSeaでのNFTコンテンツ確認

【前々回の先頭で作成したテストNFTデータ】があり、_setTokenURIで設定したトークンURIに正しくJSONが設定されていれば、OpenSeaのテストネットで確認できます。

https://testnets.opensea.io/

にアクセスして、WalletにMETAMASKを選択して、トークンを所有しているAccount 2に切り替えて、Collectedにコンテンツが表示されていれば成功です。

8、購入したNFTを返して換金する=burnする

NFT_Testには発行したトークンを半額で買い取ってNULL ADDRESSに捨てる関数burnも書いていますので、呼んでみましょう。

まず、失敗例として、METAMASKでAccount 1に切り替えて、burnに1を入れて呼んでみます。すると、当然ながら、このトークンの所有者ではないので、トランザクションは失敗してはじかれます。

では、所有者であるAccount 2に戻して、ふたたびburnに1を入れて呼んでみます。今度は成功します。Account 2のETH残高にいくらか返金されているのがMETAMASKで確認できます。

また、balanceOfにAccount 2のアドレスを貼って呼ぶと、さきほど1だったのが、0になってます。そしてownerOfに1を入れて呼ぶと、所有者がNULL ADDRESS(BURN ADDRESS)に変わっています。正常に償却されたということです。

更に、Etherscanでコントラクトのアドレスを打って情報を見ると、balance: 0.005 Etherになっているのが確認できます。0.01ETH持ってましたが、返金したため半分に減ったということです。

Etherscanではトークンの履歴も確認できるので、どこでどうなったか追うことができます。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】