avatar of 发明者量化-小小梦 发明者量化-小小梦
집중하다 사신
4
집중하다
1271
수행원

비트코인 프로토콜의 작동 방식(2부)

만든 날짜: 2017-01-19 18:30:04, 업데이트 날짜:
comments   0
hits   1832

비트코인 프로토콜의 작동 방식(2부)

  • #### 비트코인

이제 우리는 Infocoin에서 벗어나 실제 비트코인 프로토콜로 넘어가자.

비트 코인을 사용하기 위해서는 먼저 컴퓨터에 지갑을 설치해야 합니다. 더 잘 이해하기 위해 아래는 멀티비트 지갑의 스크린샷입니다. 위 왼쪽 구석에서 0.06555555 비트 코인의 잔액을 볼 수 있습니다. 스크린샷의 당시 거래 가격으로 계산하면 거의 70 달러입니다.

비트코인 프로토콜의 작동 방식(2부)

당신이 사업자이고, 온라인 상점을 운영하고 있고, 고객들이 비트코인을 사용하도록 허용하기로 결정했다고 가정해 봅시다. 당신이 해야 할 일은, 당신의 지갑 프로그램으로 새로운 비트코인 주소를 생성하는 것입니다. 그것은 자동으로 공개 키와 개인 키의 쌍을 생성하고, 당신의 공개 키를 해시하여 당신의 비트코인 주소를 형성합니다.

비트코인 프로토콜의 작동 방식(2부)

그러면 여러분은 여러분의 비트코인 주소를 돈을 지불하는 사람에게 보내줍니다. 여러분은 메일로 보내거나, 여러분의 웹페이지에 직접 올릴 수 있습니다. 이것은 안전합니다. 왜냐하면 여러분의 주소는 단지 해시된 공개키이기 때문에, 여러분은 아무에게도 공개할 수 있습니다. (아무도 그것을 통해 여러분의 개인 키를 얻을 수 없습니다.) 저는 나중에 설명할 것입니다. 왜 비트코인 주소는 공개키의 해시값을 사용하는지, 그리고 공개키 자체를 사용하지 않는지 말이죠.

