이더리움 콘스탄티노플 하드포크 내용 정리 (Ethereum Constantinople Hardfork)

in #ethereum6 years ago (edited)

콘스탄티노플
출처 : Is the Status of Second-Ranked Ethereum in Risk? — Medium

안녕하세요. 개발자 모도리입니다.
오늘은 이더리움 하드포크에 대해서 이야기 해보겠습니다. 요즘 이더리움의 가장 큰 이슈는 콘스탄티노플 하드포크입니다. 메인넷의7,080,000 블록을 기준으로 콘스탄티노플 하드포크가 일어나게 됩니다.

이와 관련된 다양한 서비스들이 제공되고 있습니다.

  • etherscan.io : 콘스탄티노플 하드포크까지 남은 시간 카운트 다운

    평균 블록타임을 기준으로 하드포크 기점을 예측해 주고 있습니다. — etherscan.io

  • amberdata.io : 특정 블록까지 남은 시간 카운트 다운

  • forkmon.ethdevops.io : Constantinople(geth, parity), Non-constantinople 노드의 체인 현황

이번 글에서는 하드포크가 무엇인지, 어떻게 대처해야 하는지, 이번 하드포크에 어떤 사항이 반영되는지, 향후 예정 된 하드포크는 어떤 것이 있는지 알아보겠습니다.

하드포크란 ?

포크

소프트웨어 업데이트의 일종이라고 생각하시면 됩니다. 포크의 종류는 하드포크와 소프트포크로 나뉘게 되는데 소프트포크는 이전 버전과의 호환이 가능한 업데이트라고 보시면 되고, 하드포크는 이전 버전과 호환이 불가능 업데이트라고 보시면 됩니다.

soft_fork
소프트 포크 (출처 : Hard and Soft forks — CrytoGraphics)

hard_fork
하드 포크 (출처 : Hard and Soft forks — CrytoGraphics)

조금 더 이해하시기 쉽게 게임에 비유해 보겠습니다.

  • 소프트포크 : 게임에 신규 기능을 추가한다고 합니다. 그런데 기존 게임을 이용하는 유저들은 별도의 업데이트 없이 사용할 수 있다고 합니다. 단지 신규 기능을 사용하지 못할 뿐 게임 이용에는 문제가 없습니다.

  • 하드포크 : 대규모 업데이트(신규 기능,버그 픽스 및 통신 방식 변경 등)가 있다고 합니다. 그런데 해당 업데이트로 인해서 게임의 재미가 많이 떨어졌다고 느낀 유저들이 생겨났습니다. 그 유저들이 이전 버전의 게임을 가지고 프리서버를 만들어서 이전 버전의 게임을 즐기게 됩니다. 이렇게 되면 정규서버, 프리서버 두 가지 버전의 게임이 공존하게 됩니다. 물론 모든 유저들이 만족하여 모두 업데이트를 진행하여 게임을 이용한다면 게임이 두 가지로 갈리지 않습니다.

이번 콘스탄티노플 업데이트는 모두가 만족할 수 있는 내용을 포함하고 있어서 체인이 두 갈래로 갈리지 않을 것이라고 많이들 예측하고 있습니다.

이더리움 타임라인

이더리움이 현재까지 진행한 하드포크와 앞으로 진행 될 하드포크를 살펴 보겠습니다.

time_line
이더리움 로드맵
(출처 : Ethereum’s Upgrades: Why Constantinople Fork Is So ‘Hard’ to Implement — CoinTelegraph)

이더리움의 로드맵은 크게 4개의 Step으로 구성되어 있습니다.

  • Frontier
  • Homestead
  • Metropolis
  • Serenity

그 동안 있었던 하드포크 목록을 살펴보면 아래와 같습니다.

  • Prerelease step 0: Olympic testnet
  • Release step 1.0: Frontier
  • Release step 2.0: Homestead
  • Release step 2.1: DAO Hard Fork
  • Release step 2.2: Tangerine Whistle, aka Anti-DoS
  • Release step 2.3: Spurious Dragon, aka State-clearing
  • Release Step 3.0: Metropolis phase 1: Byzantium
  • Release Step 3.1: Metropolis phase 2: Constantinople

각 Step 마다 한 번의 하드포크만 일어나지 않고 예상치 못한 이유로 인해서 발생한 포크도 있습니다. 그 대표적인 예가 Step 2인 Homestead의 DAO 하드포크입니다. (이 하드포크를 기준으로 이더리움과 이더리움 클래식으로 체인이 갈리게 됩니다.)현재는 Step 3인 Metropolis 단계에 있으며, Metropolis 중 phase 2인 콘스탄티노플 하드 포크를 앞두고 있습니다.

