كيفية عمل ضمان البيتكوين الغير مقيد على منصة LocalCryptos

لقد أصدرت منصة LocalCryptos تشفيرًا جديدًا لنظام النظير للنظير على المتجر.

في شهر نوفمبر من عام 2019، أصدرت منصة LocalCryptos ضمانات البيتكوين. لقد قمنا بنسخ مفهومنا القائم على الإيثيروم وترجمنا كود النص ليتوافق مع البيتكوين.

في هذه المقالة، سوف نشرح كيفية عمله.

تفترض هذه المقالة أنك تمتلك قدر من المعلومات التقنية بشأن عملة البيتكوين. سنحاول أن نجزأه لمفاهيم بسيطة، ولكن إذا كنت لا تعلم معنى المصطلح UTXO، قد يكون من الصعب عليك المتابعة.

هذا الإعداد غير مقيد منذ البداية إلى النهاية. تخزن خوادم منصة LocalCryptos النقاط المشفرة فقط والتي لا يمكن التمييز بينها وبين الكلام الغير مفهوم. ولا تولد خوادمنا أي معاملات موصوفة هنا- فجميعها نصوص جافا الخاصة بمتصفحك.

أصلنا في الإيثيروم

لقد كان اسم منصتنا LocalEthereum قبل أن نعيد تسميتها لتصبح LocalCryptos. وكانت منصة LocalEthereum المنصة الأولى على مستوى العالم التي تعمل بنظام النظير للنظير في التداول بعملات الإيثيروم. كما كانت تعتبر أشهر منصة لتداول العملات المشفرة بنظام النظير للنظير بعد منصة PaxFul ومنصة LocalBitcoins.

لم تكن منصة LocalEthereum مجرد استنساخ بسيط لمنصة LocalBitcoins. فعلى الرغم من أن رحلة المستخدم كانت مشابهة، إلا أن منصة LocalEthereum كانت تحتوى على العديد من الخفايا. فقد كانت المنصة الوحيدة التي تستخدم المراسلة المشفرة كليًا بنظام end-to-end ومحفظة الويب الغير مفيدة. وكانت أيضًا المنصة الأولى التي تقدم “ضمان غير مقيد”، وهو ما قد يبدو متناقضًا. دعونا نشرح لكم ما نعنيه بذلك:

بدلًا من الاحتفاظ بالعملات المشفرة الخاصة بالضمان في محفظة ما على الخادم، تستخدم المنصة عقد إيثيروم ذكي. ويتم نقل الإيثير (ETH) من البائع إلى العقد الذكي، ثم من العقد الذكي إلى المشتري. يحدد العقد الذكي قواعد الضمان المحجوز في وقت مسبق وبأسلوب غير مركزي. وباستخدام العقد الذكي بدلًا من المقيد، يكون الضمان خاليًا من الوسطاء.

والآن صنعنا نفس النظام لعملات البيتكوين. باستثناء أن عملة البيتكوين لا تمتلك حسابات ضمان وإنما نصوص. تشه النصوص حسابات الضمان في عدد من الأمور، ولكنها تختلف عنها في أمور أخرى كثيرة.

ما الذي يتم في معاملة البيتكوين؟

تحتوي معاملات البيتكوين على مدخلات ومخرجات. يمتلك كل مخرج عنوان مستلم - الذي ترسل إليه عملات البيتكوين - والكمية التي سوف يتم نقلها إلى العنوان. وتشير المدخلات إلى المخرجات السابقة - العملات التي أرسلت إليك والتي لم تنفقها بعد.

تكون “عناوين” البيتكوين عبارة عن مفاهيم غريبة لا يمكن فكها. بشكل ما، لا تمثل جزءًا من البروتوكول - فهي ليست مذكورة في بيان ساتوشي ناكاموتو.

1MoNS93aYgeuCcojcYbAJpKxqDN9UuJa9C

