블록체인 심화 - 정답

Lumi·2021년 12월 1일
0
post-thumbnail

💡 퍼블릭, 프라이빗, 컨소시움의 차이점과 하이브리드 블록체인

퍼블릭과 프라이빗 부터 다루어 보겠습니다.

퍼블릭은 말그대로 누구나 사용가능한 블록체인을 말합니다.

대개 토큰이 있는 블록체인이라면 퍼블릭 블록체인이라고 할 수가 있습니다.

프라이빗 블록체인은 주로 기업용으로 사용되는 블록체인을 말합니다.

반드시 승인을 받은 사용자만 생태계에 참여 가능하다는 특징이있기 떄문에 중앙화된 시스템과 같다고 할 수가 있습니다.

컨소시움 블록체인은 퍼블릿 + 프라이빗을 합친 블록체인이라고 할 수가 있습니다.

주로 목표가 같은 기업 여럿이 관리자가 되어서 블록체인 생태계를 유지하게 됩니다.

하이브리드 블록체인은 퍼블릭과 프라이빗의 장점만을 사용하는 블록체인을 말합니다.

그러한 이유로 컨소시엄 블록체인도 하이브리드 블록체인이라고 할 수가 있습니다.

💡 하이퍼렛져 패브릭에서는 왜 UTXO를 사용할까?

가장 최신의 정보를 가져오기 위해서 입니다.

예를들어 우리가 은행 잔고를 확인할 떄에는 예전 기록부터 모든것을 다시 계산할 필요는 없습니다.

그냥 단순하게 가장 최근에 거래된 기록을 통해서 현재 내 통장잔고에는 얼마만큼 남아있는지를 확인할수 있기 떄문입니다.

이러한 작동방식은 UTXO와 같이 한번 사용되면 새로운 UTXO가 형성되는것과 매우 유사하기 때문에 UTXO를 사용하게 됩니다.

💡 하이퍼레저와 블록체인의 차이

하이퍼레저도 블록체인입니다.

하지만 우리는 대개 블록체인이라고 하면 퍼블릭 블록체인을 생각하기 떄문에 이에 대한 질문은 퍼블릭과 프라이빗의 차이에 대한 질문이라고 생각을 하였습니다.

둘의 가장 큰 차이는 일단 제 3자가 존재하냐의 차이입니다.

프라이빗의 경우 승인이 된 사용자만 사용가능하기 때문에 제 3자가 존재하는 중앙화된 블록체인이라고 할 수가 있고

퍼블릭의 경우 제약 없이 누구나 사용자로써 참여 가능하다는 특징이 있습니다.

성능 및 보안 면에서도 많은 차이가 발생을 합니다.

프라이빗의 경우에는 중앙원장기술과 다를바 없기 떄문에 보안적으로 취약하나 속도적으로는 뛰어납니다.

하지만 퍼블릭의 경우에는 완전 반대로 모든 노드가 데이터의 복사본을 가지고 있기 떄문에 보안적으로는 뛰어나나 속도적으로는 떨어지게 됩니다.

💡 블록체인 네트워크가 서로 다른 합의 알고리즘을 사용하는 이유

이건 저의 개인적인 사견입니다.

일단 개발자가 목표로 하는 생태계가 다르기 떄문입니다.

이더리움의 경우에는 정말 모든 참여자가 자유롭게 참여를 하는 시스템을 지향하기 떄문에 PoW를 현시점에서는 사용하고 있고

이오스 같은 경우에도 기본적으로 모든 참여자가 참여를 할수 있는 시스템을 지향하지만 일부 중앙화를 선택하여 확장성을 확보 하였습니다.

예전 비탈릭 부테린과 댄 라리머의 논쟁에서도 알수 있듯이 서로가 추구하는 생태계가 다르기 떄문에 서로 다른 합의 알고리즘을 사용한다고 생각합니다.

또다른 이유로는 상황이 다르기 떄문이라고 생각을 합니다.

현실 사회에서는 미국법과 한국법은 다르고 로마법또한 모두 다릅니다.

각자 나라마다 법이 다른이유는 각자 환경이 다르기 떄문이라고 생각을 합니다.

이러한 이유가 블록체인 생태계에서도 적용이 되어서 각자 생태계가 추구하는 가치가 다르기 떄문에 이로인해 합의 알고리즘도 다르지 않나 라고 생각을 합니다.

