이더해시
이더해시(Ethash)는 이더리움(Ethereum)의 작업증명(PoW) 합의 알고리즘이다.
개요[편집]
이더리움은 현재 작업증명 블록체인으로, 동일한 기본 목표를 위한 동일한 기본 인센티브 시스템에서 동일한 작업증명 알고리즘을 사용하며, 탈중앙화된 제어 상황에서 블록체인을 지키는 역할을 한다. 이더리움의 작업증명 알고리즘은 비트코인과 약간 다른데, 이더해시라고 한다. 원본 블록체인 고안자인 비트코인은 작업증명이라는 합의 알고리즘을 개발했다. 아마도 작업증명은 비트코인을 뒷받침하는 가장 중요한 발명품일 것이다. 작업증명의 구어체 용어는 채굴로, 합의의 주요 목적에 대한 오해를 불러일으킨다. 실세계 채굴의 목적은 귀금속 또는 기타 자원의 추출이기 때문에, 사람들은 종종 채굴의 목적이 새로운 통화의 창출이라고 생각한다. 하지만 오히려 실제 채굴의 목적은 가능한 한 많은 참가자로부터 탈중앙화된 시스템에 대한 통제권을 유지하면서 블록체인을 보호하는 것이다.
새로 발행된 화폐의 보상은 시스템의 보안에 기여하는 사람들에게 주는 인센티브다. 즉, 목적을 위한 수단이다. 그런 의미에서 보상은 수단이며, 탈중앙화된 보안은 목적이다. 작업증명 합의에서 채굴에 참여하는 데 필요한 에너지 비용은 보상에 상응하는 처벌이다. 즉, 참가자가 규정을 지키지 않고 보상을 얻지 못한다면 이미 채굴을 위해 전기에 투자한 자금을 위험에 빠뜨릴 수 있다. 따라서 작업증명 합의는 참여자가 자기 이익 앞에서 정직하게 행동하도록 유도하는 위험과 보상의 면밀한 균형이다.[1]
특징[편집]
이더해시는 비탈릭 부테린(Vitalik Buterin)의 대거(Dagger) 알고리즘과 타데우스 드리자(Thaddeus Dryja)의 하시모토 알고리즘(Hashimoto algorithm)의 조합인 대거-하시모토(Dagger-Hashimoto)의 진화된 알고리즘을 사용한다. 이더해시는 방향성 비순환 그래프(directed acyclic graph, DAG)로 알려진 대규모 데이터 세트의 생성 및 분석에 의존한다. DAG의 초기 크기는 약 1GB이고, 천천히 선형으로 크기가 커지며, 매 순간 업데이트된다.
DAG의 목적은 자주 접근하는 대규모 데이터 구조를 유지하는 데 필요한 이더해시 작업증명 알고리즘을 만드는 것이다. 이는 이더해시가 에이식(ASIC) 저항성을 갖게 만들려는 것으로, GPU 채굴 장비를 만들기가 더 어려워진다는 의미다. 이더리움의 창립자는 특수 실리콘 제조 공장 및 대규모 예산에 접근할 수 있는 사람들이 채굴 인프라를 지배하고 합의 알고리즘의 보안을 훼손할 수 있는 작업증명 채굴의 중앙 집중화를 피하고자 했다.
이더리움 네트워크에서 작업증명을 수행하기 위해 소비자 수준의 GPU를 사용하면 전 세계의 더 많은 사람이 채굴 공정에 참여할 수 있다. 채굴자들이 더 독립적일수록 채굴 파워는 더 탈중앙화되어 있다. 이는 비트코인 같은 상황을 피할 수 있음을 의미한다. 비트코인에서는 채굴 파워 대부분이 몇 군데 대규모 산업 채굴 작업의 손에 집중되어 있다. 채굴을 위한 GPU 사용의 단점은 2017년에 전 세계적으로 GPU 부족 현상을 일으켜 가격이 급등하고 게이머들의 항의를 불러일으켰다는 것이다. 이로 인해 소매 업체의 구매 제한이 발생하여 구매자가 고객당 1~2개의 GPU만 구매하도록 제한을 했다.
최근까지 이더리움 네트워크에서 에이식 채굴자의 위협은 거의 존재하지 않는다. 이더리움을 위해 에이식을 사용하려면 고도로 맞춤화된 하드웨어의 설계, 제조 및 배포가 필요하다. 그것들을 생산하려면 시간과 돈에 상당한 투자가 필요하다. 이더리움 개발자가 지분증명 합의 알고리즘으로 이동하려는 오랜 계획은 에이식 공급 업체가 이더리움 네트워크를 오랫동안 타깃팅 하지 못하게 했을 가능성이 크다. 이더리움이 지분증명(PoS)으로 이동하자마자 작업증명 알고리즘용으로 설계된 에이식은 채굴자가 다른 암호화폐를 채굴하는 데 사용할 수 없으면 쓸모 없어진다. 후자의 가능성은 펄(PIRL) 및 유빅(Ubiq) 같은 다양한 이더해시 기반 합의 코인을 통해 현실이 되었으며, 이더리움 클래식은 가까운 미래에 작업증명 블록체인으로 남을 것을 약속했다. 이것은 에이식 채굴이 작업증명 합의에 따라 운영되는 동안 이더리움 네트워크에 영향을 기치는 것을 의미한다.[2]
과정[편집]
다음은 이더해시의 채굴 과정이다.
- 32개 길이의 배열의 에포크(Epoch)수만큼 해싱한다. 그 값을 시드(Seed)값으로 삼는데, 이 시드값을 30,000블록마다 변경된다.
- 시드 값으로 무작위 추출(pseudo-random)한 캐시 데이터(cache data)를 생성한다. 생성 시 메모리를 사용하게 되는데 메모리를 타 용도로 사용한다면 캐시 데이터의 생성 속도가 매우 느려지므로 주의한다.
- 1GB 이상의 데이터 세트을 생성한다. 이때 풀 클라이언트(full client)와 채굴자는 데이터세트 DAG를 저장하며, 데이터 세트는 선형으로 커진다. DAG 파일은 캐시 데이터를 이용해 생성하는데 한 번에 64바이트의 데이터를 생성하고 이를 데이터 사이즈만큼 생성하도록 반복한다.
- 채굴 과정에서 데이터 세트의 일부를 같이 해싱한다.
- Keccak156해시를 해 결과값이 조건에 맞으면 채굴에 성공한다.
- 다이제스트와 논스는 블록헤더에 포함되는데 다이제스트 필드, 논스 필드가 포함되지 않아 해시값에 변경이 없다.
사용 함수[편집]
- Folwer-Noll-Vo
hash = FNV_offset_basis for each byte_of_data to be hashed hash = hash × FNV_prime hash = hash XOR byte_of_data return hash
- 출력 비트에 따라 FNV_offset_basis 값을 정한다.
- 입력 바이트에 FNV 함수의 출력 비트에 따라 정해지는 FNV 소수를 곱한다.
- 입력 바이트와 XOR 연산을 수행한다.
채굴 과정[편집]
def mine(full_size, dataset, header, difficulty): # zero-pad target to compare with hash on the same digit target = zpad(encode_int(2**256 // difficulty), 64)[::-1] from random import randint nonce = randint(0, 2**64) while hashimoto_full(full_size, dataset, header, nonce) > target: nonce = (nonce + 1) % 2**64 return nonce [3][4]
각주[편집]
- ↑ 박성훈, 류길성, 강동욱, Mastering Ethereum, J-Pub, 2019, p.364
- ↑ 박성훈, 류길성, 강동욱, Mastering Ethereum, J-Pub, 2019, p366
- ↑ 야옹메롱, 〈크립토알고리즘 개념 및 종류〉, 《네이버 블로그》, 2018-10-03
- ↑ bero in TOMAK, 〈이더리움 Ethash 연구〉, 《미디엄》, 2018-7-26
참고자료[편집]
- 박성훈, 류길성, 강동욱, Mastering Ethereum, J-Pub, 2019
- 야옹메롱, 〈크립토알고리즘 개념 및 종류〉, 《네이버 블로그》, 2018-10-03
- 니르바나, 〈이더리움의 합의 알고리즘 - 작업증명〉, 《티스토리》, 2018
- dongsamb, 〈Ethereun PoW 알고리즘 비교 및 원리〉, 《스팀잇》, 2018
- bero in TOMAK, 〈이더리움 Ethash 연구〉, 《미디엄》, 2018-07-26
같이 보기[편집]
|