본문 바로가기
학교공부/[블록체인]

[블록체인] - 비트코인

by 윈디개 2025. 12. 11.

이전 글에서는 블록체인에 적용되는 암호학에 대해서 정리해 보았다. 이번 글에서는 본격적으로 비트코인이 해결했던 문제들에 대해서 정리해 보려고 한다.


1. 비트코인 프롤로그

 비트코인은 많은 사람들이 비트코인이 가상화폐 이름으로만 알고 있지만 블록체인 기술이 적용된 시스템 이름이기도 하다. 즉, Software에 해당하는데, 그 안에는 비트코인이 정의한 프로토콜들이 기술되어 있고, 이 프로토콜들이 실제로 동작할 수 있도록 해준다.

 

 비트코인이라는 S/W가 돌아가면, 비트코인의 코인들이 생성되고, 다른 주소로 이동할 수 있다. 이러한 행동들을 Transaction 데이터라고 하고, 이 트랜젝션 데이터는 블록이라는 단위로 묶이게 된다. 그리고 블록체인에 의해 이런 블록들이 순서대로 연결되어 장부(ledger)를 구성한다.

 

+) 하나의 블록에 여러 개의 트랜잭션들이 포함되지만, 어떤 블록은 트랙잭션이 아예 없을 수도 있다. 대표적인 예가 바로 채굴자 보상(Block Reward)으로 생성되는 코인베이스(Coinbase) 트랜잭션이다. 이 트랜잭션은 이전 트랜잭션의 Ouput을 Input으로 참조하지 않고 새롭게 비트코인을 발행하는 역할을 한다.


2. 비트코인이 해결한 문제_Single Central Bookkeepr

 그럼 이 비트코인이 어떻게 작동하는지에 대해서 알아보려고 한다. 그리고 기존 금융 시스템의 문제는 어떻게 해결했는지 정리해 보려고 한다.

 

 비트코인이 등장하게 된 배경을 떠올려보면, 사토시 나카모토는 제 3자(은행 등)가 개입하지 않는 탈중앙화된 금융 거래 시스템을 만들길 원했다. 즉, 누구의 승인이나 허락도 없이, 오로지 돈을 보내느 사람과 받는 사람만 거래에 참여할 수 있는 시스템을 목표로 했다.

 

  이런 구현을 위해 먼저 기존의 전자 결제 시스템이 어떻게 작동하는지 알아야 한다. 기존의 중앙화된 모델에서는 아래 그림처럼 거래 내역을 관리하는 Bookeeper가 있어야 했다. 이 Bookkeeper는 모든 계좌의 잔액과 거래를 기록해야 한다.

 

비트코인을 Single Central Bookkeeper로 적용하게 된다면, 다음과 같은 문제가 생긴다.

  • 중앙에서 거래를 기록하고 유지할 시스템(또는 사람)이 필요하다.
  • 이 시스템은 트랜잭션의 유효성을 검증하고 관리해야 한다.

이런 문제들이 존재하게 된다면, 비트코인을 사용할 이유가 사라지게 된다. 즉, Censorship resistance, 검열 저항성을 달성하기 어려워진다.

 

 이런 Singel Central Bookkeeper 문제를 해결하기 위해 비트코인은 다음과 같은 해결책을 도입했다. 

- Solutions: Replicate the Books

이름에서 알 수 있듯이, Books는 곧 ledger(장부)에 해당하고, 비트코인은 이 장부를 모든 참여자에게 복제하도록 설계했다. 이를 통해서 달성할 수 있는 것들은 다음과 같다.

  • 누구나 어디서에든지 허락 없이(Bookeeper의 허락 없이) 장부를 유지할 수 있다. 이를 통해 완전한 탈중앙화를 이룰 수 있다.
    • 이는 곧 내 장부는 내가 관리하겠다라는 것을 의미하며, 기존 은행 시스템에서는 절대 있어서는 안될 일이지만, 비트코인 시스템에서는 가능하다.
  • 모든 참여자(bookkeeper)는 장부(database)에 대한 동일한 거래 기록을 가지고 있어야 한다.
  • 만약 누군가가 database를 변경하려고 한다면, 다른 사람들은 이를 무시하거나 네트워크에서 배제한다.
  • 이러한 네트워크는 누구나 자유롭게 참여할 수 있고 언제나 떠날 수 있는 개방형 구조로 유지된다.

