Разработка информационной системы управления платежами ЖКХ на основе технологии блокчейн

Понятие жилищно-коммунального хозяйства в рамках цифровой экономики России. Использование технологии блокчейн для контроля платежей в сфере ЖКХ. Особенности моделирование бизнес-процессов управления платежами ЖКХ с использованием программного обеспечения.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 10.12.2019
Размер файла 2,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Рисунок 2.7. Схема базы данных

????? 3. Разработка прототипа информационной системы

Разработка опции управления платежами с использованием блокчейн проводилась на языке программирования Python. Это высокоуровневый неспециализированный язык, простой в использовании за счет того, что он применяется совместно с соответствующим интерпретатором. Python гибкий, а в его основе заложены стандартные библиотеки с набором многих полезных опций, поэтому язык широко востребован в программировании. Выбор такого варианта для подготовки прототипа объясняется его гибкостью, а также большим числом библиотек, обеспечивающих взаимодействие с другими технологиями.

Модуль подготавливался с использованием технологии Multichain [19] - платформы для создания блокчейн с открытым стартовым кодом. Кроме того, в работе применялась библиотека для шифрования hashlib и “оболочки” для вызова JSON-RPC -команд из кода программы Savoir.

База данных создана посредством использования библиотеки SQLite [20] - движка с открытым стартовым кодом. Эта внедренная в процесс библиотека, формирующая автономный, безсерверный и не требующий сложной предварительной настройки, транзакционный SQL-движок.

Для проверки клиент-серверного взаимодействия был подготовлен тестовый клиентский и серверный блок системы, а также тестовый вариант базы данных.

Основной этап работы предусматривал создание представления блокчейна в виде класса Blockchain. Такой вариант предназначен для хранения операций и некоторых второстепенных методов добавления блоков в цепочку.

Каждый блок представляет собой объект, включающий в себя индекс, временную метку (Unix timestamp), перечень транзакций, доказательность и хэш предшествующего блока, что считается ключевым фактором, поскольку он содержит основную идею блокчейна о его неизменяемости. Пример внешнего вида отдельного блока представлен ниже:

block = {

'index': 1,

'timestamp': 1506057125.900785,

'transactions': [

{

'sender': "8527147fe1f5426f9dd545de4b27ee00",

'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f",

'amount': 5,

}

],

'proof': 324984774000,

'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"

}

Код работы всего алгоритма представлен в Приложении В.

????? 4. Экономическое обоснование

Под оценкой экономической эффективности ИС можно понимать измерение того, на сколько выгодно внедрение технологии. Экономическая полезность понимается как разница, денежный эквивалент доход и расходов, до и после внедрения. Бизнес по управлению многоквартирными домами строится на управлении денежными потоками. Годовой оборот в сфере ЖКХ превышает 4,2 трлн рублей, что составляет порядка 7% ВВП России. Каждый год через российские УК проходит порядка 2,5 трлн рублей. 500 млрд из них -- выручка управляющих организаций за оказываемые ими услуги, а 2 трлн приходится на транзитные платежи поставщикам ресурсов. Еще 1,5 трлн рублей -- платежи через расчетные центры. По данным министерства строительства и ЖКХ РФ, по состоянию на конец 2017 года совокупный объем задолженности в сфере ЖКХ в стране составил 1,34 трлн рублей. В Пермском крае 28 тыс. многоквартирных домов. В реестре товариществ собственников жилья в Пермском крае всего 1460 ТСЖ. 360 управляющих компаний обслуживают 70% многоквартирного жилого фонда. В Пермском крае на начало 2019 года общая сумма долга управляющих компаний за поставленные коммунальные услуги составляет 5,295 млрд рублей. Долг ТСЖ и ЖСК -- 1,126 млрд рублей [21]. Внедрение в систему управления платежами ЖКХ технологии смарт-контракта позволит понизить уровень недоверия между участниками расчетов, а также повысить прозрачность процессов поступления и распределения денежных средств, что позволит снизить объемы задолженностей до 80%. Таким образом, доходы УК и ТСЖ вырастут до 1 трлн. руб. Для Пермского края этот показатель составит до 5,1 млрд руб. в год, а для Перми - до 2,6 млрд руб., поскольку чуть больше половины от всего многоквартирного жилого фонда края находится именно в Перми.

