Bitcoin: نظام نقدي إلكتروني من نظير إلى نظير

ساتوشي ناكاموتو

satoshin@gmx.com

www.bitcoin.org


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

 

1 المقدمة

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

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

2. المعاملات

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

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

نحتاج إلى طريقة تمكن المستفيد من معرفة أن المالكين السابقين لم يوقعوا على أي معاملات سابقة. لأغراضنا ، فإن المعاملة الأولى هي التي تهم ، لذلك لا نهتم بالمحاولات اللاحقة لمضاعفة الإنفاق. الطريقة الوحيدة لتأكيد عدم وجود معاملة هي أن تكون على دراية بجميع المعاملات. في النموذج المعتمد على النعناع ، كان دار سك العملة على علم بجميع المعاملات وقرر أيها وصل أولاً. لتحقيق ذلك بدون طرف موثوق به ، يجب الإعلان عن المعاملات علنًا [1] ، ونحتاج إلى نظام للمشاركين للاتفاق على تاريخ واحد للترتيب الذي تم استلامها به. يحتاج المدفوع لأمره إلى إثبات أنه في وقت كل معاملة ، وافقت غالبية العقد على أنها كانت أول معاملة تم استلامها.

3. خادم الطابع الزمني

يبدأ الحل الذي نقترحه بخادم طابع زمني. يعمل خادم الطابع الزمني عن طريق أخذ تجزئة لكتلة من العناصر ليتم ختمها بالطابع الزمني ونشر التجزئة على نطاق واسع ، كما هو الحال في صحيفة أو منشور يوزنت [2-5]. يثبت الطابع الزمني أن البيانات يجب أن تكون موجودة في ذلك الوقت ، من الواضح ، من أجل الوصول إلى التجزئة. يتضمن كل طابع زمني الطابع الزمني السابق في تجزئته ، مكونًا سلسلة ، مع كل طابع زمني إضافي يعزز ما قبله.

4. إثبات العمل

لتنفيذ خادم طابع زمني موزع على أساس نظير إلى نظير ، سنحتاج إلى استخدام نظام إثبات العمل مشابه لـ Adam Back's Hashcash [6] ، بدلاً من منشورات الصحف أو Usenet. يتضمن إثبات العمل مسحًا ضوئيًا لقيمة عند تجزئتها ، مثل SHA-256 ، تبدأ التجزئة بعدد من البتات الصفرية. متوسط العمل المطلوب أسي في عدد البتات الصفرية المطلوبة ويمكن التحقق منه عن طريق تنفيذ تجزئة واحدة.

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

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

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

5. الشبكة

فيما يلي خطوات تشغيل الشبكة:

1)    يتم بث المعاملات الجديدة لجميع العقد.

2)    تجمع كل عقدة معاملات جديدة في كتلة.

3)    تعمل كل عقدة على إيجاد إثبات عمل صعب لكتلها.

4)    عندما تجد العقدة إثباتًا للعمل ، فإنها تبث الكتلة إلى جميع العقد.

5)    تقبل العقد الكتلة فقط إذا كانت جميع المعاملات فيها صالحة ولم يتم إنفاقها بالفعل.

6)    تعبر العقد عن قبولها للكتلة من خلال العمل على إنشاء الكتلة التالية في السلسلة ، باستخدام تجزئة الكتلة المقبولة مثل التجزئة السابقة.

تعتبر العقد دائمًا السلسلة الأطول هي السلسلة الصحيحة وستستمر في العمل على تمديدها. إذا بثت عقدتان إصدارات مختلفة من الكتلة التالية في وقت واحد ، فقد تتلقى بعض العقد واحدة أو أخرى أولاً. في هذه الحالة ، يعملون على أول فرع حصلوا عليه ، لكن يحفظون الفرع الآخر في حال أصبح أطول. سيتم كسر ربطة العنق عندما يتم العثور على دليل العمل التالي ويصبح فرع واحد أطول ؛ سوف تتحول العقد التي كانت تعمل في الفرع الآخر إلى العقد الأطول.

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

