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

قرارداد مدیر CDP

مقدمه

قرارداد مدیر ‍CDP یک فرآیند رسمی برای انتقال صندوق‌ها به عنوان مثال در انتقال دارایی‌ها بین مالکان است. توصیه می‌شود که تمام تعاملات با صندوق‌ها از طریق مدیر CDP انجام شود. پس از اینکه وثیقه باز شده به زربان سپرده شد، کاربران می‌توانند از ویژگی‌های زیر استفاده کنند:

  • مالکیت چندگانه برای صندوق‌ها و شناسایی (کاربران می‌توانند N تعداد از صندوق‌ها را داشته باشند)
  • قابلیت انتقال صندوق‌ها

توجه: کاربر یک صندوق‌ می‌تواند برای تعامل با مدیر CDP از طریق پروکسی اقدام کند، اما امکان استفاده مستقیم از قرارداد مدیر CDP نیز وجود دارد.

عملکردهای کلیدی

  • cdpAllow: اجازه/عدم اجازه به یک آدرس کاربر برای مدیریت cdp
  • urnAllow: اجازه/عدم اجازه به یک آدرس کاربر برای تعامل با urnها به منظور ورود (src) یا خروج ( dst )
  • open: یک صندوق جدید برای کاربر با استفاده از نوع وثیقه ilk باز می‌کند
  • give: انتقال cdp به آدرس مقصد
  • frob: افزایش/کاهش مقدار ink از وثیقه مسدود شده و افزایش/کاهش مقدار art از بدهی در cdp با تولید زر تولید شده یا تضمین رایگان در آدرس cdp
  • frob: افزایش/کاهش مقدار ink از وثیقه مسدود شده و افزایش/کاهش مقدار art از بدهی در cdp با تولید زر تولید شده یا تضمین رایگان در یک آدرس مشخص آدرس مقصد. ( توضیحات این تابع را می‌توانید در ادامه این مستند ببینید.)
  • flux: انتقال مقدار wad (با دقت اعشار 18) از نوع وثیقه ilk از cdp به آدرس مقصد.
  • move: انتقال مقدار rad (با دقت اعشار 45) زر از cdp به آدرس مقصد.
  • quit: انتقال وثیقه مسدود شده و بدهی تولید شده از cdp به آدرس مقصد.

