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

چرا برداشت مبتنی بر allowance از اسکرو و session key بهتر است

· خواندن 6 دقیقه
OrcaRail
Crypto payment rails for web2 apps

۲۰ آوریل ۲۰۲۶ — هر محصول اشتراک کریپتو باید یک مسئله را حل کند: پرداخت‌کننده چطور پرداخت‌های آینده را مجاز کند بدون اینکه امانت‌داری را واگذار کند؟ سه پاسخ واقع‌بینانه وجود دارد. ما برداشت مبتنی بر allowance را انتخاب کردیم و این مطلب دلیلش را توضیح می‌دهد.

سه مدل​

۱. برداشت مبتنی بر allowance (approve در ERC-20 + delegate در SPL)​

پرداخت‌کننده یک بار روی قرارداد توکن approve(spender, cap) را امضا می‌کند. بعداً وقتی دوره‌ای سررسید شود، spender (همان SubscriptionHub ما یا برنامه سولانا) transferFrom را فراخوانی می‌کند (EVM) یا با اختیار delegate انتقال می‌دهد (SOL). امانت‌داری نزد پرداخت‌کننده می‌ماند؛ spender در طول عمر اشتراک حداکثر تا cap می‌تواند برداشت کند.

لغو: پرداخت‌کننده approve(spender, 0) یا Revoke را امضا می‌کند. از آن لحظه هیچ برداشتی موفق نمی‌شود.

این همان چیزی است که برداشت خودکار امروز استفاده می‌کند. مرحله ۲ spender را از یک کیف پول داغ تحت کنترل پلتفرم به یک قرارداد روی زنجیره منتقل می‌کند، اما سمت پرداخت‌کننده تغییری نمی‌کند.

۲. سپرده اسکرو​

پرداخت‌کننده وجوه N دوره را در یک قرارداد اسکرو مخصوص هر اشتراک واریز می‌کند. قرارداد طبق زمان‌بندی وجه را به فروشنده آزاد می‌کند. پرداخت‌کننده هر زمان می‌تواند موجودی استفاده‌نشده (منهای دوره‌های پرداخت‌شده) را برداشت کند.

۳. کیف پول هوشمند با session key​

پرداخت‌کننده از کیف پول هوشمند ERC-4337 استفاده می‌کند و یک session key با دامنه محدود به قرارداد اشتراک می‌دهد. session key فقط کارهایی را می‌تواند انجام دهد که دامنه‌اش اجازه می‌دهد (مثلاً «انتقال حداکثر X دلار USDC در هر ۳۰ روز به این آدرس»). پرداخت‌کننده با حذف session key مجوز را لغو می‌کند.

امتیازدهی​

هر سه را روی پنج محور ارزیابی کردیم:

محوربرداشت مبتنی بر allowanceاسکروsession key
امانت‌داری در طول اشتراک فعالپرداخت‌کنندهقرارداد اسکروپرداخت‌کننده (از طریق کیف پول هوشمند)
گام‌های راه‌اندازی برای پرداخت‌کننده۱ امضا۱ واریز (با گس)۱ ثبت‌نام در کیف پول 4337
سازگاری کیف پول پرداخت‌کنندههمه کیف پول‌هاهمه کیف پول‌هافقط کیف پول‌های 4337
وجوه قفل‌شده / سرمایه در گردشنداردN ماه قفلندارد
تجربه لغولغو approveبرداشت + لغوحذف session key
ریسک keeperهر فراخواننده‌ایهر فراخواننده‌ایهر فراخواننده‌ای
پیچیدگی سمت فروشندهحداقلیحسابداری آزادسازیراه‌اندازی bundler در 4337
کار با MetaMask / Phantomبلهبلهنه به‌صورت بومی
کار با Ledger / سخت‌افزاریبلهبلهجزئی
شفافیت مقرراتیبالاکمتر (بوی اسکرو می‌دهد)بالا

چرا اسکرو نه​

اسکرو جذاب‌ترین شعار را دارد («وجوه پرداخت‌کننده در قرارداد قفل است، نه نزد یک شرکت») اما بدترین تجربه واقعی را:

  • پرداخت‌کنندگان دوست ندارند وجوه N ماه را قفل کنند. اشتراک ماهانه ۲۰ دلاری با اسکروی ۱۲ ماهه یعنی ۲۴۰ دلار قفل‌شده. سقفی روی نرخ تبدیل.
  • برداشت‌ها پیچیده می‌شوند: قرارداد باید دوره‌های پرداخت‌شده و نشده را پیگیری کند، بازپرداخت جزئی را مدیریت کند و جلوی دسترسی فروشنده به وجوه آینده را بگیرد.
  • «اسکرویی که وجوه مشتری را نگه می‌دارد» در چند حوزه قضایی بوی مقرراتی دارد که «allowance به یک قرارداد هوشمند» ندارد.

چرا session key نه​

