Небольшой и полезный видеокурс по основам блокчейна на Python
Собрались, выдохнули и приступили к знакомству с базовыми принципами блокчейна на 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)
https://www.youtube.com/watch?v=jfjajWV8l1s
Что такое Blockchain и как он работает
В этом ролике автор затронет основные моменты работы блокчейна. Как следует из названия, блокчейн – это цепочка блоков, представляющих собой некоторую информацию. Например, в блоке блокчейна любой криптовалюты сохраняется информация о транзакции (кто, кому, сколько, дата и т. д.). Эта технология отличается от любого другого хранилища методом связи блоков между собой. В процессе связывания активно принимает участие хеширование – получение текстовой строки с набором символов конкретного размера в результате работы некоторого алгоритма. Ты поймешь, как это все работает после того, как автор продемонстрирует функционирование хеширующего алгоритма в терминале Python.
https://www.youtube.com/watch?v=LAQkYz-Jsvs
Запись блоков и проверка целостности
Данный урок посвящен практической реализации элементарного блокчейна на 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()
https://www.youtube.com/watch?v=JxPWs8Ojdx8
Создание веб-интерфейса на Flask
В последнем уроке разбор построения веб-морды для проекта на Flask. Сначала нужно установить в виртуальное окружение Flask (pip install flask), потом немного навести порядок в файловой системе, а остаток ролика отведен для кодинга и настройки web-сервера. Создадим общий файл base.html:
<!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8”> <title>Blockchain test</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1 /css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/ 1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> </head> <body> <div class=’container’> <div class=’row’> <div class=’col-6 mx-auto mt-5’> {% block content %} {% endblock %} </div> </div> </div> <div class=’container’> <div class=’row’> <div class=’col-6 mx-auto mt-5 text-center’> <form action=”{{ url_for(‘check’) }} method=”GET””> <button type=”submit” class=”btn btn-success”>Check integrity</ button > </form> </div> <div class=’row’> <div class=’col-6 mx-auto mt-5’> {% block checking %} {% endblock %} </div> </div> </div> </body> </html>
А теперь файл индекса index.html:
{% extends ‘base.html’ %} {% block content %} <form action=”{{url_for(‘index’)}}” method=”POST”> <div class="form-group"> <label for="exampleInputLender">Кредитор</label> <input type="text" class="form-control" id="exampleInputLender" placeholder="Имя" name=”lender” value=”{{ request.form.get(‘lender’, ‘’) }}”> </div> <div class="form-group"> <label for="exampleInputAmount">Сумма</label> <input type="text" class="form-control" id="exampleInputAmount" placeholder="Сумма" name=”amount” value=”{{ request.form.get(‘amount’, ‘’) }}”> </div> <div class="form-group"> <label for="exampleInputBorrower">Заемщик</label> <input type="text" class="form-control" id="exampleInputBorrower" placeholder="Имя"" name=”borrower” value=”{{ request.form.get(‘borrower’, ‘’) }}”> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> {% endblock %} {% block checking %} {% for res in results %} <div class=”result”> block {{ res[‘block’] }} : {{ res[‘result’] }} </div> {% endfor %} {% endblock %}
https://www.youtube.com/watch?v=zm42eRKsw4c
На этом все. Надеемся, что материал был понятен, и ты сможешь самостоятельно повторить (а еще лучше допилить) изложенное. Успехов!