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