Skip to main content
الوكيل الذي يحمل مفتاح API يستطيع إنفاق كل ما يستطيع المفتاح إنفاقه. هذا مقبول حين يراقبه شخص، ومحرج حين لا أحد يراقبه. الحلول المعتادة تعيش خارج الوكيل، في لوحة تحكّم أو تنبيه فوترة يُخبرك بالمشكلة بعد وقوعها. تدعم Venice طريقة ثانية للدخول. بدلًا من مفتاح، يحمل الوكيل محفظة. يُصادق على نفسه بتوقيع رسالة، ويدفع لكل طلب من رصيد USDC المرتبط بعنوان تلك المحفظة، وتُسجَّل كل عملية خصم في دفتر يمكنه العودة إليه. لا يوجد حساب، ولا لوحة تحكّم، ولا مفتاح يُسرّب. السقف هو الرصيد، وأنت تُقرّر ما تضعه فيه. يبني هذا الدليل وكيلًا يفعل ذلك بالضبط، تحت ميزانية يفرضها على نفسه.

شغّل هذا الدفتر في Google Colab

كل خطوة أدناه في هيئة دفتر قابل للتشغيل. يعمل دون محفظة مموّلة ويتوقّف عند جدار الدفع، فترى المسار كاملًا قبل أن تُنفق شيئًا.

كيف يعمل

أربعة أجزاء متحرّكة، ثلاثة منها مجرّد HTTP: الاستدلال نفسه هو استدعاء /chat/completions المعتاد. الفرق الوحيد هو الترويسة التي ترسلها.

ما يكلّفك البدء

يهمّ رقمان، وهما ليسا الرقم نفسه. الحدّ الأدنى لإيداع مبلغ هو خمسة دولارات. هذا أصغر مبلغ ستُسوّيه /x402/top-up، ويُعاد في استجابة الاكتشاف بدلًا من أن يكون مُثبّتًا في أي مكان، لذا اقرأه لا تعتمد على هذه الصفحة. الحدّ الأدنى للرصيد لإجراء استدعاء هو عشرة سنتات. المحفظة التي تحمل أقلّ من ذلك تحصل على رمز 402 من الاستدلال حتى وإن كانت تحمل مالًا. إذن خمسة دولارات هي أصغر محفظة يستحقّ تمويلها، وخمسة دولارات هي ما يمنحه هذا الدليل للوكيل. ويستحقّ معرفة ما يشتريه ذلك: سؤال قصير موجّه إلى qwen3-5-9b يُكلّف نحو سبعة وعشرين رمز إدخال وستّة وعشرين رمز إخراج، وهو ما يعادل بأسعار هذا النموذج قرابة سبعة أجزاء من مليون من الدولار. خمسة دولارات في حدود ثلاثة أرباع مليون سؤال. الميزانية هنا ليست قيدًا ضيّقًا، بل نطاق انفجار محدود.

الإعداد

يقوم x402 SDK بتوقيع الدفع. لا تكتبه يدويًا: تفويض التحويل هو بيانات EIP-712 مُنمّطة، وإعادة استخدام nonce تُفشل التحقّق بطرق مملّة في تشخيصها.
يتطلّب x402 Python SDK إصدار Python 3.10 أو أحدث. Colab مناسب. أما نسخة Python النظامية التي تأتي مع macOS فقد لا تكون كذلك.
أنشئ ملف agent.py مع التهيئة. BUDGET_USD هو السقف الذي يفرضه الوكيل على نفسه، وقد ضُبط هنا على المحفظة بأكملها. اخفضه فيتوقّف الوكيل قبل أن ينفد المال، وهذا هو المقبض الوحيد الذي يُرجّح أن تُغيّره.

محفظة يملكها الوكيل

يحتاج الوكيل إلى زوج مفاتيح. في الإنتاج تكون هذه محفظة موّلتها عمدًا ويعيش مفتاحها في مدير أسرار. أثناء البناء، توليد محفظة مؤقتة هو الخطوة الصحيحة، لأن محفظة بلا مال لا تستطيع فعل شيء مُكلف بالخطأ.
احتفظ بالمفتاح الخاص خارج الدفتر. في Colab، ضعه في Secrets واقرأه بـ userdata.get("WALLET_KEY").

تسجيل الدخول بدل المصادقة

لا يوجد مفتاح ليُرسَل، لذا يحمل كل طلب برهانًا على أن مالك المحفظة هو من أرسله. البرهان رسالة EIP-4361، مُوقَّعة ثم مُشفَّرة بـ base64 في ترويسة SIGN-IN-WITH-X. صيغة الرسالة دقيقة. تُعيد Venice بناء هذه البايتات على جانبها وتتحقّق من توقيعك بها، فإن سطرًا فارغًا شاردًا يعني توقيعًا مرفوضًا لا خطأً مفيدًا.
تحكم هذه الترويسات ثلاث قواعد، وجميعها موجودة لمنع إعادة التشغيل (replay). التوقيع صالح لمدة خمس دقائق من Issued At. كل nonce يُستخدم لمرة واحدة لنحو خمس دقائق ونصف. ويجب أن يتطابق الموقّع مع المحفظة الواردة في المسار، فلا تستطيع محفظة واحدة الاطلاع على أخرى وتحصل على 403 مقابل المحاولة. النتيجة العملية هي أنك تُوقّع ترويسة جديدة لكل طلب بدلًا من تخزين واحدة. التوقيع محلي ومجاني، فلا يُكلّفك هذا شيئًا.
على محفظة جديدة:
canConsume هو الحقل الذي تتفرّع عليه. فهو يأخذ في الحسبان أرضية العشرة سنتات، فلا يلزمك أن تفعل ذلك بنفسك.

