How does 💰bitcoin💰 actually work?

Date:     Updated:

카테고리:

태그:

  • 공동 장부
    • 사람들끼리의 거래 내역을 공동 장부에 써놓고 나중에 한번에 정산.
      • 기록만 해두고 실제 돈 거래는 정산 날 모두 모여서 거래 내역을 보고 검증하여 정산.
      • 이 공동 장부는 언제든지 볼 수 있고 기록할 수 있다. 아무나 접속해서 글을 추가할 수 있는 웹사이트 같음.
        • 아무나 기록할 수 있다는게 문제! 진실되게 기록되었다는 것을 어떻게 할 수 있을까?
          • 👉 거래 기록에 승인 되었다는 “전자 서명”을 추가. 그리고 그 전자서명은 위조될 수 없는 것이어야 함. by 공개키(pk), 비밀키(sk)
        • 근데 전자서명을 같은 문서 내에서 복사할 수도 있잖아? (거래내역 + 전자서명) 앨리스가 밥에게 100달러 냈다는 내역을 여러번 복사하면 어떡하지?
          • 👉 내역 메세지 하나하나에 고유한 ID 값을 포함해야 함. 그래서 블록에 해시값을 넣는 것 (그럼 복사하더라도 다른 해시값으로 인하여 내용이 다르니 자연스레 전자서명값도 달라지게 된다.)
        • 근데 찰리가 천만 달러를 지불한다는 내역만 남기고 막상 나중에 정산날에 나타나 실제 지불하지 않고 먹튀 해버리면 어떡해?
          • 👉 참여자들이 미리 적입해둔 금액 이상으로는 지출할 수 없게 막아둠. 미리 적입해둔 금액 이상을 지출한 거래는 무효 처리함. 예를 들어 참여자들은 미리 백달러씩을 내야하기 때문에 찰리도 100달러 낸 상태다. 그렇기 때문에 찰리가 누적 100달러 지불을 넘긴 내역을 기록할 땐 그 기록은 무효처리 된다. 그러니 먹튀할 걱정이 없다.

현실 세계에서의 손으로 쓴 서명은 어느 문서에서든지 똑같이 보이지만, 전자 서명은 문서마다 달라지기 때문에 훨씬 강력하다. 각각의 키는 256 개의 비트로 구성되며 (\(2^{256}\) 은 우주의 모든 먼지의 개수보다도 더 큰 숫자이다!) 서명하는 문서의 내용이 바뀔 때마다 전자 서명 또한 값이 바뀐다.

  • 전자 서명 만들기
    • Sign(문서의 내용, 비밀키) = 전자 서명 값
      • 전자 서명 값은 문서의 내용 + 비밀키를 조합하는 함수에 의해 만들어진다.
        • 문서의 내용도 전자 서명을 만들 때 반영되므로 누군가 내 전자 서명을 훔쳐도 그 훔친 전자 서명을 다른 문서에 대한 증표로 사용할 수 없다는 것이나 마찬가지이다. 나의 전자 서명은 나의 공개키를 가진 사람이 해독하여 내가 보낸 것임을 확인할 수 있다.
  • 전자 서명 해독하기
    • Verify(문서의 내용, 전자 서명, 공개키) = True or False
      • 전자 서명이 공개키와 짝꿍이 되는 비밀키로 이용하여 만들어져 있는게 확인이 된다면 True, 아니면 False.

가장 많은 계산 작업을 포함하고 있는 장부가 가장 신뢰할만한 장부이다.

비트코인은 은행과 같은 중앙에서 관리하는 중개인이 없기 때문에 모든 사람들이 장부를 복사하여 가지고 있어야 한다. 수 많은 장부 중에서 어떤 장부가 올바른 장부인지 알 수 있는지, 모든 사람들의 장부 내용이 언제나 완전히 똑같다는 것을 어떻게 확신할 수 있는지는 얼마나 많은 계산 작업을 포함하고 있는 장부인지로 따진다.

  • 해시 함수는 무엇일까?
    • 입력값의 종류는 중요하지 않다. 어떤 입력 값이든 해시값을 만들어낼 수 있따.
    • 해시 함수의 결과는 256 비트이다. (고정적인 길이)
    • 입력 값이 같다면 결과 해쉬값은 언제나 똑같다.
      • 입력 값이 약간 달라진다면 해쉬값 또한 약간 달라지는게 아니라 그냥 완전히 달라진다! 어떻게 달라질지 예측하는 것이 불가능하다. (비트코인에서 사용하는 해쉬 함수인 SHA-256 의 특징) 따라서 해쉬 결과 값을 통해 역으로 입력값을 알아내는 것은 불가능에 가깝다.

거래 장부 마지막에 107376433 이라는 매직넘버를 넣으면 해쉬값의 첫 30 비트가 모두 0 이 되더라! 이 매직넘버를 얼마내는데 얼마나 많은 계산을 한 장부인지.. SHA-256 해시 함수를 쓰기에, 매직 넘버를 찾아낼 수 있는 유일한 방법은 아무 값이나 찍어 넣고 계산하여 결과를 비교하는 수 밖에 없다. 즉, 앞에 30 비트가 모두 0 이려면 대략 \(2^{30}\) 즉, 대략 10억번을 무작위로 아무값이나 찍어 넣고 계산해야 한다는 이야기이다. 👉 Proof Of Work 거래 내역이 바뀔 때마다 해시값도 바뀌므로 매직넘버를 알아내기 위한 위 10억번 계산을 다시 해야한다는 소리이다.

