Почнемо зі створення нового сервісу для користувачів і майнерів. Це буде копія двох інших служб для блокчейну та вузлів, але ми додамо новий контролер, службу та моделі. Оскільки майнери є користувачами (тобто їм потрібна адреса для включення в транзакції), ми почнемо з користувачів. Давайте створимо кінцеву точку для додавання, перерахування та отримання інформації про користувача. Я збираюся використовувати базову автентифікацію для list
та get
кінцеві точки. The add
кінцева точка буде відкритою, оскільки будь-хто зможе створити користувача.
Хоча я хочу продемонструвати певний рівень автентифікації, я не хочу загрузнути в деталях справжньої системи автентифікації. Отже, щоб симулювати перевірку, ім’я користувача та пароль мають бути однаковими, а спеціальний користувач для переліку всіх користувачів має мати ім’я admin. Я також створю користувача адміністратора негайно, якщо він не існує під час запуску.
Ось що я маю для контролера:
Послуга досить проста:
Використовувати application.yaml
щоб встановити параметри для MongoDB:
Тепер ви можете використовувати docker-compose.yaml
файл, щоб розкрутити MongoDB і протестувати нові кінцеві точки. Ви повинні мати можливість додавати та перераховувати користувачів до системи. Тільки не забудьте використовувати базову автентифікацію. Важливо пам’ятати, що базова автентифікація використовує ім’я користувача, тоді як кінцева точка використовує ідентифікатор для більш ефективного пошуку.
Що ще є у користувача, крім ідентифікатора та імені? У системі криптовалюти ми думаємо, що користувач має гаманець. Гаманець — це адреса та пара приватний/відкритий ключ. У нашій системі ми об’єднаємо їх разом, щоб користувач міг мати лише один «гаманець» (тобто адреса та пара приватний/відкритий ключ). При цьому користувач може створювати транзакції. Ми не можемо використовувати ідентифікатор як адресу, оскільки кожен користувач приєднаний до вузла, а ідентифікатор не є унікальним для вузлів. Тому ми будемо використовувати UUID для адреси. Тоді залишається лише створити пару закритий/відкритий ключ. Ось оновлення UserService.addUser
:
Тому що ми не хочемо ніколи викривати privateKey
, ми додамо цей рядок до будь-якого ланцюжка в UserController
який повертає користувача або список користувачів:
.doOnNext(u -> u.setPrivateKey(null));
Тепер ми готові створити транзакцію від імені користувача.
У нас є елементарна кінцева точка створення транзакцій у службі блокчейну, тому ми збираємося її видалити. Ми збережемо кінцеву точку доданої транзакції, і ми зможемо викликати її з нашої нової кінцевої точки в службі користувача. Нова кінцева точка в контролері виглядає так:
Новий метод в UserService
клас виглядає так:
Ви бачите, що ми беремо приватний ключ, який закодовано в базі даних, і використовуємо його для підписання вхідного контракту. Так само, як ми створили withHash
метод, ми створили withSignature
оскільки підпис має бути обчислений після застосування даних. Ми не перевіряємо вихідні адреси, оскільки немає єдиного джерела правди для адрес. Існують певні формати адрес, які використовуються деякими криптовалютами, щоб запобігти передачі монет на неіснуючі адреси, але немає жодного способу гарантувати, що ви не надсилатимете свої монети у прославлене бітове відро.
- адмін
- ВСІ
- Authentication
- blockchain
- call
- контроль
- Монети
- контракт
- контролер
- створення
- cryptocurrencies
- криптовалюта
- дані
- Database
- Кінцева точка
- дає
- Як
- How To
- HTTPS
- ia
- інформація
- IP
- IT
- Java
- ключ
- рівень
- Лінія
- список
- список
- Робить
- середа
- шахтарі
- MongoDB
- вузли
- відкрити
- Інше
- Пароль
- приватний
- Private Key
- Послуги
- комплект
- простий
- So
- Спін
- старт
- введення в експлуатацію
- система
- тест
- угода
- Transactions
- користувачі
- Wallet