검수요청.png검수요청.png

"엉클블록"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글
 
(사용자 4명의 중간 판 51개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''엉클블록'''(uncle block)은 [[블록]]의 유효성은 통과되었지만 최종 블록으로 인정받지 못하여 [[고아블록]]으로 이루어진 [[체인]]의 첫 번째 블록이다. 이더리움, 하이콘 등에서는 엉클블록의 생성자도 보상을 지급하고, 이에 대한 [[해시]]도 [[네트워크]]에 포함시켜 안정적으로 네트워크를 유지한다.
+
'''엉클블록'''<!--엉클 블록-->(uncle block)은 [[블록]]의 유효성은 통과되었지만 최종 블록으로 인정받지 못하여 [[고아블록]]으로 이루어진 [[체인]]의 첫 번째 블록이다. 이더리움, 하이콘 등에서는 엉클블록의 생성자도 보상을 지급하고, 이에 대한 [[해시]]도 [[네트워크]]에 포함시켜 안정적으로 네트워크를 유지한다.
  
 
==개요==
 
==개요==
 +
[[블록]] 생성 시간은 매우 중요하다. 블록 생성이 매우 빠르면, 즉 블록 생성 난이도가 낮으면 [[네트워크]]의 보안 수준이 나빠진다. 반대로, 블록 생성이 매우 느리면,
 +
즉 블록 생성 난이도가 높으면 네트워크 보안 수준은 올라가지만, 언제 블록이 생성되는지 알기 어렵기 때문에, [[트랜잭션]] 처리가 언제 될지 예측하기 어려운 문제가 발생하게 된다. 따라서 적절한 블록 생성 시간이 설정되어야 하는 것이다. 만약 두 채굴자가 거의 비슷한 시간에 블록을 [[채굴]]한다면 어떻게 처리해야 할까?  이더리움 네트워크는 총 블록의 [[채굴 난이도]]가 더 높은 체인을 선택한다. 그러면 채굴 난이도가 낮은 체인은 그냥 버리는게 좋을까? 이처럼 선택되지 못한 블록을 스테일 블록(stale block)이라고 하는데, 이더리움에서는 [[스테일 블록]]을 [[엉클 블록]](uncle block)이라고 부른다.<ref name="asfd">etainclub, 〈[https://steemit.com/coinkorea/@etainclub/smart-contract-8-2 [Smart Contract 개발] #8 이더리움 핵심 개요 정리 2]〉, 《steemit》</ref>
  
 +
==특징==
 +
[[이더리움]]의 경우 현재 [[합의 알고리즘]]인 [[POW]](Proof of Work, [[작업 증명 방식]])로 블록을 계속해서 생성하고 있다. 만약 서로 다른 채굴자가 동시에 블록을 생성하는 경우, 더 어려운 채굴 난이도와 큰 [[논스]](nonce) 값을 가진 블록은 [[블록체인]]에 연결되고, 다른 하나는 버려지게 된다. 이 때, 버려지는 블록을 [[엉클 블록]]이라고 한다.<ref>〈[https://www.tokenpost.kr/terms/14062 엉클 블록]〉, 《토큰 포스트》</ref>
 +
 +
[[이더리움]]의 엉클블록은 [[비트코인]]의 [[고아블록]]에 상당하는 것이지만, 비트코인에서는 무효화되는 고아블록이 이더리움에서는 엉클블록으로서 [[메인체인]]의 구성 요소로 다뤄지며 [[채굴]]에 대한 보상도 주어진다. 엉클블록을 통해 채굴의 효율성과 네트워크의 안정성을 높일 수 있으며, 이더리움 블록체인에 있어 엉클블록의 비율 조작은 신규 이더리움 발행빈도의 부정조작을 방지하는 의미 또한 있다.
 +
 +
엉클블록은 블록 생성 평균 시간이 짧아지면 자주 발생하게 된다. 왜냐하면, [[채굴자]]가 블록을 찾아서 다른 [[노드]]에 전파시키는데 시간이 소요되고 블록 생성 시간이 짧다는 것은 채굴자들이 쉽게 퍼즐의 해답을 찾을 수 있다는 말이 되는데, 이렇게 되면 블록을 찾았다는 신호가 전달되기 전에 다른 채굴자가 새로운 블록을 찾을 수 있기 때문이다.
 +
엉클 블록의 문제점은 트랜잭션 승인(confirmation)을 늦춘다는 것이다. 어떤 트랜잭션이 엉클블록에 속한다면, 그 트랜잭션은 승인되지 못한다. 즉 해당 트랜잭션이 포함된 블록이 다시 채굴되어야 한다는 것이다. 또 엉클 블록이 자주 발생한다는 것은 엉클블록을 채굴하는데 그만큼 해시파워가 소모되었다는 것이고, 즉 [[해시파워]]가 불필요한 곳에 사용된 것이다. 이것은 평균 블록 생성 시간을 늦추게 되고, 평균 블록 생성 시간이 늦어졌기 때문에, 결국 난이도를 낮추게 되어 네트워크 보안 수준을 떨어트리는 문제까지 번진다.
 +
 +
이더리움은 [[고스트 프로토콜]](Ghost Protocol)이란 방식으로 이러한 엉클블록 문제를 해결한다. 즉 정상적인 블록들이 N개의 엉클블록을 가질 수 있게 함으로써, 엉클블록이 메인체인에 붙도록 한 것이다. 그렇게 되면 엉클블록도 [[메인체인]]에 속하므로, [[채굴 난이도]]가 낮아지지 않는 효과를 가져온다.<ref name="asfd"></ref>
 +
 +
===엉클블록 규칙과 보상===
 +
엉클블록에 관한 규칙은 다음과 같다.
 +
* 이더리움의 GHOST 구현을 통해, 블록과 함께 [[유효성 검사]]를 받는 엉클블록은 정식 블록 보상의 8분의 7, 또는 4.375 이더를 받는다.
 +
* 블록당 최대 두 개의 엉클 블록이 허용된다.
 +
* 두 개의 엉클 블록은 선착순으로 선택된다.
 +
* 엉클 블록에 대해서는 트랜잭션 수수료의 징수나 지불이 이루어지지 않는다. 사용자는 유효한 블록에 이미 한 번 비용을 지불했고 명령을 실행하기 때문이다.
 +
* 결정적으로, 보상을 받기 위해서는 엉클 블록이 지난 7블록 이내의 승자 블록과 동일한 조상을 가져야 한다.<ref name="dsaf">브이핏,〈[https://m.blog.naver.com/PostView.nhn?blogId=lool2389&logNo=221293806380&proxyReferer=https%3A%2F%2Fwww.google.com%2F 엉클 블록, PoW과 PoS]〉, 《네이버 블로그》, 2018-06-07</ref>
  
 +
===이더리움===
 +
Ethereum은 블록체인 기술을 기반으로 스마트 계약 기능을 구현하기 위한 분산 컴퓨팅 [[플랫폼]]이다. 이더리움이 제공하는 [[이더]](Ether)는 [[비트코인]]과 마찬가지로 [[암호화폐]]의 일종으로 거래되고 있다. 이더리움의 화폐 단위는 [[ETH]]로 표시한다. 비트코인 이후에 등장한 알트코인 중 시가 총액이 가장 높은 대표적인 [[알트코인]]이다. Ethereum의 정확한 발음은 미국식으로는 [[이씨리엄]]([iˈθɪɹiəm])이고, 영국식으로는 [[이씨어리엄]]([iˈθɪəɹiəm])이다. 이더리움은 초기에 '[[이시리움]]' 또는 '[[에테리움]]'이라고 표기하기도 하였으나, 요즘에는 '이더리움'으로 표기하는 경우가 많다. 이더리움에서 하나의 블록만이 [[블록체인]]에 올라가고 나머지 하나는 버려지게 되는데, 이 때 버려지는 블록을 [[엉클블록]]이라고 한다.
 +
이더리움은 2015년 7월 30일 비탈릭 부테린(Vitalik Buterin)이 개발하였다. [[비탈릭 부테린]]은 [[가상화폐]]인 비트코인에 사용된 핵심 기술인 블록체인에 화폐 거래 기록뿐 아니라 계약서 등의 추가 정보를 기록할 수 있다는 점에 착안하여, 전 세계 수많은 사용자들이 보유하고 있는 컴퓨팅 자원을 활용해 이더리움 가상 머신(EVM)을 만들고, 이 플랫폼을 이용하여 SNS, 이메일, 전자투표 등 다양한 정보를 기록하는 시스템을 창안했다. 이더리움은 [[C++]], [[자바]], [[파이썬]], [[GO]] 등 주요 프로그래밍 언어를 지원한다.
 +
이더리움을 [[사물 인터넷]](IoT)에 적용하면 기계 간 [[금융 거래]]도 가능해진다. 예를 들어 고장난 청소로봇이 정비로봇에 돈을 내고 정비를 받고, 청소로봇은 돈을 벌기 위해 정비로봇의 집을 청소하는 것도 가능해진다.
  
==역사==
+
이더리움에서 스마트 계약을 처리하기 위한 가상 머신(EVM)은 모든 형태의 알고리즘을 처리할 수 있는 [[튜링 기계]]로서, 먼저 들어온 [[데이터]]를 우선적으로 처리하는 스[[택 구조]]를 가진다.EVM은 저수준의 기계어에 가까운 바이트 코드만을 실행할 수 있기 때문에 고급 프로그래밍 언어를 실행하기 위해서는 [[바이트 코드]]로 [[컴파일]] 과정을 거쳐야 한다. 이 가상 머신을 이용하기 위해서는 '[[가스]]'라는 대가를 지불해야 한다.<ref>〈[https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%8D%94%EB%A6%AC%EC%9B%80 이더리움]〉, 《위키백과》</ref>
  
 +
===메인체인===
 +
메인체인(main chain)은 [[제네시스]]블록부터 가장 최근의 블록까지 연결되어 있는 체인이다. [[최장체인]] 또는 [[주요체인]]이라고도 부르며 가장 많은 [[해시파워]]가 투입되는 체인에 그 다음 블록이 연결된다. 네트워크 전파 속도 차이로 인해 하나의 체인으로 수렴하기 전에 같은 블록을 채굴하는 경우가 종종 발생하며 이는 분기, 즉 포크 를 유발한다. 동시 채굴이라는 용어는 정확히 같은 순간에 채굴에 성공했다는 개념이 아니며, 모든 노드들에게 블록이 전파되기 전, 같은 블록에 있어서 다른 노드에 의해 채굴이 완성되면 포크가 생겼다고 볼 수 있다.<ref>〈[http://wiki.hash.kr/index.php/%EB%A9%94%EC%9D%B8%EC%B2%B4%EC%9D%B8 메인체인]〉, 《해시넷》</ref>
  
==특징==
+
===작업증명방식(POW)===
[[이더리움]]의 엉클블록은 [[비트코인]][[고아블록]]에 상당하는 것이지만, 비트코인에서는 무효화되는 고아블록이 이더리움에서는 엉클블록으로서 [[메인체인]]의 구성 요소로 다뤄지며 [[채굴]]에 대한 보상도 주어진다. 엉클블록을 통해 채굴의 효율성과 네트워크의 안정성을 높일 수 있으며, 이더리움 블록체인에 있어 엉클블록의 비율 조작은 신규 이더리움 발행빈도의 부정조작을 방지하는 의미 또한 있다.
+
[[작업증명]](PoW, Proof of Work)은 블록체인 상의 대표적 [[알고리즘]]이다. 목표값 이하의 해시를 찾는 과정을 무수히 반복하면서 해당 작업에 참여했음을 증명하는 방식의 합의 알고리즘을 말한다. 작업증명 과정은 보통 [[마이닝]](채굴)을 통해 이뤄진다. 암호화폐 2대 대장주인 비트코인과 이더리움이 PoW 방식을 사용하고 있다. 비트코인 계열의 [[라이트코인]], [[비트코인캐시]], [[비트코인골드]], [[시아코인]] 등도 PoW의 대표 암호화폐며 익명성을 보장받는 [[다크코인]] 계열인 [[모네]]로, [[지캐시]] 등도 PoW 방식을 이용한다.PoW 개념은 지난 1993년 신시아 더크(Cynthia Dwork)와 모니 나노어(Moni Naor)가 처음으로 고안되었다. 이후 마커스 제이콥슨(Markus_Jakobsson)과 아리 쥬엘스(Ari Juels)가 1999년 Proof of Work라는 명칭을 사용하면서 널리 알려되어 진다.
 +
앞서 1997년 아담 백(Adam Back)이 개발한 해시캐시가 PoW를 적용한 사례이지만 큰 성과를 보진 못했다. 해시캐시는 대량 발송의 스팸메일을 차단하기 위해 만들어진 일종의 암호화폐이다.
 +
 
 +
[[이메일]]을 보낼 때 [[우표]] 대신 [[해시캐시]]를 지불하게 한 것이다. 이는 [[스팸메일]]을 대량으로 보내기 위해선 해시캐시를 모두 지불해야 하기 때문에 시간과 비용에 큰 부담이 들 수밖에 없고 결국 스팸메일 발송을 포기하게 된다는 [[아이디어]]이다. 해시캐시를 받기 위해선 컴퓨터 연산 과정을 통한 일정한 해시(hash)를 찾는 PoW 과정을 거쳐야만 한다. PoW의 특징은 수많은 반복 연산을 수행해 특정 해시값을 찾도록 하면서 대량 메일 발송 자체를 어렵게 하고 있다.
 +
해시캐시는 상업적으로 크게 성공하지 못했지만 결국 2009년 사토시 나카모토가 개발한 비트코인의 결정적 아이디어로 작용하는 역사의 한 페이지를 장식하게 된다.
 +
PoW는 암호화폐 시장성 측면에서 최소 가격대 형성을 이룰 수 있게 하고 보안성이 매우 높다는 장점을 가지고 있다. 일명 ‘51% 공격’을 손쉽게 방어할 수 있는 뛰어난 보안성을 자랑한다.
 +
 
 +
[[51% 공격]]이란 공격자가 [[위변조]] 등 악의를 가진 행위를 벌이더라도 51% 이상의 컴퓨팅 파워를 확보해야만 성공할 수 있다는 의미이다. 현실적으로 [[작업증명]](PoW) 방식에서 51% 이상을 획득하는 것은 천문학적 비용이 발생할뿐더러 매우 많은 시간을 필요로 하기 때문에 현실적으로 불가능하다. 그러나 높은 [[채굴 난이도]]에 개인 [[채굴자]]는 [[채굴]]을 전혀 할 수 없는 수준까지 이르자 이를 위해 연산에 필요한 고사양 장비를 도입하게 되는 문제점을 일으키고 있다. 과도한 전력소모로 에너지 낭비가 심각한 사회문제까지 대두되고 있다.<ref>강희영 기자,〈[http://www.cbci.co.kr/news/articleView.html?idxno=325167 [암호화폐 초딩] 작업증명(PoW) 방식이란?]〉, 《CBC NEWS》, 2019-06-03</ref>
 +
 
 +
==활용==
 +
===DAG와 논스===
 +
각 [[노드]]는 현재의 블록을 유효하게 만들 수 있는 논스를 찾아내는 추측을 반복하게 된다.
 +
그리고 올바른 논스를 찾는 데 성공하면 블록 보상을 획득하게 되며, 찾아내지 못하면 네트워크의 다른 노드가 승자 블록을 찾았다는 소식을 들을 때까지 계속 논스 추측을 반복한다.
 +
다른 노드가 승자 블록을 찾으면, 노드는 채굴 중이던 블록을 버리고 새로운 블록을 다운로드한 다음 그 위에서 다음 블록을 채굴하기 시작한다. 하지만 추측 게임을 위한 [[매개변수]] 역시 받게 되며, 다음 블록을 찾기 [[수월한 일종]]의 주사위 쌍을 받게 된다.
 +
이 추측 게임은 개별 노드가 시스템보다 한 수 앞서서 채굴 보상을 쉽게 얻어 가지 못하게 하는 방식으로 설계되어 있다.
 +
따라서 DAG 파일을 작업 증명 알고리즘의 풀이 시간(solution time)을 [[표준화]]하는 방법이라고 할 수 있다. DAG 파일은 채굴 경쟁을 [[평준화]]하며, 나아가서 대용량의 컴퓨팅 성능으로도 경쟁자보다 훨씬 정확한 논스를 추측할 수 없도록 해서 15초의 블록 시간이 유지되도록 한다.
 +
노드는 추측에 사용하는 모든 데이터를 [[블록체인]] 자체에서 가져온다.
 +
암호화 과정에서 암호 [[시드]](seed)를 사용하면 의사 [[난수]]를 생성하고, Ethash 알고리즘이 생성한 암호화 출력의 [[임의성]]을 높일 수 있다.
 +
이더리움과 비트코인에서는 각 노드가 마지막으로 알려진 승자 블록의 해시를 보고 시드를 얻는다.
 +
이와 같은 방식으로 각 노드는 공정한 게임 진행을 위해 올바른 정식 체인 위에서 채굴을 진행할 수밖에 없게 된다. [[잘못된 블록]][[(엉클 블록)]]에 대한 작업 증명을 수행하면 승자 블록을 얻을 수 없다.
 +
덕분에 누군가가 작업 증명 방식의 허점을 노려 대규모 채굴 풀을 통해 이더를 빼돌리는 가짜 블록을 계속 쌓기가 매우 어렵다. 노드가 실제로 PoW 추측 게임을 수행하는 과정은 다음과 같다.
 +
* [[채굴 노드]]는 블록 헤더에서 파생된 암호화 시드로부터 16MB의 의사 난수 캐시를 생성한다.
 +
* 캐시는 노드 사이에 일관성이 유지되는 대규모 1GB [[데이터셋]]을 생성하는 데 사용된다. 이것이 DAG다. 이 데이터셋의 크기는 시간이 지남에 따라 선형적으로 증가하며 모든 전체 노드에 저장된다.
 +
* 논스를 추측하려면 컴퓨터가 DAG 데이터셋의 임의의 조각을 잡고 함께 해시해야 한다. 이것은 해시 함수에 [[솔트]]를 사용하는 방식과 유사하다.
 +
암호학에서 [[단방향 해시 함수]]에 첨가하는 임의의 데이터를 [[솔트]](salt)라고 부른다.
 +
솔트는 논스(nonce)와 마찬가지로 [[무작위성]]을 늘리는, 즉 보안을 강화하는 역할을 한다.<ref name="dsaf"></ref>
 +
 
 +
===빠른 블록 생성===
 +
이더리움의 구성 요소 중 비트코인 [[패러다임]]을 수정한 부분은 모두 빠른 블록 시간을 실현하기 위한 수정이었다. 3~5초 정도의 블록 시간이 가능하다는 점은 수학적으로 [[입증]]되었다.
 +
비트코인과 이더리움의 블록 시간은 [[트랜잭션]]을 수집하기 위한 시간이다.
 +
왜냐하면 이 시스템이 인체가 [[향상성]]을 유지하려고 하는 것처럼 블록을 가능한 한 이상에 가깝게 유지하기 때문이다.
 +
비트코인 [[프로토콜]]은 10분의 블록 시간을 목표로 하며, 이더리움은 15초를 목표로 한다.
 +
진짜 블록이 발견되면 다른 노드가 그 블록을 발견하기 전까지 약간의 시간이 걸린다.
 +
이 시간 동안, 엉클블록을 버리고 새로운 블록 위에서 채굴하기 전까지는 새로운 블록에 대한 합의가 아닌 경쟁이 일어나며, 그 결과 고아 블록에 소비된 에너지는 낭비된다.
 +
채굴자가 대기 시간으로 인해 진짜 블록에 대한 정보를 전달받는 데에 평균 1분이 소요되고, 새 블록이 10분마다 발생하면 전체 네트워크는 [[해시파워]]의 10%를 낭비하는 셈이다.
 +
블록 사이의 시간을 길게 하면 이러한 낭비를 줄일 수 있다.
 +
일부 블록체인 [[이론가]]들의 [[견해]]에 따르면, [[나카모토 사토시]]가 이 비율을 선택한 이유는 이 정도 에너지 낭비를 허용 가능한 수준으로 보았기 때문이라고 한다.
 +
이더리움은 블록 시간을 단축한 [[덕택]]에 더 빠른 트랜잭션 확인이 가능해졌지만, 대가로 빠른 블록 시간에 따른 보안성의 감소를 해결하기 위한 프로토콜 안에서의 대안을 마련해야 했다.
 +
사용자 경험의 관점에서 볼 때 빠른 블록 시간이 가지는 이점은 이미 [[논의]]했다.
 +
그러나 빠른 블록 시간은 바람직하지 않은 영향도 줄 수 있다.
 +
현실적인 문제는 노드가 전 세계에 위치하고 있기 때문에 완벽하게 [[동기화]]되기 어렵다.
 +
아무리 빠른 인터넷 속도를 가진 세계라 하더라도 현재의 기술력으로는 아직 정보가 노드에서 노드로 인터넷을 통해 이동하는 데 시간이 걸리기 때문이다.
 +
이 시간을 [[대기 시간]](latency)라고 부른다.
 +
그리 긴 시간이 아닐 수도 있지만, 트랜잭션 기록 사이의 잔고 내역이 일치하지 않은 충돌을 일으키기에는 충분한 시간이다.
 +
이더리움 또는 비트코인 네트워크를 통해 트랜잭션이 전파되는 데에는 평균적으로 약 12초가 걸린다.
 +
실제로 이 시간의 상당 부분은 노드가 트랜잭션을 [[다운로드]]하는 데 소비된다.
 +
노드는 새로운 블록 발견 소식을 듣기 전에 이전의 블록 위에서 채굴을 계속하고, 새 승자 블록이 나타나면 채굴하던 블록을 버리게 된다.
 +
앞에서 설명한 것처럼, 유효한 블록이 네트워크의 다른 위치에서 발견된 후에도 계속 채굴되는 엉클 블록은 [[실효 블록]](stale block), 또는 [[폐지 블록]](extinct block)이라고 부른다.
 +
블록 시간이 빨라지면 실효(효력을 잃는) 블록이 발생할 확률이 높아지고, 실효 블록이 많을수록 네트워크는 공격에 취약해진다.
 +
더 큰 문제는, 실효 블록의 비율이 높을수록 채굴 풀이 단독 채굴자보다 효율성 측면에서 큰 이점을 가지게 되고 채굴 보상을 독점할 가능성이 커진다는 점이다.
 +
시스템이 불공평해진다는 점을 차치하고서라도, 악의적인 공격자가 네트워크 공격에 필요한 비용이 줄어든다는 큰 문제가 생기게 된다.
 +
<ref name="dsaf"></ref>
 +
 
 +
==종류==
 +
===고아블록===
 +
고아블록(orphan block)은 두 개의 블록이 동시에 승인되었을 때 [[메인체인]]으로 연결되지 못해 따로 떨어져 존재하는 블록을 말한다. [[스테일블록]](stale block)이라고도 한다. 고아블록에도 승인된 거래내역은 담겨져 있기 때문에 트랜잭션이 유실되지는 않는다. 고아블록은 두 명의 채굴자들이 비슷한 시기에 블록을 생성할 때, 혹은 해커가 거래를 교란시키기 위한 공격을 시도할 때 생성된다.
 +
 
 +
채굴자들은 컴퓨팅 파워만 있다면 누구든지, 언제든지 블록 채굴작업에 참여할 수 있다. 전체 네트워크에 있는 수많은 채굴자들이 블록 채굴작업에 참여하기 때문에, 일정한 시간 간격을 두고 한 두 개의 블록만 채굴할 수 있도록 난이도가 자동으로 조정된다. 따라서 네트워크 내에 있는 두 노드가 동시에 블록을 채굴할 가능성은 매우 낮다.
 +
만약 두 노드가 동시에 블록을 채굴하여 블록체인의 [[분기]]가 일어났다고 해도, 한 번 더 두 개의 블록이 동시에 생성될 확률은 적으므로 메인체인은 계속해서 길어지고 더 이상 길어지지 못하고 현재 길이를 유지하는 [[엉클체인]]이 생성된다. 결국 길이가 더 긴 메인체인에 더 많은 데이터가 들어있다고 판단되어 엉클체인은 버려지게 된다. 평균적으로 분기가 일어났을 때 2~3개의 블록이 추가된 후에 블록체인의 분기가 해결된다고 한다. 이 엉클체인에 포함된 블록을 고아블록이라고 한다.<ref>〈[http://wiki.hash.kr/index.php/%EA%B3%A0%EC%95%84%EB%B8%94%EB%A1%9D 고아블록]〉, 《해시넷》</ref>
 +
 
 +
===고아블록과 엉클블록의 차이점===
 +
블록체인에서 블록이 생성될 때 우연히 동시에 블록이 생성되어 블록체인이 [[분기]]([[Fork]]) 경우가 있다. 이때 [[블록체인]]은 무엇을 메인 체인으로 볼 것인가 하는 것을 결정하게 되는데, 비트코인의 경우는 길이가 가장 긴(더 긴 블록체인을 완성한) [[체인]]이 메인 체인으로 인정받아 계속해서 이어지게 된다. 이때 생성되었지만 메인 체인에 포함되지 못한 블록을 고아 블록이라고 한다.
 +
반면 [[이더리움]]의 경우 이러한 메인체인 선택의 문제에서 고스트 [[프로토콜]]을 적용하게 된다. [[고스트 프로토콜]]이란 이더리움 블록체인에서 동시에 블록이 생성될 경우 어느 것을 메인 체인으로 볼 것인지를 결정하는데 필요한, 약속된 규약이라고 할 수 있다.
 +
앞서 말했듯이 보통 가장 길이가 긴 블록체인을 메인 체인으로 삼지만 이더리움의 고스트 프로토콜에 따르면 메인체인이 아닌 엉클블록에게도 보상을 지급(일반 블록 채굴의 93.75% 수준)하며, 메인체인에 엉클 블록을 포함시킨 채굴자는 일종의 트랜젝션 수수료로 일반 채굴 보상의 3.125%의 추가 보상을 받을 수 있게 된다.
 +
이처럼 이더리움의 고스트 프로토콜에 따르면 단순히 블록의 길이가 가장 긴 체인이 메인체인이 되는 것이 아니라 분기된 같은 경로 상에 있는 엉클 블록(최대 2개)까지 다 합쳤을 때 가장 많은 블록을 포함하고 있어 가장 무거운 체인을 [[메인 체인]]으로 삼게 된다.
 +
이렇게 되면 엉클블록들이 발생되더라도 메인체인을 일관되게 이어나갈 수 있고 엉클 블록을 생성한 사람에게도 보상을 줄 수 있으며 단순히 길이가 긴 체인을 선택하는 것에 비해 더 많은 블록을 포함한 무거운 체인을 빠르게 선택하므로 메인체인을 선택하는 시간을 줄여 안정적으로 이어나갈 수 있게 된다고 할 수 있다.
 +
결론적으로 고아블록, 엉클블록이 생성되었을 때 비트코인과 이더리움 블록체인이 메인체인을 선택하는 방법의 차이로 인해 이런 차이점이 생긴다고 할 수 있다.<ref>erc20,〈[https://www.a-ha.io/questions/467c2dcbcaa8a5a8bd1bd5264feea116 이더리움의 비정상적으로 생성된 엉클블록이란 무엇 인가요?]〉, 《아하》, 2019-07-24</ref>
 +
 
 +
==문제점==
 +
블록 생성에 성공하고 검증에 문제가 없어 이더리움 네트워크를 통해 다른 노드들에게 [[브로드캐스팅]]은 되었으나 다른 채굴자가 생성한 다른 블록에 비해 난이도가 낮아 블록체인에 등록되지 못한 블록을 엉클 블록(Uncle Block)이라고 합니다. 비트코인은 고아 블록이라고도 말한다. 이러한 엉클 블록이 많아질 경우 여러가지 문제가 발생하게 된다.
 +
*첫번째, [[트랜잭션]]을 지연시킨다.
 +
가령, 두 명의 채굴자가 거의 동시에 블록을 채굴 할 때 생성된 블록에는 서로 다른 트랜잭션들이 포함되게 된다. 따라서 정상 블록에 포함된 트랜잭션은 처리가 되지만 엉클 블록 내에 트랜잭션들은 즉시 처리되지 않는다.
 +
 
 +
*두번째, 컴퓨팅의 [[파워]] 낭비
 +
두 개의 블록이 거의 같은 시간에 생성 될 경우 블록체인은 두 개의 체인으로 분리되고 이 중에서 길이가 더 긴 체인을 정상으로 등록하게 된다. (비트코인의 분기와 같음) 길이가 짧은 다른 체인은 엉클 블록을 포함한 체인이 되고, 이후 엉클 블록체인 뒤에 연결된 블록들은 모두 엉클 블록이 된다. 결국, 엉클 블록의 짧은 체인의 생성 과정은 불필요한 해시 계산을 위한 컴퓨팅 파워를 쓴 셈이 되는 것이다.
 +
 
 +
*세번째, 보안
 +
엉클 블록 생성 후 다음 블록을 생성하면 [[평균 블록 생성 시간]]이 더 길어지기 때문에 블록 생성 후 난이도가 줄어들게 된다. 난이도가 줄면 [[블록 타임]]이 줄어들고 컴퓨팅 파워가 큰 채굴자의 영향력이 커지는 문제가 밸생한다. 또한, 엉클 블록 비율이 너무 높을 경우 블록체인의 폭이 넓어지고, 자칫 컴퓨팅 파워가 강한 채굴자에 의해 블록체인이 [[악의적]]으로 변경되는 등의 문제가 발생 할 수 있다.<ref name="as"></ref>
  
 +
==대안==
 +
===고스트 프로토콜===
 +
위에 엉클 블록에 의해 발생되는 문제점들을 이야기 해보았는데 그렇다면 이러한 엉클 블록에 대해서 어떻게 해결할 수 있을까? 이더리움은 엉클 블록의 문제를 고스트(Ghost, Greedy Heaviest Observed Subtree) [[알고리즘]]을 사용하여 해결하였다. 고스트 프로토콜은 블록들을 [[트리]] 형태로 생성하여 해당 블록의 [[부모블록]], [[조상블록]] 그리고 [[자손블록]]까지 블록의 [[가중치]] 값을 계산하여 블록의 길이를 정한다. 이렇게 트리 형태의 블록체인이 형성되면 단일 형태로 생성된 악의적인 블록의 선택을 방지할 수 있고 정보의 [[무결성]]을 보장할 수 있을 뿐만 아니라 네트워크의 보안 손실을 방지할 수 있다. 고스트 알고리즘은 블록 생성 시 정상 블록에 최대 2개의 엉클 블록까지 추가하고 보상하여 엉클 블록의 문제점을 해결하게 된다.
 +
다음은 이더리움에서 사용하는 고스트 알고리즘에 대한 설명이다.
 +
* 하나의 블록은 반드시 하나의 [[부모 블록]]을 지정하며, 0 또는 그 이상의 엉클블록을 지정한다. 현재는 최대 엉클 블록은 2개까지 지원한다.
 +
* 블록 A에 포함된 엉클 블록은 다음과 같은 속성을 갖는다.
 +
* 블록 A의 k번째 조상의 직접적인 자손이어야 한다. 여기서 2 <= k <= 7, 실제 한 블록이 생성 된 후 블록체인에 등록되고 최종적으로 반영된 사실이 확인될 때까지 최대 생성 시점 이후 6개의 블록이 블록체인에 연결 될 때까지 기다린다. 이를 '6번 확인'이라고 한다. 엉클 블록 역시 6개의 블록 중 하나에 포함되어야 한다.
 +
* 블록 A의 조상이어서는 안된다.
 +
*엉클 블록은 반드시 유효한 [[블록헤더]]를 가지고 있어야하지만 미리 검증되거나 유효한 블록일 필요는 없다.
 +
엉클 블록의 채굴자는 일반 블록 생성 시에 받는 보상의 93.75%를 보상으로 받고, 엉클 블록이 포함된 정상 블록의 채굴자에게는 3.125%의 추가 보상을 지급합니다. 참고로, 엉클 블록 내에 포함된 트랜잭션은 처리되지 않기 때문에 수수료 는 엉클 블록 채굴자에게 지급되지 않으나, [[비잔티움 버전]]의 경우 엉클 블록의 채굴자는 해당 엉클 블록을 포함한 정상 블록과 블록 번호 차이에 따른 상대적인 엉클 블록 보상을 받게 된다.
 +
*블록 채굴자의 보상: 블록 보상(3이더) + 트랙잭션 수수료 + 엉클 블록 1개당 블록 보상의 3.125%(최대 2개)
 +
*엉클 블록 채굴자의 보상: (8 - (정상 블록 번호 - 엉클 블록 번호)) / 8 * 블록 보상<ref name="as">〈[http://wiki.hash.kr/index.php/%EA%B3%A0%EC%8A%A4%ED%8A%B8_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C 고스트 프로토콜]〉, 《해시넷》</ref>
  
 +
===중계망 활용===
 +
이더리움의 엉클블록은 정상 블록은 아니지만 거의 비슷하게 채굴자들이 보상을 받지만 그럼에도 불구하고 엉클블록을 줄이는것이 효율성을 더 높여준다고 [[중계망]]을 활용하기도 한다.
 +
이더리움의 고스트 프로토콜에 따르면 단순히 길이가 긴 체인을 선택하는 것에 비해 더 많은 블록을 포함(엉클블록까지)한 무거운 체인을 메인 체인으로 선택하게 된다.
 +
그런데 엉클 블록까지 포함하여 블록을 이어나가는 것도 좋지만 그것보다 더 좋은 것은 애초에 엉클블록이 발생되지 않도록 그 확률을 줄이는 것이라고 할 수 있다.
 +
그렇기 때문에 [[릴레이 네트워크]], 즉 중계망을 통한 엉클 블록의 생성을 줄이는 방법이 제안되기도 한다. 이 중계망은 블록의 생성 여부에 대한 정보를 빠르게 전달해 주는 역할을 한다. 지금은 블록 생성이 되고 그것이 노드들에게 전파되고 그 노드가 또 다른 노드들에게 전파하는 방식으로 이루어진다고 할 때 중계망이 있어 블록 생성에 대한 정보를 각 [[마이닝 노드]]나 [[풀노드]]에게 빠르게 전달해 줄 수 있다면 엉클 블록의 생성이 줄어들 수 있게 되는 것이다.
 +
예를 들어 강원도에서 산불이 일어났다고 할 때 방송국에서 그 현장에 있는 사람과 직접 연락할 방법이 없다면 입에서 입으로 전달되는 정보, 인터넷에 올라온 글이나 사진 등을 찾아서 정보를 느리게 전달할 수 밖에 없고 그 정보가 맞는 것인지 확인하기도 어려울 것이다.
 +
하지만 만약 방송국이 중계차와 기자를 사건 현장으로 파견한다면 어떻게 될까? 사건 현장과 방송국 사이에 위치하는 중계차가 빠르게 정보를 제시함으로써 잘못된 정보를 전달할 수 있는 위험이나 최신 정보를 전달하지 못하는 한계를 극복할 수 있게 될 것이다.
 +
이와 마찬가지로 이더리움이 중계망을 운영하게 되면 블록 생성에 대한 최신 정보가 빠르게 전달될 수 있기 때문에 엉클 블록의 생성이 줄어들 수 있다.<ref>erc20,〈[https://www.a-ha.io/questions/4c9231f630363ca8a4f68539c926da8b 엉클블록을 줄이기 위한 중계망은 어떻게 사용되나요?]〉, 《아하》, 2019-05-27</ref>
  
 
{{각주}}
 
{{각주}}
 +
 
==참고자료==
 
==참고자료==
 
* 이재운 기자, 〈[http://www.edaily.co.kr/news/read?newsId=03552246619402768&mediaCodeNo=257&OutLnkChk=Y 국산 블록체인 ‘하이콘’, 고스트프로토콜로 채굴 효율성-안정성↑]〉, 《이데일리》, 2018-11-05
 
* 이재운 기자, 〈[http://www.edaily.co.kr/news/read?newsId=03552246619402768&mediaCodeNo=257&OutLnkChk=Y 국산 블록체인 ‘하이콘’, 고스트프로토콜로 채굴 효율성-안정성↑]〉, 《이데일리》, 2018-11-05
 
* 박재균 기자, 〈[http://www.fntoday.co.kr/news/articleView.html?idxno=171977 ‘하이콘’, 고스트프로토콜로 채굴 효율성-안정성 높인다]〉, 《파이낸스투데이》, 2018-11-05
 
* 박재균 기자, 〈[http://www.fntoday.co.kr/news/articleView.html?idxno=171977 ‘하이콘’, 고스트프로토콜로 채굴 효율성-안정성 높인다]〉, 《파이낸스투데이》, 2018-11-05
 
* 김형중 교수, 〈[http://www.koreaittimes.com/news/articleView.html?idxno=74653 (김형중 칼럼) 엉클 마이닝]〉, 《코리아아이티타임즈》, 2017-10-13
 
* 김형중 교수, 〈[http://www.koreaittimes.com/news/articleView.html?idxno=74653 (김형중 칼럼) 엉클 마이닝]〉, 《코리아아이티타임즈》, 2017-10-13
 +
* etainclub, 〈[https://steemit.com/coinkorea/@etainclub/smart-contract-8-2 [Smart Contract 개발] #8 이더리움 핵심 개요 정리 2]〉, 《steemit》
 +
*〈[http://wiki.hash.kr/index.php/%EB%A9%94%EC%9D%B8%EC%B2%B4%EC%9D%B8 메인체인]〉, 《해시넷》
 +
*〈[https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%8D%94%EB%A6%AC%EC%9B%80 이더리움]〉, 《위키백과》
 +
* 강희영 기자,〈[http://www.cbci.co.kr/news/articleView.html?idxno=325167 [암호화폐 초딩] 작업증명(PoW) 방식이란?]〉, 《CBC NEWS》, 2019-06-03
 +
*〈[https://www.tokenpost.kr/terms/14062 엉클 블록]〉, 《토큰 포스트》
 +
* 브이핏,〈[https://m.blog.naver.com/PostView.nhn?blogId=lool2389&logNo=221293806380&proxyReferer=https%3A%2F%2Fwww.google.com%2F 엉클 블록, PoW과 PoS]〉, 《네이버 블로그》, 2018-06-07
 +
* erc20,〈[https://www.a-ha.io/questions/4c9231f630363ca8a4f68539c926da8b 엉클블록을 줄이기 위한 중계망은 어떻게 사용되나요?]〉, 《아하》, 2019-05-27
 +
*〈[http://wiki.hash.kr/index.php/%EA%B3%A0%EC%8A%A4%ED%8A%B8_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C 고스트 프로토콜]〉, 《해시넷》
 +
*〈[http://wiki.hash.kr/index.php/%EA%B3%A0%EC%95%84%EB%B8%94%EB%A1%9D 고아블록]〉, 《해시넷》
 +
* erc20,〈[https://www.a-ha.io/questions/467c2dcbcaa8a5a8bd1bd5264feea116 이더리움의 비정상적으로 생성된 엉클블록이란 무엇 인가요?]〉, 《아하》, 2019-07-24
  
 
==같이 보기==
 
==같이 보기==
24번째 줄: 157번째 줄:
 
* [[수정 고스트 프로토콜]]
 
* [[수정 고스트 프로토콜]]
  
{{ 블록체인 기술|토막글}}
+
{{블록체인 기술|검토 필요}}

2022년 3월 17일 (목) 08:44 기준 최신판

엉클블록(uncle block)은 블록의 유효성은 통과되었지만 최종 블록으로 인정받지 못하여 고아블록으로 이루어진 체인의 첫 번째 블록이다. 이더리움, 하이콘 등에서는 엉클블록의 생성자도 보상을 지급하고, 이에 대한 해시네트워크에 포함시켜 안정적으로 네트워크를 유지한다.

개요[편집]

블록 생성 시간은 매우 중요하다. 블록 생성이 매우 빠르면, 즉 블록 생성 난이도가 낮으면 네트워크의 보안 수준이 나빠진다. 반대로, 블록 생성이 매우 느리면, 즉 블록 생성 난이도가 높으면 네트워크 보안 수준은 올라가지만, 언제 블록이 생성되는지 알기 어렵기 때문에, 트랜잭션 처리가 언제 될지 예측하기 어려운 문제가 발생하게 된다. 따라서 적절한 블록 생성 시간이 설정되어야 하는 것이다. 만약 두 채굴자가 거의 비슷한 시간에 블록을 채굴한다면 어떻게 처리해야 할까? 이더리움 네트워크는 총 블록의 채굴 난이도가 더 높은 체인을 선택한다. 그러면 채굴 난이도가 낮은 체인은 그냥 버리는게 좋을까? 이처럼 선택되지 못한 블록을 스테일 블록(stale block)이라고 하는데, 이더리움에서는 스테일 블록엉클 블록(uncle block)이라고 부른다.[1]

특징[편집]

이더리움의 경우 현재 합의 알고리즘POW(Proof of Work, 작업 증명 방식)로 블록을 계속해서 생성하고 있다. 만약 서로 다른 채굴자가 동시에 블록을 생성하는 경우, 더 어려운 채굴 난이도와 큰 논스(nonce) 값을 가진 블록은 블록체인에 연결되고, 다른 하나는 버려지게 된다. 이 때, 버려지는 블록을 엉클 블록이라고 한다.[2]

이더리움의 엉클블록은 비트코인고아블록에 상당하는 것이지만, 비트코인에서는 무효화되는 고아블록이 이더리움에서는 엉클블록으로서 메인체인의 구성 요소로 다뤄지며 채굴에 대한 보상도 주어진다. 엉클블록을 통해 채굴의 효율성과 네트워크의 안정성을 높일 수 있으며, 이더리움 블록체인에 있어 엉클블록의 비율 조작은 신규 이더리움 발행빈도의 부정조작을 방지하는 의미 또한 있다.

엉클블록은 블록 생성 평균 시간이 짧아지면 자주 발생하게 된다. 왜냐하면, 채굴자가 블록을 찾아서 다른 노드에 전파시키는데 시간이 소요되고 블록 생성 시간이 짧다는 것은 채굴자들이 쉽게 퍼즐의 해답을 찾을 수 있다는 말이 되는데, 이렇게 되면 블록을 찾았다는 신호가 전달되기 전에 다른 채굴자가 새로운 블록을 찾을 수 있기 때문이다. 엉클 블록의 문제점은 트랜잭션 승인(confirmation)을 늦춘다는 것이다. 어떤 트랜잭션이 엉클블록에 속한다면, 그 트랜잭션은 승인되지 못한다. 즉 해당 트랜잭션이 포함된 블록이 다시 채굴되어야 한다는 것이다. 또 엉클 블록이 자주 발생한다는 것은 엉클블록을 채굴하는데 그만큼 해시파워가 소모되었다는 것이고, 즉 해시파워가 불필요한 곳에 사용된 것이다. 이것은 평균 블록 생성 시간을 늦추게 되고, 평균 블록 생성 시간이 늦어졌기 때문에, 결국 난이도를 낮추게 되어 네트워크 보안 수준을 떨어트리는 문제까지 번진다.

이더리움은 고스트 프로토콜(Ghost Protocol)이란 방식으로 이러한 엉클블록 문제를 해결한다. 즉 정상적인 블록들이 N개의 엉클블록을 가질 수 있게 함으로써, 엉클블록이 메인체인에 붙도록 한 것이다. 그렇게 되면 엉클블록도 메인체인에 속하므로, 채굴 난이도가 낮아지지 않는 효과를 가져온다.[1]

엉클블록 규칙과 보상[편집]

엉클블록에 관한 규칙은 다음과 같다.

  • 이더리움의 GHOST 구현을 통해, 블록과 함께 유효성 검사를 받는 엉클블록은 정식 블록 보상의 8분의 7, 또는 4.375 이더를 받는다.
  • 블록당 최대 두 개의 엉클 블록이 허용된다.
  • 두 개의 엉클 블록은 선착순으로 선택된다.
  • 엉클 블록에 대해서는 트랜잭션 수수료의 징수나 지불이 이루어지지 않는다. 사용자는 유효한 블록에 이미 한 번 비용을 지불했고 명령을 실행하기 때문이다.
  • 결정적으로, 보상을 받기 위해서는 엉클 블록이 지난 7블록 이내의 승자 블록과 동일한 조상을 가져야 한다.[3]

이더리움[편집]

Ethereum은 블록체인 기술을 기반으로 스마트 계약 기능을 구현하기 위한 분산 컴퓨팅 플랫폼이다. 이더리움이 제공하는 이더(Ether)는 비트코인과 마찬가지로 암호화폐의 일종으로 거래되고 있다. 이더리움의 화폐 단위는 ETH로 표시한다. 비트코인 이후에 등장한 알트코인 중 시가 총액이 가장 높은 대표적인 알트코인이다. Ethereum의 정확한 발음은 미국식으로는 이씨리엄([iˈθɪɹiəm])이고, 영국식으로는 이씨어리엄([iˈθɪəɹiəm])이다. 이더리움은 초기에 '이시리움' 또는 '에테리움'이라고 표기하기도 하였으나, 요즘에는 '이더리움'으로 표기하는 경우가 많다. 이더리움에서 하나의 블록만이 블록체인에 올라가고 나머지 하나는 버려지게 되는데, 이 때 버려지는 블록을 엉클블록이라고 한다. 이더리움은 2015년 7월 30일 비탈릭 부테린(Vitalik Buterin)이 개발하였다. 비탈릭 부테린가상화폐인 비트코인에 사용된 핵심 기술인 블록체인에 화폐 거래 기록뿐 아니라 계약서 등의 추가 정보를 기록할 수 있다는 점에 착안하여, 전 세계 수많은 사용자들이 보유하고 있는 컴퓨팅 자원을 활용해 이더리움 가상 머신(EVM)을 만들고, 이 플랫폼을 이용하여 SNS, 이메일, 전자투표 등 다양한 정보를 기록하는 시스템을 창안했다. 이더리움은 C++, 자바, 파이썬, GO 등 주요 프로그래밍 언어를 지원한다. 이더리움을 사물 인터넷(IoT)에 적용하면 기계 간 금융 거래도 가능해진다. 예를 들어 고장난 청소로봇이 정비로봇에 돈을 내고 정비를 받고, 청소로봇은 돈을 벌기 위해 정비로봇의 집을 청소하는 것도 가능해진다.

이더리움에서 스마트 계약을 처리하기 위한 가상 머신(EVM)은 모든 형태의 알고리즘을 처리할 수 있는 튜링 기계로서, 먼저 들어온 데이터를 우선적으로 처리하는 스택 구조를 가진다.EVM은 저수준의 기계어에 가까운 바이트 코드만을 실행할 수 있기 때문에 고급 프로그래밍 언어를 실행하기 위해서는 바이트 코드컴파일 과정을 거쳐야 한다. 이 가상 머신을 이용하기 위해서는 '가스'라는 대가를 지불해야 한다.[4]

메인체인[편집]

메인체인(main chain)은 제네시스블록부터 가장 최근의 블록까지 연결되어 있는 체인이다. 최장체인 또는 주요체인이라고도 부르며 가장 많은 해시파워가 투입되는 체인에 그 다음 블록이 연결된다. 네트워크 전파 속도 차이로 인해 하나의 체인으로 수렴하기 전에 같은 블록을 채굴하는 경우가 종종 발생하며 이는 분기, 즉 포크 를 유발한다. 동시 채굴이라는 용어는 정확히 같은 순간에 채굴에 성공했다는 개념이 아니며, 모든 노드들에게 블록이 전파되기 전, 같은 블록에 있어서 다른 노드에 의해 채굴이 완성되면 포크가 생겼다고 볼 수 있다.[5]

작업증명방식(POW)[편집]

작업증명(PoW, Proof of Work)은 블록체인 상의 대표적 알고리즘이다. 목표값 이하의 해시를 찾는 과정을 무수히 반복하면서 해당 작업에 참여했음을 증명하는 방식의 합의 알고리즘을 말한다. 작업증명 과정은 보통 마이닝(채굴)을 통해 이뤄진다. 암호화폐 2대 대장주인 비트코인과 이더리움이 PoW 방식을 사용하고 있다. 비트코인 계열의 라이트코인, 비트코인캐시, 비트코인골드, 시아코인 등도 PoW의 대표 암호화폐며 익명성을 보장받는 다크코인 계열인 모네로, 지캐시 등도 PoW 방식을 이용한다.PoW 개념은 지난 1993년 신시아 더크(Cynthia Dwork)와 모니 나노어(Moni Naor)가 처음으로 고안되었다. 이후 마커스 제이콥슨(Markus_Jakobsson)과 아리 쥬엘스(Ari Juels)가 1999년 Proof of Work라는 명칭을 사용하면서 널리 알려되어 진다. 앞서 1997년 아담 백(Adam Back)이 개발한 해시캐시가 PoW를 적용한 사례이지만 큰 성과를 보진 못했다. 해시캐시는 대량 발송의 스팸메일을 차단하기 위해 만들어진 일종의 암호화폐이다.

이메일을 보낼 때 우표 대신 해시캐시를 지불하게 한 것이다. 이는 스팸메일을 대량으로 보내기 위해선 해시캐시를 모두 지불해야 하기 때문에 시간과 비용에 큰 부담이 들 수밖에 없고 결국 스팸메일 발송을 포기하게 된다는 아이디어이다. 해시캐시를 받기 위해선 컴퓨터 연산 과정을 통한 일정한 해시(hash)를 찾는 PoW 과정을 거쳐야만 한다. PoW의 특징은 수많은 반복 연산을 수행해 특정 해시값을 찾도록 하면서 대량 메일 발송 자체를 어렵게 하고 있다. 해시캐시는 상업적으로 크게 성공하지 못했지만 결국 2009년 사토시 나카모토가 개발한 비트코인의 결정적 아이디어로 작용하는 역사의 한 페이지를 장식하게 된다. PoW는 암호화폐 시장성 측면에서 최소 가격대 형성을 이룰 수 있게 하고 보안성이 매우 높다는 장점을 가지고 있다. 일명 ‘51% 공격’을 손쉽게 방어할 수 있는 뛰어난 보안성을 자랑한다.

51% 공격이란 공격자가 위변조 등 악의를 가진 행위를 벌이더라도 51% 이상의 컴퓨팅 파워를 확보해야만 성공할 수 있다는 의미이다. 현실적으로 작업증명(PoW) 방식에서 51% 이상을 획득하는 것은 천문학적 비용이 발생할뿐더러 매우 많은 시간을 필요로 하기 때문에 현실적으로 불가능하다. 그러나 높은 채굴 난이도에 개인 채굴자채굴을 전혀 할 수 없는 수준까지 이르자 이를 위해 연산에 필요한 고사양 장비를 도입하게 되는 문제점을 일으키고 있다. 과도한 전력소모로 에너지 낭비가 심각한 사회문제까지 대두되고 있다.[6]

활용[편집]

DAG와 논스[편집]

노드는 현재의 블록을 유효하게 만들 수 있는 논스를 찾아내는 추측을 반복하게 된다. 그리고 올바른 논스를 찾는 데 성공하면 블록 보상을 획득하게 되며, 찾아내지 못하면 네트워크의 다른 노드가 승자 블록을 찾았다는 소식을 들을 때까지 계속 논스 추측을 반복한다. 다른 노드가 승자 블록을 찾으면, 노드는 채굴 중이던 블록을 버리고 새로운 블록을 다운로드한 다음 그 위에서 다음 블록을 채굴하기 시작한다. 하지만 추측 게임을 위한 매개변수 역시 받게 되며, 다음 블록을 찾기 수월한 일종의 주사위 쌍을 받게 된다. 이 추측 게임은 개별 노드가 시스템보다 한 수 앞서서 채굴 보상을 쉽게 얻어 가지 못하게 하는 방식으로 설계되어 있다. 따라서 DAG 파일을 작업 증명 알고리즘의 풀이 시간(solution time)을 표준화하는 방법이라고 할 수 있다. DAG 파일은 채굴 경쟁을 평준화하며, 나아가서 대용량의 컴퓨팅 성능으로도 경쟁자보다 훨씬 정확한 논스를 추측할 수 없도록 해서 15초의 블록 시간이 유지되도록 한다. 노드는 추측에 사용하는 모든 데이터를 블록체인 자체에서 가져온다. 암호화 과정에서 암호 시드(seed)를 사용하면 의사 난수를 생성하고, Ethash 알고리즘이 생성한 암호화 출력의 임의성을 높일 수 있다. 이더리움과 비트코인에서는 각 노드가 마지막으로 알려진 승자 블록의 해시를 보고 시드를 얻는다. 이와 같은 방식으로 각 노드는 공정한 게임 진행을 위해 올바른 정식 체인 위에서 채굴을 진행할 수밖에 없게 된다. 잘못된 블록(엉클 블록)에 대한 작업 증명을 수행하면 승자 블록을 얻을 수 없다. 덕분에 누군가가 작업 증명 방식의 허점을 노려 대규모 채굴 풀을 통해 이더를 빼돌리는 가짜 블록을 계속 쌓기가 매우 어렵다. 노드가 실제로 PoW 추측 게임을 수행하는 과정은 다음과 같다.

  • 채굴 노드는 블록 헤더에서 파생된 암호화 시드로부터 16MB의 의사 난수 캐시를 생성한다.
  • 캐시는 노드 사이에 일관성이 유지되는 대규모 1GB 데이터셋을 생성하는 데 사용된다. 이것이 DAG다. 이 데이터셋의 크기는 시간이 지남에 따라 선형적으로 증가하며 모든 전체 노드에 저장된다.
  • 논스를 추측하려면 컴퓨터가 DAG 데이터셋의 임의의 조각을 잡고 함께 해시해야 한다. 이것은 해시 함수에 솔트를 사용하는 방식과 유사하다.

암호학에서 단방향 해시 함수에 첨가하는 임의의 데이터를 솔트(salt)라고 부른다. 솔트는 논스(nonce)와 마찬가지로 무작위성을 늘리는, 즉 보안을 강화하는 역할을 한다.[3]

빠른 블록 생성[편집]

이더리움의 구성 요소 중 비트코인 패러다임을 수정한 부분은 모두 빠른 블록 시간을 실현하기 위한 수정이었다. 3~5초 정도의 블록 시간이 가능하다는 점은 수학적으로 입증되었다. 비트코인과 이더리움의 블록 시간은 트랜잭션을 수집하기 위한 시간이다. 왜냐하면 이 시스템이 인체가 향상성을 유지하려고 하는 것처럼 블록을 가능한 한 이상에 가깝게 유지하기 때문이다. 비트코인 프로토콜은 10분의 블록 시간을 목표로 하며, 이더리움은 15초를 목표로 한다. 진짜 블록이 발견되면 다른 노드가 그 블록을 발견하기 전까지 약간의 시간이 걸린다. 이 시간 동안, 엉클블록을 버리고 새로운 블록 위에서 채굴하기 전까지는 새로운 블록에 대한 합의가 아닌 경쟁이 일어나며, 그 결과 고아 블록에 소비된 에너지는 낭비된다. 채굴자가 대기 시간으로 인해 진짜 블록에 대한 정보를 전달받는 데에 평균 1분이 소요되고, 새 블록이 10분마다 발생하면 전체 네트워크는 해시파워의 10%를 낭비하는 셈이다. 블록 사이의 시간을 길게 하면 이러한 낭비를 줄일 수 있다. 일부 블록체인 이론가들의 견해에 따르면, 나카모토 사토시가 이 비율을 선택한 이유는 이 정도 에너지 낭비를 허용 가능한 수준으로 보았기 때문이라고 한다. 이더리움은 블록 시간을 단축한 덕택에 더 빠른 트랜잭션 확인이 가능해졌지만, 대가로 빠른 블록 시간에 따른 보안성의 감소를 해결하기 위한 프로토콜 안에서의 대안을 마련해야 했다. 사용자 경험의 관점에서 볼 때 빠른 블록 시간이 가지는 이점은 이미 논의했다. 그러나 빠른 블록 시간은 바람직하지 않은 영향도 줄 수 있다. 현실적인 문제는 노드가 전 세계에 위치하고 있기 때문에 완벽하게 동기화되기 어렵다. 아무리 빠른 인터넷 속도를 가진 세계라 하더라도 현재의 기술력으로는 아직 정보가 노드에서 노드로 인터넷을 통해 이동하는 데 시간이 걸리기 때문이다. 이 시간을 대기 시간(latency)라고 부른다. 그리 긴 시간이 아닐 수도 있지만, 트랜잭션 기록 사이의 잔고 내역이 일치하지 않은 충돌을 일으키기에는 충분한 시간이다. 이더리움 또는 비트코인 네트워크를 통해 트랜잭션이 전파되는 데에는 평균적으로 약 12초가 걸린다. 실제로 이 시간의 상당 부분은 노드가 트랜잭션을 다운로드하는 데 소비된다. 노드는 새로운 블록 발견 소식을 듣기 전에 이전의 블록 위에서 채굴을 계속하고, 새 승자 블록이 나타나면 채굴하던 블록을 버리게 된다. 앞에서 설명한 것처럼, 유효한 블록이 네트워크의 다른 위치에서 발견된 후에도 계속 채굴되는 엉클 블록은 실효 블록(stale block), 또는 폐지 블록(extinct block)이라고 부른다. 블록 시간이 빨라지면 실효(효력을 잃는) 블록이 발생할 확률이 높아지고, 실효 블록이 많을수록 네트워크는 공격에 취약해진다. 더 큰 문제는, 실효 블록의 비율이 높을수록 채굴 풀이 단독 채굴자보다 효율성 측면에서 큰 이점을 가지게 되고 채굴 보상을 독점할 가능성이 커진다는 점이다. 시스템이 불공평해진다는 점을 차치하고서라도, 악의적인 공격자가 네트워크 공격에 필요한 비용이 줄어든다는 큰 문제가 생기게 된다. [3]

종류[편집]

고아블록[편집]

고아블록(orphan block)은 두 개의 블록이 동시에 승인되었을 때 메인체인으로 연결되지 못해 따로 떨어져 존재하는 블록을 말한다. 스테일블록(stale block)이라고도 한다. 고아블록에도 승인된 거래내역은 담겨져 있기 때문에 트랜잭션이 유실되지는 않는다. 고아블록은 두 명의 채굴자들이 비슷한 시기에 블록을 생성할 때, 혹은 해커가 거래를 교란시키기 위한 공격을 시도할 때 생성된다.

채굴자들은 컴퓨팅 파워만 있다면 누구든지, 언제든지 블록 채굴작업에 참여할 수 있다. 전체 네트워크에 있는 수많은 채굴자들이 블록 채굴작업에 참여하기 때문에, 일정한 시간 간격을 두고 한 두 개의 블록만 채굴할 수 있도록 난이도가 자동으로 조정된다. 따라서 네트워크 내에 있는 두 노드가 동시에 블록을 채굴할 가능성은 매우 낮다. 만약 두 노드가 동시에 블록을 채굴하여 블록체인의 분기가 일어났다고 해도, 한 번 더 두 개의 블록이 동시에 생성될 확률은 적으므로 메인체인은 계속해서 길어지고 더 이상 길어지지 못하고 현재 길이를 유지하는 엉클체인이 생성된다. 결국 길이가 더 긴 메인체인에 더 많은 데이터가 들어있다고 판단되어 엉클체인은 버려지게 된다. 평균적으로 분기가 일어났을 때 2~3개의 블록이 추가된 후에 블록체인의 분기가 해결된다고 한다. 이 엉클체인에 포함된 블록을 고아블록이라고 한다.[7]

고아블록과 엉클블록의 차이점[편집]

블록체인에서 블록이 생성될 때 우연히 동시에 블록이 생성되어 블록체인이 분기(Fork) 경우가 있다. 이때 블록체인은 무엇을 메인 체인으로 볼 것인가 하는 것을 결정하게 되는데, 비트코인의 경우는 길이가 가장 긴(더 긴 블록체인을 완성한) 체인이 메인 체인으로 인정받아 계속해서 이어지게 된다. 이때 생성되었지만 메인 체인에 포함되지 못한 블록을 고아 블록이라고 한다. 반면 이더리움의 경우 이러한 메인체인 선택의 문제에서 고스트 프로토콜을 적용하게 된다. 고스트 프로토콜이란 이더리움 블록체인에서 동시에 블록이 생성될 경우 어느 것을 메인 체인으로 볼 것인지를 결정하는데 필요한, 약속된 규약이라고 할 수 있다. 앞서 말했듯이 보통 가장 길이가 긴 블록체인을 메인 체인으로 삼지만 이더리움의 고스트 프로토콜에 따르면 메인체인이 아닌 엉클블록에게도 보상을 지급(일반 블록 채굴의 93.75% 수준)하며, 메인체인에 엉클 블록을 포함시킨 채굴자는 일종의 트랜젝션 수수료로 일반 채굴 보상의 3.125%의 추가 보상을 받을 수 있게 된다. 이처럼 이더리움의 고스트 프로토콜에 따르면 단순히 블록의 길이가 가장 긴 체인이 메인체인이 되는 것이 아니라 분기된 같은 경로 상에 있는 엉클 블록(최대 2개)까지 다 합쳤을 때 가장 많은 블록을 포함하고 있어 가장 무거운 체인을 메인 체인으로 삼게 된다. 이렇게 되면 엉클블록들이 발생되더라도 메인체인을 일관되게 이어나갈 수 있고 엉클 블록을 생성한 사람에게도 보상을 줄 수 있으며 단순히 길이가 긴 체인을 선택하는 것에 비해 더 많은 블록을 포함한 무거운 체인을 빠르게 선택하므로 메인체인을 선택하는 시간을 줄여 안정적으로 이어나갈 수 있게 된다고 할 수 있다. 결론적으로 고아블록, 엉클블록이 생성되었을 때 비트코인과 이더리움 블록체인이 메인체인을 선택하는 방법의 차이로 인해 이런 차이점이 생긴다고 할 수 있다.[8]

문제점[편집]

블록 생성에 성공하고 검증에 문제가 없어 이더리움 네트워크를 통해 다른 노드들에게 브로드캐스팅은 되었으나 다른 채굴자가 생성한 다른 블록에 비해 난이도가 낮아 블록체인에 등록되지 못한 블록을 엉클 블록(Uncle Block)이라고 합니다. 비트코인은 고아 블록이라고도 말한다. 이러한 엉클 블록이 많아질 경우 여러가지 문제가 발생하게 된다.

가령, 두 명의 채굴자가 거의 동시에 블록을 채굴 할 때 생성된 블록에는 서로 다른 트랜잭션들이 포함되게 된다. 따라서 정상 블록에 포함된 트랜잭션은 처리가 되지만 엉클 블록 내에 트랜잭션들은 즉시 처리되지 않는다.

  • 두번째, 컴퓨팅의 파워 낭비

두 개의 블록이 거의 같은 시간에 생성 될 경우 블록체인은 두 개의 체인으로 분리되고 이 중에서 길이가 더 긴 체인을 정상으로 등록하게 된다. (비트코인의 분기와 같음) 길이가 짧은 다른 체인은 엉클 블록을 포함한 체인이 되고, 이후 엉클 블록체인 뒤에 연결된 블록들은 모두 엉클 블록이 된다. 결국, 엉클 블록의 짧은 체인의 생성 과정은 불필요한 해시 계산을 위한 컴퓨팅 파워를 쓴 셈이 되는 것이다.

  • 세번째, 보안

엉클 블록 생성 후 다음 블록을 생성하면 평균 블록 생성 시간이 더 길어지기 때문에 블록 생성 후 난이도가 줄어들게 된다. 난이도가 줄면 블록 타임이 줄어들고 컴퓨팅 파워가 큰 채굴자의 영향력이 커지는 문제가 밸생한다. 또한, 엉클 블록 비율이 너무 높을 경우 블록체인의 폭이 넓어지고, 자칫 컴퓨팅 파워가 강한 채굴자에 의해 블록체인이 악의적으로 변경되는 등의 문제가 발생 할 수 있다.[9]

대안[편집]

고스트 프로토콜[편집]

위에 엉클 블록에 의해 발생되는 문제점들을 이야기 해보았는데 그렇다면 이러한 엉클 블록에 대해서 어떻게 해결할 수 있을까? 이더리움은 엉클 블록의 문제를 고스트(Ghost, Greedy Heaviest Observed Subtree) 알고리즘을 사용하여 해결하였다. 고스트 프로토콜은 블록들을 트리 형태로 생성하여 해당 블록의 부모블록, 조상블록 그리고 자손블록까지 블록의 가중치 값을 계산하여 블록의 길이를 정한다. 이렇게 트리 형태의 블록체인이 형성되면 단일 형태로 생성된 악의적인 블록의 선택을 방지할 수 있고 정보의 무결성을 보장할 수 있을 뿐만 아니라 네트워크의 보안 손실을 방지할 수 있다. 고스트 알고리즘은 블록 생성 시 정상 블록에 최대 2개의 엉클 블록까지 추가하고 보상하여 엉클 블록의 문제점을 해결하게 된다. 다음은 이더리움에서 사용하는 고스트 알고리즘에 대한 설명이다.

  • 하나의 블록은 반드시 하나의 부모 블록을 지정하며, 0 또는 그 이상의 엉클블록을 지정한다. 현재는 최대 엉클 블록은 2개까지 지원한다.
  • 블록 A에 포함된 엉클 블록은 다음과 같은 속성을 갖는다.
  • 블록 A의 k번째 조상의 직접적인 자손이어야 한다. 여기서 2 <= k <= 7, 실제 한 블록이 생성 된 후 블록체인에 등록되고 최종적으로 반영된 사실이 확인될 때까지 최대 생성 시점 이후 6개의 블록이 블록체인에 연결 될 때까지 기다린다. 이를 '6번 확인'이라고 한다. 엉클 블록 역시 6개의 블록 중 하나에 포함되어야 한다.
  • 블록 A의 조상이어서는 안된다.
  • 엉클 블록은 반드시 유효한 블록헤더를 가지고 있어야하지만 미리 검증되거나 유효한 블록일 필요는 없다.

엉클 블록의 채굴자는 일반 블록 생성 시에 받는 보상의 93.75%를 보상으로 받고, 엉클 블록이 포함된 정상 블록의 채굴자에게는 3.125%의 추가 보상을 지급합니다. 참고로, 엉클 블록 내에 포함된 트랜잭션은 처리되지 않기 때문에 수수료 는 엉클 블록 채굴자에게 지급되지 않으나, 비잔티움 버전의 경우 엉클 블록의 채굴자는 해당 엉클 블록을 포함한 정상 블록과 블록 번호 차이에 따른 상대적인 엉클 블록 보상을 받게 된다.

  • 블록 채굴자의 보상: 블록 보상(3이더) + 트랙잭션 수수료 + 엉클 블록 1개당 블록 보상의 3.125%(최대 2개)
  • 엉클 블록 채굴자의 보상: (8 - (정상 블록 번호 - 엉클 블록 번호)) / 8 * 블록 보상[9]

중계망 활용[편집]

이더리움의 엉클블록은 정상 블록은 아니지만 거의 비슷하게 채굴자들이 보상을 받지만 그럼에도 불구하고 엉클블록을 줄이는것이 효율성을 더 높여준다고 중계망을 활용하기도 한다. 이더리움의 고스트 프로토콜에 따르면 단순히 길이가 긴 체인을 선택하는 것에 비해 더 많은 블록을 포함(엉클블록까지)한 무거운 체인을 메인 체인으로 선택하게 된다. 그런데 엉클 블록까지 포함하여 블록을 이어나가는 것도 좋지만 그것보다 더 좋은 것은 애초에 엉클블록이 발생되지 않도록 그 확률을 줄이는 것이라고 할 수 있다. 그렇기 때문에 릴레이 네트워크, 즉 중계망을 통한 엉클 블록의 생성을 줄이는 방법이 제안되기도 한다. 이 중계망은 블록의 생성 여부에 대한 정보를 빠르게 전달해 주는 역할을 한다. 지금은 블록 생성이 되고 그것이 노드들에게 전파되고 그 노드가 또 다른 노드들에게 전파하는 방식으로 이루어진다고 할 때 중계망이 있어 블록 생성에 대한 정보를 각 마이닝 노드풀노드에게 빠르게 전달해 줄 수 있다면 엉클 블록의 생성이 줄어들 수 있게 되는 것이다. 예를 들어 강원도에서 산불이 일어났다고 할 때 방송국에서 그 현장에 있는 사람과 직접 연락할 방법이 없다면 입에서 입으로 전달되는 정보, 인터넷에 올라온 글이나 사진 등을 찾아서 정보를 느리게 전달할 수 밖에 없고 그 정보가 맞는 것인지 확인하기도 어려울 것이다. 하지만 만약 방송국이 중계차와 기자를 사건 현장으로 파견한다면 어떻게 될까? 사건 현장과 방송국 사이에 위치하는 중계차가 빠르게 정보를 제시함으로써 잘못된 정보를 전달할 수 있는 위험이나 최신 정보를 전달하지 못하는 한계를 극복할 수 있게 될 것이다. 이와 마찬가지로 이더리움이 중계망을 운영하게 되면 블록 생성에 대한 최신 정보가 빠르게 전달될 수 있기 때문에 엉클 블록의 생성이 줄어들 수 있다.[10]

각주[편집]

  1. 1.0 1.1 etainclub, 〈[Smart Contract 개발 #8 이더리움 핵심 개요 정리 2]〉, 《steemit》
  2. 엉클 블록〉, 《토큰 포스트》
  3. 3.0 3.1 3.2 브이핏,〈엉클 블록, PoW과 PoS〉, 《네이버 블로그》, 2018-06-07
  4. 이더리움〉, 《위키백과》
  5. 메인체인〉, 《해시넷》
  6. 강희영 기자,〈[암호화폐 초딩 작업증명(PoW) 방식이란?]〉, 《CBC NEWS》, 2019-06-03
  7. 고아블록〉, 《해시넷》
  8. erc20,〈이더리움의 비정상적으로 생성된 엉클블록이란 무엇 인가요?〉, 《아하》, 2019-07-24
  9. 9.0 9.1 고스트 프로토콜〉, 《해시넷》
  10. erc20,〈엉클블록을 줄이기 위한 중계망은 어떻게 사용되나요?〉, 《아하》, 2019-05-27

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 엉클블록 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.