ظهور تکنولوژی بلاکچین نحوه تفکر ما درباره دادهها، تراکنشها و اعتماد را تغییر داده است. از میان نوآوریهای مختلف در این فضا، برنامههای غیرمتمرکز (DApp) به عنوان یکی از مهمترین پیشرفتها شناخته میشوند. DAppها بر روی شبکههای غیرمتمرکز کار میکنند و از این رو شفافیت، امنیت و مقاومت در برابر کنترل یا سانسور را نسبت به برنامههای متمرکز سنتی ارائه میدهند.
اتریوم که در سال ۲۰۱۵ راهاندازی شد، به عنوان یک پلتفرم پیشرو برای توسعه DAppها شناخته میشود. قابلیتهای قراردادهای هوشمند آن به توسعهدهندگان این امکان را میدهد تا راهحلهای پیچیده و غیرمتمرکز ایجاد کنند که به صنایع مختلفی از جمله امور مالی، بازیها و دیگر زمینهها پاسخ میدهند.
این راهنما یک گام به گام دقیق برای ساخت یک DApp ساده بر روی اتریوم ارائه میدهد. ما تمام ابزارهای لازم از جمله Truffle و MetaMask را پوشش خواهیم داد و به نوشتن و استقرار یک قرارداد هوشمند ساده خواهیم پرداخت. در پایان این راهنما، شما یک DApp کاملاً کاربردی را در یک شبکه تست (testnet) استقرار دادهاید و دانش پایهای لازم برای ساخت راهحلهای پیچیدهتر بلاکچین را خواهید داشت.
DApp چیست؟

