- 首先需要一个科學上網的工具,6 元一個月嘎嘎好用
https://mxwljsq.com/user/shop - 安裝 WSL,WSL 是 Linux 的 Windows 子系統,使用管理員權限打開 powershell,一步到位.
wsl --install
- 安裝寫程式的工具 vscode,安裝插件,點擊左下角小圖標,連接到 WSL。
- 安裝 curl,curl 是一個命令行下工作的文件傳輸工具
mkdir folder
cd folder
sudo apt-get install curl
- 安裝 nvm,nvm 可用來 nodejs 的版本控制
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
- 安裝 nodejs,nodejs 是 JavaScript 的環境
nvm install --lts
如果使用 hardhat 或者要在 vscode 中編輯 solidity 文件,需要安裝插件,黃顏色的支持 hardhat
solidity
選擇開發工具。目前主流的開發工具分別是:Remix,Truffle,Hardhat,Foundry
Remix:最最簡單的開發工具,非常適合初學者使用,他有著完善的 GUI 功能,可以減少很大的代碼量。
Truffle:最古老的開發工具,相比與 Remix,安裝到本地,不需要網絡支持,同時也有著 GUI
Hardhat:是目前最主流的開發框架,同樣安裝到本地,沒有 GUI,相比於 Truffle,靈活性更好
Foundry:是一款新興的開發框架, 用於最好的靈活性,對於初學者來說,如果只關注合約本身,不需要學習 JavaScript,只需要學習 solidity 語言即可。
使用 hardhat 步驟
- 初始化一個項目
npm init
- 安裝 hardhat(舊版本的交互和部署合約的方法可能已經失效)
npm install hardhat
- 初始化 hardhat 項目
npx hardhat init
- 安裝依賴
@openzeppelin/contracts erc20,erc21 的標準等
@openzeppelin/contracts-upgradeable 可升級的 erc20,erc721 等
@chainlink/contracts 用於隨機數請求,合約自動化執行等
dotenv 存儲重要信息
@nomiclabs/hardhat-ethers 可用於部署合約
@openzeppelin/hardhat-upgrades 用於部署代理合約
@openzeppelin/hardhat-defender 用於合約安全防護
@nomiclabs/hardhat-etherscan 部署合約後自動在區塊鏈瀏覽器上自動驗證
chai 合約測試
@openzeppelin/test-helpers openzeppelin 團隊的合約測試
npm install @openzeppelin/contracts
npm install @openzeppelin/contracts-upgradeable
npm install @chainlink/contracts
npm install dotenv
npm install @nomicfoundation/hardhat-toolbox
npm install @nomiclabs/hardhat-ethers
npm install @openzeppelin/hardhat-upgrades
npm install @openzeppelin/hardhat-defender
npm install @nomiclabs/hardhat-etherscan
npm install chai
npm install @openzeppelin/test-helpers
- 創建一個 .env 文件去存儲關鍵信息
MNEMONIC=""
ALCHEMY_API_KEY=""
etherscanKey=""
DEFENDER_TEAM_API_KEY=""
DEFENDER_TEAM_API_SECRET_KEY=""
- 修改 hardhat.config.js
require('dotenv').config()
require("@nomicfoundation/hardhat-toolbox");
require('@nomiclabs/hardhat-ethers');
require('@openzeppelin/hardhat-upgrades');
require("@openzeppelin/hardhat-defender");
require("@nomiclabs/hardhat-etherscan");
module.exports = {
solidity: {
version: '0.8.17',
settings: {
optimizer: {
enabled: true,
runs: 200,
},
},
},
networks: {
sepolia: {
url: `https://eth-sepolia.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY}`,
accounts: [process.env.MNEMONIC]
},
},
etherscan: {
apiKey: process.env.etherscanKey,
},
defender: {
apiKey: process.env.DEFENDER_TEAM_API_KEY,
apiSecret: process.env.DEFENDER_TEAM_API_SECRET_KEY,
},
};
- 使用 Wizard 開發合約 https://docs.openzeppelin.com/contracts/4.x/wizard
- 編譯合約
npx hardhat compile
- 部署合約腳本(ethers6.0 可能不適用)
async function main() {
const [deployer] = await ethers.getSigners();
console.log("Deploying contracts with the account:", deployer.address);
const DragonToken = await ethers.deployContract("DragonToken");
console.log("Token address:", await DragonToken.getAddress());
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
- 啟動 hardhat 本地網絡
npx hardhat node
- 部署到 hardhat 本地網絡
npx hardhat run ./scripts/deploy.js --network localhost
- 部署到 sepolia 測試網
npx hardhat run ./scripts/deploy.js --network sepolia