以太坊全端應用的快速建立指南:善用 Scaffold-ETH

Kordan Ou
6 min readDec 11, 2024

--

現今軟體開發的速度和效率越來越重要,尤其在競爭激烈的區塊鏈領域,快速推出可用產品並獲得使用者回饋是贏得市場的關鍵。在這篇文章中,我們將探討如何善用工具與框架,快速開發一個基於以太坊的全端應用,並確保開發過程的高效與穩定。

(1) Building FullStack apps on Ethereum — SpeedRunEthereum3 by Eda Akturk | Devcon SEA

快速開發的核心原則

  1. 降低重複工作:避免從零開始編寫重複性程式碼,利用樣板和腳手架工具快速生成基礎架構。
  2. 專注於核心功能:將時間集中於應用的核心價值,次要功能可以採用現成的解決方案。
  3. 持續迭代與測試:小步快跑,快速測試並獲得回饋。

以下將以實際案例說明如何運用這些原則。

善用 Scaffold-ETH:建立以太坊應用的利器

[Scaffold-ETH](None) 是專為以太坊開發者設計的腳手架工具,提供從前端到後端的完整解決方案,讓開發者能夠快速開始建立應用。以下是它的核心功能:

  1. 內建前端與智能合約樣板
  • 前端基於 Next.js,預設定了 Wagmi、Rainbow Kit 等工具。
  • 智能合約樣板支持 Hardhat 和 Foundry,讓你能選擇最熟悉的開發環境。

2. 即時除錯功能

  • Scaffold-ETH 內建 Burner Wallet,允許快速測試交易,無需設定外部錢包。
  • 提供 Debug Contracts 面板,讓開發者能在前端直接與智能合約交互。

3. 整合 TailwindCSS 與 DaisyUI

  • 快速建立漂亮且回應式的使用者界面。

分步指南:如何快速建立 NFT 應用

1. 設定開發環境

首先,使用 Scaffold-ETH 提供的腳手架工具生成應用基礎架構:

npx create-eth-app my-nft-app
cd my-nft-app
yarn chain
yarn deploy
yarn start

這些指令會完成以下工作:

  • 啟動本地區塊鏈模擬器(如 Foundry 的 Anvil)。
  • 部署預設的智能合約到本地鏈。
  • 啟動前端應用,並與本地鏈交互。

2. 利用 OpenZeppelin Wizard 編寫智能合約

進一步自定義應用的業務邏輯。假設你正在開發一個 ERC-721 NFT 應用,你可以使用 OpenZeppelin Wizard 快速生成合約程式碼:

  • 定義合約名稱與符號。
  • 增加自動 ID 遞增與最大供應量限制。
  • 新增 Enumerable 介面,方便查詢 NFT 所有者與數量。

將生成的程式碼複製到項目的智能合約目錄中,然後更新部署腳本:

const { deploy } = require("hardhat");

async function main() {
const MyNFT = await deploy("MyNFT");
console.log("MyNFT deployed to:", MyNFT.address);
}

main();

部署完成後,智能合約便可以透過前端進行交互。

3. 建立前端使用者界面

利用 DaisyUI 的預設元件,快速搭建應用界面。例如,為鑄造 NFT 新增一個按鈕:

<div class="card">
<h2 class="card-title">Mint Your NFT</h2>
<button class="btn btn-primary" id="mintButton">Mint</button>
</div>

接著,在按鈕中新增智能合約交互邏輯,使用 Wagmi 提供的 Hook:

import { useContractWrite } from "wagmi";

const { write } = useContractWrite({
address: "<Your Contract Address>",
abi: [<Your ABI>],
functionName: "mint",
});

document.getElementById("mintButton").onclick = async () => {
await write();
};

4. 新增無氣費交易功能

為了提高使用者體驗,利用 Coinbase 的 Paymaster API 實現氣費代付功能:

  1. Coinbase Developer Portal 註冊並建立 Paymaster。
  2. 獲取 API URL,並將其新增到應用的環境變數中。

在前端邏輯中,設定 Paymaster URL:

onst paymasterUrl = process.env.PAYMASTER_URL;

const mintWithPaymaster = async () => {
const response = await fetch(paymasterUrl, {
method: "POST",
body: JSON.stringify({
userAddress: "<User Address>",
functionName: "mint",
}),
});

const result = await response.json();
console.log(result);
};

避免常見問題:效率與性能的平衡

  1. 大量 NFT 的資料查詢問題
  • 當 NFT 數量超過數千時,避免在智能合約內進行迴圈查詢。
  • 建議使用 The GraphPonder 進行鏈上資料索引。

2. 過多功能導致的複雜性

  • 使用 Scaffold-ETH 的擴展模組功能,將額外功能模組化,減少對核心程式碼的影響。

3. 部署錯誤

  • 在部署到生產環境前,執行yarn build 確保沒有語法錯誤或未定義變數。

結語

快速開發並不意味著妥協質量,而是善用現有工具與資源,加速建立流程,同時專注於應用的核心價值。利用 Scaffold-ETH 等腳手架工具、OpenZeppelin 提供的合約樣板,以及像 Coinbase Paymaster 這樣的增強功能,你可以在短時間內完成一個完整且穩定的以太坊應用。這不僅提高了開發效率,也讓你能更快地推向市場,獲得使用者反饋,並持續改進。

讓我們善用這些工具,一起在區塊鏈的創新世界中創造價值!

--

--

Kordan Ou
Kordan Ou

Written by Kordan Ou

我是 KryptoGO 的創辦人,同時也是一位加密貨幣的投資者和愛好者。我非常熱愛加密金融科技,並一直關注著行業監管的最新發展。如果你對這個領域感興趣,或是對加密貨幣和區塊鏈有疑問,歡迎關注我!我們可以一起探討這個迅速發展的領域,了解更多有趣的資訊。更多關於我:https://kordan.me

No responses yet