الانتقال إلى المحتوى الرئيسي
أداة إثبات ملكية المحفظة هي صفحة مستضافة تُثبت أن أحد عملائك يتحكم في عنوان محفظة عملات رقمية محدد. بموجب لائحة نقل الأموال في الاتحاد الأوروبي (EU TFR)، يجب على VASP التحقق من ملكية المحفظة ذاتية الاستضافة (غير المستضافة) قبل صرف الأموال إليها أو منها إذا تجاوز المبلغ عتبة Sunrise. وتتيح لك الأداة جمع هذا الإثبات دون أن تبني تدفقات التوقيع بنفسك. يؤدي الإثبات المُتحقَّق منه إلى تعيين قيمة إدخال دفتر عناوين المحفظة المطابق إلى is_ownership_verified: true، مما يتيح للتحويل المرتبط Travel Rule الخروج من UNCONFIRMED_OWNERSHIP.

متى ينشئها Didit نيابةً عنك

نادراً ما تحتاج إلى إنشاء جلسة بنفسك. عندما تكون auto_wallet_verification مفعّلة في إعدادات Travel Rule الخاصة بك (وهي الإعداد الافتراضي)، ينشئ Didit تلقائياً جلسة للأداة الخاصة بإثبات ملكية المحفظة عند إنشاء المعاملة، كلما احتاج التحويل إلى إثبات تحكّم المستخدم النهائي بالمحفظة:
  • يكون التحويل في UNCONFIRMED_OWNERSHIP، أي أن محفظة الطرف المقابل أُعلن أنها ذاتية الاستضافة عند الإرسال.
  • التحويل صادر وفي COUNTERPARTY_VASP_NOT_FOUND، أي تعذّر تحديد أي VASP للطرف المقابل، لذا فإن إثبات الملكية هو المسار المتبقي لإتمام التحويل.
تُعاد الجلسة المنشأة تلقائياً ضمن كتلة action_required الخاصة بالمعاملة (type: "wallet_ownership"، مع url الذي يجب فتحه)، وتشغّلها حزم SDK تلقائياً عند الإرسال من جهة العميل. لا تحصل التحويلات الواردة التي ينشئها Didit نيابةً عنك (تسجيل Sunrise، أو استعلام TRP وارد، أو الشق الوارد لمسار INTERNAL) أبداً على جلسة منشأة تلقائياً، حتى عندما تنتهي في UNCONFIRMED_OWNERSHIP. أنشئ الجلسة يدوياً باستخدام POST /v3/travel-rule/widget-session/ عندما ترغب في التحقق المسبق من محفظة قبل وجود أي تحويل، أو عندما تكون auto_wallet_verification معطلة، أو لأحد هذه التحويلات الواردة.

ما الذي يُثبته

تقدم الأداة حتى أربع طرق لإثبات الملكية. ويعتمد ما يظهر منها على الطريقة التي أنشأتَ بها الجلسة، وعلى إعدادات Travel Rule لديك:

عقد التحقق من توقيع الرسالة

عند إرسال التوقيع، يُعاد 200 مع status: "VERIFIED" بمجرد إثبات السيطرة على المحفظة. ويُعاد 400 ويبقى الإثبات مفتوحاً، حتى يتمكن العميل من التوقيع مجدداً، مع إحدى قيم code التالية:

عقد التحقق من اختبار Satoshi

التحقق من إيداع اختبار Satoshi غير متزامن، لأن المعاملة يجب أن تُرى على السلسلة ثم تُؤكَّد. عند إرسال txid الإيداع يُعاد 200 مع status: "PENDING" طالما لم يُؤكَّد الإيداع على السلسلة بعد، ويُحتفظ بالـtxid ولا يُهمل. ويُعاد 200 مع status: "VERIFIED" بعد تأكيد الإيداع. ويُعاد 400 مع status: "REJECTED" عند وجود إيداع خاطئ فعلاً: مُرسَل من محفظة أخرى، أو مُرسَل بمبلغ غير متوقع إلى عنوان الإيداع، أو أقدم من التحدي، أو معاملة سبق أن أثبتت السيطرة على محفظة أخرى. يُغلق الإثبات، ويمكن للعميل بدء إثبات جديد ما دامت الجلسة تملك محاولات متبقية. ويُعاد أيضاً 200 مع status: "PENDING" للإيداع غير المفهرس بعد، ويُعاد 400 مع الرمز DEPOSIT_LOOKUP_FAILED عند فشل البحث من جهة Didit: وفي الحالتين يبقى الإثبات مفتوحاً وتواصل Didit الفحص. ويُعاد 410 إذا انتهت نافذة الاختبار قبل رصد إيداع صالح. بعد إرسال txid، تعيد مهمة خلفية فحص الإيداع المعلّق كل خمس دقائق، وتُكمل الإثبات بعد تأكيد المعاملة، فلا يحتاج العميل إلى إعادة إرسال الـtxid. وعند تمرير satoshi_deposit_address، يُمدَّد expires_at الخاص بجلسة الأداة إلى 24 ساعة على الأقل، أي نافذة اختبار Satoshi، لإتاحة الوقت لتأكيد الإيداع قبل انتهاء الجلسة نفسها.

