푸른 잠수함의 세상 이야기

이더리움 하드포크, 콘스탄티노플의 이해 본문

가상화폐

이더리움 하드포크, 콘스탄티노플의 이해

푸른 잠수함 2019. 1. 23. 11:34

안녕하세요~


푸른잠수함입니다. 


오늘은 이더리움 하드포크 콘스탄티노플에 대해서 다뤄보고자 합니다.



이더리움 하드포크 콘스탄티노플(Constantinople)의 이해


기다리던 사람들을 김빠지게 한 연기소식




이더리움 하드포크가 지연되고 있다. 몇 달간의 테스트와 지연 끝에 이더리움 콘스탄티노플 (Constantinople)이 마침내 등장했으며 오래 기다렸던 업데이트가 1월 말에 실행될 것으로 예상되어 많은 변화와 기대를 받고 있는 상황에서, 콘스탄티노플 업그레이드가 예정된 변경사항 중 하나에서 치명적인 취약점 발견을 이유로 연기되었다. ​


지난 1월 15일, 스마트 컨트랙트 회계법인 체인시큐리티(ChainSecurity)는 이더리움 발전 제안(Improvement Proposal) 중 EIP 1283이 구현되면 사용자의 자산을 도난당할 수 있는 허점이 드러났다고 경고했다. 네트워크를 운영하는 클라이언트 및 기타 프로젝트 개발자뿐만 아니라 이더리움 개발자는 문제를 평가하는 동안 하드포크를 일시적으로 연기하기로 동의한 상태이다.


참여자에는 이더리움 설립자 비탈릭 부테린(Vitalik Buterin), 개발자 허드슨 재임슨(Hudson Jameson), 닉 존슨(Nick Johnson) 및 에반 반 네스(Evan Van Ness), 파리티(Parity) 출시 관리자 아프리 슈돈(Afri Schoedon) 등이 포함되었다. 

새로운 포크 날짜는 이더리움 개발자 모임에서 조만간 다시 결정된다.


​취약점에 대해 논의한 결과, 프로젝트의 핵심 개발자들은 1월 17일 오후 4시경 예정됐던 하드포크 이전에 버그를 수정하는 것은 

무리일 것이라고 데 너무 오래 걸릴 것으로 결론을 내렸다고 한다. 


재입력 공격이라고 불리는 이 취약점은 근본적으로 공격자가 사용자에게 작업 상태를 업데이트하지 않고 동일한 기능을 여러 번 "다시 입력" 하는 것을 허용 하는 것에서 발생한다. 이런 경우 해커는 출금을 계속 반복할 수 있다고 조안 에스파뇰 블록체인 분석법인 앰버데이타의 CTO는 지적했다. 그는 덧붙이길, "제 계약(컨트랙트)에 다른 계약을 요청하는 기능이 있다고 상상해보십시오. 이전의 기능이 실행되는 동안 다른 기능을 실행할 수 있다면 자금을 반복 인출할 수 있습니다."라고 하였다.


암호화폐들은 종종 소프트포크니 하드포크니 하는 것을 종종 진행하는데, 이더리움의 경우 시총 2위, 3위 지위의 파급력이 큰 암호화폐이다 보니 연기소식도 큰 이슈가 되고 있다. 이번 하드포크인 콘스탄티노플에 대해 자세히 살펴보아 그것이 생태계로 가져오게 될 

다양한 변화에 대해 미리 확인해 보는 시간을 갖도록 하겠다.



콘스탄티노플, 이더리움의 하드포크


이더리움 콘스탄티노플은 어려운 포크가 될 것이다. "ETH-ETC"와 "Hash War" 등의 용어에서 매우 부정적인 그림이 연상된다. 그러나 이를 무조건 부정적으로 볼 것은 아니기에, 먼저 포크와 왜 이것이 코인에 있어 필수적인지에 대해 알아보도록 하겠다.





포크(Fork)란 무엇인가?

포크는 블록체인의 상태가 체인으로 갈라져서, 네트워크의 일부가 네트워크의 다른 부분보다 트랜잭션 기록에 대해 다른 관점을 갖는 상태이다. 다시 말해, 블록체인의 상태에 대한 관점에서의 차이가 생기는 것이다.