????? 5. Требования и рекомендации по внедрению информационной системы в сферу ЖКХ

В сегодняшних условиях воплощению в жизнь данного проекта мешает ряд правовых препятствий. Несмотря на популярность криптовалют и технологий их создания, в РФ эти методики и инструменты находятся за пределами правового поля. Нормативная база для использования подобных механизмов на территории РФ находится на стадии формирования. Хотя разработка проектов о применении технологии блокчейн в экономике и в правительственном секторе уже осуществляется и довольно активно. Прежде всего, блокчейн рассматривается в качестве метода уменьшения уровня бюрократизации в нашей стране.

Также, внедрение технологии в различные экономические и государственные процессы, требует внесения изменений в действующее законодательство. В частности, в Жилищный кодекс и постановления Правительства РФ, в части регламентирования порядка осуществления платежей населением.

В марте 2018 года была утверждена поправка в Жилищный кодекс РФ о возможности заключения прямых соглашений между владельцами жилья и поставщиками коммунальных ресурсов, которая начала действовать с 1 января 2019 года. Изменение подразумевает, что взаимодействие граждан с ресурсоснабжающими структурами теперь осуществляется напрямую без участия управляющих компаний, как посредников.

Для воплощения в жизнь проекта необходимо привлечение как государственных, так и сторонних инвестиций.

Заключение

В процессе выполнения выпускной квалификационной работы была детально проанализирована такая предметная сфера, как управление транзакциями в сфере ЖКХ на основе блокчейн технологии. В рамках исследования изучались ключевые понятия, относящиеся к данной предметной области, выявлялись существующие проблемы в действующих бизнес-процессах. Проведено сравнение внедренных решений по управлению платежами, в результате чего сформированы технические особенности информационной системы, гарантирующие ее конкурентоспособность. Также, в процессе исследования определена применимость технологии блокчейн к созданию новой информационной системы для управления финансовыми операциями в ЖКХ.

Кроме того, произведен этап проектирования сервиса, определена спецификация функциональных возможностей программы, спроектирована модель классов, схема взаимодействия компонент системы и схема базы данных.

В ходе подготовительного этапа разработки прототипа системы был сформирован механизм блокчейна, который планируется внедрить в сервис по управлению транзакциями в сфере ЖКХ.

Также, были разработаны условия для возможности промышленного использования программы в области ЖКХ.

В результате реализованы такие задачи:

1. Проведен анализ предметной области.

2. Сделан обзор и выполнено исследование действующих решений.

3. Создана архитектура нового информационного сервиса.

4. Подготовлен прототип программы для управления операциями в сфере ЖКХ.

5. Определены условия и рекомендации по использованию информационной системы на практике.

Последующее развитие сервиса включает:

· Формирование функциональной составляющей модулей системы;

· Подготовку клиентской части сервиса и абонентского интерфейса;

· Замену внедренных зарубежных хэширующих библиотек на российские.

Последующая работа также подразумевает углубленное изучение действующей нормативно-правовой базы, регулирующую сферу ЖКХ, для возможности внедрения программных решений на территории Пермского края. Спланированы условия перевода остальных бизнес-процессов в ЖКХ на программы, в основе работы которых заложена технология блокчейн, с целью формирования общей системы контроля и управления в сфере ЖКХ. Чтобы перечисленные процедуры по внедрению новых технологий прошли максимально быстро, нужно закрепить на законодательном уровне возможность развития новых информационных систем, а также использование блокчейн как ключевой технологии для обработки и хранения информации.

Основным этапом последующего развития сервиса является включение в нее “Интернета вещей”. Элемент предназначен для автоматизации процедуры сбора показаний счетчиков.

Кроме того, возможна разработка отдельной криптовалюты на основе созданной системы и проведение ICO. Электронные деньги можно использовать как бонус или основу в программах лояльности для абонентов.

Библиографический список

1. Кириллова Д. И. Проблемы в сфере жилищно-коммунального хозяйства и пути их решения // Молодой ученый. 2014. №.14. С. 162-163.

2. Абдуллина А. Р., Владимиров И. А. Жилищно-коммунальное хозяйство в России // Проблемы современной экономики. 2011. С. 183-185.

3. Сатаров Г. А. Диагностика российской коррупции: социологический анализ // М.: Фонд Индем. 2012. С. 35

