قرارداد مدیر CDP
مقدمه
قرارداد مدیر
CDP
یک فرآیند رسمی برای انتقال صندوقها به عنوان مثال در انتقال داراییها بین مالکان است. توصیه میشود که تمام تعاملات با صندوقها از طریق مدیر
CDP
انجام شود. پس از اینکه وثیقه باز شده به زربان سپرده شد، کاربران میتوانند از ویژگیهای زیر استفاده کنند:
- مالکیت چندگانه برای صندوقها و شناسایی (کاربران میتوانند
Nتعداد از صندوقها را داشته باشند) - قابلیت انتقال صندوقها
توجه: کاربر یک صندوق میتواند برای تعامل با مدیر
CDP
از طریق پروکسی اقدام کند، اما امکان استفاده مستقیم از قرارداد مدیر CDP نیز وجود دارد.
عملکردهای کلیدی
cdpAllow: اجازه/عدم اجازه به یک آدرس کاربر برای مدیریتcdpurnAllow: اجازه/عدم اجازه به یک آدرس کاربر برای تعامل باurnها به منظور ورود (src) یا خروج (dst)open: یک صندوق جدید برای کاربر با استفاده از نوع وثیقهilkباز میکندgive: انتقالcdpبه آدرس مقصدfrob: افزایش/کاهش مقدارinkاز وثیقه مسدود شده و افزایش/کاهش مقدارartاز بدهی درcdpبا تولید زر تولید شده یا تضمین رایگان در آدرسcdpfrob: افزایش/کاهش مقدارinkاز وثیقه مسدود شده و افزایش/کاهش مقدارartاز بدهی درcdpبا تولید زر تولید شده یا تضمین رایگان در یک آدرس مشخص آدرس مقصد. ( توضیحات این تابع را میتوانید در ادامه این مستند ببینید.)flux: انتقال مقدارwad(با دقت اعشار18) از نوع وثیقهilkازcdpبه آدرس مقصد.move: انتقال مقدارrad(با دقت اعشار45) زر ازcdpبه آدرس مقصد.quit: انتقال وثیقه مسدود شده و بدهی تولید شده ازcdpبه آدرس مقصد.
چیدمان ذخیرهسازی
vat: آدرس قرارداد هسته که صندوقها را نگه میداردcdpi: شناسه که به صورت خودکار افزایشی است.urns: یک نگاشت از `CDPIdبهUrnHandlerlist: یک نگاشتCDPIdبهCDPIdها قبلی و بعدیowns: یک نگاشت ازCDPIdبهownerilks: یک نگاشت ازCDPIdبهIlk(نوع وثیقه)first: یک نگاشت ازownerبهFirstCDPIdlast: یک نگاشت ازownerبهLastCDPIdcount: یک نگاشت از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