我擔任開發人員已有 10 多年了。我很幸運能夠成為 Apache 提交者和 PPMC,在 Google 上發表演講,為 Manning Publications 寫一本書,以及其他一些事情。 由於就業市場不佳,人們正在努力尋找好工作,我開始看到區塊鏈中的商機,更具體地說 - 我看到了一些幫助其他人建立自己的企業的絕佳機會。我想分享一些我在過去幾週學到的技術知識。
我一直在努力了解分散式應用程式(DApp)的優缺點。有許多工具可供您選擇來開始建立它們。在本文中,我將向您提供一種在本地建置、部署智慧合約並與之互動的固執己見的方法。 沒有基於網路的工具,只有命令列。
先決條件:
我使用的是 Node 18.17,但是,這應該適用於更高版本的節點。
$ 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 ✨
要驗證所有內容是否如預期執行,您現在應該在目前目錄中看到兩個欄位。
$ ls -lta package.json hardhat.config.js
使用 Hardhat 時,您可以將 Solidity 原始檔 (.sol) 儲存在contracts 目錄中。我們將編寫第一個簡單的智能合約,稱為儲存:它將讓人們儲存一個可以稍後檢索的值。 這是與 Hardhat 簽訂的另一份首發合約的變體。 我正在手動完成整個過程,因此我們了解所有移動部分。
$ 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,因此我們需要先配置 Hardhat 以使用適當的 solc 版本。 我們在 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
我們在腳本中使用以太坊,因此我們需要安裝它和@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 的網路來連接我們的控制台會話。如果我們不這樣做,Harhat 將預設使用新的臨時網絡,我們的儲存合約將不會部署到該網路。
$ mkdir contracts && vim contracts/Storage.sol
第一個函數 store 接收一個整數值並將其儲存在合約儲存中。由於函數會修改區塊鏈狀態,因此我們需要向合約發送交易來執行它。
我們將發送一個交易來呼叫帶有數值的儲存函數:
$ nvm install 18.17
另一個函數稱為retrieve,它傳回儲存在合約中的整數值。這是區塊鏈狀態的查詢,所以我們不需要發送交易:
$ mkdir hello-world && cd hello-world
因為查詢僅讀取狀態且不傳送交易,所以沒有交易雜湊可報告。這也意味著使用查詢不需要任何以太幣,並且可以在任何網路上免費使用。
我們創建了一個最小的智能合約並將其部署到本地區塊鏈實例,以演示如何從區塊鏈寫入和讀取值。 如果您覺得這篇文章有幫助,請按讚和/或分享。
請隨時發表您認為合適的建議或更正。這些文章都是我上班前和下班後寫的,我會盡快把它們拿出來。
謝謝!
參考:
安全帽文件
以上是在不到幾分鐘的時間內使用 OpenZepplin 和 Solidity 建置和部署智慧合約的詳細內容。更多資訊請關注PHP中文網其他相關文章!