4. Чистова М. В., Концевич Г. Е., Демина Н. В. Возможности внедрения информационных технологий для реформирования жилищно-коммунального хозяйства РФ // Гуманизация образования. 2014. №.6.

5. Грачёва И. И. Проблемы и перспективы функционирования рынка жилищно-коммунальных услуг в современных экономических условиях // Концепт. 2013. №.12 (28).

6. Пряников М. М., Чугунов А. В. Блокчейн как коммуникационная основа формирования цифровой экономики: преимущества и проблемы // International Journal of Open Information Technologies. 2017. Т.5. №.6.

7. Дорожная карта - экономика и финансы. Комплекс мер “Внедрение информационных технологии? в финансово- экономическом комплексе взаимоотношении? [Электронный ресурс] URL: http://filearchive.cnews.ru/img/cnews/2015/12/22/ekonomika_dk.pdf (дата обращения: 23.05.2019).

8. Аксенов П, Сарычева М. Криптотехнологии переводят на рубли. Банк России собирает консорциум // Коммерсантъ No117 [Электронный ресурс] URL: http://www.kommersant.ru/doc/3029539 (дата обращения: 23.05.2019).

9. Институт Развития Интернета создаст рабочую группу для изучения перспектив развития блокчеи?на в России // Институт Развития Интернета. [Электронный ресурс] URL: http://ири.рф/news/13832 (дата обращения: 23.05.2019).

10. Совещание с вице-премьерами // Правительство России [Электронный ресурс] URL: http://government.ru/news/26650 (дата обращения: 23.05.2019).

11. Центрально-азиатская презентация “Доклада о мировом развитии 2016: Цифровые дивиденды” [Электронный ресурс] URL: http://www.worldbank.org/ru/events/2016/02/01/central-asia-launch-wdr-2016 (дата обращения: 23.05.2019).

12. The website of choice of technologies and suppliers TAdviser. [Электронный ресурс]. URL: http://www.tadviser.ru/index.php/%3ADigital-Russia-report (дата обращения: 23.05.2019).

13. Распоряжение Правительства РФ от 28.07.2017 № 1632 - Об утверждении программы “Цифровая экономика Российской Федерации” (с изменениями и дополнениями) [Электронный ресурс] URL: http://government.ru/docs/28653 (дата обращения: 23.05.2019).

14. Цифровая Россия. Новая реальность. A report from McKinsey & company. [Электронный ресурс] URL: https://www.mckinsey.com/russia/our-insights/ru-ru (дата обращения: 23.05.2019).

15. Соловьева О. От кибератак отмахиваются шапками. Независимая газета. [Электронный ресурс] URL: http://www.ng.ru/economics/2017-11-10/4_7112_cyberatack.html (дата обращения: 23.05.2019).

16. Национальный рейтинг проблем ЖКХ по России за 2017 год. Национальный центр общественного контроля в сфере ЖКХ “НП ЖКХ Контроль”. [Электронный ресурс] URL: http://gkhkontrol.ru/2018/03/43860 (дата обращения: 23.05.2019)

17. Tapscott D, Tapscott A. Blockchain Revolution: How the Technology Behind Bitcoin is Changing Money, Business, and the World [M]. New York, Penguin. 2016. 368 p.

18. Симонс В. Блокчейн для бизнеса простыми словами в примерах [Электронный ресурс]. URL: http://walter-simons.livejournal.com/434231.html (дата обращения: 23.05.2019).

19. Multichain. Open source blockchain platform [Электронный ресурс] URL: https://www.multichain.com (дата обращения: 23.05.2019).

20. SQLite. SQL database engine [Электронный ресурс] URL: https://www.sqlite.org/index.html (дата обращения: 23.05.2019).

21. Зырянова Т. Чем опасны банкротства управляющих компаний? [Электронный ресурс] URL: https://properm.ru/news/society/166804/ (дата обращения: 23.05.2019).

Приложение А. Документирование прецедентов

Таблица А.1. Прецедент Работа с данными о потребителях

Краткое описание

Прецедент дает возможность добавлять, удалять и изменять данные о потребителях в базе данных

Актеры

Пользователь, Информационная система

Предусловия

Выполнено подключение к базе данных, пользователь авторизован в системе

