비트코인 프로토콜이 어떻게 작동하는지

저자:작은 꿈, 2017-01-19 18:30:04, 업데이트:

비트코인 프로토콜이 어떻게 작동하는지

  • 비트코인

    이제, 인포코인을 떠나서 진짜 비트코인 프로토콜로 넘어가자. 비트코인과 우리가 방금 단계적으로 만든 인포코인은 큰 차이가 없습니다.

    비트코인을 사용하려면 먼저 컴퓨터에 지갑을 설치해야 합니다. 더 잘 이해하기 위해 아래 그림은 멀티비트 (Multibit) 라는 지갑의 스크린입니다. 왼쪽 상단에 비트코인의 잔액이 0.06555555 비트코인인이라고 볼 수 있습니다.

    img

    만약 당신이 상인이고, 당신이 온라인 상점을 준비하고, 당신이 고객에게 비트코인으로 지불을 허용하기로 결정한다고 가정해보세요. 당신이 해야 할 일은 당신의 지갑 프로그램으로 새로운 비트코인 주소를 생성하는 것입니다. 그것은 자동으로 공중 키와 개인 키를 생성하고, 당신의 공중 키를 해시하여 당신의 비트코인 주소를 생성합니다.

    img

    그리고 당신은 당신의 비트코인 주소를 당신에게 돈을 지불할 사람에게 보내줍니다. 당신은 메일로 보낼 수 있습니다. 또는 당신의 웹 페이지에 직접 넣을 수 있습니다. 그것은 안전합니다. 당신의 주소는 단지 해시 된 공개 키이기 때문에, 당신은 누구에게도 공개 할 수 있습니다. (아무도 그것을 통해 당신의 개인 키를 얻을 수 없습니다.)

    이제 돈을 지불할 준비가 된 사람은 새로운 거래를 만들어야 합니다. 이제 0.319 비트 코인에 대한 실제 트랜잭션 데이터를 살펴봅시다. 아래는 거의 원본 데이터입니다. 여기 세 가지 변화가 있습니다: 1) 데이터가 연속되지 않습니다. 2) 더 나은 이해를 위해 줄 번호가 추가됩니다. 3) 해시 데이터의 긴 줄을 생략하고 첫 6자리를만 유지합니다.

    1.  {"hash":"7c4025...",
    2.  "ver":1,
    3.  "vin_sz":1,
    4.  "vout_sz":1,
    5.  "lock_time":0,
    6.  "size":224,
    7.  "in":[
    8.    {"prev_out":
    9.      {"hash":"2007ae...",
    10.      "n":0},
    11.    "scriptSig":"304502... 042b2d..."}],
    12. "out":[
    13.   {"value":"0.31900000",
    14.    "scriptPubKey":"OP_DUP OP_HASH160 a7db6f OP_EQUALVERIFY OP_CHECKSIG"}]}
    
    • 이 글의 내용은 한 줄 한 줄로 설명해 보겠습니다.

      첫 번째 줄, 거래 해시 값 ((16개 시스템), 그는 이 거래를 대표하는 유일한 표지판이다.

      두 번째 줄은 이 거래가 비트코인 프로토콜의 첫 번째 버전을 사용한다는 것을 알려줍니다.

      3, 4줄은 이 거래에 입력과 출력이 있다는 것을 알려줍니다.

      다섯 번째 줄은 잠금 시간 (lock_time) 으로 거래가 언제 완료되는지 제어할 수 있습니다. 현재 대부분의 비트코인 거래는 0으로 잠금됩니다. 즉 거래가 즉시 완료됩니다.

      6줄은 거래의 사이즈가 몇 바이트인지 알려줍니다.

      7부터 11까지의 줄은 이 거래의 입력 부분을 정의합니다. 정확히는 8부터 10까지의 줄은 우리에게 돈을 돌리는 이 입력값의 돈이 지난 거래의 출력값에서 나온다고 말합니다. 그 2007ae는... 지난 거래의 16개 입력값의 해시 값입니다. 이것은 상향 거래를 가리키고 있습니다. n=0은 지난 거래의 첫 출력입니다.

      여기서 입력 부분은 주목할만한 점은, 이전 거래에서 얼마나 많은 비트코인이 다음 거래로 전달될지 말하지 않는다는 것이다. 실제로, 이전 거래에서 n=0의 출력에서 모든 비트코인이 전송되었다는 것이다. 예를 들어, 이전 거래의 첫 출력 (n=0) 에 2개의 비트코인이 있다면, 이 두 개의 비트코인은 새로운 거래에서 모두 소비될 것이다. 이것은 20달러의 현금으로 빵을 사는 것처럼 매우 불편해 보인다. 해결책은 제로 화폐의 메커니즘을 제공하는 것이다. 이것은 여러 입력과 출력 방식으로 해결될 수 있다. 다음 부분은 이야기할 것이다.

      12부터 14까지의 줄은 거래의 출력을 정의합니다. 구체적으로 13줄은 출력된 돈의 양을 알려줍니다. 여기 0.319개의 비트코인이 있습니다. 14줄은 비교적 복잡합니다. 유의해야 할 것은 문자열 a7db6f...가 비트코인의 채용 주소라는 것입니다. 이 줄은 실제로 비트코인의 스크립트 언어입니다.

      이제, 여러분은 비트코인이 앞서 언급한 동전 계열번호가 어디서 나온지에 대한 문제를 어떻게 해결하는지 볼 수 있습니다. 첫째, 비트코인은 분리된 단 하나의 동전이 아니라 블록 체인 내에 존재하는 긴 일련의 거래입니다. 둘째, 이 방법으로 우리는 중앙 기관이 일련 번호를 발행할 필요가 없습니다. 일련 번호는 해시 거래 자체로 얻을 수 있습니다.

      우리는 거래 체인 상대로 계속 거슬러 올라갈 수 있습니다. 결국에는 두 가지 가능성이 있습니다. 첫째, 당신은 첫 번째 비트코인 거래로 갈 수 있습니다. 이 거래는 블록에 존재합니다. 우리는 이 블록을 Genesis 블록이라고 부릅니다. 이것은 특별한 거래입니다. 그것은 입력되지 않고 50개의 비트코인을 출력합니다. 즉, 그것은 가장 초기 비트코인 공급입니다.

      거래 체인에서 계속 반복되는 두 번째 결과는 당신이?? 코인베이스?? 라고 불리는 거래에 도달하는 것일 수 있다. 제네시스 블록을 제외한 모든 블록은 특별한 코인베이스 거래로 시작된다. 이 거래는 해당 블록에서 거래하는 채굴자를 인증하는 것을 보상하기 위해 사용됩니다. 그것은 위의 것과 유사한 데이터 형식을 사용합니다.

      위의 설명에서 명확하지 않은 것은 11줄에 디지털로 서명된 것이 무엇인지이다. 가장 명백한 방법은 지불자가 전체 거래를 디지털로 서명하도록 하는 것이다. 현재는 그렇게 하지 않고 일부 거래는 무시된다. 이것은 거래의 일부를 유연하게 해줍니다. 즉, 나중에 수정할 수 있습니다. 그러나 이 유연성은 거래의 수, 지불자와 수신자를 포함하지 않습니다. 유연성의 문제는 비트코인 커뮤니티 내에서 많은 논의가 있으며, 누군가가 그것을 취소하기를 원합니다.

  • 여러 가지 입출출 거래가 있습니다.

    이전 부분에서 우리는 하나의 입력과 하나의 출력을 가진 거래 데이터에 대해 이야기했습니다. 실제로 대부분의 비트코인 거래는 여러 입력 또는 여러 출력을 가지고 있습니다. 먼저 이 거래의 원본 데이터를 살펴보겠습니다.

    1. {"hash":"993830...",
    2. "ver":1,
    3. "vin_sz":3,
    4.  "vout_sz":2,
    5.  "lock_time":0,
    6.  "size":552,
    7.  "in":[
    8.    {"prev_out":{
    9.      "hash":"3beabc...",
    10.        "n":0},
    11.     "scriptSig":"304402... 04c7d2..."},
    12.    {"prev_out":{
    13.        "hash":"fdae9b...",
    14.        "n":0},
    15.      "scriptSig":"304502... 026e15..."},
    16.    {"prev_out":{
    17.        "hash":"20c86b...",
    18.        "n":1},
    19.      "scriptSig":"304402... 038a52..."}],
    20.  "out":[
    21.    {"value":"0.01068000",
    22.      "scriptPubKey":"OP_DUP OP_HASH160 e8c306... OP_EQUALVERIFY OP_CHECKSIG"},
    23.    {"value":"4.00000000",
    24.      "scriptPubKey":"OP_DUP OP_HASH160 d644e3... OP_EQUALVERIFY OP_CHECKSIG"}]}
    
    • 이 글은 한 줄 한 줄로 설명하고 있습니다. 대부분의 글은 방금 설명한 것과 같습니다.

      첫 번째 줄, 거래의 해시 값, 이 거래의 유일한 표시로 사용됩니다.

      2줄, 비트코인 프로토콜 버전, 1판.

      세 번째 또는 네 번째 줄은 거래에 세 개의 입력이 있고 두 개의 출력이 있다고 말합니다.

      5번 줄, 잠금 시간 (전과 동일)

      6줄, 거래의 바이트 크기.

      7부터 19까지의 줄은 모든 입력을 정의하고, 각각은 이전 거래의 출력에 해당한다. 첫 번째 입력은 8부터 11까지의 줄이다. 그것의 내용 형태는 이전과 동일하다. 두 번째 입력은 12부터 15까지의 줄이고, 세 번째는 16부터 19까지의 줄이다.

      20부터 24까지의 줄은 모든 출력을 정의합니다. 첫 번째 출력은 21과 22이고, 이전과 마찬가지로 21줄은 0.01068 비트코인이 있다고 말합니다. 22줄은 비트코인의 스크립트 언어입니다. 문자열 e8c30622...는 수신자의 주소입니다. 두 번째 출력은 23과 24줄이고, 형식은 동일합니다.

      다소 이상하게 보이는 것은, 각 출력이 비트코인의 수를 기록하고 있지만, 출력은 그렇지 않다는 것이다. 물론 각 출력은 그 이전 거래에서 얼마나 많은 비트코인을 얻을 수 있는가. 일반적인 비트코인 거래에서, 모든 입력값의 합이 많은 출력보다 크다는 것이다. (예전에 언급한 창세스 블록과 코인베이스 거래를 제외하면) 만약 출력보다 더 많은 출력이 있다면, 이 거래에 해당하는 블록의 채굴자에게 거래 수수료로 더 많은 비트코인이 제공된다.

      여러 입력과 출력이 0을 찾는 역할을 합니다. 제가 당신에게 0.15 비트코인을 주고 싶다고 가정해보죠. 제가 전에 받은 0.2 비트코인을 쓸 수 있습니다. 물론, 저는 0.2 비트코인을 모두 주고 싶지 않습니다. 그래서 해결책은 제가 당신에게 0.15 비트코인을 보내고, 그 다음 제 자신의 다른 비트코인 주소로 0.05 비트코인을 보내는 것입니다.

  • 마지막 말

    비트 코인의 기본 개념은 이미 설명되어 있습니다. 물론, 나는 많은 세부 사항을 무시했습니다. 이것은 공식 설명서가 아닙니다. 그러나 일반적으로 사용되는 비트 코인의 개념을 설명하고 싶습니다.

    비트코인의 규칙은 간단하고 이해하기 쉽지만, 그 규칙의 모든 가능한 결과를 이해하기 쉽다는 것은 아닙니다. 비트코인에 대해 말할 것이 더 많고, 나중에 설명할 것입니다.

    비트코인은 얼마나 익명적인가? 많은 사람들이 비트코인을 익명으로 사용할 수 있다고 말합니다. 이 주장은 실크로드와 같은 블랙마켓에서 형성되었다. 그러나 이 주장은 허구입니다. 블록체인은 공개적이며, 모든 비트코인 거래를 누구나 볼 수 있다는 것을 의미합니다. 비트코인 주소는 실제 세계 사람의 정체성과 직접적으로 일치하지는 않지만, 컴퓨터 과학자들은 익명으로 만들어진 소셜 네트워크를 해독하기 위해 많은 일을 해냈습니다. 블록체인은 그들의 훌륭한 목표입니다. 가까운 미래에 대부분의 비트코인 사용자들의 정체성이 비교적 확신할 수 없을 경우, 나는 이 주장에 놀랐을 것입니다. 식별은 반드시 완전히 확인되지 않을 것이지만, 충분히 큰 가능성을 제공하는 목표입니다. 또한, 정체성 도구는 거슬러 올라갈 수 있다는 것을 의미할 것입니다. 2011년 실크로드에 마약 기술을 판매한 사람들은 여전히 투명하게 알 수 있습니다.

    비트코인을 통해 부를 얻을 수 있을까? 아마 그럴지도 모르죠. 팀 오?? 리리 (Tim O Reilly) 는 이렇게 말했습니다. 돈을 버는 것은 자동차의 펌프와 같습니다. 주의를 기울여야 합니다. 그렇지 않으면 길가에 갇히게 될 것입니다. 하지만 삶은 주류를 중심으로 돌아가는 것이 아닙니다! 유. 비트코인에 대한 관심의 대부분은 삶의 목표가 큰 주유소를 찾는 것만을 추구하는 사람들로부터 오는 것 같습니다. 저는 인정해야 합니다. 이것은 혼란스럽습니다.

    제가 간과한 세부 사항: 이 기사는 비트코인의 기본 개념을 설명하지만, 제가 언급하지 않은 세부 사항들이 많이 있습니다. 그 중 하나는 메르클 트리 (Merkle tree) 라고 불리는 데이터 구조에 기반한 프로토콜 내의 멋진 공간 절약 기법입니다. 이 세부 사항은 세부 사항이지만, 데이터 구조를 좋아하는 사람이라면 볼 가치가 있는 매우 멋진 세부 사항입니다. 당신은 비트코인 백서를 통해 상황을 알 수 있습니다. 둘째, 저는 비트코인 네트워크의 일부 문제를 거의 언급하지 않았습니다. 예를 들어, 네트워크가 거부된 서버 공격을 어떻게 처리하는지, 네트워크에 가입하고 탈퇴하는 지점, 등등.

    비트코인 스크립트: 이 기사에서는 비트코인을 온라인 전자화폐로 설명합니다. 그러나 이것은 더 큰 재미있는 이야기의 작은 부분일 뿐입니다. 우리는 보듯이, 모든 비트코인 거래에는 비트코인 스크립트 언어가 있습니다. 이 스크립트는 이 기사에서 다음과 같은 단어로 간소화되었습니다. "아리스는 밥에게 10개의 비트코인을 주겠다". 그러나 이 스크립트 언어가 동시에 더 복잡한 거래를 표현하는 데 사용될 수 있습니다. 즉, 비트코인은 프로그래밍 가능한 통화입니다.

    만약 도움이 된다면, 이 글의 저자 마이클 닐슨에게 17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZ로 문의해 주시기 바랍니다.

    또한 번역자의 마이크로블로그에 오신 것을 환영합니다: 1015

이 책에서 인용된 기사


더 많은