소프트 포크(Soft Fork)란 무엇일까?

체인(Chain)을 업데이트 해야할 때는 소프트 포크 또는 하드 포크라는 두 가지 방법이 있다. 소프트 포크는 이전 버전과 호환되는 소프트웨어 업데이트로 생각하면 된다. 쉽게 이야기해서, 마이크로소프트 엑셀 2005년 버전을 실행 중인데 엑셀 2015 버전에서 작성된 파일을 열려고 하면 잘 열릴 것이다. 왜냐하면 엑셀 2015는 구버전에도 호환이 되게 만들어졌기 때문이다. 


하지만 차이가 있는 것은 최신버전에서 즐길 수 있는 모든 업데이트는 구 버전에서는 볼 수 없단 점이다. 다시 MS 예로 돌아가 보면, 2015 버전의 스프레드 시트에 GIF를 넣을 수 있는 기능이 있다고 가정하면 2005 버전에서는 해당 GIF가 표시되지 않을 것이다. 기본적으로 2005 버전에서도 모든 텍스트는 표시되지만 GIF는 표시되지 않는 것과 같은 원리이다.


하드 포크(Hard Fork)란?

소프트 포크와 하드 포크의 주요 차이점은 이전 버전과의 호환성이 없다는 것이다. 일단 하드 포크가 이루어지면 구 버전으로는 돌아가지 못한다. 업그레이드된 버전의 블록체인에 가입하지 않으면 새로운 업데이트에 액세스하거나 새 시스템의 사용자와 상호 작용할 수 없게된다. PlayStation 3 및 PlayStation 4를 생각해보면, PS3에서 PS4 게임을 할 수 없고 PS3에서 PS4 게임을 할 수 없는 것과 마찬가지이다.


문제는 이러한 포크가 항상 발생한다는 것이다. 모든 시스템을 업데이트해야 하는데, 이는 근본적으로 포크라 할 수 있다. 포크가 일어날 때, 해당 암호화폐 커뮤니티가 분열하면 그때에 문제가 되는 식이다. 고맙게도, 이더리움 커뮤니티는 콘스탄티노플 하드 포크에 관해 심하게 분열되지는 않았다. 약간의 사소한 문제가 있는데 이에 대해서는 뒤에 다루도록 하겠다(아래 EIP 1234 섹션 참조).



이더리움의 4 단계 계획




이더리움은 이번에 처음으로 업그레이드 되는 것은 아니며 또한 이것이 마지막도 아니다.


이더리움은 단순한 통화(currency)용으로 디자인된 것은 아니다. 이는 분산 응용 프로그램을 위한 플랫폼으로 설계되었다. 그러나 그렇게 되기 위해서는 다양한 성장 단계를 거쳐야한다. 이더리움은 각 단계마다 더 강력하고 매끄러운 시스템을 갖추기 위해 점점 더 많은 속성을 통합함으로써 "레벨 업" 되고 있다.


이더리움의 완전체 출시 프로세스는 4 단계로 나뉘어져 있다. 각 단계는 각각 개발소요 기간이 있으며 모든 단계들이 나름 최대한 효율적이고 최적화되어 구동되는 것을 목표로 하고 있다. 


그 4 단계는 다음과 같다.


1. 프론티어(Fontier): 이더리움이 처음 출시되었을 때 버전

2. 홈스테드(Homestead)

3. 메트로폴리스(Metropolis) : 현재 단계, 메트로폴리스는 다시 비잔티움과 콘스탄티노플로 세분화

4. 세레니티(Serenity) : 마지막 단계




이더리움 콘스탄티노플 소개


콘스탄티노플 하드 포크는 애초에 1월 14일에서 1월 18일 사이에 발생될 것으로 예상되는 블록높이 7,080,000 근처에서 일어날 것으로 

예상되었다(이는 취약점을 이유로 연기되었다). 이 업데이트는 5가지 이더리움 개선 제안 또는 EIP를 생태계에 도입하게 된다.


- EIP 145 : Alex Beregszaszi와 Pawel Bylica 두 명의 이더리움 개발자가 다른 산술 연산과 비슷한 비용으로 바이트 코드를 실행할 수 있는 '비트 시프트'를 도입했다.

