Небольшой и полезный видеокурс по основам блокчейна на Python

Собрались, выдохнули и приступили к знакомству с базовыми принципами блокчейна на 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

На этом все. Надеемся, что материал был понятен, и ты сможешь самостоятельно повторить (а еще лучше допилить) изложенное. Успехов!

А какой материал помог тебе разобраться с блокчейном?

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