블록체인: 블록에는 무엇이 있습니까?

소개


이전 글에서 나는 코드로 블록체인의 개념을 묘사하려고 했다.이번에는 한 블록의 구조를 묘사하려고 합니다.나는 비트코인 블록체인을 사용하여 블록을 해석할 것이지만, 이러한 개념들은 많든 적든 변하지 않을 것이라는 것을 명심하세요.내 글을 읽고 먼저 몇 가지 일을 이해하면 매우 유용할 것이다.

블록 구조


블록은 용기 데이터 구조의 일종이다.비트코인 분야에서 한 블록은 평균 500여 건의 거래를 포함한다.블록의 평균 크기는 1MBsource인 것 같습니다.비트코인 현금(비트코인 블록체인의 하드포크)에서 블록의 크기는 8MB에 달한다.이것은 초당 더 많은 업무를 처리할 수 있게 한다.
어쨌든, 하나의 블록은 하나의 머리와 하나의 긴 업무로 구성되어 있다.제목부터 시작합시다.

블록 제목


헤더에는 블록에 대한 메타데이터가 포함되어 있습니다.세 개의 서로 다른 메타데이터가 있습니다.
  • 이전 덩어리 해시.블록체인에서 모든 블록은 이전 블록에서 상속됩니다. 왜냐하면 우리는 이전 블록의 해시를 사용하여 새 블록의 해시를 만들기 때문입니다.각 블록 N에 대해 블록 N-1의 산열을 제공합니다.
  • 채광 경기.블록을 블록체인의 일부로 만들기 위해서는 효과적인 해시를 주어야 한다.이것은 시간 스탬프, 일시적, 난이도를 포함한다.발굴은 블록체인 기술의 또 다른 관건적인 부분이지만 본고의 토론 범위에 있지 않다.
  • 세 번째 부분은merkle 나무 뿌리다.이것은 하나의 데이터 구조로 블록의 업무를 종합하는 데 쓰인다.우리 이제 그만하자.잠시 후 이에 대해 상세하게 소개할 것이다.
  • 블록 식별자


    블록을 식별하기 위해서 암호화된 산열이 있고, 원한다면 디지털 서명도 있습니다.이것은 SHA256 알고리즘을 사용하여 덩치를 두 번 산열하여 만든 것이다.예를 들어, this is a block.나는 이 블록을 본문의 예로 인용할 것이다.
    이 특정 블록의 덩치는 (오른쪽 열): 00000000000000000000301FCFEB14088A93B77DC0D52571A185B42556AE2FB
    우리는 또한 이전 블록의 해시(오른쪽 열)를 볼 수 있습니다: 000000000000000004b1ef0105dc1275b3adfd067aed63a43324929bed64fd7
    우리는 첫 번째 해시를 만들기 위해 두 번째 해시를 사용한다는 것을 기억하세요.각 블록은 이전 블록의 해시를 사용하여 자신의 해시를 구성한다.블록 해시는 유일한 표지부호이다.같은 해시를 가진 두 개의 블록을 찾을 수 없습니다.
    특정 블록을 식별하는 또 다른 방법은 블록 높이입니다.블록체인에서 블록의 위치입니다.우리의 예시 블록은 500312 위치에 있다.이것은 그 전에 500311개의 블록이 있었다는 것을 의미한다.2009년 비트코인 블록체인이 창설된 이래로 이미 500312개의 블록을 창설했다(본문을 작성할 때).
    블록 높이는 유일한 것이 아니다.포크의 상황에서 몇 개의 블록은 같은 위치, 예를 들어 비트코인 현금과 경쟁할 수 있다.

    Merkle 트리


    블록의 업무는merkle 트리나 이진 해시 트리라고 불리는 구조에 포함되어 있다.
    나는 이런 주제를 실례로 하면 더욱 이해하기 쉽다고 생각한다.우리는 이 때문에 인코딩을 진행할 것이다.merkle 트리는 루트 또는 merkle 루트라고 불리는 하나의 산열만 있을 때까지 산열 노드 쌍을 통해 구축됩니다.만약 우리가 비트코인 세계에 있다면 사용하는 암호화 해시 알고리즘은 SHA256이다.매번 두 번 적용합니다.
    예를 들어 우리는 네 개의 업무를 포함하는 블록이 있다.간단하게 말하자면, 모든 업무는 하나의 문자열이다.
    const tA = 'Hello'
    const tB = 'How are you?'
    const tC = 'This is Thursday'
    const tD = 'Happy new Year'
    
    merkle 트리를 구축하기 위해서 우리는 밑부분부터 시작합니다.우리는 모든 사무에 대해 이중 해시를 진행한다.나는 이곳에서 js-sha256 가방을 사용할 것이다.
    const sha256 = require('js-sha256').sha256
    
    // Double-hashing here
    const hA = sha256(sha256(tA))
    const hB = sha256(sha256(tB))
    const hC = sha256(sha256(tC))
    const hD = sha256(sha256(tD))
    
    //Results
    52c87cd40ccfbd7873af4180fced6d38803d4c3684ed60f6513e8d16077e5b8e //hA
    426436adcaca92d2f41d221e0dd48d1518b524c56e4e93fd324d10cb4ff8bfb9 //hB
    6eeb307fb7fbc0b0fdb8bcfdcd2d455e4f6f347ff8007ed47475481a462e1aeb //hC
    fd0df328a806a6517e2eafeaacea72964f689d29560185294b4e99ca16c63f8f //hD
    
    네, 다행이에요.이제 기억해 주십시오. 나는merkle 트리를 만들었습니다. 이것은 산열 노드를 통해 구축된 것입니다.그래서 우리는 업무를 배합하고 그것들의 해시를 연결할 것이다.그리고 우리도 그것들에 대해 이중 해시를 진행할 것이다.우리는 해시 hA와 hB를 사용하여 해시를 만들고, 다른 하나는 hC와 hD에 사용할 것이다.그리고 나서 우리는 해시가 하나만 남았을 때까지 이 과정을 반복했다. 더 이상 처리할 수 있는 것이 없었다.마지막 산열은 우리의merkle 뿌리가 될 것이다.
    네 건의 거래만 있기 때문에, 이것은 상당히 빠를 것이다.
    //Pairing hA and hB
    
    const hAB = sha256(sha256(hA + hB))
    //5dc23d1a2151665e2ac258340aa9a11ed227a4cc235e142a3e1738333575590b
    
    //Pairing hC and hD
    
    const hCD = sha256(sha256(hC + hD))
    //ff220daefda29821435691a9aa07dd2c47ca1d2574b8b77344aa783142bae330
    
    // We do it again. We pair hAB and hCD
    // This is our root!
    const hABCD = sha256(sha256(hAB + hCD))
    //301faf21178234b04e1746ee43e126e7b2ecd2188e3fe6986356cc1dd7aa1377
    
    
    merkle 트리 꼭대기의 노드를 뿌리라고 합니다.이것은 블록체인에 저장된 각 블록의 블록 헤더에 대한 정보입니다.이것은 어떻게 모든 블록에서 사무를 총결하는가.앞에서 설명한 예제 블록에서 오른쪽 열에서 merkle 루트를 찾을 수 있습니다.
    A89769D0487A29C73057E14D89AFA0C01E02782CBA6C89B7018E5129D475CC
    한 블록에 몇 개의 업무가 포함되어 있든지 간에, 그것들은 항상 32 바이트 해시에서 합쳐진다.
    주:merkle 나무는 두 갈래 나무입니다.트랜잭션 수가 홀수이면 트리를 구축할 수 있도록 마지막 트랜잭션을 복사합니다.
    우리 나무의 모든 잎은 다른 잎에 의존하기 때문에 다른 잎을 바꾸지 않는 상황에서 한 잎을 바꾸는 것은 불가능하다.하나의 잎만 변경하면 해시가 바뀌기 때문에 다른 잎과 배합하여 구축된 해시가 바뀌기 때문에merkle 루트가 달라집니다.
    인증 경로나merkle 경로를 만들면 모든 업무가 블록에 포함되어 있음을 증명할 수 있습니다.로그 기반 2(N) 32바이트 해시만 알면 됩니다.예:
    - 내 4개의 트랜잭션 메클 트리:
    log base 2(4)=2=> 만약 내가 4개의 업무를 포함하는 트리의 해시 경로가 있다면, 나는 하나의 업무가 이merkle 트리에 속하는지 증명할 수 있다.
    16 트랜잭션 merkle 트리의 경우:
    log base 2(16)=4=> 16개의 사무를 포함하는 트리 4개의 해시 경로가 있다면, 사무가 이merkle 트리에 속하는지 증명할 수 있습니다.
    logbase2(1500)=10.55=> 만약 내가 1500개의 업무를 포함하는 트리 11개의 해시 경로를 가지고 있다면, 나는 하나의 업무가 이merkle 트리에 속하는지 증명할 수 있다.
    아마도 작은 도표 하나가 도움이 될 것이다.

    이 나무에는 16개의 잎이 있다.우리는 모든 잎을 배합하여 아래에서 위로 나무를 세웠다.이제 누구나 녹색으로 경로를 제시함으로써 잎 I(주황색)가 이 덩어리의 일부라는 것을 증명할 수 있다.우리는 단지 네 개의 산열만 있지만, 이것은 나의 잎이 여기에 속하는지 아닌지를 충분히 알 수 있다.이러한 정보가 있기 때문에 우리는 우리가 필요로 하는 모든 잎사귀 (노란색) 를 구축할 수 있다.IJ, IJKL, IJKLMNOP 및 루트를 만들고 산열이 해당하는지 확인할 수 있습니다.이것이 바로 블록체인을 속이는 것이 매우 복잡한 이유다.한 가지 일을 바꾸는 것은 네가 반드시 모든 것을 바꿔야 한다는 것을 의미한다.
    좋아, 이것은 거의 비트코인 블록체인의 블록에 포함된 내용이야.도움이 됐으면 좋겠어요!

    좋은 웹페이지 즐겨찾기