콘스탄티노플 하드포크는 어떻게 진행되나?

2018년 10월에 Ropsten 테스트넷에서 하드포크를 진행했으나 실패하여 원상복구(revert) 시켰습니다. 그래서 더 준비할 시간을 갖고 다시 진행하자고 해서 정해진 시점이 7,080,000 블록입니다. 개발자들이 열심히 여러 종류의 이더리움 소프트웨어들이 하드포크에 대비하고 있는지 체크하며 열심히 준비했습니다.
이번 하드포크에서는 Ropsten 대신 Rinkeby 테스트넷에서 검증을 거친 후 Mainnet에 반영할지 말지를 결정하게 됩니다. Rinkeby 테스트넷에서는 이미 3,660,663 블록을 기준으로 하드포크가 일어났습니다. Rinkeby 테스트넷의 하드포크는 성공적으로 진행되었다는 기사가 있습니다.

우리는 무엇을 준비해야 되는가?

Ether 보유자

별 다르게 하실 일은 없습니다.

Miner, Node 운영자

  • 채굴자
  • 거래소
  • 지갑 서비스 (MyEtherWallet, MyCrypto, MetaMask, etc.)
  • Node 제공 서비스(Infura, Etherscan, etc.)

위에 해당 하시는 분들은 반드시 최신 이더리움 노드를 설치하셔야 합니다. 업데이트를 받지 않으신다면, 아래와 같은 상황이 벌어집니다.


Rinkey 노드 현황

Rinkeby 테스트넷은 3,660,663 블록을 기준으로 하드포크가 일어났습니다. Geth를 기준으로 1.8.20 이후 버전을 사용하는 노드는 정상적으로 블록 싱크가 맞는 반면 이전 버전을 사용하는 노드(빨간색으로 표시 된 부분)는 블록 싱크가 맞지 않고 있습니다.

필요한 클라이언트 버전

콘스탄티노플 하드포크에 대응하기 위한 클라이언트(많이 사용하시는 geth, parity만 준비했습니다.) 버전은 아래 같습니다.

  • Geth : 1.8.20-stable 버전 이상
  • Parity : 2.1.10-stable 버전 이상, 2.2.5-beta 버전 이상

콘스탄티노플

포함되는 EIP(Ethereum Improvement Proposal)를 살펴보겠습니다. 총 5가지의 EIP가 포함되며, EVM 성능 향상, 오프체인(스테이트 채널) 트랜잭션 대비, PoS 전환 대비를 위한 내용이 포함되어 있습니다.

EIP 145 : Bitwise shifting instructions in EVM

  • 목적 : EVM 성능 향상 (가스비 절약)
  • 요약 : Bitwise SHIFT 연산(SHR, SHL, SAR) OPCODE 추가
  • 내용 : native한 코드에서 SHIFT 연산이 구현되어 있지 않아서, 다른 연산들의 조합으로 SHIFT를 구현했었습니다. 이렇게 구현 된 SHIFT 연산은 35 gas가 필요했는데, 직접 native하게 구현하여 SHIFT 연산을 3 gas로 줄였습니다.

EIP 1052 : EXTCODEHASH opcode

  • 목적 : EVM 성능 향상 (가스비 절약)
  • 요약 : EXTCODEHASH OPCODE 추가
  • 내용 : 컨트랙트가 동일한지 비교하기 위해서는 EXTCODECOPY 코드를 사용하여 컨트랙트의 전체 bytecode를 복사하는 작업을 수행해야 했습니다. 그런데 컨트랙트가 큰 경우에는 비용이 매우 많이 발생했는데, 이것을 효율적으로 하고자 EXTCODEHASH를 추가해서 bytecode의 Hash 값을 가지고 비교할 수 있게 했습니다.

EIP 1283 : Net gas metering for SSTORE without dirty maps

  • 목적 : EVM 성능 향상 (가스비 절약)
  • 요약 : SSTORE OPCODE 구현 내용 수정
  • 내용 : state 값의 구분을 세분화 (originValue, currentValue, newValue)하여 값의 변화가 필요 없는 경우, DB에 저장하는 과정을 생략하여 리소스 낭비를 줄입니다. 그래서 필요한 gas도 줄어들게 합니다.

