Командная курсовая работа по дисциплине "Блокчейн-технологии" (09.04.03 Прикладная информатика, НИТУ МИСИС): Антонов И. А., Исаченко М. К., Парчиев Р. Б. Проект представляет собой прототип десктопного приложения для взаимодействия с блокчейн-банком.
- Python
- Solidity
- Ganache
- Библиотеки PySimpleGUI, Brownie
- scripts/app.py: основной файл приложения, содержащий код пользовательского интерфейса;
- scripts/deploy.py: код для деплоя смарт-контрактов;
- scripts/interact.py: код для проверки работы с контрактами;
- brownie-config.yaml: файл конфигурации для brownie;
- contracts/Bank.sol: код основного контракта, предоставляющего функционал выдачи и возврата кредитов;
- contracts/CreditToken.sol: код контракта, описывающего кастомный токен CreditToken (CRT), необходимый для покупки NFT ювелирных украшений и драгоценностей.
Начальное окно входа в систему выглядит следующим образом:
Здесь пользователю нужно ввести свой логин и пароль. В приложении зарегистрированы 3 аккаунта из тестовой сети, зайдем под логином и паролем acc2 и попадем на главное окно:
Здесь отображается текущий баланс пользователя и его задолженность в токенах CRT, а также присутствует возможность взять кредит или вернуть сумму в банк, если кредит взят. Нажав на кнопку "Взять кредит", попадаем в окно выдачи кредита:
Введем сумму кредита, количество месяцев, на которое хотим его взять, и нажмем "Рассчитать сумму":
Приложение рассчитало, какую сумму на таких условиях будет необходимо вернуть в банк. Нажмем на кнопку "Взять кредит", выводится окно об успехе, и баланс на аккаунте становится на 50 CRT больше:
Затем будем вносить платежи по кредиту. Из главного окна перейдем в соответствующий раздел по кнопке "Вернуть кредит":
Введем первую сумму платежа в размере 20 CRT и нажмем "Внести платеж":
Баланс уменьшился, как и сумма к погашению. Внесем оставшиеся токены:
Задолженность клиента на главном окне снова составляет 0 CRT:
Важно заметить, что если баланс клиента меньше, чем первый взнос по кредиту (сумма кредита, разделенная на количество месяцев), то в кредите ему будет откзано. Проверим это на аккаунте с нулевым балансом:
Процентная ставка по кредиту рассчитывается следующим образом:
- если сумма меньше 10 CRT, ставка составляет 10%;
- если сумма от 10 CRT до 20 CRT, ставка составляет 8%;
- если сумма больше или равна 20 CRT, ставка составляет 5%.
- Установить Ganache: https://archive.trufflesuite.com/ganache/
- Установить библиотеку brownie:
pip install eth-brownie
- Установить библиотеку PySimpleGUI:
pip install pysimplegui
- Создать пустую папку и выполнить в ней
brownie init
- Копировать файлы контрактов из этого репозитория в папку
contracts/
- Копировать файлы скриптов из этого репозитория в папку
scripts/
- Копировать файл
brownie-config.yaml
в созданную папку проекта - Создать в папке проекта файл .env, в котором определить переменные
PRIVATE_KEY
,PRIVATE_KEY1
,PRIVATE_KEY2
, присвоив им приватные ключи 0-го, 1-го и 2-го адресов тестовой сети Ganache соответственно в форматеPRIVATE_KEY = "0x..."
- Выполнить
brownie compile
в папке проекта - Выполнить
brownie networks add Ethereum ganache-local host=http://127.0.0.1:7545 chainid=5777
, гдеhost
иchainid
берутся из проекта Ganache. - Выполнить
brownie run scripts/deploy.py --network ganache-local
- Из вывода предыдущей команды скопировать адреса задеплоенных контрактов и заменить ими имеющиеся адреса в файлах
app.py
иinteract.py
- Выполнить
brownie run scripts/interact.py
- Установка завершена, для работы с программой запустить файл
app.py