💡 이더리움에서 Nonce가 존재하는 이유

이중지불을 해결하기 위해서 존재를 합니다.

여기에서 말하는 Nonce는 블록에 존재하는 Nonce값이 아닌 트랜잭션에 존재하는 Nonce값을 말합니다.

계정마다 고유한 값을 가지고 있으며 계정에서 발생하는 트랜잭션 수에 따라서 1씩 증가하게 됩니다.

예를 들어 새로 생성한 계정에서 트랜잭션을 3번 실행시켰을떄 Nonce값은 3입니다.

이떄 만약 잘못된 논스값 즉 5와 같은 Nonce값이 트랜잭션에 포함되어 전송이 되면 노드들은 이전의 논스값을 비교하여 잘못되었을 경우 멤풀이라는 곳에 보관을 하게 됩니다.

그후 Nonce값이 4가 들어오게 되면 그다음 5를 함께 전송하여 처리를 합니다.

💡 비트코인, 이더리움에서의 트랜잭션 검증 과정

비트코인의 경우 공개키와 개인키를 활용하게 됩니다.

데이터가 들어오면 노드는 해당 데이터를 개인키로 암호화 하여 전자서명을 진행을 합니다.

그후 다른 노드들에게 원본 데이터와 전자서명된 데이터를 전송합니다.

두가지 데이터를 받은 다른 노드들은 보낸 노드의 공개키를 가지고 복호화하여 원본 데이터와 비교를 하게 됩니다.

이떄 문제가 없다면 이러한 과정이 반복진행이 되고 문제가 있다면 해당 트랜잭션을 무시 합니다.

이더리움은 비트코인과 조금 다릅니다.

기본적으로 전송하는 정보가 작을수록 효율적이기 떄문에 이더리움에서는 서명만을 트랜잭션에 담아서 보내게 됩니다.

이후 검증자가 해당 서명을 통해서 공개키를 도출해 낼수가 있고 이후 이 공개키로 만들어진 주소가 있는지를 확인합니다.

블록체인에서 만들어지는 모든 주소는 기록이 되기 떄문에 만약 도출해낸 공개키로 만들어진 주소가 있다면 비밀키가 존재하는 것으로 인식을 하게 됩니다.

그러면 노드 입장에서는 해당 주소에서 전송을 하였구나 라고 인식을 하고 트랜잭션 검증이 완료가 됩니다.

💡 PoW와 PoS의 가장 큰 차이점

가장 큰 차이는 네트워크 소비량에 있습니다.

PoW에 비해서 PoS는 좀더 환경 친화적인 합의 알고리즘입니다.

또한 증명방식에도 차이가 있습니다.

PoW는 가장 최우선적으로 블록을 채굴한 노드에게 보상이 주어지게 됩니다.

그러기 떄문에 다른 노드들은 만약 채굴을 하지 못한다면 단순히 자원을 낭비하게 됩니다.

하지만 PoS는 가지고 있는 지분에 영향을 받고 블록을 생성할 주체를 결정하기 떄문에 PoW에 비해서 덜 경쟁적이라는 특징이 있습니다.

💡 DPoS란?

DPoS는 PoS에서 탈중앙화를 일부분 포기한 형태의 합의 알고리즘입니다

대표적으로 이오스, 클레이튼이 이러한 형태를 띄고 띄고 있고 특정 대표 노드들을 선발하여 이 대표노드들이 책임을 지고 블럭을 생성하는 것 입니다.

대표 노드들을 선발하는 과정은 생태계마다 다른 방법을 선택하여 대표노드들을 선택을 하게 됩니다.

이는 현실사회의 민주주의와 같이 국회의원을 선출하여 정책을 펼쳐나가는것과 동일하기 떄문에 민주주의적인 합의 알고리즘이라고 불리기도 합니다.

💡 PBFT는 무엇인가

PBFT는 BFT를 비동기적인 시스템에 적용한 합의 알고리즘입니다.

두 경우는 모두 특정 노드를 믿을수 없어도 다른 다수의 노드들을 믿고 간다는 원리로 작동을 하게 됩니다.

예를 들면 5명의 사람중 한명의 의견이 다르다고 그 의견을 따르는 것이 아니라 나머지 4명의 동일한 의견을 따르는 것으로 비유할 수가 있습니다.

