يمكن لكل دفعة في Blocknet أن تحمل ملاحظة قصيرة مشفرة. يمكنك استخدامها لرقم فاتورة، أو مرجع طلب، أو رسالة إلى الشخص الذي تدفع له، ولا يستطيع قراءتها سواكما. يوضح هذا الدليل كيف تضيف مذكرة عند إرسال BNT، ومن يستطيع قراءتها، ولماذا لا تبرز المذكرات أبدًا على السلسلة، وأين تجد المذكرات التي تستلمها.
ما هي مذكرة Blocknet؟
مذكرة Blocknet حقل مشفر بحجم 128 بايت مرفق بكل مُخرَج من مُخرَجات المعاملات. يتسع لما يصل إلى 124 بايت من نصك أو بياناتك، مثل رقم فاتورة أو ملاحظة قصيرة. يُشفَّر بسر لا يشترك فيه إلا المرسل والمستلم، ويُحشى بحيث تبدو المذكرة الفارغة مثل المذكرة الممتلئة.
المذكرة جزء من صيغة المعاملة نفسها. لكل مُخرَج على السلسلة مذكرة، بما في ذلك مُخرَجات الباقي التي تعيد العملات إلى محفظتك. وهذا يمنح ثلاث خصائص مفيدة:
- خاصة افتراضيًا. يُشفَّر المحتوى لمستلم ذلك المُخرَج. لا أحد غيره يرى ما كتبت.
- حجم ثابت. الحقل دائمًا 128 بايت على السلسلة، أيًا كان ما تضعه فيه.
- موجودة دائمًا. بما أن كل مُخرَج يحمل مذكرة، تبدو الدفعة التي تحمل ملاحظة تمامًا مثل الدفعة التي لا تحملها.
ماذا يمكنك أن تضع في المذكرة؟
أي شيء يتسع في 124 بايت. يُخزَّن النص العادي بترميز UTF-8، فبالإنجليزية يعني ذلك 124 حرفًا ورقمًا ومسافة. وتأخذ الأحرف خارج الأبجدية اللاتينية بايتات أكثر: يأخذ الحرف الصيني ثلاث بايتات، فتتسع المذكرة لنحو 41 حرفًا منها.
استخدامات شائعة:
- الفواتير. ضع رقم الفاتورة في المذكرة، وسيتمكن مستلم الدفعة من مطابقتها مع الفاتورة الصحيحة دون أن يسأل.
- أرقام الطلبات. يمكن للمتجر أو مقدم الخدمة أن يطلب من العملاء إدراج مرجع الطلب، ثم يقرؤه مباشرة من الدفعة الواردة.
- الملاحظات. عبارات مثل «إيجار نوفمبر» أو «شكرًا على المساعدة» أو «حصتي من العشاء» تنتقل مع العملات.
- البيانات الثنائية. تقبل المحفظة أيضًا بايتات خام مكتوبة بالنظام الست عشري (hex)، لرموز مرجعية تولّدها البرمجيات وتقرؤها.
كيف تضيف مذكرة عند إرسال BNT؟
في محفظة سطر الأوامر، اكتب المذكرة بعد المبلغ: send @rock 100 “invoice 1042”. تعرض المحفظة المذكرة في شاشة التأكيد بجانب الرسوم، وتشفّرها للمستلم، وترسل الدفعة بعد أن تؤكد. وتعمل البايتات الخام أيضًا مع البادئة hex:.
يأخذ أمر send في المحفظة المذكرة كمعامل أخير اختياري:
send <address> <amount> [memo|hex:<memo_hex>]
يمكن أن تحتوي المذكرة على مسافات، وعلامات الاقتباس حولها اختيارية. تزيل المحفظة زوج علامات الاقتباس المتطابق قبل تشفير النص. إليك دفعة إلى اسم Blocknet ID مع رقم فاتورة:
> send @rock 100 "invoice 1042"
Resolved @rock -> <address> ✓ verified
# Send
Building transaction...
Send 100 BNT to @rock?
Fee: <fee>
Address: <address>
Memo: "invoice 1042"
Confirm [y/N]: y
تعرض خطوة التأكيد المذكرة التي سيقرؤها المستلم، فتستطيع مراجعتها قبل إرسال أي شيء. وإذا كانت المذكرة أطول من 124 بايت، تتوقف المحفظة قبل بناء المعاملة بالرسالة memo too long: max 124 bytes، ويمكنك اختصارها والمحاولة مجددًا.
لإرسال بايتات خام، ضع البادئة hex: قبل المذكرة. تفك المحفظة ترميز الـ hex وتشفّر البايتات:
send @rock 100 hex:494e562d31303432
يمكن لـ روابط الدفع أن تحمل مذكرة أيضًا. عندما تلصق رابط blocknet:// أو رابط bntpay.com في المحفظة، تملأ العنوان والمبلغ والمذكرة لتؤكدها، فيستطيع الشخص الذي تدفع له تحديد مرجع الفاتورة مسبقًا. ويمكنك قراءة المزيد عن الأسماء والروابط في دليل Blocknet ID.
المذكرات من برمجياتك الخاصة
تقبل واجهة API للمحفظة مذكرة لكل مستلم في عملية الإرسال. في طلب إلى POST /api/wallet/send، أعطِ كل مستلم إما memo_text للنص العادي أو memo_hex للبايتات الخام:
{
"recipients": [
{ "address": "@rock", "amount": 10000000000, "memo_text": "invoice 1042" },
{ "address": "$shop", "amount": 2500000000, "memo_hex": "4f524445522d3737" }
]
}
المبالغ هنا بالوحدات الذرية، حيث يساوي 1 BNT ما مقداره 100,000,000 وحدة، فيرسل المثال 100 BNT و25 BNT. يحصل كل مستلم على مذكرته الخاصة، مشفرة لمحفظته وحدها. وينطبق الحد الأقصى نفسه البالغ 124 بايت.
من يستطيع قراءة مذكرة Blocknet؟
المرسل والمستلم. تُشفَّر كل مذكرة بالسر الذي تتشاركه المحفظتان لذلك المُخرَج، وهو السر نفسه الذي ينشئ العنوان الخفي (stealth address) لمرة واحدة للمستلم. أما أي شخص آخر، بمن فيهم مشغلو العقد ومستكشفو الكتل، فيرى 128 بايت من بيانات تبدو عشوائية ولا يستطيع معرفة ما إذا كانت بداخلها ملاحظة.
عندما تبني محفظتك دفعة، تجمع مفتاح معاملة عشوائيًا جديدًا مع مفتاح العرض (view key) العام للمستلم للحصول على سر مشترك. هذا السر هو ما يصنع العنوان الخفي لمرة واحدة للمستلم، وتستخدمه المحفظة أيضًا لتشفير المذكرة. فهي تجزّئ السر بـ SHA3-256، مع موضع المُخرَج في المعاملة ومعرّف الشبكة، لصنع قناع بحجم 128 بايت، ثم تدمج القناع مع المذكرة. يحصل كل مُخرَج على قناعه الخاص، فتُشفَّر مذكرتان في المعاملة نفسها كلٌّ على حدة.
تجد محفظة المستلم السر نفسه من الجهة الأخرى، باستخدام مفتاح العرض الخاص بها، أثناء فحص كل كتلة. فتفك تشفير المذكرة وتخزّنها مع الدفعة. ومن جهتك، تحتفظ المحفظة بالمذكرات التي كتبتها في سجل الإرسال.
نقطتان تستحقان المعرفة:
- المحفظة المخصصة للعرض فقط تعرض المذكرات أيضًا. مفتاح العرض الخاص بك هو ما يقرأ الدفعات الواردة، لذا ترى المحفظة المبنية منه للعرض فقط مبلغ كل دفعة ومذكرتها. لا تشارك هذا المفتاح إلا مع أشخاص تسمح لهم برؤية دفعاتك الواردة.
- مكافآت التعدين تحمل مذكرات فارغة. يشترط الإجماع أن تكون المذكرة في كل مكافأة كتلة فارغة، فلا يمكن أبدًا استخدام مُخرَجات coinbase في السلسلة كقناة رسائل عامة.
لماذا تبدو كل مذكرة متماثلة على السلسلة
المذكرة التي تكشف طولها ستفصح عن شيء ما. فالملاحظة ذات الـ 30 بايت تبدو مختلفة عن ملاحظة من 100 بايت، والمذكرة الفارغة ستبرز عن كلتيهما. تسد محفظة Blocknet هذه الثغرة بتخطيط ثابت وحشو عشوائي.
قبل التشفير، تضع المحفظة المذكرة في غلاف بحجم 128 بايت:
| البايتات | المحتوى |
|---|---|
| 1 | إصدار الغلاف |
| 1 | طول مذكرتك |
| 2 | المجموع الاختباري للمذكرة |
| من 0 إلى 124 | مذكرتك |
| الباقي | حشو عشوائي |
يأتي الحشو من مولّد الأرقام العشوائية التشفيري في النظام، فتكون المساحة غير المستخدمة غير قابلة للتنبؤ. وبعد التشفير، تصبح الملاحظة القصيرة والملاحظة الكاملة والمذكرة الفارغة كلها 128 بايت من بيانات تبدو عشوائية. وتحصل مُخرَجات الباقي على مذكرة فارغة محشوة خاصة بها، فحتى العملات التي ترسلها إلى نفسك تبدو مثل غيرها.
يتيح المجموع الاختباري لمحفظة المستلم التأكد من أنها فكّت تشفير المذكرة بشكل صحيح قبل عرضها. وترفض العقد أيضًا أي كتلة تحتوي على مُخرَج حقل مذكرته كله أصفار، فيحمل كل مُخرَج على السلسلة مذكرة مملوءة بشكل سليم.
أين تجد المذكرات التي استلمتها
تعرض محفظة سطر الأوامر المذكرات أينما سردت الدفعات:
historyيسرد الدفعات الواردة والصادرة، مع سطرmemo:تحت أي دفعة حملت مذكرة.outputs tx <txid>يعرض كل مُخرَج تملكه محفظتك في تلك المعاملة، بما في ذلك المذكرة. ويفعلoutputs <n>الشيء نفسه لمُخرَج واحد من القائمة.- واجهة API للمحفظة تُرجع مذكرة كل مُخرَج مُستلَم في الحقل
memo_hexمنGET /api/wallet/history، جاهزة لنظام طلبات يطابقها مع الفواتير.
تظهر المذكرات النصية بين علامتي اقتباس. أما المذكرة التي ليست نصًا قابلًا للطباعة، مثل البايتات الخام المرسلة بـ hex:، فتظهر بصيغة hex.
إذا احتاجت دفعة يومًا إلى تسوية، يستطيع المرسل إثباتها. يطبع أمر prove <txid> في المحفظة مفتاح المعاملة لدفعة أرسلتها. ويستطيع أي شخص لديه هذا المفتاح ومعرّف المعاملة وعنوان المستلم التحقق من الدفعة عبر نقطة النهاية POST /api/verify-proof، التي لا تحتاج إلى محفظة. فهي تؤكد المعاملة وتعرض المُخرَجات التي استلمها ذلك العنوان ومبالغها ومذكراتها.
اكسب الـ BNT التي سترسلها
طريقة بسيطة للحصول على أول BNT لديك هي تعدينها. يعمل seine على جهازك الشخصي، ويضبط نفسه أثناء التعدين، ويدفع عبر bntpool.com مباشرة إلى عنوانك أو إلى @name الخاص بك. ويشغّله دليل التعدين خلال دقائق.
الأسئلة الشائعة
ما الطول الأقصى لمذكرة Blocknet؟
تتسع المذكرة لما يصل إلى 124 بايت. يُخزَّن النص العادي بترميز UTF-8، أي 124 حرفًا أو رقمًا أو علامة ترقيم بالإنجليزية، أو نحو 41 حرفًا صينيًا بثلاث بايتات لكل حرف. توقف المحفظة المذكرة الأطول قبل بناء المعاملة وتخبرك بالحد الأقصى البالغ 124 بايت.
هل يستطيع مستكشف الكتل قراءة مذكرة Blocknet؟
لا. يعرض المستكشف حقل المذكرة على أنه 128 بايت من النص المشفر مع وسم مشفّر. يأتي المفتاح من السر المشترك بين المرسل والمستلم لذلك المُخرَج، لذا لا تستطيع فتحها إلا محفظتاهما. ولأن كل مذكرة محشوة إلى حجمها الكامل، لا يستطيع المستكشف حتى معرفة أي المُخرَجات تحمل ملاحظة.
هل تجعل المذكرة معاملة Blocknet أكبر حجمًا؟
لا. يحمل كل مُخرَج أصلًا حقل مذكرة مشفرًا بحجم 128 بايت، سواء كتبت ملاحظة أو تركته فارغًا. إضافة مذكرة تملأ مساحة موجودة على أي حال، لذا فإن دفعة تحمل رقم فاتورة لها الحجم نفسه تمامًا لدفعة مماثلة دونه، وتبدو الاثنتان متطابقتين على السلسلة.
هل يمكنني إضافة مذكرة عندما أدفع لاسم Blocknet ID؟
نعم. ضع الاسم مكان العنوان والمذكرة بعد المبلغ، مثل send @rock 100 "invoice 1042". تحلّ المحفظة الاسم، وتعرض العنوان المُتحقَّق منه والرسوم والمذكرة، وتطلب منك التأكيد. تُشفَّر المذكرة للمحفظة التي يشير إليها الاسم.