Author

Topic: UTXO و نموذج المحاسبة Transactions المعاملات المالية (Read 319 times)

member
Activity: 98
Merit: 117
Someday we will rise ...
بالواقع ما عندي خطة محددة للنشر أو تتابع معين, والسبب بيرجع للوقت الضيق, لهيك المواضيع للأسف ما عم تكون كاملة, لكن الهدف انو مع الوقت تتجمع المواضيع لتشكل كتلة متكاملة, لفهم تفاصيل تقنية بالبلوكتشين نظريا و عمليا.
للأسف ما عندي مهارة بتجميل المواضيع, بأنو ضيف ألوان و هيك قصص, ورتبتي حاليا بتمنع اظهار الصور.

يمكن المثال بيضيع للشخص الفاهم..ولكن الشخص المبتدى من الاسهل له ان يفهم ان ال input هي نفسها output..في الواقع ال input هي "مرجع" لل outputs.
نشرت بوست جديد بذكر فيه هالموضوع, بتمنى تقرأوا ونتناقش فيه. https://bitcointalksearch.org/topic/transactions-validation-mining-5220866

اعتقد ان المثال خطر في بالي بناء على سؤال الشخص حيث انه كانت الفكرة الاساسية لوضيقة النودز..بصراحة انا لست جيد بشرح المواضيع القنية ودائما  اواجه صعوبة في ايصال المعلومة..يوجد ايضا عامل اخر الا وهو قله مماسرة هده المعلومات..هناك اشياء تتعلمها اليوم وتنساها بعد شهر خصوصا ان كان عقلك يصنفها على انها ليست مهمة.
شرحك بالبوست كان جيد, و فعلا المواضيع الفنية بحاجة لمتابعة دائمة مشان الواحد ما ينساها.


شكرا على الملاحظات جميعا.


Long Bitcoin BTC. Short the Banks
legendary
Activity: 2436
Merit: 6640
be constructive or S.T.F.U
مثلا يمكن اضافة مثال عملي كيف يتم استخراج المفتاح العام من المفتاح الخاص و م ثم كيف يتم استخراج عنوان البيتكوين باختيار رقم عشوائي كمفتاح خاص و تطبيق كل المراحل عليه.
كذلك يمكن التركيز على بعض النقاط بشرح الفائدة العملية من معرفة هذه المعلومات. مثلا عند الحديث عن UTXO يمكن شرح فائدتها في تعزيز الخصوصية بتمكينك من فهم طريقة عمل خاصية Coin Control و هكذا...

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

الفكرة يمكن ان تبدا من اول "انشاء" للعملة و Coinbase Transaction , المرحلة التاني هي ارسال تلك العملة , حيث ينقسم ارسال العملة نفسه الى عدة اقسام, نبداءها بي scriptSig وشرحها ببساطة بدون الخوض في تفاصيلها مثلا

scriptSig = توقيع المرسل + المفتاح العام للمرسل

بعدها نقوم بشرح ScriptPubKey

ScriptPubKey = عنوان المرسل


لا داعي لأن نشرح ان عنوان المرسل في الواقع هوا مفتاحه العام بعد اضافة hash عليه و و , ايضا لاداعي لان نشرح من اين يأتي التوقيع , يكفي ان نفهمه انه (المفتاح الخاص) للمرسل.

بعدها ندخل في تفاصيل المفدرات , اعتقد في تلك المرحلة القاري سيكون جاهز لايستعاب المعلومات التفصيلية بطريقة اسهل.

طبعا هدا ليس انقاص من مجهودات الاخ icy3 ابدا , بالعكس تمام فالموضوع متكامل جدا, ولا اعتقد اني قادر على كتابة افضل من هدا, تعقيبي فقط على طريقة الالقاء للشخص المبدي الذي في الاساس هوا من يجب ان يقرا هده المعلومات.
legendary
Activity: 2702
Merit: 3045
Top Crypto Casino
وهو قله مماسرة هده المعلومات..هناك اشياء تتعلمها اليوم وتنساها بعد شهر خصوصا ان كان عقلك يصنفها على انها ليست مهمة.
كلامك صحيح مائة بالمائة لذلك نحتاج مثل هذه المواضيع لاعتمادها كمراجع و العودة اليها كلما دعت الحاجة.

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