- EIP 1052 : 이더리움에서 최적화된 대규모 코드 실행 수단을 제공한다. 이렇게 하면 필수 계약 데이터가 들어있는 압축된 코드만 전체 코드와 대조하여 검사할 수 있게 된다. 이것은 Nick Johnson과 Bylica가 만들었다.

- EIP 1283 : 이 EIP는 Nick Johnson이 다시 작성한 EIP 1087을 기반으로 한다. 이 EIP는 과도하고 불필요한 가스 사용을 차단하여 스마트 계약을 실행하기 위해 개발자가 지불해야하는 가스의 양을 줄이는 데 도움이 된다.

- EIP 1014 : 이 EIP는 비탈릭 부테린(Vitalik Buterin)이 직접 제작했다. 이것은 기본적으로 이더리움이 상태 채널을 활용하여 오프체인(off-chain) 주소와 통신할 수 있게 도와준다. 이렇게 하면 전체 시스템의 확장성에 도움이 된다.

- EIP 1234 : 쉽게 패리티(Parity), Afri Schoedon의 릴리스 관리자가 옹호한 가장 논란이 있는 업데이트. 이것은 이더리움 시스템에서 난이도 폭탄을 점차적으로 제거하고 12개월 동안 3 ETH에서 2 ETH로 블록보상을 감소시킨다.


이제 이런 EIP들에 대해 자세히 살펴 보겠다.


▷ EIP 145 - 비트 쉬프트

이더리움 가상 머신(EVM)에 비트 이동 연산자(Bitwise Shifting)을 추가해 스마트 계약시 필요한 가스를 줄여 이더리움 네트워크의 효율성을 증대시키는 EIP이다. 지수 연산, 곱셈 또는 나눗셈 같은 작업을 순차적으로 수행하면 비용이 많이 든다. 그러나 이 두 가지를 모두 다루는 단일 작업이 있다면 비용이 훨씬 저렴하다. 이것은 코드 최적화를 통해 이더리움 개발자들에게 도움이 될 것이다. 

이는 크립토키티(CryptoKitties)와 같은 분산 응용 프로그램(Dapp)을 이더리움 가상 머신(Ethereum Virtual Machine (EVM))에서 

더 빠르게 처리하는 데 도움을 줄 것으로 기대된다.


▷ EIP 1052 - 대형 코드 최적화

이 EIP는 계약코드의 keccak256 해시를 반환하는 새로운 연산부호, EXTCODEHASH를 지정하는데 도움이 된다. 이 프로세스 과정 전에 필요한 것은 단지 코드 전체가 아닌 계약 코드의 필수 데이터만 검사하도록 허용하는 것 뿐이다.


많은 계약은 ‘계약의 바이트코드’에 대한 점검을 수행해야 하지만 바이트코드 자체에 대한 점검이 반드시 필요하진 않다. 예를들어, 하나의 스마트 계약이 다른 계약의 바이트코드가 다른 특정 그룹에 속해 있는지 여부를 체크하거나, 코드에 대한 특정 분석 및 바이트코드 매칭을 통한 계약 검증을 수행한다. 현재 계약들은 EXTCODECOPY 연산부호를 사용하여 이런 작업을 매우 비효율적으로 수행하는데, 

대규모 계약의 경우 비용이 많이들게 된다. EXTCODEHASH 연산부호는 계약의 바이트 코드의 keccak256 해시를 반환하고 개발자가 

많은 비용을 절약할 수 있도록 도와준다.


▷ EIP 1283 - 순 가스(Net gas) 측정

서두에 언급한 것처럼, 이번 이더리움 하드포크 취약점으로 지적된 것이 이 EIP 1283이다. 

쉽게 말해 EIP 1283에서 중복출금 가능성을 발견한 것이다.


EIP 1087과 EIP 1153에 구축된 EIP 1283은 SSTORE 연산부호에 대한 새로운 "가스 계량"방법을 제안한다.

• 사용자에게 블록체인에 영구적으로 저장된 데이터 보유 비용 청구

• 과도한 가스 비용 절감


