Як майніти блокчейн у Java PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Як майніти блокчейн на Java

Як майніти блокчейн у Java PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Почнемо зі створення нового сервісу для користувачів і майнерів. Це буде копія двох інших служб для блокчейну та вузлів, але ми додамо новий контролер, службу та моделі. Оскільки майнери є користувачами (тобто їм потрібна адреса для включення в транзакції), ми почнемо з користувачів. Давайте створимо кінцеву точку для додавання, перерахування та отримання інформації про користувача. Я збираюся використовувати базову автентифікацію для 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 оскільки підпис має бути обчислений після застосування даних. Ми не перевіряємо вихідні адреси, оскільки немає єдиного джерела правди для адрес. Існують певні формати адрес, які використовуються деякими криптовалютами, щоб запобігти передачі монет на неіснуючі адреси, але немає жодного способу гарантувати, що ви не надсилатимете свої монети у прославлене бітове відро.

Джерело: https://betterprogramming.pub/how-to-mine-the-blockchain-in-java-9647de36a8fc?source=rss——-8—————–cryptocurrency

Часова мітка:

Більше від Medium