블록체인을 활용하는 목적이나 공개 범위에 따라 블록체인 네트워크를 구축 할 수 있고, 그 종류에 따라 퍼블릭 블록체인, 프라이빗 블록체인, 컨소시엄 블록체인이 있다.
개방형 블록체인으로 누구나 블록체인 네트워크에 접근 할 수 있고 블록을 생성 할 수 있는 블록체인이다.
탈중화화 되있고 모든 참여자의 상호검증을 거치기 때문에 신뢰도 가 매우 높다. 하지만 네트워크상의 모든 트랜잭션을 참여자들 모두에게 남기고, 이를 공유하느라 처리 속도가 느리다는 단점이 있다.
폐쇄형 블록체인으로 서비스 제공자(기업 또는 기관)만이 참여 할 수 있다. 주로 기업에서 활용하기 때문에 엔터프라이즈 블록체인이라고도 한다.
리눅스 재단의 오픈소스 블록체인 프로젝트 하이퍼레저Hyperledger가 이에 해당함.
스마트 계약을 구현할 수 있는 오픈소스 기반의 프라이빗 블록체인 플랫폼으로 기업 비즈니스를 구현하기에 적합한 환경이지만 중앙화되어 있다.
동일한 목적이나 가치를 가지고 있는 다수의 기업과 단체들이 하나의 컨소시엄을 구성하고 그 안에서 작동하는 블록체인 이다. 프라이빗 블록체인의 한 형태이지만, 이를 별도로 구별하여 하이브리드 블록체인으로 분류하기도 한다.
프라이빗 블록체인과는 달리 같은 목적을 가지고 있는 여러 기관이 하나의 컨소시엄을 구성하여 공정성과 확장성을 보완하였다. 따라서 다수 참여자의 협의가 필요한 분야에서는 컨소시엄 블록체인이 프라이빗 블록체인보다 효과적이다. 컨소시엄 블록체인을 이용하면 기관 간에 직접 거래함으로써 제3자에 대한 거래 수수료를 줄이고 거래 시간을 단축할 수 있다.
퍼블릭 블록체인 | 프라이빗 블록체인 | 컨소시엄 블록체인 | |
---|---|---|---|
관리자 | 모든 거래 참여자 | 한 중앙 기관이 모든 권한 보유 | 컨소시엄에 소속된 참여자 |
거버넌스 | 한번 정해진 법칙을 바꾸기 매우 어려움 | 중앙 기관의 의사결정에 따라 용이하게 법칙을 바꿀 수 있음 | 컨소시엄 참여자들의 합의에 따라 법칙을 바꿀 수 있음 |
거래속도 | 네트워크 확장이 어렵고 거래속도가 느림 | 네트워크 확장이 매우 쉽고 거래 속도가 빠름 | 네트워크 확장이 쉽고 거래 속도가 빠름 |
데이터 접근 | 누구나 접근 가능 | 허가 받은 사용자만 접근 가능 | 허가 받은 사용자만 접근 가능 |
식별성 | 익명성 | 식별가능 | 식별가능 |
분산원장(distributed ledger)은 거래 정보를 기록한 원장을 특정 기관의 중앙화된 서버가 아닌 분산화된 네트워크에서 참여자들이 공동으로 기록 및 관리하는 기술로 공유원장 이라고 불리기도 한다.
중앙 집중형 방식에 비해 인증과 증명의 효율성, 시스템 안정성, 보안성, 투명성이 뛰어나다
중간 매개체 또는 인증기관 없이 사용자가 거래 내역을 직접 공유하기 때문에 효율적이고, 비용이 줄어든다.
그리고 거래 내역이 암호화되어 분산되어 저장되기 때문에 해킹 및 위조의 위험성이 낮고, 안전하고 투명하다.
블록체인(Blockchain)은 블록(Block) + 체인(Chain). 블록들이 체인으로 연결되어 있는 구조이다.이 블록(Block)은 헤더(Header) + 바디(Body)로 이루어져 있고, 헤더(Header)는 메타데이터, 바디(Body)는 트랜잭션들의 리스트로 구성되어 있다.
블록은 거래의 기록단위로 다수의 트랜잭션을 포함할 수 있다.
블록이라는 데이터를 설명하는 데이터이다.
데이터베이스의 상태를 변환시키는 기능을 수행하기 위한 작업의 단위라고 하며, 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어 ACID를 통해 트랜잭션의 특성을 알 수 있다.
내가 은행앱에서 김코딩한테 돈을 이체한다면, 이 행위자체가 트랜잭션이 일어난것이고, 은행의 원장(데이터베이스)에 나의 트랜잭션이 기록될것이다. 트럔잭션은 ACID 성질을 갖고 이를 통해 안정성을 보장한다.
ACID?
Atomicity(원자성), Consistency(일관성), Isolation(격리성, 고립성), Durability(지속성)
블록체인에서 트랜잭션 역시 작업 수행의 논리적 단위이다. 추상적인 관점에서 트랜잭션은 블록체인의 상태(State)를 변화시키는 일련의 작업을 내포하고 있다.
예를 들어, 앨리스가 밥에게 $50를 송금을 하고자 한다면, 자신이 보유하고 있는 전체금액에서 앨리스는 -$50, 밥은 +$50의 상태변화가 생긴다.
비트코인과 이더리움의 트랜잭션 데이터 구조는 각각 다음과 같고, 논스(nonce)의 유무가 가장 큰 차이이다.
이더리움 트랜잭션 논스(nonce)의 특징은 2가지가 있다.
최초 계정 생성시 nonce는 0 (계정 기준으로 전송된 트랜잭션이 하나도 없을때 )
전송한 Transaction1 : 1(nonce)
전송한 Transaction2 : 2(nonce)
전송한 Transaction3 : 3(nonce)
...전송한 Transaction10 : 10(nonce)
트랜잭션은 외부 소유 계정(EOA)에 의해 서명된 메시지로, 이더리움 네트워크에 의해 전송되고 이더리움 블록체인에 기록된다.
필드 | 설명 |
---|---|
논스(nonce) | 발신 EOA에 의해 발행되어 메시지 재사용을 방지하는데 사용되는 일련번호 |
가스 가격(gas price) | 발신자가 지급하는 가스의 가격 |
가스 한도(gas limit) | 이 트랜잭션을 위해 구입할 가스의 최대량 |
수신자(recipient) | 목적지 이더리움의 주소 |
값(value) | 목적지에 보낼 이더의 양 |
데이터(data) | 가변 길이 바이너리 데이터 페이로드 |
v, r, s | EOA의 ECDSA 디지털 서명의 세가지 구성 요소 |
논스란 발신주소의 속성이며, 발신주소의 컨텍스트 안에서만 의미를 갖는다.
명시적으로 저장되지않고 해당 주소에서 발생한 확인된 트랜잭션 건수를 세어서 동적으로 계산되는 값이 논스이다.
논스는 중복되지 않고, 순차적이기 때문에 같은 논스의 여러 트랜잭션 전송이 발생했다면 해당 논스중 가장 높은 가스비를 지불한 트랜잭션이 처리된다. 이더리움은 이러한 방법으로 이중 지불 문제를 방지한다.
이중 지불 문제란?
트랜잭션은 일회성이다. 하나의 트랜잭션은 하나의 상태만 변화시킬 수 있다.
하나의 트랜잭션이 중복해서 처리되는(지불되는)것을 말한다.
예를 들자면, A가 B에게 1,000원이라고 기록된 파일을 전송한 후 다시 해당 트랜잭션을 복사하여 C에게 또 1,000원을 전송하는 것.
만약, 논스가 0인 트랜잭션 전송 후 논스가 2인 트랜잭션을 전송한다면?
논스가 2인 트랜잭션은 어떤 블록에도 포함되지 않는다. 이더리움 네트워크는 누락된 논스(논스 1)가 나타날 때까지 기다리는 동안 두 번째 논스를 멤풀(mempool)에 저장한다.
멤풀(mempool)이란?
아직 블록에 들어가지 않은 상태의 트랜잭션들이 어떤 공간에 있는 것을 의미함.
그 다음 논스가 1인 누락된 트랜잭션을 전송하면, 두 트랜잭션이 처리가 되고 블록에 포함한다.
➕비트코인의 경우 이중지불 문제를 UTXO(Unspent Transaction Outputs)을 통해 해결한다.
우리는 블록체인이 탈중앙화라는 것을 알고 있다. 그렇다면 관리자 없이 시스템이 어떻게 돌아가는지?에 대한 물음이 동반하는데, 이 부분의 솔루션을 채굴(Mining)과 노드(Node)가 갖고있다.
전 세계적으로 수십만개 이상이 존재하며 블록체인에서는 이 블록체인 블록정보를 가지고있는 네트워크 참여자, 즉 서버를 노드(Node)라고 한다.
이 여러개의 노드는 P2P로 연결되어 블록체인 네트워크를 형성한다. 그리고 하나의 거래 정보가 발생하면 이 거래 정보는 블록체인 네트워크에 분산되어 있는 수많은 노드에 전파된다.
노드의 종류는 여러가지가 있지만, 주로 두가지로 분류 할 수 있다.
SPV(Simple Payment Verify)란?
라이트 노드에서 개별 거래를 검증하기 위해 풀 노드에게 블록정보를 요청하여(이때, 머클트리가 쓰인다) 이 거래가 검증된 거래인지를 확인하는 방법이 SPV이다.
왜 구분하는가?
저장용량이 큰 풀 노드는 그만큼 데이터를 불러오는데에 걸리는 시간이 오래걸린다.
또한 스마트폰같이 저장공간이 블록정보를 모두 저장하기 엔 부족한 기기들도 블록체인 네트워크에 참여할 수 있게 구분하여 사용한다.
채굴(Mining)이란, 암호화폐의 트랜잭션을 기록한 블록을 생성하고 그 대가로 암호화폐를 얻는 행위를 말한다. 분산원장 시스템이라는 광산에서 합의 알고리즘이라는 작업을 통해 코인을 소유하는 것을 표현한 것이다.
새로운 블록을 만드는 것이 바로 채굴의 핵심이며, 블록체인 기반의 암호화폐에서 새로운 블록을 생성하고 그 대가(보상)로 암호화폐를 지급받는 사람을 채굴자 혹은 마이너(miner)라고 한다.
비트코인에서 채굴에 보상이 주어지는 이유
누군가는 트랜잭션을 기록하고 네트워크를 통해 전파해야 그 네트워크가 유지될텐데, 이는 네트워크 및 전력장원이 낭비되고 아무런 보상이 없다면 결국 네트워크가 유지될 수 가 없다.
노드가 발행한 블록이 올바른지 검증하기 위해 다수의 참여자들이 통일된 의사결정을 하는데 사용하는 알고리즘을 말한다
블록체인 네트워크경우는 데이터의 원본과 사본의 구별이 없으며, 통일된 의사결정을 내릴 수 있는 중앙이 존재 하지 않기 때문에 데이터를 잘못된 값으로 변경하거나 다른 노드들과 올바르지 않은 정보를 공유하는 피어를 찾아내고 방지하는 것이 큰 도전 과제이다.
이런 상황에서 합리적이고 효율적인 의사결정을 내릴 수 있는 다양한 알고리즘이 개발되었다.
현재로서는 시빌 공격(Sybil attack)같은 블록체인 네트워크에 대한 각종 공격에 맞서 놀랄 만큼 성공적이라고 입증된 유일한 알고리즘이다.
이오스(EOS)는 위임지분증명(DPoS) 방식을 사용하는 제3세대 암호화폐이다.
블록체인 지갑은 블록체인에서 실행되고, 개인 키 및 공개 키를 저장하고 해당 키와 관련된 모든 트랜잭션을 모니터링하고 유지하는 소프트웨어이다.
즉, 비트코인, 이더리움 등의 암호화폐를 보관할 수 있는 계정을 뜻한다.
노드(Node)가 바로, 지갑의 기능을 한다.
지갑은 주소(공개 키. Public key)와 암호(개인 키. Private Key)로 구성되어 있다. 지갑의 주소는 다른 사람들이 암호화폐를 송금할 수 있도록 공개하지만, 개인 암호(개인 키)는 오직 지갑 소유자 본인만 알고 있어야 한다.
앞서 비트코인은 UTXO를 통해 이중지불 문제를 해결한다고 했다.
UTXO는 미사용 트랜잭션 출력값으로 이더리움의 어카운트(Account) 계좌 잔고 모델과 달리 잔고라는 개념이 없고 블록체인에 기록된 소비되지 않은 출력 값을 통해 거래의 유효성을 검사하여 코인의 존재 여부를 확인한다.
즉 코인이 지갑이 아닌 UTXO에 저장된다고 보면 된다.
- A가 김코딩한테 2비트를, B가 김코딩한테 5비트를 보낸다면 김코딩은 총 8비트와 2개(2비트 UTXO, 5비트 UTXO)의 UTXO를 가진다.
- 김코딩이 C에게 4비트를 보낸다면 김코딩이 가진 UTXO 중 4비트 이상인 값을 찾는다 그리고 해당값을 입력값으로 넣고 C의 지갑에서 출력값으로 찍히는 4비트를 제외하고 1비트는 김코딩의 지갑에 찍히게 된다. (김코딩의 해당 UTXO는 소멸되고 새로운 1비트의 UTXO가 생성된다)
이렇게 한번 타인에게 전달한 UTXO는 영원히 소멸되고, TX Pool에 들어가며 사용기록을 추적 할 수 있으므로 이중지불 문제가 생기지 않는다.
그리고 트랜잭션이 일어나서 남은 잔고를 계산할때에 그 동안의 모든 거래내역을 검토하는게 아니라,
UTXO만을 확인해 표시해 주면된다.
- UTXO의 장단점
- 장점
- 이중 지불 방지
트랜잭션이 발생하면 해당 UTXO는 검증을 받은 후 TX Pool에 들어간다. 그러므로 이중지불이 발생하면 채굴자들은 Pool에서 UTXO 검사 후 사용 기록이 있다면 해당 거래를 무효화 할 수 있습니다. 이중지불 방지의 장점으로 하이퍼레저 패브릭(Hyperledger Fabric)에서도 UTXO를 사용한다.- 잔고의 증명
UTXO는 추적하기가 용이하다. 즉, 거래에 대한 유효성을 검증하기가 매우 쉽다. 일반적으로 이더리움 같은 경우는 트랜잭션들을 모두 검증 및 확인하여 최종적으로 잔고를 유추하지만 UTXO는 해당 사용자의 UTXO만 확인하면 되기 때문에 그럴 필요가 없다.- 단점
UTXO의 가장 큰 단점은 UTXO가 너무 과하게 생성이 될 경우이다.
UTXO 방식을 채용하는 코인들은 흩어져 있는 UTXO를 모두 모아야 되며 소액 결제를 엄청 자주 하거나, 채굴로 이자를 받게 되면 과도한 UTXO로 인해서 불필요한 수수료를 내야할 수 있다.
어카운트(Account)란?
이더리움 주소(Address)와 개인키(Private Key)의 조합을 계정(Accounts)이라고 한다. 이더리움 계정은 이더 잔고를 보유하고 트랜잭션을 전송할 수 있다.
001d3f1ef827552ae1114027bd3ecf1f086ba0f9
과 같은 형태를 가지게 되며, 각 주소에는 해당 개인키가 있다.주소 + 개인키
쌍이 필요하다.이더리움 주소 생성 과정
1) 개인 키를 생성하고, 개인 키로부터 공개 키를 생성
2) keccak256 알고리즘으로 공개 키의 해시값을 계산
3) 생성된 해시값의 뒤쪽 20byte만 남기고 제외후 이더리움 주소를 생성하게 된다.
이더리움의 2가지 유형 계정
어카운트의 장단점
💡 왜 비트코인은 UTXO를 사용하고 이더리움은 nonce를 사용하는가?
화폐의 역할에 충실해야 한다면 비트코인의 UTXO가 한번 사용되고 사라져 익명성과 보안성이 강하기 때문에 더 훌륭하지만, DApp과 같이 다양한 기능을 구현하고 싶다면 스마트 컨트랙트를 활용할 수 있는 이더리움의 Account가 적절하다.
비트코인 코어(Bitcoin Core)는 비트코인의 레퍼런스 클라이언트이다.
개발자들은 비트코인 코어의 변경사항을 통해 기반이 되는 비트코인 프로토콜을 변경하게 되고, 비트코인 코어는 풀노드를 돌리는 것을 전제로 한 소프트웨어이므로 100GB가 넘는 블록체인 데이터를 다운로드 받아야 제대로 사용 가능하다.
💡 비트코인은 무슨 언어로 개발되었나?
비트코인은 다양한 언어로 개발되었고, C++이 주 언어이다.
이더리움 클라이언트는 이더리움 블록체인 네트워크를 구성하는 개별 클라이언트 노드(node) 이다.
이더리움 클라이언트는 멀티 플랫폼 환경을 지원하기 위해 다양한 프로그래밍 언어로 개발되고 있다.
이더리움 블록체인에서 응용 프로그램을 빌드하는 데 사용할 수 있는 도구들
블록체인에 연결할 수 있는 자바스크립트 클라이언트(geth console)도 있다.
거버넌스(Governance)란
구성원들이 이해관계를 조정, 의사결정에 참여하여 중요한 사항을 집단으로 결정하는 체계를 말한다. 협치라고도 한다. 기존의 거버넌스의 의사결정 방식은 정부나 기업처럼 상명하복식의 수직적인 체계 였다면 블록체인의 등장으로 탈중앙화 분산형 조직이 DAO가 생겨나며 수평적이고 자율적인 거버넌스 구조가 확산되었다.
블록체인 거버넌스는 다양한 커뮤니티를 통해 네트워크의 방향성을 잡고 의사결정을 하는데 대표적인 예로 비트코인의 BIP, 이더리움의 EIP등 이있다. 다양한 코인들 또한 네트워크 성장을 위한 거버넌스의 필요성을 인지하고 구축하고 있다.
거버넌스의 문제점
성숙된 민주의식을 기본으로 둔 시민사회가 전제되어야 함. 참여자들이 트롤짓을 할 경우 그 책임을 누가 지는가에 대한 문제가 발생 할 수 있음. (예: 이더리움 비트코인의 하드포크)
BIP / EIP / ERC / KIP
https://m.blog.naver.com/mage7th/221439829511 UTXO