blockj: un proyecto blockchain simple basado en Java
El editor de Downcodes le ofrece hoy un proyecto simple de blockchain (cadena de consorcio) basado en Java: blockj. Incluye herramientas de cifrado, billeteras, transmisión P2P, sincronización de bloques, consenso de red y otras implementaciones básicas de blockchain. Es un proyecto muy adecuado para que los principiantes aprendan la tecnología blockchain.
Estructura del proyecto
blockj se implementa utilizando el marco de red SpringBoot + Tio. Su estructura principal es la siguiente:
1. Programa principal: implementado utilizando el marco SpringBoot.
2. Transmisión P2P: implementada utilizando el marco de red t-io.
Entorno operativo
El proyecto blockj requiere JDK 1.8 o superior para ejecutarse correctamente.
módulo de proyecto
El proyecto blockj contiene principalmente los siguientes tres módulos:
1. blockj-base: conjunto de herramientas públicas básicas, que incluyen herramientas de cifrado, bloques, mensajes y otros modelos de datos, así como almacenamiento de datos y otras funciones.
2. blockj-miner: programa principal de Blockchain, que incluye mineros, sincronización de bloques, red P2P, API RPC y otras funciones.
3. blockj-client: herramienta de línea de comando del cliente, utilizada principalmente para llamar a las API relacionadas con Miner para realizar la interacción del usuario con blockchain.
inicio rápido
Los siguientes pasos le enseñarán cómo crear una red blockchain y realizar operaciones básicas:
1. Crear un nodo génesis (crear una red)
Primero, necesitas clonar el proyecto, compilarlo y empaquetarlo:
`golpear
clon de git https://gitee.com/blackfox/blockj.git
bloque de cd
paquete limpio mvn
`
Luego, crea el nodo génesis:
`golpear
./miner genesis --repo=/data/genesis --enable-mining=true
`
2. Inicie Génesis Minero
`golpear
./ejecución del minero --repo=/data/genesis
`
3. Inicie un nuevo nodo (únase a la red)
Para que nuevos nodos se unan a la red existente, debe inicializar Miner usando el bloque génesis y luego iniciar Miner:
`golpear
./miner init --repo=/data/miner1 --genesis=genesis.car --api.port=8002 --p2p.port=3456
./minero ejecutar --repo=/data/miner1
`
Uso del cliente
Las siguientes son algunas operaciones de línea de comando del cliente de uso común:
1. Ver la lista de billeteras
`golpear
./lista de carteras de clientes
`
Producción:
`
Dirección Saldo Nonce
0x0d181310331612e107b5e0dfdf971cfb9de780adfds 800 10
0x2505bf54f3a63848e44a105e8de599ad08ae8c58 2400 0
0xb6258bc70240ee5daa213f671c08db51e50a4cbe 50800 30
cd3da3ec4195070e13a6d88b75101f6ceb427a8e 0 0
`
2. Crea una nueva billetera
Crea una billetera normal:
`golpear
./billetera cliente nueva
`
Cree una billetera con una frase mnemotécnica (puede establecer una contraseña y generar un archivo de almacén de claves):
`golpear
./billetera del cliente nueva --mnemonic=true 123456
`
3. Verificar el saldo de la billetera
`golpear
./saldo de billetera del cliente 0x2505bf54f3a63848e44a105e8de599ad08ae8c58
`
Producción:
`
Saldo de dirección
0x2505bf54f3a63848e44a105e8de599ad08ae8c58 2400
`
4. Transferencia
`golpear
./envío de cadena de cliente --from=0x0d181310331612e107b5e0dfdf971cfb9de780adfds 0x2505bf54f3a63848e44a105e8de599ad08ae8c58 123
`
Producción:
`
Enviar mensaje, CID: 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
5. Verifique la altura actual de la cadena.
`golpear
./cabeza de cadena del cliente
`
6. Ver mensajes en la cadena especificada.
`golpear
./cadena cliente getMessage 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
Producción:
`
Mensaje{versión=1, desde='0x0d181310331612e107b5e0dfdf971cfb9de780adfds', hasta='0x2505bf54f3a63848e44a105e8de599ad08ae8c58', valor=123, marca de tiempo = 1672826743640, pubKey='PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCw5EXe33S25zZDT25sNYu1bjtBfaCwEGSgnGhJiE31fCfDsyE3pNFw7cC87VfQZQqiEdntMmztfpiDcRe1gv3aJJ4', cid='05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631', status=APENDING, nonce=2, params='null', altura=0, signo = '30460221009A8B2750A6D986EB926B67163B740BBACDD07FE2D87F8FA9AE2F08424989 477602210082C1C36EAEEC6367C023847F995291873F305B867E9B65A5C68ED8A4293DB890'}
`
7. Ver información del bloque a una altura específica.
`golpear
./cadena cliente getBlock 1
`
Producción:
`
Bloque{encabezado=BlockHeader{altura=1, dificultad=28269553036454149273332760011886696253239742350009903329945699220681916416, nonce=703, createTime=1672813674, hash='0004c262f7ead28cc66c9336d7a8335cb8fea5a06b0b1fd7488c3c9b140987cc', anteriorHash='ed5126ddd65f39a17739b8e26ea3edecfff6bf196148dc259d9a3eddeefc23d5'}, mensajes=[Mensaje{versión=0, from='B099', to='0xb6258bc70240ee5daa213f671c08db51e50a4cbe', valor=50, marca de tiempo=1672813674163, pubKey='PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSD1ErKp8AqSj4Ph9Jsj2Gvk7w1pyLgqDRiguC7JvjeGZJZ1si1qRYCAsVmu1UvYRqvhiCBgYDpmyuWK5VzD5KK4RNY', cid='3e1f8987b0d66b2de155e78aeef6984ab7cb6c3acdf03c835c01f4b4088fb90d', estado=ÉXITO, nonce=0, params='Recompensa de minero.', altura=1, signo = '304402202DF6EABBF5C81C41996C44F8E1230D44CAE8ADA9184B466D9B708ADC8B050 225022049D74E4E99E0EA8E56208AD2E4B7B17C2320DC3E6461A17C94D1820818559CA9'}], blockSign='3046022100C04714C00642527AF6AA1DB2B537E5FD887F52999F66929AA2A928D4C 6A4897A022100AF98888FDC825FFB0683E8D65494363790E5173F3991AF61AB86DEEFEAF15D81'}
`
8. Ver la lista de nodos P2P en la red actual.
`golpear
./cliente pares netos
`
9. Ver la información de conexión P2P del nodo actual
`golpear
./cliente escucha neta
`
Producción:
`
Información de conexión P2P, solía estar conectada por otros nodos
127.0.0.1:2345
`
10. Conecte manualmente un nodo
`golpear
./conexión de red del cliente 192.22.33.11:3456
`
resumen
El proyecto blockj es un proyecto de nivel básico para aprender la tecnología blockchain. A través de él, podrás aprender los conceptos básicos y los métodos de implementación de blockchain. Por supuesto, actualmente solo implementa el algoritmo de consenso POW. Si desea utilizarlo en proyectos de producción, debe modificarlo y mejorarlo de acuerdo con las necesidades de su propio proyecto.
Espero que este artículo te sea útil.