আপনার নিজস্ব ব্লকচেইন তৈরি করুন
📖 12 মিনিট পড়া · 🐍 Python
Quick Answer
একটি ব্লকচেইন বোঝার সর্বোত্তম উপায় হল একটি তৈরি করা। পাইথনের প্রায় 50টি লাইনে আপনি হ্যাশিং, ব্লকের একটি চেইন, কাজের প্রমাণ-প্রমাণ মাইনিং এবং টেম্পার সনাক্তকরণ সহ একটি কাজের খেলনা ব্লকচেইন তৈরি করতে পারেন — একই মূল ধারণা যা বিটকয়েনকে সুরক্ষিত করে। কোন পূর্বে ব্লকচেইন জ্ঞান প্রয়োজন.
⚠️ এটি একটি শেখার মডেল, উৎপাদন কোড নয়। এটি বিটকয়েনের পিছনে ডেটা স্ট্রাকচার শেখায় - এটি নিরাপদ অর্থ নয় এবং কখনই প্রকৃত মূল্য রাখা উচিত নয়।
ধাপ 1 - একটি ব্লক এবং এর আঙ্গুলের ছাপ
একটি ব্লক কিছু ডেটা (লেনদেন), পূর্ববর্তী ব্লকের একটি লিঙ্ক এবং একটি "নন্স" (একটি সংখ্যা যা আমরা পরিবর্তন করতে পারি) ধারণ করে। এর পরিচয় হল এর সমস্ত বিষয়বস্তুর একটি SHA-256 হ্যাশ — একটি অক্ষর পরিবর্তন করুন এবং হ্যাশ সম্পূর্ণরূপে পরিবর্তিত হয়। সেই হ্যাশ হল ব্লকের টেম্পার-স্পষ্ট ফিঙ্গারপ্রিন্ট।
import hashlib, json, time
class Block:
def __init__(self, index, transactions, previous_hash, nonce=0):
self.index = index
self.timestamp = time.time()
self.transactions = transactions
self.previous_hash = previous_hash
self.nonce = nonce
def hash(self):
# A block's fingerprint = SHA-256 of all its contents.
payload = json.dumps({
"index": self.index,
"timestamp": self.timestamp,
"transactions": self.transactions,
"previous_hash": self.previous_hash,
"nonce": self.nonce,
}, sort_keys=True).encode()
return hashlib.sha256(payload).hexdigest()ধাপ 2 — মাইনিং (কাজের প্রমাণ)
মাইনিং মানে এমন একটি হ্যাশ খোঁজা যা একটি নিয়ম পূরণ করে — এখানে, শূন্যের একটি সেট সংখ্যা দিয়ে শুরু। কোন সূত্র নেই; হ্যাশ ফিট না হওয়া পর্যন্ত আপনি ন্যান্সকে জবরদস্ত করবেন। একটি সমাধান পরীক্ষা করা তাত্ক্ষণিক, কিন্তু একটি খুঁজে পেতে কাজ লাগে। সেই অসমতা হল কাজের প্রমাণের হৃদয়।
DIFFICULTY = 4 # require this many leading zeros
def mine(block):
# Proof of Work: keep changing the nonce until the hash
# starts with DIFFICULTY zeros. There is no shortcut —
# you just have to guess, which is what costs energy.
target = "0" * DIFFICULTY
while not block.hash().startswith(target):
block.nonce += 1
return block.hash()ধাপ 3 - ব্লকগুলি চেইন করা
প্রতিটি নতুন ব্লক আগেরটির হ্যাশ সংরক্ষণ করে, তাদের একটি চেইনে ঢালাই করে যা একটি হার্ড-কোডেড "জেনেসিস" ব্লক দিয়ে শুরু হয়। কারণ প্রতিটি ব্লক তার আগে একের সাথে প্রতিশ্রুতিবদ্ধ, ক্রম স্থির করা হয় এবং ইতিহাস একসাথে সংযুক্ত করা হয়।
class Blockchain:
def __init__(self):
# The genesis block — the very first, hard-coded block.
genesis = Block(0, [{"note": "genesis"}], "0")
mine(genesis)
self.chain = [genesis]
def add_block(self, transactions):
prev = self.chain[-1]
block = Block(len(self.chain), transactions, prev.hash())
mine(block) # do the work
self.chain.append(block)
return blockধাপ 4 - চেইন যাচাই করা
একটি চেইনকে বিশ্বাস করতে, আপনি এটি পুনরায় পরীক্ষা করুন: প্রতিটি ব্লককে অবশ্যই পূর্ববর্তী ব্লকের আসল হ্যাশ নির্দেশ করতে হবে এবং প্রতিটি ব্লককে অবশ্যই কাজের-প্রমাণ নিয়মটি পূরণ করতে হবে। যদি হয় চেক কোথাও ব্যর্থ হয়, চেইনটি অবৈধ।
def is_valid(chain):
for i in range(1, len(chain)):
current, previous = chain[i], chain[i - 1]
# 1) Each block must point to the real hash of the one before it.
if current.previous_hash != previous.hash():
return False
# 2) Each block must satisfy the proof-of-work rule.
if not current.hash().startswith("0" * DIFFICULTY):
return False
return Trueধাপ 5 - এটি চালান এবং প্রতারণা করার চেষ্টা করুন
এখন কয়েকটি ব্লক যোগ করুন এবং তারপরে একটি পুরানো লেনদেনের সাথে টেম্পার করুন। যে মুহুর্তে আপনি অতীতের ডেটা পরিবর্তন করেন, সেই ব্লকের হ্যাশটি পরবর্তী ব্লকের প্রত্যাশার সাথে আর মেলে না — এবং যাচাইকরণ অবিলম্বে মিথ্যা ফেরত দেয়। এটি হল, ক্ষুদ্রাকৃতিতে, কেন আপনি শান্তভাবে বিটকয়েনের ইতিহাস পুনরায় লিখতে পারবেন না।
bc = Blockchain()
bc.add_block([{"from": "Alice", "to": "Bob", "amount": 5}])
bc.add_block([{"from": "Bob", "to": "Carol", "amount": 2}])
print("Chain valid?", is_valid(bc.chain)) # True
# Now try to cheat: tamper with an old transaction.
bc.chain[1].transactions[0]["amount"] = 5000
print("Chain valid?", is_valid(bc.chain)) # False — tampering is caught!🔑 মূল গ্রহণ
একটি ব্লকচেইন হল শুধুমাত্র ডেটা স্ট্রাকচার এবং নিয়ম: প্রতিটি ব্লক হ্যাশ করুন, এটিকে শেষের সাথে লিঙ্ক করুন এবং কাজের প্রমাণের মাধ্যমে ব্লক যোগ করা ব্যয়বহুল করুন। টেম্পারিং হ্যাশের শৃঙ্খলকে ভেঙে দেয় — যেটি ঠিক কীভাবে বিটকয়েন কেন্দ্রীয় কর্তৃপক্ষ ছাড়াই টেম্পার-স্পষ্ট থাকে।
কি আসল বিটকয়েন যোগ করে
আমাদের খেলনা চেইন কঙ্কাল শেখায়. রিয়েল বিটকয়েন নোডের একটি গ্লোবাল পিয়ার-টু-পিয়ার নেটওয়ার্ক যোগ করে, ডিজিটাল স্বাক্ষর যা প্রমাণ করে যে কারা কয়েন খরচ করতে পারে, স্বয়ংক্রিয় অসুবিধা সামঞ্জস্য, UTXO মডেল, ব্লক পুরস্কার এবং অর্ধেক, এবং ঐকমত্য নিয়ম যা অপরিচিতদের বিশ্বাস ছাড়াই সম্মত হতে দেয়। নীচের আমাদের ব্যাখ্যাকারী প্রতিটি অন্বেষণ.
প্রায়শই জিজ্ঞাসিত প্রশ্ন
এটি কি বিটকয়েনের মতো সত্যিকারের ব্লকচেইন?▼
এটি একটি সরলীকৃত শিক্ষণ মডেল যা বিটকয়েনের মূল ধারণাগুলি ভাগ করে — হ্যাশিং, চেইনিং এবং কাজের প্রমাণ — কিন্তু নেটওয়ার্কিং, ডিজিটাল স্বাক্ষর, এবং অর্থনৈতিক প্রণোদনাগুলিকে বাদ দেয় যা বিটকয়েনকে বিশ্বব্যাপী সুরক্ষিত করে তোলে। এটা শেখার জন্য, টাকা চালানোর জন্য নয়।
আমার কি প্রোগ্রামার হতে হবে?▼
পাইথনের সাথে প্রাথমিক পরিচিতি সাহায্য করে, তবে ব্যাখ্যাগুলি লেখা হয়েছে যাতে যে কেউ যুক্তি অনুসরণ করতে পারে। আপনি কোডটি না চালিয়েও ধারণাগুলি বুঝতে এটি পড়তে পারেন।
কেন খনির শুধু শূন্য যোগ করে?▼
অনেকগুলি শূন্য দিয়ে শুরু করার জন্য হ্যাশের প্রয়োজন একটি পরীক্ষা করা সহজ কিন্তু খুঁজে পাওয়া কঠিন। একটি বৈধ হ্যাশ খুঁজে পাওয়ার একমাত্র উপায় হল অনুমান করা (অনুমান পরিবর্তন করা), ঠিক এই কারণেই প্রকৃত খনির শক্তি খরচ হয়।
বাস্তব বিটকয়েনের তুলনায় কি অনুপস্থিত?▼
নোডের একটি বাস্তব নেটওয়ার্ক, মালিকানা প্রমাণকারী ডিজিটাল স্বাক্ষর, একটি পিয়ার-টু-পিয়ার প্রোটোকল, অসুবিধা সমন্বয়, UTXO মডেল এবং ব্লক পুরস্কার। এই টিউটোরিয়াল তথ্য গঠন শেখায়; সম্পূর্ণ সিস্টেমের জন্য আমাদের ব্যাখ্যাকারীদের দেখুন।