3. 비트코인이 해결한 문제_계좌 Set-up

 다음은 계좌를 만들 때 생기는 문제이다. 비트코인도, 거래를 해야하기 때문에 계좌는 필요하다.

 

 그렇지만, 기존 은행 시스템을 생각해보자. 기존 은행 시스템에서는 누군가가 계좌를 만들기 위해서는 반드시 중앙 관리자(은행 직원 또는 시스템)가 계좌 번호를 할당해주어야 한다. 그리고 신분증 인증, 개인정보 검증 등의 과정을 거쳐야 한다. 그렇지만, 비트코인은 탈중앙화를 이루어야 하기 때문에, 기존 은행의 중앙 승인 절차나 계좌 발급 과정을 적용할 수 없다.

 

 이러한 문제를 해결하기 위해 비트코인에서는 다음과 같은 해결책을 도입했다.

- Solutions: Public Keys와 Address

Public KeysAddress를 이용했다. 비트코인에서는 public key에 해시값을 적용해 이를 Address로 이용하고, 디지털 서명을 비밀번호 대신에 사용한다. 이러한 시스템은 다음과 같은 특징을 지닌다.

  • 비트코인에서 계좌번호는 address라고 불린다.
  • addresss는 원하는 만큼 많이 만들 수 있고, Wallet이라는 software가 대신 관리해준다.
  • address를 공개적으로 알려(broadcast) 해당 address에 송금을 받을 수 있고, 다른 사람이 해당 address의 private key를 가지고 있지 않다면 해당 계좌의 자금을 쓸 수 없다.
    • 은행 시스템에서 계좌가 노출된다면, 해당 계좌가 도용되어 불법 자금이 입금된 사실이 발견되면 계좌가 동결 경우가 존재하지만, 비트코인에서는 그런 일은 발생하지 않는다.

4. 비트코인이 해결한 문제_Synchronization(in Transaction Ordering)

 다음은 동기화 문제이다. 이 동기화라는 문제는 여러 bookkeeper가 동시에 거래를 처리할 때, 서로 다른 순서로 트랜잭션을 받게 되면서 발생한다.

 

 앞서, Single Central Bookkeeper 문제를 해결하기 위해,  장부를 복제하고 모든 사람이 이 장부를 내려받고 볼 수 있게했다. 그런데 다음 상황을 가정해보자.

  • 트랜젝션 A,B가 거의 동시에 채굴되었다.
  • 비트코인 채굴자 1, 2가 있다. 각각 비트코인 ledger를 다 가지고 있다.
  • 채굴자 1은 트랜젝션 A가 발생한 곳이 더 가까워 A-B를 순서대로 받았고, 채굴자 2는 트랜젝션 B가 발생한 곳이 더 가까워 B-A 순서대로 받았다.

 이러한 경우 트랜젝션을 보통 Merkle tree에 포함시켜 블록에 포함시키는데, Merkle tree는 이진트리구조이기 때문에 노드간 순서가 존재한다. 그리고 그 순서에 따라 Merkle tree root 해시값도 달라지게 된다. 즉, 트랜잭션 단위로 블록을 만들고 블록체인을 구성하게 된다면, bookkeeper마다 서로 다른 ledger를 보유하게 되는 문제가 발생한다.

 

 따라서, 사용자 간 ledger가 다르면 안되고, 이러한 문제를 해결해야 한다. 이러한 문제는 다음과 같은 해결책을 도입해 해결했다.

