블록체인은 P2P네트워크를 통해서 관리되는 분산 데이터베이스의 형태라는 것을 알수가 있다.
즉 네트워크 사용자라면 누구나 정보에 접근을 할 수 있는
거래 장부를 서버의 한곳에 저장을 하는 것이 아니라 네트워크에 연결된 여러 컴퓨터에 저장 및 보관하는 기술
제 3의 신용기관이 없어도 네트워크 참여자들 간의 신뢰있는 거래가 가능하며 탈중앙화, 수평적인 디지털 비지니스의 기반이 된다.
이번 글에서는 블록체인의 다양한 기술들과 연관성을 배우게 된다.
활용되는 목적 또는 공개 범위에 따라 다양한 방법으로 블록체인 네트워크를 구성할 수 있다.
개방형 블록체인으로 누구나 트랜잭션을 생성할 수 있는 블록체인이다.
통상적으로 블록체인이라는 용어는 퍼블릭 블록체인을 지칭한다.
누구나 참여할 수 있고, 모든 참여자의 상호 검증을 거쳐 신뢰도가 높은 특징이 있다.
모든 거래 내용이 네트워크에 참여한 노드에게 공유가 되고 이를 검증하기 떄문에
하지만 모든 참여자의 거래기록을 남기고 이를 공유하느라 처리속도가 느리다
퍼블릭 블록체인과 반대되는 개념의 블록체인이다.
서비스 제공자(기업 또는 기관)의 승인을 받아야만 참여할 수 있다.
엔터프라이즈 블록체인 이라고도 부르며 리눅스재단이 이끌고 있는 오픈소스 블록체인 프로젝트인 하이퍼레저도 프라이빗 블록체인으로 분류가 된다.
기업 비지니스를 구현하기에 적합한 환경의 블록체인이지만 탈중앙화는 다르게 중앙화된 특징이 있다.
동일한 목적, 가치를 가지고 있는 다수의 기업이 하나의 컨소시엄을 구성하고 그 안에서 작동하도록 만든 블록체인이다.
대표적으로 하이퍼레저 패브릭프로젝트가 있다.
크게 보면 프라이빗 블록체인과 같지만 구분을 하기 위해서 따르게 부르는 것이다.
일종의 퍼블릭과 프라이빗의 중간 형태로 중앙 관리자에 의해 승인받은 잠여자만이 블록생성을 할수가 있다.
프라이빗 블록체인은 한 기업 혹은 기관이 모든것을 통제하지만 컨소시엄 블록체인은 다수의 기업이 통제를 하기 떄문에 공정성과 확장성을 보완을 하였다.
즉 다수 참여자의 협의가 필요한 분야에서는 컨소시엄 블록체인이 효과적이다.
이를 활용하여 기관 간에 직접 거래함으로써 제3자에 대한 거래 수수료를 줄이고 시간을 단축 한다.
거래 정보를 기록한 원장을 특정 기관의 중앙화된 서버가 아닌 분산화된 네트워크에서 참여자들이 공동으로 기록 및 관리하는 기술을 말한다.
기존의 서비스는 중앙집중원장의 형태를 띄고 있다.
은행, 대기업들을 신뢰하기 떄문이다.
하지만 이러한 중앙화된 시스템은 다양한 취약점이 존재한다는 것을 알게 모르게 겪어왔다.
중앙화된 시스템은 해당 사업을 독점하기 떄문에 거래자들 사이에서 과도한 관리, 수수료를 청구한다.
또한 데이터를 유지 및 관리하기 위해 많은 비용을 지출한다.
금융권의 경우 매년 천문한적인 돈을 보안에 투자하며 이를 우리에게 부과하는 거과 같다.
은행을 포함하여 다른 다양한 사업들은 중간다리가 존재한다.
해외배송을 예로 들면 트럭회사, 해운사, 보험사 등등 많은 중간다리를 건너게 된다.
이렇게 많은 단계가 있을수록 프로세스 전반에 걸쳐서 시간과 비용이 증가하고 효율이 떨어지게 된다.
주식의 경우에도 예탁결제제도는 3일 거래방식이라는 것을 알 수가 있다.
세상에 완벽한 보안은 없다 곳곳에서도 해킹 사건은 매년 발생하고 있고 이는 우리의 정보가 안전하게 관리되지 않는다는 것을 의미한다.
위에 있는 단점들을 대부분 해결을 할 수가 있다.
인증과 증명의 효율성, 시스템 안전성 보안 투명성을 큰 장점으로 뽑을수가 있다.
기존 시스템의 경우 여러 중간 매개체 또는 인증기관이 필요했지만 분산원장은 사용자가 거래내역을 직접 공유할 수 있는 시스템이라는 차별성을 가지게 된다.
비용이 줄어들고 정보가 분산되어 있기 떄문에 해킹 및 위조의 위험성도 거의 없다.
블록에 들어가는 거래 기록을 말한다.
일종의 데이터 사용 기록을 말하는 것과 같다.
저번 글에서 말했듯이 블록안에는 트랜잭션으로 이루어져 있다.
블록을 좀더 뜯어보면 블록은 헤더 + 바디 로 이루어져 있고
헤더에는 메타데이터,
바디에는 트랜잭션들이 구성되어 있다.
블럭은 거래의 기록단위로 다수의 트랜잭션을 포함할 수 있으며, 이떄 특정 블록을 기준으로 다음과 같은 점들을 생각해 볼수가 있다.
🔨 이 블럭은 체인 중 몇 번쨰 블록인지
🔨 이 블럭에는 몇 개의 트랜잭션이 있는지
🔨 이 블럭을 누가 생성을 했는지
🔨 이 블럭의 크기, 총 전송량 등은 얼마인지
이러한 것들을 메타 데이터 라고 한다.
즉 메타 데이터는 해당 블록이 어떤 블록인지를 설명하는 데이터이다.
블록의 맨 위에 위치하기 떄문에 블록 헤더라고 부르기도 한다.
트랜잭션이란, 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위라고 하며, 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 A.C.I.D를 통해 알수가 있다.
역시 상호작용 및 작업 수행의 논리적 단위이다.
블록체인 내에서 모든 활동은 트랜잭션을 통해 이루어 지고 블록체인의 상태를 변화시킨다고 말할수 있다.
두 구조의 가장 큰 차이는 논스의 유무이다.
이더리움에는 논스값이 있고 이 논스는 두가지 특징을 가닌다.
즉 논스는 발신 주소의 속성이며, 발신 주소의 컨텍스트 안에서만 의미를 가지게 된다.
논스는 명시적으로 계정에 저장되지 않고 발생한 트랜잭션 건수를 세어서 동적으로 계산이 된다.
논스는 중복되지 않고 순차적이기 떄문에 같은 논스에 여러 트랜잭션 전송이 발생하였다면
해당 논스 중 제일 높은 가스비를 지불한 트랜잭션이 처리가 된다.
이더리움에서는 이러한 방법으로 이중 지불 문제를 방지한다.
잘 이해가 되지 않아서 좀더 정리를 해보았다.
모든 거래는 일회성이다.
논스는 계정에서 보내는 트랜잭션에 할당 된 번호이다.
최초 계정 생성시에는 논스는 0이다.
논스는 순차적으로 증가하는 값이기 떄문에 만약 논스가 0인 상태에서 트랜잭션을 전송후
논스가 2인 트랜잭션을 전송하면 이 트랜잭션은 어떠한 블록에도 포함되지 않는다.
왜냐면 다음 논스값은 1이기 떄문에
이렇게 누락된 논스가 나타나게 되면 이더리움 네트워크는 멤풀 이라는 곳에 저장을 한다.
아직 블록에 들어가지 못한 상태의 트랜잭션들의 공간
그다음 논스가 1인 트랜잭션이 전송이 되면 멤풀에 있는 논스가 2인 트랜잭션과 함께 블록에 포함이 되게 된다.
이중지불이란 원본 파일에 저장된 가치를 지불한 뒤, 해당 파일을 복사하여 다른 사람에게 또 지불하는 것을 말한다.
모든 트랜잭션은 일회성이다.
하나의 트랜잭션은 하나의 상태만 변화시킬 수 있다.
이 문제를 해결하기 위해서 비트코인의 경우 UTXO을 통해 해결하고,
이더리움은 논스를 활용하여 해결을 하였다.
데이터베이스에서 트랜젝션이 발생하 떄, 그 안전성을 보장할 수 있는 성질
트랝잭션은 하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나, 전부 실패해서 결과를 예측 가능해야 한다.
부분적으로 성공한 트랜잭션만이 작동을 한다면 데이터가 오염이 될수가 있다.
A가 B에서 10만원을 전송할떄 A의 통장에서는 10만원이 빠져나갔지만
B계좌에서는 10만원이 들어오지 않는다면 이것은
원자성을 위반한 행위로 트랜션이 실패로 돌아간다.
트랜잭션이 이루어 지고 난 이후의 데이터베이스의 상태는 유효해야 한다.
규칙을 만족 해야 한다.
규칙이 '모든 고객은 반드시 이름을 가지고 있어야 한다' 라면
하는 행위는 일관성을 위반하는 행위이다.
모든 트랜잭션은 다른 트랜잭션으로부터 영향을 받아서는 안된다.
독립되어야 한다.
A계좌에 만원이 있고 B,C계좌로 6천원씩 보낸다고 하면
트랜잭션은 동시에 시작되는 것이 아니기 떄문에 A의 계좌는 마이너스가 되는 것이 아니다.
트랜잭션에 대한 로그가 남아야 한다.
기록을 보며 오류를 잡는데에 사용한다.
우리가 퍼블릭 블록체인은 관리자가 없이 시스템이 돌아간다는 것을 알수가 있다.
하지만 관리자가 없는 시스템이 존재 할수 있을까?? 라는 의문에 대한 답을 찾아보고자 작성을 한다.
결과적으로 말해서 이는 채굴과 노드가 처리를 한다.
블록체인에서도 서버가 존재한다.
이 서버를 노드라고 한다.
전 세계 누구라도 노드가 될수 있으며 여러 개의 노드는 P2P로 연결되어 네트워크를 형성한다.
이후 트랜잭션이 발생하면 이 거래 정보는 네트워크에 분포되어 있는 수많은 노드에게 전파 된다.
모든 기능을 가지고 있는 노드를 말한다.
블록체인의 최초의 블록부터 현재 새롭게 생성되는 블록까지 모든 블록 정보를 가지고 있다.
모든 블록체인의 정보를 수집하고 저장하는 역할을 하며, 새로운 블록을 추가하기 위해 전달받은 블록에 대해 검증을 수행한다.
요약본인 헤더의 정보만 가지고 있는 노드를 말한다.
모든 정보를 가지고 있지 않기 떄문에 개별 거래에 대한 트랜잭션을 확인하기 위해 SPV를 수행한다.
라이트 노드는 모든 정보를 가지고 있지 않기 떄문에 검증을 수행할수가 없다.
그러기 때문에 라이트 노드에서 검증을 진행 할 떄에는 풀 노드에게 블록정보를 요청하여
머클트리를 통해 이 거래가 검증된 거래인지를 확인하는 방법을 사용한다.
머클트리 : 블록에 포함된 거래 내역을 나무 형태로 요약한것
즉 블록에 포함된 트랜잭션을 확인하가능한 것
우리는 결국 라이트 노드도 풀 노드를 사용한다는 것을 이해를 할수가 있는데 그럼 왜 라이트 노드는 따로 구성하였을까??
저장 용량이 좋은 데스크탑 같은 경우에는 모든 데이터를 저장하고 있어도 상관이 없다.
하지만 모바일의 경우에는 무리가 있고
저장용량이 크다는 것은 데이터를 동기화 하는 시간이 오래걸린다는 것을 의미한다.
즉 모든 데이터를 들고 다니는 것이 아니라 라이트한 버전을 들고 다니는 것이라고 생각을 하자
채굴은 일종의 보상이다.
코인을 받는 행위
각각 노드들은 트랜잭션이 발생을 하였을떄 이 트랜잭션이 유효한지를 검증하고 가장 빠르게 검증한 노드에게 보상으로 코인이 주어진다.
이떄 노드들이 하는 행위를 채굴이라고 한다.
합의 알고리즘 이라는 작업을 통해서 채굴을 한다.
채굴자는 POW, 합의 알고리즘을 통해 헤더에 있는 논스를 사용하여 논스 값을 계속 바꿔가며 해시 값이 미리 결정된 목표값보다 작을떄까지 반복한다.
채굴 과정은 정해진 값보다 작은 해시값을 구하는 것이다.
채굴자가 구해야 하는 해시값은 블록 전체의 해시값이다.
즉 쉽게 말해 모든 데이터는 제공되지만 논스값만이 빠져잇고 해당 논스값을 계속 바꿔가면서 트랜잭션이 발생한 논스값을 찾는 것이다.
예를들면 정해진 해시값이 3이고 우리가 채굴을 하면서 논스값을 바꾼뒤 해싱하였는데 값이 4가 되면 큰 값이기 떄문에 채굴에 실패하고 다시 도전하여 2가되면 채굴에 성공하는 것이다.
블록이 가지고 있는 데이터가 얼마냐에 따라서 달라진다.
쉽게 설명하면 세상에 공짜는 없다 라는 이유 때문입니다.
비트코인을 통해 거래가 발생하면 누군가는 이 거래 기록을 기록하고 블록에 담아서 사용자들에게 전파를 해야 합니다.
그리고 추가적으로는 블록에 대한 검증도 필요합니다.
이러한 작업들을 실행하기 위해서는 네트워크 및 전력자원이 낭비가 되고 이에 대한 보상으로 코인이 지급 됩니다.
다수의 참여자들이 통일된 의사결정을 하기 위해 사용하는 알고리즘을 말한다.
블록체인 시스템의 경우 네트워크 모든 사용자가 동일한 테디어틀 복사하여 저장을 하기 떄문에 원본과 사본에 대한 구별이 없으며,
통일된 의사결정을 내릴 수 있는 중앙 시스템이 없다.
누구나 참여 할수 있는 네트워크 이기 떄문에 특정 사용하작 데이터를 잘못된 값으로 변경을 하거나 올바르지 않은 정보를 공유하는 것을 찾아내야 하며
이떄 사용 하는 알고리즘을 합의 알고리즘 이라고 한다.
단순히 빠르게 논스값을 찾는 노드가 보상을 받는 방법이다.
시빌 공격같은 각종 공격에 맞서 매우 뛰어난 알고리즘이지만
오로지 한명에게만 보상이 주어진다는 단점이 있습니다.
A,B,C가 채굴을 시작하다가 C가 채굴에 성공하면 C에서 코인이 주어지게 됩니다.
A,B가 논스값에 90% 근접했어도 아무런 보상이 주어지지 않으며
A,B는 단순히 자신의 자원을 낭비하게 되는 현상이 발생합니다.
해당 네트워크에 충분한 지분을 가지고 있다는 아이디어에서 출발을 합니다.
즉 작업을 더 뛰어나게 수행했는지가 아니라 해당 코인을 얼마나 더 많이 가지고 있냐에 비례하여 블록에 기록할 권한이 더 많이 부여되는 합의 방식 입니다.
현재 이더리움 2.0이 지향하는 방식입니다.
pow보다 에너지 소모가 적고 누구나 허가없이 참여 가능하다는 단점이 있으며
지분이 적어도 채굴을 더 열심히 한다면 보상을 받을수 있는 합의 방식입니다.
하지만 역으로도 특정 사용자가 해당 지분을 대다수 차지하게 된다면 보상을 독점하게 된다는 단점도 있다.
Pos에서 변형된 것으로 지분을 가진 각 노드는 투표를 통해 트랜잭션의 검사르 다른 노드에게 위임하는 개념입니다.
3세대 암호화폐에서 사용이 된다.
비잔틴 장애 허용 이라는 합의 방식으로 장애가 있더라도 3분의 1을 넘지 않는 이상 정상 작동하도록 허용하는 합의 알고리즘 입니다.
후에 좀더 자세히 다루어 보자
프랙티컬 비잔틴 장애 허용 이라고 부릅니다.
이또한 후에 좀더 자세히 다루어 보자.
한 개인이 다수의 노드를 이용해 네트워크를 장악하려는 보안 위협이다.
한 개인이 여러개의 미디어 계정을 만드는 것처럼 간단하게 가능하다.
합의 알고리즘이 이 공격을 막는 다는 것은 아니지만 의미가 없게 만들수 있다.
성공했을떄 이익보다 소모되는 비용을 더 많게 하는 것이다.
일반적으로 작업증명 방식은 51%의 위헙에 노출돼 있다.
블록체인 생태계의 파워중 51%를 확보한뒤 거래 데이터를 조작 하는 행위
하지만 현실적으로 블록체인 생태계의 51%를 확보하는 것은 불가능하다.
개인이 코인의 총 발행량중 51%를 가지는 것은 거의 불가능에 가깝다.
블록체인 생태계에서 실행되고 개인 및 공개 키를 저장하고 해당 키와 관련된 모든 트랜잭션을 모니터링하고 유지하는 소프트 웨어를 말한다.
즉 노드를 지갑 이라고도 한다.
지갑은 주소와 암호로 구성되어 있으며 지갑의 주소(공개키)는 거래를 위해 공개 가능하지만 개인암호(개인키)는 소유자만 가지고 있어야 한다.
미사용 트랜잭션 출력값을 뜻한다.
비트코인은 별다른 계정이나 지갑이 없고 단순히 블록에 기록된 소비되지 않은 출력값을 통해 거래의 유효성을 검사한다.
즉 지갑이 아니라 UTXO에 저장이 된다.
과하게 생성이 되면 문제가 된다.
너무 많게 생성되면 흩어져 있는 UTXO를 모두 확인해야 하기 떄문에
소액 결제를 너무 자주 하거나, 채굴로 이자를 받게되면 불필요한 수수료를 내야할 수 있다.
좀더 이해를 쉽게 정리를 하면 A에게 B는 1비트코인 C는 3비트코인을 주게 되면
A는 4비트코인을 가지게 된다.
이떄 저장되는 형태가 1비트코인 따로, 3비트코인 따로 저장이 된다.
이 저장되는 공간을 UTXO라고 한다.
그후 A가 다시 송금 또는 결제를 하게 되어 비트코인을 사용하면 새로운 UTXO를 만들어 그곳에 비트코인을 담고 기존에 있던 UTXO는 파기시키게 된다.
즉 2 비트코인을 송금하면 2비트코인을 송금할 UTXO, 남겨진 2비트코인에 대한 UTXO가 만들어 진다.
즉 사용자 입장에서 자신이 가진 코인을 사용하려고 하면 흩어져 있는 UTXO를 하나로 합치고 거기에서 전송을 한뒤에 나머지 코인을 새로운 UTXO로 만드는 것이다.
주소와 개인키를 조합한 것을 말한다.
사용자 신분증에 해당하는 것이다.
각 주소에는 해당 개인키가 있으며 개인키는 일종의 암호로 간주 가능하다.
개인키 + 공개키가 있으며
개인키는 비밀 키로 유지를 해야 하지만 공개키는 상호간의 거래를 위해 단순히 계정을 식별하는 요소로만 사용이 된다.
단순성
단순히 지갑 하나에 모든것을 저장하기 떄문에 단순하다.
효율성
이또한 단순히 지갑에 비용이 충분히 있는지를 확인만 하면 되기 떄문에 효율적이다.
이중 지불 공격에 노출 가능하다는 점이다.
모든 계정은 공개적으로 볼 수 있는 논스를 가지고 있고 하나씩 증가하면서 동일한 트랜잭션이 두번이상 제출되는 것을 방지한다.
어떤 방식이 더 낫다고 할수는 없다
각각의 장단점이 있기 떄문에 상황에 맞춰서 사용을 해야 한다.
UTXO같은 경우에는 한번 사용되고 사라지기 떄문에 익명성 + 보안성을 챙길수 있지만
DApp같이 다양한 기능을 구현하고자 한다면 이더리움이 더 뛰어나다.
이더리움 클라이언트는 블록체인 내트워크를 구성하는 개별 노드 이기 떄문에 중앙 서버가 따로 존재 하지 않는다.
단순히 클라이언트 프로그램만 존재하게 된다.
또한 멀티 플랫폼 환경을 지원하기 위해서 다양한 언어로 개발이 되어있다.
이더리움 재단이 제공하는 공식 소프트웨어로써, Go언어로 개발 되었다.
시작하게 되면 네트워크 내의 다른 노드에 연결하는 작업을 실행하고 블록체인의 전체 사본을 내려 받게 된다.
그리고 복사본을 최신 상태로 유지하기 위해 계속해서 다른 노드와 통신을 한다.
또한 채굴, 트랜잭션 추가, 검증, 실행등 다양한 역할이 가능하며
RPC를 통해 상호작용할 수 있는 API를 노출하여 서버 역할도 한다.
네트워크를 구성하기 위해서는 구성원들간의 이해관계 조정이 필요했고 이때 사용된 것이 거버넌스라고 한다.
블록체인 거버넌스는 다양한 커뮤니티를 통해 합의를 이끌어낼 수 있는 여러 방법들이 존재한다.
BIP, EIP, 개발자 포럼
주로 오픈체인 거버넌스과 온체인 거버넌스로 나누어 지며
비트코인과 이더리움의 하드포크가 발생한 것은 오픈체인 거버넌스로 볼 수 있고 생태계 구성원의 합의를 통하지 않고 발생을 하게 되었다.
즉 생태계 구성원들의 의견은 반영하지 않았다.
이러한 문제즘을 해결하기 위해 이후의 3세대 블록체인 플랫폼들은 온체인 거버넌스를 구현하였다.
온체인 안에서 새로운 제안을 하고, 구성원들이 투표하여 의사결정하는 구조
시민 사회를 민주적 책임을 강회시키고, 복잡한 문제 발생 상황에서 유용하고 현실적인 대안이 된다.
성숙된 민주 의식이 기반이 되어야 한다.
문제가 발생을 하였을떄 책임을 질 사람도 없기 떄문이다.
비트코인의 개선 제안을 말한다.
이더리움의 개선 제안을 의미한다.
아이디어를 제시하고 이를 평가해달라는 글 같은 것을 RFC라고 하는데
이더리움의 RFC를 ERC라고 한다.
클레이튼의 개선 제안을 뜻한다.