توجد أنواع متعددة من عناوين البيتكوين. يتكون عنوان البيتكوين، عند تشفيره، من جزئين: معرف الإصدار والحمولة. يوجد حقل الإصدار في البداية، وهو يخبر محفظة البيتكوين الخاصة بك بنوع العنوان الذي تتعامل معه. يعتمد استخدام الحمولة على الإصدار.

يكون العنوان الذي يبدأ ب 1 هو عنوان تجزئة مفتاح الدفع العام (P2PKH)، أحدث عنوان إصدار. أما العنوان الذي يبدأ ب3 فهو عنوان (P2SH) تجزئة للدفع للنص. قد ترى بادئات عناوين أخرى أيضًا مثل عنوان SegWit الأصلي. وفي هذه المقالة، سوف نستخدم عناوين P2SH و P2PKH فقط الضرورية للفهم.

تصف معايير العنوان كيفية إنشاء الأحجيات وكيفية إنشاء الحلول الخاصة بفكها. يمكّن حل الأحجية المستلم من استخدام المخرج كمدخل في معاملة أخرى.

أليس ترسل لبوب بعض الكعك بالطريقة التقليدية

في عنوان P2PKH، تكون الحمولة التي تتبع الإصدار هي تجزئة المفتاح العام للمستلم. تكون وظيفة التجزئة المستخدمة هي “hash160”، والتي يتم ترجمتها إلى RIPEMD160(SHA256(thing)).

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

حتى يتمكن بوب من إنفاق هذا المخرج، يجب عليه أن يستخدمها كمدخل في معاملة بيتكوين أخرى. حتى يفعل ذلك، عليه أن يصيغ ScriptSig صالح متوافق مع مفتاح النص العام.

أي عنوان P2PKH خاص بمفتاح النص العام يجب أن يتبع دائمًا هذا القالب:

OP_DUP OP_HASH160 <PubKeyHash> OP_EQUAL OP_CHECKSIG

وعنوان P2PKH المتوافق مع ScriptSig يجب أن يكون بالصيغة التالية:

<Signature> <PubKey>

OP_Huh؟

يعتبر مفتاح النص العام للمخرج قطعة من الكود. ويكون مكتوبًا بلغة برمجة مقيدة مبنية على مصفوفة فريدة خاصة بعملة البيتكوين، وتدعى “النص”.

ويكون ScriptSig قطعة من الكود أيضًا، ولكن وفقًا لقواعد الجمع الخاصة بالبيتكوين يمكن أن يحتوي على “بيانات الدفع” فقط. بعبارة مبسطة، يعني ذلك أنه لا يمكنه أن يؤدي أي وظيفة باستثناء إضافة بيانات عشوائية للمصفوفة.

في هذا المثال على عنوان P2PKH، يضيف نص ScriptSig الخاص ببوب أمرين إلى المصفوفة:

التحقق من صحة ScriptSig

قبل أن تتمكن شركة التعدين من تضمين هذه المعاملة في كتلة، يجب أن يتأكدوا من صحة ScriptSig_الخاص _بمفتاح النص العام.

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

<Signature> <PubKey> OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

كما ترون، تنتهي المصفوفة “برقم صحيح”. إذا أردت معرفة المزيد من المعلومات حول P2PKH وسبب أهميتها، توجد العديد من المصادر التي توضح ذلك على الويب. ابحث على جوجل عن P2PKH لمعرفة المزيد.

ما هو عنوان P2SH؟

تنقل عناوين الدفع لتجزئة النص مسؤولية توريد شروط الدفع إلى المنفق.

هل تذكرون عندما تحدثت قبل قليل عن أن عناوين الدفع لتجزئة النص الخاصة بالمنفق لا يمكنها أن تتضمن كود لا يتكون من بيانات؟ فلننس ذلك لبرهة— فعنوان P2SH سوف يغير كل شيء.

بدلًا من كتابة شروط الإنفاق داخل مفتاح النص العام، يدخل ذلك الكود في نص الإستعادة. نعم، هذا مصطلح جديد— وهو يشير بكلمات بسيطة غير تقنية إلى الأحجية “الحقيقية” الخاصة بالمخرج. عندما ترسل عملات إلى عنوان P2SH، يحتوي _ ScriptPubKey_ على تجزئة كود شروط الإنفاق. ويبدو بهذا الشكل:

OP_HASH160 <RedeemScriptHash> OP_EQUAL

يوفر منفق مدخل عنوان P2SH أمرين في ScriptSig الخاص به:

سوف تتحقق شركات التعدين أولًا من أن تجزئة نص الإستعادة تتوافق مع تجزئة مفتاح النص العام. إذا كانت متوافقة، سوف تفك نص الإستعادة، ووضع التوقيع فوقه وتنفيذه.

ما هو عنوان P2WSH ؟

تستخدم منصة LocalCryptos عناوين الدفع إلى علامة تجزئة المفتاح العام (P2WSH) في حسابات الضمان بدلًا من عناوين P2SH. وللدقة، نستخدم شفرة P2WSHمخفية داخل شفرة P2SH (أي P2SHP2WSH).

يكمن الفرق بين شفرة P2WSH وشفرة P2SH في أن شفرة P2WSH، أي شفرة RedeemScript القديمة تدخل في حقل “نص العلامة” الجديد.

إذا لم تعلم ماهية SegWit، الرجاء اعتبار أن حسابات الضمان الخاصة بمنصة LocalCryptos تستخدم معايير شفرة P2SH. سوف يكون ذلك ذو معنى أوضح بكثير. يحسن استخدام العلامة المنفصلة من كفاءة وتكلفة حسابات الضمان فقط لا غير.

لماذا لا نستخدم توقيعات متعددة؟

بداية، من المحتمل أنك تتوقع أن منصة LocalCryptos تستخدم عناوين متعددة التوقيع. ولكنك لن تجد_ OP_CHECKMULTISIG_ في الكود.

ففي النص متعدد التوقيعات، يمثل كل مُوقع طرفًا من أطراف معاملة الإنفاق. أما في نموذجنا، لا تحتاج منصة LocalCryptos إلى توقيع أي جزء من المعاملة — حتى في حالات النزاع حول الدفع.

ففي نموذج النظير للنظير الحقيقي، لا نكون طرفًا في أي معاملة على الإطلاق. وحيث أننا لا نعد طرفًا، يستحيل علينا أن نفرض شروط للإنفاق على الضمانات — مثل كيفية وموعد إنفاق الطرف المستلم لعملات البيتكوين.

تكون هذه الآلية التي نتبعها مفيدة بشكل خاص بالنسبة للتبادلات بين الأشخاص. حيث يمكن للمستخدمين فك عملات البيتكوين من الضمان بدون الاتصال بالإنترنت. ويكون من المستحيل إثارة الإصدار عبر إرسال رسالة قصيرة SMS تحتوي على رمز مميز أو عن طريق عرض QR على البائع. وسوف نوافيكم بالمزيد من المعلومات عن ذلك في وقت لاحق.

توليد وتوقيع المفاتيح بكميات كبيرة

إن أول ما تفعله عندما تنشئ حسابك على منصة LocalCryptos هو توليد مجموعة كبيرة من المفاتيح العشوائية وتوقيعها. بالطبع يحدث ذلك في الخلفية — أي لن يلاحظه المستخدمين العاديين.

تتألف هذه المفاتيح المؤقتة من ثلاث فئات، ترتبط اثنين منها بحسابات الضمان الخاصة بعملات البيتكوين.

توليد مفاتيح المراسلة المشفرة كليًا بنظام end-to-end

تكون فئة المفاتيح العشوائية غير المرتبطة التي أنشأتها عند الاشتراك هي مفاتيح التشفير الكلي بنظام end-to-end. تتيح هذه المفاتيح للأفراد أن يفتحوا محادثات مشفرة معك أثناء عدم اتصالك بالإنترنت. وقد استعارت منصة LocalCryptos هذه الفكرة من تطبيقات المراسلة المشفرة المشهورة من أمثال تطبيق Signal. يمكنك معرفة المزيد من المعلومات حول ذلك من خلال المستند الأصلي لمنصة LocalEthereum.

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