- Solutions: Blocks

 위에서 정리했듯, 트랜젝션의 순서를 지키기는 매우 힘든 일이다. 따라서 비트코인은 트랜젝션을 block단위로 묶어 처리하는 방식을 채택했다.

  • 트랜젝션마다 기록하는 것 보다 batch(여기서는 block이 batch 단위이다.)에 트랜젝션을 기록한다.
    • 이렇게되면 유효한 트랜젝션을 지나칠 일이 생기지 않고, 더 자주 블록을 생성할 필요가 없어진다.
    • 그리고 블록이 하나 생성되기 전에 네크워크 내 모든 bookkeeper에게 도달할 가능성이 더 커진다.
  • 각 bookkeepr는 'pending' 상태인 트랜젝션들에 대해 검증하고 전파해야 한다
  • 트랜젝션들을 포함한 블록들을 전파하고 검증한뒤 저장해야 한다.
  • block 간에는 순서에 대해 차이가 거의 없기 때문에, bookkeeper들이 블록 순서에 대한 consensus(합의)할 시간이 충분하다.
  • 비트코인 시스템 내에서 블록은 평균적으로 매 10분 마다 생성된다.

 결과적으로 네트워크 내 전체 bookkeeper들이 동일한 블록 순서를 공유하게 된다. 이렇게 전역 합의(global consensus)를 달성할 수 있다.


5. 비트코인이 해결한 문제_블록생성 주기

 그러면, 위에서 언급했지만, 비트코인 시스템에서 블록은 평균적으로 10분에 한 개 생성된다고 했다. 그러면 이 10분이라는 주기는 왜, 어떻게 선택하게 되었을까?

 

 먼저, 다음과 같은 문제상황을 가정해보자.

 

 비트코인 시스템 내에서는 누구나 블록을 생성할 수 있다. 그래서, 익명의 다수 사람들이 비트코인 시스템 내에서 블록을 생성하려고 시도할 것이다. 그렇게 전 세계에 있는 비트코인 시스템 사용자들이 동시에 여러 블록을 생성하게 될텐데, 생성된 여러 블록 중 어떤 블록이 유효하고 cheating없이 공정하게 생성된 것인지 검증할 필요가 있다.

 

 그 이유는 다음과 같다.

  • 비트코인에서는 누구나 블록을 만들 수 있고, 블록들을 broadcast할 수 있다.
  • 하지만 다음 블록 creator가 누구인지 지정해 주는 중앙 관리자, conductor(블록 채굴에 성공해서 broadcast한 사람)가 없다.
  • 따라서 누가 언제 블록을 만들 수 있는지 미리 정할 수 없고, 모든 참여자가 공정한 과정을 거쳐 블록을 생성했는지를 누구나 납들할 수 있는 방식으로 증명해야 한다.

이 문제를 해결하기 위해 비트코인 시스템에서는 다음과 같은 방법을 채택했다.

- Solutions: Proof-of-Work

 위와 같은 문제는 Proof-of-Work(POW)로 해결했는데, 모두가 납득할 수 있는 조건은 다음과 같다.

  • 모든 block creator들은 10분 안에 해시를 푸는 게임에서 이겨야 한다.
  • 이 게임에서는 cheating 방법(다른 참여자가 알 수 없는 방법으로 조금 더 빨리 풀 수 있는 방법)은 허용되지 않는다.
  • 게임은 공개적으로 볼 수 있어야 하고, winner가 그들이 이겼다고(해시를 풀었다고) 증명할 수 있어야 한다.
  • 게임은 winner에게 보상이 주어져야 한다.

그럼 게임 과정(해시 함수를 푸는 과정)을 한 번 살펴보자.

  • block creator는 이전 블록에 포함되어 있지 않은(pending 상태) 여러 트랜잭션을 선택해서 블록을 만드는 데 사용해야 한다.
  • block creator는 블록 데이터(Merkle tree root hash, nonce, 이전 블록의 해시 등) 을 통해 cypto hash를 계산해야 한다.
  • 만약, 블록의 해시값이 target number 보다 작다면, 그 블록은 유효한 것이고, 모든 bookkeeper는 그 블록을 납득할 수 있다.

