پرش به مطلب اصلی

قرارداد زر

دامنه این صفحه

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

​​

مقدمه

قرارداد زر یک قرارداد توکن ERC20 روی شبکه آربیتروم است و حسابداری موجودی کاربران زر را نگهداری می‌کند. اکثر توابع استفاده‌شده برای یک توکن که عرضه آن در حال تغییر است، استاندارد هستند. نکته قابل ذکر این است که این قرارداد این قابلیت را دارد که انتقال‌هایی که پیام‌ آن‌ها از قبل امضا شده است را نیز تأیید کند.

جزئیات قرارداد

توابع اصلی

  • Mint: ضرب کردن زر برای یک آدرس مشخص
  • Burn: سوزاندن زر برای یک آدرس مشخص
  • Approve: تأیید انتقال
  • Permit: مجوز انتقال با استفاده از پیام امضا شده
  • name: نام توکن سیستم زربان
  • symbol: نماد توکن زر، ZAR
  • version: نسخه
  • decimals: تعداد رقم اعشار که برابر ۱۸ است
  • totalSupply: مجموع عرضه
  • balanceOf: موجودی زر یک آدرس مشخص
  • allowance: تأییدیه
  • nonces: مقدار تصادفی مورد نیاز برای Permit
  • wad: مقدار ریزدانه اعشار توکن بر مبنای نمایش دهدهی

سازوکار و مفاهیم کلیدی

زر در قرارداد ، zar.sol به‌عنوان یک توکن ERC20 روی شبکه آربیتروم عمل می‌کند. توضیحات لازم برای توکن زر در اینجا آورده شده است. اما توصیه می‌شود برای آشنایی با عملکردهای اصلی این نوع از توکن‌ها استاندارد اصلی ERC20 را نیز مطالعه کنید.

تفاوت‌های اساسی آن با سایر ERC20ها

TransferFrom: در قرارداد زر به شکل کمی متفاوت از تابع معمولی transferFrom به شکل استاندارد استفاده می‌شود. در این قرارداد اجازه "تأیید نامحدود" نیز داده می‌شود. به این صورت که اگر کاربر آدرسی را برای حداکثر مجاز در مقدار داده uint256 تأیید کند، آن آدرس اجازه این مقدار تأیید نامحدود را خواهد داشت، تا زمانی که خلاف آن دستور داده نشود . ۲. تابع Permit مجوز یک تابع تأیید مبتنی بر پیام امضا شده است. این تابع به کاربر اصلی اجازه می‌دهد پیامی را امضا کند که طرف دیگر بتواند آن را روی شبکه ثبت کند. این کار می‌تواند برای جاهایی مفید باشد که در آن نیازی نیست کاربر اصلی اتر پرداخت کند.

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

نکات

  • مجوز مبلغ نامحدود یک عمل غیرمعمول است (اگرچه رایج است). یک قرارداد مخرب می‌تواند از همین مجوز برای فریب کاربر و دست یافتن به همه زر او استفاده کند. این تابع مربوط به قراردادهای قابل ارتقا است که در آن قرارداد تا زمانی که به یک قرارداد مخرب ارتقا یابد، بی‌عیب به نظر می‌رسد. در واقع زر مستعد شرایط امنیتی شناخته شده استاندارد ERC20 است، اما معمولاً نباید مشکلی با تأیید نامحدود وجود داشته باشد. تیم ما وظیفه خود می‌داند به کاربرانی که از این تأییدیه برای مبلغ مشخصی استفاده می‌کنند، توصیه کنیم که صرفاً از این موضوع خاص آگاه باشند و هنگام مجاز کردن قراردادهای دیگر برای انجام نقل و انتقالات از طرف خود، احتیاط کنند.

  • نکته دیگر در مورد عملکرد transferFrom وجود دارد. به این صورت که اگر src == msg.sender باشد، این تابع نیازی به approval ندارد و آن را به‌عنوان یک انتقال عادی از msg.sender به آدرس مقصد در نظر می‌گیرد.