CodeCrafters
زبان های معروف بلاکچین خب تو این پست قراره با زبان های برنامه نویسی که در بلاکچین کاربرد زیادی داشتند و دارند اشنا بشیم و همچنین در پست بعدی مریم سراغ پیاده سازی بلاکچین و الگورتیم های مربوطه با پایتون🥸🥸 برای توسعهی بلاک چین زبانهای مختلفی وجود دارند، اما…
سلام🥸همونطور که از پست قبلی متوجه شدیم با زبان های بسیاری میتونیم بلاکچین رو طراحی کنیم و خب تو این پست قراره بلاکچینی رو برای زنجیره تامینی با استفاده از پایتون پیاده کنیم
زنجیر تامین یکی دیگه از کاربرد های بلاکچین در کنار ارز دیجیتیال و قرار داد های هوشمند و... هست.
بلاکچینی که قراره طراحی کنیم برای پیگیری محصولات غذایی از مزرعه تا فروشگاه برای اطمینان از کیفیت و اصالت کالا هستش
اولین چیزی که نیاز داریم یه کلاس تراکنش هست که یه سری مشخصات رو مثل فرستنده , گیرنده , محصول و مقدار اون محصول رو دریافت کنیم
حالا که تراکنشها رو تعریف کردیم، باید یک کلاس برای بلاکها ایجاد کنیم. هر بلاک در زنجیره شامل چند ویژگی اصلی که به ترتیب عبارتند از:
شماره بلاک در زنجیره (index)
هش بلاک قبلی در زنجیره (previous_hash)
زمان ایجاد بلاک (timestamp)
لیست تراکنشهای درون بلاک (transactions)
عددی که برای ماینینگ استفاده میشه (nonce)
هش بلاک (hash):که با استفاده از تراکنشها و ویژگیهای دیگر بلاک ساخته میشه
حالا که بلاکها و تراکنشها رو تعریف کردیم، باید یک کلاس برای بلاکچین خودمون ایجاد کنیم که شامل ویژگیهایی مثل لیستی از بلاکها، تراکنشهای معلق و سایر عملیات مانند اضافه کردن تراکنش، ماین کردن بلاک و بررسی اعتبار زنجیره باشه. درواقع نیاز به یه کلاس داریم که بیاد و بلاکچینمون رو مدیریت کنه
ادامه توضیحات کلس BlockChain و نحوه ساخت یه بلاک با تراکنش هاش تو پست بعدی🥸
#blockchain
زنجیر تامین یکی دیگه از کاربرد های بلاکچین در کنار ارز دیجیتیال و قرار داد های هوشمند و... هست.
بلاکچینی که قراره طراحی کنیم برای پیگیری محصولات غذایی از مزرعه تا فروشگاه برای اطمینان از کیفیت و اصالت کالا هستش
اولین چیزی که نیاز داریم یه کلاس تراکنش هست که یه سری مشخصات رو مثل فرستنده , گیرنده , محصول و مقدار اون محصول رو دریافت کنیم
import hashlib
import time
class Transaction:
def __init__(self, sender, recipient, product, quantity):
self.sender = sender
self.recipient = recipient
self.product = product
self.quantity = quantity
def __str__(self):
return f"Transaction(sender: {self.sender}, recipient: {self.recipient}, product: {self.product}, quantity: {self.quantity})"
حالا که تراکنشها رو تعریف کردیم، باید یک کلاس برای بلاکها ایجاد کنیم. هر بلاک در زنجیره شامل چند ویژگی اصلی که به ترتیب عبارتند از:
شماره بلاک در زنجیره (index)
هش بلاک قبلی در زنجیره (previous_hash)
زمان ایجاد بلاک (timestamp)
لیست تراکنشهای درون بلاک (transactions)
عددی که برای ماینینگ استفاده میشه (nonce)
هش بلاک (hash):که با استفاده از تراکنشها و ویژگیهای دیگر بلاک ساخته میشه
class Block:
def __init__(self, index, previous_hash, timestamp, transactions, nonce=0):
self.index = index
self.previous_hash = previous_hash
self.timestamp = timestamp
self.transactions = transactions
self.nonce = nonce
self.hash = self.calculate_hash()
def calculate_hash(self):
transactions_string = ""
for tx in self.transactions:
transactions_string += str(tx)
block_string = f"{self.index}{self.previous_hash}{self.timestamp}{transactions_string}{self.nonce}"
return hashlib.sha256(block_string.encode()).hexdigest()
def __str__(self):
return f"Block<index: {self.index}, hash: {self.hash}>"
حالا که بلاکها و تراکنشها رو تعریف کردیم، باید یک کلاس برای بلاکچین خودمون ایجاد کنیم که شامل ویژگیهایی مثل لیستی از بلاکها، تراکنشهای معلق و سایر عملیات مانند اضافه کردن تراکنش، ماین کردن بلاک و بررسی اعتبار زنجیره باشه. درواقع نیاز به یه کلاس داریم که بیاد و بلاکچینمون رو مدیریت کنه
class Blockchain:
difficulty = 4 # میزان سختی برای ماینینگ بلاک
def __init__(self):
self.chain = [self.create_genesis_block()]
self.pending_transactions = []
def create_genesis_block(self):
# genesis block ایجاد بلاک اول با متود
return Block(0, "0", time.time(), [])
def get_latest_block(self):
#A: دریافت آخرین بلاک در زنجیره
return self.chain[-1]
def add_transaction(self, transaction):
#B: اضافه کردن تراکنش به لیست تراکنشهای معلق یا در تایید انتظار
self.pending_transactions.append(transaction)
def mine_pending_transactions(self):
#C: ماین کردن تراکنشهای معلق و اضافه کردن بلاک به زنجیره
block = Block(len(self.chain), self.get_latest_block().hash, time.time(), self.pending_transactions)
self.mine_block(block)
self.chain.append(block)
self.pending_transactions = []
def mine_block(self, block):
#D: Proof of Work ماین کردن یک بلاک با استفاده از الگوریتم
while block.hash[:self.difficulty] != "0" * self.difficulty:
block.nonce += 1
block.hash = block.calculate_hash()
print(f"Block mined: {block.hash}")
def is_chain_valid(self):
#E: بررسی اعتبار کل زنجیره با مقایسه هشها و هشهای محاسبه شده
for i in range(1, len(self.chain)):
current_block = self.chain[i]
previous_block = self.chain[i - 1]
if current_block.hash != current_block.calculate_hash():
return False
if current_block.previous_hash != previous_block.hash:
return False
return True
ادامه توضیحات کلس BlockChain و نحوه ساخت یه بلاک با تراکنش هاش تو پست بعدی🥸
#blockchain
🔥6
CodeCrafters
سلام🥸همونطور که از پست قبلی متوجه شدیم با زبان های بسیاری میتونیم بلاکچین رو طراحی کنیم و خب تو این پست قراره بلاکچینی رو برای زنجیره تامینی با استفاده از پایتون پیاده کنیم زنجیر تامین یکی دیگه از کاربرد های بلاکچین در کنار ارز دیجیتیال و قرار داد های هوشمند…
ساخت بلاک های اولیه و تراکنش
خب در نهایت به این میرسیم که چطوری میتونیم از کلس هامون استفاده کنیم
این تیکه کد، یک نمونه ساده از استفاده از کلاس بلاکچین و متود های اون را نشان میده. در اینجا، یک ابجکت از کلاس Blockchain ایجاد میشود و سه تراکنش برای ردیابی محصولات غذایی اضافه میشه. بعد از اون تراکنشهای معلق ماین شده و یک بلاک جدید به زنجیره اضافه میشود و اعتبار زنجیره چک میشه و در نهایت بلاکها و تراکنشها نمایش داده میشود.
پ ن: توضیح عمقی تر درمورد کلاس Blockchain
#blockchain
@Code_Crafters
خب در نهایت به این میرسیم که چطوری میتونیم از کلس هامون استفاده کنیم
blockchain = Blockchain()
#A: ایجاد تراکنش
blockchain.add_transaction(Transaction('Farm', 'Warehouse', 'Tomatoes', 70))
blockchain.add_transaction(Transaction('Warehouse', 'Distributor', 'Tomatoes', 90))
blockchain.add_transaction(Transaction('Distributor', 'Retailer', 'Tomatoes', 80))
#B: ماین کردن تراکنشهای معلق
blockchain.mine_pending_transactions()
#C: بررسی اعتبار زنجیره
print(f"Blockchain valid: {blockchain.is_chain_valid()}")
#D: نمایش بلاکها و تراکنشها
for block in blockchain.chain:
print(block)
for tx in block.transactions:
print(f"txt = {tx}")
این تیکه کد، یک نمونه ساده از استفاده از کلاس بلاکچین و متود های اون را نشان میده. در اینجا، یک ابجکت از کلاس Blockchain ایجاد میشود و سه تراکنش برای ردیابی محصولات غذایی اضافه میشه. بعد از اون تراکنشهای معلق ماین شده و یک بلاک جدید به زنجیره اضافه میشود و اعتبار زنجیره چک میشه و در نهایت بلاکها و تراکنشها نمایش داده میشود.
پ ن: توضیح عمقی تر درمورد کلاس Blockchain
مورد اول difficulty: این متغییر نشان میدهه که برای ماین کردن یک بلاک جدید چه تعداد صفر در ابتدای هش باید وجود داشته باشد.فرض کنید که مقدار difficulty در بلاکچین برابر 3 باشد.
ب فرض کنیم ما بلاکی را میخواهیم ماین کنیم و هش بلاک باید اینگونه باشد:
hash: 000abc123
دوم ()init: در این متد، زنجیره با ایجاد بلاک اول (genesis block) شروع میشود و لیست تراکنشهای در انتظار برای ماین کردن خالی میشود.
سوم:create_genesis_bloc()k: این متد بلاک اول یا genesis block را با شماره بلاک 0، هش بلاک قبلی صفر، زمان فعلی و بدون تراکنش ایجاد میکند. معمولا بلاک اول زنجیره رو خوومون درست میکنیم و بدون تراکنش و هش صفر
چهار: get_latest_block(): این متد آخرین بلاک در زنجیره را برمیگرداند.
پنج:add_transaction(transaction): این متد یک تراکنش را به لیست تراکنشهای در انتظار برای ماین کردن اضافه میکند.
شش:mine_pending_transactions: این متد تمام تراکنشهای در انتظار را ماین میکند و بلاک حاوی آنها را به زنجیره اضافه میکند.
هفت:mine_block(block): این متد یک بلاک را با استفاده از الگوریتم Proof of Work ماین میکند، تا هش بلاک با تعداد صفرهای مشخص (بر اساس difficulty) شکل بگیرد.
هشت:()is_chain_valid: این متد بررسی میکند که زنجیره فعلی اعتبار دارد یا نه، با مقایسه هشهای بلاکها و هشهای محاسبه شده.
#blo
#blockchain
@Code_Crafters
🔥6
day1.pdf
1.3 MB
🔥7🤣1
day2.pdf
618.3 KB
❤6🔥1