مثلا يمكن اضافة مثال عملي كيف يتم استخراج المفتاح العام من المفتاح الخاص و م ثم كيف يتم استخراج عنوان البيتكوين باختيار رقم عشوائي كمفتاح خاص و تطبيق كل المراحل عليه.
كذلك يمكن التركيز على بعض النقاط بشرح الفائدة العملية من معرفة هذه المعلومات. مثلا عند الحديث عن UTXO يمكن شرح فائدتها في تعزيز الخصوصية بتمكينك من فهم طريقة عمل خاصية Coin Control و هكذا...
legendary
Activity: 2436
Merit: 6640
be constructive or S.T.F.U

يمكن المثال بيضيع للشخص الفاهم..ولكن الشخص المبتدى من الاسهل له ان يفهم ان ال input هي نفسها output..في الواقع ال input هي "مرجع" لل outputs.

اعتقد ان المثال خطر في بالي بناء على سؤال الشخص حيث انه كانت الفكرة الاساسية لوضيقة النودز..بصراحة انا لست جيد بشرح المواضيع القنية ودائما  اواجه صعوبة في ايصال المعلومة..يوجد ايضا عامل اخر الا وهو قله مماسرة هده المعلومات..هناك اشياء تتعلمها اليوم وتنساها بعد شهر خصوصا ان كان عقلك يصنفها على انها ليست مهمة.

على العموم اتمنى ان تستمر في الشرح، يمكنك الكتابة عن كيفة يقوم المعدنين بتاكيد التحويلات..هدا خليط بين التعدين والتحويلات ويمكن ان ينال موضوعك احد الجوائز.

بالتوفيق.
legendary
Activity: 1610
Merit: 1131
@bountyz
أجل صديقي رتبة صديقنا الجديد لا تسمح له بإظهار الصور و لكن يحتاج إلى أسبوعين ليحصل على أكتيفي 30 و ترتقي عضويته حينها يمكن أن يظهر الموضوع بالشكل الذي قمت بعمل له إقتباس. الشرح ممتاز و أتمنى العمل على هذا المنوال للمزيد من الثراء أرجو تقبل مروري
member
Activity: 142
Merit: 70
member
Activity: 98
Merit: 117
Someday we will rise ...
شكرا mikeywith.
بخصوص الصور انا حاططون ضمن نفس الكود بس يمكن الرتبة بتمنع, بس ما في مشاكل الواحد بيقدر يفتح الصور.
قريت البوست تبعك وحسيت المثال يلي انت عاطيه شوي بيضيع لشخص مبتدأ و السبب انو حيفكر انو الـUTXO نفسو عم نرجع نستخدمو
Quote
Input is the new form of a previous output, you take an output, Sigcript it and put it in an input , in other words

A sends BTC to B, then B sends BTC to C, then C sends to D

imagine that Input is a banana, output is the same banana but peeled.

