العناوين الفرعية
عدد غير محدود من العناوين غير القابلة للربط من زوج مفاتيح واحد
العنوان الفرعي ذو الفهرس (i, j) هو زوج النقاط D = B + m·G وC = a·D، حيث m = Hs("SubAddr\0" ‖ a ‖ i ‖ j). ومن دون مفتاح العرض a لا يمكنك معرفة أن العناوين الفرعية تعود إلى المحفظة نفسها.
لماذا
إذا أعطيت عنوانًا واحدًا لشخصين مختلفين، فيمكنهما مقارنة ما لديهما واكتشاف أنهما دفعا للمستلم نفسه. العناوين الفرعية تحل هذه المشكلة: عنوان لكل دافع، بينما تبقى المحفظة واحدة ولا يصبح المسح أبطأ.
تشكّل العناوين الفرعية تسلسلًا هرميًا من مستويين: الحساب i (الرئيسي) والفهرس داخل الحساب j (الثانوي). العنوان الفرعي (0, 0) هو العنوان الرئيسي.
للمحفظة عنوان رئيسي واحد فقط — (0,0)، وهو ببساطة B وA مع البادئة 18. أما أي فهرس آخر، بما في ذلك العنوان "الأول" للحساب الثاني (1,0)، فهو عنوان فرعي: تُشتق مفاتيحه عبر m = Hs("SubAddr\0" ‖ a ‖ 1 ‖ 0)، ويُرمَّز بالبادئة 42، ومن هنا 8…. الحساب مجرد وسيلة لتجميع العناوين الفرعية؛ وليس له عنوان "رئيسي" خاص به.
كيف يُحسب
D = B + m·G C = a·D i و j عددان بطول 32 بت بترتيب little-endian؛ و"SubAddr\0" يتكون من 8 بايتات تنتهي ببايت صفري
يُرمَّز العنوان الفرعي مثل العنوان العادي لكن بالبادئة 42 (يبدأ بـ 8 على الشبكة الرئيسية): Base58(42 ‖ D ‖ C ‖ checksum).
لاحظ أن "مفتاح العرض" العام للعنوان الفرعي C ليس a·G بل a·D. هذه الحيلة ضرورية للإرسال.
الإرسال إلى عنوان فرعي
عند الإرسال إلى عنوان عادي يكون مفتاح المعاملة R = r·G. أما عند الإرسال إلى عنوان فرعي فيستخدم المرسِل R = r·D. ثم يحسب المستلم السر المشترك كالمعتاد:
المرسِل يعرف r وC، والمستلم يعرف a وR، وكلاهما يحصل على النقطة نفسها.
كيف تتعرف المحفظة على عناوينها الفرعية
تحسب المحفظة مسبقًا D لبضع مئات من الفهارس وتحتفظ بجدول D → (i, j). ولكل مخرج تحسب مرشحًا
وتبحث عن D' في الجدول. إن وُجد — فالمخرج لنا، ونعرف أيضًا إلى أي عنوان فرعي وصل. ولهذا لا تُبطئ العناوين الفرعية المسح: عملية طرح واحدة وبحث في جدول تجزئة.
إذا احتوت المعاملة على مخرج إلى عنوان فرعي، تستخدم المحفظة المرسِلة مفتاح معاملة منفصلًا لكل مخرج (مفاتيح إضافية في tx_extra). وإلا لاستطاع المستلم اختبار ما إذا كان الباقي (الفكة) العائد إلى المرسِل ينتمي إلى عنوان ما.