عندما تولد عنوان بيتكوين في محفظتك غير المقيدة على منصة LocalCryptos ، سوف تحمل أيضًا نسخة موقعة إلى منصة LocalCryptos. وعندما تعد محفظة الويب نفسها، تنشأ وتوقع مئات عناوين البيتكوين.

كما يتم تحميل نسخ مشفرة من مفاتيحك الخاصة لتتيح لك الدخول من جهاز آخر.

وتحدث نفس العملية في جميع محافظ الويب الأخرى المتاحة لدينا بما في ذلك الإيثيروم.

فهذا من شأنه أن يمكن الآخرين من فتح عمليات تداول معك وتمويل حسابات الضمان حتى عندما تكون غير متصل بالإنترنت. حيث يتلقى المستخدمون أحد عناوينك من لدينا ويتحققون من التوقيع بالتطابق مع مفتاحك العام. وهذا يساعد في تجنب خطر وجود هجوم من الدخلاء.

توليد مفاتيح الضمان

تكون مفاتيح الضمان خاصة بضمانات البيتكوين بسبب اختلاف نظام ضمان الإيثيروم.

تتألف مفاتيح الضمان من أكواد سرية بسعة 32 بايت يمكنك كشفها فيما بعد. تقوم بتوليد تجزئة للكود السري (باستخدام hash160) وتوقيع هذه التجزئة. وبعد ذلك، تحمل الكود المجزأ والتوقيع وكود سري مشفر إلى منصة LocalCryptos.

تمويل حسابات الضمان

لإضافة عملات البيتكوين إلى الضمان، ينشئ البائع معاملة بيتكوين تحتوي على اثنين من المخرجات. أحد هذه المخرجات هو المبلغ الذي يتم وضعه في الضمان، والآخر هو رسوم منصة LocalCryptos القابلة للإسترداد.

قبل فعل ذلك، يجب على البائع أن يحصل على بعض التفاصيل من منصة LocalCryptos:

  1. أكواد مفتاح الضمان المجزأة من المشتري والمحكم والبائع (الخاصة بهم).
  2. توقيع المشتري الذي يمكن استخدامه لتوثيق كود مفتاح الضمان المجزأ.
  3. مفتاح عام مجزأ من المشتري بالإضافة إلى ذلك الخاص به.
  4. توقيع من المشتري للتحقق من أن المفتاح العام يعود للمشتري.
  5. المفتاح العام المجزأ الخاص بالمحكم حتى يتمكن من إرسال رسوم بسيطة.

يجب أن يتأكد البائع من أن جميع توقيعات المشتري صالحة قبل الإستمرار. ويدل وجود توقيع غير صحيح على محاولة أحد المخترقين التلاعب بالضمان.

مخرجات الضمان

يتألف مخرج الضمان الذي يحمل المبلغ للمشتري من عنوان P2SHP2WSH للنص التالي:

OP_DUP OP_1 OP_EQUAL
OP_IF
  # Release by seller
  OP_DROP
  <BuyerPubKeyHash>
  <ReleaseCodeFromSellerHash>
OP_ELSE
  OP_DUP OP_2 OP_EQUAL
  OP_IF
    # Release by arbitrator
    OP_DROP
    <BuyerPubKeyHash>
    <ReleaseCodeFromArbitratorHash>
  OP_ELSE
    OP_DUP OP_3 OP_EQUAL
    OP_IF
      # Return by buyer
      OP_DROP
      <SellerPubKeyHash>
      <ReturnCodeFromBuyerHash>
    OP_ELSE
      OP_4 OP_EQUALVERIFY
      # Return by arbitrator
      <SellerPubKeyHash>
      <ReturnCodeFromArbitratorHash>
    OP_ENDIF
  OP_ENDIF
OP_ENDIF
OP_ROT
OP_HASH160
OP_EQUALVERIFY
OP_OVER
OP_HASH160
OP_EQUALVERIFY
OP_CHECKSIG