Основной поток

· Ввод информации о потребителе, сохранение;

· Выбор записи потребителя, удаление, сохранение;

· Выбор записи потребителя, изменение, сохранение.

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна

Постусловия

Добавление, удаление, изменение записи о потребителе в базе данных

Таблица А.2. Прецедент Работа с данными о поставщиках

Краткое описание

Прецедент дает возможность добавлять, удалять и изменять данные о поставщиках в базе данных

Актеры

Пользователь, Информационная система

Предусловия

Выполнено подключение к базе данных, пользователь авторизован в системе

Основной поток

· Ввод информации о поставщике, сохранение;

· Выбор записи поставщика, удаление, сохранение;

· Выбор записи поставщика, изменение, сохранение.

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна

Постусловия

Добавление, удаление, изменение записи о поставщике в базе данных

Таблица А.3. Прецедент Работа с данными о тарифах

Краткое описание

Прецедент дает возможность добавлять, удалять и изменять данные о тарифах в базе данных

Актеры

Пользователь, Информационная система

Предусловия

Выполнено подключение к базе данных, пользователь авторизован в системе

Основной поток

· Ввод информации о тарифе, сохранение;

· Выбор записи тарифа, удаление, сохранение;

· Выбор записи тарифа, изменение, сохранение.

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна

Постусловия

Добавление, удаление, изменение записи о тарифе в базе данных

Таблица А.4. Прецедент Работа с данными об услугах

Краткое описание

Прецедент дает возможность добавлять, удалять и изменять данные об услугах в базе данных

Актеры

Пользователь, Информационная система

Предусловия

Выполнено подключение к базе данных, пользователь авторизован в системе

Основной поток

· Ввод информации об услуге, сохранение;

· Выбор записи услуги, удаление;

· Выбор записи услуги, изменение, сохранение изменения.

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна

Постусловия

Добавление, удаление, изменение записи об услуге в базе данных

Таблица А.5. Прецедент Работа с данными о потреблении

Краткое описание

Прецедент дает возможность добавлять, удалять и изменять данные о потреблении в базе данных

Актеры

Пользователь, Информационная система

Предусловия

Выполнено подключение к базе данных, пользователь авторизован в системе

Основной поток

· Ввод информации о потреблении, сохранение;

· Выбор записи потребления, удаление;

· Выбор записи потребления, изменение, сохранение изменения.

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна

Постусловия

Добавление, удаление, изменение записи о потреблении в базе данных

Таблица А.6. Прецедент Работа с данными о льготах и субсидиях

Краткое описание

Прецедент дает возможность добавлять, удалять и изменять данные о льготах и субсидиях в базе данных

Актеры

Пользователь, Информационная система

Предусловия

Выполнено подключение к базе данных, пользователь авторизован в системе

Основной поток

· Ввод информации о льготе, сохранение;

· Выбор записи льготы, удаление;

· Выбор записи льготы, изменение, сохранение изменения.

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна

Постусловия

Добавление, удаление, изменение записи о льготе в базе данных

Таблица А.7. Прецедент Совершение оплаты

Краткое описание

Прецедент дает возможность пользователю совершать оплату

Актеры

Пользователь, Информационная система

Предусловия

Выполнено подключение к базе данных, пользователь получил счет на оплату, пользователь вошел в систему

Основной поток

· Выполнение запроса на совершение платежа;

· Сохранение записи в блокчейн

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна;

Постусловия

На экране отображается информация о совершении платежа

Таблица А.8. Прецедент Начисление

Краткое описание

Прецедент дает возможность рассчитывать начисления потребителю в соответствии с потребляемыми услугами

Актеры

Пользователь, Информационная система

Предусловия

Выполнено подключение к базе данных, У пользователя есть потребления

Основной поток

· Выполнение запроса на получение информации о потреблениях, услуге и тарифе данных;

· Выполнение запроса на получение информации о льготах и субсидиях;

· Расчет начисления;

· Вывод суммы начисления.

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна;

· При отсутствии потреблений расчет не производится

Постусловия

Добавление записи в базу данных, На экране отображается сумма начисления по выбранному потребителю

Таблица А.9. Прецедент Авторизация

Краткое описание

Авторизация пользователя в Информационной системе для доступа к ее функционалу и данным