+) 블록이 유효하다고 해도, 블록체인에는 포함이 안될 수 있다. 비트코인에서는 Longest chain이 정식 체인이기 때문에, 이 체인에 있어야 유효한 블록으로 인정된다. 그래서 블록을 채굴 성공하고 최대한 빠른 시간 내에 broadcast해서 다른 사용자가 본인의 블록에 이어붙이게 하도록 해야 한다.

 

 그렇다면, 만약 block의 해시값이 target number보다 크다면 어떻게 될까?

  • 블록을 만들 때는 block creator가 임의로 숫자를 넣을 수 있는 nonce와 같은 특정 부분이 존재한다.
  • 이 수를 계속 바꿔가며 해시값이 작아질 때까지 계속 시도해야 한다.
  • 이러한 과정을 mining(채굴)이라고 한다.
  • 복잡한 수학 문제를 푸는 것이 아닌 반복적인 computing(계산)하는 것이다.

6. 비트코인이 해결한 문제_Block Creator에게 보상을 주는 법

 위에서, 블록 creator들은 수많은 반복 계산을 통해 해시값을 찾아 블록을 생성한다. 해당 계산 과정은 엄청난 수의 컴퓨터와, 전기, bandwidth를 필요로 하고, 이런 계산 시스템을 구축하기 위해서는 엄청난 투자를 해야 한다.

 

 이때 만약 보상이 없거나 적다면, 채굴자들은 블록을 생성할 이유가 없어지고 비트코인 시스템을 떠날 것이다. 따라서, 보상 제도를 도입해 block creator에게 해당 계산 과정에 상응하는 보상을 주어야 하는데, 비트코인 시스템에서는 이 보상을 바로 다음과 같은 방법을 채택했다.

- Solutions: Transaction Fees & Block Rewards

 보통 block 하나 채굴에 성공하면, 해당 블록에 포함되는 Transaction Fees와 Block Rewards가 주어진다.

 

 이때, Transaction fees는 비트코인으로 주어지는데 은행 시스템에서의 은행이 떼어가는 수수료라고 생각하면 된다. 만약  보상이 각 국가별의 fiat currency(법정 화폐)로 주어진다면, 나라마다 다르고, 은행 계좌에 돈이 들어오기 때문에 비트코인 원칙과 어긋난다. 따라서, 보상은 시스템 내부 화폐, BTC로 주어지는 것이다.

 

 그런데 만약, 다음과 같은 상황을 가정해보자.

  • 비트코인은 Market-Based Soltuion을 사용하는데, 각 트랜잭션이 스스로 수수료를 설정한다는 것이다.
  • 그렇다면 채굴자는 최대한 많은 트랜잭션을 선택하여 채굴을 시도할 것이다.
  • 또는 상대적으로 높은 수수료가 붙은 트랜잭션만 선택하고, 카페에서 커피를 산 트랜잭션과 같은 것들은 선택하지 않을 것이다.
  • 이렇게 되면, 네트워크에 블록에 포함되어야 할 싼 값들의 트랜잭션들이 점점 쌓여만 가고, 블록에 포함되지 않을 것이다.

이런 문제를 해결하기 위해, 비트코인은 블록 사이즈를 1MB로 제한시켰다. 만약 제한시키지 않는다면, 최대한 많은 트랜잭션을 포함시켜 블록을 생성하게 되는데, 다음과 같은 문제가 생긴다.

  • 블록의 크기가 커질수록 boradcast에 많은 시간이 걸린다.
  • 결국 10분 내에 모든 bookkeeper가 블록을 수신하지 못해 합의하는 데 시간이 지연되거나 충돌이 발생할 수 있다.
  • 또, 블록이 엄청나게 커지면 블록체인 저장 공간이 부족해지는 문제가 생길 수 있다.

따라서, 블록 사이즈 제한은 기술적으로 필요할 뿐 아니라 네트워크의 안정성과 공정성을 유지하기 위한 필수 조건이다.


