Pages:
Author

Topic: Transactions Validation والتحقق من صحة المعاملات Mining التعدين - page 2. (Read 390 times)

member
Activity: 98
Merit: 117
Someday we will rise ...
المعاملات المالية أو الحوالات Transactions هي الجزء الأكثر أهمية في نظام بتكوين. كل شيء آخر في البتكوين قد صمم للتأكد من أن المعاملات يمكن أن يتم إنشاؤها، نشرها أو بثها على الشبكة، التأكد من صحها وأخيراً إضافتها الى سجل المعاملات العام (سجل الحسابات أو دفتر الأستاذ Ledger) المعروف بـالبلوكتشين. المعاملات أو الحوالات عبارة عن هيكل/بنية بيانات التي تمثل عملية نقل القيمة بين المشاركين في نظام بتكوين. كل معاملة أو تحويلة هي مُدخَل عام في بلوكتشين البتكوين, سجل معاملات عام أو عالمي مزدوج القيد (global double-entry bookkeeping ledger).
استخدام المصطلح "محفظة" في النص لاحقا، يعني البرنامج الذي يقوم بإنشاء المعاملة وليس فقط حافظ مفاتيح التشفير.

إن المعاملات خلف الكواليس لها شكل مختلف جداً عما تراه في متصفحات بلوكتشين المنتشرة على الانترنت. معظم البيانات التي نراها حول المعاملة في واجهات برامج بتكوين المتنوعة لا تتواجد في الحقيقة ضمن نظام البتكوين.
باستخراج الصيغة الخام للمعاملة باستخدام الواجهات النصية لبرامج مثل الـ Bitcoin Core,قم بفك ترميزها ليظهر لك ما تحتوي. النتيجة تبدو كما يلي:
Code:
{ 
    "version": 1,
    "locktime": 0,
    "vin": [{
        "txid": "0530375a5bf4ea9a82494fcb5ef4a61076c2af807982076fa810851f4bc31c09",
        "vout": 0,
        "scriptSig": "304402202b5869e0b4e711784daecd511f9dadf28e37113ef5054a6898d0367034afb067022014dfd2f58da949550ddc4ebb1135527cdbc48b25c6eb6388cc88231fd7ea04a9[ALL] 02fec863d4d0baf5e01a9bd9c59b790bbf683c5b7b6624d7aa7ab9405c5fdb9786",
        "sequence": 4294967295
        }],
    "vout": [{
        "value": 94,
        "scriptPubKey": "OP_DUP OP_HASH160 b933036b1f143e6ee5f9038c4205f6bbe41e49cc OP_EQUALVERIFY OP_CHECKSIG"
        },
        {
        "value": 1,
        "scriptPubKey": "OP_DUP OP_HASH160 67209ed8971b9bdf4147cd25e5f09c77f43c0dac   OP_EQUALVERIFY OP_CHECKSIG"
        }]
}
يمكنك أن تلاحظ في المعاملة السابقة عدد من الأشياء، غالباً الأشياء الغير موجودة! مثل عنوان المرسل والمستقبل، أين هي؟ أين الدخل 95 بتكوين؟
في البتكوين لا يوجد عملات، لا يوجد مرسل، لا يوجد مستقبل، لا وجود لرصيد الحساب، لا حسابات أو عناوين. كل من هذه الأشياء يتم بناءه في مستوى أعلى من أجل تسهيل الأمور على المستخدم، لجعلها أسهل للفهم.
يمكن ملاحظة الدخل والخرج في المعاملة Inputs and Outputs وكيف أن الـ Outputs هي ما تتعقبه المحفظة كـUTXOs خرج غير منفق لتشكل ما يظهر لك كرصيد للحساب من خلال جمع قيم المخرجات الغير المنفقة المرسلة الى أحد المفاتيح التي تتحكم بها محفظتك، والتي قد تكون موزعة بين آلاف المعاملات ومئات الكتل/البلوكات، والتي يمكن إنفاقها لاحقاً باستخدام أحد المفاتيح التي تتحكم بها. يمكنك قراءة المزيد عن الـUTXOs من خلال الموضوع: https://bitcointalksearch.org/topic/utxo-transactions-5220143.

