AMA(Ask Me Anything)시리즈(2) - 소프트포크, 하드포크가 정확히 뭔가요?

in #kr6 years ago (edited)



블록체인 관련 자료를 읽다 보면, 소프트포크 , 하드포크 라는 용어가 정말 많이 나오는데, 영상 / 글마다 정의를 다 조금씩 다르게 내리고 있고, 채굴자 입장과 그냥 일반 사용자 입장을 섞어서 설명하다 보니, 헷갈리는 부분이 많은 것 같습니다.

그러다 보니, 스터디 하는 동안 정확히 소프트포크/하드포크가 뭔지 물어보시는 분들이 많아서, 한번 정리해보았습니다.

저는 온라인으로만 진행되는 블록체인 온라인 스터디에 운영자 중 한 명으로 참여하고 있습니다. 입문반,중급반, 고급반, Dapp개발 반을 포함하여 여러 주제의 스터디가 현재 모집 중이니, 관심 있는 분들은 https://studypie.co/ko 에서 모든 커리큘럼을 확인해보세요:)

Q) 소프트포크, 하드포크가 정확히 뭔가요?

--

답변)


업계에 종사하시는 분들조차도, 소프트포크, 하드포크를 조금씩 다르게 이해하고, 정의하는 것 같습니다. 객관성(?)을 위해서 구글에서 softfork 라고 검색했을 때 나오는 상위 4개의 문서를 기반으로 설명하겠습니다.

이름부터 가장 공신력 있어 보이는, bitcoin wiki 에서는 소프트포크를 아래와 같이 정의합니다.

A softfork is a change to the bitcoin protocol wherein "only" previously valid blocks/transactions are made invalid. Since old nodes will recognize the new blocks as valid, a softfork is "backward-compatible." When a majority of miners upgrade to enforce new rules, it is called a miner-activated softfork (MASF). When full nodes coordinate to enforce new rules, without support from miners, it is called a user-activated softfork (UASF).

간단히 번역해보면 소프트포크

  1. 유효했던 블록/거래를 유효하지 않게 만드는 경우
  2. 기존 노드는, 여전히 새롭게 생성된 블록을 유효한것으로 받아들여서 이전버전과 호환(backward-compatible)됨
  3. 채굴자의 다수(보통 51%) 이상이 동의해서 새로운 규칙을 적용할 경우(채굴자의 소프트웨어를 업그레이드 하는경우) MASF라고 부름
  4. 채굴자가 아니라, 일반 사용자들이 진행하는 소프트포크는 UASF 라고 부름

입니다. 하지만 여전히 헷갈리는 부분이 많은데, 특히 1.의 부분이 그렇습니다.
반면, bitcoin wiki에서 하드포크를 찾아보면, 아래와 같이 나옵니다.

A hardfork is a change to the bitcoin protocol that makes previously invalid blocks/transactions valid, and therefore requires all users to upgrade.

  • 하드포크는 유효하지 않았던 블록/거래를 유효하게 만든다. 그렇기 때문에 모든 사용자가 업그레이드 해야 한다.

그럼 소프트포크/하드포크는 유효했던 블록을 유효하지 않게 하거나, 유효하지 않았던 블록을 유효하게 하는 것인가? 하는 의문이 듭니다. 여기서 우리를 더 혼란스럽게하는 investopia에서 하드포크 정의를 보면 아래와 같습니다.

A hard fork (or sometimes hardfork), as it relates to blockchain technology, is a radical change to the protocol that makes previously invalid blocks/transactions valid (or vice-versa)

하드포크는 유효하지 않았던 블록/거래를 유효하게 하거나, 유효했던 블록/거래를 유효하지 않게 만드는 급진적 변화이다.
(맨 뒤에 붙은 vice-versa가 반대도 포함한다는 뜻입니다.)

결론적으로 유효한 블록을 유효하지 않게 만드는거냐, 유효한 블록을 유효하지 않게 만드는 거냐에 집착하면, 정의가 매우 매우 헷갈립니다.

그런데도, 의미를 찾아보자면, 원문의 맥락으로 봤을 때, 소프트포크는 유효했던 블록/거래를 유효하지 않게 되는 경우만 존재하고, 반대로 유효하지 않았던 블록/거래를 유효하게 하는 경우는 없다고 보는게 맞을 것 같습니다.(원문에서 "only" previous~ 라고 표현한 점에서, only가 그런 의미로 사용된 거로 보입니다.)

