blockj: Java 기반의 간단한 블록체인 프로젝트
오늘 Downcodes의 편집자는 Java - blockj를 기반으로 한 간단한 블록체인(컨소시엄 체인) 프로젝트를 제공합니다. 여기에는 암호화 도구, 지갑, P2P 전송, 블록 동기화, 네트워크 합의 및 기타 블록체인 기본 구현이 포함되어 있어 초보자가 블록체인 기술을 배우기에 매우 적합한 프로젝트입니다.
프로젝트 구조
blockj는 SpringBoot + Tio 네트워크 프레임워크를 사용하여 구현됩니다. 주요 구조는 다음과 같습니다.
1. 기본 프로그램: SpringBoot 프레임워크를 사용하여 구현됩니다.
2. P2P 전송: t-io 네트워크 프레임워크를 사용하여 구현됩니다.
운영 환경
blockj 프로젝트를 제대로 실행하려면 JDK 1.8 이상이 필요합니다.
프로젝트 모듈
blockj 프로젝트에는 주로 다음 세 가지 모듈이 포함되어 있습니다.
1. blockj-base: 암호화 도구, 블록, 메시지 및 기타 데이터 모델은 물론 데이터 저장 및 기타 기능을 포함한 기본 공개 툴킷입니다.
2. blockj-miner: 채굴기, 블록 동기화, P2P 네트워크, RPC API 및 기타 기능을 포함한 블록체인 기본 프로그램입니다.
3. blockj-client: 클라이언트 명령줄 도구로 주로 Miner의 관련 API를 호출하여 블록체인과 사용자 상호 작용을 실현하는 데 사용됩니다.
빠른 시작
다음 단계에서는 블록체인 네트워크를 생성하고 기본 작업을 수행하는 방법을 설명합니다.
1. 제네시스 노드 생성(네트워크 생성)
먼저 프로젝트를 복제하고 컴파일하고 패키지해야 합니다.
`배쉬
자식 클론 https://gitee.com/blackfox/blockj.git
CD블럭
mvn 클린 패키지
`
그런 다음 제네시스 노드를 생성합니다.
`배쉬
./miner genesis --repo=/data/genesis --enable-mining=true
`
2. 제네시스 마이너 시작
`배쉬
./miner run --repo=/data/genesis
`
3. 새 노드 시작(네트워크에 가입)
새로운 노드가 기존 네트워크에 합류하려면 제네시스 블록을 사용하여 채굴기를 초기화한 다음 채굴기를 시작해야 합니다.
`배쉬
./miner init --repo=/data/miner1 --genesis=genesis.car --api.port=8002 --p2p.port=3456
./miner run --repo=/data/miner1
`
클라이언트 사용
다음은 일반적으로 사용되는 클라이언트 명령줄 작업입니다.
1. 지갑 목록 보기
`배쉬
./클라이언트 지갑 목록
`
산출:
`
주소 잔액 Nonce
0x0d181310331612e107b5e0dfdf971cfb9de780adfds 800 10
0x2505bf54f3a63848e44a105e8de599ad08ae8c58 2400 0
0xb6258bc70240ee5daa213f671c08db51e50a4cbe 50800 30
cd3da3ec4195070e13a6d88b75101f6ceb427a8e 0 0
`
2. 새 지갑 생성
일반 지갑을 생성하세요:
`배쉬
./클라이언트 지갑 신규
`
니모닉 문구로 지갑을 생성하세요(비밀번호를 설정하고 키스토어 파일을 생성할 수 있습니다):
`배쉬
./클라이언트 지갑 new --mnemonic=true 123456
`
3. 지갑 잔액 확인
`배쉬
./클라이언트 지갑 잔액 0x2505bf54f3a63848e44a105e8de599ad08ae8c58
`
산출:
`
주소 잔액
0x2505bf54f3a63848e44a105e8de599ad08ae8c58 2400
`
4. 환승
`배쉬
./클라이언트 체인 보내기 --from=0x0d181310331612e107b5e0dfdf971cfb9de780adfds 0x2505bf54f3a63848e44a105e8de599ad08ae8c58 123
`
산출:
`
메시지 보내기, CID: 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
5. 현재 체인 높이를 확인하세요
`배쉬
./클라이언트 체인 헤드
`
6. 지정된 체인의 메시지 보기
`배쉬
./클라이언트 체인 getMessage 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
산출:
`
메시지{버전=1, from='0x0d181310331612e107b5e0dfdf971cfb9de780adfds', to='0x2505bf54f3a63848e44a105e8de599ad08ae8c58', 값=123, 타임스탬프=1672826743640, 키='PZ8Tyr4Nx8MHsRAGmpZmZ6TWY63dXWSCw5EXe33S25zZDT25sNYu1bjtBfaCwEGSgnGhJiE31fCfDsyE3pNFw7cC87VfQZQqiEdntMmztfpiDcRe1gv3aJJ4', cid='05b6074241f 14 06cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631', 상태=APPENDING, nonce=2, params= 'null', 높이=0, 부호='30460221009A8B2750A6D986EB926B67163B740BBACDD07FE2D87F8FA9AE2F08424989477602210082C1C36EAEEC6367C023847F995291873F305B86 7 E9B65A5C68ED8A4293DB890'}
`
7. 특정 높이의 블록 정보 보기
`배쉬
./클라이언트 체인 getBlock 1
`
산출:
`
블록{헤더=BlockHeader{높이=1, 난이도=28269553036454149273332760011886696253239742350009903329945699220681916416, nonce=703, createTime=1672813674, hash='0004c 262f7ead28cc66c9336d7a8335cb8fea5a06b0b1fd7488c3c9b140987cc', 이전Hash='ed5126ddd65f39a17739b8e26ea3edecfff6bf196148dc259d9a3eddeefc23d5'}, 메시지=[메시지 {버전=0, from='B099' , to='0xb6258bc70240ee5daa213f671c08db51e50a4cbe', 값=50, 타임스탬프=1672813674163, pubKey='PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSD1ErKp8AqSj4Ph9Jsj2Gvk7w1py Lg qDRiguC7JvjeGZJZ1si1qRYCAsVmu1UvYRqvhiCBgYDpmyuWK5VzD5KK4RNY', cid='3e1f8987b0d66b2de155e78aeef6984ab7cb6c3acdf03c835c01f4b4088fb90d', 상태=성공, nonce =0 , params='마이너 보상.', 높이=1, sign= '304402202DF6EABBF5C81C41996C44F8E1230D44CAE8ADA9184B466D9B708ADC8B050225022049D74E4E99E0EA8E56208AD2E4B7B17C2320 DC3E6461A17C94D18208 18559CA9 '}], blockSign='3046022100C04714C00642527AF6AA1DB2B537E5FD887F52999F66929AA2A928D4C6A4897A022100AF98888FDC825FFB0683E8D65494363790E5 173F 3991AF61AB86DEFEAF15D81'}
`
8. 현재 네트워크의 P2P 노드 목록 보기
`배쉬
./클라이언트 넷 피어
`
9. 현재 노드 P2P 연결 정보 보기
`배쉬
./클라이언트 넷 청취
`
산출:
`
다른 노드에서 연결하는데 사용되는 P2P 연결 정보
127.0.0.1:2345
`
10. 수동으로 노드 연결
`배쉬
./client net connect 192.22.33.11:3456
`
요약
blockj 프로젝트는 블록체인 기술을 배우기 위한 입문 레벨 프로젝트입니다. 이를 통해 블록체인의 기본 개념과 구현 방법을 배울 수 있습니다. 물론 현재는 POW 합의 알고리즘만 구현하고 있습니다. 프로덕션 프로젝트에서 사용하려면 자신의 프로젝트 요구에 따라 수정하고 개선해야 합니다.
이 기사가 도움이 되기를 바랍니다.