يجب التركيز على فكرة أن الـUTXO الخرج الغير منفق هو وحدة قيمة متفرد ومميز discrete ولا تتجزأ indivisible, المقيمة أو المثمنة أو المسماة برقم من الساتوشيز satoshis. الخرج الغير منفق UTXO يمكن استهلاكه بالكامل بواسطة معاملة. حتى لو كان الـUTXO أكبر من القيمة المراد ارسالها في المعاملة، فعلى الـUTXO أن يتم انفاقه بالكامل والباقي يجب أن يتم اضافته الى المعاملة كـUTXO ليعود لك مثلاً.

عملية ارسال البتكوين من خلال جمع الsـUTXO ليشكلوا ما قيمته أكبر من القيمة المراد ارسالها تتم بشكل آلي في المحفظة، انطلاقاً من صفات الـUTXOs من تفردية وعدم التجزئة، تقوم المحفظة إما بجمع عدد من المخارج التي تحمل قيم صغيرة لتصل للقيمة المطلوبة، او تجد خرج غير منفق يحمل قيمة تعادل تماما ما يراد ارساله، او حتى استخدام خرج غير منفق يحمل قيمة أكبر من القيمة المراد ارسالها، والباقي ترسله المحفظة لنفسها. تماما مثل الشيك أو النقود الورقية. فلا يمكنك مثلا أخذ ورقة دولار وقسمها بالنصف لتقول إنه لديك نصف دولار لتستخدمه.
فالمعاملة تستهلك مخارج سابقة غير منفقة لتصبح دخل لها، و تولد مخارج غير منفقة لاحقة، فالدخل في المعاملة هو نفسه الخرج السابق الذي كان غير منفق، لكن يصبح منفق متى ما تم تسجيله بالمعاملة كدخل و تسجيل المعاملة ضمن البلوك وبعده ضمن البلوكتشين, أي دخل المعاملة هو "مرجع" للخرج السابق الغير منفق و ليس الخرج الغير منفق الجديد المُنتَج من المعاملة (تعبير مقتبس من السيد mikeywith@).

سؤال قد يأتي على بال أحد هو: من يأتي أولاً الدخل أو الخرج؟ البيض أم الدجاجة؟ في الحقيقة الخرج يأتي أولاً بسبب معاملة مميزة تخالف ما سبق ذكره من حيث أن المعاملة يجب أن يكون لها دخل ليكون لها خرج، الا معاملة الـcoinbase وهي المعاملة التي يضيفها المعدن ضمن البلوك ليعطي نفسه الجائزة المنتظرة وهي حالياً 12,5 بتكوين، وهي معاملة لا تحوي على أي دخل، إنما فقط خرج واحد يعطي البتكوين الجديدة لعنوان المُعَدِن البلوك.
لننظر الآن الى دخل المعاملة بتفصيل أكبر. القسم الأول من الدخل هو مؤشر لـUTXO سابقة، يُصَل له بالرجوع الى هاش المعاملة و رقم الفهرسة للخرج، الذي يشير الى UTXO محددة ضمن معاملة سابقة. الجزء الثاني من الدخل هو نص برمجي للتحرير/لفك القفل، الذي تنشأه المحفظة لتستوفي شروط الإنفاق للـUTXO. في معظم الأحوال يكون النص البرمجي لفك القفل عبارة عن توقيع رقمي والمفتاح العام ﻹثبات ملكية البتكوين (ليست كل النصوص البرمجية لفك القفل عن الـUTXO تحوي توقيع رقمي). القسم الأخير هو تسلسل sequence (سيشرح في وقت لاحق).

من المثال السابق لشكل المعاملة الخام، يمكننا أن نلاحظ أن الدخل عبارة عن قائمة (array) تدعى vin:
Code:
"vin": [{ 
        "txid": "0530375a5bf4ea9a82494fcb5ef4a61076c2af807982076fa810851f4bc31c09",
        "vout": 0,
        "scriptSig": "304402202b5869e0b4e711784daecd511f9dadf28e37113ef5054a6898d0367034afb067022014dfd2f58da949550ddc4ebb1135527cdbc48b25c6eb6388cc88231fd7ea04a9[ALL] 02fec863d4d0baf5e01a9bd9c59b790bbf683c5b7b6624d7aa7ab9405c5fdb9786",
        "sequence": 4294967295
        }]

