React、Ethers.js、Solidity、Hardhat を使用してフルスタック dApp を構築する このチュートリアルでは、Ethereum 仮想マシン (EVM) を活用して、Ethereum、Polygon、Avalanche、Celo など多数のブロックチェーン ネットワーク上でフルスタック アプリケーションを構築できる Web3 テクノロジー スタックについて学習します。 このプロジェクトのコードはここにあります。このチュートリアルのビデオ コースはここにあります。 web3スタックの定義も参照してください 私は最近、Edge & Node に開発者リレーションエンジニアとして入社し、Ethereum でのスマート コントラクト開発に深く取り組んでいます。私は、Solidity を使用してフルスタック dApp を構築するのに最適なスタックを特定しました。 ▶︎ クライアントサイドフレームワーク - React ▶︎ Ethereum 開発環境 — Hardhat ▶︎ Ethereum ネットワーク クライアント ライブラリ - Ethers.js ▶︎ API レイヤー - グラフ プロトコル しかし、これを学習するときに私が抱えた問題は、これらのそれぞれについて個別にかなり良いドキュメントがあったものの、これらすべてをまとめて、それらが互いにどのように機能するかを理解する方法については何もなかったことです。 scaffold-eth (Ethers、Hardhat、The Graph も含まれています) のような非常に優れたテンプレートがいくつかありますが、始めたばかりの人にとっては多すぎるかもしれません。 最新のリソース、ライブラリ、ツールを使用してフルスタックの Ethereum アプリケーションを構築する方法を示すエンドツーエンドのガイドが必要でした。 私が興味を持っているものは次のとおりです。
これらすべてを理解するのにしばらく時間を費やし、かなり満足できるスタックを使い始めた後、このスタックに興味があるかもしれない他の人々のためだけでなく、私自身の将来の参考のためにも、このスタックを使用してフルスタックの Ethereum アプリケーションを構築およびテストする方法を書き留めておくのはよいことだと思いました。この記事がその参考資料です。 各パーツ使用する主なパーツと、それらがスタックにどのように適合するかを確認しましょう。 1. イーサリアム開発環境 スマート コントラクトを構築する場合、ライブ環境を扱わずにコントラクトをデプロイし、テストを実行し、Solidity コードをデバッグする方法が必要になります。 また、Solidity コードをクライアント アプリケーション (この場合は React アプリケーション) で実行できるコードにコンパイルする方法も必要です。これがどのように機能するかについては、後で詳しく説明します。 Hardhat は、フルスタック開発用に設計された Ethereum 開発環境およびフレームワークであり、このチュートリアルで使用するフレームワークです。 エコシステム内の他の同様のツールとしては、Ganache、Truffle、Foundry などがあります。 2. Ethereum ネットワーク クライアント ライブラリ React アプリケーションでは、デプロイされたスマート コントラクトと対話する方法が必要です。新しいトランザクションを送信するだけでなく、データを読み取る方法も必要になります。 ethers.js は、React、Vue、Angular、Svelte などのクライアント側 JavaScript アプリケーションから Ethereum ブロックチェーンとそのエコシステムと対話するための完全かつコンパクトなライブラリを目指しています。これが私たちが使用するライブラリです。 エコシステムにおけるもう一つの人気のある選択肢はweb3.jsです 3. メタマスク Metamask はアカウント管理の処理を支援し、現在のユーザーをブロックチェーンに接続します。 MetaMask を使用すると、ユーザーはサイトのコンテキストからアカウントとキーを分離しながら、さまざまな方法で管理できます。 ユーザーが MetaMask ウォレットを接続すると、開発者は、Web3 互換ブラウザのユーザーを MetaMask ユーザーとして認識する、グローバルに利用可能な Ethereum API (window.ethereum) と対話できるようになります。また、トランザクションの署名を要求するたびに、MetaMask はユーザーに可能な限りわかりやすい方法でプロンプトを表示します。 4. 反応する React は、Web アプリケーション、ユーザー インターフェイス、UI コンポーネントを構築するためのフロントエンド JavaScript ライブラリです。これは Facebook と多くの個人開発者および企業によって管理されています。 React とそのメタフレームワークの広大なエコシステム (Next.js、Gatsby、Redwood、Blitz.js など) は、従来の SPA、静的サイト ジェネレーター、サーバー側レンダリング、およびこれら 3 つを組み合わせたものなど、あらゆるタイプのデプロイメント ターゲットをサポートしています。 React はフロントエンドの分野で引き続き優位に立っているようで、少なくとも近い将来はそうあり続けると思います。 5. グラフ Ethereum のようなブロックチェーン上に構築されたほとんどのアプリケーションでは、チェーンから直接データを読み取るのは困難で時間がかかるため、以前は個人や企業が独自の集中型インデックス サーバーを構築し、それらのサーバーから API リクエストを処理していました。これには多大なエンジニアリングおよびハードウェア リソースが必要となり、分散化に必要なセキュリティ プロパティが損なわれます。 Graph は、ブロックチェーン データをクエリするためのインデックス プロトコルであり、完全に分散化されたアプリケーションの作成を可能にし、この問題を解決して、アプリケーションが使用できる豊富な GraphQL クエリ レイヤーを提供します。このガイドでは、アプリケーションのサブグラフは構築しませんが、後のチュートリアルで構築します。 The Graph を使用してブロックチェーン API を構築する方法については、「Ethereum での GraphQL API の構築」をご覧ください。 私たちが構築するものこのチュートリアルでは、いくつかの基本的なスマート コントラクトを構築、デプロイ、接続します。
また、ユーザーが次のことができる React フロントエンドも構築します。
前提条件
このガイドでは、チュートリアル全体を通してテスト ネットワーク上で偽の/テストの Ether を使用するため、Ethereum を所有する必要はありません。 始めるまず、新しい React アプリケーションを作成します。 次に、新しいディレクトリに移動し、NPM または Yarn を使用して ethers.js と hardhat をインストールします。 Ethereum開発環境をインストールして設定する 次に、Hardhat を使用して新しい Ethereum 開発環境を初期化します。 ルート ディレクトリに次のセクションが作成されているはずです。
MetaMask 構成の問題により、HardHat 構成のチェーン ID を 1337 に更新する必要があります。また、コンパイルされたコントラクト成果物の場所を React アプリケーションの src ディレクトリに更新する必要があります。 これらの更新を行うには、hardhat.config.js を開き、module.exports を次のように更新します。 当社のスマートコントラクト次に、contracts/Greeter.sol で提供されているサンプル契約を見てみましょう。 これは非常に基本的なスマート コントラクトです。デプロイされると、Greeting 変数が設定され、挨拶を返すために呼び出すことができる関数 (greet) が公開されます。 また、ユーザーが挨拶を更新できるようにする関数 (setGreeting) も公開します。これらのメソッドは、Ethereum ブロックチェーンにデプロイされると、ユーザーが操作できるようになります。 Ethereumブロックチェーンの読み取りと書き込みスマート コントラクトと対話する方法には、読み取りと書き込み/トランザクションの 2 つがあります。私たちのコントラクトでは、greet は読み取りと見なすことができ、setGreeting は書き込み/トランザクションと見なすことができます。 トランザクションを書き込むとき、または初期化するときには、トランザクションをブロックチェーンに書き込むために料金を支払う必要があります。これを行うには、ガスを支払う必要があります。ガスは、Ethereum ブロックチェーン上でトランザクションを正常に実行し、契約を実行するために必要な料金または価格です。 ブロックチェーンからデータを読み取るだけで、何も変更または更新しない限り、トランザクションを実行する必要はなく、そのためのガスやコストも発生しません。呼び出した関数は接続しているノードによってのみ実行されるため、料金は発生せず、読み取りは無料です。 React アプリケーションでは、ethers.js ライブラリ、コントラクト アドレス、および hardhat によってコントラクトから作成される ABI の組み合わせを使用して、スマート コントラクトと対話します。 ABI とは何ですか? ABI は、Application Binary Interface の略です。これは、クライアント アプリケーションと、対話するスマート コントラクトがデプロイされる Ethereum ブロックチェーン間のインターフェイスと考えることができます。 ABI は通常、HardHat などの開発フレームワークによって Solidity スマート コントラクトからコンパイルされます。スマート コントラクトの ABI は、Etherscan でもよく見つかります。 ABI のコンパイルスマート コントラクトの基礎を理解し、ABI が何であるかがわかったので、プロジェクト用の ABI をコンパイルしてみましょう。 これを行うには、コマンド ラインに移動して次のコマンドを実行します。 これで、src ディレクトリに「artifacts」という新しいフォルダーが表示されるはずです。 arthits/contracts/Greeter.json ファイルには、プロパティの 1 つとして ABI が含まれています。 ABI を使用する必要がある場合は、JavaScript ファイルからインポートできます。 次のようにして ABI を参照できます。 Ethers.js では人間が読める ABI も有効になりますが、このチュートリアルではそれについては説明しません。 ローカルネットワーク/ブロックチェーンを展開して使用する次に、スマート コントラクトをローカル ブロックチェーンにデプロイしてテストしてみましょう。 ローカル ネットワークにデプロイするには、まずローカル テスト ノードを起動する必要があります。これを行うには、CLI を開いて次のコマンドを実行します。 このコマンドを実行すると、アドレスと秘密鍵のリストが表示されます。 これらは、スマート コントラクトをデプロイしてテストするために使用できる、作成された 20 個のテスト アカウントとアドレスです。各アカウントには 10,000 テスト イーサもロードされました。後ほど、テスト アカウントを MetaMask にインポートして使用できるようにする方法を学習します。 次に、契約をテスト ネットワークにデプロイする必要があります。まず、scripts/sample-script.js の名前を scripts/deploy.js に更新します。 これで、デプロイメント スクリプトを実行し、ローカル ネットワークにデプロイするフラグを CLI に提供できます。 このスクリプトを実行すると、スマート コントラクトがローカル テスト ネットワークにデプロイされ、対話を開始できるようになります。 契約が展開されると、ローカル ネットワークを開始したときに作成した最初のアカウントが使用されました。 CLI の出力を見ると、次のようなものが表示されるはずです。 このアドレスは、クライアント アプリケーションでスマート コントラクトと通信するために使用します。このアドレスはクライアント アプリケーションから接続するときに必要となるため、使用可能な状態にしておいてください。 スマート コントラクトにトランザクションを送信するには、npx ハードハット ノードの実行時に作成したアカウントの 1 つを使用して MetaMask ウォレットに接続する必要があります。 CLI でログアウトした契約のリストに、アカウント番号と秘密鍵が表示されます。 このアカウントを MetaMask にインポートして、そこで利用可能な Eth テスト コインの一部を使い始めることができます。 これを行うには、まずMetaMaskを開いてテストネットワークを有効にします。 次に、ネットワークを Localhost 8545 に更新します。 次に、MetaMask で、アカウント メニューから [アカウントのインポート] をクリックします。 CLI 経由でログアウトした秘密キーの 1 つをコピーして貼り付け、[インポート] をクリックします。アカウントがインポートされると、アカウントに Eth が表示されます。 スマート コントラクトがデプロイされ、使用するアカウントができたので、React アプリケーションからスマート コントラクトとのやり取りを開始できます。 Reactクライアントの接続このチュートリアルでは、CSS などを使用して優れた UI を構築することについては気にせず、コア機能に 100% 焦点を当てて、すぐに使い始めることができるようにします。そこから、必要に応じて見栄えを良くすることができます。 それでは、React アプリケーションで達成したい 2 つの目標を確認してみましょう。
これを知った上で、どうすればいいのでしょうか?これを実現するには、次のことを行う必要があります。
これを行うには、src/App.js を開き、次のコードで更新して、greeterAddress の値をスマート コントラクトのアドレスに設定します。 テストするには、React サーバーを起動します。 アプリケーションが読み込まれると、現在の挨拶を取得し、コンソールにログアウトできるようになります。 MetaMask ウォレットで契約に署名し、Ether テスト コインを使用することで、挨拶を更新することもできます。 ライブテストネットワークを展開して使用するRopsten、Rinkeby、Kovan などの Ethereum テスト ネットワークがいくつかあり、メインネットにデプロイしなくても、パブリックにアクセス可能なバージョンの契約を取得するためにデプロイすることもできます。このチュートリアルでは、Ropsten テスト ネットワークにデプロイします。 まず、MetaMask ウォレットを更新して、Ropsten ネットワークに接続します。 次に、このテスト ファウセットにアクセスして、このチュートリアルの残りの部分で使用するテスト Ether を自分に送信します。 Infura や Alchemy などのサービスにサインアップすることで、Ropsten (またはその他のテスト ネットワーク) にアクセスできます (このチュートリアルでは Infura を使用します)。 Infura または Alchemy でアプリケーションを作成すると、次のようなエンドポイントが作成されます。 デプロイメントに使用するアカウントのウォレット アドレスを含めるには、Infura または Alchemy アプリケーション構成で ALLOWLIST ETHEREUM ADDRESSES を必ず設定してください。 テスト ネットワークに展開するには、追加のネットワーク情報を使用してハードハット構成を更新する必要があります。設定する必要があるものの一つは、展開元のウォレットの秘密鍵です。 秘密鍵を取得するには、MetaMask からエクスポートします。 この値をアプリケーション内でハードコーディングするのではなく、環境変数のようなものとして設定することをお勧めします。 次に、次の構成でネットワーク プロパティを追加します。 デプロイするには、次のスクリプトを実行します。 契約がデプロイされると、契約とのやり取りを開始できるようになります。これで、Etherscan Ropstenテストネットエクスプローラーでライブ契約を表示できるようになります。 トークンの発行スマート コントラクトの最も一般的な使用例の 1 つはトークンの作成です。その方法を見てみましょう。これらすべてがどのように機能するかをより深く理解したら、もう少し速く進むことができます。 メインのコントラクト ディレクトリに Token.sol という新しいファイルを作成します。 次に、次のスマート コントラクトで Token.sol を更新します。 このトークン契約はデモンストレーション目的のみであり、ERC20 に準拠していないことに注意してください。ここではERC20トークンを紹介します この契約により、「Nader Dabit Token」と呼ばれる新しいトークンが作成され、供給量が 1,000,000 に設定されます。 次に、契約書をコンパイルします。 次に、scripts/deploy.js のデプロイ スクリプトを更新して、この新しいトークン コントラクトを含めます。 これで、この新しいコントラクトをローカルまたは Ropsten ネットワークにデプロイできるようになりました。 契約がデプロイされると、これらのトークンを他のアドレスに送信できるようになります。 これを実行するには、動作させるために必要なクライアント コードを更新します。 次に、アプリケーションを実行します。 「残高を取得」をクリックすると、コンソールにログアウトしたアカウントに 1,000,000 コインがあることが確認できるはずです。 「トークンのインポート」をクリックすると、MetaMask でそれらを表示することもできます。 次に、「カスタム トークン」をクリックしてトークン コントラクト アドレスを入力し、カスタム トークンを追加します。 (トークンの小数点以下の桁数を尋ねられた場合は、0 を選択してください) これで、トークンがウォレットで利用できるようになります。 次に、これらのコインを別のアドレスに送信してみます。 これを行うには、別のアカウントのアドレスをコピーし、更新された React UI を使用してそのアドレスに送信します。トークンの金額を確認すると、元の金額からアドレスに送信した金額を差し引いた金額と等しくなります。 ERC20トークンERC20 トークン標準は、すべての ERC20 トークンに適用される一連のルールを定義し、トークン同士が簡単にやり取りできるようにします。 ERC20 を使用すると、Ethereum ブロックチェーン上の他のトークンと相互運用可能な独自のトークンを簡単に作成できます。 ERC20 標準を使用して独自のトークンを構築する方法を見てみましょう。 まず、OpenZepplin スマート コントラクト ライブラリをインストールし、そこに基本 ERC20 トークンをインポートします。 次に、ERC20 コントラクトを拡張(または継承)してトークンを作成します。 コンストラクターを使用するとトークンの名前とシンボルを設定でき、_mint 関数を使用するとトークンを作成し、その量を設定できます。 デフォルトでは、ERC20 は小数点以下の桁数を 18 に設定しているため、_mint 関数では 100,000 に 10 の 18 乗を掛けて、小数点以下の桁数がそれぞれ 18 のトークンを合計 100,000 個発行します (1 Eth が 10 から 18 の wei で構成されるのと同様)。 デプロイするには、コンストラクター値 (名前とシンボル) を渡す必要があるため、デプロイ スクリプトで次の操作を実行できます。 元の ERC20 トークンを拡張すると、トークンは次の機能をすべて継承します。 デプロイされると、これらの関数のいずれかを使用して新しいスマート コントラクトと対話できるようになります。 ERC20トークンの別の例については、[Solidity by example)( https://solidity-by-example.org/app/erc20/)をご覧ください。 結論はさて、ここでは多くのことを説明しましたが、私にとってこれはこのスタックを使い始めるための基本/中核であり、これらすべてを学習している人としてだけでなく、将来必要になるかもしれない何かを参照する必要がある場合にも、私が持っていたいものです。たくさんのことを学べたことを願っています。 MetaMask に加えて複数のウォレットをサポートしたい場合は、Web3Modal をチェックしてください。Web3Modal を使用すると、非常にシンプルでカスタマイズ可能な構成で、アプリに複数のプロバイダーのサポートを簡単に実装できます。 今後のチュートリアルとガイドでは、より複雑なスマート コントラクトの開発と、それらをサブグラフとしてデプロイしてその上に GraphQL API を公開し、ページネーションや全文検索などの機能を実装する方法について詳しく説明します。 また、IPFS や Web3 データベースなどのテクノロジーを使用して、分散型でデータを保存する方法についても説明します。 |
<<: 中国初のデジタル人民元路上駐車スペースが深センで開設
>>: グレイスケール・ビットコイン・トラストのマイナスプレミアムは26.5%となり、過去最低を記録した。ビットコインETFは新たな戦場となるか?
Webchain の紹介Webchain は、接続されたデバイスの未使用の CPU リソースを最大限...
2018年3月、BitmainはANTBOX(モバイルマイニングファーム)を立ち上げました。 ANT...
CoinMarketCap の Web サイトが提供する情報から、新しい競合コインがほぼ毎日登場し...
サンフランシスコを拠点とする暗号通貨取引所Coinbaseは、同社が現在使用している煩雑な上場プロセ...
「イーサリアムの合併が完了しました!これはイーサリアムのエコシステムにとって重要な瞬間です。合併の...
2030 年の明るい日曜日の朝、あなたは牛乳を買うために地元の食料品店に立ち寄りました。手を振るだけ...
待望のFilecoin Virtual Machine (FVM)が新たなマイルストーンM0.5に到...
株式、先物、ファンド取引とは異なり、ビットコイン取引はT+0モデル(1日以内の売買無制限)を採用して...
毎年、何万人もの中国人がアメリカンドリームを夢見て故郷を離れ、アメリカへ渡っています。しかし、毎年、...
ビットコインのスケーリングの苦戦により、投資家がヘッジのために代替コインに目を向けるようになり、暗号...
クレイジー解説:ウクライナはブロックチェーン選挙システムについて複数の計画を発表しているが、最終的に...
数日前、ある記事を読んだのですが、その中で今でも鮮明に覚えている一文がありました。「勤勉さの点では、...
仮想通貨取引所バイビットは、社内で給与の支払いを担当していたホー氏を、自らが密かに所有・管理していた...
ドナルド・トランプ次期大統領が就任初日にビットコイン準備金を宣言する大統領令に署名するか、任期中に準...
記者:リディアGreg Colvin 博士は、ANSI/ISO C++ 標準委員会の委員です。会議で...