قفل توکن در Smart ASA v2 به جایی منتقل میشود که دارنده نمیتواند آن را بردارد
استاندارد ARC-20 قواعد یک توکن algorand را در یک قرارداد هوشمند جای میدهد. پیادهسازی مرجع نسخهٔ ۲.۰.۰ آن که در ۲۳ اکتبر منتشر شد، قفل حسابها را در باکسهایی نگه میدارد که در اختیار قرارداد است و موجودی قفلشدهٔ دارنده را به ۰.۱ ALGO کاهش میدهد. در یادداشت انتشار آمده است که کد ممیزی نشده و قابل ارتقا نیست.

اکنون میتوان توکنی را پیش از آنکه دارندهاش حتی یک واحد از آن را در اختیار داشته باشد قفل کرد، و این قفل پس از رفتن دارنده هم باقی میماند. این همان تغییری است که در Smart ASA v2 رخ داده است؛ پیادهسازی مرجع بازنویسیشدهٔ استاندارد ARC-20 algorand که در ۲۳ اکتبر منتشر شد.
توکنی که قراردادی در میان آن نشسته است
یک ASA توکن بومی algorand است. در یک تراکنش ساخته میشود و با opting in نگهداری میشود. نام، واحد، اعشار و حداکثر عرضهٔ آن هنگام ساخت ثابت میشود. چهار نقش آن روی آدرسها مینشیند و هیچ قلابی وجود ندارد که قاعدهٔ خود صادرکننده بر انتقال میان دو دارنده اجرا شود.
راه قدیمیتر برای اعمال یک قاعده این بود که دارایی را قفل کنند و واحدها را از مسیر clawback بگذرانند؛ کاری که در چشم دارنده به جای انتقالی که انتظارش را داشت، شبیه مصادره جلوه میکند. ARC-20 توکن بومی را نگه میدارد و چهار نقش را به یک قرارداد میسپارد. دارایی بهطور پیشفرض قفلشده ساخته میشود، پس واحدها تنها از راه قرارداد به دارنده میرسند و هر جابهجایی نخست بررسی میشود.
این ویژگی ARC-20 را به تصویر آینهای ARC-2001 تبدیل میکند، دیگر استاندارد توکن قراردادی algorand که در آن توکن خودِ قرارداد است و مانند یک توکن اتریوم با موجودی و تأییدیه رفتار میکند. ARC-20 دارایی را بومی نگه میدارد، پس کیف پولها و صرافیها آن را مانند هر توکن دیگری نگه میدارند، و دفتر قواعد را روی آن مینشاند.
نسخهٔ ۲ چه چیزی را تغییر میدهد
قفل حسابها از حافظهٔ خود دارنده بیرون میآید و به باکسهای خالی میرود که در اختیار قرارداد است. در طراحی پیشین، این نشانه در وضعیت محلی حساب مینشست و دارنده میتوانست آن را بردارد. مشخصات2 اکنون یادآور میشود که وضعیت ذخیرهشده در باکس را دارنده نمیتواند حذف کند و دارندهها اصلاً لازم نیست در قرارداد opting in کنند. موجودی قفلشدهٔ آنها از ۰.۲۲۸۵ به ۰.۱3 ALGO کاهش مییابد.
برخی محدودیتها باقی میمانند. میتوان قفلی را روی آدرسی گذاشت پیش از آنکه چیزی در اختیار داشته باشد، که همان چیزی است که فهرست تحریمها میخواهد، و این قفل پس از رفتن و بازگشتن دارنده هم برجا میماند. نخستین قفل روی یک حساب یک باکس میسازد. این باکس با واریز ۰.۰۱۵۷4 ALGO تأمین میشود که درست پیش از فراخوانی قفل به قرارداد پرداخت میشود و هنگام بازگشت حساب به وضعیت پیشفرضش بازگردانده میشود.
آنچه این تغییر به دست میدهد باریک و در عین حال واقعی است: صادرکننده میتواند قاعدهای را در برابر دارندهای که همکاری نمیکند اعمال کند، در حالی که سقف عرضه و منطق پرداخت در وضعیت عمومی قرار دارد که هر کسی میتواند بخواند. اینکه این یک ویژگی است یا نه، بستگی دارد به اینکه در کدام سوی قفل ایستاده باشید.
باقی ماجرا کارهای خانه است، اما کارهای خانهای که دندان دارند. نسخهٔ پیشین که سه روز پیشتر منتشر شد، آرگومانهای دارایی و حساب را بهصورت عدد صحیح و آدرس ساده کدگذاری میکرد، بهطوری که «انتخابگرهای متد آن با رابط ARC-20 نمیخواند5». نسخهٔ ۲ از نوعهای خود استاندارد استفاده میکند و از کلاینتها میخواهد دوباره تولید شوند. فراخوانیهای ناموفق اکنون کدهای خطای ARC-65 را ثبت میکنند، تا کیف پول بتواند دلیل را نام ببرد نه اینکه پیام یک assertion را نشان دهد. دو نقطهٔ توسعه به صادرکننده اجازه میدهد بررسیهایی به انتقالهای عادی بیفزاید و عرضهٔ در گردش را تعریف کند، با نمونهای سقفدار در مخزن.
قفلها لایهلایهاند. قفل سراسری انتقالها را متوقف میکند و قفل حساب یک دارنده را؛ در یادداشت انتشار آمده است که clawback هرگز با هیچیک از این دو مسدود نمیشود و نقشهایی که هر یک در اختیار یک آدرس است، بر اساس قواعد خودشان عمل میکنند.
برای استفاده از آن چه لازم است
استقرار یکی از آنها یعنی استقرار یک قرارداد و ساخت یک دارایی و سپس پرداخت کارمزد برای هر اقدام. فهرست بازبینی مهاجرت در یادداشت انتشار، هزینهٔ صدور، بازخرید، clawback، انتقال عادی و بازنشانی قفل را دو برابر حداقل کارمزد برمیآورد. نابود کردن یک توکن سه برابر این مبلغ هزینه دارد. هر حساب قفلشده نیز واریزی ۰.۰۱۵۷6 ALGO را در قرارداد قفل میکند که هنگام بازنشانی بازگردانده میشود.
مسیر توسعه AlgoKit، Poetry و یک شبکهٔ محلی در Docker است، همه از مخزن7. هیچ سرویس میزبانیشدهای وجود ندارد و چیزی برای ثبتنام نیست.
و چیزی هم نیست که کاربر عادی بتواند باز کند. بخش TestNet در یادداشت انتشار از نمایشی از پنج استاندارد سخن میگوید اما هیچ برنامه یا داراییای را نام نمیبرد، برخلاف یادداشتهای نسخهٔ پیشین سه روز پیشتر. یک توسعهدهنده میتواند کد را بخواند و آن را محلی مستقر کند؛ اما خوانندهای که دنبال یک توکن زندهٔ نسخهٔ ۲ میگردد جایی برای رفتن ندارد.
گونهٔ کاملتر به ARC-89 تکیه دارد، همان دفتر ثبت فراداده که سابقهٔ پذیرش خودش آن را مستقرشده روی TestNet و در انتظار استقرار روی MainNet فهرست میکند. آخرین انتشار آن دفتر ثبت، خود را نخستین نسخهٔ نامزد انتشار برای استقرار روی MainNet مینامد. تا زمانی که این استقرار انجام نشود، گونهٔ کاملتر کاری مربوط به TestNet است.
چه کسی آن را میسازد
Cosimo Bassi که با نام cusma8 مطلب مینویسد، مشخصات ARC-20 را نوشته است. او این پیادهسازی را نگهداری میکند و دفتر ثبت فرادادهای را که این پیادهسازی به آن تکیه دارد نیز نوشته است. مخزن زیر نظر بنیاد algorand است و فهرست انتشارهای آن نسخهٔ پیشین را ۲۰ اکتبر و این نسخه را ۲۳ اکتبر ثبت کرده است. او در روز انتشار از صادرکنندگان، کیف پولها و کاوشگرها بازخورد خواست.
یک پیادهسازی پیشین در algorandlabs/smart-asa9 از سال ۲۰۲۲ همین کار را انجام میداد. آن پیادهسازی توکن را با نوشتن شمارهٔ قرارداد در فیلد URL توکن به قراردادش میبست و نشانهٔ قفل هر دارنده را در وضعیت محلی نگه میداشت. نسخهٔ ۲ آن ترتیب را جایگزین میکند، و همان ترتیب پیشین است که توکنهای زنده هنوز از آن پیروی میکنند.
تنها کاربر زنده
پروندهٔ پذیرش ARC-20 دقیقاً یک پروژه را فهرست میکند، enel-ebitts، با آمادگی مشخصشده بهصورت پایین و بخشهای کیف پول، کاوشگر و ابزار خالی. ebitts همان سرویس Enel و Conio است که به خانوارهای ایتالیایی توکنهایی میفروشد وابسته به تولید دو نیروگاه تجدیدپذیر و آن تولید را در برابر صورتحساب برق به حساب میآورد؛ PXke راهاندازی آن را در اکتبر پوشش داد.
هر نیروگاه توکن خودش را دارد که به نام آن نامگذاری شده است: ebitts Barile Venosa با نماد EBT-BVEN و ebitts Piani della Marina با نماد EBT-PDM.10 هر دو از مه ۲۰۲۶ روی میننت algorand بودهاند.11 چهار نقش توکن بادی روی حسابی است که در اختیار قرارداد خودش است، نه روی کلید یک شخص، پس هر جابهجایی از آن قرارداد میگذرد. درون قرارداد، این چهار نقش به یک کیف پول واحد سپرده شدهاند. توکنها پیوند قدیمیتر را در فیلدهای URL خود حمل میکنند. قراردادهای آنها همچنین به یک برنامهٔ پرداخت، یک توکن پاداش و یک برنامهٔ هویت اشاره میکنند که قرارداد این انتشار چنین نمیکند. آنها به همان رابط یک ساخت سفارشی پاسخ میدهند، نه بهعنوان نسخهای از نسخهٔ ۲.
آنها زندهاند. قرارداد توکن بادی از ۴ مه حدود ۱٬۸۳۰12 انتقال به تقریباً ۳۷۰13 کیف پول فرستاده است که ۴۷۵14 مورد از آنها در سی روز منتهی به ۲۶ اکتبر بوده، همه از یک آدرس واحد؛ پس اینها توزیع از قرارداد است نه معامله میان دارندگان. هیچیک از دو توکن اصلاً معامله نمیشود.
تقریباً تمام عرضهٔ هر دو توکن هنوز در یک کیف پول است. همان کیف پول هر دو قرارداد را ساخته است. وضعیت ذخیرهشدهٔ هر قرارداد آن را بهعنوان مدیر، ذخیره، قفل و clawback نام میبرد. این کیف پول حدود ۹۷.۷15٪ از توکن بادی و حدود ۹۹.۸16٪ از توکن خورشیدی را در اختیار دارد.
پیوند شواهد در پروندهٔ پذیرش توکن دیگری از همان خانواده را باز میکند، توکنی که قراردادش REWARD نام دارد و دو رقم اعشار ذخیره میکند، نه هیچیک از توکنهای دو نیروگاه. این سابقه نشان میدهد که خانواده وجود دارد؛ اما بهخودیخود نشان نمیدهد که واحدهایی که خانوارها در اختیار دارند با آن مطابقت دارند.
چه چیزی میتواند خراب شود
یادداشت انتشار دو چیز دربارهٔ خودش میگوید. به مستقرکنندگان میگوید قرارداد تازهای آغاز کنند، چون برنامههای نسخهٔ پیشین را نمیتوان در جای خود ارتقا داد. و اینکه کد ممیزی نشده است.
باقی ماجرا بر عهدهٔ صادرکننده است و مشخصات هم همین را میگوید. قواعد تنها تا زمانی برجا میمانند که توکن بهطور پیشفرض قفلشده بماند، آدرس clawback آن نزد قرارداد بماند و آن قرارداد قابل بهروزرسانی، حذف یا تغییر کلید نباشد. متن بازنگریشدهٔ مشخصات دو راه خروج را نام میبرد. آدرس قفل دارایی میتواند داراییهای نگهداریشده را از قفل خارج کند و آدرس مدیر آن میتواند clawback را تغییر دهد، مگر آنکه هر یک از این دو روی قرارداد تنظیم شده یا خالی گذاشته شده باشد.
دارنده ممکن است با کیف پول خودش گمراه شود. دارایی زیربنایی همیشه صفر رقم اعشار و یک حداکثر جایگزین را گزارش میکند، هر چه صادرکننده تنظیم کرده باشد، و کیف پولهایی که ARC-20 را نمیفهمند همین را به جای تنظیمات واقعی نشان میدهند.
مستندات هم از قافله عقب میمانند. مخزن در روز انتشار قاعدهٔ فرادادهٔ خود را از «باید تغییرناپذیر باشد» به «شایسته است تغییرناپذیر باشد» تغییر داد، و نسخهٔ پورتال توسعهدهنده هنوز «باید» میگوید و هنوز وضعیت قفل را در حافظهٔ محلی دارنده توصیف میکند. هر کسی که پورتال را بررسی کند، نسخهای را میخواند که این انتشار جایگزینش شده است.
یکی از پاسخها به اعلام انتشار صریحاً پرسیده بود که مورد استفادهٔ یک ASA هوشمند چه میتواند باشد. تنها نمونهٔ کارآمد در سوابق، یک صورتحساب برق در ایتالیا است و آن هم روی ساخت پیشینتری اجرا میشود.
منابع
- Release v2.0.0 · algorandfoundation/arc20 · GitHub17
- ARCs/ARCs/arc-0020.md at main · algorandfoundation/ARCs · GitHub2
- github.com7
- Releases · algorandfoundation/arc2018
- Algorand Smart Contract Token Specification | Algorand Developer Portal1
- GitHub - algorandlabs/smart-asa: Smart ASA reference implementation · GitHub9
- raw.githubusercontent.com19
۱۱ رقم این گزارش بررسی شده است. ۳ مورد مستقیماً از زنجیره خوانده شد.دیدن همهٔ بررسیها
منابع
- 1ARC-200 dev.algorand.co↩
- 2مشخصات github.com↩
- 7مخزن github.com↩
- 8cusma github.com↩
- 9algorandlabs/smart-asa github.com↩
- 17Release v2.0.0 · algorandfoundation/arc20 · GitHub github.com↩
- 18Releases · algorandfoundation/arc20 github.com↩
- 19raw.githubusercontent.com/algorandfoundation/arc20/main/README.md raw.githubusercontent.com↩