7. 비트코인이 해결한 문제_Bootstrap

 비트코인 초창기를 생각해보자.

 

 2009년에 처음 도입된 비트코인은 초창기에는 시스템을 이용하는 사람도 거의 없었다. 그렇게 되면 블록에 포함시킬 트랜잭션도 존재하지 않았을 수 있다. 그렇다면, 채굴자들에게는 어떤 적절한 보상이 주어졌을까? 비트코인은 다음과 같은 해결책을 채택했다.

- Solutions: Block Rewards

 초창기에는 transaction fee가 없는 대신, 블록 채굴에 성공하면, Block으로 보상을 주었다.

 

이때, 블록에 포함된 트랜잭션이 없더라도, 시스템이 새로운 비트코인을 발행하는 특별한 트랜잭션이 존재하는데, 이를 Coinbase Transaction이라고 한다. 즉, Coinbase Transaction은 새로운 비트코인을 만드는 유일한 트랜잭션이고, 이것 이외의 모든 트랜잭션은 이미 존재하는 코인을 이동시키기만 한다.

 

현재 비트코인에서는 블록 보상은 다음과 같다.

  • 현재 비트코인의 블록 보상은 3.125BTC로 웬만한 트랜잭션 수수료보다 월등히 높다.
  • 2009년 초창기에는 50BTC였다.
  • 2,100만 BTC로 수가 제한되어 있기 때문에 블록 보상은210,000 블록마다(대략 4년 주기) 반으로 줄인다.

+) 언젠가는 모든 비트코인이 발행되고 Block reward가 0이 되는 시점이 올 것이다. 이렇게 되면 블록 채굴자가 블록 보상을 얻지 못한다. 블록을 채굴하지 않을 수도 있다는 생각이 들었다. 그렇게 되면, 시스템 내에서 Transaction이 떠돌게 될 것이고, 문제가 될 것이라고 생각했다. 그렇지만, 비트코인은 이 상황을 예상하고 있다. Block Reward가 사라지는 시점에는 비트코인 가격만 충분히 상승해 있을 것으로 예상하고, 트랜잭션 수수료만으로도 충분한 보상이 될 수 있을 것이라고 예상한다.


8.  비트코인이 해결한 문제_More Hashing, Faster Blocks, More Monetary Supply

 다음으로 살펴볼 문제는 너무 빠른 해시를 통한 빠른 블록 생성이다. 즉, 문제 상황을 설명하면 다음과 같다.

  • 만약, 몇몇 채굴자들의 hash power(hash를 풀 수 있는 능력)가 상승해 평균적으로 유요한 블록을 생성할 수 있는 speed가 두배가 된다면 어떻게 될까?

이러한 상황에서는 다음과 같은 문제가 생긴다.

  • bookkeeper가 무슨 블록을 포함시켜야 할 지 합의를 이루는 것이 어려워진다.
  • 블록 채굴이 엄청 빨라져 BTC가 더 빨리빨리 만들어지게 되면, 아마 비트코인의 가치는 떨어질 것이다.(희소성 감소)

이에 대한 해결책으로 비트코인은 다음과 같은 해결책을 채택했다.

- Solutions: Adjusting Difficulty

 비트코인은 블록 생성 속도를 일정하게 유지하기 위해 난이도 조정 매커니즘을 이용한다.

 

 이 방법을 설명하면, hash 계산의 target number를 바꾸는 것이다. 비트코인에서 target  number는 해시값 계산의 난이도를 결정한다. 이 값이 작아진다는 것은 target number보다 작아야 블록을 채굴하는 채굴단계에서 더 작은 수를 맞추는 것이 어려워 난이도가 어려워진다는 것이고, 반대로는 target number가 커진다는 것은 난이도가 쉬워진다는 것을 의미한다.

 

 따라서, 매 2016 블록마다(1블록 생성 주기를 10분이라 가정했을 때, 대략 2주에 해당하는 시기) 다음과 같은 공식을 사용해서 target number를 변경한다.

즉, 다음 difficulty는 현재 difficulty에 2주에 해당하는 시간에 2016 블록이 생성되는 데 걸리는 시간을 나눈 값을 곱해주는 식으로 갱신한다.

 

