قرارداد مدیر 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