간단히 말하자면 개발자는 스마트 계약을 맺을 때 지불해야 하는 금액을 줄일 수 있다. 앞서 언급한 것처럼, 스마트 계약 호스팅은 많은 돈을 필요로 하기 때문에 가스 비용은 개발자에게 실질적인 문제이다. 원래 이 제안서의 저자인 닉 존슨은, "과거의 경우 실제로 발생하지 않았거나 실제로 실제 자원을 소비하지 않은 것들에 대해 가스를 부과하는 경우가 있었습니다. 

이제 우리는 실제 작업과 일치하는 가스만 청구하도록 조정하려고 합니다."


블록체인에 영구적으로 저장된 데이터를 보유하는 비용을 사용자에게 청구함으로써 계속적으로 불필요한 비용이 나가는 것을 막고 "필요하지 않은 사항에 대한 스토리지를 사용하지 못하도록" 한다.



▷ EIP 1014 - 상태 채널(State Channels)

상태 채널은 무엇일까?


상태 채널은 참여자 간의 양방향 통신채널로서, 블록체인에서 일반적으로 발생하는 상호 작용을 가능하게 한다. 이렇게 하면 더 이상 거래를 유효하게 하는 채굴자와 같은 제3자에  의존하지 않으므로 거래시간이 기하급수적으로 감소한다.


오프-체인 상태 채널을 수행하기 위한 요구사항을 살펴보면,

• 블록체인 상태의 세그먼트는 다중 서명 또는 일종의 스마트 계약을 통해 잠겨져 있으며, 일련의 참가자가 동의해야 한다.

• 참가자들은 채굴자에게 아무것도 제출하지 않고 서로간에 거래에 서명함으로써 서로 상호 작용한다.

• 전체 트랜잭션 세트가 블록체인에 추가된다.


비탈릭 부테린이 개인적으로 작업하고 있는 EIP 1014는 블록체인에 실제로 존재하지 않는 주소와의 상호 작용을 허용한다. 상태 채널 개발자인 리암 혼(Liam Horne)은 EIP 1014가 "상태 채널에서 현저한 성능 향상"을 가져올 것이라고 설명한다.


▷ EIP 1234 - POS의 전환

이 EIP의 중요성을 이해하기 전에 다음 사항을 먼저 이해해 보자.

- 작업 증명 (Proof of Work)

- 난이도 (Difficulty)

- 지분 증명 (Proof of Stake)


○ 작업 증명(Proof of Work)은 무엇인가?





비트코인을 포함한 대부분의 암호화폐들은 "작업증명"을 수행한다. 프로세스로서의 작업 증명은 다음 과정을 거친다.


1. 채굴자는 암호화폐 퍼즐을 해결하여 블록을 "채굴"하여 블록체인에 추가한다.

이 과정에서 엄청난 양의 에너지와 컴퓨터 파워가 필요하다. 퍼즐은 시스템을 어렵게 만들고 세금을 부과하는 방식으로 설계되었다.

2. 채굴자가 퍼즐을 풀면 네트워크 검증을 위해 해당 블록을 네트워크에 제시한다. 블록이 체인에 속하는지 여부를 확인하는 것은 매우 간단한 과정이다.


이더리움은 현재 POW (Proof of Work) 합의 메커니즘을 사용하고 있다. 이제, POW가 무엇인지, 그리고 채굴자들이 하는 역할을 알게 됐으면, "난이도(Difficulty)"가 무엇을 의미하는지 이해할 때이다.


○ 난이도(Difficulty)란?

채굴은 채굴자들이 해시파워를 사용하여 암호화된 복잡한 퍼즐을 풀고 이더리움을 보상으로 얻는 것이다. 비트코인과 달리 이더리움은 총 공급량 제한(hard cap)이 없다. 그러나 여전히 공급-수요 방정식이 균형이 깨지지 않도록 시스템 내의 이더리움 양을 규제해야 한다.


이것이 비트코인과 이더리움 모두 시스템에 하드코딩된 "난이도" 매개변수가 있는 이유이다. 난이도는 블록생성 사이의 시간이 동일하게 유지되도록 한다. 따라서 블록생성 시간이 너무 짧으면 난이도가 올라가고, 반대로 너무 길면 난이도는 내려간다.