التدفق

1

إنشاء جلسة أداة

استدعِ POST /v3/travel-rule/widget-session/ مع المحفظة التي تحتاج إلى التحقق منها. يمكنك اختيارياً ربطها بتحويل ليتقدم التحويل تلقائياً بعد إثبات الملكية.
2

فتح الرابط المُعاد

أرسل إلى عميلك الرابط url من الاستجابة. يُكمل هناك إثباتاً دون الحاجة إلى حساب Didit أو مفتاح API؛ فـtoken في الرابط هو وسيلة المصادقة.
3

رصد الاكتمال

عند التحقق من إثبات ما، تُحدّث الأداة إدخال دفتر العناوين بوصفه موثّقاً، وإذا كانت الجلسة مرتبطة بتحويل فإنها تُقدّم ذلك التحويل إلى المرحلة التالية. راقب الحدث travel_rule.status.updated (للتحويلات المرتبطة) أو استعلم عن سياق الأداة بشكل دوري.

إنشاء جلسة أداة

يربط هذا المثال الجلسة بـالتحويل المُعلَن من محفظة ذاتية الاستضافة من دليل Travel Rule، لذا فإن wallet_address هو عنوان المحفظة الوجهة لذلك التحويل. الجلسة المرتبطة بتحويل تقبل إثباتات لمحفظة الطرف المقابل للتحويل فقط.
افتح دائماً الرابط url المُعاد في الاستجابة كما هو تماماً، ولا تُنشئه بنفسك.

فتح الرابط المُعاد

الأداة متاحة عبر الويب فقط في هذا الإصدار. افتح الرابط url في متصفح النظام أو في تبويب مخصص، ولا تفتحه أبداً داخل عرض webview في أي من حزم Didit SDK للجوال.يعمل توقيع الرسائل مع المحافظ المثبّتة في متصفح العميل، والتي تكتشفها الأداة عبر بروتوكولي EIP-6963 وWallet Standard. ربط تطبيق محفظة منفصل على الجوال، مثلاً عبر رمز QR، غير متاح حالياً، لذا لا تنتقل الأداة إلى تطبيق آخر. لا يستطيع عرض webview داخل التطبيق، مثل عرض webview في Didit Web/Flutter/React Native/iOS/Android SDK، الوصول إلى محافظ متصفح العميل، لذا تُفتح الأداة هناك دون أن تتوفر للعميل وسيلة للتوقيع.على الجوال، افتح الرابط url عبر متصفح نظام التشغيل (SFSafariViewController / Chrome Custom Tabs، أو المتصفح الافتراضي) بدلاً من عرضه في webview. على الويب، تكفي علامة تبويب عادية أو نافذة منبثقة.

رصد الاكتمال