Difficulty를 갱신하는 경우는 다음과 같다.

  • T > 2weeks라면, 현재 difficulty가 어렵다고 판단해, 다음 target number의 수를 증가시킨다..
  • T < 2weeks라면, 현재 difficulty가 쉽다고 판단해, 다음 target number의 수를 감소시킨다.

+) 난이도가 높다는 것은, target number가 작다는 뜻이다. 즉, 맨 앞의 0의 수가 적다는 것이다. 난이도가 낮다는 것은 target number가 크다는 뜻이다. 즉, 맨 앞의 0의 수가 많다는 것이다.

 

이러한 조정은 중앙 제어자가 없는, 탈중앙화 상태를 유지한 채 이루어진다. 결과적으로, 채굴 속도나 hash power가 변하더라도 평균적으로 10분마다 블록 하나가 생성되는 구조를 유지할 수 있게 된다.


9. 비트코인이 해결한 문제_Block Ordering

 앞서, 비트코인은 트랜잭션의 순서를 유지하기 어렵기 때문에, 블록 단위로 채굴을 한다고 했다. 그럼, 이 블록 순서는 어떻게 지켜지는 것일까?

 

 만약, 블록마다 단순히 순번만 있다고 가정하면 어떨까? 다음과 같은 일이 발생할 수 있다.

  • 이 순번 시스템에서 100번 블록이 채굴되었고, broadcast됐다고 가정해보자.
  • 대부분의 miner는 101번 블록을 채굴하려고 할 것이다.
  • 그렇지만 어떤 miner는 101번은 누가 채굴해주겠지 하며 102번을 미리 채굴하기 시작할 것이다.
  • 그래서, 101번이 broadcast되자마자 102번을 미리 풀어놓은 miner는 102번을 바로 이어붙이고 block reward를 바라는 요행을 바랄 것이다.

+) 채굴자는 트랜잭션을 포함시키지 않고도 블록을 채굴할 수 있기 때문에(이 경우는 coinbase transaction만을 보상으로 노리는 경우다) 102번을 미리 계산할 수 있다.

 

 이 문제를 해결하기 위해서 비트코인은 다음 해결책을 채택했다.

- Solution: 블록체인

 블록체인 구조를 도입해, 각 블록이 이전 블록의 hash값을 가리키도록 한 것이다. 그럼 채굴자들은 그들이 새로 만들 블록에 이전 블록의 해시값을 넣어서 계산해야 한다.

 

 이는, 앞선 문제 상황 예시에서 102번 블록을 채굴하고 싶다면, 채굴자들은 이전 블록 101번의 해시값을 알아야 한다는 것이다. 따라서 101번이 생성되고 broadcast되기 전까지는 102번을 미리 계산해 놓을 수 없다. 결과적으로, 채굴자들은 101번 블록을 채굴하는데 더 신경쓸 수 있고, 더 이상 skip 해서 채굴할 요행을 바랄 수 없게 된다.

 

 즉, 비트코인의 블록 순서는 이전 블록의 해시를 가리키는 블록체인 구조를 통해 자동으로 결정되고 유지된다.

 

 또한, 블록체인 시스템을 도입했기에, 블록은 블록 해시에 의해 생성되어야 한다. 그리고 해시를 통해 연결되었기 때문에 블변성 특징을 띌 수 있다. 예를 들어 다음 상황을 가정해보자.

  • 블록 99, 100, 101, 102가 존재한다고 가정하자.
  • 누군가가 99번 블록의 일부 데이터를 새로운 데이터로 수정하고, 해시값을 그대로 유지해서 다시 집어넣게 된다면, 100번 블록이 참조하고 있는 해시값이 달라지게 된다. 따라서, 체인구조가 깨지게 된다.
  • 또는 누군가 새로운 데이터를 넣고 유효한 해시를 다시 계산해서 99번 블록에 끼워 넣는다해도, 100번 블록이 참조하고 있는 해시값이 달라져 체인구조가 깨진다.

 결국 하나의 블록의 일부분만 수정하더라도 이후 모든 블록을 다시 계산해야되기 때문에 사실상 블록체인을 조작하는 것은 불가능에 가까울 뿐더러 수지타산도 맞지 않는다.