현재 이더리움 난이도는 2,691,878,354,888,980.00000000이다.



○ 지분증명(Proof of Stake)은 무엇인가?


지분증명은 전체 채굴 프로세스를 가상으로 만들고 채굴자를 유효성 검사기로 대체한다. 아래가 이런 프로세스가 작동하는 방법이다.


1. 유효성 검사기는 코인의 일부를 지분으로 동결(lock up)해야 한다.

2. 그 후에, 그들은 블록의 유효성 검사를 시작할 것이다. 

이는 그들이 체인에 추가할 수 있다고 생각되는 블록을 발견하면, 그것에 배팅을 하여 유효성을 검사한다.

3. 블록이 추가되면 유효성 검사기는 배팅에 비례하여 보상을 받게 된다.


이제 간단하게나마 PoW, PoS 및 난이도의 기초를 알아보았으니, EIP 1234의 세부사항을 살펴 보겠다.


이더리움의 PoS 구현 방법은 캐스퍼 프로토콜(Casper Protocol)이라고 한다. 세상 모든 변화가 그러하든 지나치게 급진적인 변화는 통증을 수반한다. 비슷하게 PoW에서 PoS 로의 갑작스런 전환은 권장할만한 사항이 아니다. 따라서 전환을 원활하게 하기 위해 이더리움은 먼저 "Casper FFG"라고 하는 하이브리드 PoW-PoS 컨센서스 메커니즘을 도입하려고 하고 있다.


이러한 변화의 일환으로, 그들은 이더리움 블록체인에서 “난이도 폭탄“을 도입하여 채굴을 어렵게 하여 궁극적으로는 모든 이들이 PoS로 옮겨가도록 유도하기로 결정했다. 채굴이 너무 어려워서 거의 불가능한 지점을 "빙하시대(ice age)"라고 칭한다. 난이도 폭탄은 2015 년 9월 7일에 도입되었으며 기하급수적으로 난이도를 올리도록 프로그래밍 되었다. 


이 모든 계획은 훌륭하지만, 캐스퍼 프로토콜은 아직 완전하게 구현가능 하도록 준비되지 않았다. 아직 수행해야 할 일들이 남아있다. 그렇기 때문에 콘스탄티노플 전체를 그냥 연기하는 대신에 난이도 폭탄을 2900만 초, 약 12​​개월 지연시킨 것이다.


난이도 상승이 지연되었기 때문에 채굴자가 블록을 채굴하는 것이 훨씬 더 쉬워질 것이며 훨씬 더 규칙성을 가지고 채굴을 할 수 있게 될 것이다. 따라서 이것을 이점을 상쇄하기 위해 블록보상을 3 ETH에서 2 ETH로 떨어뜨리게 되는 것이다. 이러한 감소는 "공급 출혈(supply bleed)"에 대한 "중지 갭(stop-gap)"으로 생각할 수 있다.


이 EIP는 커뮤니티에서 많은 논란을 불러왔다. EIP의 저자. 아프리 스코덴(Afri Schoeden)은 이를 "난이도 폭탄을 지연시키면서 발행을 안정화시키는 최선의 방법"이라고 주장한다. 그러나 이더리움 커뮤니티에는 해당 EIP에 대해 반대하면서, 난이도를 하락시키면 더 많은 중앙 집중화(centralization)가 야기될 것이라고 지적하고 있다.



결 론



암호화폐 커뮤니티들은 콘스탄티노플(Constantinople) 하드 포크를 기대하고 있다. 이를 통해 이더리움은 목표 단계인 ‘평온함’을 뜻하는 세레니티(serenity) 단계 구현을 향한 또 다른 중요한 발전을 이룰 것이다. 우리가 상상할 수 있듯이, 이 하드포크에는 개발자에게 실질적으로 도움이 되는 변화들이 있으며, 결국 PoS 구현을 향한 추진력을 얻는데 도움이 될 것으로 보인다. 

우리는 단지 앞으로 이것이 어떻게 작동하는지 지켜보고, 이런 변화들과 함께 이더리움이 성장하는 것을 관찰하면 될 것이다.

Comments