4. Ethash Mining Flow
단순히 SHA256 연산만을 필요했던
Bitcoin 의 Mining 알고리즘과 달리
Ethash 에서는 DAG 를 통해
미리 알 수, 할 수 없는
순차적 메모리 연산을 요구하여,
ASIC 제작을 어렵게 함
5. Ethash
• Memory Hard Computation
• Memory Easy Validation
• ASIC ( 주문형 반도체 ) 제작을 힘들게
• 위 같은 목적 달성을 위해 매 3만 블록마다 수 GB 의 DAG(Directed acyclic graph)를
새로 생성하여 해싱에 사용( 점점 사이즈 증가 )
• KECCAK(SHA-3) 사용
• Dagger 와 Hashimoto 알고리즘의 장점을 결합한 Dagger-Hashimoto 의 수정버전
6. Ethash: DAG data, cache size
• 블록의 헤더들을 스캔하여 Seed 값 추출 가능
• 해당 Seed 를 통해 16MB 의 pseudo random cache 를 계산 가능
• 해당 Cache를 통해 1GB 이상의 Full Dataset 을 생성 가능
• 30,000 Block 단위 별로 Full Dataset 이 완전히 바뀌고, 선형으로 커지도록 설계 됨
• 해당 Full Dataset 의 랜덤한 부분을 마이닝 해싱 작업에 포함 시키도록 함
• 따라서 메모리 읽기 연산, Dataset 저장 공간 등의 제약을 주어
ASIC 제작이 불가능하도록 함
7. Ethash: DAG Cache Generation
선형 증가하는 소수를 사이즈로 사용
2048 epoch 만큼의 lookup table 이 미리 계산되어 하드코딩 되어 있다.
2017.11 기준 약 450만 블록으로서, 약 150 epoch 이며 DAG 의 사이즈는 2.2GB 정도
8. Ethash: DAG Cache Generation
Sergio Demian Lerner 의 RandMemoHash Strict Memory Hard Hashing Functions (2014) 알고리즘을 사용하여
연산 시 메모리가 특정 임계치 보다 낮으면 연산 속도가 기하급수적으로 길어지도록 설계,
이를 통해 특정 시간동안 특정양의 메모리가 해당 연산을 위해서만 사용 되었음을 증명 할 수 있게된다.
# 3
# 64
# keccak512
10. Ethash: DAG Full Dataset calculation
# 16 == 64 // 4
# mix[0] = mix[0] xor i
# 256
# keccak512
# xor 의 대체제로 fnv hash 사용 (분산효과)
fnv(a, b): (a * prime) xor b
11. Hashimoto
# 64
# 64
# 32 == 128 // 4
# 2 == 128 / 64
# to little-endian
# [0, 4, 8, … ]
# for Fetch DAG Page
# Fetch DAG Page from dataset_lookup table
12. Ethash: Hashimoto, Mining
# zero padding
Hashimoto_light 는 light client 가 1기가 이상의 DAG 를 가지고 연산하기 무거우니
16MB 이상의 cache 만으로 실시간으로 DAG를 연산, 생성하여 사용하도록 한 것
13. Ethash 정리
• 민주적, 비독점적인 탈중앙 마이닝을 위해 ASIC 제작을 어렵도록 설계
• ASIC 의 경우 오로지 마이닝 용도이므로 (전기료 == 채굴수입) 이 되어 에너지가 낭비됨
• Ethash 계속 확장, 변경되는 DAG 파일을 통한 메모리 연산을 요구함
• 따라서 별도 장비구입 없이 이미 모두가 소유하고있는 일반적인 PC 로 채굴하기 적합
• 하지만 합의 과정을 위해 불필요한 연산을 통한 에너지 소비는 여전하므로
장기적으로 PoS 가 불가피
18. DAG Cache Generation
Sergio Demian Lerner 의 RandMemoHash
Strict Memory Hard Hashing Functions (2014)
알고리즘을 사용하여
연산 시 메모리가 특정 임계치 보다 낮으면
연산 속도가 기하급수적으로 길어지도록 설계,
이를 통해 특정 시간동안 특정양의 메모리가
해당 연산을 위해서만 사용 되었음을
증명 할 수 있게된다.