یکی از جذابترین بخشهای دنیای Web3، ساخت اپلیکیشنهای غیرمتمرکز (dApp) است. این برنامهها به کاربران اجازه میدهند بدون واسطه، مستقیماً با قراردادهای هوشمند در بلاکچین تعامل داشته باشند. در این مقاله، نحوهی اتصال قراردادهای سالیدیتی به رابط کاربری فرانتاند با Web3.js یا Ethers.js، تعامل با MetaMask و نکات کلیدی طراحی رابط کاربری برای dAppها را بررسی میکنیم.
برای برقراری ارتباط بین قراردادهای سالیدیتی و رابط کاربری (مثلاً HTML + JavaScript)، از کتابخانههای Web3 مانند Web3.js و Ethers.js استفاده میشود.
نصب کتابخانهها:
Web3.js:
npm install web3
Ethers.js:
npm install ethers
نمونه اتصال با Ethers.js:
import { ethers } from "ethers";import abi from "./MyContractABI.json";const contractAddress = "0xYourContractAddress";async function connectContract() {const provider = new ethers.providers.Web3Provider(window.ethereum);await provider.send("eth_requestAccounts", []);const signer = provider.getSigner();const contract = new ethers.Contract(contractAddress, abi, signer);return contract;}
با استفاده از این کد، میتوانید توابع قرارداد را از طریق رابط کاربری خود صدا بزنید.
برای شروع، میتوانید با HTML/CSS و JavaScript یک رابط کاربری ساده بسازید که دکمههایی مانند "Send", "Mint", "Vote" یا "Buy" داشته باشد.
نمونه HTML ساده:
async function callContract() {const contract = await connectContract();const tx = await contract.transfer("0xReceiverAddress", 100);await tx.wait();alert("Transaction sent!");}
ابزارهای پیشنهادی:
- React.js برای رابط پویا
- Tailwind یا Bootstrap برای طراحی زیبا
- Vite یا Next.js برای پروژههای بزرگتر
MetaMask پل ارتباطی کاربر با بلاکچین است. این افزونه مرورگر کیفپول کاربر، امضاها و تراکنشها را مدیریت میکند.
مراحل تعامل:
1- بررسی وجود window.ethereum
2- درخواست اجازه اتصال با eth_requestAccounts
3- ارسال تراکنش از طریق signer در ethers.js یا send در Web3.js
if (window.ethereum) {const accounts = await ethereum.request({ method: 'eth_requestAccounts' });console.log("Connected account:", accounts[0]);}
طراحی رابط کاربری در dAppها نقش حیاتی در تجربه کاربر دارد. از آنجا که تعامل با بلاکچین زمانبر است و ممکن است کاربر نیاز به امضا یا انتظار داشته باشد، رعایت نکات زیر مهم است:
- نمایش وضعیت تراکنش: از وضعیت "در انتظار"، "تأیید شده" و "خطا" با توست یا پیام استفاده کنید.
- پشتیبانی از شبکهها: امکان انتخاب شبکه یا هشدار تغییر شبکه در متامسک را فراهم کنید.
- کاهش پیچیدگی: تمام اطلاعات فنی مانند آدرسها و هشها را بهصورت دوستانه نمایش دهید.
- رسپانسیو بودن : UI باید در موبایل و دسکتاپ قابل استفاده باشد.
- استفاده از Spinner/Loader: هنگام ارسال تراکنشها تا زمان تأیید، رابط کاربر را مطلع نگه دارید.
توسعه یک dApp با سالیدیتی نیازمند ترکیب قراردادهای هوشمند با رابطهای کاربری تعاملی است. با استفاده از Ethers.js یا Web3.js برای اتصال، MetaMask برای تأیید تراکنشها، و رعایت اصول طراحی UX، میتوانید اپلیکیشنهایی بسازید که هم امن هستند و هم تجربه کاربری بالایی دارند. راهاندازی یک dApp ساده، گام بزرگی برای ورود حرفهای به دنیای Web3 محسوب میشود.