چیدمان ذخیره‌سازی

  • vat: آدرس قرارداد هسته که صندوق‌ها را نگه می‌دارد
  • cdpi: شناسه که به صورت خودکار افزایشی است.
  • urns: یک نگاشت از `CDPId به UrnHandler
  • list: یک نگاشت CDPId به CDPId ها قبلی و بعدی
  • owns: یک نگاشت ازCDPId به owner
  • ilks: یک نگاشت از CDPId بهIlk (نوع وثیقه)
  • first: یک نگاشت از owner به FirstCDPId
  • last: یک نگاشت از owner به LastCDPId
  • count: یک نگاشت از owner تعداد CDPها
  • allows: یک نگاشت تودرتو از نگاشت‌های مختلف ‍ Owner => CDPId => Allowed Addr => True/False است.

مفاهیم و مکانیزم‌های کلیدی

مدیر CDP به‌عنوان راهی برای فعال کردن مبادله صندوق‌ها ایجاد شده است تا بیشتر شبیه دارایی‌های قابل مبادله باشند. بدون این قرارداد، قراردادهای هسته سیستم توکن زر عملکردی برای انتقال موقعیت های صندوق نداشتند. در کنار این ویژگی اصلی، اهداف زیر نیز با استفاده از این قرارداد قابل دسترسی هستند:

  • مدیر بعد از ایجاد یک قرارداد مدیریت صندوق‌ها آدرس آن را دریافت می کند که به عنوان یک قرارداد واسط بین آن و کاربران عمل می کند.
  • مدیر یک ثبت داخلی از نگاشت‌های mapping(id => owner) و mapping(id => urn) نگه می دارد که به مالک اجازه می دهد توابع قرارداد مدیریت صندوق‌ها را برای urn خود از طریق مدیر اجرا کند.
  • مدیر یک ساختار لیست پیوندی دوگانه را نگه می دارد که امکان بازیابی همه صندوق‌هایی را که مالک روی بلاکچین فراخوانی کند، می دهد. به طور خلاصه، این همان چیزی است که GetCdps باید انجام دهد. این قرارداد یک قرارداد کمکی است که امکان واکشی تمام صندوق‌ها را تنها در یک فراخوانی فراهم می کند.

یک کاربرد غالب مدیر ‍CDP

  • یک کاربر ‍open را اجرا می کند و در ازای آن یک CDPId دریافت می کند.
  • سپس، ‍CDPId با استفاده از یک urn با manager.urns(cdpId) مرتبط می شود و سپس وثیقه را به آن الحاق می کند.
  • سپس کاربر می تواند ‍frob را اجرا کند تا انتخاب کند که از کدام آدرس مقصد برای ارسال زر تولید شده استفاده کند.
  • اگر کاربر frob را بدون آدرس مقصد اجرا کند، زر تولید شده در آن urn Vault باقی خواهد ماند. در این صورت، کاربر می تواند آن را در زمان دیگری منتقل کند.
    • توجه داشته باشید که این همان فرآیندی است که برای وثیقه اجرا می‌شود که پس از frob آزاد می شود (برای تابع frob که به آدرس مقصد نیاز ندارد). کاربر می تواند آن را در زمان دیگری به آدرس دیگری ارسال کند.
  • در صورتی که کاربر بخواهد مدیر خود را ترک کند، می‌تواند از خروج به عنوان راهی برای انتقال موقعیت صندوق خود به آدرس مقصد دیگری استفاده کند.

خطاهای احتمالی

  • برای توسعه دهندگانی که می خواهند با مدیر در تعامل 1 باشند، باید بدانند که اقدامات صندوق هنوز در محیط urn هستند. صرف نظر از این که مدیر سعی می کند استفاده از urn را توسط CDPId انتزاعی 2 کند. این بدان معنی است که توسعه دهندگان باید

    urn (urn = manager.urns(cdpId))

    را دریافت کنند تا امکان اتصال وثیقه به آن صندوق را فراهم کند.

  • از آنجایی که مدیر به ازای CDPId یک ilk خاص را اختصاص می‌دهد و به دیگران اجازه نمی‌دهد از آن برای خود استفاده کنند، تابع flux دومی وجود دارد که یک پارامتر ilk را در ورودی دارد. این تابع هدف ساده‌ای دارد که ارتباط وثیقه ای را که به اشتباه به صندوقی فرستاده شده است و نمی توان آن را مدیریت کرد یا در حالت کلی ناسازگار است، را قطع کند.

تابع frob

  • هنگامی که شما در مدیر CDP تابعfrob را اجرا می کنید، زر جدیدی را در قرارداد مدیریت صندوق‌ها از طریق مدیر ‍CDP ایجاد می کنید که سپس در urn مدیریت شده توسط CDP سپرده می شود. این فرآیند بستگی به این دارد که از کدام تابع ‍frob استفاده می کنید (دو تابع frob وجود دارد که پارامترهای ورودی متفاوتی دارند اما عملکرد آنها یکسان است). به طور خلاصه، یکی به آدرس مقصد مجوز لازم را می‌دهد و دیگری به آن نیاز ندارد.
  • اگر از تابع ‍frob که دارای آدرس مقصد است استفاده می کنید، می توانید هر زر تولید شده یا وثیقه‌ای که آزاد شده است را ارسال کنید. تابع ‍frob دوم برای گذاشتن وثیقه در آدرس urn است، زیرا urn متعلق به مدیر CDP است. در این مورد، شما باید به صورت دستی از توابع flux یا move برای خارج کردن زر یا وثیقه استفاده کنید. این توابع ممکن است برای توسعه‌دهنده‌ای که با عملکرد پراکسی کار می‌کند سودمندتر باشد، زیرا انعطاف‌پذیری بیشتری را ممکن می‌سازد. به عنوان مثال، با استفاده از این توابع می توانید مقدار مشخصی از وثیقه را جابجا کنید و می توانید از سایر عملکردها برای انجام آن استفاده کنید. به طور کلی، کمک می‌کند نیازهای خاص توسعه دهندگان ساده‌تر در دسترس باشد.
  • همانطور که در بالا ذکر شد، قراردادهای اصلی سیستم توکن زر در اصل کارایی لازم برای انتقال موقعیت های یک صندوق را نداشتند. از آن زمان، قراردادهای اصلی یک قابلیت انتقال بومی به نام فورک را نیز اجرا کرده اند که امکان انتقال صندوق به آدرس دیگری را فراهم می کند. با این حال در اینجا هم محدودیتی وجود دارد، و آن این است که مالک آدرسی که صندوق را دریافت خواهد کرد، باید مجوزی ارائه دهد که در واقع می‌خواهد آن را دریافت کند. این برای شرایطی ایجاد شده است که کاربر در حال انتقال وثیقه قفل شده و همچنین بدهی ایجاد شده است. اگر به سادگی وثیقه را به آدرس دیگری منتقل می کنید، مشکلی وجود ندارد. اما در صورتی که بدهی ایجاد شده را نیز انتقال دهید، این احتمال وجود دارد که یک صندوق کاملاً ایمن را در موقعیتی پرخطر قرار دهید. این کارکرد قرارداد را کمی محدودتر می کند. بنابراین، مدیر CDP گزینه خوبی برای حفظ یک روش ساده برای انتقال صندوق‌ها و شناسایی آنها از طریق یک شناسه عددی است.
  • هنگامی که open اجرا می شود، یک urn جدید ایجاد می شود و یک cdpId برای یک مالک مشخص اختصاص داده می شود. اگر کاربر بلافاصله پس از ماین تراکنش، از الحاق برای افزودن وثیقه به urn استفاده کند، احتمال سازماندهی مجدد زنجیره بلاکچین وجود دارد. که باعث می شود کاربر مالکیت آن جفت cdpId/urn را از دست بدهد، بنابراین وثیقه خود را از دست می‌دهد. با این حال، این مشکل تنها در صورت اجتناب از استفاده از توابع پراکسی از طریق یک profile proxy ممکن است رخ دهد زیرا کاربر cdp را باز کرده و در همان تراکنش به وثیقه الحاق می‌شود.

1 Integrate

2 Abstract