PBFT와 BFT의 가장큰 차이점은 작동하는 네트워크 시스템도 있지만 합의적으로는 브로드캐스트의 횟수에 차이가 있습니다.

PBFT는 두번 BFT는 브로드 캐스트를 한번만 진행을하게 됩니다.

두 합의 알고리즘은 분기가 발생하지 않는다는 큰 장점이 있는데 왜냐하면 소수의 노드들의 모든 검증이 끝나야만 블록이 채굴되기 떄문입니다.

이러한 이유로 소수의 노드들만이 참여 할수 있다는 단점이 있지만 즉각적으로 거래가 처리된다는 장점이 있습니다.

주로 DPoS와 PBFT를 결합한 형태의 합의 알고리즘을 사용하게 됩니다.

대표적으로 클레이튼이 그러한 합의 알고리즘을 사용하고 있습니다.

💡 이더리움에서 주소를 20byte로 줄여서 사용하는 이유

이러한 이유는 사용자 친화적인 관점에서 접근을 할 수가 있습니다.

이더리움의 주소는 일종의 계좌번호를 말하며 이 계좌번호는 공개키의 해시값을 통해서 암호화되어 생성이 되게 됩니다.

이미 암호화 되어있다는 특징떄문에 굳이 긴 byte를 사용할 이유가 없고 긴 byte를 사용할 경우 사용자에게 덜 친화적이기 떄문에 일부로 길이를 줄여서 사용하게 됩니다.

결론적으로는 보안적으로는 긴 byte난 20byte나 똑같기 떄문에 줄여서 사용하게 됩니다.

💡 UTXO기반의 블록체인과 어카운트 기반의 블록체인의 차이점과 장단점

일단 두가지의 공동적인 사항을 먼저 짚고 넘어가고 싶습니다.

UTXO, 어카운트를 사용하는 이유는 이중지불문제를 해결하기 위해서 입니다.

두가지의 차이점은 어느쪽이 보완이 더 뛰어나냐의 차이인것 같습니다.

UTXO는 트랜잭션 발생시마다 항상 새로운 UTXO를 생성하고, 보관을 하기 떄문에 보안과 익명성 면에서 좀더 뛰어난 면이 있습니다.

반대로 어카운트는 UTXO보다는 보안적으로 떨어지지만 역으로 좀더 직관적으로 확인할수 있기 떄문에 효율성과 사용자 친화성 면에서는 UTXO보다 뛰어나다는 장점이 있습니다.

💡 비트코인에서 UTXO란?

이중지불을 처리하기 위한 컨트랙트 지갑이라고 생각하면 될것 같습니다.

이 부분에 대해서는 이론적인 내용보다는 예시를 들어서 설명을 하는 것이 좀더 직관적이라고 생각을 합니다

A라는 사용자는 10비트코인을 가지고 있습니다.

이러한 10 비트코인은 UTXO라는 곳에 보관이 되게 됩니다.

UTXO라는 부분은 입력과 출력으로 이루어져 있지만 이 부분은 너무 상세한 내용이기에 나중에 필요하다면 다루어 보도록 하겠습니다.

만약 A라는 사용자가 B라는 사용자에게 5비트코인을 보내고자 한다면

비트코인은 5가 담긴 UTXO를 두개를 만들게 됩니다.

그후 하나의 UTXO를 B에게 보내게 됨으로써 거래가 완료가 됩니다.

이러한 광범위한 질문에 대해서는 대략적으로 어떤 역할을 하고 어떻게 작동을 하는지에 대해서만 답변을 하였습니다.

💡 비트코인은 어떤 언어로 이루어져 있는가?, 이더리움은 어떤 언어로 이루어져 있는가.

기본적으로 두 생태계는 스크립트라는 언어를 사용합니다.

이 부분에서도 튜링 완전, 불완전으로 나뉘게 되며 비트코인은 튜링 불완전, 이더리움은 튜링 완전한 언어로 작동을 하게 됩니다.

불완전과 완전에 대한 간략한 설명은 불완전은 for문과 같은 반복문이 불가능한 형태를 말하고 이러한 이유가 존재하는 이유는 반복문을 통해서 네트워크가 손상되는 것을 막기 위함입니다.

프로그래밍 언어적으로 접근을 하면 비트코인은 다양한 언어가 사용되었지만 주로 C++가 사용되었고

이더리움또한 다양한 언어로 작성이 되었습니다.

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글