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

1
7106

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

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

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

РУБРИКИ В СТАТЬЕ

Комментарии 1

ВАКАНСИИ

Unity3D Developer
по итогам собеседования
Middle\Senior .Net разработчик
от 120000 RUB до 165000 RUB
Unity Developer
по итогам собеседования
Programmer Unity
Краснодар, по итогам собеседования

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

BUG