session key روی کیف پول‌های هوشمند 4337 زیباست. اما لازمه‌اش این است که کیف پول پرداخت‌کننده هوشمند باشد. بیشتر پرداخت‌کنندگان در ۲۰۲۶ هنوز از EOA استفاده می‌کنند (MetaMask، Rabby، کیف پول‌های سخت‌افزاری، امضاکنندگان Safe) و پرداخت‌کنندگان سولانا از کیف پول‌های keypair به سبک Phantom. اجبار به ثبت‌نام در 4337 برای یک اشتراک، نرخ تبدیل را نابود می‌کند.

مسیری هست که در آن 4337 کیف پول پیش‌فرض پرداخت‌کننده شود و session key ساده شود. هنوز به آنجا نرسیده‌ایم.

چرا امروز برداشت مبتنی بر allowance برنده است​

  • بدون هیچ تغییری در کیف پول پرداخت‌کننده. هر کیف پولی که بتواند approve در ERC-20 را امضا کند کار می‌کند؛ یعنی همه.
  • بدون وجوه قفل‌شده. امانت‌داری نزد پرداخت‌کننده می‌ماند؛ برداشت درست سر موعد انجام می‌شود.
  • لغو همگانی است. approve(0) یا Revoke جزئی است که رابط هر کیف پولی از قبل نشان می‌دهد.
  • keeper کالایی عمومی است. SubscriptionHub.charge(id) عمومی و بدون نیاز به مجوز است. NestJS، Chainlink، Gelato یا یک AVS در EigenLayer (مرحله ۶ را ببینید) همه می‌توانند فراخوانی‌اش کنند.
  • روایت مقرراتی ساده‌تر است. پلتفرم هرگز وجوه در حال انتقال را نگه نمی‌دارد.

محدودیت‌های شناخته‌شده و راهکارهای ما​

برداشت مبتنی بر allowance بی‌نقص نیست. معایب، صادقانه:

۱. تأیید نامحدود​

کیف پول‌ها اغلب به‌طور پیش‌فرض مقدار approve نامحدود پیشنهاد می‌دهند. قراردادهای مخرب با allowance نامحدود کیف پول‌ها را خالی می‌کنند. راهکار ما: رابط کاربری صراحتاً تأیید محدود درخواست می‌کند (مثلاً 12 × monthly_amount برای اشتراک سالانه)، رقم دلاری را نشان می‌دهد و متن «هر زمان لغو کنید» را ارائه می‌دهد. قرارداد cap را جدا از allowance در ERC-20 اعمال می‌کند.

۲. لغو مجوز بین دو دوره​

پرداخت‌کننده می‌تواند در میانه اشتراک مجوز را لغو کند و برداشت بعدی ناموفق می‌شود. همان حالت خرابی کارت ذخیره‌شده‌ای که باطل شده است. با وب‌هوک + ایمیل موجود مدیریت می‌شود: subscription-insufficient-allowance.hbs و subscription-past-due.hbs.

۳. allowance قدیمی پس از تغییر قیمت​

اگر فروشنده در میانه اشتراک قیمت را بالا ببرد، cap قبلی ممکن است کافی نباشد. با اصل ثابت cap که charge() را revert می‌کند و رابط فروشنده که درخواست تأیید دوباره می‌دهد مدیریت می‌شود.

۴. برداشت دوباره بر اثر reorg​

رباتی که از reorg بلاک سوءاستفاده کند می‌تواند charge() را تکرار کند. با lastChargedAt یکنوا در SubscriptionHub مدیریت می‌شود.

امروز برای پرداخت‌کنندگان چه تغییر می‌کند​

هیچ. جریان فعلی برداشت خودکار از قبل approve(spender, amount) و SPL Approve را درخواست می‌کند؛ همان گام‌ها. مرحله ۲ spender را به آدرس یک قرارداد غیرامانی منتقل می‌کند. کیف پول شما همان صفحه مجوز را نشان می‌دهد.

برای فروشندگان چه تغییر می‌کند​

هیچ تغییری در ساختار پاسخ API. فیلد approval_spender_address در شیء auto_charge اشتراک فقط به‌جای کیف پول داغ OrcaRail به قرارداد SubscriptionHub اشاره می‌کند. وب‌هوک‌ها در همان لحظه‌ها ارسال می‌شوند.

جمع‌بندی​

ملاحظهبرنده
تجربه ثبت‌نام پرداخت‌کنندهبرداشت مبتنی بر allowance
سرمایه در گردشبرداشت مبتنی بر allowance / session key
سازگاری کیف پولبرداشت مبتنی بر allowance
شفافیت مقرراتیبرداشت مبتنی بر allowance / session key
انعطاف keeperهر سه
سادگی قراردادبرداشت مبتنی بر allowance

برداشت مبتنی بر allowance در سازگاری کیف پول و سرمایه در گردش به‌طور قطعی برنده است و در همه محورهای دیگر مساوی یا برنده است. به همین دلیل اشتراک‌های OrcaRail بر پایه آن ساخته شده‌اند.


مرتبط: مرحله ۲: اشتراک مبتنی بر allowance · مستندات برداشت خودکار · مدل امنیتی