7 분 소요

블록체인


공개 범위에 따른 블록체인

구분 퍼블릭 블록체인(Public Blockchain) 프라이빗 블록체인(Private Blockchain) 컨소시엄 블록체인(ConsortiumBlockchain)
관리자 모든 거래 참여자 한 중앙 기관이 모든 권한 보유 컨소시엄에 소속된 참여자
거버넌스 한 번 정해진 법칙을 바꾸기 매우 어려움 중앙 기관의 의사 결정에 따라 용이하게 법칙을 바꿀 수 있음 컨소시엄 참여자들의 합의에 따라 법칙을 바꿀 수 있음
거래 속도 네트워크 확장이 어렵고 거래 속도가 느림 네트워크 확장이 매우 쉽고 거래 속도가 빠름 네트워크 확장이 쉽고 거래 속도가빠름
데이터 접근 누구나 접근 가능 허가 받은 사용자만 접근 가능 허가 받은 사용자만 접근 가능
식별성 익명성 식별 가능 식별 가능

세계은행 그룹의 블록체인 구분


img1

분산원장기술(DLT)

분산원장은 거래 정보를 기록한 원장을 특정 기관의 중앙화된 서버가 아닌 분산화된 네트워크에서 참여자들이 공동으로 기록 및 관리하는 기술이다.

기존의 중앙집중원장의 취약점


  • 비용 문제
    • 제 3자인 중앙집중형 관리시스템은 거래자들 사이에서 과도한 관리, 중개수수료를 청구
      • 데이터베이스 유지, 보안 유지에 대한 비용 부담
  • 시간 문제
    • 상호거래의 프로세스에 중앙은행과 금융결제원, 외환거래의 경우 더 많은 중간다리가 포함되어 해외송금이나 주식대금 결제의 경우 당일 처리도 어려움
  • 보안 문제
    • 중앙 데이터베이스가 침해되면 모든 데이터에 대한 위험

분산원장기술의 장점


  • 인증과 증명의 효율성
  • 시스템 안정성
  • 보안성
  • 투명성

-> 사용자가 거래 내역을 직접 공유 가능하고 거래 정보가 분산되어 저장되기 때문에 개인 지갑 사이의 거래 또한, 가능하다.

트랜잭션

트랜잭션이란, 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위이며, ACID의 성질을 가져야 한다. 이러한 트랜잭션은 블록체인 body에 저장된다.

비트코인과 이더리움의 트랜잭션 데이터 구조 차이


비트코인과 이더리움의 트랜잭션 데이터 구조는 논스값의 유무가 가장 큰 차이라고 볼 수 있다.

비트코인 트랜잭션 구조

필드 설명
버전 번호 채굴자와 노드가 트랜잭션 처리에 사용할 규칙을 지정하는데 사용
입력 카운터 트랜잭션에 포함된 입력의 개수
입력 리스트 블록의 첫 트랜잭션은 코인베이스 트랜잭션 입력 리스트에는 하나 이상의 트랜잭션 입력이 포함
출력 카운터 출력의 개수를 나타내는 양의 정수
출력 리스트 트랜잭션에 포함된 출력
로크(Lock) 시간 트랜잭션이 유효해지는 가장 빠른 시간을 정의하는 필드

이더리움 트랜잭션 구조

필드 설명
논스(Nounce) 발신 EOA에 의해 발행되어 메시지 재사용을 방지하는데 사용하는 일련번호
가스 가격(Gas Price) 발신자가 지급하는 가스의 가격
가스 한도(Gas Limit) 이 트랜잭션을 위해 구입할 가스의 최대량
수신자(Recipient) 목적지 이더리움의 주소
값(Value) 목적지에 보낼 이더의 양
데이터(Data) 가변 길이 바이너리 데이터 페이로드
v, r, s EOA의 ECDSA 디지털 서명의 세가지 구성 요소
  • EOA(Externally Owned Accounts)
    • 일반적인 계정의 유형으로 계정의 주소를 통제할 수 있는 개인키 + 이더리움 주소의 조합이다.
  • ECDSA(Elliptic Curve Digital Signature Algorithm)
    • 이더리움에서 사용되는 디지털 서명 알고리즘

논스(Nonece)

