ホームページ > 記事 > ウェブフロントエンド > OpenZepplin と Solidity を使用したスマート コントラクトを数分以内に構築してデプロイする
私は 10 年以上開発者として働いています。幸運なことに、私は Apache コミッターと PPMC になり、Google で講演し、Manning Publications で本を執筆し、その他にもいくつかの仕事をしてきました。 雇用市場が芳しくなく、人々が良い仕事を見つけるのに苦労している中、私はブロックチェーンにビジネスチャンスがあると考え始めています。より具体的には、他の人が独自のビジネスを構築するのを支援する素晴らしい機会があると考えています。ここ数週間で学んだ技術的なことをいくつか共有したいと思います。
私は分散アプリケーション (DApps) の長所と短所を理解することに取り組んできました。構築を始めるために選択できるツールがたくさんあります。この記事では、ローカルでスマート コントラクトを構築、展開、操作するための独自のアプローチを紹介します。 Web ベースのツールはなく、コマンド ラインのみです。
前提条件:
私は Node 18.17 を使用していますが、これは新しいバージョンの Node でも動作するはずです。
$ nvm install 18.17
$ mkdir hello-world && cd hello-world
$ npm init -y
$ npm install --save-dev hardhat
npx は、プロジェクトにローカルにインストールされた実行可能ファイルを実行するために使用されます。 プロジェクトごとにバージョンを管理できるように、Hardhat を各プロジェクトにローカルにインストールすることをお勧めします。
$ npx hardhat init Need to install the following packages: hardhat@2.22.15 Ok to proceed? (y) You should see the option show up. Select “ Create an empty hardhat.config.js”
作成が成功すると、これが表示されます。
✔ What do you want to do? · Create an empty hardhat.config.js ✨ Config file created ✨
すべてが期待どおりに実行されたことを確認するには、現在のディレクトリに 2 つのフィールドが表示されるはずです。
$ ls -lta package.json hardhat.config.js
Hardhat を使用する場合、Solidity ソース ファイル (.sol) を契約ディレクトリに保存できます。ストレージと呼ばれる最初の単純なスマート コントラクトを作成します。これにより、人々は後で取得できる値を保存できるようになります。 これは、ハードハットとの別のスターター契約のバリエーションです。 私はこのプロセスを手動で進めているので、すべての変動要素を理解しています。
$ mkdir contracts && vim contracts/Storage.sol
// contracts/Storage.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Storage { uint256 private _value; // Emitted when the stored value changes event ValueChanged(uint256 value); // Stores a new value in the contract function store(uint256 value) public { _value = value; emit ValueChanged(value); } // Reads the last stored value function retrieve() public view returns (uint256) { return _value; } }
上記をファイルに書き込んだ後、:wq または :x で vim を閉じます
イーサリアム仮想マシン (EVM) は、Solidity コードを直接実行できません。まず、EVM バイトコードにコンパイルする必要があります。 Storage.sol 契約では Solidity 0.8 を使用しているため、適切な solc バージョンを使用するように最初に Hardhat を構成する必要があります。 hardhat.config.js で Solidity 0.8 solc バージョンを指定します。
$ nvm install 18.17
$ mkdir hello-world && cd hello-world
ストレージ契約をデプロイするためのスクリプトを作成します。このファイルを scripts/deploy.js.
として保存します。
$ npm init -y
$ npm install --save-dev hardhat
スクリプトで ether を使用するため、それと @nomicfoundation/hardhat-ethers プラグインをインストールする必要があります。
$ npm install --save-dev @nomicfoundation/hardhat-ethers ethers
@nomicfoundation/hardhat-ethers プラグインを使用していることを設定に追加する必要があります。
ヘルメットの構成は次のようになります。
$ npx hardhat init Need to install the following packages: hardhat@2.22.15 Ok to proceed? (y) You should see the option show up. Select “ Create an empty hardhat.config.js”
契約を展開できる環境が必要です。イーサリアム ブロックチェーン (「メイン ネットワーク」の略で「メインネット」と呼ばれることが多い) を使用するには、イーサ (ネイティブ通貨) の形で実際のお金を使う必要があります。そのため、新しいアイデアやツールを試す場合には不適切な選択となります。
これを解決するには、多数の「テストネット」(「テストネットワーク」の略) が存在します。ただし、秘密鍵の管理、12 秒以上のブロックタイム、そして実際にこの無料のイーサを取得する必要があります。
開発中は、代わりにローカル ブロックチェーンを使用することをお勧めします。それはあなたのマシン上で実行され、必要なすべてのイーサを提供し、即座にブロックをマイニングします。
✔ What do you want to do? · Create an empty hardhat.config.js ✨ Config file created ✨
スマート コントラクトを展開する
$ ls -lta package.json hardhat.config.js
ストレージ契約が展開されているので、すぐに使用を開始できます。
Hardhat コンソールを使用して、ローカルホスト ネットワーク上に展開されたストレージ コントラクトと対話します。
デプロイ スクリプトで表示したストレージ コントラクトのアドレスを指定する必要があります。
コンソール セッションの接続先となる Hardhat のネットワークを明示的に設定することが重要です。そうしないと、Hardhat はデフォルトで新しい一時ネットワークを使用することになり、ストレージ契約はそのネットワークに展開されなくなります。
$ mkdir contracts && vim contracts/Storage.sol
最初の関数、store は、整数値を受け取り、それをコントラクト ストレージに保存します。この関数はブロックチェーンの状態を変更するため、トランザクションを実行するにはコントラクトにトランザクションを送信する必要があります。
数値を使用してストア関数を呼び出すトランザクションを送信します:
$ nvm install 18.17
もう 1 つの関数はretrieve と呼ばれ、コントラクトに格納されている整数値を返します。これはブロックチェーンの状態のクエリであるため、トランザクションを送信する必要はありません:
$ mkdir hello-world && cd hello-world
クエリは状態を読み取るだけでトランザクションは送信しないため、レポートするトランザクション ハッシュはありません。これは、クエリの使用にイーサの費用がかからず、どのネットワークでも無料で使用できることも意味します。
最小限のスマート コントラクトを作成し、それをローカル ブロックチェーン インスタンスにデプロイして、ブロックチェーンに値を書き込み、ブロックチェーンから値を読み取る方法を示しました。 この記事が役に立ったと思われた場合は、「いいね」やシェアをお願いします。
適切と思われる提案や修正があれば、お気軽にコメントしてください。これらの記事は仕事の前後に書き、できるだけ早く公開しています。
ありがとうございます!
参考:
ヘルメットのドキュメント
以上がOpenZepplin と Solidity を使用したスマート コントラクトを数分以内に構築してデプロイするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。