قرارداد زر
مقدمه
قرارداد زر یک قرارداد توکن ERC20 روی شبکه آربیتروم است و حسابداری موجودی کاربران زر را نگهداری می کند. اکثر توابع استفاده شده برای یک توکن که عرضه آن در حال تغییر است، استاندارد هستند. نکته قابل ذکر این است که این قرارداد این قابلیت را دارد که انتقالهایی که پیام آنها از قبل امضا شده است را نیز تایید کند.
جزییات قرارداد
توابع اصلی
Mint
: ضرب کردن زر برای یک آدرس مشخصBurn
: سوزاندن زر برای یک آدرس مشخصApprove
: تایید انتقالPermit
: مجوز انتقال با استفاده از پیام امضا شدهname
: نام توکن سیستم زربانsymbol
: نماد توکن زر، ZARversion
: نسخهdecimals
: تعداد رقم اعشار که برابر 18 استtotalSupply
: مجموع عرضهbalanceOf
: موجودی زر یک آدرس مشخصallowance
: تاییدیهnonces
: مقدار تصادفی مورد نیاز برایPermit
wad
: مقدار ریزدانه اعشار توکن بر مبنای نمایش دهدهی
مکانیسم و مفاهیم کلیدی
زر در قرارداد ،
zar.sol
به عنوان یک توکن
ERC20
روی شبکه آربیتروم عمل می کند. توضیحات لازم برای توکن زر در اینجا آورده شده است. اما توصیه میشود برای آشنایی با عملکردهای اصلی این نوع از توکنها استاندارد اصلی
ERC20
را نیز مطالعه کنید.
تفاوتهای اساسی آن با سایر ERC20ها
TransferFrom
: در قرارداد زر به شکل کمی متفاوت از تابع معمولیtransferFrom
به شکل استاندارد استفاده میشود. در این قرارداد اجازه "تایید نامحدود" نیز داده میشود. به این صورت که اگر کاربر آدرسی را برای حداکثر مجاز در مقدار دادهuint256
تأیید کند، آن آدرس اجازه این مقدار تأیید نامحدود را خواهد داشت، تا زمانی که خلاف آن دستور داده نشود .- تابع
Permit
مجوز یک تابع تایید مبتنی بر پیام امضا شده است. این تابع به کاربر اصلی اجازه میدهد تا پیامی را امضا کند که میتواند توسط طرف دیگر برای ارسال روی شبکه ثبت شود. اینکار می تواند برای جاهایی مفید باشد که در آن نیازی نیست کاربر اصلی اتر پرداخت کند.- برای استفاده از این قابلیت، کاربر باید پیامی را شامل مالک، مصرف کننده، نانس، تاریخ انقضا و مبلغ مجاز امضا کند. سپس آن را به
Permit
ارسال میکند. در این صورت این قرارداد مجوز انجام تراکنش کاربر را با توجه به پارامترهای تایید شده را خواهد داشت.
- برای استفاده از این قابلیت، کاربر باید پیامی را شامل مالک، مصرف کننده، نانس، تاریخ انقضا و مبلغ مجاز امضا کند. سپس آن را به
نکات
مجوز مبلغ نامحدود یک عمل غیر معمول است (اگرچه رایج است). این مجوز می تواند همان چیزی باشد که برای فریب یک کاربر توسط یک قرارداد مخرب به منظور دسترسی به تمام زر آنها استفاده شود. این تابع مربوط به قراردادهای قابل ارتقا است که در آن قرارداد تا زمانی که به یک قرارداد مخرب ارتقا یابد، بی عیب به نظر میرسد. در واقع زر مستعد شرایط امنیتی شناخته شده استاندارد ERC20 است، اما معمولاً نباید مشکلی با تأیید نامحدود وجود داشته باشد. تیم ما وظیفه خود میداند به کاربرانی که از این تأییدیه برای مبلغ مشخصی استفاده میکنند، توصیه کنیم که صرفا از این موضوع خاص آگاه باشند و هنگام مجاز کردن قراردادهای دیگر برای انجام نقل و انتقالات از طرف خود، احتیاط کنند.
نکته دیگر در مورد عملکرد
transferFrom
وجود دارد. به این صورت که اگرsrc == msg.sender
باشد، این تابع نیازی بهapproval
ندارد و آن را به عنوان یک انتقال عادی ازmsg.sender
به آدرس مقصد در نظر می گیرد.