발신 주소의 속성이며, 발신 주소의 컨텍스트 안에서만 의미를 갖는 값으로, 해당 주소에서 발생한 확인된 트랜잭션 건수를 세어 생성된다. 논스는 순차적이기 때문에 같은 논스에 여러 트랜잭션 전송이 발생했다면, 가장 높은 가스비를 지불한 트랜잭션이 처리되는 형식으로, 이중 지불 문제를 방지한다.

  • Ex. 논스 0 트랜잭션 전송 -> 논스 2 트랜잭션 전송
    • 논스값은 순차적으로 진행되기 때문에 논스 1이 나타날 때까지 논스 2 트랜잭션은 대기(멤풀 : 아직 블록에 들어가지 않은 상태의 트랜잭션이 있는 곳)
    • 논스 1이 들어오면 논스 2도 처리
  • 결국 논스는 같은 트랜잭션이 두 번 처리되지 않기 위한 장치라고 생각하면 된다.

  • 비트코인의 경우, 이중 지불 문제를 해결하기 위해 UTXO(Unspent Transaction Outputs, 미사용 트랜잭션 출력값)을 통해 해결한다.
    • UTXO :사용되지 않은 거래 정보로, 동일한 UTXO 정보를 사용한 트랜잭션을 한 블록에 담을 수 없도록 하여 이중 지불 문제를 해결한다.

블록체인의 구성 요소


합의 알고리즘

합의 알고리즘이란 다수의 참여자들이 통일된 의사결정을 하기 위해 사용하는 알고리즘이다. 블록체인 시스템의 경우, 동일한 데이터를 복사하여 분산 저장하기 때문에 통일된 의사결정을 내릴 수 있는 중앙기관이 존재하지 않으며, 데이터에 대한 검증 또한 각각의 노드들이 수행해야 하기 때문에 이를 위해 올바른 블록 생성을 이끌어 내는 알고리즘이 합의 알고리즘이다.

작업 증명(PoW, Proof of Work)


작업 증명은 비트코인을 창시한 사토시 나카모토가 제안한 알고리즘으로, 블록 생성 시간동안 가장 많은 해시파워를 제공한 노드가 블록을 생성할 수 있도록 설계된다.

  • 여기서 해시파워는 블록을 생성하기 위해 논스(트랜잭션 논스와는 다르다.)라는 임의의 값을 맞히는 과정을 마이닝이라고 부르는 데, 마이닝을 통해 블록을 생성하고 트랜잭션을 블록에 담고 연결하는 작업을 완료할 수 있는 능력을 말한다.
  • 작업 증명은 시빌 공격과 같은 공격자가 한 명이면서 마치 여러 명인 것처럼 속이는 방식으로 여러 노드를 제어함으로써 네트워크를 망치는 행위를 막을 수 있다.
  • 그러나 작업 증명 경쟁에서 도태된 나머지 노드들이 에너지 자원을 낭비할 수 있다는 단점이 있다.
  PoW의 특징
장점 - 현재 높은 시장 가치를 형성하고 있는 주류 코인들이 채택 - 강력한 보안성 - 서비스 남용 방지
단점 - 높은 전력 소모를 통해 자원 낭비 - 지속적으로 해시파워를 유지 - 특정 마이닝 세력의 해시 독점으로 인한 생태계 교란 우려

지분 증명(PoS, Proof of Stake)


지분 증명은 노드 또는 지분을 많이 가지고 있는 노드에게 블록을 생성할 권한을 주는 것으로, 코인을 많이 가지고 있을 수록 권한이 더 많이 부여된다.

  • 여기서 채굴자는 단지 일정 수 이상의 코인을 보관하고 있는 지갑을 블록체인 네트워크에 연결시켜놓기만 하면 보상을 받을 수 있고, 이는 블록 생성자와 지분 생성자의 이해관계를 일치시켜, 블록을 올바르게 사용할 수 있도록 유도하며, 잘못 생성할 경우 패널티를 부여한다.
  • PoW보다 에너지 소모가 적고, 코인을 가진 노드 누구나 네트워크에 허가없이 참여하기 때문에 분산화가 더 잘 되어 많은 노드가 의사 결정 과정에 쉽게 참여할 수 있는 이점이 있다.
  PoS의 특징