یک برنامه غیرمتمرکز (DApp) نوعی نرمافزار است که از تکنولوژی بلاکچین یا یک شبکه همتا به همتا (P2P) برای عملیات پشتیبان استفاده میکند. برخلاف برنامههای سنتی که به سرورهای متمرکز برای ذخیرهسازی دادهها و مدیریت آنها وابسته هستند، DAppها از شبکههای توزیعشده استفاده میکنند که آنها را امنتر و مقاومتر در برابر خرابی یا دستکاری میکند.
ویژگیهای DAppها
- غیرمتمرکز بودن: DAppها بر روی بلاکچین غیرمتمرکز کار میکنند به جای سرور متمرکز. این باعث میشود که هیچ نقطهای برای خرابی واحد وجود نداشته باشد.
- شفافیت: منطق برنامه در قراردادهای هوشمند کدگذاری میشود که به صورت عمومی قابل دسترسی و حسابرسی هستند.
- عدم تغییر: پس از استقرار، قراردادهای هوشمند قابل تغییر نیستند که این موضوع یکپارچگی برنامه را تضمین میکند.
- متن باز بودن: بسیاری از DAppها متن باز هستند که باعث تشویق همکاری و نوآوری در جامعه توسعهدهندگان میشود.
انواع DAppها
DAppها بر اساس نوع کاربرد خود میتوانند دستهبندی شوند:
- DAppهای مالی: پلتفرمهایی مانند صرافیهای غیرمتمرکز (DEX) یا پروتکلهای قرضدهی.
- بازیها: بازیهای مبتنی بر بلاکچین با اقتصاد درون بازی.
- هویت: DAppهایی که هویت دیجیتال و احراز هویت را مدیریت میکنند.
- شبکههای اجتماعی: پلتفرمهای غیرمتمرکز برای ارتباطات و اشتراکگذاری.
چرا اتریوم؟
اتریوم به عنوان پلتفرم اصلی برای توسعه DAppها به دلیل اکوسیستم گسترده توسعهدهندگان، زیرساختهای مستحکم و قابلیتهای قرارداد هوشمند پیشرفته خود محبوب است. این پلتفرم ابزارهایی مانند Truffle و Remix را ارائه میدهد که فرآیند ساخت و آزمایش DAppها را سادهتر میکند.
پیشنیازهای ساخت Dapp
قبل از شروع به توسعه DApp، لازم است محیط توسعه خود را آماده کرده و با مفاهیم و ابزارهای خاصی آشنا شوید:
- دانش پایهای از برنامهنویسی:
- آگاهی از جاوااسکریپت بسیار مهم است چرا که کتابخانه Web3 اتریوم و توسعه فرانتاند به شدت به آن وابسته است.
- آشنایی با Solidity، زبان برنامهنویسی اصلی برای نوشتن قراردادهای هوشمند اتریوم، نیز مفید خواهد بود.
- ابزارهای توسعه:
- Node.js : محیط اجرای جاوااسکریپت که به شما این امکان را میدهد تا کد جاوااسکریپت را در سمت سرور اجرا کنید.
- Npm : مدیر بستههای Node که برای نصب و مدیریت وابستگیها استفاده میشود.
- راهاندازی کیف پول:
- MetaMask: افزونه مرورگر که به عنوان یک کیف پول اتریوم عمل کرده و امکان تعامل با DAppها را فراهم میکند.
- ابزارهای آزمایشی:
- Ganache : بلاکچین محلی برای توسعه و آزمایش که به شما این امکان را میدهد بدون هزینه تراکنشها، عملیات را شبیهسازی کنید.
- شبکه آزمایشی اتریوم:
- شبکههای آزمایشی مانند Ropsten،Goerli یا Sepolia محیطی امن برای استقرار و آزمایش DAppها فراهم میکنند.
مرحله 1: تنظیم محیط توسعه
این مرحله شامل آمادهسازی کامپیوتر شما برای توسعه DApp است با نصب ابزارها و وابستگیهای لازم.
- نصب Node.js و npm
Node.js یک محیط اجرایی برای اجرای کد جاوااسکریپت خارج از مرورگر است. npm به همراه Node.js نصب میشود و به عنوان مدیر بسته عمل میکند.
- Node.js را دانلود کنید. نسخه LTS (پشتیبانی بلندمدت) برای ثبات بهتر انتخاب خوبی است.
- پس از نصب، اطمینان حاصل کنید که Node.js و npm به درستی نصب شدهاند:
- نصب Truffle Suite
Truffle یک فریمورک توسعه قدرتمند برای اتریوم است که کارهایی مانند نوشتن، تست و استقرار قراردادهای هوشمند را ساده میکند.
Truffle قالبهای از پیش پیکربندیشدهای برای راهاندازی سریع پروژه فراهم میآورد و فرآیند توسعه را ساده میکند.
- نصب Ganache
Ganache یک بلاکچین محلی برای تست است که به شما این امکان را میدهد تا بدون پرداخت هزینه گس (Gas)، بلاکچین را شبیهسازی کنید.
- Ganache را از وبسایت Truffle Suite دانلود کنید.
- پس از نصب، Ganache را راهاندازی کرده و جزئیات سرور RPC را یادداشت کنید.
- نصب MetaMask
MetaMask یک افزونه مرورگر است که به عنوان یک کیف پول اتریوم عمل کرده و امکان تعامل با DAppها را فراهم میکند.
- MetaMask را از وبسایت MetaMask.io دانلود کرده و به عنوان افزونه مرورگر نصب کنید.
- یک کیف پول جدید بسازید و عبارت seed خود را به صورت امن ذخیره کنید.
- MetaMask را به شبکه آزمایشی اتریوم مانند Ropsten یا Goerliتنظیم کنید.
مرحله 2: نوشتن قرارداد هوشمند
قراردادهای هوشمند پشتصحنه DAppها را تشکیل میدهند. این برنامهها به زبان Solidity نوشته شدهاند که روی ماشین مجازی اتریوم (EVM) اجرا میشوند.
- راهاندازی یک پروژه Truffle
- یک پوشه جدید برای پروژه DApp خود بسازید:
- یک پروژه Truffle جدید راهاندازی کنید:
فرآیند راهاندازی یک ساختار استاندارد پروژه شامل پوشههایی برای قراردادها، مهاجرتها و تستها ایجاد میکند.
- ایجاد قرارداد هوشمند
در پوشه contracts یک فایل جدید به نام HelloWorld.sol بسازید و کد زیر را وارد کنید:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract HelloWorld {
string public message;
constructor(string memory _message) {
message = _message;
}
function updateMessage(string memory _newMessage) public {
message = _newMessage;
}
}
این قرارداد شامل موارد زیر است:
- متغیر عمومی message.
- یک سازنده که پیام را مقداردهی اولیه میکند.
- یک تابع برای بهروزرسانی پیام.
- کامپایل قرارداد هوشمند
برای اطمینان از صحت کد قرارداد هوشمند، آن را کامپایل میکنیم.
- در ترمینال، دستور زیر را در پوشه پروژه اجرا کنید:
truffle compile
این دستور قراردادهای نوشتهشده در پوشه contracts را به بایتکد تبدیل میکند که توسط ماشین مجازی اتریوم (EVM) قابل اجرا است.
در صورت موفقیتآمیز بودن کامپایل، یک پوشه جدید به نام build ایجاد میشود که حاوی فایلهای JSON با اطلاعات مربوط به قراردادهای کامپایلشده است.
مرحله 3: استقرار قرارداد هوشمند
پس از کامپایل، گام بعدی استقرار قرارداد هوشمند بر روی بلاکچین است. ابتدا، یک فایل مهاجرت (migration) ایجاد کرده و سپس از Ganache یا شبکه آزمایشی برای این کار استفاده میکنیم.
1. ایجاد فایل مهاجرت
Truffle از اسکریپتهای مهاجرت برای مدیریت استقرار قراردادها استفاده میکند. در پوشه migrations، یک فایل جدید به نام 2_deploy_contracts.js ایجاد کنید و محتوای زیر را اضافه کنید:
const HelloWorld = artifacts.require(“HelloWorld”);
module.exports = function (deployer) {
deployer.deploy(HelloWorld, “Hello, Blockchain!”);
};
این فایل به Truffle میگوید که قرارداد HelloWorld را با پیام اولیه “Hello, Blockchain!” مستقر کند.
2. تنظیم شبکه در فایل پیکربندی
فایل truffle-config.js را باز کرده و شبکه Ganache را به صورت زیر تنظیم کنید:
module.exports = {
networks: {
development: {
host: “127.0.0.1”, // آدرس محلی Ganache
port: 7545, // پورت پیشفرض Ganache
network_id: “*”, // هر شناسه شبکهای
},
},
compilers: {
solc: {
version: “0.8.0”, // نسخه کامپایلر Solidity
},
},
};
3. استقرار قرارداد در Ganache
- اطمینان حاصل کنید که Ganache در حال اجرا است.
- در ترمینال، دستور زیر را اجرا کنید:
- truffle migrate –network development
این دستور قرارداد HelloWorld را در شبکه محلی Ganache مستقر میکند. پس از استقرار موفق، آدرس قرارداد در خروجی نمایش داده میشود.
مرحله 4: ساخت رابط کاربری Dapp
یک رابط کاربری (Frontend) برای تعامل با قرارداد هوشمند ایجاد میکنیم. از HTML، CSS و جاوااسکریپت استفاده خواهیم کرد.
- نصب Web3.js
Web3.js یک کتابخانه جاوااسکریپت برای تعامل با بلاکچین اتریوم است.
- نصب Web3.js:
- npm install web3
- ایجاد فایلهای فرانتاند
یک پوشه جدید به نام client ایجاد کنید و داخل آن فایلهای زیر را بسازید:
- index.html: ساختار اصلی صفحه.
- style.css: استایلها.
- app.js: منطق جاوااسکریپت.
محتوای index.html:
Hello DApp
Loading…
محتوای style.css:
body {
font-family: Arial, sans-serif;
text-align: center;
margin-top: 50px;
}
.container {
max-width: 600px;
margin: 0 auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 8px;
background-color: #f9f9f9;
}
محتوای app.js:
const contractAddress = “YOUR_CONTRACT_ADDRESS”;
const contractABI = [
// اینجا ABI تولیدشده در فایل JSON را جایگذاری کنید
];
let web3;
let contract;
window.onload = async () => {
if (window.ethereum) {
web3 = new Web3(window.ethereum);
await ethereum.request({ method: “eth_requestAccounts” });
contract = new web3.eth.Contract(contractABI, contractAddress);
// نمایش پیام فعلی
const message = await contract.methods.message().call();
document.getElementById(“message”).innerText = message;
// بهروزرسانی پیام
document.getElementById(“updateMessage”).onclick = async () => {
const newMessage = document.getElementById(“newMessage”).value;
const accounts = await web3.eth.getAccounts();
await contract.methods.updateMessage(newMessage).send({ from: accounts[0] });
document.getElementById(“message”).innerText = newMessage;
};
} else {
alert(“MetaMask is not installed!”);
}
};
مرحله 5: اجرای Dapp
- فایلهای index.html، style.css و app.js را در یک سرور محلی اجرا کنید. برای این کار میتوانید از افزونههای مرورگر یا ابزارهایی مانند http-server استفاده کنید:
- npm install -g http-server
- http-server ./client
- به آدرس http://localhost:8080 بروید و با DApp خود تعامل کنید.
کلام آخر
ساخت یک DApp ساده بر روی اتریوم فرصتی برای یادگیری اصول بلاکچین و توسعه برنامههای غیرمتمرکز است. در این راهنما، شما با نصب ابزارهای ضروری، نوشتن یک قرارداد هوشمند ساده، و ایجاد یک رابط کاربری اولیه آشنا شدید. این پروژه پایهای است که میتوانید آن را گسترش داده و DAppهای پیچیدهتر و کاربردیتر بسازید.
برای ادامه یادگیری، مفاهیمی مانند امنیت قرارداد هوشمند، مقیاسپذیری، و تعامل با دادههای خارج از زنجیره را بررسی کنید. اتریوم همچنان یکی از پرکاربردترین پلتفرمها برای نوآوری در فضای بلاکچین است و ابزارهای زیادی برای حمایت از توسعهدهندگان ارائه میدهد.