core > BlockChainStarter
package core;
import util.Util;
public class BlockChainStarter {
public static void main(String[] args) {
// TODO Auto-generated method stub
// STEP 1. 해시 알고리즘은 입력 값이 조금만 바뀌어도 결과는 완전히 다른 값이 나온다. 채굴의 원리는 이러한 눈사태 효과에서 출발한다.
System.out.println(Util.getHash("이승엽")); // 0c2bc0396e93dcc356680303162ced49c0fe2fed31ed1da7753113e413a2c06a
System.out.println(Util.getHash("이승엽1")); // 55868675c69c4009a2dc5baa44b5326f93429b587b10828a622de61bca097bd7
// STEP 2. 작업 증명(Proof of Work) : 비트코인에서 사용되고 있는 채굴 방식
int nonce = 0;
while(true) { // 채굴
// 16진수 6자리 => 16 x 16 x 16 x 16 x 16 x 16 => 2의 24승(난이도)
if(Util.getHash(nonce + "").substring(0, 6).equals("000000")) { // 어떠한 숫자 nonce를 문자열 형태로 바꾼 후 이것의 해시 값이 "000000"으로 시작할 때 채굴에 성공
System.out.println("정답 : " + nonce); // 665782
System.out.println("해시 값 : " + Util.getHash(nonce + "")); // 0000000399c6aea5ad0c709a9bc331a3ed6494702bd1d129d8c817a0257a1462
break;
}
nonce++; // nonce 1씩 증가
}
// 작업 증명이라는 합의 알고리즘을 사용하는 블록체인 시스템은 이처럼 무작위의 입력값을 대입하여 정답(nonce)을 구하는 방식으로 채굴이 가능하도록 설계가 되어있다.
}
}
util > Util
package util;
import java.security.MessageDigest;
public class Util {
public static String getHash(String input) { // 단순 문자열 input
StringBuffer result = new StringBuffer();
try {
MessageDigest md = MessageDigest.getInstance("SHA-256"); // Secure Hash Algorithm // 256비트로 구성 // 64자리 문자열 반환
md.update(input.getBytes());
byte bytes[] = md.digest();
for(int i = 0; i < bytes.length; i++) {
result.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
}
} catch(Exception e) {
e.printStackTrace();
}
return result.toString(); // SHA-256 해시를 적용한 결과 리턴
}
}
'Block Chain' 카테고리의 다른 글
[Block Chain] Java 실습-3 (0) | 2022.12.21 |
---|---|
[Block Chain] Java 실습-2 (0) | 2022.12.21 |
[Block Chain] 암호화폐 (0) | 2022.12.01 |
[Block Chain] 해시 (0) | 2022.12.01 |
[Block Chain] 쉽게 이해하기 (0) | 2022.11.30 |