장점 - 해쉬파워가 많이 필요하지 않으므로 경제적이며 친환경적 - 블록 생산자의 탈중앙화로 안정성을 확보 - 블록을 생성하기 위해 지분을 담보로 잡아야 하기 때문에 Dumping을 방지
단점 - 아직 검증되지 않았기 때문에 보안성이 강한지 확인 불가 - 지분이 많은 노드가 독점 우려

위임 지분 증명(DPoS, Delegated Proof of Stake)


PoS에서 변형된 것으로, 시스템의 지분을 가진 각 노드가 투표를 통해 검증을 다른 노드에 위임하여 증명하는 개념이다.

  • 합의에 참여하는 노드의 수가 한정되어 매우 빠른 성능과 확장성을 보이지만, 완전히 탈중앙화된 구조는 아니다.
  DPoS의 특징
장점 - PoS에 비해 많은 트랜잭션을 빠르게 처리 가능 - PoW에 비해 비용이 낮다 - 하드포크의 위험이 낮다. - 증인들이 투표에 참여할 인센티브가 분명
단점 - 증인끼리 담합할 위험 - 공개된 소수의 증인에 대한 디도스 공격 위험(중앙화)

비잔틴 장애 허용(BFT, Byzantine Fault Tolerance)


비잔틴 장애 허용은 장애가 있더라도 전체의 3분의 1을 넘지 않는다면, 시스템이 정상 작동하도록 허용하는 알고리즘이다.

  • 해당 알고리즘은 참여자가 많을 수록 연산량은 낮더라도 네트워크 트래픽이 많이 발생하기 때문에 느려지며, 따라서 작은 그룹에서 용이하다.
  • 또한 2/3이상이 담합할 경우 중앙화 문제가 발생하며, 참여 노드의 1/3이상이 합의에 참여하지 않을 경우 합의 자체가 불가하다는 문제점이 있다.

지갑과 어카운트

지갑


지갑이란 블록체인에서 실행되고 개인 및 공개 키를 저장하고 해당 키와 관련된 모든 트랜잭션을 블록 체인에 모니터링하고 유지하는 소프트웨어로, 암호화폐를 보관할 수 있는 계정이다.

지갑의 구조

지갑은 주소(공개키, Public Key)와 암호(개인 키, Private Key)로 구성되어 있으며, 주소는 공개되어 있지만, 암호는 트랜잭션 서명에 사용되기 때문에 노출되면 안된다.

비트코인 -UTXO(Unspent Transaction Ouputs)


UTXO란 미사용 트랜잭션 출력값을 뜻하며, 비트코인은 이더리움의 어카운트 모델과 달리 계정이나 잔고가 없으며, 블록체인에 기록된 소비되지 않은 출력값을 통해 거래의 유효성을 검사하여 코인의 존재여부를 확인한다. 즉, 코인은 지갑이 아닌 UTXO에 저장된다.

장점

  • 이중 지불 방지 : 트랜잭션 발생 시, 해당 UTXO는 검증을 받은 후, Tx Pool에 들어가기 때문에 이중 지불과 같은 트랜잭션을 검증 및 무효화할 수 있다.
  • 잔고의 증명 : UTXO는 이더리움의 검증과 같이 모든 트랜잭션을 검증할 필요가 없고, 단지 해당 사용자의 UTXO만 확인하면 되기 때문에 추적이 용이하다.
  • 보안성, 익명성 : 소비된 UTXO의 경우, 사라지기 때문에 익명성과 보안성이 강하다.

단점

  • UTXO가 너무 과하게 생성될 경우, 흩어져 있는 UTXO를 모두 모아야 하기 때문에 소액 결제를 엄청 자주하거나, 채굴로 이자를 받게 될 경우, 불필요한 수수료를 지불해야 한다.

이더리움 - 어카운트(Account)


어카운트란 주소(Address)와 개인키(Private Key)의 조합이며, 이더리움 계정은 이더 잔고를 보유하고 트랜잭션을 전송할 수 있다.

  • 주소(Address)

    • 사용자를 나타내는 신분증과 같은 것이며, 블록체인과 상호작용시 주소 + 개인키 모두 필요하다.
  • 키(Key)

    • 키는 개인키와 공개키로 구분되어 사용되며, 개인키는 무작위로 생성되며 비밀키로써 유지해야 하는 반면, 공개키는 개인키를 연산하여 생성되며 계정을 식별하는 요소로 사용된다.

