
Udemyの動画再生スピード調整と一時停止の方法
座学は講師が作成した資料と公式ドキュメントの2つの方法で解説しています。
例えば
前者は、Ethereumにおける状態とは何か、トランザクションによる状態変更など、一時情報の解説が長くなるものや図解を入れた方が理解してもらえそうな箇所について、資料で解説しています。
後者は、EthereumにおけるNFTの仕様、プログラミング言語Solidityのある機能における説明、ライブラリのファンクション定義など、できるだけ正確な情報が必要な箇所については、一次情報である英語の公式ドキュメントを画面に写しながら日本語で解説しています。
このコースで案内している教材リソースは主に以下
1.各レクチャーで使うサイトやサービスなどのURL
1.各レクチャーの教材リソース
2.講師が行った結果や作成物など
1.レクチャーで使うデータ類(JSONファイル,サンプル画像など)
2.講師がテストネットにデプロイしたトランザクション
3.講師がmintしたNFTのテスト用OpenSea URL
4.本コース使用する資料
5.完成形のスマートコントラクトソースコード
1~4は各レクチャーの教材リソース、4はGitHubリポジトリ(2,3はこちらにも記載)
GitHubリポジトリは、このレクチャーの教材リソースをご確認ください
セクション目標
1.コンテンツをもつNFTがどのように構成されているのか
2.スマコン内でのNFTの作成、変更、管理の仕組み
学ぶこと
ERC-721 の目的、NFTの本質、機能概要
コンテンツを持つNFTの構造
スマートコントラクトによるState変更
ERC-721とは何か
ERC-721が何を目的に定義されているのか
EIPとERCの関係
ERC-721が定めるNFTの本質
コンテンツを持つNFTの構造
どのように実現しているのか
OpenSea上でコンテンツが表示される仕組み
データ保存に関するEthereumの課題
オンチェーン、オフチェーンとは
メタデータとコンテンツデータの配置パターン(オンチェーンNFTとオフチェーンNFT)
スマートコントラクトとは
EVMとは
World State Machineとは
アカウントとは
アカウントの種類
状態変更の仕組み
前のレクチャーの続き
ERC-721が定める機能定義と未定義機能の概要
OpenZeppelin Contracts(以降OZ)ライブラリとは
OZを使ったコントラクト機能の概要
スマートコントラクトのデプロイにおける注意事項
OZを使ったコントラクト NFTmint仕組み
このセクションのまとめ
セクション目標
MetaMaskとアカウントアドレス生成の仕組みの概要理解
MetaMaskとテスト用通貨などの環境準備の完了
EtherscanでのEOA->EOAトランザクション確認方法の習得
MetaMaskとは
アカウントアドレス生成の仕組みについての概要
そもそもなぜシークレットリカバリーフレーズを使うのか
シークレットリカバリーフレーズとBIP39の関係
シークレットリカバリーフレーズから秘密鍵、公開鍵、アカウントアドレスを生成するまでの仕組み
シークレットリカバリーフレーズから複数のアカウントアドレスを生成する仕組み
シークレットリカバリーフレーズから派生する秘密鍵、公開鍵、アドレスが簡単にすぐに生成できるということを一緒に体験します
リスクやトラブル回避のため、このコース用に専用MetaMaskをご用意ください。
Chrome拡張版MetaMaskをインストールします
ブラウザ(MetaMask)、フロントエンドアプリ、プロバイダ、スマートコントラクト、EVM、Ethereum(ブロックチェーン)という、DApp(分散アプリケーション)の構成要素に分解し、それぞれの役割をもとにブロックチェーンへの接続について解説します
MetaMaskアカウントを3つ追加作成
アカウントの切り替え方法
テストネットの表示/nonce表示とPolygon Mumbai追加
テストネットSepolia ETHとLINK取得
AlchemyサイトからSepolia ETH取得
MetaMaskを使って自分のアカウント間でテスト仮想通貨の送金確認を行います
Etherscanとは
トランザクションとは
トランザクションによるアカウント状態変更
基本的なトランザクションパターン1(EOA->EOA)
基本的なトランザクションパターン2(EOA->スマートコントラクト)
パターン1、2で各トランザクションで発生するガス代を軽く解説しています
実際にEtherscanでトランザクション(EOA->EOA)を確認します
目標は3つ
RemixIDEを使って、
NFTコントラクト開発、コンパイル、デプロイの方法を習得
NFTコントラクトでNFTをmintし、NFTマケプレで確認する方法を習得
並行して
コントラクト開発言語Solidityを少しずつ学んでいきましょう
RemixIDEとは
実際にデフォルトで用意されているサンプルコードを使ってテストデプロイまでの操作の流れを体験します
全体画面レイアウト
ENVIRONMENTの種類
COMPILERの指定方法と本コースでの指定バージョン
Functionボタンの色の意味
RemixIDEはソースコードファイルが消えてしまうことがあります。
なので、適宜GitHubにpushして作業を保存しておくことをお勧めします。
本レクチャーでは、その方法についてご紹介します。
なお、レクチャー中特に「ここでGitHubにpushしましょう」ということは言っていませんので、ご自身のタイミングで適宜commit,pushをしてください。
Solidityとは
SPDXコーディングをします
MITライセンスの概要を紹介します
教材リソースで指定できるライセンスリストの紹介もします
Solidity(pragma/Contract/function/function visibility)の解説とコーディングをします
Solidity(import, Inheritance, constructor)とOpenZeppelin Contractsライブラリの解説とコーディングをします
solidity(型)とOpenZeppelinの_mintファンクションについての解説とコーディングを行い、はじめてのNFTスマートコントラクトを完成させます
テストネットMumbaiへ開発したNFTスマートコントラクトをデプロイします
過去にデプロイしたスマートコントラクトのアカウントアドレスを使いたいケースが多く出てきます。
その時に、過去のトランザクションからアドレスを確認する方法を紹介します。本コースでも使うことになると思うので、ぜひ習得してください。
開発したNFTスマートコントラクトを使ってはじめてのNFTを作成します。
RemixIDEを使ってスマートコントラクトにトランザクションやクエリを発行する方法も学びます
mint後にコンテンツを持たないERC-721 NFTが生成されたことを確認します
開発したMyNFTスマートコントラクトには課題があります。現状の課題感を整理します。
OZ ERC721.solの_mintファンクション内容の解説 virtual/override
OZ ERC721.solの_mintファンクション内容の解説 require
OZ ERC721.solの_mintファンクション内容の解説 中核機能(本質)とまとめ
このセクションのまとめ
目標は1つ
主な関数実行制御の方法を習得する
動作保証のため、これから本コースで扱うOZのライブラリのバージョンは固定します。このレクチャーではその方法を学びます。
Solidityの状態変数のvisibilityを学びます
SolidityコードにおけるNatSpecコメントの書き方
制御部分を書いて、コードを完成させます
javascriptVMへのデプロイとアクセス制御の動作確認
Solidity modifierとは
modifierを自分で定義して使う方法
javascriptVMへのデプロイとアクセス制御の動作確認
OpenZeppelinのOwnableライブラリを使う方法
javascriptVMへのデプロイとアクセス制御の動作確認
このセクションのまとめ
目標は4つ
ストレージソリューションの主な選択肢を知る
IPFSの仕組みと課題を理解する
Filecoinの仕組みと課題を理解する
なぜFilecoin with IPFS(+Pinning)が使われているのか理解する
復習
tokenIdへの資産情報URIを紐付ける方法とこの資産情報のストレージ配置について
Central(中央)とDecentral(分散)という観点
分散型ストレージとは
永続性メカニズム/インセンティブ構造で見る分散型ストレージソリューション概観
ロケーション指向とコンテンツ指向
コンテンツデータそのもので特定するCID
IPFSゲートウェイ
ブラウザからのアクセス方法
BraveブラウザをインストールしてipfsのコンテンツURIを直接指定して閲覧する
ローカルIPFSノードにファイルアップし、CIDを確認
ローカルIPFSノード停止方法
IPFSデータが消えてしまう可能性について
NFTコンテンツデータをIPFSを使って保存したい、という要望に対して課題を整理する
Filecoinとは
ストレージプロバイダー
分散性
Filecoinデータ保存~取り出しの流れ
2種類の取引市場
ストレージプロバイダーリストと評価システム
データ保管証明(PoRep,PoSt)
ゲーム理論的インセンティブ
ストレージプロバイダーとの契約画面
なぜFilecoin with IPFS(+Pinning)が使われているのか
Filecoin with IPFS(+Pinning)としてもFilecoinの契約継続性に課題
NFT資産(画像など)はバックアップとっておきましょう
このセクションのまとめ
目標は2つです
NFTにメタデータ、コンテンツデータを紐づける方法を習得する
一度紐付けた後のメタデータの変更を可能にする方法、不可にする方法を習得する
Filecoin with IPFS + Pinningが簡単に使えるサービス
【お知らせ】NFT.STORAGEのUIが変更されレクチャー動画と異なります
nft.storageへのファイルアップロード、アクセス方法
OpenSea Metadata Standardsに沿ったメタデータの記述
NFTコントラクト開発します。しかしこのコードでは、同じtokenIdに何度もURIを設定し直すことが可能です
NFTmintとmint後のURI設定
前のレクチャーで設定したURIの反映確認
CAR fileへのコンバートと複数ファイルのNFT.Storageへの一括アップロード
一度tokenURIを設定した後に、再び変更するとどうなるか確認
NFTコントラクト開発(URI紐付け後の変更不可)
NFTmintとURI設定とOpenSea確認
このセクションのまとめ
目標は2つ
Eventをロギングする方法の習得
自動採番したtokenIdにmetadataを紐付ける方法の習得
Eventsとは
Eventの定義、使い方
NFTmintとEventログ確認
OpenZeppelin CountersライブラリとSolidity のUsing For概要解説
NFTのtokenIdをインクリメントして自動採番する方法
例) tokenId 1,2,3,…..
OZ Countersを使ったインクリメントtokenIdコントラクト開発
Incremental tokenIdのNFT動作確認
やりたいこと概要と新たに学ぶ2点の概要解説
OZ Stringsライブラリ
abi.encodePacked()
Incremental tokenIdにmetadataファイルを紐付けるコントラクト開発
インクリメントしたtokenIdと連動してmetadataファイルを紐づける方法
例)tokenId:1 => metadata1.json, tokenId:2 => metadata2.json
プレフィックスURIの設定方法
既存の_baseURI()をoverride
Solidityでの文字列結合の方法(abi.encodepacked())の使い方
Goerliテストネットでの動作確認
このセクションのまとめ
目標は2つ
NFT削除の方法を習得
NFT停止の方法を習得
OZ ERC721Burnable使い方
継承元のダブりを整理する方法
Burn NFT削除 動作確認
OZ ERC721Pausable使い方
継承元のダブりを整理する方法
Pause NFT停止 動作確認
このセクションのまとめ
目標は1つ
Etherscanへのコントラクトコード公開(Verify)の意義とその
方法の習得
コントラクトコード公開の意義と検証概要
Etherscanアカウント作成とAPIkey発行方法
スマートコントラクトのソースコードをOpenSeaのitem画面から辿って確認する方法
Contractタブ Code/Read Contract/Write Contractの概要
Event名の確認
このコースのまとめ
【注意事項】
本コース(収録は2022年5,6月)リリース後、2022年9月に実施された大型アップデート「The Merge」などの影響で利用するテスト用チェーンを変更しています。本コースで利用するツール類の現状を鑑み、現在Polygonのテストネットワーク「Mumbai」を中心に使い、学んでいくことにしています。詳しくは最初のセクションでご案内していますので、ご確認お願いします。
--
このコースは、DApp(Decentralized Application)の中核である「スマートコントラクト」開発を学ぶためのコースで、テーマはNFTです。
各NFTプロジェクトの要件に合わせた機能を持つ独自のスマートコントラクトを開発するための基本的な知識とスキルを体系的に身につけていきます。
実はNFTスマートコントラクトを開発せずともOpenSeaの画面からNFTを作成する方法があり、機能的にこのスマートコントラクトで十分なプロジェクトもあります。プログラムを書かずともNFTを作成できるこのようなツールはNFTが広く普及するために非常に有用なものですよね。
ただ、もっと独自の機能を使いたいという場合はスマートコントラクトの開発を行い機能を実装していく必要があります。実は海外の著名なNFTプロジェクトの多くはそれぞれ独自のスマートコントラクトを開発しています。
それもNFTアート、NFTゲーム、ユーティリティNFTなどジャンルは問わず、多くのプロジェクトが独自開発しています。
Nounsも、Azukiも、Meebitも、Doodleも、Sandboxも、Illuviumも...挙げたらキリがないくらいに。
OpenSeaなどのマーケットプレイス付属のスマートコントラクトにない機能を使いたい、もしくはコードをOSS化してプロジェクトの信頼を得たいという場合など様々な要望に対して独自にスマートコントラクトを開発することは最も有力な選択肢の一つです。
このコースはまさに様々な機能を持つNFTスマートコントラクトを開発するための第一歩となるコースです。具体的に何を学べるかについては、以下と『コースの内容』をご覧ください。
本コースで扱う技術・規格・サービス
開発言語 :Solidity (v0.8.14, 1つのみv0.8.7)
ライブラリ :OpenZeppelin(v4.6.0)
開発環境 :RemixIDE
Ethereum規格. :ERC-721
ブロックチェーン(テスト用ネット):Polygon Mumbai, (一部 Ethereum Sepolia)
エクスプローラ :Polygonscan, (一部 Etherscan)
ウォレット :Metamask(ブラウザ:Chrome)
ブラウザ :Chrome,(一部 Brave)
ソースコードリポジトリサービス :GitHub(コースで作成するコードの完成形置いてます)
NFTマーケットプレイス :OpenSea、(一部 Raribleを紹介)
分散型ストレージ :NFTStorage(IPFS/Pinata/FileCoin),(ARweaveは紹介程度)
オンチェーンNFT画像データ形式 :SVG
オラクルサービス :Chainlink VRF
本コースで学べること(採用技術ツール観点)
以下は本コース採用技術、ツール観点で主に学ぶリストです。
この観点以外で学ぶことリストは『コースの内容』のセクション、レクチャー名等をご覧ください。
ブロックチェーン
テスト用のチェーンを使います。パブリックチェーンではPolygon Mumbai,Ethereum Sepolia、プライベートチェーンではRemixIDE(後述)機能を使います。
Solidity
SPDX/pragma/contract/import/Inheritance/constructor/function/function visibility/State Variable Visibility/Types/virtual/override/require/modifier/Events/Using For/abi.encodePacked/keccak256
OpenZeppelin Contractsライブラリ
ERC721.sol/Ownable.sol/ERC721URIStorage.sol/ERC721Burnable.so/ERC721Pausable.sol/Counters.sol/Strings.sol/Base64.sol
RemixIDE
画面レイアウト/コーディング/コンパイル方法/Polygon Mumbai, Ethereum Sepolia,プライベートチェーンへのデプロイ方法/ENVIRONMENT利用方法/COMPILER利用方法/Functionボタンの色の意味/EtherscanへのスマートコントラクトコードのVerify&公開方法/GitHubとの連携方法
MetaMask
インストール方法/アカウント作成方法/テストネット表示方法/チェーン追加方法/nonce表示方法/送金方法/テスト用通貨取得方法/MetaMaskからEtherscanを表示する方法/オーナーとなっているNFTの数を表示させる方法
MetaMaskに直接関係ないですが以下も学習します。
アカウントアドレス生成の仕組みと一瞬でシークレットリカバリーフレーズから派生する秘密鍵,公開鍵,アカウントアドレスを生成する体験
Etherscan/Polygonscan
テスト用のEtherscan/Polygonscanを使います。トランザクション確認方法(EOA->EOA,EOA->コントラクト)/APIkey発行方法
IPFS(+Pinata),FileCoin,NFTStorage
Braveに内包するIPFSノードの利用/メタデータファイル、コンテンツデータをアップロードする方法/コンバートしたCARで複数コンテンツをIPFSへ一括アップロードする方法/
OpenSea
テスト用のOpenSeaを使います。開発したスマートコントラクトでmintしたNFTを表示、売買する方法(売買はNFTの権限委譲と移転を学ぶために行います)/OpenSeaが定義するMetadata Standardsを元にメタデータを定義する方法
Chainlink VRF
オラクルChainlink VRFでの乱数取得及び活用方法(ランダムNFT生成するスマートコントラクト開発で使います)
本コースを通して伝えたいこと
NFTとスマートコントラクトについて技術に基づいた正しい知識と開発スキル
2022年6月現在でもまだまだNFTに対する誤解が多いです。
※ブロックチェーンだからNFTは削除・変更できないかというとそれはスマートコントラクトのプログラム内容次第です。
また、正しく理解するにはスマートコントラクトコードの読み書きの基本的なスキルがないと妥当な判断はできないでしょう。
なので本コースでは、NFT(ERC-721)の本質、つまり「画像なし」から入ります。徐々に機能を追加、動作を試していき有名なNFTの仕組みやスマートコントラクトができることの基本を習得していきます。
本コース受講に向いている方
このコースの内容が役に立つ人とそうでない人がはっきり分かれるコースです。
今これを読んでくださっているあなたにとって、このコースが役に立つかどうか、
↓で2つ質問させていただきます。受講要否の判断材料にしてください。
また本ページ最後に質問への回答について基本的なポリシーを書いていますのであらかじめご確認お願いいたします。
1つ目の質問
テレビ、YouTube、雑誌、ネットなどなど多くのメディアで「NFT」と言う言葉をよく耳にするようになりましたね。
2022年6月現在まで、メディアでは「NFTとは何か」について概ねこのように説明されているのを良く見ます。
NFTは世界に1つだけのデジタル証書
NFTはコピーできない
NFTは改ざんできない
納得感得られていますか?
そもそも説明聞いたことないという方はぜひYouTubeやネット検索して確認してみてください。
もしあなたが
「スッキリ理解、納得できた」
「自分で追加で調べて理解、納得している」
という状態であればこのコースは不要です。
ここまで読んでいただきありがとうございました。別の機会があればその時改めてよろしくお願いします。
一方、
「理解、納得できてない」
「何かモヤモヤする」
「この人、メディアの言ってること信用していいの?」
「詳しく仕組みを理解したい」
「自分で手を動かして理解したい」
もしくは
「興味はあるけど詐欺に引っかかりたくない」
「NFTって画像でしょ?ダウンロードすれば手に入るのになぜわざわざ買うのか気になってた」
「ブロックチェーンで変更できないはずなのにNFTゲームで「体力」の数字が変わるのが謎だった」
このような方々にはこのコースが役に立つ可能性があります。
2つ目の質問
もう一つ質問があります。主にNFTの売買に際して技術的な質問です。
そもそも用語がわからないという方もいらっしゃると思いますが、再び突然の質問失礼します。
あなたがNFTを購入する立場だとして、
オンチェーンのNFTは削除改ざん不可能と言われていますが、本当でしょうか。
オフチェーンだけどIPFSを使っているNFTは削除改ざん不可能と言われていますが本当でしょうか。IPFSを使えばデータは永続的に保存されるとも言われていますが本当でしょうか。
NFTのコンテンツデータ(画像ファイルなど)がどこに保存されているかをどのように確認しますか
例えば、NounsとSandboxとWorld of Womenの3つについて、NFTに付随している画像データの保存先の違いを確認できますか。※オンチェーンですか、オフチェーンですか。オフチェーンの場合は置いているのは中央集権的なサーバですか、分散型ストレージですか
NFTスマートコントラクトのプログラムコードの確認と公開方法を説明できますか。
あなたがNFTを作成、販売する立場だとして、
購入者に対して自身が販売する、(画像等の付属データ含む)NFTの不変性や永続性について説明できますか
OpenSeaで初めて「Sell」する際の同意事項の一つに「setApprovalForAll」が実行されますが、これは何を行うために必要なのでしょうか。
ERC-721規格のNFTであればOpenSeaの画面から明示的に「登録」する必要はありませんし、Raribleでも閲覧することが可能です。「登録」していないのにNFTマーケットプレイスでNFTが表示されるのはなぜでしょうか。
これらの質問に関しても回答がわかり、理解している方であれば本コースの受講は不要です。
ここまで読んでいただきありがとうございました。不躾な質問、大変失礼しました。
別の機会があればその時改めて是非よろしくお願いします。
一方、
「用語含め全くわからない」
「一部わからない」
「聞いたことあるけど仕組みを理解したい」
このような方々にはこのコースが役に立つ可能性があります。
現状わからなくても全く問題ありません。むしろ本コースはそのような方々を想定して制作しました。
このコースを最後まで受講すれば回答できるようになります。
ここまで該当している方は、
・「本ページの残り部分」の一読と「コース紹介」と「無料で見れるレクチャー」の動画もご覧ください。
購入前にご自身が求める内容であるか、
また、声が嫌いじゃないか、とか説明の仕方が理解しやすいか、というのも個人差ありますので併せて確認お願いします。
学習スタンス
ここからはコース紹介動画であまり話していない内容を少し書きます。
まずは取り組むスタンスについてです。
似たような言葉に「DYOR(Do Your Own Research):自分で調べましょう」がありますが、新しい技術なのでこのスタンスは必要ではあるのですが、特にこのコースでは「don't trust , verify.」を意識して作っています。
例えば「巷で言われてるけど、NFTって本当に削除できないの?」と言う疑問に対して実際にコードを書いて動作を検証・確認していきます。
この理由は、このコースの受講生が、技術的な根拠について少しでも自力で調べたり、実験・検証して動作確認できるようになってもらうためです。人の言葉を信じるのも選択肢の一つですが、自分のために自分の力で確認できる選択肢も手に入れましょう。
質問の受付について
コースで扱っているレクチャー内容やレクチャーを進めていくにあたり進められず詰まってしまったなどあれば質問をください。可能な限り回答するようにしますので活用ください!
また、講義に解説を追加して欲しい!というリクエストも随時受け付けていますので連絡ください。お待ちしています。
ただ1点、コースで扱っているレクチャー内容以外のご質問は基本的に受け付けていませんので予めご了承願います(コース関係ない内容だけどご自身が今開発してるコードのレビューなどはご勘弁ください)。
注意事項
・本コースで扱うソースコードについて
本コースで扱うNFTコントラクトのソースコードは学習目的のものですが、本コースの受講者か否かに限らず提供できるようパブリックリポジトリにし、コードもMITライセンスを採用しています。
(この形でスタートして何か問題が出て来ればそのタイミングで見直します。)
利用者の権利はMITライセンスの内容通りですので必ず確認をお願いします。また、ソースコードをそのまま使ったり、切り貼りしたりしてご自身のNFTコントラクトを開発し、Ethereumなどのメインネットワークにデプロイするのは推奨しません。
・免責事項
このコースで多くのサービスを使いながら学びますが、全て学習目的です。技術を学ぶためのコースであり、特定の銘柄や商品の投資や投機を促すものではありません。いかなる責任も賠償もできませんので予めご了承の上受講ください。
では、長い文章でしたがここまで読んでいただきありがとうございました!