image

image

“장부를 가진 모든 사람들은 가장 많은 계산 작업이 포함된 장부를 믿으면 된다.” 👉 매직 넘버를 찾아야지만 유효한 블록으로 인정될 수 있다.

장부는 블록 단위로 나누어 구성되어 있다. 블록에는 일정한 수의 거래내역과 작업증명(매직 넘버)와 함께 담겨 있다. 그리고 그 매직넘버로 만든 해쉬값을 그 블록의 해쉬값으로 한다. 블록도 작업 증명이 있어야지만, 즉 PoW 방식에 맞는 해쉬값을 (ex 앞에 60비트가 0인 해쉬값) 도출할 수 있는 매직넘버가 계산된 블록이어야지만 유효한 블록으로 인식될 수 있다. 그리고 이와 동시에 이전 블록(블록의 순서를 보장하기 위한 체인)의 매직넘버를 저장한다. 하나의 블록을 수정하려면 모든 블록들의 작업 증명을 다시 해야 한다.

즉, 매직넘버를 찾으면 블록체인에 내가 제안한 블록이 반영될 수 있다는 얘기다! 성공적으로 매직넘버를 찾아 블록을 블록체인에 반영하면 나는 “블록 생성자”가 되고 블록 생성자에게는 보상이 주어진다. 👉 블록을 생성하고 보상받는 것을 "채굴"이라고 부른다. (블록의 맨 처음 거래로 기재된다. 블록 보상)

매직넘버를 찾아 새 블록을 반영한 보상으로 받는 금액은 전자 서명도 필요하지 않는다. 👉 블록이 새로 생성될 때마다 이 “보상”에 의해 장부달러의 총액이 증가한다.

채굴자들이 하는 일 👉 브로드캐스팅 되는 거래 정보를 수집해서 블록을 새로 생성하고 알맞는 매직넘버를 찾아 블록체인에 이 블록을 반영하고 보상받는 일! 👉 매직넘버를 더 빨리 찾기 위한 경쟁

채굴자가 아닌 그냥 비트코인을 결제 수단으로만 사용하는 사람들 👉 이런 일반 사람들은 그냥 채굴자가 반영한 블록이 브로드캐스팅 되는 것을 듣고 그 블록 정보만 수집해서 블록체인 전체를 새롭게 복사하여 업데이트 하면 도니다.

충돌되는 두 블록체인 중에선 더 많은 계산 작업이 포함된, 즉 더 긴 블록체인만을 유요한 블록체인으로 받아들인다. 두 블록체인의 길이가 같다면 더 긴 블록체인 정보가 들어올 때까지 어느 한쪽도 선택하지 않고 기다린다.

비트코인은 새 블록을 생성하는데 드는 시간이 평균적으로 10분이 되게끔 주기적으로 0 의 갯수를 조절한다. (해시값의 앞 비트의 0 이 몇개가 되는 매직넘버를 찾을지에서 그 0의 개수) 10분마다 보상 받는 사람이 나오는 셈이다.

비트코인에서의 모든 코인은 이 블록 보상으로 만들어진다.

한국은행 같은 중앙은행이 실제 돈의 통화의 공급량을 조절한다. 그러나 비트코인에서의 통화량은 10 분에 한번씩 발생하는 “보상”이 바로 통화 공급의 증가량인 것이다. 마치 금화를 채굴한 것 처럼 말이다. 중앙 조직에서 통화량을 조절하는 것이 아니니 초인플레이션 같은 위기나 통화의 공급이 급격히 불려지는 것에 대한 위험을 걱정하지 않아도 된다. 비트코인은 고정된 공급원을 갖도록 설계되어 있기 때문에 이런 위험이 없다.

“Block Explorer” 웹사이트에 가면 비트코인의 블록체인 정보를 볼 수 있다.

언젠간 채굴 보상으로 받을 수 있는 돈이 0 원이 될 것이다.(보상은 해가 갈수록 점점 줄어들고 있다.) 그래도 블록 보상 외에도 일정량의 거래 수수료를 챙길 수 있기 때문에 채굴자들은 보상이 없어져도 계속 채굴할 것이다. 비트코인 거래가 발생하면 거래 수수료가 붙는데 그 수수료는 그 지불이 포함된 블록의 생성자가 가져가게된다.

비트코인은 하나의 블록에 최대 2400개의 거래만 들어갈 수 있다. 2400개 밖에 안되는데 게다가 비트코인 처리 시간은 10분으로 느린 편이다. 그래서 높은 수수료를 지불하게 되는 원인이 된다. 채굴자가 어떤 거래를 선택해서 블록에 포함할지 결정하는 기준이 거래 수수료이기 때문이다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Bitcoin 카테고리 내 다른 글 보러가기

댓글 남기기