이더리움 주소 생성 과정

  1. 개인 키 생성 -> 공개 키 생성
  2. Keccak-256 알고리즘으로 공개 키의 해시값을 계산
  3. 생성된 해시값의 뒤쪽 20byte만 남기고 제외 후 이더리움 주소 생성
    • 암호화 알고리즘이 이후에 생성된 계정과 중복되지 않기 때문에 문제 X

이더리움의 2가지 유형 계정

  • 외부 소유 계정(EOA)
    • 위에 언급한 Account, 다른 계정과 이더를 송수신하고 스마트 컨트랙트에 트랜잭션을 보낼 수 있다.
  • 컨트랙트 계정(CA)
    • 컨트랙트 계정에는 개인키가 없으며, 스마트 컨트랙트를 블록체인에 배포 시 생성된다.
    • EOA와 같이 이더를 송수신 가능하지만, 관련된 코드를 담는다는 점에서 EOA와 차이점이 있다.
      • 담은 코드는 어카운트의 호출을 받아 트랜잭션을 발생시킬 수 있다.

장점

  • 단순성 : 트랜잭션에 상태를 기반으로 수행하기 때문에 단순하다.
  • 효율성 : 전송 계정이 거래 비용을 지불하기에 충분한 잔액을 가지고 있는지만 확인하면 되기 때문에 효율적이다.

단점

  • 이중 지불 : 이중 지불 공격에 노출되지만, 논스 구현으로 방지한다.

비트코인 코어, 이더리움 클라이언트, 거버넌스


비트코인 코어

비트코인 코어는 비트코인의 레퍼런스 클라이언트로, 개발자들은 비트코인 코어의 변경사항을 통해 기반이 되는 비트코인 프로토콜을 변경하게 되고, 비트코인 코어는 풀노드를 돌리는 것을 전제로 한 소프트웨어이므로 100GB가 넘는 블록체인 데이터를 다운로드 받아야 제대로 사용 가능하다.

Bitcoin 논문

Bitcoin Repo

이더리움 클라이언트

이더리움 클라이언트는 이더리움 블록체인 네트워크를 구성하는 개별 클라이언트 노드이기 때문에 중앙집중형 서버 프로그램이 존재하지 않는다.

Geth


Geth는 이더리움 재단이 제공하는 공식 클라이언트 소프트웨어로, Go언어로 개발되었다. Geth는 네트워크 내의 다른 이더리움 클라이언트에 연결하는 작업을 먼저 시작하고 블록체인의 전체 사본을 내려받게 된다. 이후 블록체인의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신한다. 또한 Geth를 이용해 블록을 채굴하고, 트랜잭션 작업을 할 수 있으며, RPC를 통해 상호작용할 수 있는 API를 노출하여 서버 역할도 한다. (JS Geth Console도 존재한다.)

Parity


Parity는 이더리움 프로토콜의 또 다른 구현체이며, Rust로 구현되었다. 원한다면 자신의 클라이언트를 구현할 수 있다,

이더리움 황서

블록체인의 거버넌스

블록체인의 거버넌스는 블록체인 네트워크를 유지하기 위해 구성원들간의 이해관계를 조정하는 커뮤니티로, 오프체인 거버넌스와 온체인 거버넌스로 나누어지는데, 비트코인과 이더리움의 하드포크가 발생하는 것은 오프체인 거버넌스로 볼 수 있고, 온체인 안에서 새로운 제안을 하고, 플랫폼 구성원들이 투표하여 의사결정하는 구조를 제안하는 것을 온체인 거버넌스로 볼 수 있다.

효과 및 문제점


  • 효과 : 경험해보지 못한 복잡한 문제 발생 상황에서 유용하고 현실적인 대안이 된다.
  • 문제점 : 참여자들의 지위가 불명확하기 때문에 문제에 대한 책임이 불분명하다.

BIP/EIP/ERC/KIP


  • BIP : 비트코인의 개선 제안

BIP

  • EIP : 이더리움의 개선 제안

EIP

  • ERC : 이더리움의 표준이 될만한 내용, EIP가 토론을 통해 이루어진다면, ERC는 기술적으로 설명하여 제시
  • KIP : 클레이튼의 개선 제안

KIP

본 포스팅은 코드스테이츠 BEB 과정을 수강하며 작성한 글입니다.