ماذا يجب أن نبني blockchain؟

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

من خلال تحليل العديد من مشاريع blockchain (Bitshares، Hyperledger، Exonum، Ethereum، Bitcoin، وما إلى ذلك)، أفهم أنه من وجهة نظر فنية، كلها مبنية على نفس المبادئ. تذكرنا سلاسل الكتل بالمنازل، والتي، على الرغم من تنوع التصميمات والديكور والأغراض، لها أساس وجدران وسقف ونوافذ وأبواب متصلة ببعضها البعض بطرق معينة. وإذا فهمت المبادئ الأساسية لتصميم البناء ومعرفة خصائص المواد المستخدمة، فيمكنك تحديد الغرض المقصود من منزل معين. في الوقت الحالي، نشأ موقف مع blockchain سمع عنه الجميع، لكن القليل من الناس يفهمون بنية ومبادئ التشغيل. لذلك، هناك سوء فهم لماذا وكيف يكون من المنطقي استخدام تقنيات blockchain.

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

لذلك، دعونا نتذكر ما هي المشاكل التي تم حلها بواسطة blockchain في البداية.

أنا متأكد من أن الكثيرين سيقولون عن قاعدة بيانات موزعة ولا مركزية وعامة وغير قابلة للتغيير. ولكن لماذا كان كل هذا ضروريا؟

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

تحدي البلوكشين

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

المشاكل التي تحلها blockchain

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

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

ماذا يجب أن نبني blockchain؟

في العالم المثالي، يعمل هذا المخطط بشكل رائع، ولكن في عالمنا تنشأ المشاكل التالية:

  1. مشكلة تحديد المشاركين من جهة وضرورة عدم الكشف عن هوية المعاملات من جهة أخرى. أولئك. تحتاج إلى تحويل الأموال إلى مستلم محدد وبطريقة لا يعلم أحد بهذه المعاملة باستثناء المشاركين في المعاملة. لدى البنوك أرقام حسابات وبطاقات مصرفية مرتبطة بفرد أو كيان قانوني محدد، وتحمي السرية المصرفية معلومات المعاملات. ومن يضمن أن AnonymousWorldMoney المشروط لا يستخدم البيانات الشخصية ومعلومات المعاملات لأغراضه الخاصة؟
  2. كيف تتأكد من أن المستلم قد استلم بالضبط المبلغ الذي تم تحويله إليه؟ نسبيًا، قام المرسل بتحويل 100 دولار، وحصل المستلم على 10 دولارات. يأتي المرسل إلى مكتب AnonymousWorldMoney مع إيصاله، ويعرض الموظف نسخته، حيث مكتوب أن المرسل قام بتحويل 10 دولارات فقط.
  3. مشكلة البيئة غير الموثوقة، على سبيل المثال، عملية احتيال تسمى الإنفاق المزدوج. يمكن للمشارك عديم الضمير أن ينفق رصيده عدة مرات حتى يتم تكرار الدفع على جميع الخوادم. نظرية CAPبالطبع، لم يلغ أحد، وسيتم التوصل إلى اتفاق في نهاية المطاف، ولكن لن يحصل شخص ما على أموال مقابل الخدمات أو السلع المقدمة. لذلك، إذا لم تكن هناك ثقة كاملة في منظمة الدفع أو المشاركين في المعاملات، فمن الضروري بناء شبكة لا تعتمد على الثقة، بل على التشفير.
  4. يحتوي AnonymousWorldMoney المشروط على عدد محدود من الخوادم التي قد تصبح غير متاحة عن غير قصد أو بسبب نوايا خبيثة.
  5. ستأخذ AnonymousWorldMoney عمولتها الملموسة.
  6. إمكانية السيطرة. أثناء تشغيل Bitcoin، اتضح أن الأشخاص لا يريدون فقط نقل العملات المعدنية لبعضهم البعض، ولكن أيضًا التحقق من الشروط المختلفة للمعاملة، وسيناريوهات عمل البرنامج، وتنفيذ الإجراءات تلقائيًا وفقًا للشروط، وما إلى ذلك.

كيف تحل blockchain هذه المشاكل

  1. يتم تحديد هوية المشاركين باستخدام زوج من المفاتيح: خاص وعام، وتحدد خوارزمية التوقيع الرقمي المرسل والمستلم بشكل فريد، وتترك هويتهما مجهولة.
  2. يتم جمع المعاملات في كتل، ويتم حساب تجزئة الكتلة وكتابتها في الكتلة التالية. هذا التسلسل من تسجيل التجزئة في الكتل يعطي تقنية blockchain اسمها، كما أنه يجعل من المستحيل تغيير / حذف الكتل أو المعاملات الفردية من الكتل بشكل غير ملحوظ. وبالتالي، إذا تم تضمين معاملة ما في blockchain، فيمكنك التأكد من أن بياناتها ستبقى دون تغيير.
  3. يتم منع الاحتيال في الإنفاق المزدوج من خلال التوصل إلى إجماع في الشبكة حول البيانات التي يجب اعتبارها صالحة وتلك التي يجب التخلص منها. في شبكة البيتكوين، يتم تحقيق الإجماع من خلال إثبات العمل (PoW).
  4. يتم تحقيق موثوقية الشبكة من خلال حقيقة أن blockchain عام، حيث يمكن لكل مشارك تشغيل العقدة الخاصة به، والحصول على نسخة كاملة من blockchain، علاوة على ذلك، البدء بشكل مستقل في التحقق من المعاملات للتأكد من صحتها. تجدر الإشارة إلى أن سلاسل الكتل الحديثة تجعل من الممكن بناء ليس فقط سلاسل كتل عامة (مفتوحة) ولكن أيضًا سلاسل كتل خاصة (مغلقة)، فضلاً عن استخدام المخططات المدمجة.
  5. لن تتخلص blockchain تمامًا من العمولات ، لأن ... عليك أن تدفع للأشخاص الذين يدعمون الشبكة، ولكن في blockchain، تم إثبات الحاجة إلى العمولة بشكل مقنع لدرجة أنه ليس هناك شك في ضرورتها.
  6. تتمتع سلاسل الكتل الحديثة بالقدرة على تنفيذ منطق الأعمال، وهو ما يسمى في blockchain بالعقود الذكية. يتم تنفيذ منطق العقود الذكية بمختلف اللغات عالية المستوى.

بعد ذلك، سننظر في هذه الحلول بمزيد من التفصيل.

هندسة البلوكشين

مكونات البلوكشين

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

ماذا يجب أن نبني blockchain؟

دورة حياة الصفقة

دعونا نلقي نظرة على دورة حياة المعاملة ونقسمها قطعة قطعة:

ماذا يجب أن نبني blockchain؟

تقنيات البلوكشين

دعونا نتناول المزيد من التفاصيل حول الحلول التقنية وعلاقاتها مع بعضها البعض.

تحديد

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

Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V

لإنشاء توقيع رقمي في blockchain، يتم استخدام خوارزمية تعتمد على المنحنيات الإهليلجية: خوارزمية التوقيع الرقمي ذات المنحنى الإهليلجي (ECDSA). لكي يعمل، عادةً ما يتم أخذ المفتاح الخاص (رقم 256 بت) بشكل عشوائي. عدد خيارات المفاتيح هو 2 أس 256، لذا يمكننا الحديث عن الاستحالة العملية لمطابقة قيم المفاتيح الخاصة.

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

هناك الكثير من المقالات التي تحتوي على تفاصيل حول التشفير المستخدم في البلوكشين، على سبيل المثال: البيتكوين باختصار – التشفير

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

ماذا يجب أن نبني blockchain؟

أو يمكنك استخدام طرق أكثر موثوقية، على سبيل المثال، ختم قيمة المفتاح الخاص على الرموز المميزة:

ماذا يجب أن نبني blockchain؟

المعاملات

يمكن العثور على مزيد من التفاصيل حول هيكل المعاملة في المقالة البيتكوين باختصار – المعاملات. من المهم بالنسبة لنا أن نفهم أن كل معاملة تحتوي على البيانات التالية على الأقل:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цифровой адрес отправителя
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цифровой адрес получателя
Value: 0.0001 - сумма транзакции
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш транзакции

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

كتل المعاملات

وبعد التحقق من صحة المعاملات، تشكل العقد كتلًا منها. بالإضافة إلى المعاملات، تتم كتابة تجزئة الكتلة السابقة ورقم (عداد Nonce) في الكتلة، ويتم حساب تجزئة الكتلة الحالية باستخدام خوارزمية SHA-256. يجب أن يكون للتجزئة شروط تعقيد محددة. على سبيل المثال، في شبكة Bitcoin، يتم تغيير صعوبة التجزئة تلقائيًا كل أسبوعين اعتمادًا على قوة الشبكة بحيث يتم إنشاء الكتلة مرة واحدة كل 2 دقائق تقريبًا. يتم تحديد التعقيد بالشرط التالي: يجب أن تكون قيمة التجزئة الموجودة أقل من رقم محدد مسبقًا. إذا لم يتم استيفاء هذا الشرط، فسيتم إضافة 10 إلى الرقم، ويتكرر عمل حساب التجزئة. لتحديد تجزئة، يتم استخدام الحقل Nonce، لأنه هذه هي البيانات الوحيدة في الكتلة التي يمكن تغييرها، أما الباقي فيجب أن يبقى دون تغيير. يجب أن تحتوي التجزئة الصحيحة على عدد معين من الأصفار البادئة، مثل أحد التجزئة الحقيقية:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

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

بعد العثور على التجزئة بنجاح، تتم كتابة الكتلة والتجزئة نفسها إلى blockchain باعتبارها الكتلة التالية. يمكن العثور على مزيد من التفاصيل حول بنية الكتل في المقالة البيتكوين باختصار – Blockchain، وفيما يلي رسم تخطيطي مبسط:

ماذا يجب أن نبني blockchain؟

يبدأ blockchain بكتلة لا تحتوي بعد على تجزئة الكتلة السابقة. لا يوجد سوى كتلة واحدة من هذا القبيل في blockchain ولها اسم خاص بها هو كتلة Genesis. الكتل المتبقية لها نفس البنية وتختلف فقط في عدد المعاملات. يمكن الاطلاع على المعاملات والكتل الحقيقية التي يتم إنشاؤها حاليًا في Bitcoin أو Ethereum مستكشف كتلة.

يقتصر حجم الكتل في Bitcoin على 1 ميجابايت ومع الحد الأدنى من المعلومات في معاملة يبلغ حوالي 200 بايت، يمكن أن يصل الحد الأقصى لعدد المعاملات في الكتلة إلى حوالي 6000. من هنا، بالمناسبة، يتبع أداء البيتكوين، الذي يضحك عليه الجميع: يتم إنشاء الكتلة مرة واحدة تقريبًا كل 10 دقائق * 60 ثانية = 600 ثانية، مما يعطي أداءً رسميًا يبلغ حوالي 10 TPS. على الرغم من أن هذه ليست في الواقع إنتاجية، ولكنها خوارزمية عمل مطبقة عمدا. في Ethereum، من أجل المنافسة، جعلوا وقت إنشاء الكتلة 15 ثانية. وارتفعت الإنتاجية رسميا. لذلك، في سلاسل الكتل التي تستخدم إثبات العمل (PoW) كإجماع، ليس من المنطقي مقارنة الأداء على الإطلاق، لأنه يعتمد ذلك بشكل مباشر على مدى تعقيد حساب ذاكرة التخزين المؤقت، والذي يمكن تعيينه لأي قيمة.

شوك

ماذا يحدث إذا، على سبيل المثال، عثرت عدة عقد على تجزئات تستوفي شروط التعقيد، ولكنها مختلفة في القيمة (بمعنى آخر، توصلت إلى توافقات مختلفة) وكتبت كتلًا إلى blockchain؟ دعونا نرى كيف يحمي blockchain من هذا الموقف. في هذه الحالة، يحدث ما يسمى بالشوكة، ويكون لـ blockchain نسختان من السلسلة:

ماذا يجب أن نبني blockchain؟

ماذا حدث بعد ذلك؟ بعد ذلك، يبدأ جزء من الشبكة في العمل على الكتلة N+2 من سلسلة واحدة، وجزء من أخرى:

ماذا يجب أن نبني blockchain؟

سيتم العثور على إحدى هذه الكتل مسبقًا وإرسالها إلى blockchain، وبعد ذلك، وفقًا للقواعد، سيتعين على blockchain التبديل إلى سلسلة أطول وإلغاء جميع المعاملات من الكتلة البديلة:

ماذا يجب أن نبني blockchain؟

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

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

إجماع

لتسجيل كتلة على blockchain، يجب أن تتوصل الشبكة إلى إجماع. دعونا نتذكر مهمة تحقيق الإجماع في شبكات اتصالات الكمبيوتر. تمت صياغة المشكلة كمهمة للجنرالات البيزنطيين BFT (خطأ البيزنطي التسامح). مع حذف الوصف التصويري لمشاكل الجيش البيزنطي، يمكن صياغة المشكلة على النحو التالي: كيف يمكن لعقد الشبكة أن تصل إلى نتيجة مشتركة إذا كانت بعض عقد الشبكة يمكن أن تشوهها عمدًا. تُظهر الخوارزميات الحالية لحل مشكلة BFT أن الشبكة يمكن أن تعمل بشكل صحيح إذا كان هناك أقل من ثلث المحتالين. لماذا لم يتم تطبيق إجماع BFT على شبكة Bitcoin؟ لماذا كان من الضروري استخدام إثبات العمل (PoW)؟ هناك عدة أسباب:

  • يعمل BFT بشكل جيد مع مجموعة صغيرة ثابتة من العقد، ولكن في blockchain العامة، لا يمكن التنبؤ بعدد العقد، علاوة على ذلك، يمكن تشغيل العقد وإيقاف تشغيلها بشكل عشوائي.
  • من الضروري تحفيز الناس على إطلاق عقد blockchain. للقيام بذلك، يجب مكافأة الناس. في BFT، لا يوجد شيء رسميًا للحصول على مكافأة مقابله، ولكن ما هي المكافأة في إثبات العمل (PoW) واضح للجميع على مستوى بديهي: بالنسبة للكهرباء التي يستهلكها المعالج في عملية العثور على تجزئة الكتلة.

بالإضافة إلى إثبات العمل (PoW)، هناك العديد من الإجماعات الأخرى التي يتم استخدامها في سلاسل الكتل الحديثة، على سبيل المثال:

  • PoS (إثبات الحصة) - على blockchain Hyperledger
  • DPoS (إثبات الملكية المفوض) - على blockchain BitShares
  • تعديلات BFT: SBFT (BFT المبسطة) وPBFT (BFT العملي)، على سبيل المثال في blockchain Exonum

دعونا نتحدث قليلاً عن إجماع إثبات الحصة (PoS)، لأن... إن إثبات الحصة (PoS) وأصنافه الأكثر انتشارًا في سلاسل الكتل الخاصة. لماذا على انفراد؟ من ناحية، فإن خصائص إثبات الحصة (PoS) أفضل مقارنة بإثبات العمل (PoW)، لأن لتحقيق الإجماع، هناك حاجة إلى موارد حوسبة أقل، مما يعني زيادة سرعة كتابة البيانات إلى blockchain. ولكن من ناحية أخرى، تتمتع تقنية إثبات الحصة (PoS) بفرص أكبر للاحتيال، لذا لتحييد ذلك، يجب معرفة جميع المشاركين في blockchain.

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

  • يقسم إجماع PoS (DPoS) المشاركين إلى "ناخبين" و"مدققين". يقوم حاملو العملات (المشاركين في التصويت) بتفويض صلاحياتهم للتحقق من المعاملات وتسجيلها على blockchain إلى المشاركين الآخرين. وبالتالي، يقوم المدققون بجميع الأعمال الحسابية ويحصلون على مكافأة مقابل ذلك، ويضمن وجود المشاركين في التصويت صدق المدققين، لأن يمكن تغييرها في أي وقت.
  • يتيح لك إجماع LPoS (إثبات الحصة المؤجرة) تأجير أموالك إلى العقد الأخرى بحيث يكون لديهم فرصة أفضل للتحقق من صحة الكتل. الذي - التي. يمكنك الحصول على عمولة مقابل المعاملات دون المشاركة في التحقق الفعلي من المعاملة وتعدين الكتلة.

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

  • PoET (إثبات الوقت المنقضي)
  • PoC (إثبات القدرة)
  • PoB (إثبات الاحتراق)
  • PoWeight (إثبات الوزن)
  • PoA (إثبات النشاط) – PoW + PoS
  • PoI (إثبات الأهمية)

نماذج الموثوقية والنشر لسلاسل الكتل

blockchain العامة

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

blockchain الخاص

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

اتحاد بلوكتشين

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

العقود الذكية

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

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

من الأمثلة الكلاسيكية على الوظائف التي يتم تنفيذها باستخدام العقود الذكية هو إصدار الرموز المميزة لعمليات الطرح الأولي للعملات (ICO). على سبيل المثال، قمت بتنفيذ عقد ذكي لإصدار مبلغ متواضع قدره 500 AlexToken. بواسطة الارتباط في Etherscan هو

الكود المصدري للعقد الذكي بلغة Solidity

pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken 
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart, 
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO 
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance); 
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken 
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}

والتمثيل الثنائي كما تراه الشبكة

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

يمكن العثور على مزيد من التفاصيل حول العقود الذكية في المقالة: ما هي العقود الذكية في الايثيريوم؟.

اختتام

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

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

ماذا يحمل المستقبل لـ blockchain؟ الآن لا يمكننا إلا التكهن بالطرق الممكنة لتطوير تقنيات blockchain:

  • ستصبح Blockchain هي نفس تقنية قاعدة البيانات الشائعة، على سبيل المثال، SQL أو NoSQL لحل مجموعة محددة من المشكلات؛
  • ستصبح تقنية Blockchain بروتوكولًا واسع الانتشار، مثل بروتوكول HTTP للإنترنت؛
  • سوف تصبح Blockchain الأساس لنظام مالي وسياسي جديد على هذا الكوكب!

في الجزء التالي سنلقي نظرة على ماهية blockchain الموجودة حاليًا ولماذا يتم استخدامها في الصناعات المختلفة.

هذه ليست سوى البداية!

المصدر: www.habr.com

إضافة تعليق