في مثالنا لدينا دخل واحد في القائمة، لأن UTXO واحدة تحوي قيمة كافية لإتمام الدفع. للدخل أربع عناصر:
  • معرف المعاملة، للرجوع الى المعاملة التي تحوي الـUTXO الذي يتم إنفاقه.
  • رقم فهرسة الخرج vout, معرفاً أي UTXO يشار له ضمن المعاملة المذكورة.
  • نص برمجي scriptSig, الذي يلبي الشروط الموضوعة على الـUTXO, لفك قفلها من أجل إنفاقها.
  • رقم تسلسل sequence.

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

Code:
"vout": [ 
        {
        " value": "95",
        "scriptPubKey": " OP_DUP OP_HASH160 85bc91f620c88dee8f6e093d616da09e6239c47d OP_EQUALVERIFY OP_CHECKSIG "
      }
  ]
باستخراج الصيغة الخام للـUTXO المذكور في المعاملة فنجد أن الخرج الغير منفق الأول له قيمة 95 بتكوين و له نص برمجي للقفل يحتوي " ….... OP_DUP OP_HASH160".

التعدين:
كلمة "تعدين" تعتبر مضللة الى حد ما، عن طريق المعنى "التنقيب عن المعادن النفيسة"، فتركز انتبهنا على مكافئة التعدين، البتكوين الجديدة التي يتم خلقها في كل بلوك جديد. على الرغم من أن المكافئة تحفز التعدين، فان الهدف الأساسي من التعدين ليس المكافئة أو خلق بتكوين جديد. فإذا كنت ترى أن التعدين هو العملية لخلق بتكوين جديدة فقط، فأنت تخطئ معنى "التحفيز" كهدف هذه العملية.
التعدين هو الآلية التي تدعم مركز مقاصة غير مركزي، من خلالها يتم التحقق من المعاملات وانهاءها/تسجيلها. التعدين هو الاختراع الذي يجعل البتكوين مميز، آلية أمان لامركزية تشكل اللبنة الأساسية في النقد الرقمي ضمن شبكة ند للند. فالتعدين يُؤَمِن نظام البتكوين ويسمح بتشكيل اجماع على حالة النظام على نطاق الشبكة كاملة دون الحاجة لسلطة مركزية. المكافئة المتمثلة بالبتكوين المضافة جديداً ورسوم المعاملات هو نظام تحفيز يضع أمن الشبكة وعمل المعدنيين في صف واحد، أي بسبب نظام التحفيز الذي لم يسبق له مثيل تصبح أفعال المعدنيين مكرسة لصالح تأمين الشبكة.

من أجل الحصول على المكافئة على المعدنيين أن يتسابقوا فيما بينهم لحل مسألة رياضية معقدة مبنية على خوارزمية التشفير Hash. حل هذه المسألة أو المشكلة الرياضية يطلق عليه اسم دليل العمل Proof-Of-Work يتم اضافته الى البلوك الجديد ويعمل كدليل أو إثبات أن المُعَدِن قد استهلك قوة حاسوبية كبيرة لإيجاد الحل. القوة الحاسوبية المصروفة لحل خوارزمية دليل العمل Proof-Of-Work من أجل الحصول على المكافئة والحق بتسجيل المعاملات في البلوكتشين هي الأساس لنموذج أمان نظام بتكوين. إن العملية تدعى تعدين لأن المكافئة (توليد العملة الجديدة) تم تصميمها لتشابه العوائد المتناقصة، تماماً مثل التعدين عن المعادن الثمينة.  

إن مجموع النقد المتداول في البتكوين يتم زيادته عن طريق التعدين، مماثل لكيف يزيد البنك المركزي النقد عن طريق طباعة العملات الورقية. كمية البتكوين المضافة حديثاً الى النقد المتداول عن طريق المُعَدِنْ في كل بلوك يتناقص تقريبا كل أربع سنوات (كل 210,000 بلوك على وجه التحديد). قد بدأت بـ 50 بتكوين لكل بلوك في كانون الثاني من عام 2009, وانخفضت الى 25 بتكوين لكل بلوك في تشرين الثاني من عام 2012, وانخفضت مجدداً الى 12.5 بتكوين لكل بلوك في تموز من عام 2016. بناءً على هذه الصيغة، تقل مكافآت تعدين البتكوين بشكل أسي حتى عام 2140 تقريبًا، عندما يتم إصدار جميع البتكوين (20.99999998 مليون). بعد 2140، لن يتم إصدار أي بتكوين جديدة.

