ホームページ  >  記事  >  ウェブフロントエンド  >  OpenZepplin と Solidity を使用したスマート コントラクトを数分以内に構築してデプロイする

OpenZepplin と Solidity を使用したスマート コントラクトを数分以内に構築してデプロイする

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-10 03:51:02428ブラウズ

私は 10 年以上開発者として働いています。幸運なことに、私は Apache コミッターと PPMC になり、Google で講演し、Manning Publications で本を執筆し、その他にもいくつかの仕事をしてきました。 雇用市場が芳しくなく、人々が良い仕事を見つけるのに苦労している中、私はブロックチェーンにビジネスチャンスがあると考え始めています。より具体的には、他の人が独自のビジネスを構築するのを支援する素晴らしい機会があると考えています。ここ数週間で学んだ技術的なことをいくつか共有したいと思います。

私は分散アプリケーション (DApps) の長所と短所を理解することに取り組んできました。構築を始めるために選択できるツールがたくさんあります。この記事では、ローカルでスマート コントラクトを構築、展開、操作するための独自のアプローチを紹介します。 Web ベースのツールはなく、コマンド ラインのみです。

前提条件:

私は Node 18.17 を使用していますが、これは新しいバージョンの Node でも動作するはずです。

ノード 18.17 をまだインストールしていない場合はインストールします

$ nvm install 18.17

まず、フォルダーを作成し、そこに cd します。

$ mkdir hello-world && cd hello-world

プロジェクトを初期化する

$ npm init -y

Hardhat をプロジェクトにローカルにインストールする

$ npm install --save-dev hardhat

npx に関する補足

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”

Building and deploying a smart contract with OpenZepplin and Solidity in less than minutes

作成が成功すると、これが表示されます。

✔ 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

以下を 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 を閉じます

Solidity のコンパイル

イーサリアム仮想マシン (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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。