blockj: Um projeto blockchain simples baseado em Java
O editor de Downcodes hoje traz para você um projeto simples de blockchain (cadeia de consórcio) baseado em Java - blockj. Inclui ferramentas de criptografia, carteiras, transmissão P2P, sincronização de blocos, consenso de rede e outras implementações básicas de blockchain. É um projeto muito adequado para iniciantes aprenderem a tecnologia blockchain.
Estrutura do projeto
blockj é implementado usando a estrutura de rede SpringBoot + Tio. Sua estrutura principal é a seguinte:
1. Programa principal: implementado usando o framework SpringBoot.
2. Transmissão P2P: implementada usando a estrutura de rede t-io.
Ambiente operacional
O projeto blockj requer JDK 1.8 ou superior para funcionar corretamente.
módulo de projeto
O projeto blockj contém principalmente os três módulos a seguir:
1. blockj-base: Kit de ferramentas públicas básicas, incluindo ferramentas de criptografia, blocos, mensagens e outros modelos de dados, bem como armazenamento de dados e outras funções.
2. blockj-miner: programa principal Blockchain, incluindo mineradores, sincronização de blocos, rede P2P, API RPC e outras funções.
3. blockj-client: ferramenta de linha de comando do cliente, usada principalmente para chamar APIs relacionadas ao Miner para realizar a interação do usuário com o blockchain.
início rápido
As etapas a seguir ensinam como criar uma rede blockchain e realizar operações básicas:
1. Crie um nó genesis (crie uma rede)
Primeiro, você precisa clonar o projeto e compilá-lo e empacotá-lo:
`bash
clone do git https://gitee.com/blackfox/blockj.git
bloco de cd j
pacote limpo mvn
`
Em seguida, crie o nó genesis:
`bash
./miner genesis --repo=/data/genesis --enable-mining=true
`
2. Inicie o Genesis Miner
`bash
./miner run --repo=/data/genesis
`
3. Inicie um novo nó (ingresse na rede)
Para que novos nós se juntem à rede existente, você precisa inicializar o Miner usando o bloco genesis e então iniciar o Miner:
`bash
./miner init --repo=/data/miner1 --genesis=genesis.car --api.port=8002 --p2p.port=3456
./miner run --repo=/data/miner1
`
Uso do cliente
A seguir estão algumas operações de linha de comando do cliente comumente usadas:
1. Ver lista de carteiras
`bash
./lista de carteira do cliente
`
Saída:
`
Endereço Saldo Nonce
0x0d181310331612e107b5e0dfdf971cfb9de780adfds 800 10
0x2505bf54f3a63848e44a105e8de599ad08ae8c58 2400 0
0xb6258bc70240ee5daa213f671c08db51e50a4cbe 50800 30
cd3da3ec4195070e13a6d88b75101f6ceb427a8e 0 0
`
2. Crie uma nova carteira
Crie uma carteira normal:
`bash
./carteira do cliente nova
`
Crie uma carteira com uma frase mnemônica (você pode definir uma senha e gerar um arquivo keystore):
`bash
./carteira do cliente nova --mnemonic=true 123456
`
3. Verifique o saldo da carteira
`bash
./saldo da carteira do cliente 0x2505bf54f3a63848e44a105e8de599ad08ae8c58
`
Saída:
`
Saldo de endereço
0x2505bf54f3a63848e44a105e8de599ad08ae8c58 2400
`
4. Transferência
`bash
./envio da cadeia do cliente --from = 0x0d181310331612e107b5e0dfdf971cfb9de780adfds 0x2505bf54f3a63848e44a105e8de599ad08ae8c58 123
`
Saída:
`
Enviar mensagem, CID: 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
5. Verifique a altura atual da corrente
`bash
./cabeça da cadeia do cliente
`
6. Visualize mensagens na cadeia especificada
`bash
./cadeia do cliente getMessage 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
Saída:
`
Mensagem{versão=1, de='0x0d181310331612e107b5e0dfdf971cfb9de780adfds', para='0x2505bf54f3a63848e44a105e8de599ad08ae8c58', valor=123, timestamp=1672826743640, pub Key= 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCw5EXe33S25zZDT25sNYu1bjtBfaCwEGSgnGhJiE31fCfDsyE3pNFw7cC87VfQZQqiEdntMmztfpiDcRe1gv3aJJ4', cid='05b6074241f 14 06cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631', status=ANEXO, nonce=2, parâmetros= 'nulo', altura = 0, sinal = '30460221009A8B2750A6D986EB926B67163B740BBACDD07FE2D87F8FA9AE2F08424989477602210082C1C36EAEEC6367C023847F995291873F305B8 67 E9B65A5C68ED8A4293DB890'}
`
7. Visualize informações do bloco em uma altura especificada
`bash
./client chain getBlock 1
`
Saída:
`
Bloco {cabeçalho = BlockHeader {altura = 1, dificuldade = 28269553036454149273332760011886696253239742350009903329945699220681916416, nonce = 703, createTime = 1672813674, hash = '0004c 262f7ead28cc66c9336d7a8335cb8fea5a06b0b1fd7488c3c9b140987cc', previousHash='ed5126ddd65f39a17739b8e26ea3edecfff6bf196148dc259d9a3eddeefc23d5'}, mensagens=[Eu mensagem {versão=0, de='B099' , para = '0xb6258bc70240ee5daa213f671c08db51e50a4cbe', valor = 50, carimbo de data / hora = 1672813674163, pubKey = 'PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSD1ErKp8AqSj4Ph9Jsj2Gvk7w1 pyLg qDRiguC7JvjeGZJZ1si1qRYCAsVmu1UvYRqvhiCBgYDpmyuWK5VzD5KK4RNY', cid='3e1f8987b0d66b2de155e78aeef6984ab7cb6c3acdf03c835c01f4b4088fb90d', status = SUCESSO, nonce =0, params='Recompensa do mineiro.', altura=1, sinal= '304402202DF6EABBF5C81C41996C44F8E1230D44CAE8ADA9184B466D9B708ADC8B050225022049D74E4E99E0EA8E56208AD2E4B7B17C2320 DC3E6461A17C94D18208 18559CA9 '}], blocoSign='3046022100C04714C00642527AF6AA1DB2B537E5FD887F52999F66929AA2A928D4C6A4897A022100AF98888FDC825FFB0683E8D65494363790E51 73F 3991AF61AB86DEEFEAF15D81'}
`
8. Veja a lista de nós P2P na rede atual
`bash
./clientes pares da rede
`
9. Visualize informações de conexão P2P do nó atual
`bash
./client net escuta
`
Saída:
`
Informações de conexão P2P, usadas para serem conectadas por outros nós
127.0.0.1:2345
`
10. Conecte manualmente um nó
`bash
./cliente conexão de rede 192.22.33.11:3456
`
resumo
O projeto blockj é um projeto básico para aprender a tecnologia blockchain. Através dele, você pode aprender os conceitos básicos e métodos de implementação do blockchain. Claro, atualmente ele implementa apenas o algoritmo de consenso POW. Se você quiser usá-lo em projetos de produção, será necessário modificá-lo e melhorá-lo de acordo com as necessidades do seu próprio projeto.
Espero que este artigo seja útil para você.