비트코인 채굴의 난이도란?

개발개발·2022년 6월 15일
0

블록체인 관련

목록 보기
3/4
post-thumbnail

[초안...]

POW는 Proof of Work의 줄임말로 작업증명방식을 통해 채굴하는 것이다.

n개의 0으로 시작하는 hash값을 찾는다면 블록체인에 연결되어 진짜로 인정받게 된다.
비트코인은 10분마다 1개의 블록이 형성되는 난이도로 조절되어 있다. hash rate가 높아지면 0의 개수를 바꿔 난이도를 조절한다.

자바 예제

import java.security.MessageDigest;
import org.bouncycastle.util.encoders.Hex;

public class Main {

	public static void main(String[] args) throws Exception{
		
		// 최초의 hash값
		String genesis="previous hash...";
		int nonce =0;
        
        // 임시로 만들어 놓은 hash list
		List<String> hashChain = new ArrayList<String>();
        
        // 난이도, 10분에 1개씩 채굴되도록 조절된다.(비트코인 기준)
		String diffculty="0";
        
        // 시간 측정용
		long now = System.currentTimeMillis();
        
		while(true) {
			String hash =OneWayCrypt.Digest(genesis+(nonce+=1));

			// 채굴 성공!!!
			if(hash.startsWith(diffculty)) {
				System.out.println("nonce is "+nonce);
				System.out.println("hash is "+hash);
				long finded = System.currentTimeMillis();
				System.out.println("time spent : "+(finded-now));
				System.out.println();
				
				hashChain.add(hash);
				now = finded;
                // 이전 hash 값을 기준으로 새로운 hash값을 찾는다.
				genesis = hash;
                // 원하는 nonce값을 찾을 경우 난이도가 올라가도록 설정
				diffculty+="0";
			}
			
			
		}
    }
    
    public static String digest(String plain) throws Exception{
		MessageDigest md = MessageDigest.getInstance("SHA-256");
		md.update(plain.getBytes());
		byte[] b = md.digest();
		return Hex.toHexString(b);
	}
}

0의 개수 늘어날때 마다 연산 횟수가 엄청나게 늘어난다.

-- 추가할 내용들
1. pow golang 예제
2. pow에 대한 설명 보충...

profile
청포도루이보스민트티

0개의 댓글