مخرجات الرسوم

يحمل مخرج الرسوم مبلغ من عملات البيتكوين يساوي نسبة 1% تقريبًا من حجم عملية التداول. تحصل منصة LocalCryptos الرسوم في حالة إتمام عملية التداول بنجاح. أما إذا تم الإلغاء، يمكن للبائع أن يفك المخرج لإسترداد كامل الأموال.

يتألف مخرج الرسوم من عنوان P2SHP2WSH للنص التالي:

OP_DUP OP_3 OP_EQUAL
OP_IF
  # Return by buyer
  OP_DROP
  OP_HASH160
  <ReturnCodeFromBuyerHash>
  OP_EQUALVERIFY
  OP_DUP
  OP_HASH160
  <SellerPubKeyHash>
  OP_EQUALVERIFY
  OP_CHECKSIG
OP_ELSE
  OP_DUP OP_4 OP_EQUAL
  OP_IF
    # Return by arbitrator
    OP_DROP
    OP_HASH160
    <ReturnCodeFromArbitratorHash>
    OP_EQUALVERIFY
    OP_DUP
    OP_HASH160
    <SellerPubKeyHash>
    OP_EQUALVERIFY
    OP_CHECKSIG
  OP_ELSE
    # Spend by LocalCryptos
    OP_DUP
    OP_HASH160
    <ArbitratorPubKeyHash>
    OP_EQUALVERIFY
    OP_CHECKSIG
  OP_ENDIF
OP_ENDIF

انتظار التأكيد

تطلب منصة LocalCryptos أن تمتلك أغلب ضمانات البيتكوين تأكيد كتلة واحد على الأقل. أما عمليات التداول الكبيرة فتحتاج إلى ستة تأكيدات بناءًا على حجم عملية التداول.

الكشف عن كود سري 

يمتلك البائع أحد المدخلين الضروريين لفك معاملة الضمان: وهو المفتاح العام الخاص به. القطعة الناقصة الوحيدة هي كود البائع “الفك من البائع” السري.

وبالمثل، يحتاج البائع إلى مدخل واحد لفك الضمان. إذا حصل على كود المشتري “الإعادة من المشتري” السري، يمكنه إستعادة مبلغ الضمان.

يمتلك المحكم الكود السري “الفك للمحكم” و “الإستعادة للمحكم” الخاص بمفاتيح الضمان. في حالة نشأ نزاع حول الدفع، يمكن للمحكم أن يحل الأمر عن طريق الكشف عن أحد الأسرار.

هذا هو جوهر نظام الضمان الغير مقيد. ويتضمن النص المجزأ تجزئة كل كود سري ولكن ليس الكود الحقيقي.

استخدام الكود السري 

لإنفاق مخرج الضمان، يحتاج المستلم أن يجمع التوقيع مع العناصر التالية:

يجب أن يكون أول عنصرين متطابقين لإنفاق مخرج عنوان P2PKH، أما الإثنين الآخرين يكونان فريدان لمنصة LocalCryptos.

بايت “الإجراء” سوف يخبر النص أي التجزئات التي يجب فحصها. في عمليات التداول القياسية، سوف يستخدم البائع كود “إنفاق البائع” (0x01). إذا كان العنصر الأول 0x01، سوف يتوقع النص المفتاح العام للمشتري وكود الفك للبائع.

توجد أربعة إجراءات للضمان، تمثل جميع السيناريوهات الخاصة بالضمان:

الإجراء البايت الكود المتوقع المفتاح العام المتوقع
الفك للبائع 0x01 للبائع للمشتري
الفك للمحكم 0x02 للمحكم للمشتري
الإستعادة للمشتري 0x03 للمشتري للبائع
الإستعادة للمحكم 0x04 للمحكم للبائع

سحب مخرج الرسوم

في حالة إلغاء الضمان، لا تتقاضى منصة LocalCryptos رسوم. نحصل الرسوم فقط في حالة حصول المشتري على البيتكوين.

