منو
پنل کاربری

چگونه با استفاده از ترافل و اوپن زپلین قراردادهای عرضه‌ی اولیه‌ی توکن ایجاد کنیم ؟

نحوه ایجاد توکن و سکه اولیه
تاریخ انتشار : 14 / اسفند / 1401
نویسنده : وایت وال

اگر می‌خواهید منابع، استراتژی‌ها و مطالب جدیدی در مورد زبان برنامه نویسی سالیدیتی به دست بیارید، می تونید مقاله آموزش سالیدیتی رو در وب سایت وایت وال مطالعه کنید.

قرارداد توکن موضوعی پر طرفدار است اما فروش کلی توکن یا همان عرضه‌ی اولیه‌ی توکن (ICO) پرطرفدارتر است. اخیراً در دنیای کریپتو چیزهای زیادی در مورد ICOها شنیده می شود و اگر شما قصد دارید خودتان عرضه ایی را کدنویسی کنید، جای درستی آمده اید.

در این مقاله من قصد دارم مراحل ایجاد توکن خود و قرارداد ICO آن را توضیح دهم. ما حتما از  ابزارهای هوشمندانه استفاده خواهیم کرد.

برای این آموزش من از ترافل و سالیدیتی زپلین استفاده می کنم. ترافل چارچوب عملی برای ایجاد قراردادهای هوشمند و برنامه های کاربردی غیرمتمرکز است. سالیدیتی زپلین کتابخانه ای است که حاوی قراردادهای هوشمند گسترده و آزمایش شده است که به بهترین شیوه های امنیتی پایبند است.

در دنیای قراردادهای هوشمند که یک ایراد کوچک می تواند برای شما هزینه بردار  باشد، بهتر است وقتی راه حل قابل اعتمادی وجود دارد،  دوباره کاری نکنید.

در اینجا ما از ganache-cli به عنوان گره بلاک چین استفاده می کنیم چون سریع و سازگار با توسعه دهندگان است.

نکته جانبی: اگر می‌خواهید قرارداد را در شبکه آزمایشی اتریوم یا شبکه اصلی ایجاد کنید، باید از چیزی مثل Geth یا Parity استفاده کنید.

ادامه: اول npm و node را نصب کنید، دستورات را تایپ کنید:

$ npm install -g ganache-cli
$ npm install -g truffle
$ mkdir my-ico && cd my-ico
$ truffle init
$ npm install openzeppelin-solidity@2.0.0

جادوهای زیادی با دستور بالا اتفاق افتاد. اما در اصل این راه اندازی است که شما با ایجاد و استقرار قرارداد هوشمند ICO راه اندازی می کنید.

با این کار پوشه openzeppelin-solidity را به node_modules اضافه می کنید و در آن همه قالب های قرارداد هوشمند را در کتابخانه OpenZeppelin Solidity پیدا خواهید کرد.

قدم اول ایجاد قرارداد توکن است.

touch contracts/GustavoCoin.sol

و برای کد

pragma solidity 0.4.24;
import 'openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol';
contract GustavoCoin is ERC20Mintable {
string public name = "GUSTAVO COIN";
string public symbol = "GUS";
uint8 public decimals = 18;
}

این یک قرارداد نمادین مشخص است. ما عملاً به قالب‌های قرارداد هوشمند سالیدیتی زپلین اجازه می‌دهیم همه وظایف سنگین را برای ما انجام دهند. در اینجا ما به MintableToken اشاره می کنیم. بهتر است توکنی داشته باشیم که در آن عرضه توسط مالکی کنترل شود که بتواند توکن ها را منتشر کند و آنها را واگذار کند. جهت بررسی بهتر عملکرد این قرارداد ،می توانید رجوع کنید به

node_modules/zeppelin-solidity/contracts/token/ERC20/MintableToken.sol

مرحله زیر نحوه ایجاد قرارداد Crowdsale  را نشان می دهد.

touch contracts/GustavoCoinCrowdsale.sol

ما اساساً قرارداد را به ارث می بریم از node_modules/zeppelin-solidity/contracts/crowdsale/emission/MintedCrowdsale.sol و node_modules/zeppelin-solidity/contracts/crowdsale/validation/TimedCrowdsale.sol

در نهایت فقط کد زیر را دریافت می کنیم.

زیباست نه؟ ما از قراردادهای امن ارائه شده توسط سالیدیتی زپلین به نفع خود استفاده می کنیم. توجه داشته باشید که GustavoCoinCrowdsale از TimedCrowdsale و MintedCrowdsale به ارث می برد. برای استقرار GustavoCoinCrowdsale، باید طبق قراردادهای Crowdsale و TimeCrowdsale، چند پارامتر به عملکرد سازنده آن بدهیم، یعنی مهرهای زمانی openTime و closingTime، نرخ توکن به ازای نرخ اتر، خود آدرس توکن و آدرس کیف پول صاحب قرارداد(ها).

اجازه بدید این قرارداد را اجرا کنیم. یک تب ترمینال جدید باز و اجرا کنید.

$ ganache-cli

ganache-cli را اجرا خواهد کرد و  ما از آن برای نیازهای توسعه ایی خود استفاده می کنیم.

ابتدا اجازه دهید این را به فایل truffle.js اضافه کنیم. برای پیکربندی:

truffle.js:
module.exports = {
networks: {
development: {
host: "localhost",
port: 8545,
network_id: "*" // Match any network id
}
}
};