تكشف الأداة endpoint قراءة عامة مفتاحها token؛ استعلم عنها لمعرفة التقدم، أو اعتمد على webhook عندما تكون الجلسة مرتبطة بتحويل:
  • يصبح completed_at غير فارغ بمجرد التحقق من إثبات.
  • يحمل كل عنصر في proofs الحقول التي تحتاجها طريقته: يضيف إثبات SATOSHI_TEST الحقول deposit_address وexpected_amount وexpires_at الخاص به، ويضيف إثبات MESSAGE_SIGNING الحقل challenge، وهو النص الذي يوقّعه العميل.
  • قد يبقى إثبات SATOSHI_TEST في الحالة status: "PENDING" بينما يُرصد إيداعه على السلسلة دون تأكيد، دون أن يتطلب منك أو من العميل أي إجراء. راجع عقد التحقق من اختبار Satoshi أعلاه.
  • عند إنشاء الجلسة مع transaction_id، يؤدي التحقق من الإثبات إلى تقديم التحويل المرتبط، وفي تطبيق مباشر يُطلق webhook travel_rule.status.updated. فضّل الـ webhook على الاستعلام الدوري. تُعاد الموافقة على استفسار TRP الوارد إلى المُرسِل، وينتقل إلى COMPLETED بعد تسليم هذه الموافقة. ينتقل أي تحويل آخر في UNCONFIRMED_OWNERSHIP (أو وارد في ON_HOLD) إلى COMPLETED، أو إلى COUNTERPARTY_MISMATCHED_DATA عندما لا يطابق اسم المستفيد اسم حامل المحفظة، وينتقل إيداع sunrise مُسوّى يكتمل إلى FINISHED. ينتقل التحويل الصادر في COUNTERPARTY_VASP_NOT_FOUND إلى COMPLETED.
  • يبقى إثبات SCREENSHOT في الحالة status: "PENDING" في هذا السياق حتى بعد تأكيدك للملكية. توافق عليه عبر POST .../travel-rule/ownership/، الذي يقبل فقط تحويلاً ينتظر تأكيد الملكية. لذلك لا يملك إثبات لقطة الشاشة مساراً للموافقة في جلسة بلا تحويل مرتبط، أو في جلسة مرتبطة بتحويل صادر في COUNTERPARTY_VASP_NOT_FOUND. عطّل allow_screenshot_proof إذا كان يجب ألا تعرض هذه الجلسات هذا الإثبات.
  • بعد إثبات مرفوض تحصل الجلسة على محاولة جديدة ما دامت المحاولات متبقية. يعرض max_attempts وattempts_used وattempts_remaining العدد، ويحمل الإثبات المرفوض rejection_reason، وعندما تكون attempts_remaining مساوية لـ 0 تؤدي محاولة بدء إثبات آخر إلى استجابة بالرمز 409، فتُنشئ جلسة جديدة.
  • تُعيد endpoint سياق الأداة 404 لرمز غير معروف، و410 بعد انتهاء صلاحية الجلسة دون اكتمالها.
لا توجد هنا تبعيات أحادية الاستخدام: تنتهي الأداة وخادمك إلى الحالة الدائمة نفسها (إدخال دفتر العناوين الموثّق وحالة التحويل)، لذا يمكن دائماً استعادة webhook لم يُسلَّم أو علامة تبويب أُغلقت بإعادة قراءة التحويل أو سياق الأداة.

التعريب والعلامة التجارية

تُعرض الأداة بـ 54 لغة، وفق مسار اللغة في الرابط (أو لغة المتصفح الافتراضية). عند تفعيل العلامة البيضاء لتطبيقك، ترث الأداة تلقائياً العلامة التجارية لتدفق التحقق: الشعار، وألوان العلامة التجارية، وتنسيق الأزرار واللوحات، والخط المخصص، والأيقونة المفضلة، واسم تطبيقك العام في العنوان. لا يلزم أي إعداد منفصل، إذ تنطبق على هذه الأداة التخصيصات نفسها التي ضبطتها لجلسات KYC. يرى المستخدم الذي يعود إلى رابط مكتمل شاشة الإكمال مرة أخرى، وإذا مررت callback_url، فإن الأداة تعيد المستخدم إليه. تعرض الروابط المنتهية الصلاحية شاشة انتهاء صلاحية تحمل العلامة التجارية، تطلب من المستخدم طلب رابط جديد. أنشئ جلسة جديدة لهم باستخدام POST /v3/travel-rule/widget-session/: إعادة إرسال التحويل باستخدام action: "resend" لا تنشئ جلسة.

الخطوات التالية

Travel Rule

دورة حياة التبادل الكاملة، والمسارات، والإعدادات، وتدفقات الاستلام.

دفتر عناوين المحافظ

سجّل المحافظ التي تتحكم فيها حتى تُطابَق التحويلات الواردة معها.

webhooks

اشترك في travel_rule.status.updated للتفاعل عندما يتسبب إثبات في انتقال تحويل إلى مرحلة لاحقة.

SDKs الأصلية

افتح عنوان URL الخاص بالأداة في متصفح النظام، لا في عرض الويب الخاص بـ SDK.
آخر تعديل في ٧ نوفمبر ٢٠٢٦