의견.png

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

위키원
이동: 둘러보기, 검색
(빠른 블록 생성)
74번째 줄: 74번째 줄:
 
일부 블록체인 이론가들의 견해에 따르면, 나카모토 사토시가 이 비율을 선택한 이유는 이 정도 에너지 낭비를 허용 가능한 수준으로 보았기 때문이라고 한다.
 
일부 블록체인 이론가들의 견해에 따르면, 나카모토 사토시가 이 비율을 선택한 이유는 이 정도 에너지 낭비를 허용 가능한 수준으로 보았기 때문이라고 한다.
 
이더리움은 블록 시간을 단축한 덕택에 더 빠른 트랜잭션 확인이 가능해졌지만, 대가로 빠른 블록 시간에 따른 보안성의 감소를 해결하기 위한 프로토콜 안에서의 대안을 마련해야 했다.
 
이더리움은 블록 시간을 단축한 덕택에 더 빠른 트랜잭션 확인이 가능해졌지만, 대가로 빠른 블록 시간에 따른 보안성의 감소를 해결하기 위한 프로토콜 안에서의 대안을 마련해야 했다.
 +
사용자 경험의 관점에서 볼 때 빠른 블록 시간이 가지는 이점은 이미 논의했다.
 +
그러나 빠른 블록 시간은 바람직하지 않은 영향도 줄 수 있다.
 +
현실적인 문제는 노드가 전 세계에 위치하고 있기 때문에 완벽하게 동기화되기 어렵다.
 +
아무리 빠른 인터넷 속도를 가진 세계라 하더라도 현재의 기술력으로는 아직 정보가 노드에서 노드로 인터넷을 통해 이동하는 데 시간이 걸리기 때문이다.
 +
이 시간을 대기 시간(latency)라고 부른다.
 +
그리 긴 시간이 아닐 수도 있지만, 트랜잭션 기록 사이의 잔고 내역이 일치하지 않은 충돌을 일으키기에는 충분한 시간이다.
 +
이더리움 또는 비트코인 네트워크를 통해 트랜잭션이 전파되는 데에는 평균적으로 약 12초가 걸린다.
 +
실제로 이 시간의 상당 부분은 노드가 트랜잭션을 다운로드하는 데 소비된다.
 +
노드는 새로운 블록 발견 소식을 듣기 전에 이전의 블록 위에서 채굴을 계속하고, 새 승자 블록이 나타나면 채굴하던 블록을 버리게 된다.
 +
앞에서 설명한 것처럼, 유효한 블록이 네트워크의 다른 위치에서 발견된 후에도 계속 채굴되는 엉클 블록은 실효 블록(stale block), 또는 폐지 블록(extinct block)이라고 부른다.
 +
블록 시간이 빨라지면 실효(효력을 잃는) 블록이 발생할 확률이 높아지고, 실효 블록이 많을수록 네트워크는 공격에 취약해진다.
 +
더 큰 문제는, 실효 블록의 비율이 높을수록 채굴 풀이 단독 채굴자보다 효율성 측면에서 큰 이점을 가지게 되고 채굴 보상을 독점할 가능성이 커진다는 점이다.
 +
시스템이 불공평해진다는 점을 차치하고서라도, 악의적인 공격자가 네트워크 공격에 필요한 비용이 줄어든다는 큰 문제가 생기게 된다.
 
<ref name="dsaf"></ref>
 
<ref name="dsaf"></ref>
 +
 
==종류==
 
==종류==
  

2019년 8월 5일 (월) 11:33 판

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

개요

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

역사

특징

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

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

엉클블록은 블록 생성 평균 시간이 짧아지면 자주 발생하게 된다. 왜냐하면, 채굴자가 블록을 찾아서 다른 노드에 전파시키는데 시간이 소요되고 블록 생성 시간이 짧다는 것은 채굴자들이 쉽게 퍼즐의 해답을 찾을 수 있다는 말이 되는데, 이렇게 되면 블록을 찾았다는 신호가 전달되기 전에 다른 채굴자가 새로운 블록을 찾을 수 있기 때문이다. 엉클 블록의 문제점은 트랜잭션 confirmation을 늦춘다는 것이다. 어떤 트랜잭션이 엉클 블록에 속한다면, 그 트랜잭션은 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)은 블록체인 상의 대표적 알고리즘이다. 목표값 이하의 해시를 찾는 과정을 무수히 반복하면서 해당 작업에 참여했음을 증명하는 방식의 합의 알고리즘을 말한다. PoW 과정은 보통 마이닝(채굴)을 통해 이뤄진다. 암호화폐 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 알고리즘이 생성한 암호화 출력의 임의성을 높일 수 있다. 이더리움과 비트코인에서는 각 노드가 마지막으로 알려진 승자 블록의 해시를 보고 시드를 얻는다. 이와 같은 방식으로 각 노드는 공정한 게임 진행을 위해 올바른 정식 체인 위에서 채굴을 진행할 수밖에 없게 된다. 잘못된 블록(엉클 블록)에 대한 작업 증명을 수행하면 승자 블록을 얻을 수 없다.[3]

빠른 블록 생성

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

종류

문제점과 대안

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

  • 첫번째, 트랜잭션을 지연시킨다.

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

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

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

  • 세번째, 보안

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



각주

  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

참고자료



같이 보기


  의견.png 이 엉클블록 문서는 블록체인 기술에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.