Актеры

Пользователь, Информационная система

Предусловия

Выполнено подключение к базе данных, ввод пользователем логина и пароля

Основной поток

· Выполнение запроса в базу данных;

· Вход пользователя систему;

· Получение данных пользователя.

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна

· При неверном вводе пользователя логина и пароля пользователю выдается сообщение о том, что введены неверные данные

Постусловия

Работа Пользователя в Информационной системе

Таблица А.10. Прецедент Перерасчет

Краткое описание

Прецедент дает возможность изменить начисление потребителя при возникновении новой информации

Актеры

Пользователь, Информационная система

Предусловия

Выполнено подключение к базе данных, пользователь авторизован в системе, у потребителя есть начисление, были обнаружены дополнительные данные

Основной поток

· Выполнение запроса на получение информации о потреблениях, услуге и тарифе данных;

· Выполнение запроса на получение информации о льготах и субсидиях;

· Повторный расчет начисления;

· Вывод суммы начисления.

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна;

· При отсутствии потреблений расчет не производится

Постусловия

Добавление записи в базу данных, на экране отображается актуальная сумма начисления

Таблица А.11. Прецедент Выставление счета

Краткое описание

Прецедент дает возможность рассчитать оптимальное распределение инвестиций

Актеры

Информационная система

Предусловия

Выполнено подключение к базе данных, пользователь авторизован в системе, в базе данных есть информация об инвестиционных проектах и компании

Основной поток

· Выбор пользователем инвестиционных проектов для оптимизации;

· Работа генетического алгоритма для поиска оптимального распределения инвестиций;

· Формирование результата.

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна;

· При отсутствии необходимых данных пользователю выводится сообщение о недостатке имеющейся информации

Постусловия

Сформированы результаты вычислений, результаты занесены в базу данных

Таблица А.12. Прецедент Получение платежа

Краткое описание

Прецедент дает возможность получить платеж УК или РСО от потребителя

Актеры

Пользователь, Информационная система

Предусловия

Потребителем выполнен платеж

Основной поток

· Просмотр информации о платеже;

· Перевод денег получателю платежа

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна.

Постусловия

Вывод информации о платеже на экран, перевод денег получателю

Таблица А.13. Прецедент Формирование отчетов

Краткое описание

Прецедент дает возможность сгенерировать отчет по результатам расчетов оптимального распределения инвестиций по заданным пользователем параметрам

Актеры

Пользователь, Информационная система

Предусловия

Выполнен расчет оптимального распределения инвестиций, результаты занесены в базу данных

Основной поток

· Выбор пользователем параметров отчета;

· Чтение данных из базы данных;

· Генерация отчета;

· Вывод отчета на экран.

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна

Постусловия

Вывод отчета на экран

Таблица А.14. Прецедент Распределение платежей

Краткое описание

Прецедент дает возможность перенаправлять платежи другим РСО или УК

Актеры

Пользователь, Информационная система

Предусловия

Выполнено подключение к базе данных, пользователь авторизован, платеж адресован неверно или через посредника

Основной поток

· Выбор платежа;

· Переназначение получателя платежа;

Альтернативные потоки

· При отсутствии подключения к базе данных пользователю выдается сообщение о том, что подключение не выполнено, операция невозможна

Постусловия

Изменение информации о платеже, просмотр актуальной информации о платеже

Приложение Б. Построение диаграмм активности

Рисунок Б.1. Диаграмма активности для прецедентов “Работа с данными о потребителях”, “Работа с данными о поставщиках”, “Работа с данными о тарифах”, “Работа с данными об услугах”, “Работа с данными о льготах и субсидиях”

Рисунок Б.2. Диаграмма активности для прецедента “Совершение оплаты”

Рисунок Б.3. Диаграмма активности для прецедента “Расчет начисления”

Рисунок Б.4. Диаграмма активности для прецедента “Перерасчет начисления”

Рисунок Б.5. Диаграмма активности для прецедента “Выставление счета”

Рисунок Б.6. Диаграмма активности для прецедента “Получение платежа”

Рисунок Б.7. Диаграмма активности для прецедента “Распределение платежей”

Рисунок Б.8. Диаграмма активности для прецедента “Формирование отчета”

Рисунок Б.9. Диаграмма активности для прецедента “Авторизация”