سپس، به فایل migrations/2_deploy_contracts.js (شاید نیاز به ایجاد آن داشته باشید) بروید و آن را به این شکل تغییر دهید:

توجه داشته باشید که ما از GustavoCoin استفاده نمی کنیم. به این دلیل که به محض اینکه GustavoCoinCrowdsale مستقر شود GustavoCoin را ایجاد می کند. اکنون به برگه ترمینال که Truffle را نصب کرده اید بازگردید، دستورات را اجرا کنید:

$ truffle compile
$ truffle migrate

اگر به برگه ganache-cli نگاه کنید، خواهید دید که قرارداد با موفقیت اجرا شده است.

خوب، اجازه بدید چند توکن GUS بخریم.

$ truffle console را اجرا کنید.

با این کار کنسول ترافل باز می شود و ما از web3.js API برای تعامل با قرارداد مستقر شده استفاده می کنیم.

// The account that will buy GUS tokens. It will show differently in your ganache-cli console> purchaser = web3.eth.accounts[2]
'0xddac5d057c79facd674bc95dfd9104076fd34d6b'// The address of the GUS token instance that was created when the crowdsale contract was deployed
// assign the result of GustavoCoinCrowdsale.deployed() to the variable crowdsale
> GustavoCoinCrowdsale.deployed().then(inst => { crowdsale = inst })
undefined> crowdsale.token().then(addr => { tokenAddress = addr } )
undefined> tokenAddress
'0x87a784686ef69304ac0cb1fcb845e03c82f4ce16'> gustavoCoinInstance = GustavoCoin.at(tokenAddress)
...// add minter role to crowdsale so it is able to mint tokens during crowdsale
> gustavoCoinInstance.addMinter(crowdsale.address)
...// now check the number of GUS tokens purchaser has. It should be 0> gustavoCoinInstance.balanceOf(purchaser).then(balance => balance.toString(10))
'0'// Buying GUS tokens> GustavoCoinCrowdsale.deployed().then(inst => inst.sendTransaction({ from: purchaser, value: web3.toWei(5, "ether")}))
{ tx: '0x68aa48e1f0d0248835378caa1e5b2051be35a5ff1ded82878683e6072c0a0cfc',
  receipt:
   { transactionHash: '0x68aa48e1f0d0248835378caa1e5b2051be35a5ff1ded82878683e6072c0a0cfc',
     transactionIndex: 0,
     blockHash: '0xb48ceed99cf6ddd4f081a99474113c4c16ecf61f76625a6559f1686698ee7d57',
     blockNumber: 5,
     gasUsed: 68738,
     cumulativeGasUsed: 68738,
     contractAddress: null,
     logs: [] },
  logs: [] }
undefined// Check the amount of GUS tokens for purchaser again. It should have some now.> gustavoCoinInstance.balanceOf(purchaser).then(balance => purchaserGusTokenBalance = balance.toString(10))
'5000000000000000000000'// When we created our token we made it with 18 decimals, which the same as what ether has. That's a lot of zeros, let's display without the decimals:> web3.fromWei(purchaserGusTokenBalance, "ether")
'5000'

هوراااا!!!! درست انجام شد.

می پرسی بعد از اینجا کجا برویم؟

می‌تونید این کد را در شبکه آزمایشی اتریوم تست کنید، یا می‌توانید یک برنامه وب ایجاد کنید که به کاربران اجازه می‌دهد با قرارداد CrowdsaleToken تعامل داشته باشند، می‌توانید قابلیت‌های بیشتری مانند موعد مقرر، کپ توکن و غیره به خود قرارداد اضافه کنید.

سازنده توکن درونی خود را آزاد کنید.

جامعه اتریوم روز به روز رشد می کند و اگرچه هنوز ابزارهای زیادی وجود ندارد، اما ابزارهایی مانند ترافل و سالیدیتی زپلین کار بزرگی در بهبود تجربه توسعه دهندگان انجام می دهند.

من کنجکاو هستم که بدانم از اینجا چه چیزی را کدنویسی خواهید کرد.

4.7/5 - (8 امتیاز)


آموزش های مرتبط

دوره های آموزشی
آموزش ساخت توکن و ایردارپ در سالیدیتی

آموزش ساخت توکن و ایردراپ در سالیدیتی

پیشرفته
04:30:00
4 تیر
3,200,000 تومان
آموزش ساخت بازی در بلاکچین با سالیدیتی

آموزش ساخت بازی در بلاکچین با سالیدیتی

پیشرفته
05:40:00
21 خرداد
7,000,000 تومان
دوره آموزش مقدماتی سالیدیتی

آموزش مقدماتی سالیدیتی

مبتدی
05:47:00
29 مرداد
1,000,000 تومان

آموزش های پیشنهادی

آموزش های رایگان
آموزش سالیدیتی

آموزش برنامه نویسی بلاکچین در سال 2023

مبتدی
10 دقیقه
12 بهمن
رایگان :)
انواع متغیر در سالیدیتی

آموزش متغیرها در سالیدیتی

متوسط
22 دقیقه
22 تیر
رایگان :)
توکنومیک چیست ؟

توکنومیک چیست ؟

مبتدی
8 دقیقه
14 دی
رایگان :)

دیدگاه ها

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

در کنار یکدیگر بیاموزیم