여전히 헷갈리시죠...? 저도 헷갈립니다.

그래서 유효한 블록/유효하지 않았던 블록은 잊어버리고, 대부분 문서에 공통적으로 표현된 점으로 소프트포크와 , 하드포크를 구분해보면 아래와 같습니다.

소프트포크하드포크
(1)이전과 호환됨
(backword-compatible)
이전과 호환 안 됨
(2)모든 노드가 아닌 다수(보통 51%)만
동의
해도 진행이 가능
새로운 포크된 체인에서 활동할
모든 노드가 동의해야 함
(3)두개의 분기로 영원히 나뉘는 게 아님
(일시적으로만 나뉨)
두 개의 분기로 영원히 나뉨

이해를 돕기 위해 세그윗(Segwit)비트코인 캐시(Bitcoin Cash)를 예시로 살펴보겠습니다.

세그윗(소프트포크)


이전에 제가 작성한 세그윗 글 에도 언급되지만, 세그윗은 소프트 포크이며, 그러다 보니 모두가 동의한 상태에서 진행된 것은 아닙니다.

따라서 실제로 현재 세그윗을 적용한 블록과, 적용하지 않은 블록이 동시에 채굴되고 있으며, 세그윗을 적용한 거래는 이제 막 40% 정도 된다고 합니다. (위의 (2)에 해당)

이전 글에 언급된 것처럼, 기존 노드 들이 새롭게 세그윗이 적용된 블록도 유효하다고 인식하기 때문에 이전 버전들과 호환이 됩니다. (위의 (1)에 해당)

하지만, 세그윗을 적용한 블록을 채굴해야 한 블록에 더 많은 거래를 포함시키고, 더 많은 수수료를 얻을 수 있기 때문에, 궁극적으로 언젠가는 채굴자들은 세그윗을 적용한 블록만 생성하게 될 가능성이 높습니다 (위의 (3)에 해당).

비트코인 캐시(하드포크)


반면, 비트코인 캐시를 생각해보면, 우선 비트코인 캐시를 비트코인 주소로 송금하면 입금이 안 됩니다. (위의 (1)에 해당)

또한, 비트코인 캐시를 채굴하거나, 사용하기 위해선 무조건 기존의 비트코인 채굴 소프트웨어 혹은 지갑이 아니라, 비트코인 캐시 채굴용 소프트웨어 혹은 지갑을 사용해야 합니다 ( 위의 (2)에 해당)

그리고 앞으로도 비트코인 / 비트코인 캐시는 영원히 분리되어 완전히 다른 것으로 인식됩니다 (위의 (3)에 해당)

어느 정도는 정리가 되셨을까요? 혹시나 제가 잘못 이해한 부분이 있다면 댓글로 정정 요청 부탁드립니다 :)

사실, 정의를 아는 것도 중요하지만, 그래서 소프트포크랑 하드포크는 어떤 절차로, 어떻게 활성화가 되는지도 궁금한데요, 해당 내용은 다음에 다시 다뤄보겠습니다.

참고문헌
https://en.bitcoin.it/wiki/Softfork
https://www.investopedia.com/terms/s/soft-fork.asp
https://www.techopedia.com/definition/32911/soft-fork
https://en.bitcoin.it/wiki/Hardfork
https://www.investopedia.com/terms/h/hard-fork.asp
https://www.techopedia.com/definition/32912/hard-fork
https://medium.com/@lightcoin/the-differences-between-a-hard-fork-a-soft-fork-and-a-chain-split-and-what-they-mean-for-the-769273f358c9







Sort:  

하드포크에 대해 써주셨네요. 정말 멋지네요.

감사합니다. 계속 좋은 글 업데이트 할 수 있도록 하겠습니다 ㅎㅎ

ㅎㅎ다음번에 또보러 오겠습니다^^

짱짱맨 호출에 출동했습니다!!

감사합니다 :)

Coin Marketplace

STEEM 0.21
TRX 0.14
JST 0.030
BTC 67873.49
ETH 3528.53
USDT 1.00
SBD 2.80