6. الحوافز

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

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

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

7. استعادة مساحة القرص

بمجرد دفن آخر معاملة في عملة معدنية تحت كتل كافية ، يمكن التخلص من المعاملات المستنفدة قبل ذلك لتوفير مساحة على القرص. لتسهيل ذلك دون كسر تجزئة الكتلة ، يتم تجزئة المعاملات في Merkle Tree [7] [2] [5] ، مع تضمين الجذر فقط في تجزئة الكتلة. يمكن بعد ذلك ضغط الكتل القديمة عن طريق قطع أغصان الشجرة. لا يلزم تخزين التجزئات الداخلية.

سيكون رأس الكتلة بدون معاملات حوالي 80 بايت. إذا افترضنا أن الكتل يتم إنشاؤها كل 10 دقائق ، 80 بايت * 6 * 24 * 365 = 4.2 ميجابايت في السنة. مع بيع أنظمة الكمبيوتر عادةً بسعة 2 غيغابايت من ذاكرة الوصول العشوائي اعتبارًا من عام 2008 ، ويتنبأ قانون مور بالنمو الحالي لـ

1.2 جيجا بايت في السنة ، يجب ألا يكون التخزين مشكلة حتى إذا كان يجب الاحتفاظ برؤوس الكتلة في الذاكرة.

8. التحقق من الدفع المبسط

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

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

9. الجمع بين القيمة وتقسيمها

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

وتجدر الإشارة إلى أن التوزيع الموسع ، حيث تعتمد المعاملة على العديد من المعاملات ، وتعتمد تلك المعاملات على العديد من المعاملات الأخرى ، ليست مشكلة هنا. ليست هناك حاجة مطلقًا لاستخراج نسخة كاملة من سجل المعاملة.

10. الخصوصية

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

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

11. الحسابات

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

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

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

بالنظر إلى افتراضنا أن p> q ، فإن الاحتمال ينخفض بشكل كبير مع زيادة عدد الكتل التي يجب على المهاجم اللحاق بها. مع الاحتمالات ضده ، إذا لم يندفع محظوظًا إلى الأمام في وقت مبكر ، فإن فرصه تصبح ضئيلة للغاية لأنه يتخلف أكثر.

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

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

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

12. الخلاصة

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

 

المراجع [1] W. Dai، "b-money،" http://www.weidai.com/bmoney.txt، 1998. [2] H. Massias و XS Avila و J.-J. Quisquater ، "تصميم خدمة طابع زمني آمن مع الحد الأدنى من متطلبات الثقة" ، في الندوة العشرين حول نظرية المعلومات في البنلوكس ، مايو 1999. [3]   S. Haber، WS Stornetta ، "How to time stamp a digital document،" In Journal of Cryptology، vol 3، no 2، pages 99-111، 1991. [4]                D. Bayer، S. Haber، WS Stornetta ، "تحسين كفاءة وموثوقية ختم الوقت الرقمي ،" In Sequences II: Methods in Communication، Security and Computer Science، pages 329-334، 1993. [5]              هابر ، دبليو إس ستورنيتا ، "أسماء آمنة لسلاسل البت" ، في وقائع مؤتمر ACM الرابع لأمن الكمبيوتر والاتصالات ، الصفحات 28-35 ، أبريل 1997. [6] أ. رجوع ، " Hashcash - إجراء مضاد لرفض الخدمة" ، http://www.hashcash.org/papers/hashcash.pdf ، 2002. [7] RC Merkle ، "بروتوكولات لأنظمة تشفير المفتاح العام ،" في Proc. 1980 ندوة حول الأمن والخصوصية ، IEEE Computer Society ، الصفحات 122-133 ، أبريل 1980. [8] W. فيلر ، مقدمة في نظرية الاحتمالات وتطبيقاتها ، 1957.

شراء البيتكوين

يمكنك شراء البيتكوين من هنا .