Приложение В. Программный код реализации блокчейна

Представление блокчейна

class Blockchain(object):

def __init__(self):

self.chain = []

self.current_transactions = []

def new_block(self):

# Создает новый Блок и добавляет его к цепочке

pass

def new_transaction(self):

# Добавляет новую транзакцию к списку транзакций

pass

@staticmethod

def hash(block):

# Хэшируем блоки

pass

@property

def last_block(self):

# Возвращает последний блок в цепочке

pass

Добавление транзакции в блок

class Blockchain(object):

...

def new_transaction(self, sender, recipient, amount):

"""

Создает новую транзакцию для того чтобы перейти к следующему искомому Блоку

:параметр sender: <str> Адрес отправителя

:параметр recipient: <str> Адрес получателя

:параметр amount: <int> Количество

:return: <int> Индекс Блока, в котором будет хранится данная транзакция

"""

self.current_transactions.append({

'sender': sender,

'recipient': recipient,

'amount': amount,

})

return self.last_block['index'] + 1

Создание новых блоков, чтобы реализовать свой блокчейн

import hashlib

import json

from time import time

class Blockchain(object):

def __init__(self):

"""

Инициализируем свой блокчейн

"""

self.current_transactions = []

self.chain = []

# Create the genesis block

self.new_block(previous_hash=1, proof=100)

def new_block(self, proof, previous_hash=None):

"""

Создаем новый блок в нашем Блокчейне

:параметр proof: <int> proof полученный после использования алгоритма “Доказательство выполнения работы”

:параметр previous_hash: (Опциональный) <str> Хэш предыдущего Блока

:return: <dict> New Block

"""

block = {

'index': len(self.chain) + 1,

'timestamp': time(),

'transactions': self.current_transactions,

'proof': proof,

'previous_hash': previous_hash or self.hash(self.chain[-1]),

}

# Сбрасываем текущий список транзакций

self.current_transactions = []

self.chain.append(block)

return block

def new_transaction(self, sender, recipient, amount):

"""

Создает новую транзакцию для перехода к следующему замайненному Блоку

:param sender: <str> Address of the Sender

:param recipient: <str> Address of the Recipient

:param amount: <int> Amount

:return: <int> Индекс блока который будет хранить в себе эту транзакцию

"""

self.current_transactions.append({

'sender': sender,

'recipient': recipient,

'amount': amount,

})

return self.last_block['index'] + 1

@property

def last_block(self):

return self.chain[-1]

@staticmethod

def hash(block):

"""

Создает a SHA-256 хэш блока

:параметр block: <dict> Блок

:return: <str>

"""

# Мы должны быть уверены что наш Словарь упорядочен, или мы можем непоследовательные хэши

block_string = json.dumps(block, sort_keys=True).encode()

return hashlib.sha256(block_string).hexdigest()

Алгоритм “Доказательство выполнения работы”

from hashlib import sha256

x = 5

y = 0 # Пока мы не знаем каким должен быть y

while sha256(f'{x*y}'.encode()).hexdigest()[-1] != "0":

y += 1

print(f'The solution is y = {y}')

Реализация простого алгоритма PoW

import hashlib

import json

from time import time

from uuid import uuid4

class Blockchain(object):

...

def proof_of_work(self, last_proof):

"""

Простой алгоритм Proof of Work:

- Ищем число p' такое, чтобы hash(pp') содержал в себе 4 лидирующих нуля, где p это предыдущий p'

- p это предыдущий proof, а p' это новый proof

:параметр last_proof: <int>

:return: <int>

"""

proof = 0

while self.valid_proof(last_proof, proof) is False:

proof += 1

return proof

@staticmethod

def valid_proof(last_proof, proof):

"""

Проверяем Proof: Содержит ли hash(last_proof, proof) 4 лидирующих нуля?

:параметр last_proof: <int> предыдущий Proof

:параметр proof: <int> Тукущий Proof

:return: <bool> True если все верно, иначе False.

"""

guess = f'{last_proof}{proof}'.encode()

guess_hash = hashlib.sha256(guess).hexdigest()

return guess_hash[:4] == "0000"

Настройка Flask для реализации блокчейна

import hashlib

import json

from textwrap import dedent

from time import time

from uuid import uuid4

from flask import Flask

