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

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

عقد منتظم مقابل عقد ذكي


قبل الخوض في التفاصيل ، دعنا نلقي نظرة على مثال للفرق بين عقد عادي ، يتم تعيينه على الورق ، وعقد ذكي ، يتم تقديمه في شكل رقمي.

الصورة

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

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

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

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

تعريف العقد الذكي


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

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

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

مثال بسيط - خدمة الضمان


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

الصورة

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

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

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

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

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

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

مثال عنبر وثلاجة


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

الصورة

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

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

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

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

تصنيف العقود الذكية


للتصنيف ، يمكنك تحديد مجموعات مختلفة من المعايير. ومع ذلك ، في لحظة تطور التكنولوجيا ، أربعة منها ذات صلة.

يمكن تمييز العقود الذكية ببيئة وقت تشغيل يمكن أن تكون مركزية أو لا مركزية. في حالة اللامركزية ، لدينا قدر أكبر من الاستقلالية والتسامح مع الأخطاء عند تنفيذ العقود الذكية.

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

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

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

أدناه سوف نتحدث عن المعايير الثلاثة الأولى من أجل توضيح فهم الموضوع الحالي.

عقود وقت التشغيل الذكية


الصورة

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

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

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

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

عقود ذكية في طريقها لوضع الشروط واستيفائها


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

كما أنها تحدد العقود الذكية التعسفية ، ولكنها ليست كاملة وفقًا لـ Turing. وتشمل هذه Bitcoin و Litecoin مع نصها الخاص. هذا يعني أنه من الممكن استخدام عمليات معينة فقط في ترتيب تعسفي ، ولكن لم يعد من الممكن كتابة حلقات وخوارزميات مخصصة.

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

تشمل عقود Turing-Complete التعسفية منصتي Ethereum و RootStock ، التي لا تزال قيد التطوير. لذلك ، سنستعرض المزيد من التفاصيل حول منصة Ethereum الذكية للعقود.

العقود الذكية بطريقة البدء


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

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

حسابات Ethereum


أنواع حسابات Ethereum


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

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

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

كيفية إنشاء حسابات في Ethereum


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

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

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

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

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

هيكل المعاملات Ethereum


لجعل الأمر أكثر وضوحًا ، سنبدأ في مراجعة هيكل معاملة Ethereum ونموذج رمز العقد الذكي.

الصورة

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

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

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

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

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

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

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

ويسمى الحقل الأخير التوقيع . , , . , . .

- Solidity


- .

contract Bank { address owner; mapping(address => uint) balances; function Bank() { owner = msg.sender; } function deposit() public payable { balances[msg.sender] += msg.value; } function withdraw(uint amount) public { if (balances[msg.sender] >= amount) { balances[msg.sender] -= amount; msg.sender.transfer(amount); } } function getMyBalance() public view returns(uint) { return balances[msg.sender]; } function kill() public { if (msg.sender == owner) selfdestruct(owner); } } 

أعلاه هو رمز مصدر مبسط يمكنه حمل عملات المستخدم وإعادتها عند الطلب.

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

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

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

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

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

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

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

كيف تعمل عقدة شبكة Ethereum الكاملة؟


دعونا نلقي نظرة تخطيطية على كيفية تنفيذ هذه العقود الذكية على منصة Ethereum وكيف تعمل عقدة شبكة كاملة.

الصورة

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

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

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

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

خرافات وقيود العقود الذكية


بالنسبة للقيود الموجودة على منصات العقود الذكية الشبيهة بالإثيريوم ، يمكن الاستشهاد بما يلي:

  • تنفيذ التعليمات البرمجية ؛
  • تخصيص الذاكرة ؛
  • بيانات blockchain
  • إرسال المدفوعات ؛
  • إنشاء عقد جديد ؛
  • استدعاء عقود أخرى.

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

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

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

عيوب Ethereum


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

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

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

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

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

لذلك ، تم الانتهاء من الجزء المواضيعي من المقالة ، ننتقل إلى الأسئلة التي تثار في كثير من الأحيان.

أسئلة متكررة


- إذا كانت جميع أطراف العقد الذكي الحالي ترغب في تغيير الشروط ، فهل يمكنهم إلغاء هذا العقد الذكي باستخدام توقيع متعدد ، ثم إنشاء عقد ذكي جديد بشروط محدثة لتنفيذه؟

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

- وإذا دخل الوسيط في مؤامرة مع أحد الأطراف المعنية: ضمان أم عقد ذكي؟ هل الوسيط مطلوب في العقد الذكي؟

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

- هل من الممكن نقل العديد من الرموز المميزة المختلفة من عنوان واحد إلى عناوين مستهدفة مختلفة ، على سبيل المثال عناوين الصرف ، حيث يتم تداول هذه الرموز المميزة في معاملة Ethereum واحدة؟

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

- إحدى الخرافات حول منصة Ethereum هي أنه من المستحيل وصف الظروف التي تعتمد على بيانات مورد إنترنت خارجي ، فماذا بعد ذلك؟

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

يتم تناول هذا الموضوع في إحدى محاضرات دورة Blockchain عبر الإنترنت - " مقدمة للعقود الذكية ".

Source: https://habr.com/ru/post/ar413231/


All Articles