المُعَدِنيين يكسبون البتكوين من رسوم المعاملات أيضاً. قد تتضمن كل معاملة رسوم المعاملة في شكل فرق زائد من البتكوين بين قيمة دخل المعاملة وخرجها. فالمُعَدِنْ الرابح يمكنه أن يُبْقي على هذا الفائض المتمثل بالفرق الزائد في المعاملات المضمنة في البلوك الفائز أو المضاف من قبل المُعَدِنْ. في وقتنا الحالي، تشكل رسوم المعاملات نسبة ضئيلة من مكافئة المُعَدِنْ تصل لحوالي 2% من قيمتها. مع انخفاض المكافئة وزيادة عدد المعاملات لكل بلوك بمرور الوقت، ستأتي نسبة أكبر من أرباح تعدين البتكوين من رسوم المعاملات. تدريجيا، ستهيمن رسوم المعاملات على مكافئة التعدين، فمع انخفاض المكافئة للنصف كل أربع سنوات سيأتي الوقت لتصبح كمية رسوم المعاملات أكبر من كمية البتكوين المضافة حديثا في كل بلوك. بعد 2140, ستصبح كمية البتكوين الجديدة في كل بلوك صفر، وسيتم تحفيز تعدين البتكوين من خلال رسوم المعاملات فقط.

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

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

التحقق المستقل من المعاملات:
كما تعرفنا كيف تقوم المحفظة بتشكيل المعاملة من خلال جمع الـUTXOs, تقديم النص البرمجي المناسب لفك قفل الخرج، ومن ثم انشاء خرج جديد تسجل لمالك جديد. المعاملة الناتجة ترسل الى العقد الجيران ليتم ارسالها الى باقي الشبكة.
لكن قبل أن يتم ارسال المعاملة الى الجيران، كل عقدة في البتكوين تقوم بالتأكد من صحة أي معاملة تصلها قبل أن تعيد ارسالها، في حين المعاملات الغير صالحة يتم التخلص منها عند أول عقدة تصادفها.

تتحقق كل عقدة من كل معاملة مقابل قائمة طويلة من المعايير:
  • يجب أن يكون بناء جملة المعاملة و هيك البيانات صحيحين.
  • لا يجب أن تكون أي قائمة من الدخل أو الخرج فارغة.
  • حجم المعاملة مقاساً بالبايت لا يجب أن يتجاوز حجم البلوك الكلي.
  • كل قيمة خرج، بالإضافة الى المجموع الكلي لا يجب أن يتجاوز النطاق المسوح به (أكثر من 21 مليون).
  • لا يجب على أي دخل ان يحوي على هاش يساوي الصفر أو رقم تسلسل -1. (معاملة الـ coinbase لا يجب اعادة بثها).
  • حجم المعاملة مقاساُ بالبايت يساوي أو أكبر من 100 byte.
  • عدد عمليات التوقيع (SIGOPS) الموجودة في المعاملة لا يجب أن تتجاوز الحد المسموح به.
  • النص البرمجي (sicriptSig) لفك قفل الـUTXO يجب أن يدفع بالأرقام الى الكومة stack في الذاكرة، و النص البرمجي للقفل (scriptPubKey) يجب أن يطابق نماذج IsStandard.
  • لكل دخل يجب أن تتواجد معاملة له ضمن البلوكتشين.
  • لكل دخل، إذا كان الخرج المرجعي متواجد في أي معاملة ضمن حوض المعاملات الغير مؤكدة، فيتم رفض المعاملة بشكل مباشر.
  • لكل دخل، إذا كانت المعاملة الحاوية للخرج المرجعي غير موجودة، فيتم وضع المعاملة ضمن حوض المعاملات اليتيمة، إذا لم تتواجد هناك في الأساس.
  • لكل دخل، يجب على الخرج المرجعي أن يتواجد ولا يجب أن يكون منفق.
  • يتم رفض المعاملة إذا كان مجموع الدخل أقل من مجموع الخرج.
  • يتم رفض المعاملة إذا كانت الرسوم المرفقة قليلة جداً.
  • يجب التحقق من صحة البرامج النصية لفك قفل كل دخل مقابل البرامج النص لقفل الخرج المطابق أو المرجعي.
  • للاطلاع على تفاصيل شروط المعاملة فيمكن الرجوع الى الدالات (AcceptToMemoryPool, CheckTransaction, CheckInputs) ضمن كود Bitcoin Core.
Pages:
Jump to: