Output Descriptor وصف نصي يحدد المفاتيح والقواعد التي تستخدمها المحفظة لبناء مخرجات Bitcoin، أي سجلات المبالغ والشروط التي تسمح بإنفاقها لاحقًا. يساعد على إعادة إنشاء العناوين الصحيحة والتعرف على دفعاتها. ليس معاملة ولا نسخة احتياطية كاملة، وقد يقتصر على بيانات عامة أو يتضمن مفاتيح سرية.
تريد آنا تغيير التطبيق الذي تتابع من خلاله محفظتها المادية. هدفها نقل إمكانية عرض الأموال من دون إدخال كلمات الاستعادة في الحاسوب. تُسمى كلمات الاستعادة Seed Phrase، وهي نسخة احتياطية يمكن استعادة مفاتيح المحفظة منها. يخبر descriptor العام التطبيق الجديد بالمفاتيح العامة التي يستخدمها وبطريقة إنشاء العناوين نفسها. تخيله تعليمات دقيقة لبناء العناوين، لا كلمة مرور إضافية. في المحافظ المعتادة، يستطيع البرنامج غالبًا التعرف على الإعدادات القياسية تلقائيًا. لكن لا يصح الاعتماد على التخمين مع إعداد غير مألوف أو Multisig (إعداد محفظة يضم عدة مفاتيح للتوقيع). لا ينقل descriptor أموالًا ولا يغير الدفعات التي وصلت بالفعل. بل يصف القواعد التي يجب الحفاظ عليها عند الاستعادة. [1] [8]
يتيح المفتاح الخاص إنشاء توقيع رقمي يثبت الموافقة على الإنفاق. أما المفتاح العام فيتيح التحقق من ذلك التوقيع، ولا يتيح إنشاءه. قد يحتوي descriptor العام على xpub، أي بيانات تتيح اشتقاق مفاتيح عامة أخرى من دون القدرة على التوقيع. يناسب ذلك Watch-only Wallet، وهي محفظة تتابع الدفعات لكنها لا ترسلها بنفسها. ومع ذلك، تحتاج هذه البيانات إلى حماية الخصوصية، لأنها قد تربط عددًا كبيرًا من عناوينك وسجلاتها ببعضها. وقد يحتوي descriptor آخر على xprv، وهو مفتاح خاص موسع، أو WIF، وهو ترميز لمفتاح خاص منفرد. هنا تصبح البيانات سرية، وقد تتيح إنفاق الأموال وفق الشروط المعنية. لا ترسلها إلى أداة فحص على الإنترنت ولا تحفظها كملاحظة عادية غير حساسة. الإعداد العام لا يحل محل النسخ الاحتياطية اللازمة للتوقيع. [1] [8]
بعد الاستيراد، تقارن آنا عدة عناوين للاستقبال بعناوين المحفظة الأصلية. ومع المحفظة المادية، تتحقق من العناوين على شاشة الجهاز الموثوقة وفق خطوات الشركة المصنعة. وتراجع أيضًا إعداد فرع الباقي، أي الجزء الذي يعيد إليها المبلغ غير المنفق عند الدفع. تطابق اسم الحساب وحده لا يكفي. وقبل الاعتماد على النسخة الجديدة، تختبر إجراء الاستعادة كاملًا بالطريقة المناسبة لمحفظتها، من دون كشف المفاتيح السرية بلا داعٍ. إذا كان التطبيق لا يدعم descriptor أو يعرض عناوين مختلفة، تبدأ بفحص التوافق والشبكة والإعدادات. إعادة كتابة تعبير غير مفهوم بالتخمين ليست إصلاحًا آمنًا. [5] [8]
في محفظة تتطلب توقيعين من ثلاثة مفاتيح، لا تكفي مجموعتان من كلمات الاستعادة مع تذكّر أنها كانت «اثنين من ثلاثة». لإعادة بناء شروط الإنفاق الصحيحة، تحتاج إلى البيانات العامة للمفاتيح الثلاثة كلها، وقواعد اشتقاقها، ونوع السكربت الدقيق. السكربت يحدد الشروط التي يجب استيفاؤها لإنفاق الأموال. يستخدم التعبير التقني multi(k,...) ترتيب المفاتيح كما هو مكتوب، ويمثل k عدد التوقيعات المطلوبة. أما sortedmulti(k,...) فيرتب المفاتيح العامة المشتقة بحسب بايتاتها عند إنشاء كل سكربت. هاتان قاعدتان مختلفتان، وليستا اسمين يمكن تبديل أحدهما بالآخر. لذلك احفظ التصدير الكامل للإعداد، مع حماية النسخ الاحتياطية للمفاتيح اللازمة للتوقيع بشكل منفصل. قائمة بأسماء الأجهزة لا تكفي. [2] [8]
قد تأتي بعد الرمز # ثمانية محارف تُسمى checksum، وهي قيمة التحقق المحددة في BIP380. يستخدمها البرنامج لاكتشاف كثير من أخطاء النسخ. لكنها ليست توقيعًا من صاحب النص، ولا تشفيرًا، ولا دليلًا على أن descriptor يخصك. من يستبدل المفاتيح بمفاتيحه عمدًا يستطيع أيضًا حساب قيمة تحقق جديدة صحيحة. لذلك ينبغي أن يصاحب فحص النص تحققٌ من العناوين ومصدر الإعداد. إذا أبلغ التطبيق عن خطأ في القيمة، احصل أولًا على التصدير الأصلي من جديد. مجرد توليد قيمة جديدة قد يجعل الفحص يقبل نصًا تعرض للتلف بالفعل. [1]
قد يسبق المفتاح تعبير [fingerprint/path]، ويسمى معلومات أصل المفتاح، أو key origin. Fingerprint معرّف قصير للمفتاح الذي بدأ منه الاشتقاق، وpath هو المسار الذي نتج عنه المفتاح المكتوب بعده. يساعد ذلك جهاز التوقيع على العثور على المفتاح الصحيح. وقد يأتي بعد xpub مسار آخر لاشتقاق العناوين الفردية. لهذين الجزأين وظيفتان مختلفتان، وليسا مجرد تسمية للحساب. قد تتطابق قيمة fingerprint لمفتاحين مختلفين بالمصادفة، لذلك لا تثبت هوية الجهاز. ولا يستطيع التصدير العام أن يتجاوز بحرية خطوة Hardened Derivation التي تتطلب بيانات خاصة؛ على التطبيق المُصدّر اختيار مستوى المفتاح المناسب. [1]
تعني النجمة في /* إدخال أرقام متتابعة، مثل 0, 1, 2. هذا النوع، ranged descriptor، لا يصف عنوانًا واحدًا فقط؛ يحدد البرنامج نطاق الفهارس الذي يعالجه في كل عملية. ويمكن للصيغة <0;1> وفق BIP389 أن تشمل فرعين، عادة للاستقبال والباقي، إذا دعمها التطبيق. لكن descriptor نفسه لا يحتفظ بقائمة العناوين المستخدمة ولا يسجل الرقم التالي غير المستخدم. كذلك فإن gap limit، أي عدد العناوين المتتالية التي لم تُستخدم من قبل والذي يتوقف عنده البحث، ليس جزءًا تلقائيًا من التعبير. غير مستخدم يعني هنا بلا سجل معاملات: العنوان الذي استقبل أموالًا ثم أُنفقت لا يُعدّ عنوانًا غير مستخدم. لذلك قد تتطلب الاستعادة نقل حالة المحفظة أيضًا والبحث في نطاق واسع بما يكفي. [5] [6] [9]
يتضمن مخرج المعاملة scriptPubKey، وهو السكربت الذي يحدد شروط إنفاقه لاحقًا. يوضح descriptor كيفية بنائه. يصف wpkh(KEY) صيغة Native SegWit بمفتاح واحد؛ KEY هنا رمز توضيحي وليس مفتاحًا حقيقيًا. وعند تغليفه بصيغة sh(wpkh(KEY))، يتغير شكل المخرج وعنوانه رغم بقاء المفتاح نفسه. توجد تعبيرات أخرى مثل pk() وpkh() وwsh() وaddr() وraw(). ليست خيارات متكافئة: فمثلًا يصف addr() عنوانًا معروفًا، لكنه لا يوفر وحده البيانات الناقصة اللازمة لإنفاق أمواله. هذا القسم مرجع للإعداد، وليس مطالبة للمبتدئ بأن يكتب descriptor يدويًا. [1] [8]
يمكن إنفاق مخرج Taproot بتوقيع المفتاح أو عبر شروط السكربت المرفقة إذا كان المخرج يتضمنها. تحدد tr(KEY) مفتاحًا داخليًا من دون فرع سكربت قابل للاستخدام في الإنفاق، بينما تضيف tr(KEY,TREE) شجرة سكربتات. لذلك لا يقتصر ما يجب حفظه على قائمة المفاتيح. طريقة تجميع السكربتات داخل الشجرة مهمة أيضًا: فقد يؤدي تغييرها إلى تغيير بصمتها المجمعة، Merkle root، والعنوان الناتج، حتى لو بقيت الشروط الفردية كما هي. لكن ليس كل تبديل للفروع يغير النتيجة. تساعد Miniscript على كتابة الشروط وتحليلها، ويعبّر multi_a عن عدة توقيعات في Tapscript، لغة السكربت الخاصة بـTaproot. ولا يحل أي منهما وحده محل تصدير الإعداد الكامل. [3] [8]
RPC واجهة لإرسال الأوامر إلى البرنامج من برنامج آخر أو من سطر الأوامر. في Bitcoin Core 29، يحلل أمر RPC المسمى getdescriptorinfo التعبير. ويعيد صيغة عامة بلا مفاتيح خاصة، إلى جانب checksum وisrange وissolvable وhasprivatekeys. يوضح الحقل الأخير ما إذا كانت المدخلات قد احتوت على مفتاح خاص؛ أما issolvable فلا يعني أنك تملك المفاتيح السرية اللازمة للتوقيع. يتيح deriveaddresses مقارنة العناوين المشتقة. وعند الاستيراد، يستقبل importdescriptors أيضًا timestamp وactive وinternal وrange وnext_index: وقت بدء البحث في السجل، وما إذا كان الإعداد نشطًا، وما إذا كان للباقي الداخلي، والنطاق، وفهرس العنوان التالي. Rescan هو البحث مجددًا عن المعاملات في السلسلة. قد يفوّت timestamp المتأخر دفعات قديمة؛ لكن تغيير descriptor وحده لا ينقلها ولا يمحوها. وبعد الاستيراد، تحتاج إلى نسخة احتياطية جديدة للمحفظة. استخدم هذه الأوامر في برنامجك الموثوق، لا في نموذج على موقع يخص شخصًا آخر. [5] [7] [8]
للحصول على صورة أوضح، اقرأ هذا المدخل مع محفظة, Watch-only Wallet, Multisig, PSBT, Miniscript, Bitcoin. تشير إلى هذا المدخل أيضًا Watch-only Wallet, Extended Public Key (xpub), PSBT, الحفظ الذاتي.