Собрались, выдохнули и приступили к знакомству с базовыми принципами блокчейна на Python. Небольшой проект с понятным видеокурсом.
Вступление
Курс начинается со вступительной речи автора и описания веб-морды на Flask для простейшего блокчейна на Python. В процессе показательного этапа демонстрируется работа программы, а также создается дополнительный тестовый блок. Во время просмотра ролика становится понятно, как работает данный проект, функционирует проверка целостности блока по хэшу в блокчейне и т. д. Приводим код веб-морды:
from flask import flask
from flask import render_template, redirect, url_for
from flask import request
from block import *
app * Flask(__name__)
@app.route(‘/’, methods=[‘POST’, ‘GET’])
def index():
if request.method == ‘POST’:
lender = request.form[‘lender’]
amount = request.form[‘amount’]
borrower = request.form[‘borrower’]
write_block(name=lender, amount=amount, to_whom=borrower)
return render_template(‘index.html’)
@app.route(‘/checking’, methods=[‘GET’])
def check():
results = check_integrity()
return render_template(‘index.html’, results=results)
if __name__= = ‘__main__’:
app.run(debug=True)
Что такое Blockchain и как он работает
В этом ролике автор затронет основные моменты работы блокчейна. Как следует из названия, блокчейн – это цепочка блоков, представляющих собой некоторую информацию. Например, в блоке блокчейна любой криптовалюты сохраняется информация о транзакции (кто, кому, сколько, дата и т. д.). Эта технология отличается от любого другого хранилища методом связи блоков между собой. В процессе связывания активно принимает участие хеширование – получение текстовой строки с набором символов конкретного размера в результате работы некоторого алгоритма. Ты поймешь, как это все работает после того, как автор продемонстрирует функционирование хеширующего алгоритма в терминале Python.
Запись блоков и проверка целостности
Данный урок посвящен практической реализации элементарного блокчейна на Python. Сначала создается директория, потом в ней вручную создается файл (первый блок) и наполняется данными (удобнее в JSON-формате). Если в блоке отсутствует поле с предыдущим хешем, то такой блок называется генезис-блок. Большая часть урока будет посвящена написанию кода, разруливающего взаимодействие между блоками.
import json
import os
import hashlib
blockchain_dir = os.cudir + ‘/blockchain/’
def get_hash(filename):
file = open(blockchain_dir + filename, ‘rb’).read()
return hashlib.md5(file).hexdigest()
def get_files():
files = os.listdir(blockchain_dir)
return sorted([int(i) for i in files])
def check_integrity():
# 1.Считать хеш предыдущего блока
# 2.Вычислить хэш предыдущего блока
# 3.Сравнить полученные данные
files = get_files() # [ 1, 2, 3, 4, 5 ]
results = [ ]
for file in files[1:]: # [ 2, 3, 4, 5 ]
f = open(blockchain_dir + str(file)) # ‘2’
h = json.load(f)[‘hash’]
prev_file = str(file - 1)
actual_hash = get_hash(prev_file)
if h == actual_hash:
res = ‘Ok’
else:
res = ‘Corrupted’
results.append ({‘block’: prev_file, ‘result’ : res})
return results
def write_block(name, amount, to_whom, prev_hash=‘’):
files = get_files()
prev_file = files[-1]
filename = str(prev_file + 1)
prev_hash = get_hash(str(prev_file))
data = {‘name’ : name,
‘amount’ : amount,
‘to_whom’ : to_whom,
‘prev_hash’ : prev_hash}
with open(blockchain_dir + ‘test’, ‘w’) as file:
json.dump(data, file, indent=4, ensure_acsii=False)
def main():
print (check_integrity())
if __name__= = ‘__main__’:
main()
Создание веб-интерфейса на Flask
В последнем уроке разбор построения веб-морды для проекта на Flask. Сначала нужно установить в виртуальное окружение Flask (pip install flask), потом немного навести порядок в файловой системе, а остаток ролика отведен для кодинга и настройки web-сервера. Создадим общий файл base.html:
Свежие комментарии