آموزش ایجاد بلاکچین با زبان برنامه نویسی پایتون
فهرست مطالب
ایجاد بلاکچین با پایتون کار چندان سختی نیست. هر کسی که با برنامهنویسی Python آشنا باشد، با کمی مطالعه و تحقیق میتواند یک شبکه بلاکچینی ایجاد کند. در این مقاله مراحل ایجاد بلاکچین با زبان برنامه نویسی پایتون را بررسی خواهیم کرد و قبل از آن نیز با ماهیت شبکههای زنجیرهای آشنا میشویم.
بلاکچین چیست و چگونه مدیریت میشود؟
بلاکچین یا زنجیره بلوکی مجموعهای از رکوردهای ثابت و غیرمتمرکز است که دادههایی با حجمهای مختلف دارد. این مجموعه توسط شبکه بزرگی از سختافزارها (کامپیوترها) که در سراسر جهان پراکنده است کنترل میشود و هیچ سازمان یا نهادی حق نظارت یا مالکیت بر آن را ندارد. هر بلاک از این شبکه با استفاده از فناوری هش (Hash) ایمن شده است تا از دستکاری دادهها توسط کاربران داخل یا خارج بلاک چین جلوگیری شود. علاوه بر این تمام بلاکها به هم متصل هستند و برای اصلاح هر بلاک باید سایر بلاکها هم تغییر کنند. در ادامه به بررسی مراحل ساخت بلاکچین به وسیله زبان پایتون میپردازیم.
چگونگی ایجاد بلاکچین با پایتون
برای ایجاد بلاکچین با پایتون دادهها در قالب JSON ذخیره میشود که پیادهسازی و خواندن آن بسیار آسان است. دادهها در یک بلاک نگهداری میشوند و هر بلاک حاوی دادههای مختلفی است. هر دقیقه یک یا چند بلاک به شبکه اضافه خواهد شد و برای متمایزسازی آنها از فناوری فینگرپرینت (fingerprinting) استفاده میشود.
فناوری fingerprinting با استفاده از هش پیادهسازی میشود. برای خاص بودن بلاکها، الگوریتم هش SHA256 مورد استفاده قرار میگیرد. هر بلاک حاوی هش مخصوص به خود و همچنین هش تابع قبلی است. بدین ترتیب امکان دستکاری اطلاعات میسر نخواهد بود.
این فناوری برای متصل کردن بلاکها به یکدیگر مورد استفاده قرار گرفته است. هر بلاک با گرفتن هش از بلاک قبلی و دادن هش به بلاک بعدی به آنها متصل خواهد شد.
استخراج بلاک جدید با استفاده از الگوریتم اثبات کار (PoW) صورت میگیرد. برای سختتر شدن استخراج بلاکها، مسائل به صورتی پیچیده و دشوار طراحی میشود تا سرعت ماین و حل کردن بلاکهای جدید تنظیم شود.
با انجام موفقیتآمیز فرآیند ماینینیگ، بلاک جدید به زنجیره شبکه اضافه خواهد شد. پس از استخراج چند بلاک، اعتبار زنجیره اصلی بررسی میگردد تا از هر نوع دستکاری یا تغییر دادهها در بلاکچین جلوگیری شود.
در نهایت برنامه تحت وب با استفاده از فلسک (Flask) ساخته میشود و سفارشیسازی شبکه با توجه به نیاز کاربران اکوسیستم مورد نظر انجام خواهد شد. بدین ترتیب ایجاد بلاک چین با پایتون به طور موفقیتآمیز انجام خواهد شد.
کدهای موردنیاز برای ساخت بلاکچین به وسیله پایتون
کدهای موردنیاز برای طراحی یک سیستم کوچک و ایجاد بلاکچین با پایتون به شرح زیر است:
ابتدا چند کتابخانه را جهت استفاده در کدها ایمپورت میکنیم:
import datetime
برای محاسبات زمانی و به دست آوردن تاریخ و ساعت استفاده میشود.
import hashlib
برای محاسبات هش استفاده میشود و رمزنگاریها را در بلاکها قرار میدهد.
import JSON
برای کارکردن با نوع داده json استفاده میشود.
from flask import Flask, jsonify
فلسک برای برنامهنویسی برنامههای تحت وب کاربرد دارد. همچنین از jsonify برای نمایش بلاکچین ایجادشده استفاده میشود. در ادامه کلاس blockchain را داریم که شامل توابع زیر است.
def __init__(self):
این تابع اولین بلاک را ایجاد میکند.
self.chain = []
self.create_block(proof=1, previous_hash='0')
def create_block(self, proof, previous_hash):
این تابع بلاکهای بعدی را با بلاکچین ادغام و آنها را در بلاکچین قرار میدهد.
block = {'index': len(self.chain) + 1,
'timestamp': str(datetime.datetime.now()),
'proof': proof,
'previous_hash': previous_hash}
self.chain.append(block)
return block
def print_previous_block(self):
برای نمایش بلاک قبلی استفاده میشود.
return self.chain[-1]
def proof_of_work(self, previous_proof):
کاربرد این تابع گواه اثبات کار و همچنین استخراج بلاکها است.
new_proof = 1
check_proof = False
while check_proof is False:
hash_operation = hashlib.sha256(
str(new_proof**2 - previous_proof**2).encode()).hexdigest()
if hash_operation[:5] == '00000':
check_proof = True
else:
new_proof += 1
return new_proof
def hash(self, block):
وظیفه رمزنگاری را بر عهده دارد.
encoded_block = json.dumps(block, sort_keys=True).encode()
return hashlib.sha256(encoded_block).hexdigest()
def chain_valid(self, chain):
این تابع وظیفه دارد تا زنجیرۀ ایجادشده را بازبینی کند و صحت آن را بسنجد.
previous_block = chain[0]
block_index = 1
while block_index < len(chain):
block = chain[block_index]
if block['previous_hash'] != self.hash(previous_block):
return False
previous_proof = previous_block['proof']
proof = block['proof']
hash_operation = hashlib.sha256(
str(proof**2 - previous_proof**2).encode()).hexdigest()
if hash_operation[:5] != '00000':
return False
previous_block = block
block_index += 1
return True
app = Flask(__name__)
سپس به وسیله flask یک وب اپلیکیشن ایجاد میکنیم.
blockchain = Blockchain()
کلاس بلاکچین را فراخوانی میکنیم.
@app.route('/mine_block', methods=['GET'])
یک آدرس با نام mine_block ایجاد میکنیم که این آدرس پس از اتمام کدها از طریق مروگر قابل فراخوانی است. سپس تابعی برای استخراج بلاکها ایجاد میکنیم که با آدرس /mine_block فراخوانی و عمل میکند.
def mine_block():
previous_block = blockchain.print_previous_block()
previous_proof = previous_block['proof']
proof = blockchain.proof_of_work(previous_proof)
previous_hash = blockchain.hash(previous_block)
block = blockchain.create_block(proof, previous_hash)
response = {'message': 'A block is MINED',
'index': block['index'],
'timestamp': block['timestamp'],
'proof': block['proof'],
'previous_hash': block['previous_hash']}
return jsonify(response),
app.route('/get_chain', methods=['GET'])@
یک آدرس با نام get_chain ایجاد میکنیم. همراه با تابع display_chain زمانی که این آدرس فراخوانی شود، تابع متصل به آدرس بلاکچین ایجادشده را در مرورگر نمایش میدهد.
def display_chain():
response = {'chain': blockchain.chain,
'length': len(blockchain.chain)}
return jsonify(response), 200
@app.route('/valid', methods=['GET'])
یک آدرس دیگر با نام valid ایجاد میکنیم که تابع valid را فراخوانی میکند. این تابع وظیفه بررسی صحت بلاکچین با استفاده از تابع chain_valid را دارد. در صورت درستی پیام تأیید و در صورت نادرست بودن پیام عدم تأیید به کاربر نمایش داده میشود.
def valid():
valid = blockchain.chain_valid(blockchain.chain)
if valid:
response = {'message': 'The Blockchain is valid.'}
else:
response = {'message': 'The Blockchain is not valid.'}
return jsonify(response),
app.run(host='127.0.0.1', port=5000)
در آخر با دستور فوق وب اپلیکیشن را اجرا میکنیم. در مرورگر خود آدرس زیر را وارد میکنیم:
Localhost:5000
سپس آدرسهایی را که در کدها ایجاد کردیم، به ترتیب و مرحله به مرحله در انتهای آدرس وارد میکنیم. نتیجۀ سیستم بلاکچین ما به این صورت خواهد بود:
{
خروجی آدرس mine_block
"index":2,
"message":"A block is MINED",
"previous_hash":"2d83a826f87415edb31b7e12b35949b9dbf702aee7e383cbab119456847b957c",
"proof":533,
"timestamp":"2020-06-01 22:47:59.309000"
}
{
خروجی آدرس get_chain
"chain":[{"index":1,
"previous_hash":"0",
"proof":1,
"timestamp":"2020-06-01 22:47:05.915000"},{"index":2,
"previous_hash":"2d83a826f87415edb31b7e12b35949b9dbf702aee7e383cbab119456847b957c",
"proof":533,
"timestamp":"2020-06-01 22:47:59.309000"}],
"length":2
}
{"message":"The Blockchain is valid."}
خروجی آدرس valid
خلاصه مطلب
ایجاد بلاکچین با پایتون شامل چند مرحله مختصر است. پایتون یکی از بهترین زبانها برای ایجاد شبکههای بلاکچینی است. قطعاً با صرف زمان بیشتر میتوان شبکههای پیچیدهتر و کارآمدتری را نیز توسعه داد. اگر شما هم به ایجاد بلاکچین در پایتون علاقهمند هستید، بهتر است همین الان دست به کار شوید تا شبکه اختصاصی خود را هر چه زودتر توسعه دهید.
دیدگاه خود را ثبت کنید