10. 비트코인이 해결한 문제_Clashes/Consunsus

 다음으로 해결한 문제는 Block Clashes와 r그에 따른 Consensus문제이다.

 

 이 상황을 설명하자면, 만약 동시에 많은 블록들이 수많은 채굴자에 의해 만들어졌다면 어떨까? 그렇게 되면 다음과 같은 일들이 발생할 것이다.

  • bookkeeper는 두 개의 유효한 블록을 두 채굴자로부터 받을 것이다. 그렇게 되면 bookkeeper는 두 블록 중에 하나를 선택해서 블록체인에 연결시켜야 하는데, 어느 것을 선택했고 어느 것을 버릴까?

비트코인은 위 문제를 해결하기 위해 다음 해결책을 선택했다.

- Solutions: Longest Chain Rule

 이 solution에 대해서 조금 더 설명하자면 다음과 같다.

  • 여러 개의 블록이 거의 동시에 생성되어 충돌할 경우, 각 채굴자는 보통 자신이 먼저 본 블록을 기준으로 다음 블록을 채굴한다.
  • 시간이 지나면서 일부 체인에는 새로운 블록이 더 많이 추가되고 다른 체인은 상대적으로 짧아지게 될 것이다.
  • 이때 가장 긴 체인(Longest Chain)이 네트워크 전체에서 정식 체인으로 인정된다.
  • 나머지 짧은 체인들은 Orphan block으로 버려진다.

11. 비트코인이 해결한 문제_Double Spend

 마지막으로 살펴볼 문제는 Double Spend 문제이다.

 

비트코인 시스템에서는 동일한 비트코인을 여러 번 사용하는 시도를 막아야 한다. 다음 상황을 가정해보자.

  • 1BTC를 사용해서 두 개의 트랜잭셔을 만든다.
    • 한 트랜잭션은 물건 판매자에게,
    • 한 트랜잭션은 다시 나의 새로운 address로 보냈다.
  • 그리고, 위의 두 트랜잭션을 동시에 broadcast했다.
  • 그리고 트랜잭션이 포함될 때, 판매자에게 지불한 트랜잭션이 블록에 포함되지 않고 나의 새로운 address로 보낸 트랜잭션이 포함되길 기다리는 것이다.

만약, 두 번째 트랜잭션(나의 새로운 address에 보낸 트랜잭션)이 Longest Chain에 포함되어 블록 체인에 등록된다면, 실제로 판매자에게 돈을 지불하지 않고 물건을 얻게 되는 상황이 된다.

 

이를 해결하기 위해서 비트코인은 다음과 같은 해결책을 채택했다.

- Solutions: Wait 6 Confirmations

 이 해결책은 간단하다. 비트코인은 Wait 6 Confirmations으로 해결했다. 다음 상황을 가정해보자.

  • Alice가 Bob에게 1BTC으로 승용차 한 대를 구매했다.
  • 그리고 Alice는 같은 1BTC를 동시에 본인 새로운 Address로 보냈고, 이 둘을 다 broadcast했다.
  • 이때, Bob은 즉시 Alice에게 승용차를 주지 않고, 본인이 받은 payment 트랜잭션이 블록에 포함되고, 그 위로 최소 6개의 블록이 생성된 것을 확인하고 차를 주는 것이다.

 +) 근데 여기서 6블록이 생성된 것을 기다리는 시간은 대략 60분, 즉 1시간이 걸린다. 근데, 만약, Alice가 Bob에게 커피를 샀다고 해보자. 근데 커피를 사고 60분을 기다려야 커피를 받을 수 있다면, 커피를 비트코인을 사용해 지불할 필요가 없어진다. 그래서 물건의 가격마다 이 Confirmation을 조정해 줄 수 있다.