باستخدام كود إعادة الضمان، يكون التوقيع المذكور أعلاه متوافقًا مع مخرج الرسوم أيضًا. يمكن للبائع أن ينفق مخرج الرسوم بنفس الطريقة التي ينفق بها الضمان المعاد UTXO.

التسوية عند الإنفاق

لن يغير الضغط على “فك” ضمان البيتكوين على منصة LocalCryptos أي شيء في سلسلة الكتل. فهو يتيح للطرف المستلم أن ينفق العملات من الضمان (أي فك UTXO).

ويمكن للطرف المستلم اختيار إنفاق هذه العملات على الفور أو الإنتظار. في واجهة المستخدم، سوف يظهر ضمان UTXO في محفظة الويب بجانب العناوين المعتادة.

بعد إنفاق العملات، يتم كتابة إتمام الضمان بشكل نهائي في سلسلة الكتل.

الفك بدون الاتصال بالإنترنت 

كل ما يحتاجه المشتري هو الكود السري الخاص بالبائع للحصول على الضمان.

يمكننا إضافة طريقة تمكن البائع من كشف الكود الخاص به بدون الإتصال بالإنترنت. يكون الكود طويل للغاية بشكل لا يمكن كتابته على الورق، ولكنه ذو طول ممتاز يتيح تخزينه على هاتفك أو كود QR.

وسوف تضيف منصة LocalCryptos طريقتين جديدتين للكشف عن كود:

**1. كشف الكود عن طريق إرساله في رسالة قصيرة SMS إلى أحد أرقام هاتفك. **يمكن لخوادمنا حساب تجزئة الكود للتعرف على معاملة التداول التي تنتمي إليها، ثم إرسال الكود إلى المشتري.

**2. إظهار كود QR للمشتري. ** لا يحتاج المشتري إلى الاتصال بالإنترنت للتحقق من الكود؛ وإنما يحتاج فقط إلى جزء من البرنامج الذي يمكنه حساب التجزئة. تتيح هذه الطريقة التبادلات بين الأشخاص عندما لا يتوفر لدى أي منهم اتصال إنترنت مستقر. سوف تكون هذه الطريقة مفيدة في فنزويلا حيث تحدث حالات إنقطاع التيار الكهربائي بشكل متكرر.

نحن نعمل على الخيار الأول في الوقت الحالي. وسوف يصبح الخيار الثاني متاحًا عندما نصدر تطبيق منصة LocalCryptos على الموبايل.

ما مدى أمان هذه الطرق؟

لا يمكن لأفضل حاسوب عملاق أن يكسر عنوان P2PKH قياسي والذي يستخدم تجزئة منفردة. مساحة مفتاح التجزئة hash160 هي 160 بايت. نحن نستخدم اثنين من مفاتيح hash160s: أحدهم خاص بجزء P2PKH، والآخر خاص بالكود السري المجزأ. وهذا يجعل مساحة المفتاح تصل إلى 320 بايت أمام المهاجمين الخارجيين. (تكون العملية الحسابية أدق من ذلك بالطبع، ولكنكم فهمتم كيف يتم الأمر.)

يستحيل فك ضمانات البيتكوين — الخاصة بجميع الأهداف والأغراض — على منصة LocalCryptos.

كم يكلف الأمر؟

لقد خفضنا رسوم الشبكة عن طريق الترقية إلى العلامة المفصلة. إلا أن تكلفة معاملات البيتكوين غالبًا ما تكون أعلى من الإيثيروم.

تعتمد تكلفة ضمانات البيتكوين على مدى ازدحام الشبكة. وننصح المتداولين الصغار الذين يتداولون بمبالغ أقل من 10$ بأن يختاروا عملة مشفرة أخرى.

هل هذه هي النسخة النهائية؟

على الأغلب لن تكون هذه النسخة الأخيرة من ضمانات البيتكوين الغير مقيدة على منصة LocalCryptos. فنحن نخطط لتعزيز النظام من حيث التكلفة والسرعة في المستقبل.