اولین کاربرد مهم قرارداد هوشمند (Smart Contract) در سال ۲۰۱۷ و به شکل توکنها جلوه کرد. بسیاری از ۱۰۰ ارز دیجیتال برتر در آن زمان، توکنهایی بر بستر بلاک چین اتریوم بودند.
برای مثال، ترون و بایننس کوین هر دو قبل از آن که بلاک چینهای مختص به خود را توسعه دهند، توکنهایی بر بستر اتریوم بودند.
چگونه میتوان با استفاده از قرارداد هوشمند توکن ایجاد کرد؟
توکنها در قرارداد هوشمند تعریف میشوند. قرارداد هوشمند توکن پس از اجرا شدن، تمام آدرسهایی که دارای توکن هستند و همچنین مقدار توکنهای آدرس را رصد و پیگیری میکند. همچنین عملکردهایی را ارائه میدهد تا انتقال توکنها به سایر آدرسها را امکانپذیر سازند.
مقدار توکنهایی که در اختیار هر شخص است در قرارداد هوشمند نگهداری میشود نه در خود بلاک چین؛ بنابراین برای متوجه شدن مقدار توکنهای یک آدرس، باید در قرارداد هوشمند این موضوع را جستجو کنیم. این تفاوتی است که باید بشناسیم و مدنظر قرار دهیم.
هنگامی که در صدد متوجه شدن مقدار اتر در یک آدرس هستیم، در واقع در بلاک چین در حال جستجو میباشیم.
بنابراین برای آن که بدانیم یک کیف پول چه مقدار اتر و توکن در اختیار دارد، باید تمام آدرسهایی که قرارداد هوشمند توکن بر روی آنها اجرا شده است را بشناسیم.
نمونهای از کد توکن با قرارداد هوشمند
فرض کنید میخواهیم توکنی ایجاد کنیم و اسمی بر روی آن بگذاریم و تعیین کنیم تا چه حد تفکیک پذیر است؛ یعنی تا چند رقم اعشار تفکیک میشود و کل موجودی آن چه مقدار باشد.
ما میخواهیم که دارندگان توکن مورد نظر بتوانند توکنهای خود را به سایر آدرسها انتقال دهند؛ بنابراین به تابع انتقال نیاز داریم. همچنین میخواهیم بدانیم که هر آدرس چه مقدار توکن در اختیار دارد.
قرارداد هوشمند بدین شکل خواهد بود:
- کانستراکتور (Constructor یا تابع سازنده) در خط ۱۲ پارامترها را دریافت میکند و کوین مورد نظر را ایجاد میکند.
- طی ساخت توکن، خط ۱۷ تمام توکنها را به اجرا کننده قرارداد ارسال میکند.
- استفاده از ()balanceOf در خط ۲۰ نشان میدهد که آدرس مورد نظر چه مقدار توکن در اختیار دارد.
- تابع ()transfer ابتدا بررسی میکند که هر دو آدرس معتبر باشند، سپس بررسی میکند که کالر (caller یا فراخواننده) تابع، توکنهای کافی برای ارسال داشته باشد. سپس با کاهش دادن مقدار توکنهای در اختیار ارسال کننده و افزایش آن مقدار به دریافت کننده، انتقال را در خط های ۲۹ و ۳۰ انجام میدهد.
کد کیف پول
در مقالههای گذشته، قرارداد هوشمندی نوشتیم که میتوانست اتر را حفظ، دریافت و ارسال کند. اما نمیتوانست توکنهای را انتقال دهد؛ زیرا همانطور که اشاره کردیم، آدرس قرارداد هوشمند توکن باید برای آن قرارداد شناخته شده باشد.
کد زیر، قرارداد اصلی MyWallet از مقاله قبلی است.
عملکرد و تابع انتقال توکن جدید خود را به آن اضافه میکنیم.
خط ۸ متغیر جدیدی به اسم tokenAddress را نشان میدهد که هنگام ایجاد کردن کیف پول در کانستراکتور قرار دادیم.
همچنین مشخصات فنی قرارداد MyToken را در خط ۳ وارد کردیم.
خط ۲۴ تابع جدیدی به اسم ()sendToken را نشان میدهد که از مشخصات فنی MyToken استفاده میکند تا tokenAddress را بارگذاری کند و تابع ()transfer را فراخوانی کند.
اکنون کیف پول ما میتواند اتر و توکن ما را حفظ، دریافت و ارسال کند.
استاندارد قرارداد هوشمند ERC-20
برای اطمینان از این که تمام کیف پولهای اتریوم میتوانند به میزان نامحدود توکن نگهداری کنند، یک استاندارد کدنویسی وجود دارد من توکنها باید رعایت کنند.
این استاندارد، ERC20 نام دارد و حداقل پیش نیازهای ضروری برای توابع و متغیرهایی را بیان میکند که توکن شما باید داشته باشد تا توسط کیف پول های ERC-20 پشتیبانی شود.
تشبیهی از بلاک چین و توکنهای اتریوم
اگر بلاک چین اتریوم را بدن انسان در نظر بگیریم، اتر خون آن است. تمام تراکنشها هزینهای به صورت اتر دارند. این هزینه ها به صورت گس (Gas) پرداخت میشود که بخش کوچکی از اتر است.
با توجه به این تشبیه، توکنهای ERC20 همانند لباس هستند. این توکنها اساسا متکی به بدن و خون مورد نظر هستند اما نکتهای متفاوت را ارائه میدهند؛ مکانیزم مورد استفاده برای انتقال اتر از یک آدرس به آدرس دیگر با مکانیزم مورد استفاده برای انتقال توکنهای ERC20 متفاوت است، زیرا این توکنها بخش مشابهی از یک بدن نیستند. این توکنها، قرارداد هوشمند هستند که بر بستر بلاک چین اجرا میشوند.
منبع: