إنتقل إلى المحتوى الرئيسي

لماذا يتفوق سحب الـ allowance على الضمان ومفاتيح الجلسة

· 5 دقائق قراءة
OrcaRail
Crypto payment rails for web2 apps

20 أبريل 2026 — على كل منتج اشتراكات بالكريبتو أن يحل المشكلة نفسها: كيف يأذن الدافع بمدفوعات مستقبلية دون التخلي عن الحفظ؟ هناك ثلاث إجابات واقعية. اخترنا سحب الـ allowance، ويشرح هذا المقال السبب.

النماذج الثلاثة​

1. سحب الـ allowance (approve في ERC-20 + delegate في SPL)​

يوقّع الدافع approve(spender, cap) مرة واحدة على عقد الرمز. لاحقًا، يستدعي الـ spender (أي SubscriptionHub لدينا أو برنامج سولانا) الدالة transferFrom (EVM) أو يحوّل بصلاحية التفويض (SOL) عند استحقاق فترة. يحتفظ الدافع بالحفظ؛ ويمكن للـ spender سحب ما يصل إلى cap طوال عمر الاشتراك.

الإلغاء: يوقّع الدافع approve(spender, 0) أو Revoke. ومن تلك اللحظة لا يمكن أن ينجح أي سحب.

هذا ما يستخدمه الخصم التلقائي أصلًا اليوم. تنقل المرحلة 2 الـ spender من محفظة ساخنة تتحكم بها المنصة إلى عقد على السلسلة، لكن جهة الدافع لا تتغير.

2. إيداع ضمان (escrow)​

يودع الدافع أموال N فترة في عقد ضمان خاص بكل اشتراك. يُفرج العقد عن الأموال للتاجر وفق الجدول. ويمكن للدافع سحب الرصيد غير المستخدم في أي وقت (ناقص الفترات المدفوعة).

3. محفظة ذكية بمفاتيح جلسة​

يستخدم الدافع محفظة ذكية ERC-4337 ويمنح مفتاح جلسة محدود النطاق لعقد الاشتراك. لا يستطيع مفتاح الجلسة إلا فعل ما يسمح به نطاقه (مثل «تحويل ما يصل إلى X من USDC كل 30 يومًا إلى هذا العنوان»). ويلغي الدافع الإذن بحذف مفتاح الجلسة.

التقييم​

قيّمنا النماذج الثلاثة على خمسة محاور:

المحورسحب الـ allowanceالضمانمفاتيح الجلسة
الحفظ أثناء الاشتراك النشطالدافععقد الضمانالدافع (عبر المحفظة الذكية)
خطوات الإعداد للدافعتوقيع واحدإيداع واحد (مع غاز)تسجيل واحد في محفظة 4337
توافق محفظة الدافعكل المحافظكل المحافظمحافظ 4337 فقط
الأموال المقفلة / رأس المال العامللا شيءN شهر مقفلةلا شيء
تجربة الإلغاءإلغاء الـ approveسحب + إلغاءحذف مفتاح الجلسة
مخاطر الـ keeperأي مستدعٍأي مستدعٍأي مستدعٍ
التعقيد من جهة التاجرأدنى حدمحاسبة الإفراجإعداد bundler في 4337
يعمل مع MetaMask / Phantomنعمنعمليس بشكل أصيل
يعمل مع Ledger / محافظ الأجهزةنعمنعمجزئيًا
الوضوح التنظيميعالٍأقل (له رائحة الضمان)عالٍ

لماذا ليس الضمان​

للضمان أجمل عرض تسويقي («أموال الدافع مقفلة في عقد، لا لدى شركة») لكنه يملك أسوأ تجربة فعلية:

  • لا يحب الدافعون قفل أموال N شهر. اشتراك بقيمة 20 دولارًا شهريًا مع ضمان لمدة 12 شهرًا يعني 240 دولارًا مقفلة. وهذا سقف لمعدل التحويل.
  • تصبح السحوبات معقدة: يجب على العقد تتبّع الفترات المدفوعة وغير المدفوعة، ومعالجة الاستردادات الجزئية، ومنع التاجر من الوصول إلى الأموال المستقبلية.
  • «ضمان يحتفظ بأموال العملاء» له رائحة تنظيمية في عدة ولايات قضائية لا يملكها «allowance لعقد ذكي».

لماذا ليست مفاتيح الجلسة​

مفاتيح الجلسة على محافظ 4337 الذكية أنيقة. لكنها تتطلب أن تكون محفظة الدافع محفظة ذكية. ما زال معظم الدافعين في 2026 يستخدمون حسابات EOA (MetaMask وRabby ومحافظ الأجهزة وموقّعي Safe)، ويستخدم دافعو سولانا محافظ keypair على نمط Phantom. فرض التسجيل في 4337 من أجل اشتراك يقتل معدل التحويل.

هناك مسار تصبح فيه 4337 المحفظة الافتراضية للدافع وتصبح مفاتيح الجلسة أمرًا بسيطًا. لم نصل إلى هناك بعد.

لماذا يفوز سحب الـ allowance اليوم​

  • لا تغيير في محفظة الدافع. تعمل أي محفظة تستطيع توقيع approve في ERC-20، أي كلها.
  • لا أموال مقفلة. يحتفظ الدافع بالحفظ؛ ويحدث السحب في الوقت المناسب تمامًا.
  • الإلغاء عالمي. approve(0) أو Revoke مكوّن تعرضه واجهة كل محفظة أصلًا.
  • الـ keeper سلعة متاحة. SubscriptionHub.charge(id) عامة ودون إذن. يمكن لـ NestJS أو Chainlink أو Gelato أو AVS في EigenLayer (راجع المرحلة 6) استدعاؤها جميعًا.
  • الرواية التنظيمية أبسط. لا تحتفظ المنصة أبدًا بالأموال أثناء انتقالها.

القيود المعروفة وكيف نحد منها​

سحب الـ allowance ليس مثاليًا. العيوب بصراحة:

1. الموافقات غير المحدودة​

كثيرًا ما تقترح المحافظ قيم approve غير محدودة افتراضيًا. والعقود الخبيثة ذات الـ allowances غير المحدودة تفرغ المحافظ. حلّنا: تطلب الواجهة صراحةً موافقة محدودة (مثل 12 × monthly_amount لاشتراك سنوي)، وتعرض المبلغ بالدولار، وتقدّم نص «ألغِ في أي وقت». ويفرض العقد cap بشكل منفصل عن allowance في ERC-20.

2. الإلغاء بين الدورات​

يمكن للدافع الإلغاء في منتصف الاشتراك فيفشل الخصم التالي. هو نمط الفشل نفسه لبطاقة محفوظة أُلغيت. يُعالج عبر الـ webhook + البريد الحاليين: subscription-insufficient-allowance.hbs وsubscription-past-due.hbs.

3. allowance قديم بعد تغيير السعر​

إذا رفع التاجر السعر في منتصف الاشتراك، فقد يصبح cap القديم أصغر من اللازم. يُعالج ذلك بثابت cap الذي يُفشل charge() (revert)، وبواجهة التاجر التي تطلب موافقة جديدة.

4. خصم مزدوج بسبب إعادة التنظيم​

يمكن لبوت يستغل إعادة تنظيم الكتل أن يكرر charge(). يُعالج ذلك عبر lastChargedAt الرتيب في SubscriptionHub.

ما الذي يتغير للدافعين اليوم​

لا شيء. يطلب تدفق الخصم التلقائي الحالي أصلًا approve(spender, amount) وSPL Approve؛ الخطوات نفسها. تنقل المرحلة 2 الـ spender إلى عنوان عقد غير احتجازي. وتعرض محفظتك شاشة الأذونات نفسها.

ما الذي يتغير للتجار​

لا شيء في شكل استجابة API. يشير الحقل approval_spender_address في كائن auto_charge الخاص بالاشتراك ببساطة إلى عقد SubscriptionHub بدلًا من محفظة OrcaRail الساخنة. وتُرسل الـ webhooks في اللحظات نفسها.

الملخص​

الاعتبارالفائز
تجربة تسجيل الدافعسحب الـ allowance
رأس المال العاملسحب الـ allowance / مفاتيح الجلسة
توافق المحافظسحب الـ allowance
الوضوح التنظيميسحب الـ allowance / مفاتيح الجلسة
مرونة الـ keeperالثلاثة
بساطة العقدسحب الـ allowance

يفوز سحب الـ allowance بوضوح في توافق المحافظ ورأس المال العامل، ويتعادل أو يفوز في كل المحاور الأخرى. ولهذا بُنيت اشتراكات OrcaRail عليه.


ذو صلة: المرحلة 2: اشتراكات بسحب الـ allowance · توثيق الخصم التلقائي · نموذج الأمان