إيداع المال

الإيداع طلبان. الأول يسأل عن ما تقبله Venice وهو غير موثّق، لأنه لا يوجد بعد ما يُوثَّق. الثاني يحمل تفويض تحويل مُوقَّعًا.
يُعيد الاكتشاف مدخلًا واحدًا لكل سكة. اليوم Base وSolana:
تفصيلتان يسهل تجاوزهما هناك. amount بالوحدات الأساسية، وعملة USDC ذات ستّ منازل عشرية، فـ 5000000 هي خمسة دولارات لا خمسة ملايين من أي شيء. على سكة Solana، extra.feePayer هو حساب تُشغّله Venice ويُغطّي رسوم المعاملة، وهذا ما يسمح لمحفظة بالدفع دون امتلاك SOL.
ضابط الإنفاق الافتراضي هو أول ما سيوقفك. تأتي الحزمة بضبط max_amount_per_payment عند دولار واحد، والحدّ الأدنى للإيداع في Venice خمسة، لذا فإن عميلًا لم يُعدَّل يرفض كل سكة معروضة ويرفع NoMatchingRequirementsError قبل أن يتصل بالشبكة أصلًا. ارفع السقف عن قصد بدلًا من تعطيل ضوابط الإنفاق.
تسوية من محفظة لا تحمل USDC تُعيد 400 مع PAYMENT_VERIFICATION_FAILED. هذا الشكل المتوقّع للفشل: التوقيع كان سليمًا، والتحويل لم يكن كذلك.

الدفع لكل استدعاء

بوجود رصيد، يصبح الاستدلال طلبًا اعتياديًا يصادف أنه يحمل توقيعًا. إطفاء موجّه نظام Venice يهمّ أكثر مما يبدو: فهو يوفّر ما يقارب سبعمئة وألف رمز إدخال في كل استدعاء، وهذا مقدار أكبر بمرتبتين مقارنةً بالسؤال نفسه.
معاملة 402 كنتيجة عادية لا كاستثناء هي جوهر التصميم. الوكيل الذي يدفع مصاريفه بنفسه سينفد ماله في نهاية المطاف، ونفاد المال ليس انهيارًا.

قراءة ما أنفقه

الدفتر هو المرجع. بدلًا من التقدير من عدد الرموز، اسأل عمّا خُصم فعلًا.
كل صفّ يعود بربطٍ إلى الاستدعاء الذي سبّبه:
تظهر هنا أيضًا صفوف TOP_UP وREFUND بمبالغ موجبة. تصفية النتائج على CHARGE يمنحك الإنفاق.

التشغيل ضمن ميزانية

الآن الحلقة. قبل كل استدعاء يفحص الوكيل ما أنفقه، ويرفض بدء عمل لا يستطيع دفع ثمنه.
شغّله بالخمسة دولارات كاملة فلن تُلزم الميزانية أبدًا، وهذه هي النتيجة الصادقة عند هذه الأسعار. لترى السقف يعمل فعلًا، اضبطه على قيمة يخرقها استدعاء واحد:

أين يضعك هذا

يحمل الوكيل ماله الخاص، ويُثبت هويته بتوقيع، ولا يستطيع تجاوز حدٍّ تُحدّده أنت، كل ذلك دون وجود حساب في أي مكان. بالنسبة لمهمّة مجدولة أو دالة serverless أو أي شيء لا تودّ تسليمه مفتاحًا طويل الأمد، فهذا وضع أمني مختلف جوهريًا. بعض ما يستحقّ عمله لاحقًا:

قيّده على مستوى البروتوكول

ضوابط الإنفاق في الحزمة لكل دفعة، لا لكل جلسة. اقرن بينها وبين حلقة الميزانية أعلاه كي لا تُلغي علّة في إحداهما الأخرى.

أعِد التعبئة عند النفاد

التقط 402، وأعِد التعبئة، وأعِد المحاولة. هذا ما يفعله venice-x402-client نيابةً عنك على جانب TypeScript.

ادفع على Solana

المسار نفسه بسكة مختلفة. وقّع Ed25519 واضبط feePayer المُعاد فلا تحتاج المحفظة إلى SOL.

أسند إليه عملًا حقيقيًا

استبدل قائمة المهام بحلقة استدعاء أدوات، ويبدأ الدفتر بإظهار ما كلّفه كل قرار.
للاطلاع على مرجع نقاط النهاية الكامل، راجع x402 top-up واستخدام x402 مع Venice API.