이제 돈을 지불할 준비가 된 사람은 새로운 거래를 만들어야합니다. 0.319 비트 코인을 실제 거래 데이터로 변환하는 것을 봅시다. 아래는 거의 원본 데이터입니다. 세 가지의 변화가 있습니다. 1) 데이터가 연속되지 않았습니다.

  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"}]}
  • 이 글은 한 줄 한 줄로 설명해 보겠습니다.

    1줄, 거래 해시값 ((16 進制), 그는 이 거래를 나타내는 유일한 표기인 이다.

    2 행은 이 거래가 1 버전의 비트코인 프로토콜을 사용했다는 것을 알려줍니다.

    3~4줄은 이 거래가 하나의 입출력을 가지고 있다는 것을 알려줍니다.

    5 줄은 잠금 시간 (lock_time) 이며, 거래가 언제 완료되는지 제어할 수 있습니다. 현재 대부분의 비트코인 거래의 잠금 시간은 0입니다. 즉 즉시 거래를 완료합니다.

    6줄은 거래의 크기가 몇 바이트에 달하는지 알려줍니다. 이것은 거래의 돈이 아닙니다.

    7~11 행은 이 거래의 입력을 정의하는 부분입니다. 정확히 말하자면 8~10 행은 우리가 돈을 옮길 수 있는 이 입력값의 돈은 이전 거래의 출력값에서 나온 것입니다. 2007ae…는 이전 거래의 16진의 해시값입니다.

    여기서 입력 부분에서 주목할 점은 이전 거래의 비트 코인이 얼마나 다음 거래에 전달되는지 말하지 않는다는 것입니다. 실제로 이전 거래의 n = 0 출력에서 모든 비트 코인이 전송되었습니다. 예를 들어, 이전 거래의 첫 번째 출력에서 2 비트 코인이 있다면, 새로운 거래에서 2 비트 코인이 소비됩니다. 이것은 20 달러의 현금으로 빵을 사는 것과 같은 편리하지 않습니다. 해결책은 0을 찾는 장치를 제공하는 것입니다.

    12~14 행은 거래의 출력을 정의합니다. 구체적으로, 13 행은 우리가 출력한 돈의 수를 알려줍니다. 여기 0.319 비트 코인이 있습니다. 14 행은 좀 더 복잡합니다. 주목할 만한 것은 문자열 a7db6f…가 비트 코인을 받는 주소입니다.

    이제 비트코인이 우리가 앞서 언급한 염기서열 번호의 출처 문제를 어떻게 해결했는지 볼 수 있습니다. 첫째, 비트코인은 별도의 염기서열이 아니라, 블록체인 안에 존재하는 긴 일련의 거래입니다.

    우리는 거래 체인을 따라 계속 돌아다닐 수 있습니다. 그리고 결국에는 두 가지 가능성이 있습니다. 첫째, 당신은 첫 번째 비트코인 거래에 갈 수 있습니다. 그리고 그 거래는 하나의 블록 안에 존재합니다. 우리는 그 블록을 Genesis block (창초 블록) 이라고 합니다.

    거래 체인을 따라 계속 돌아다니는 두 번째 결과는 당신이 ‘coinbase’라고 불리는 거래에 도달할 수 있습니다. 제네시스 블록을 제외하고는 모든 블록이 특별한 코인베이스 거래에서 시작됩니다. 이 거래는 블록에서 거래하는 채굴자를 확인하는 것을 보상하기 위해 사용됩니다.

    위의 설명은 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"}]}
  • 이 글은 우리가 전에 했던 것처럼 줄줄이 설명하고 있습니다. 대부분의 것은 우리가 방금 했던 것과 같습니다.

    1줄, 거래의 해시값, 이 거래의 유일한 표시로 쓰인다.

    2 행, 비트코인 프로토콜의 버전, 1판

    3번, 4번의 행은 이 거래에 3개의 입출력이 있고, 2개의 출력이 있다는 뜻입니다.

    5 줄, 잠금 시간 ((그리고 이전과 같은)

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

    7~19 행은 모든 입력을 정의하며, 각각이 이전 거래의 출력에 해당한다. 첫 번째 입자는 8~11 행이다. 그 내용 형식은 이전과 동일하다. 두 번째 입자는 12~15 행, 세 번째는 16~19 행이다.

    20~24 행은 모든 출력을 정의하고, 첫 번째 출력은 21과 22이며, 이전과 마찬가지로, 21 행은 0.01068개의 비트코인이 들어있다고 말한다.

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

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

  • 결론

비트코인의 기본 개념은 이미 설명되어 있습니다. 물론, 저는 많은 세부사항을 무시했습니다. 왜냐하면 이것은 공식적인 설명서가 아니기 때문입니다. 하지만 제가 설명하고자 하는 것은 일반적으로 사용되는 비트코인의 개념입니다.

비트코인의 배후에 있는 규칙은 간단하고 이해하기 쉽지만, 그 규칙이 만들어내는 모든 가능한 결과들도 이해하기 쉽다는 것을 의미하지는 않습니다. 비트코인에 대해 말할 수 있는 것이 많고, 나중에 설명할 것입니다. 하지만 지금은, 몇 가지 낱낱의 요약을 해 보겠습니다.

비트코인은 얼마나 익명인가? 많은 사람들이 비트코인이 익명으로 사용할 수 있다고 말한다. 이 말은 실크로드와 같은 블랙마켓에서 생겨난 것이다. 그러나 이 말은 허구이다. 블록체인은 공개적이기 때문에 모든 비트코인 거래를 누구나 볼 수 있다. 비트코인의 주소는 실제 세계의 인물의 신분과 직접적으로 일치하지는 않지만, 컴퓨터 과학자들은 익명성의 사회적 네트워크를 해독하기 위해 많은 작업을 해왔다. 블록체인은 그들의 훌륭한 목표이다. 가까운 미래에, 대부분의 비트코인 사용자들의 신원이 상대적으로 확신할 수 없는 경우, 나는 놀라울 것이다.

당신은 비트코인을 통해 부자가 될 수 있습니까? 아마도 그렇겠죠. 팀 오 레이리는 돈을 버는 것은 자동차의 기름통과 같다고 말했습니다. 당신은 주의를 기울여야 합니다. 그렇지 않으면 길가에 갇혀있을 수 있습니다. 그러나 인생은 주유소를 둘러싼 회전이 아닙니다.

제가 간과한 세부 사항: 이 글은 비트코인의 기본 개념을 설명하고 있지만, 제가 언급하지 않은 세부 사항이 많이 있습니다. 그 중 하나는 메르클 트리라는 데이터 구조를 기반으로 한 프로토콜 내의 훌륭한 공간 절약 기술입니다. 이것은 세부 사항이지만, 데이터 구조를 좋아한다면 볼 가치가있는 매우 멋진 세부 사항입니다.

비트코인 스크립트: 이 글에서는 비트코인을 온라인 전자 화폐로 설명했습니다. 하지만 이것은 더 큰, 더 흥미로운 이야기의 작은 부분일 뿐입니다. 우리가 볼 수 있듯이, 모든 비트코인 거래에는 비트코인 스크립트 언어가 있습니다. 이 스크립트는 이 글에서는 단순화되어 다음과 같은 문구로 되어 있습니다.

만약 도움이 된다면 이 글의 저자인 마이클 닐슨 (Michael Nielsen) 에게 팁을 보내주십시오. 그의 주소지는 17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZ입니다.

또한 번역자의 1015 (1015) 에 대해서도 관심을 가져 주시기 바랍니다.

이 글은 이 쓴 글입니다.