EIP 1014 : Skinny CREATE2

  • 목적 : 오프체인(스테이트 채널) 트랜잭션 대비
  • 요약 : CREATE2 OPCODE 추가
  • 내용 : 오프체인에서 처리 중이라서 아직 온체인에 기록되지 않은 데이터를 위한 컨트랙트 주소를 미리 만들어 놓을 수 있는 명령어를 추가했습니다. 이 주소는 msg.sender, salt, init_code의 Hash로 만들어지며, 기존 msg.sender와 nonce의 Hash를 가지고 컨트랙트 주소를 만드는 방식과는 차이가 있습니다.

EIP 1234 : Constantinople Difficulty Bomb Delay and Block Reward Adjustment

  • 목적 : PoS 전환 대비
  • 요약 : 난이도 폭탄 연기, 채굴보상 감소
  • 내용 : 애초에 Byzantium 하드포크(4,370,000 블록) 때 시행하려고 계획되어 있던 난이도 폭탄이 Byzantium 하드포크 때 3M 블록 뒤에 시행하기로 연기 됩니다. 그런데 아직 PoS로 전환을 하려면 시간이 더 필요하다고 판단되어 이번 하드에서 그 보다 2M 블록(Byzantium 하드포크 기준 5M블록, 블록타임 15초 기준, 약 12개월) 뒤에 난이도 폭탄이 시행되도록 변경하여 채굴 빙하기를 늦추게 했습니다. 그와 더불어 채굴보상을 감소(3 ETH -> 2 ETH)시켜 빙하기가 왔을 때 채굴자 받는 충격을 순차적으로 완화시키려 하고 있습니다.

영상으로 정리 된 자료

2018년 10월 하드포크 실패 전에 만들어진 영상이라서 EIP 1283 설명은 빠져있습니다.


출처 : [Simply Explained 채널](Simply Explained 채널) — Youtube

콘스탄티노플 이후

기존 로드맵 상으로는 콘스탄티노플 이후 Serenity step으로 넘어 가게 되어 있었습니다. 그러나 이더리움 공식 일정에 명확히 반영되어 있진 않지만, 52회 이더리움 코어 개발자 회의 아젠다에서 이스탄불 포크의 대략적인 일정을 제안하였으며, ProgPoW에 대한 이야기로 나왔습니다. 1월 18일에 예정되어 있는 53회 이더리움 코어 개발자 회의 에서 이스탄불 하드포크의 로드맵과 ProgPoW 하드포크 실행 여부가 논의될 것 같습니다.

이스탄불 (Istanbul phase of Metropolis step)

콘스탄티노플 이후에 바로 세레니티로 넘어가면서 PoS로 전환한다는건 매우 큰 변화가 될 것 같습니다. 그리고 준비되어야 하는 것들도 굉장히 많을 것입니다. 그로 인해서 세레니티 전에 이스탄불이라는 하드포크를 한 번 더 진행하여 세레니티 전에 필요한 준비를 조금 더 진행할 예정인 것 같습니다. 아직 어떤 EIP들이 포함될 지는 결정되지 않았습니다. 시기는 대략 2019년 10월 쯤을 목표로 하고 있는 것 같습니다.

ProgPoW (EIP 1057)

ProgPoW는 Programmatic Proof-of-Work의 약자로 PoW 알고리즘을 주기적으로 변경할 수 있게 만드는 것입니다. ASIC은 특정 알고리즘에 특화되게 만들어진 칩으로 알고리즘이 변화하게 될 경우 무용지물이 됩니다. 그래서 ASIC 사용이 불가능하도록 Ethash에서 조금 더 발전한 ProgPoW를 제안한 것입니다. PoS로 전환을 하기 위해서는 아직도 12개월 이상(난이도 폭탄을 기준으로 생각했을 때 이야기 입니다. 물론 난이도 폭탄을 더 미루게 될 수도 있습니다.)의 시간이 남아 있습니다. 그 기간 동안에는 어쩔 수 없이 PoW를 계속해서 사용해야 하는데, 이것은 ASIC 사용으로 인한 중앙화 문제를 일으킨다는 지적을 받고 있습니다. 그래서 PoS 변환까지 아직 시간이 남아 있고, 이스탄불 하드포크까지도 시간이 많이 남았으니 그 전에 ProgPoW로 전환하는 하드포크를 한 번 더 진행하자는 의견입니다.

Serenity(Ethereum 2.0) step

본격적으로 확장성 문제를 해결하는 단계가 될 것입니다. PoS, Sharding

  • Phase 0 : The Beacon Chain
    엄청난 컴퓨팅 파워를 사용해서 Nonce 값 찾기 경쟁을 하며 전력 소비를 일으켰던 PoW 합의 방식을 일정금액(32 ETH)을 예치해 놓고 Validator로 참여하여 블록을 검증하는 PoS 합의 방식으로 전환하는 것이 주 목적입니다.

  • Phase 1 : Shard Data Chains
    점점 더 늘어나는 블록 데이터를 모든 노드가 다 가지고 있는 것이 아니라 shard라고 하는 구역으로 나눠서 각 shard 마다 특정 블록 데이터만 가지고 있으면서 shard 간에 통신하며 블록을 검증하는 Sharding을 도입하는게 주 목적입니다.