class Blockchain(object):

...

# Создаем экземпляр нашего узла

app = Flask(__name__)

# Генерируем уникальный глобальный адрес для этого узла

node_identifier = str(uuid4()).replace('-', '')

# Создаем экземпляр Blockchain

blockchain = Blockchain()

@app.route('/mine', methods=['GET'])

def mine():

return "We'll mine a new Block"

@app.route('/transactions/new', methods=['POST'])

def new_transaction():

return "We'll add a new transaction"

@app.route('/chain', methods=['GET'])

def full_chain():

response = {

'chain': blockchain.chain,

'length': len(blockchain.chain),

}

return jsonify(response), 200

if __name__ == '__main__':

app.run(host='0.0.0.0', port=5000)

Endpoint для транзакций

import hashlib

import json

from textwrap import dedent

from time import time

from uuid import uuid4

from flask import Flask, jsonify, request

...

@app.route('/transactions/new', methods=['POST'])

def new_transaction():

values = request.get_json()

# Проверяем, что обязательные поля переданы в POST-запрос

required = ['sender', 'recipient', 'amount']

if not all(k in values for k in required):

return 'Missing values', 400

# Создаем новую транзакцию

index = blockchain.new_transaction(values['sender'], values['recipient'], values['amount'])

response = {'message': f'Transaction will be added to Block {index}'}

return jsonify(response), 201

Endpoint для майнинга

import hashlib

import json

from time import time

from uuid import uuid4

from flask import Flask, jsonify, request

...

@app.route('/mine', methods=['GET'])

def mine():

# Мы запускаем алгоритм PoW для того чтобы найти следующий proof...

last_block = blockchain.last_block

last_proof = last_block['proof']

proof = blockchain.proof_of_work(last_proof)

# Мы должны получить награду за найденный proof.

# Если sender = "0", то это означает что данный узел заработал биткойн.

blockchain.new_transaction(

sender="0",

recipient=node_identifier,

amount=1,

)

# Формируем новый блок, путем добавления его в цепочку

block = blockchain.new_block(proof)

response = {

'message': "New Block Forged",

'index': block['index'],

'transactions': block['transactions'],

'proof': block['proof'],

'previous_hash': block['previous_hash'],

}

return jsonify(response), 200

Регистрация новых узлов

...

from urllib.parse import urlparse

...

class Blockchain(object):

def __init__(self):

...

self.nodes = set()

...

def register_node(self, address):

"""

Добавляем новый узел в список узлов

:параметр address: <str> Адрес узла, например: 'http://192.168.0.5:5000'

:return: None

"""

parsed_url = urlparse(address)

self.nodes.add(parsed_url.netloc)

Реализация алгоритма консенсуса

...

import requests

class Blockchain(object)

...

def valid_chain(self, chain):

"""

Определяем, что данный блокчейн прошел проверку

:параметр chain: <list> Блокчейн

:return: <bool> True если прошел проверку, иначе False

"""

last_block = chain[0]

current_index = 1

while current_index < len(chain):

block = chain[current_index]

print(f'{last_block}')

print(f'{block}')

print("\n-----------\n")

# Проверяем, что хэш этого блока корректен

if block['previous_hash'] != self.hash(last_block):

return False

# Проверяем, что алгоритм PoW корректен

if not self.valid_proof(last_block['proof'], block['proof']):

return False

last_block = block

current_index += 1

return True

def resolve_conflicts(self):

"""

Это наш алгоритм Консенсуса, он разрешает конфликт путём

замены нашей цепочки на самую длинную в нашей сети.

:return: <bool> True если наша цепочка была заменена, False если это не так

"""

neighbours = self.nodes

new_chain = None

# Мы ищем цепочки длиннее наших

max_length = len(self.chain)

# Берем все цепочки со всех узлов нашей сети и проверяем их

for node in neighbours:

response = requests.get(f'http://{node}/chain')

if response.status_code == 200:

length = response.json()['length']

chain = response.json()['chain']

# Проверяем, что цепочка имеет

# максимальную длину и она корректна

if length > max_length and self.valid_chain(chain):

max_length = length

new_chain = chain

# Заменяем нашу цепочку, если нашли другую,

# которая имеет большую длину и является корректной

if new_chain:

self.chain = new_chain

return True

return False

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.