blockj : Un projet blockchain simple basé sur Java
L'éditeur de Downcodes vous propose aujourd'hui un projet simple de blockchain (chaîne de consortium) basé sur Java - blockj. Il comprend des outils de cryptage, des portefeuilles, la transmission P2P, la synchronisation des blocs, le consensus réseau et d'autres implémentations de base de la blockchain. C'est un projet très approprié pour les débutants qui souhaitent apprendre la technologie blockchain.
Structure du projet
blockj est implémenté à l'aide du framework réseau SpringBoot + Tio. Sa structure principale est la suivante :
1. Programme principal : implémenté à l'aide du framework SpringBoot.
2. Transmission P2P : mise en œuvre à l'aide du cadre de réseau t-io.
Environnement opérationnel
Le projet blockj nécessite JDK 1.8 ou supérieur pour fonctionner correctement.
module projet
Le projet blockj contient principalement les trois modules suivants :
1. blockj-base : boîte à outils publique de base, comprenant des outils de chiffrement, des blocs, des messages et d'autres modèles de données, ainsi que le stockage de données et d'autres fonctions.
2. blockj-miner : programme principal Blockchain, comprenant les mineurs, la synchronisation des blocs, le réseau P2P, l'API RPC et d'autres fonctions.
3. blockj-client : outil de ligne de commande client, principalement utilisé pour appeler les API associées à Miner afin de réaliser l'interaction de l'utilisateur avec la blockchain.
démarrage rapide
Les étapes suivantes vous apprennent à créer un réseau blockchain et à effectuer les opérations de base :
1. Créez un nœud Genesis (créez un réseau)
Tout d’abord, vous devez cloner le projet, le compiler et le packager :
`bash
clone git https://gitee.com/blackfox/blockj.git
bloc cdj
paquet mvn propre
`
Ensuite, créez le nœud Genesis :
`bash
./miner genesis --repo=/data/genesis --enable-mining=true
`
2. Démarrez Genesis Miner
`bash
./miner run --repo=/data/genesis
`
3. Démarrez un nouveau nœud (rejoignez le réseau)
Pour que de nouveaux nœuds rejoignent le réseau existant, vous devez initialiser Miner à l'aide du bloc Genesis, puis démarrer Miner :
`bash
./miner init --repo=/data/miner1 --genesis=genesis.car --api.port=8002 --p2p.port=3456
./miner run --repo=/data/miner1
`
Utilisation client
Voici quelques opérations de ligne de commande client couramment utilisées :
1. Afficher la liste des portefeuilles
`bash
./liste de portefeuille client
`
Sortir:
`
Solde d'adresse occasionnel
0x0d181310331612e107b5e0dfdf971cfb9de780adfds 800 10
0x2505bf54f3a63848e44a105e8de599ad08ae8c58 2400 0
0xb6258bc70240ee5daa213f671c08db51e50a4cbe 50800 30
cd3da3ec4195070e13a6d88b75101f6ceb427a8e 0 0
`
2. Créez un nouveau portefeuille
Créez un portefeuille normal :
`bash
./portefeuille client nouveau
`
Créez un portefeuille avec une phrase mnémonique (vous pouvez définir un mot de passe et générer un fichier de clés) :
`bash
./portefeuille client nouveau --mnemonic=true 123456
`
3. Vérifiez le solde du portefeuille
`bash
./solde du portefeuille client 0x2505bf54f3a63848e44a105e8de599ad08ae8c58
`
Sortir:
`
Solde d'adresse
0x2505bf54f3a63848e44a105e8de599ad08ae8c58 2400
`
4. Transfert
`bash
./chaîne client envoyer --from=0x0d181310331612e107b5e0dfdf971cfb9de780adfds 0x2505bf54f3a63848e44a105e8de599ad08ae8c58 123
`
Sortir:
`
Envoyer un message, CID: 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
5. Vérifiez la hauteur actuelle de la chaîne
`bash
./chef de chaîne client
`
6. Afficher les messages sur la chaîne spécifiée
`bash
./chaîne client getMessage 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
Sortir:
`
Message{version=1, de='0x0d181310331612e107b5e0dfdf971cfb9de780adfds', à='0x2505bf54f3a63848e44a105e8de599ad08ae8c58', valeur=123, horodatage=1672826743640, clé de publication ='PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCw5EXe33S25zZDT25sNYu1bjtBfaCwEGSgnGhJiE31fCfDsyE3pNFw7cC87VfQZQqiEdntMmztfpiDcRe1gv3aJJ4', cid='05b6074241f14' 06cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631', statut = APPENDING, nonce = 2, paramètres = 'nul', hauteur=0, signe='30460221009A8B2750A6D986EB926B67163B740BBACDD07FE2D87F8FA9AE2F08424989477602210082C1C36EAEEC6367C023847F995291873F305B8 67 E9B65A5C68ED8A4293DB890'}
`
7. Afficher les informations sur le bloc à une hauteur spécifiée
`bash
./chaîne client getBlock 1
`
Sortir:
`
Block{header=BlockHeader{hauteur=1, difficulté=28269553036454149273332760011886696253239742350009903329945699220681916416, nonce=703, createTime=1672813674, hash='0004c 262f7ead28cc66c9336d7a8335cb8fea5a06b0b1fd7488c3c9b140987cc', previousHash='ed5126ddd65f39a17739b8e26ea3edecfff6bf196148dc259d9a3eddeefc23d5'}, messages=[Messages sage {version=0, de='B099' , to='0xb6258bc70240ee5daa213f671c08db51e50a4cbe', valeur=50, horodatage=1672813674163, pubKey='PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSD1ErKp8AqSj4Ph9Jsj2Gvk7w1py Lg qDRiguC7JvjeGZJZ1si1qRYCAsVmu1UvYRqvhiCBgYDpmyuWK5VzD5KK4RNY', cid='3e1f8987b0d66b2de155e78aeef6984ab7cb6c3acdf03c835c01f4b4088fb90d', status=SUCCESS, nonce= 0 , params='Récompense du mineur.', hauteur=1, signe= '304402202DF6EABBF5C81C41996C44F8E1230D44CAE8ADA9184B466D9B708ADC8B050225022049D74E4E99E0EA8E56208AD2E4B7B17C2320 DC3E6461A17C94D1820 818559CA9 '}], blockSign='3046022100C04714C00642527AF6AA1DB2B537E5FD887F52999F66929AA2A928D4C6A4897A022100AF98888FDC825FFB0683E8D65494363790 E5173F 3991AF61AB86DEEFEFAF15D81'}
`
8. Afficher la liste des nœuds P2P du réseau actuel
`bash
./client pairs nets
`
9. Afficher les informations de connexion P2P du nœud actuel
`bash
./client net écouter
`
Sortir:
`
Informations de connexion P2P, utilisées pour être connectées par d'autres nœuds
127.0.0.1:2345
`
10. Connectez manuellement un nœud
`bash
./client net connecter 192.22.33.11:3456
`
résumé
Le projet blockj est un projet d'entrée de gamme pour apprendre la technologie blockchain. Grâce à lui, vous pourrez apprendre les concepts de base et les méthodes de mise en œuvre de la blockchain. Bien entendu, il n'implémente actuellement que l'algorithme de consensus POW. Si vous souhaitez l'utiliser dans des projets de production, vous devez le modifier et l'améliorer en fonction des besoins de votre propre projet.
J'espère que cet article vous sera utile.