참고자료


  • 저는 블록체인 개발사 (주)34일에서 블록체인 엔지니어로 일하고 있습니다.
  • 890만 팔로워 전세계 1위 한류 미디어 케이스타라이브(KStarLive)와 함께 만든 한류 플랫폼에서 사용되는 케이스타코인(KStarCoin) 프로젝트를 진행 중입니다. 팬 커뮤니티 활동을 하면서 코인을 얻을 수 있으며, 한류 콘텐츠 구매, 공연 예매, 한국 관광 상품 구매, 기부 및 팬클럽 활동 등에 사용 될 계획입니다.
Sort:  

직접 번역과 정리한 자료이신가요? 좋은 자료 감사합니다.

넵 자료들 참고해서 정리하고 EIP 내용들은 github 코드 변경 부분을 보고 나름의 해석을 해서 작성했습니다. ^^

답변과 좋은 자료 감사합니다~

번역 수고하셨습니다.

그와는 별개로 연기되어지는걸 보면서
기획을 기획일 뿐이다라는
생각도 없지는 않네요;;;;

읽어주셔서 감사합니다.^^
한번 연기되고 다시 철저히 준비해서 한다고 한 것인데도 이러는거 보면 변수가 너무 많은 것 같네요 ㅠㅠ
이번 일을 계기로 하드포크 전에 다른 개발자들이 버그를 더 많이 찾을 수 있도록 버그 바운티 프로그램을 미리 운영하여 하드포크 하루 전에 연기하는 일을 방지하는 이야기들도 나오고 있습니다.

정리를 잘 해주셨어요. 감사합니다.

좋게 봐 주셔서 감사합니다! 글이 뜸했는데 종종 올리겠습니다!

며칠 전 (연기되었지만) 이번 하드포크를 앞두고 왜 뜬금없이 모네로의 난이도가 올라가는지에 대한 추론을 썼었는데, 실제로 하드포크 내용중에 보상 감소가 들어가니 모네로로 방향을 바꾸는 채굴자들이 늘면 늘었지 줄진 않겠군요.

참고로, 글의 태그 중에 한글로 작성된 글이라면 #kr 태그는 거의 필수라고 보시면 됩니다. 또한 코인 관련해선 #coinkorea 태그가 사람들의 관심을 많이 받고있죠 ^^

[취미 채굴자의 기록] 고래 싸움에 터지는 새우등 (feat. 이더리움 하드포크)
작성하신 분석 글 재밌게 봤습니다. 하드포크가 연기되면서 채굴자들이 다시 이더리움으로 방향을 틀었을지도 궁금하네요. 다음 글 작성 시에는 #kr, #coinkorea 도 달아보겠습니다. 팁 감사합니다.^^

찾아봐 주시니 고맙습니다. 어제오늘 이더리움 해쉬레잇은 계속 감소중인 걸로 보아 임시 대피가 아니라 슬슬 이더에서 발을 빼려고 하는게 아닌지 의심되네요 ㅎㅎ

앞으로 계속 주시해야겠어요. 새로운 정보 알려주셔서 감사합니다 ㅋ

와우~ 완전 정리 잘해 주셨네요~

이더리움이 많이 힘을 못쓰고 있는것 같은데... 이번 하드포크로 다시 도약을 할수 있을지 기대가 되는군요.

긴 글 봐주셔서 감사합니다!
이전 하드포크는 세레니티 전에 초석을 깔고 있는 단계라고 생각합니다. 저도 앞으로 더 발전 될 이더리움 기대하고 있습니다.

잘보고 갑니다. 정성이 느껴지네요

읽어 주셔서 감사합니다! ^^

Congratulations @modolee! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

Click here to view your Board

Do not miss the last post from @steemitboard:

Carnival Challenge - Collect badge and win 5 STEEM
Vote for @Steemitboard as a witness and get one more award and increased upvotes!

Congratulations @modolee! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 250 upvotes. Your next target is to reach 500 upvotes.

Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:

SteemWhales has officially moved to SteemitBoard Ranking
SteemitBoard - Witness Update

Support SteemitBoard's project! Vote for its witness and get one more award!

매번 리블로그 해주셔서 감사합니다.