A has a banana which he sends to B and call it input, B received the banana from A, peel it and call it output, If B wants to send the banana to C he needs to seal it again ( you can't send peeled bananas they become contaminated) once sealed- it's called input again, C receives the banana, peel it, and it becomes output.

so an input is nothing but signed output/s (UTXO)
بالمثال هو الموز, فحسب كتابتك الموزة نفسها عم تتقشر و ترجع تنكسا, و الموزة بالمثال عم تمثل البتكوين او الـUTXO, لهيك شفت انو المثال شوي بيضيع.
هلئ آخر جملة بتصحح الوضع, بس بالنسبة لشخص مبتدأ او مارر مرورو الكرام ممكن يشكل الشخص فكرة مو صحيحة. مو قصدي انو شرحك غلط بس انو لشخص ما عندو خلفية عن الموضوع ممكن تختلط عليه الأمور.
موضوع الـbitcoin script في الو موضوع منفصل عم جهزو.

Quote
اعتقد المسابقة القادمة ستكون بخصوص Transactions بعد مسابقة التعدين القائمة حاليا والتي اتمنى من حضرتك المشاركة فيها ايضا.
جميل جداً, و انا بتمنى تعملوا مسابقات بتحفز على تعلم التقنية بشكل أعمق متل موضوع الـTransaction مثلا و بالتالي تبنيها بشكل أكبر; يعني ممكن تكون المسابقات متتالية بمواضيع مكملة لبعضها البعض مشان يكون في تسلسل للأشخاص يلي عم يتابعو و يتعلمو. وبهي الطريقة الأشخاص بالمنتدى بيصير عندون خلفية أكبر عن التقنية و بالتالي بتكون معلومات مساعدة في حالة الاستثمار بشي مشروع كريبتو, او حتى لتمييز السكام, يعني بدل ما الواحد يقول للعالم انو هاد المشروع سكام, منعلمو كيف يعرف انو المشروع سكام لحالو.
legendary
Activity: 2436
Merit: 6640
be constructive or S.T.F.U
موضوع اكتر من رائع ,يستحق الكتير من نقاط الجدارة والتقدير, اتمنى تعديل الصغة في قليلا واضافة بعض الالوان او الصور لتسهيل الشرح, يمكنك استعامل خاصية اضافة الصور بدل من وضع الرابط عن طريقة وضع رابط الصورة بين هدا الكود

Code:
[img][/img]

مثلا



ربما رتبتك تمعنك من هدا, لا ادري !

ايضا يمكنك الاستعانة بهد الموضوع الشيق https://bitcointalksearch.org/topic/m.53601574
 لفهم وشرح السكربت المستعمل للارسال scriptPubKey  و scriptSig, هدا الموضوع شيق جدا واتمنى تفاعل الاعضاء ووجود بعض الاسئلة لنقوم بالاجابة عنها سوية لاني اصبحت ملم بطريقة عمل Transaction في الفترة الاخيرة, حيث في بداية مشواري كان لايهمني كل هدا, ولكن بعد فهمه احببت البتكوين اكثر واكثر وانصح الجميع بفهم طريقة انشاء المعاملة ومالذي تفعله ال Nodes ومالدي يفعله الماينرز, اعتقد المسابقة القادمة ستكون بخصوص Transactions بعد مسابقة التعدين القائمة حاليا والتي اتمنى من حضرتك المشاركة فيها ايضا.

member
Activity: 98
Merit: 117
Someday we will rise ...
المعاملات تمكنك من إنفاق الساتوشيز Satoshis الخاص بك. كل معاملة مبنية من عدة أجزاء، التي بدورها تُمَكنْ من إجراء مدفوعات مباشرة بسيطة أو معاملات معقدة (قد تحتوي شروط).
تالياً سنشرح كل جزء من أجزاء المعاملات وكيفية استخدامهم وتجميعهم لبناء معاملة كاملة، بالإضافة الى إدارة الموارد المالية باستخدام نموذج UTXO.


تظهر الصورة السابقة الأجزاء الرئيسية لمعاملة Bitcoin. كل معاملة لها على الأقل دخل واحد (Input) وخرج واحد (Output). كل دخل (Input) يُنفق الساتوشيز المدفوعة لخرج سابق (Output). عندها كل خرج (Output) من المعاملة يسمى "خرج معاملة غير منفق" Unspent Transaction Output (UTXO) ينتظر الى ان يتم انفاقه من خلال جعله كدخل لمعاملة أخرى. عندما تُريك محفظة الـبتكوين الخاصة بك أن رصيدك مثلاً 10,000 ساتوشي، فالمقصود هنا فعلياً أنك تملك 10,000 ساتوشي ضمن خرج واحد غير منفق UTXO أو أكثر.

المعاملات في الـ Bitcoin تشبه الشيك الى حد ما في بعض الجوانب. عندما تريد إنفاق خرج معاملة Output يجب عليك إنفاق كل شيء. هذا يشبه كيف أنه لا يمكنك الذهاب الى البنك والقول إنك تريد إنفاق أو صرف نصف الشيك. مع ذلك، ففي هذا النموذج لا يوجد ما يقابل الأوراق المالية أو الحسابات البنكية. لذلك من أجل ارسال المال يجب عليك أن تصرف الشيك مكتوب لك، وتُخرِج/ترسل Output من عملية صرف الشيك تلك ما تريده الى وجهتك المقصودة والباقي تكتبه بشيك آخر لك.
عملية صرف الشيك هذه هي في الواقع معاملة في الـ Bitcoin. في المعاملة تقوم بإنفاق شيك واحد أو أكثر (المعروف فعلا بـِ UTXO) وتنشئ UTXO واحد أو أكثر الى وجهة جديدة من هذه الأموال المنفقة. الـ UTXOs المنفقة في معاملة تسمى (vins)، والـ UTXOs الجديدة التي أنشأتها تسمى (vouts). بمجرد أن يتم إنفاق UTXO من خلال معاملة يمكن اعتبارها منتهية وقد تم تدميرها. يمكنك مشاهدة تاريخها ضمن البلوكتشين، لكن لا يمكن عمل أي شيء بها.

في العملات الإلكترونية، خرج معاملة غير المنفق UTXO – Unspent Transaction Output هو تجريد لـِ أو مجموع النقود الكترونية، أي يتم تعريف النقود الالكترونية من خلال الـ UTXO, كل UTXO يمثل سلسلة من الملكية (Chain of Ownership) مُطَبَقة كسلسلة من التواقيع الرقيمة (Chain of Digital Signatures) بحيث يوقع المالك المعاملة لنقل ملكية الـ UTXO الخاص به الى المفتاح العام للمستقبل.

كل معاملة تبدأ بـ 4 Bitsتُحدد رقم الإصدار للمعاملة، والتي بدورها تُعلِم النظراء والمعدنيين في الشبكة: أيّ مجموعة من القواعد يجب استخدامها للتحقق من صحة المعاملة. وهذا البناء يتيح فرصة لمطوري بتكوين لإنشاء قواعد جديدة لتأكيد صحة المعاملات المستقبلية دون إبطال المعاملات السابقة.


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

دخل المعاملة يَستَخدم مُعَرفْ المعاملة (txid) ورقم فهرسة خرج المعاملة (غالبا يدعى vout اختصارا لـ Output vector) لتعريف خرج معاملة محدد ليتم انفاقه. الدخل يملك أيضا نص برمجي (Signatur مثلاً) الذي بدوره يسمح للدخل بتوفير بيانات المُعَامِلاتْ التي تستوفي الشروط في النص البرمجي (pubkey مثلاً).

الصورة التالية تساعد بتوضيح كيف يمكن استخدام ما سبق من خلال اظهار طريقة سير العمل المستخدمة من قبل سعيد لإرسال معاملة مالية لفتحي، والتي يستخدمها فتحي لاحقاً لإنفاق الأموال المستقبلة من سعيد.
كل من سعيد وفتحي سيستخدمان الصيغة الأكثر انتشاراً لنوع المعاملة المعياري Pay-To-Public-Key-Hash (P2PKH)، الذي بدوره يتيح لسعيد أن ينفق الساتوشيز الخاصة به الى عنوان بتكوين معياري، ثم يتيح لفتحي إنفاق هذه الساتوشيز باستخدام زوج مفاتيح تشفير (public key; private key).


على فتحي بدايةً ان ينشئ زوج مفاتيح تشفير عام/خاص قبل ان يتمكن سعيد من انشاء المعاملة لإرسال الأموال لفتحي. بتكوين يستخدم خوارزمية التوقيع الرقمي باستخدام المنحنى الاهليجي (Eliptic Curve Digital Signature Algorithm ECDSA) باستخدام المنحنى (secp256k1)، المفاتيح الخاصة لمنحنى (secp256k1) عبارة عن 256 Bit من البيانات العشوائية. يمكن تحويل هذه البيانات "المفتاح الخاص" الى مفتاح عام من نوع (secp256k1) بشكل حتمي. لأن عملية التحويل حتمية ويمكن تكرارها بأي وقت على نحو موثوق، فلا حاجة لحفظ المفتاح العام. بمعنى أنَّ مفتاح خاص يعطي نفس المفتاح العام دائماً؛ حتمياً.

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

فتحي يعطي هاش مفتاحه العام لسعيد. وهاش المفتاح العام تقريبا بشكل دائم يُرسل بعد إعادة ترميزه باستخدام (ترميز Base58)، والناتج يطلق عليه اسم "عنوان بتكوين" (Bitcoin Adresse)، الذي يحوي على رقم نسخة العنوان، الهاش وChecksum لكشف الأخطاء المطبعية.

بمجرد أن يحصل سعيد على العنوان وفك ترميزه من ترميز Base58 إلى هاش العنوان العام، يُمكِنهْ إنشاء المعاملة. يقوم بإنشاء خرج معاملة (P2PKH) معياري يحتوي على تعليمات أو إرشادات التي تمكن أي شخص من إنفاق خرج المعاملة إذا استطاعوا إثبات أنهم يملكون المفتاح الخاص المطابق أو المقابل لهاش العنوان العام لفتحي. هذه التعليمات أو الارشادات تدعى نص برمجي pubkey (pubkey script) أو scriptPubKey.

يقوم سعيد ببث او إذاعة أو نشر المعاملة للشبكة ليتم اضافتها الى البلوكتشين. الشبكة تقوم بتصنيفها على أنها خرج معاملة غير منفقة (UTXO) Unspent Transaction Output, يقوم برنامج محفظة فتحي بعد ذلك بإظهارها على أنها رصيد قابل للإنفاق.

عندما يقرر فتحي في وقت لاحق إنفاق هذا الـ UTXO, يحب عليه أن يقوم بإنشاء دخل لمعاملة جديدة تشير الى هاش المعاملة التي أنشأها سعيد، والذي يسمى مُعرف المعاملة (txid)، وإلى تحديدا الخرج الذي أنشأه سعيد لصالح فتحي من خلال رقم الفهرسة للخرج (Output Index). يجب عليه بعد ذلك انشاء نص برمجي للتوقيع (Signature Script)، عبارة عن مجموعة من البيانات التي تستوفي الشروط التي وضعها سعيد في الخرج الغير منفق في المعاملة السابقة ضمن النص البرمجي pubkey. النص البرمجي للتوقيع يدعى أيضاً scriptSigs.

النص البرمجي pubkey والنص البرمجي للتوقيع يجمعون المفاتيح العامة من نوع secp256k1 والتواقيع المقابلة مع المنطق الشرطي، ليخلق آلية برمجية للتفويض أو الترخيص.


من أجل خرج على غرار P2PKH, النص البرمجي للتوقيع الخاص بفتحي سوف يحتوي على هذه البيانات:
1.   المتاح العام الخاص به كامل أي ليس الهاش، ليقوم النص البرمجي pubkey من التأكد أن نتيجة هاش العنوان العام مطابقة للهاش المرفق مع النص البرمجي السابق المقدم من سعيد.
2.   توقيع من نوع secp256k1 تم اجراءه باستخدام صيغة التشفير ECDSA يجمع بين بيانات محددة من المعاملة (مشروح في الأسفل) مع المفتاح الخاص بفتحي. هذا يدع النص البرمجي pubkey من التأكد أن فتحي يملك المفتاح الخاص الذي تم انشاء المفتاح العام منه.

توقيع فتحي من نوع secp256k1 لا يثبت فقط أن فتحي يملك المفتاح الخاص المقابل؛ انما أيضا تجعل أجزاء المعاملة خارج النص البرمجي للتوقيع (scriptSigs) غير قابلة للتغيير أو التلاعب، لذا يمكن لفتحي من بث المعاملة على شبكة الند للند بأمان.

كما هو موضح في الصورة أعلاه، البيانات التي سيوقعها فتحي رقمياً تشمل مُعرِف المعاملة txid وعنوان فهرسة الخرج Output Index للمعاملة السابقة، النص البرمجي pubkey للخرج السابق، النص البرمجي المنشأ من قبل فتحي الذي بدوره سيسمح للمستلم التالي بإنفاق خرج هذه المعاملة، وكمية الساتوشيز المرسلة للمستلم التالي. فعلياً يتم توقيع كامل المعاملة باستثناء أي نص برمجي للتوقيع scriptSig, الذي يحوي على المفتاح العام كامل والتوقيع من نوع secp256k1.

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

مجموع الـ UTXOs الموجودة في البلوكتشين تمثل مجموعة، بالتالي كل معاملة تستهلك عناصر من هذه المجموعة وتقوم بإنشاء عناصر جديدة تضاف إلى المجموعة. هكذا هذه المجموعة تمثل جميع العملات Coins في النظام.
كما تم ذكره، UTXO تُعرف خرج لمعاملة Output الذي بدوره لم يتم انفاقه بعد، أي استخدم كدخل لمعاملة جديدة. الـ Outputs هم مجموعة عليا أو مجموعة حاوية لـ الـ UTXOs. وفقاً لذلك فالـ UTXOs هم مجموعة دنيا أو مجموعة جزئية من المجموعة العليا Outputs.

المصادر:
-   https://bitcoin.org/en/transactions-guide#introduction
-   https://en.wikipedia.org/wiki/Unspent_transaction_output
-   https://bitcoin.org/bitcoin.pdf
-   https://docs.neo.org/developerguide/en/articles/blockchain/utxo.html
-   https://academy.horizen.global/technology/advanced/the-utxo-model/
-   http://earlz.net/view/2017/07/27/1820/what-is-a-utxo-and-how-does-it


Long Bitcoin BTC. Short the Banks
Jump to: