إذا كنت تريد أن تتعلم كيفية بناء blockchain ، فقد وصلت إلى المكان الصحيح. دعونا نتعمق في معرفة كيفية بناء blockchain في Python.
هناك الكثير من المقالات حول blockchain ، ولكن لا تتحدث جميعها عن بناء blockchain من البداية. كمطور ، تعتبر النظريات مهمة ، لكنك تحتاج أيضًا إلى إنشاء blockchain لفهم المفهوم الكامن وراءه تمامًا.
الفكرة الأساسية وراء blockchain هي طبيعتها اللامركزية. سوف تكون مفتونًا بحقيقة كيفية عمل كل شيء في الداخل. قد يبدو Blockchain بسيطًا ، ولكن يوجد في الداخل الكثير من البروتوكولات والخوارزميات التي تجعل ذلك يحدث. سنستخدم Python لإنشاء blockchain من البداية.
يمكنك أيضًا حفظ المقالة ووضع إشارة مرجعية عليها كـ “كيفية بناء blockchain الخاص بنا”. صدقنى؛ المقال سوف يساعدك على المدى الطويل.
هل سمعت عن blockchain من قبل؟ ثم تحقق من دورة 101Blockchain المجانية. إذا كنت تتطلع إلى التقدم في حياتك المهنية ، فقم بإلقاء نظرة على دورة Blockchain المعتمدة للمؤسسات حيث ستتعرف على كيفية عمل blockchain للمؤسسات. هيا بنا نبدأ.
هل أنت مبتدئ في Blockchain؟ قم بالتسجيل في دورة Blockchain المجانية وابدأ رحلة Blockchain الآن.
كيفية بناء Blockchain
أفضل طريقة لتعلم أي شيء هي التعلم من خلال العمل. للتأكد من أنك في نفس الصفحة مثلي ، دعنا نتحقق من المتطلبات أولاً. سنقوم أيضًا بوصف blockchain بإيجاز حتى نكون كلانا على نفس الصفحة.
المتطلبات
الشرط الأساسي لاتباع الدليل هو معرفة كيفية البرمجة. إذا لم تقم بالتشفير مطلقًا في حياتك ، فهذا الدليل ليس لك. أوصي بالاطلاع على الدورات التدريبية المتنوعة على مستوى المبتدئين والمتاحة عبر الإنترنت. أوصي بـ EdX و Udacity و Coursera للحصول على أفضل تجربة تعليمية.
أنت بالفعل مبرمج؟ بعد ذلك ، يجب أن تعرف عن لغة بايثون الأساسية. أيضًا ، سيساعدك على اتباع البرنامج التعليمي “كيفية إنشاء Blockchain”.
اقرأ الآن: دليل Quorum Blockchain النهائي
أنشأنا البرنامج التعليمي حتى يتمكن أي شخص من متابعته. لذلك ، إذا كنت لا تعرف وتريد أن تتعلم كيفية بناء blockchain من البداية ، فنحن نرحب بك للقيام بذلك!
إذا كنت لا تعرف لغة Python ، فلا داعي للقلق لأنه من السهل التعرف عليها. تفحص ال توثيق بايثون للبدء.
سنستخدم Python 3.6+ للبرنامج التعليمي. إذا قررت استخدام إصدارات أخرى من Python ، فقد تضطر إلى إجراء المزيد من البحث حتى تعمل الشفرة. لأغراض البرنامج التعليمي ، أوصي بتثبيت الإصدار الذي أستخدمه.
أخيرًا ، يجب أن تعرف أيضًا عن HTTP – البروتوكول المستخدم للتواصل بين طرفين على الإنترنت.
تثبيت بايثون باستخدام النقطة
تحتاج إلى تثبيت بايثون باستخدام النقطة. تحتاج أيضًا إلى تثبيت مكتبة الطلبات والقارورة الرائعة. للقيام بذلك ، ما عليك سوى تشغيل الأمر أدناه.
قارورة تثبيت بالدولار الأمريكي = 0.12.2 طلبات = 2.18.4
إذا كنت تستخدم بيئة Windows ، فيمكنك الانتقال مباشرة إلى python.org لتنزيل أحدث إصدار من Python.
بالنسبة لي ، قمت بتنزيل Python 3.8.1 – أحدث إصدار في وقت كتابة البرنامج التعليمي.
بالنسبة إلى IDE ، أفضل استخدام PyCharm. أنا أستخدم إصدار مجتمع Python في البرنامج التعليمي. أنت حر في استخدام أي IDE من اختيارك. بديل رائع آخر هو Visual Studio Code – بيئة تطوير متكاملة مجانية ومفتوحة المصدر.
آخر أداة ستحتاجها هي Postman – عميل HTTP. بدلاً من ذلك ، يمكنك أيضًا استخدام cURL.
أوصي أيضًا بتثبيت بيئة افتراضية لإنشاء بيئة مختلفة تمامًا لتطويرك. يمكنك متابعة هذا الدليل لإعداده بشكل صحيح.
إعادة النظر في Blockchain
قبل أن نبدأ ونبني blockchain ، نحتاج إلى تحديث فكرتنا عن blockchain. سيساعدنا هذا على البقاء على نفس الصفحة.
Blockchain هي تقنية دفتر أستاذ موزع حيث يمكن للأقران المشاركة والتفاعل وتنفيذ المعاملات دون الحاجة إلى كيان مركزي. كل نظير لديه نسخة من دفتر الأستاذ ، مما يجعل من المستحيل على المتسللين القيام بالاحتيال في النظام. تشمل الميزات الرئيسية لـ blockchain الشفافية والثبات والأمن. يستخدم خوارزميات تشفير متقدمة لضمان أمن البيانات. أيضًا ، للوصول إلى توافق في الآراء ، ستستخدم شبكة blockchain خوارزميات الإجماع مثل Proof-of-Work ، و Proof-of-Stake ، وما إلى ذلك..
اقرأ أيضًا: Blockchain للمبتدئين: دليل البدء
الشروع في بناء Blockchain
بعد الانتهاء من جميع عمليات التثبيت المطلوبة ، نحن الآن على استعداد للبدء في برنامجنا التعليمي ، “كيفية بناء Blockchain.”
للبدء ، تحتاج إلى إنشاء ملف blockchain.py.
1. إنشاء Blockchain
تتمثل الخطوة الأولى في إنشاء حل فعال لـ blockchain. في البداية ، نحتاج إلى إنشاء فئة Blockchain. هناك سننشئ مُنشئًا سيبدأ قائمة السلسلة والمعاملات. ستقوم قائمة السلسلة بتخزين blockchain الخاص بنا ، بينما سيتم تخزين المعاملات في صفيف Current_transacations.
def __init __ (self): self.chain = [] self.current_transactions = []
بعد ذلك ، نحتاج إلى إنشاء وظيفة new_block والتي سيتم استخدامها لإنشاء كتل جديدة ثم إضافتها إلى السلسلة الحالية. رمز وظيفة new_block على النحو التالي:
def new_block (self): # هذه الوظيفة تنشئ كتلًا جديدة ثم تضيف إلى تمرير السلسلة الحالي
ستنشئ طريقة new_transcaction معاملة جديدة ثم تضيف المعاملة إلى قائمة المعاملات الموجودة بالفعل.
def new_transaction (self): # تضيف هذه الوظيفة معاملة جديدة إلى المعاملات الموجودة بالفعل لدينا أيضًا وظيفة تجزئة تُستخدم لإنشاء تجزئة لكتلة. staticmethod def تجزئة (كتلة): # تستخدم لتجزئة كتلة
الوظيفة الأخيرة التي سننشئها last_block. يتم استخدامه لاستدعاء آخر كتلة في السلسلة.
يمكننا أيضًا إنشاء ثلاث وظائف أخرى هنا.
- register_node () → لتسجيل عقدة جديدة وإضافتها إلى الشبكة
- valid_proof () → سيضمن أن تحل الكتلة المرسلة إلى السلسلة المشكلة
- valid_chain () → سيتحقق هذا مما إذا كانت الكتل التالية في السلسلة صالحة أم لا.
يبدو مخطط blockchain.py على النحو التالي.
فئة Blockchain (كائن): def __init __ (self): self.chain = [] self.current_transactions = [] def new_block (self): # تنشئ هذه الوظيفة كتلًا جديدة ثم تضيف إلى سلسلة تمرير def new_transaction (self): # تضيف هذه الوظيفة معاملة جديدة إلى المعاملات الموجودة بالفعل تمريرstaticmethod def hash (block): #Used for hashing a blockproperty def last_block (self): # يستدعي ويعيد الكتلة الأخيرة من تمرير السلسلة
تدير فئة Blockchain السلسلة بأكملها. تقوم التعريفات المحددة ضمن الفئة بإدارة الإجراءات المختلفة داخل blockchain.
دعنا ننتقل إلى كل طريقة من الطرق أدناه.
قراءة الآن: ما هو تجزئة blockchain: مقدمة لحل توسيع blockchain
هيكل بلوك
تحتوي الكتلة على معلومات حيوية حول المعاملات والسلاسل. أي كتلة في السلسلة تحتوي على المعلومات التالية
- فهرس
- الطابع الزمني في وقت Unix
- قائمة المعاملات
- دليل – إثبات
- تجزئة الكتلة السابقة
معظم المعلومات داخل الكتلة لا تحتاج إلى شرح. هنا ، المتغيرين الأساسيين هما تجزئة السابقة ، والتي تحتوي على قيمة تجزئة الكتلة السابقة. هذا مهم لأنه يتأكد من أن blockchain غير قابل للتغيير ، ولا يمكن لأي فاعل ضار تحديث أو حذف أو إضافة أي بيانات إلى السلسلة.
اقرأ الآن: لماذا ستغير Blockchain العالم?
إضافة معاملة إلى كتلة
مع فهم بنية الكتلة ، دعنا الآن نتعلم كيفية إضافة معاملة إلى الكتلة. رمز لها على النحو التالي.
def new_transaction (self): # تضيف هذه الوظيفة معاملة جديدة إلى المعاملات الموجودة بالفعل """سيؤدي هذا إلى إنشاء معاملة جديدة سيتم إرسالها إلى الكتلة التالية. سيحتوي على ثلاثة متغيرات بما في ذلك المرسل والمستلم والمبلغ """ self.current_transactions.append ({‘sender’: sender، ‘مستلم’: المستلم ‘amount’: amount،}) إرجاع self.last_block [‘index’] + 1 كما ترى ، فإنه يقوم ببساطة بإلحاق قائمة Current_transaction مع كائن يحتوي على ثلاثة متغيرات → المرسل ، المستلم ، المبلغ.
بمجرد الانتهاء من الإضافة ، ترسل الطريقة بعد ذلك فهرس الكتلة إلى السلسلة. إنها الكتلة التالية التي سيتم تعدينها.
إنشاء كتل جديدة
قبل أن نبدأ في إنشاء كتل جديدة ، نحتاج إلى إنشاء كتلة التكوين. للقيام بذلك ، نحتاج إلى استخدام سطر بسيط من التعليمات البرمجية على النحو التالي.
self.new_block (تجزئة سابقة = 1 ، دليل = 100)
يجب إضافة هذا الخط إلى فئة Blockchain الخاصة بك.
بالنسبة إلى طريقة new_block () ، تحتاج إلى إرسال متغيرين كمعلمات لها. يتضمن الإثبات والتجزئة السابقة.
الآن ، دعنا نلقي نظرة على طريقة new_block () أدناه.
def new_block (self، proof، previous_hash = None): # هذه الوظيفة تنشئ كتلًا جديدة ثم تضيف إلى السلسلة الحالية """ستحتوي هذه الطريقة على معلمتين اثبات ، تجزئة سابقة""" block = {‘index’: len (self.chain) + 1، ‘timestamp’: time ()، ‘proof’: proof، previous_hash: previous_hash أو self.hash (self.chain [-1])،}
# اضبط قائمة المعاملات الحالية على فارغة.
self.current_transactions = [] كتلة إرجاع self.chain.append (كتلة)
دعونا نشرح كود new_block. نقوم بإنشاء قائمة الحظر التي تحتوي على المعلمات الثلاثة الهامة. بمجرد تحديدها ، نقوم أيضًا بكتابة الكود لإعادة تعيين قائمة التحويل الحالية ثم إلحاق الكتلة بالسلسلة. طريقة new_block ، عند استدعائها ، ترجع الكتلة.
اقرأ الآن: دليل المبتدئين: ما هو Ethereum Classic?
دعنا أيضًا نحدد طريقة last_block أدناه.
@منشأه
def last_block (ذاتي):
# يستدعي ويعيد آخر كتلة من السلسلة
إرجاع self.chain [-1]
أيضًا ، رمز طريقة التجزئة () كما يلي:
def hash (block): # تستخدم لتجزئة كتلة """سيُنشئ رمز المتابعة تجزئة كتلة SHA-256 ويضمن أيضًا ترتيب القاموس""" block_string = json.dumps (block، sort_keys = True) .encode () إرجاع hashlib.sha256 (block_string) .hexdigest () إذا قمت بدمج كل الكود حتى الآن ، فسنحصل على blockchain.py التالي. تحقق منه أدناه.
فئة Blockchain (كائن): def __init __ (self): self.chain = [] self.current_transactions = [] self.new_block (previous_hash = 1، proof = 100) def new_block (self، proof، previous_hash = None): #This تقوم الوظيفة بإنشاء كتل جديدة ثم تضيف إلى السلسلة الحالية """ستحتوي هذه الطريقة على معلمتين اثبات ، تجزئة سابقة""" block = {‘index’: len (self.chain) + 1، ‘timestamp’: time ()، ‘proof’: proof، previous_hash: previous_hash أو self.hash (self.chain [-1])،} # Set قائمة المعاملات الحالية لإفراغها. self.current_transactions = [] self.chain.append (كتلة) إرجاع كتلة def new_transaction (self): # تضيف هذه الوظيفة معاملة جديدة إلى المعاملات الموجودة بالفعل """سيؤدي هذا إلى إنشاء معاملة جديدة سيتم إرسالها إلى الكتلة التالية. سيحتوي على ثلاثة متغيرات بما في ذلك المرسل والمستلم والمبلغ """ self.current_transactions.append ({‘sender’: sender، ‘المستلم’: المستلم، ‘amount’: amount،}) إرجاع self.last_block [‘index’] + 1staticmethod def hash (block): #Used for hassh كتلة """سيُنشئ رمز المتابعة تجزئة كتلة SHA-256 ويضمن أيضًا ترتيب القاموس""" block_string = json.dumps (block، sort_keys = True) .encode () إرجاع hashlib.sha256 (block_string) .hexdigest ()property def last_block (self): # يستدعي ويعيد الكتلة الأخيرة من سلسلة إرجاع self.chain [ -1]
إثبات تنفيذ العمل
خطوتنا التالية في بناء blockchain.py هي تطبيق إثبات العمل.
إذن ، ما هو إثبات العمل؟ إنها طريقة إجماع تُستخدم لإضافة كتل جديدة إلى السلسلة. إنه يمثل تحديًا لعامل المناجم ، وبمجرد أن يحل عامل المنجم المشكلة ، يتم التحقق من الكتلة. في المقابل ، يحصل عامل المنجم على مكافأة بناءً على مدى تعقيد المشكلة.
يُعرف إثبات عمل Bitcoin باسم Hashcash. إنه يضمن عمل إجماع شبكة البيتكوين على النحو المنشود.
اقرأ أيضًا: خوارزميات الإجماع: جذر تقنية Blockchain
دعونا نحدد طريقة proof_of_work (). ستكون الطريقة جزءًا من فئة Blockchain.
def proof_of_work (ذاتي ، مقاومة أخيرة): """هذه الطريقة هي المكان الذي يتم فيه تنفيذ خوارزمية الإجماع. يستغرق معلمتين بما في ذلك self و last_proof""" الإثبات = 0 بينما self.valid_proof (last_proof ، إثبات) خطأ: إثبات + = 1 إثبات إرجاعstaticmethod def valid_proof (last_proof، proof): """هذه الطريقة تتحقق من صحة الكتلة""" guess = f ‘{last_proof} {proof}’. encode () guess_hash = hashlib.sha256 (guess) .hexigest () return guess_hash [: 4] == "0000"
الطريقة الأولى لإثبات العمل بسيطة ؛ يقوم ببساطة بتعيين الإثبات على 0 ثم تشغيل حلقة while لتشغيل طريقة valid_proof. إذا كان خطأ ، أضف واحدًا إلى البرهان.
يمكنك زيادة صعوبة التجزئة بإضافة المزيد من الأصفار.
هذا يقودنا إلى نهاية Blockchain.py. رمزنا يقف على النحو التالي.
فئة Blockchain (كائن): def __init __ (self): self.chain = [] self.current_transactions = [] self.new_block (previous_hash = 1، proof = 100) def proof_of_work (self، last_proof): """هذه الطريقة هي المكان الذي يتم فيه تنفيذ خوارزمية الإجماع. يستغرق معلمتين بما في ذلك self و last_proof""" الإثبات = 0 بينما self.valid_proof (last_proof ، إثبات) خطأ: إثبات + = 1 إثبات إرجاعstaticmethod def valid_proof (last_proof، proof): """هذه الطريقة تتحقق من صحة الكتلة""" guess = f ‘{last_proof} {proof}’. encode () guess_hash = hashlib.sha256 (guess) .hexigest () return guess_hash [: 4] == "0000" def new_block (self، proof، previous_hash = None): # هذه الوظيفة تنشئ كتلًا جديدة ثم تضيف إلى السلسلة الحالية """ستحتوي هذه الطريقة على معلمتين اثبات ، تجزئة سابقة""" block = {‘index’: len (self.chain) + 1، ‘timestamp’: time ()، ‘proof’: proof، previous_hash: previous_hash أو self.hash (self.chain [-1])،} # Set قائمة المعاملات الحالية لإفراغها. self.current_transactions = [] self.chain.append (كتلة) إرجاع كتلة def new_transaction (self): # تضيف هذه الوظيفة معاملة جديدة إلى المعاملات الموجودة بالفعل """سيؤدي هذا إلى إنشاء معاملة جديدة سيتم إرسالها إلى الكتلة التالية. سيحتوي على ثلاثة متغيرات بما في ذلك المرسل والمستلم والمبلغ """ self.current_transactions.append ({‘المرسل’: المرسل ، ‘المستلم’: المستلم ، ‘المبلغ’: المبلغ ،})
return self.last_block [“index”] + 1
تضمين التغريدة
تجزئة def (كتلة):
# تستخدم لتجزئة كتلة
“” “سيُنشئ رمز المتابعة تجزئة كتلة SHA-256 ويضمن أيضًا ترتيب القاموس” “”
block_string = json.dumps (block، sort_keys = True) .encode ()
إرجاع hashlib.sha256 (block_string) .hexdigest ()
@منشأه
def last_block (ذاتي):
# يستدعي ويعيد آخر كتلة من السلسلة
إرجاع self.chain [-1]
2. تكامل API
رائع ، نقوم بإنشاء blockchain يعمل! الآن ، لاستخدامه بشكل فعال ، نحتاج إلى إنشاء API (واجهة برمجة التطبيقات).
للقيام بذلك ، سنستخدم Python Framework: Flask.
Flask هو إطار عمل صغير ، مما يعني أنه خفيف الوزن ، ويمكنك إضافة المكتبات التي تحتاجها. كما أنه يمكّنك من إنشاء نقطة نهاية لوظيفة Python بسهولة.
لإنشاء واجهات برمجة التطبيقات ، نحتاج أولاً إلى التأكد من أن blockchain الخاص بنا يمكنه قبول الطلبات عبر HTTP. للقيام بذلك ، يتعين علينا إنشاء المزيد من الأساليب.
الآن ، سنقوم بتعديل blockchain.py.
# إنشاء تطبيق عقدة التطبيق = Flask (__ name__) node_identifier = str (uuid4 ()). استبدل (‘-‘، ”) # تهيئة blockchain blockchain = Blockchain () @ app.route (‘/ mine’، methods = [ ‘GET’]) def الألغام (): العودة "تعدين كتلة جديدة" @ app.route (‘/ transaction / new’، methods = [‘POST’]) def new_transaction (): إرجاع "إضافة معاملة جديدة" @ app.router (‘/ chain’، features = [‘GET’]) def full_chain (): response = {‘chain’: blockchain.chain، ‘length’: len (blockchain.chain)} إرجاع jsonify (استجابة) ، 200 إذا __name__ == ‘__main__’: app.run (المضيف ="0.0.0.0", المنفذ = 5000)
الشفرة واضحة بذاتها في معظمها. نقوم أولاً ببدء العقدة. بعد ذلك ، نقوم بإنشاء عقدة عشوائية. بمجرد الانتهاء ، نقوم بعد ذلك بتهيئة فئة Blockchain الخاصة بنا. بمجرد الانتهاء ، نحتاج إلى إنشاء ثلاث نقاط نهاية على النحو التالي.
- / نقطتي النهاية
- / المعاملات / نقطة نهاية جديدة
- / نقطة نهاية السلسلة
أخيرًا ، نقوم بتشغيل الخادم على منفذ 5000.
تم الآن إنشاء التطبيق تقريبًا. كل ما علينا فعله هو إنشاء طريقة فئة المعاملات.
@ app.route (‘/ transaction / new’، methods = [‘POST’]) def new_transaction (): القيم = request.get_json () # التحقق مما إذا كانت البيانات المطلوبة موجودة أم غير مطلوبة = [‘المرسل’، ‘ المستلم “،” المبلغ “] إذا لم يكن الكل (k في قيم k المطلوبة): إرجاع” القيم المفقودة “، 400 # إنشاء فهرس معاملة جديد = blockchain.new_transaction (القيم [‘المرسل’] ، القيم [‘المستلم’ ، قيم [‘amount’]]) response = {‘message’: f’Transaction تمت جدولته ليتم إضافته إلى Block No. {index} ‘} return jsonify (response)، 201
اقرأ أيضًا: إليك ما تحتاج لمعرفته حول إثبات عمل blockchain
نقطة نهاية التعدين
آخر نقطة نهاية سننشئها هي نقطة نهاية التعدين. للقيام بذلك ، علينا التأكد من قيامه بالأشياء الثلاثة التالية.
- حساب إثبات العمل
- قم بإنشاء blockchain جديد ثم قم بإضافته إلى السلسلة
- مكافأة عامل المنجم على عمله
@ app.route (‘/ mine’، methods = [‘GET’]) def لي (): """هنا نجعل إثبات عمل خوارزمية العمل""" last_block = blockchain.last_block last_proof = last_block [‘proof’] proof = blockchain.proof_of_work (last_proof) # مكافأة عامل المنجم على مساهمته. 0 يحدد عملة جديدة تم تعدينها blockchain.new_transaction (المرسل ="0", المستلم = node_identifier، amount = 1،) # الآن أنشئ الكتلة الجديدة وأضفها إلى السلسلة previous_hash = blockchain.hash (last_block) block = blockchain.new_block (proof، previous_hash) response = {‘message’: ‘الكتلة الجديدة تم تزوير ‘،’ index ‘: block [‘ index ‘]،’ Transaction ‘: block [‘ transaction ‘]،’ proof ‘: block [‘ proof ‘]،’ previous_hash ‘: block [‘ previous_hash ‘]} إرجاع jsonify (استجابة) ، 200
اقرأ الآن: دليل المبتدئين: ما هو AION؟ شبكة Blockchain من الجيل الثالث في العالم
3. تفاعل Blockchain
الخطوة الأخيرة هي التفاعل مع blockchain. سنستخدم Postman للتفاعل مع شبكة blockchain باستخدام واجهة برمجة التطبيقات التي أنشأناها للتو.
قم بتشغيل الكود أدناه في Python Console
python blockchain.py
استنتاج
هذا يقودنا إلى نهاية كيفية بناء blockchain. آمل أن تساعدك الخطوات والرموز أعلاه في بناء Blockchain في Python. لذلك ، إذا كنت مبتدئًا وتطمح إلى بناء مهنة في Blockchain ، فنحن نقترح أن تبدأ حياتك المهنية في blockchain من خلال دورة أساسيات Blockchain المجانية. اخترنا كشريك دراستك وسنظل معك حتى لا تحصل على الوظيفة التي تحلم بها.
إذن ، ما رأيك في blockchain وتطبيقه؟ التعليق أدناه، واسمحوا لنا أن نعرف.