KR20230110628A - 교차-참조를 갖는 스트리밍 블록 템플릿에 대한 방법및 시스템 - Google Patents

교차-참조를 갖는 스트리밍 블록 템플릿에 대한 방법및 시스템 Download PDF

Info

Publication number
KR20230110628A
KR20230110628A KR1020237022156A KR20237022156A KR20230110628A KR 20230110628 A KR20230110628 A KR 20230110628A KR 1020237022156 A KR1020237022156 A KR 1020237022156A KR 20237022156 A KR20237022156 A KR 20237022156A KR 20230110628 A KR20230110628 A KR 20230110628A
Authority
KR
South Korea
Prior art keywords
transaction
list
mining node
identifier
mining
Prior art date
Application number
KR1020237022156A
Other languages
English (en)
Inventor
리키 찰스 랜드
스티븐 패트릭 코글란
Original Assignee
엔체인 라이센싱 아게
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 엔체인 라이센싱 아게 filed Critical 엔체인 라이센싱 아게
Publication of KR20230110628A publication Critical patent/KR20230110628A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3297Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving time stamps, e.g. generation of time stamps
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/30Compression, e.g. Merkle-Damgard construction

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

블록체인 네트워크에서 제1 채굴 노드에 의해 트랜잭션 식별자를 압축하기 위한 방법 및 디바이스가 개시된다. 방법은: 트랜잭션 식별자의 제1 정렬된 목록을 포함하는 제1 후보 블록을 구축하는 단계; 제2 채굴 노드로부터, 제2 채굴 노드에 의해 채굴되는 제2 후보 블록 내의 트랜잭션 식별자의 제2 정렬된 목록을 정의하는 데이터를 수신하는 단계; 제1 정렬된 목록 내의 트랜잭션 식별자 중 적어도 하나가 또한 제2 정렬된 목록에 있다고 결정하는 단계; 트랜잭션 식별자의 제1 정렬된 목록을 정의하는 데이터를 포함하는 첨부 메시지를 생성하는 단계 ― 데이터는 트랜잭션 식별자의 제2 정렬된 목록 내의 상기 적어도 하나의 트랜잭션 식별자의 인덱스 위치를 포함함으로써 트랜잭션 식별자의 제1 정렬된 목록에서 상기 적어도 하나의 트랜잭션 식별자를 특정함 ― ; 및 첨부 메시지를 제2 채굴 노드에 전송하는 단계를 포함할 수 있다.

Description

교차-참조를 갖는 스트리밍 블록 템플릿에 대한 방법 및 시스템
본 개시는 블록체인 네트워크에 관한 것이며, 특히, 채굴자 노드 사이에서 블록의 전파 속도를 개선하고 그리고/또는 블록을 전파하기 위해 요구되는 대역폭을 감소시키는 것에 관한 것이다.
작업 증명(proof-of-work) 블록체인 시스템에서, 채굴자가 유효한 블록을 찾으면 다른 모든 채굴자에게 성공을 신속하게 통신하고자 한다. 이는 블록체인 네트워크를 통해 모든 채굴 노드에 블록에 대한 정보를 전파하는 것을 수반한다. 일부 경우에, 이는 전체 블록 데이터를 전송하는 것을 포함할 수 있다. 일부 경우에, 이는 블록 헤더 및 트랜잭션 목록 정보를 전송하는 것을 포함할 수 있다. 수신하는 채굴자는 헤더를 해싱하고 성공한 채굴자가 제공한 해시 값과 매치하는지를 확인하여 새로운 블록의 유효성을 검증한다.
블록의 크기와 트랜잭션 수가 증가함에 따라, 블록 전파의 지연은 임시 포크(temporary fork) 및 고아 블록(orphan block)의 문제를 악화시킬 수 있다. 이러한 상황은 채굴자 및 시스템 전체에 비용이 많이 들게 한다.
블록 데이터를 전파할 때, 블록 데이터에 의해 소비되는 대역폭을 감소시키고 전파 속도를 개선하기 위한 방법 및 시스템을 강구하는 것이 유리할 수 있다.
이제, 예로서, 본 출원의 예시적인 실시예를 나타내는 첨부 도면을 참조할 것이다.
도 1은 블록체인 네트워크에 대한 예시적인 블록 구조를 도시한다.
도 2는 스트리밍 블록 템플릿 네트워크의 예를 도식적으로 도시한다.
도 3은 트랜잭션에 대한 압축된 식별자의 예시적인 구성을 도시한다.
도 4는 압축된 트랜잭션 식별자 저장 시스템의 일 예를 도시한다.
도 5는 압축 트랜잭션 식별자를 생성하기 위한 예시적인 방법을 흐름도 형태로 도시한다.
도 6은 제1 채굴 노드에 저장된 첨부 전용 목록을 업데이트하는 예시적인 방법을 흐름도 형태로 도시한다.
도 7은 압축된 트랜잭션 식별자를 생성하기 위한 또 다른 예시적인 방법을 흐름도 형태로 도시한다.
도 8은 IDX 참조를 사용하는 2개의 채굴 노드를 포함하는 단순화된 예시적인 시스템을 블록도 형태로 도시한다.
도 9는 EIDX 참조를 사용하는 3개의 채굴 노드를 포함하는 또 다른 단순화된 예시적인 시스템을 블록도 형태로 도시한다.
도 10은 예시적인 채굴 노드를 블록도 형태로 도시한다.
도 11은 예시적인 채굴 노드의 맥락에서 후보 블록 어셈블리 및 분포를 도시한다.
도 12는 채굴 노드에 대한 후보 블록 업데이트 및 스트리밍 블록 템플릿 통신의 병렬 프로세스를 그래픽으로 도시한다.
도 13은 채굴 노드 내의 트랜잭션 프로세서의 하나의 예시적인 동작 방법을 흐름도 형태로 도시한다.
도 14는 채굴 노드에 의한 스트리밍 블록 템플릿의 하나의 예시적인 방법을 흐름도 형태로 도시한다.
도 15는 블록체인 노드의 단순화된 예를 블록도 형태로 도시한다.
유사한 참조 번호는 도면에서 유사한 요소 및 특징을 나타내기 위해 사용된다.
일 양상에서, 블록체인 내의 제1 채굴 노드에 의해 트랜잭션 식별자를 압축하는 컴퓨터 구현 방법이 제공될 수 있다. 방법은: 트랜잭션 식별자의 제1 정렬된 목록을 포함하는 제1 후보 블록을 구축하는 단계; 제2 채굴 노드로부터, 제2 채굴 노드에 의해 채굴되는 제2 후보 블록 내의 트랜잭션 식별자의 제2 정렬된 목록을 정의하는 데이터를 수신하는 단계; 제1 정렬된 목록 내의 트랜잭션 식별자 중 적어도 하나가 또한 제2 정렬된 목록에 있다고 결정하는 단계; 트랜잭션 식별자의 제1 정렬된 목록을 정의하는 데이터를 포함하는 첨부 메시지를 생성하는 단계 ― 데이터는 트랜잭션 식별자의 제2 정렬된 목록 내의 상기 적어도 하나의 트랜잭션 식별자의 인덱스 위치를 포함함으로써 트랜잭션 식별자의 제1 정렬된 목록에서 상기 적어도 하나의 트랜잭션 식별자를 특정함 ― ; 및 첨부 메시지를 제2 채굴 노드에 전송하는 단계를 포함할 수 있다.
일부 구현들에서, 생성하는 단계는 인덱스 위치가 상기 적어도 하나의 트랜잭션 식별자에 대한 압축된 트랜잭션 식별자보다 더 콤팩트하다고 결정하는 단계를 포함한다. 일부 경우들에서, 인덱스 위치가 더 콤팩트하다고 결정하는 단계는 압축된 트랜잭션 식별자를 생성하는 단계를 포함한다. 일부 경우들에서, 제1 채굴 노드 및 제2 채굴 노드는 적어도 2개의 길이의 압축된 트랜잭션 식별자를 정의하고, 압축된 트랜잭션 식별자를 생성하는 단계는 상기 적어도 하나의 트랜잭션 식별자가 충돌로 인해 적어도 2개의 길이 중 더 긴 길이를 요구한다고 결정하는 단계, 및 결정에 기초하여, 인덱스 위치가 더 콤팩트하다고 결정하는 단계를 포함한다.
일부 구현들에서, 방법은: 제3 채굴 노드로부터, 제3 채굴 노드에 의해 활성적으로 채굴되고 있는 제3 후보 블록 내의 트랜잭션 식별자의 제3 정렬된 목록을 정의하는 데이터를 수신하는 단계; 제1 정렬된 목록 내의 트랜잭션 식별자 중 상기 하나가 또한 제3 정렬된 목록에 있다고 결정하는 단계; 및 제3 정렬된 목록에 대한 참조 및 트랜잭션 식별자의 제3 정렬된 목록 내의 트랜잭션 식별자 중 상기 하나의 인덱스 위치를 포함함으로써 첨부 메시지에서 트랜잭션 식별자 중 하나를 특정하는 단계를 더 포함한다. 일부 경우들에서, 특정하는 단계는 제2 채굴 노드가 제3 정렬된 목록을 저장한다고 먼저 결정하는 단계를 포함한다. 일부 경우들에서, 방법은, 제2 채굴 노드로부터, 제2 채굴 노드에 저장된 목록을 특정하는 데이터를 수신하는 단계를 더 포함할 수 있고, 목록을 특정하는 데이터는 제3 정렬된 목록에 대한 참조를 포함한다.
일부 구현들에서, 방법은: 제2 채굴 노드로부터, 제2 첨부 메시지를 수신하는 단계 ― 제2 첨부 메시지는 트랜잭션 식별자의 추가 정렬된 목록을 정의하는 데이터를 포함함 ― , 트랜잭션 식별자의 추가 정렬된 목록을 획득하기 위해 데이터를 해결하는 단계, 및 트랜잭션 식별자의 제2 정렬된 목록에 첨부된 트랜잭션 식별자의 추가 정렬된 목록을 저장하는 단계를 더 포함할 수 있다. 일부 경우들에서, 데이터는 트랜잭션 식별자의 제1 정렬된 목록 내의 트랜잭션 식별자에 대한 참조를 포함한다. 일부 경우들에서, 참조는 제1 정렬된 목록에서의 인덱스 위치를 포함하고, 해결하는 단계는 제1 정렬된 목록 내의 인덱스 위치에서 트랜잭션 식별자를 획득하는 단계를 포함한다.
일부 구현들에서, 방법은, 제2 채굴 노드로부터, 제2 첨부 메시지를 수신하는 단계 ― 제2 첨부 메시지는 트랜잭션 식별자의 추가 정렬된 목록을 정의하는 데이터를 포함함 ― , 트랜잭션 식별자의 추가 정렬된 목록을 획득하기 위해 데이터를 해결하는 단계, 및 트랜잭션 식별자의 제2 정렬된 목록에 첨부된 트랜잭션 식별자의 추가 정렬된 목록을 저장하는 단계를 더 포함할 수 있고, 데이터는 트랜잭션 식별자의 제3 정렬된 목록 내의 트랜잭션 식별자에 대한 참조를 포함한다. 일부 경우들에서, 참조는 제3 정렬된 목록에 대한 참조 및 제3 정렬된 목록 내의 인덱스 위치를 포함하고, 해결하는 단계는 제3 정렬된 목록 내의 인덱스 위치에서 트랜잭션 식별자를 획득하는 단계를 포함한다. 일부 경우들에서, 방법은 트랜잭션의 제3 정렬된 목록을 참조하는 초기화 메시지를 제2 채굴 노드에 전송하는 단계를 더 포함한다.
다른 양상에서, 블록체인 네트워크에서 트랜잭션 식별자를 압축하는 컴퓨팅 디바이스가 제공될 수 있다. 컴퓨팅 디바이스는 하나 이상의 프로세서; 메모리 및 메모리에 저장된 프로세서 실행 가능 명령을 포함할 수 있고, 프로세서 실행 가능 명령은, 하나 이상의 프로세서에 의해 실행될 때, 프로세서로 하여금 본원에서 설명된 방법 중 하나 이상을 수행하게 한다.
또 다른 양상에서, 본 출원은 블록체인 네트워크에서 트랜잭션 식별자를 압축하기 위한 프로세서 실행 가능 명령을 저장하는 컴퓨터 판독 가능 매체를 제공하고, 프로세서 실행 가능 명령은, 하나 이상의 프로세서에 의해 실행될 때, 프로세서로 하여금 본원에서 설명된 방법 중 하나 이상을 수행하게 하는 명령을 포함한다.
본 개시의 다른 예시적인 실시예는 도면과 함께 다음의 상세한 설명의 검토로부터 당업자에게 명백할 것이다.
본 출원에서, "및/또는"이라는 용어는 나열된 요소 중 임의의 하나를 단독으로, 임의의 하위 조합 또는 모든 요소를 포함하는 나열된 요소의 모든 가능한 조합 및 하위 조합을 포함하도록 의도되며, 추가 요소를 반드시 배제하지 않는다.
본 출원에서 "... 또는 ... 중 적어도 하나"라는 문구는 나열된 요소 중 임의의 하나를 단독으로, 임의의 하위 조합 또는 모든 요소를 포함하는 나열된 요소의 임의의 하나 이상을 포함하도록 의도되며, 추가 요소를 반드시 배제하지 않고, 모든 요소를 반드시 요구하지 않는다.
본 출원은 임의의 데이터의 세트 또는 "메시지"에 적용될 때, 고유한 고정 길이의 영숫자 문자열을 결정성으로 생성하는 다수의 암호화 해시 함수 중 임의의 하나를 포함하도록 의도되는 해싱 또는 해시 함수를 참조할 것이다. 해시 함수의 결과는 해시 값, 지문, 해시 결과 또는 이에 상응하는 것으로 지칭될 수 있다. 예로는 SHA-2, SHA-3 및 BLAKE2를 포함하지만 이에 제한되지 않는다. 블록 또는 후보 블록을 해싱하는 채굴자에 대한 아래의 모든 참조는 암호화 해시 함수를 후보 블록의 헤더 부분에 적용하는 것을 의미하는 것으로 이해될 것이다. 사용되는 해시 함수는 특정 해시 함수가 특정되지 않는다면 임의의 적절한 해시 함수일 수 있다.
이 문서에서 용어 '블록체인'은 모든 형태의 전자, 컴퓨터 기반, 분산 원장을 포함하는 것으로 이해된다. 이는 합의 기반(consensus-based) 블록체인 및 트랜잭션 체인 기술, 허가 및 비허가 원장, 공유 원장 및 그 변형을 포함한다. 다른 블록체인 구현이 제안되고 개발되었지만, 블록체인 기술의 가장 널리 알려진 응용은 비트코인 원장이다. 비트코인 SV 프로토콜에 의해 예시된 바와 같은 비트코인이 편의 및 예시의 목적으로 본원에서 언급될 수 있지만, 발명은 비트코인 블록체인과 함께 사용하는 것으로 제한되지 않으며, 대안적인 블록체인 구현 및 프로토콜이 본 개시의 범위 내에 속한다는 점에 유의하여야 한다.
블록체인은 트랜잭션으로 구성된 블록으로 구성된 컴퓨터 기반 탈중앙화된 분산 시스템으로 구현되는 P2P 전자 원장이다. 각 트랜잭션은 블록체인 시스템 참여자 사이의 디지털 자산 제어 전송을 인코딩하는 데이터 구조이며, 적어도 하나의 입력과 적어도 하나의 출력을 포함한다. 각 블록에는 이전 블록의 해시가 포함되어 블록이 함께 연결되어 처음부터 블록체인에 기록된 모든 트랜잭션에 대한 영구적이고 변경 불가능한 기록을 생성한다. 트랜잭션에는 그 입력 및 출력에 내장된 스크립트로 알려진 작은 프로그램이 포함되며, 이는 트랜잭션의 출력에 접근할 수 있는 방법과 대상을 지정한다. 비트코인 플랫폼에서, 이러한 스크립트는 스택 기반 스크립트 언어를 사용하여 작성된다.
블록체인은 노드 네트워크를 통해 구현된다. 각 노드는 네트워크 연결이 가능하며 적용 가능한 블록체인 프로토콜을 수행하는 소프트웨어를 실행하는 컴퓨팅 디바이스이다. 노드는 트랜잭션을 유효성 검증하고 네트워크의 다른 노드로 전파한다. "채굴 노드" 또는 "채굴자"라고 하는 특별한 네트워크 노드는 컨펌되지 않은 세트의 트랜잭션, 즉 미결(pending) 트랜잭션을 블록으로 수집하고 블록을 "채굴"하고자 시도한다. 이 예에서, 채굴은 네트워크의 다른 채굴자가 해당 블록에 대한 작업 증명(proof-of-work; POW)을 해결하는 데 성공하기 전에 작업 증명을 해결하는 것을 의미한다. 비트코인의 예에서, POW는 결과가 난이도 파라미터로 설정된 임계값 아래로 떨어질 때까지 논스(nonce)가 포함된 블록 헤더를 해싱하는 것을 포함한다. 논스는 반복적으로 증가하고 결과가 임계값 아래로 떨어질 때까지 또는 다른 채굴자가 성공했다는 통지를 채굴자가 받을 때까지 해싱을 반복한다. 채굴 과정의 변형은 당업자에게 친숙할 것이다.
일반적인 블록은 블록 헤더와 트랜잭션의 2개의 데이터 구조를 포함한다. 도 1은 비트코인 프로토콜의 예시적인 블록 구조(100)를 도식적으로 나타낸다. 블록 구조(100)는 블록 헤더(102) 및 페이로드(104)를 포함한다. 이 예에서 블록 헤더(102)는 버전 번호(106), 이전 블록 해시 값(108), 머클 루트(Merkle root)(110), 타임스탬프(112), 목표 난이도 파라미터(114) 및 논스(116)에 대한 필드를 포함한다. 이전 블록 해시 값(108)은 이 블록을 체인의 이전 블록에 연결하여, 암호화 해시를 통해 연속 블록을 함께 연결하는 "블록체인" 구조를 생성한다. 머클 루트(110)는 블록에 포함된 모든 트랜잭션에 기초한 머클 트리 구조를 지칭한다. 논스(116)는 채굴 시 상이한 해시 결과를 생성하기 위해 블록 헤더(102)의 내용을 변경하기 위하여 채굴 노드가 증가 또는 감소를 반복할 수 있는 임의의 값이다.
페이로드(104)는 트랜잭션 수 값(118) 및 트랜잭션 목록(120)을 포함한다. 트랜잭션 목록(120)은 일부 구현에서 트랜잭션 ID 번호의 목록일 수 있다.
채굴 노드가 임계값 미만의 해시 결과를 생성하는 블록 헤더를 발견하는 데 성공하면, 성공적인 해시 결과 값을 포함하는 업데이트된 인벤토리 메시지를 사용하여 다른 노드에 통지를 진행한다. 그런 다음 다른 노드는 새로운 블록의 사본을 요청하고 그 유효성을 독립적으로 검증한다.
블록체인 생태계는 트랜잭션 볼륨 및 결과적으로 블록 크기의 큰 증가를 통해 향상된 사용성을 제공하기 위해 성숙하고 있다. 블록이 커지면, 일부 경우 128MB를 초과하여, 성공적으로 채굴된 새로운 블록을 네트워크 전체의 다른 노드로 전파하는 데 시간이 더 걸린다. 전파의 지연에는 대가가 따른다. 첫째, 성공적으로 채굴된 블록이 생성되었다는 사실을 모르는 채굴자는 새로운 블록이 유효한 것으로 판명된다면 낭비되는 노력으로 자신의 후보 블록을 계속 채굴하고자 시도할 것이다. 둘째, 전파 및 유효성 검증의 지연으로 인해 (임시) 포크 및 고아 블록의 가능성이 증가할 수 있다.
많은 블록체인 프로토콜에서, 채굴자는 블록의 전체 사본을 전송하지 않고, 대신 인벤토리 메시지로 해시 결과를 전송하는 것을 이해할 것이다. 수신하는 채굴 노드는 이 주장된 새로운 블록을 보지 못했다고 결정하고 성공한 채굴자에게 GETBLOCK 또는 GETDATA 메시지를 전송한다. 블록의 전체 사본을 전송하는 대신, 성공한 채굴자는 블록 헤더, 페이로드의 트랜잭션 수 필드, 블록에 포함된 트랜잭션의 정렬된 목록을 전송한다. 정렬된 목록은 트랜잭션에 대한 전체 트랜잭션 ID 번호(TxID)의 세트를 포함할 수 있다. 일부 실시예에서, TxID는 트랜잭션의 고정 길이 해시일 수 있다. TxID는, 예컨대, SHA-256을 사용하여 트랜잭션을 해싱하여 획득한 256비트(32바이트) 숫자일 수 있다. 수신 노드는 TxID로 멤풀(mempool)에서 식별된 트랜잭션을 검색하여 전체 블록을 재조립할 수 있다.
그럼에도 불구하고, 현대의 블록 크기가 128MB로 증가하고 전송될 데이터의 크기를 넘어서면 트랜잭션 수가 많은 경우 여전히 중요할 수 있다. 예컨대, 50만 트랜잭션을 포함하는 블록은 16MB인 TxID의 정렬된 목록을 갖는다.
따라서, PCT 특허 공보 WO2020/208590 및 WO2020/208596에 설명된 바와 같이, 채굴 노드가 자신의 후보 블록을 해싱하면서 그들 개개의 후보 블록에 대한 정보를 다른 채굴자에게 제공하는 것이 제안되었다. 이러한 방식으로, 각각의 채굴자는, 비트코인의 예에서는 약 10분인, 성공적인 블록 발견 사이의 시간 지연을 이용하여, 채굴자가 작업하고 있는 후보 블록의 구조 및 내용에 대한 세부사항을 다른 채굴자에게 제공한다. 이 정보를 미리 제공함으로써, 성공적인 블록이 발견되었을 때 성공한 채굴자는 다른 모든 노드가 완전한 새로운 블록을 어셈블링하고 유효성 검증할 수 있도록 보장하기 위해 블록 헤더의 정보 및, 일부 경우에, 코인베이스 트랜잭션만을 보내면 된다. 이 데이터는 수백 바이트 정도로 작을 수 있다. 이는 성공적인 새로운 블록이 전체 네트워크를 통해 전파되는 속도를 증가시킨다. 이로써 PCT 특허 공보 WO2020/208580 및 WO2020/208596의 내용은 인용에 의해 본원에 통합된다.
채굴자 사이에서 후보 블록 데이터의 사전 해결책 전파(pre-solution propagation)는 스트리밍 블록 템플릿(SBT)으로 지칭될 수 있다. 각각의 채굴자는, 자신이 현재 작업하고 있는 후보 블록 내의 트랜잭션 식별자의 정렬된 목록을 다른 채굴자에게 제공한다. 일부 경우에, 대역폭을 절약하기 위해 트랜잭션 식별자가 트렁케이팅된 트랜잭션 식별자로서 전송될 수 있다. PCT 특허 공보 WO2020/208596은 트렁케이팅된 트랜잭션 식별자의 경우 충돌을 해결하는 방법을 자세히 설명한다.
예로서 예시하기 위해, 블록체인 시스템에서 블록 데이터를 미리 분배하기 위한 단순화된 시스템(200)을 도식적으로 도시하는 도 2에 대해 이제 참조가 이루어질 것이다. 이 예에서, 시스템(200)은 4개의 채굴 노드(202): 채굴자 A(202a), 채굴자 B(202b), 채굴자 C(202c) 및 채굴자 D(202d)를 포함한다. 채굴 노드(202)는 다른 노드(미도시)를 포함할 수 있는, 블록체인 네트워크(204) 내의 노드이다. 다른 노드는 전체 노드, SPV 노드, 채굴 노드 또는 다른 유형의 블록체인 노드를 포함할 수 있다.
각각의 채굴 노드(202)는 하나 이상의 프로세싱 유닛을 포함할 수 있는 컴퓨팅 디바이스에서 구현될 수 있다. 당업자라면 이해할 수 있는 바와 같이, 프로세싱 유닛은 블록체인 채굴과 연관된 계산 작업을 상당한 속도와 효율성으로 수행하도록 설계된 전용 하드웨어를 갖춘 특수 프로세싱 유닛을 포함할 수 있다. 그러나, 이는 또한 또는 대안적으로 범용 컴퓨팅 디바이스를 포함할 수 있다. 컴퓨팅 디바이스는, 실행될 때, 하나 이상의 프로세싱 유닛이 설명된 동작을 수행하게 하는 프로세서 판독 가능 명령을 포함하는 프로세서 실행 가능 소프트웨어를 포함한다. 컴퓨팅 디바이스는 네트워크 연결을 획득하고 적용 가능한 네트워크 프로토콜에 따라 메시지를 전송 및 수신하기 위한 연관된 하드웨어 및 소프트웨어와의 네트워크 연결 및 메모리를 포함한다.
각각의 채굴 노드(202)는 블록체인 네트워크(204)로부터 트랜잭션을 수신 및 유효성 검증하고, 채굴을 위한 후보 블록을 구축한다. 예컨대, 채굴자 D(202d)는, 자신이 작업 증명을 찾으려고 시도하는 유효성 검증된 트랜잭션의 정렬된 세트를 포함하는 후보 블록(208)을 구축한다.
한편, 채굴자 D(202d)는 블록 템플릿, 즉, 자신의 후보 블록(208) 내의 트랜잭션의 정렬된 목록에 관한 정보를 다른 채굴 노드(202)에 전송한다. 그것은 또한, 다른 각각의 채굴 노드(202)가 채굴하고 있는 개개의 후보 블록에 관한 정보를 그들로부터 정보를 수신한다. 채굴자 D(202d)는 다른 채굴 노드 각각에 대한 해당 정보를 첨부 전용 목록(AOL)(210)에 저장한다. 즉, 예컨대, 채굴자 D(202d)는, 채굴자 A(202a)로부터 수신한, 자신의 후보 블록의 정렬된 내용을 지정하는 메시지에 기초하여 채굴자 A(202a)에 대한 첨부 전용 목록(210)을 구축한다. 동시에, 채굴자 D(202d)는, 자신이 다른 노드에 전송한 트랜잭션 정보의 정렬된 목록을 레코딩하는 AOL-D와 같은 레코드를 구축하고 유지할 수 있다. 이것은, 아래에서 추가로 설명될 바와 같이, POW 해결책이 발견될 때 후보 블록(208)과 AOL-D 데이터를 동기화하는 데 도움이 될 수 있다.
각각의 채굴 노드(202)가 개개의 후보 블록을 반영하는 각각의 다른 채굴 노드(202)에 대한 트랜잭션의 개개의 정렬된 목록(AOL)을 갖도록 후보 블록 정보를 미리 분배하는 것이, POW가 발견된 후, 최소량의 정보만이 전파될 필요가 있다는 것을 보장한다는 것이 인지될 것이다. 이것은, 채굴 노드(202)가 가능한 한 빨리 새로운 블록을 유효성 검증하는 데 필요한 정보를 갖는다는 것을 보장하고, 이로써 다른 채굴 노드(202)가 이미 성공했을 때 POW를 검색하는 데 낭비되는 시간을 감소시킨다. 채굴 노드(202)는 다음 블록 검색으로 이동할 수 있도록 가능한 한 빨리 새로운 블록을 전파하고 유효성 검증할 모든 각각의 인센티브를 가지고 있다. 네트워크 레이턴시로 인한 잠재적인 지연은, 연속적인 블록 간에 대략 10분 기간 동안 트랜잭션의 정렬된 목록을 사전 분배할 때 훨씬 덜 우려된다.
채굴 노드(202) 중 하나가 자신의 후보 블록에 대한 POW를 찾는 데 성공하면, 그는 다른 채굴 노드(202)가 해당 채굴 노드의 AOL(210)을 사용하여 해결된 블록을 재구성하는 데 필요한 블록 헤더 정보 중 적어도 일부를 포함하는 메시지를 해당 채굴 노드(202)에 전송한다. 예컨대, 메시지는, 전체 블록 헤더를 해싱할 때 획득된 해시 값과 함께, 논스(nonce) 및 타임스탬프를 포함할 수 있다.
일부 구현에서, AOL(210)과 관련된 채굴 노드(202) 사이의 메시지는 현재 스트리밍 블록 템플릿에 대한 템플릿 식별자를 포함할 수 있다. 이것은 본원에서 SB 템플릿 식별자로 지칭될 수 있다. SB 템플릿 식별자는 채굴 노드(202) 및 블록 레벨에 특정적일 수 있어서, 이는 특정 후보 블록, 즉 트랜잭션의 특정 정렬된 목록을 나타낸다. 채굴 노드(202)의 트랜잭션의 정렬된 목록(AOL)과 관련된 채굴 노드(202)로부터의 임의의 메시징은, 수신 채굴 노드(202)가 변경사항과 정확한 트랜잭션의 특정 정렬된 목록을 연관시킨다는 것을 보장하기 위해 SB 템플릿 식별자를 포함할 수 있다. 일 구현에서, SB 템플릿 식별자는 채굴자 식별자(채굴자 ID)와 블록 헤더의 prev_block 필드의 해시, 즉, 이전 블록의 해시일 수 있다.
이것은 SB 템플릿 식별자와 블록 레벨 및 특정 채굴자를 결속시킨다.
정렬된 목록과 관련된 각각의 메시지는 시퀀스 번호를 더 포함할 수 있다. 시퀀스 번호는, 특정 템플릿과 연관하여 하나의 채굴자로부터의 메시지 순서를 나타내는 데 사용되는 무부호 정수 값일 수 있다. 시퀀싱은, 일부 메시지가 수신되지 않았거나 잘못된 순서로 수신된 경우, 메시지 수신자가 특정 채굴자에 대한 TXID 순서를 고유하게 결정하는 데 도움이 된다. 따라서, 각각의 첨부 메시지는 SB 템플릿 식별자 및 시퀀스 번호 둘 모두를 포함할 수 있다. SB 템플릿 식별자는, 각각의 메시지가 해당 SB 템플릿 식별자와 관련하여 전송되는 경우 시퀀스 번호가 증분되는 동안 블록에 대해 일정하게 유지될 수 있다.
본원에서 논의되는 SB 템플릿 식별자는, 해당 버전의 후보 블록이 채굴 유닛에 전달되는 특정 시점에 채굴자 내의 트랜잭션 프로세서 또는 블록 어셈블러가 후보 블록의 콘텐츠를 나타내기 위해 사용할 수 있는 "템플릿 식별자"(template_id) 또는 "후보 블록 식별자"(cb_id)와는 상이하며 구별된다. 아래에서 나중에 논의될 바와 같이, 후보 블록의 콘텐츠는, 트랜잭션이 추가되고 업데이트된 후보 블록이 후보 블록에 대해 작동하도록 이용 가능한 다양한 채굴 유닛에 전달될 때 시간이 지남에 따라 변할 수 있다. 일부 구현에서 <base>.<sequence_number> 형태를 취할 수 있는 template_id(또는 cb_id)는, 채굴 유닛이 해결책을 반환할 때 블록 어셈블러 또는 트랜잭션 프로세서가 채굴 유닛이 작동 중인 후보 블록의 버전이 무엇인지를 알 수 있도록 시간이 지남에 따라 해당 후보 블록의 상태를 추적한다. 한편, 스트리밍 블록 템플릿 프로세스는 템플릿 구축 프로세스와 다소 비동기적으로 수행되며, 현재 채굴자의 후보 블록에 포함된 트랜잭션에 대해 다른 채굴자에게 경고하기 위해 전송되는 첨부 메시지는 후보 블록의 상태 및 특히, 해결책으로 발견된 후보 블록의 버전으로부터 디커플링될 수 있다. 따라서, 아래에 추가로 설명될 바와 같이, 채굴자는 일단 POW 해결책이 발견되면 동기화 프로세스에 참여할 수 있다.
위에서 언급된 바와 같이, 채굴자 ID는 채굴 노드의 IP 주소 또는 채굴 노드(202)에 대한 일부 다른 고유한 식별자일 수 있다. 일부 실시예에서, 초기 인증 동작은, 채굴자가 네트워크에 부착될 때 ― 이는 고유한 채굴자 ID와 해당 채굴 노드(202)를 연관시키는 결과를 발생시킴 ― 발생할 수 있다. 인증 동작은 각각의 채굴 노드(202)가 공개 키 및 디지털 서명을 제공하는 핸드셰이킹 동작(handshaking operation)을 포함할 수 있다. 인증은 디지털 서명의 검증에 연결된다. 일부 경우에, 채굴자 ID는 공개 키, 디지털 서명 또는 이들의 일부 조합에 기초할 수 있다. 따라서 채굴 노드(202)는 피어 투 피어 인증 채널(206)에 의해 상호 연결될 수 있다. 스트리밍 블록 템플릿 메시지는 이러한 인증 채널(206)을 통해 교환될 수 있다.
압축된 식별자
스트리밍 블록 템플릿과 관련하여 채굴 노드 간에 전송되는 데이터의 양을 감소시키기 위해, SBT 메시지에 특정된 트랜잭션 식별자가 압축될 수 있다. 압축을 위한 하나의 옵션은 식별자의 일부만 전송되도록 트랜잭션 식별자를 트렁케이팅하는 것이다. 이것은 트렁케이팅된 식별자 간에 충돌이 발생시킬 수 있다. '제조된 TxID'의 경우 충돌이 악화될 수 있고; 즉, 트랜잭션의 TxID가 TxID의 특정 패턴(예컨대, 선행 0)과 같은 특정 특징을 갖는 것을 보장하기 위해 트랜잭션이 구축되는 일부 경우가 있다. 이러한 경우는 충돌의 증가로 이어질 수 있으며, 더 나아가 충돌을 유발하는 공격의 가능성을 열어준다. 따라서, TxID의 단순한 트렁케이션 이외의 트랜잭션 식별자 압축 프로세스를 제공하는 것이 유리할 수 있다.
일부 경우에, 트랜잭션 볼륨 또는 조건에 응답하여 점진적으로 충돌 방지가 가능하도록 확장 가능한 압축된 식별자 구조를 제공하는 것이 유리할 수 있다. 일부 경우에, 합리적으로 가능한 만큼 많은 임의성을 유지하도록 시도하기 위해 TxID를 압축하는 것이 유리할 수 있다. 코딩 방법은, 상이한 채굴 노드의 메시지를 처리하기 위해 상이한 코딩 프로세스를 유지할 필요가 없도록 모든 피어 노드에서 공통되어야 한다. 또한, 구현 시에, 변화하는 조건 하에서 작동하는 데이터 구조에서 빠른 저장 및 룩업이 가능한 프로세스를 갖는 것이 유리할 것이다.
일 양상에서, 본 출원은 트랜잭션 식별자를 압축하고 압축된 식별자로부터 완전한 트랜잭션 식별자를 식별하기 위한 방법 및 시스템을 제공한다.
이제 본 출원에 따른 예시적인 압축된 식별자의 구조를 도식적으로 도시하는 도 3에 대해 참조가 이루어질 것이다. 공지된 방식으로, 트랜잭션(300)에 대해 트랜잭션 식별자(302)가 생성된다. 비트코인의 예에서, 트랜잭션 식별자(302)는 트랜잭션(300)을 해싱함으로써 획득된다. 특히, 비트코인은 트랜잭션 식별자(302)를 생성하기 위해 트랜잭션(300)의 이중 SHA256 해시를 규정한다.
트랜잭션 식별자(302)는 고정 길이 의사난수이다. SHA256의 경우, 결과적인 숫자는 32-바이트 숫자이다. 압축된 트랜잭션 식별자(CID)(304)는: 프리픽스(306)를 생성하고, 이와 트랜잭션 식별자(302)의 트렁케이팅된 부분(308)과 연접함으로써 2개의 부분으로 생성될 수 있다. 프리픽스(306)는 전체 트랜잭션 식별자(302)에 적용된 함수를 사용하여 생성된 고정 길이 숫자이다. 일부 예에서, 이는 콤팩트한 숫자를 생성하기 위해 재귀 해시 함수(recursive hash function)를 사용하여 생성될 수 있다. 일부 예에서, 프리픽스(306)는 2, 3 또는 4 바이트 길이일 수 있다. 프리픽스(306)를 생성하는 데 사용되는 해시 함수는 비암호 해시일 수 있다. 해시 함수는 계산 구현의 용이성에 기초하여 그리고 그의 임의성에 기초하여 선택될 수 있다. 이상적으로, 해시 함수는 잠재적 값의 전체 범위에 걸쳐 동등 확률인 프리픽스 값을 발생시키고, 즉 이는 동등 확률 분포를 갖는다. 함수는 머머(murmer) 해시 함수의 버전 또는 그의 변형 중 하나일 수 있다.
일 예에서, 함수는 XOR 및 폴딩 연산을 수반한다. 일부 경우에, 함수는 또한 또는 대안적으로 회전 연산을 수반할 수 있다. 일부 경우에, 함수는, 예컨대, 제조된 식별자에 대해 임의의 비-랜덤화 트랜잭션 식별자의 랜덤화를 개선하기 위해 트랜잭션 식별자와 솔트 값을 XOR하는 것을 더 포함할 수 있다. 솔트는 모든 채굴 노드가 알고 있는 값이며, 일부 경우에, 블록체인에 레코딩된 값일 수 있다. 일 예에서, 솔트 값은 이전 블록 시간 전에는 이용 불가능한 값일 수 있다. 일 예에서, 솔트 값은 가장 최근 블록의 머클 루트일 수 있다.
하나의 예시적인 프로세스는 다음과 같이 요약된다.
1. Salt XOR TxID = CID32
{TxID 내의 임의의 비랜덤 패턴을 랜덤화}
2. CID32[0:15] XOR CID32[16:31] = CID16 {CID32를 16 바이트로 폴딩}
3. CID16[0:7] XOR CID16[8:15] = CID8 {CID16를 8 바이트로 폴딩}
4. CID8[0:3] XOR CID8[4:7] = CID4 {CID8를 4 바이트로 폴딩}
5. CID4[0:2] = CIDprefix {CID4를 처음 3바이트로 트렁케이팅}
일부 경우에, 프로세스의 다양한 단계에서 하나 이상의 회전이 도입될 수 있다. 결과적인 CIDprefix는 통계적으로 동등 확률 분포를 갖는 3-바이트 랜덤화된 번호이다.
사용 시, CIDprefix와 같은 프리픽스(306)는 트랜잭션 식별자의 트렁케이팅된 부분(308)과 연접된다. 트렁케이팅된 부분(308)은 트랜잭션 식별자의 가변 길이 부분일 수 있다. 트렁케이팅된 부분(308)의 길이는, 일부 경우에, 개별 채굴 노드에 의해 설정될 수 있는 규정된 CID 길이 파라미터인 cid_len에 기초하여 설정될 수 있다. cid_len 값은, 채굴 노드가 새로운 블록 템플릿의 설정에 대한 초기화 메시지를 전송할 때 채굴 노드에 의해 특정될 수 있다. cid_len 값은, 트렁케이팅된 부분(308)의 길이를, 예컨대, 1에서 16까지의 범위와 같이 바이트 단위로 특정하도록 구성될 수 있다. CID에 대한 트렁케이팅된 부분(308)의 전형적인 길이는 많은 예에서 1 내지 6일 수 있다. 일부 다른 경우에는, cid_len 값은 3-바이트 프리픽스(306)를 포함하여 전체 CID 길이를 특정할 수 있다. 실험 및 모델링 데이터는, 1000만 내지 5억 개의 트랜잭션을 갖는 블록의 경우 4바이트인 전체 CID 길이가 최적일 수 있고 5억 개 내지 100억 개의 트랜잭션을 갖는 블록의 경우 5 바이트가 최적일 수 있음을 나타낸다. 이들 CID 길이는 각각 1 또는 2바이트의 트렁케이팅된 부분(308)에 대응한다.
이제 압축된 트랜잭션 식별자 저장 시스템(400)의 일 예를 도시하는 도 4에 대한 참조가 이루어진다. 시스템(400)은 채굴 노드에서 CID에 기초한 트랜잭션 식별자를 저장하고 신속하게 액세스하기 위한 것이다. 시스템(400)은 하나의 메모리 디바이스 또는 다수의 메모리 디바이스를 사용하여 구현될 수 있다.
시스템(400)은 글로벌 TxID 데이터 구조(402), TxID 저장소 인덱스(404) 및 복수의 버킷(406)을 포함할 수 있다. 글로벌 TxID 데이터 구조(402)는 채굴 노드에 의해 유효성 검증되고 블록 내의 포함을 위해 이용가능한 트랜잭션 식별자, 즉, 계류 중인 컨펌되지 않은 트랜잭션에 대한 식별자의 포괄적인 목록이다. 이는 여기서는 글로벌 트랜잭션 식별자 목록으로 지칭될 수 있다. 트랜잭션 식별자는 도착 순서대로 글로벌 TxID 데이터 구조(402)에 첨부된다. 아래에 설명될 바와 같이, 도착 순서는 트랜잭션 프로세서가, 압축된 트랜잭션 식별자 저장 시스템(400)의 관리를 포함하여 CID 생성 및 해결 프로세스를 관리하는 SBT 모듈에 그들을 전송하는 순서일 수 있다.
TxID 저장소 인덱스(404)의 크기는 CID 프리픽스의 길이에 의존한다. 이 예에서, 프리픽스는 3 바이트 값인 것으로 가정된다. TxID 저장소 인덱스(404)는 트랜잭션 식별자에 대해 생성된 임의의 CID 프리픽스에 포인터(408)를 할당한다. 포인터(408)는 해당 CID 프리픽스에 대한 대응하는 버킷(406)의 위치를 가리킨다. TxID 저장소 인덱스(404)는 각각의 CID 프리픽스에 대응하는 개개의 버킷(406)에 대한 각각의 주소에 대한 개개의 포인터(408)를 저장하기에 충분한 메모리를 포함할 수 있다.
각각의 버킷(406)은, 대응하는 전체 TxID가 저장되는 글로벌 TxID 데이터 구조(402) 내의 위치(즉, 인덱스 포지션)를 가리키는 하나 이상의 TxID 인덱스(410)를 포함하도록 설계된 유연한 크기의 데이터 구조일 수 있다.
사용 시, 채굴 노드에 의해 새로운 트랜잭션이 수신되고 유효성 검증될 때, 채굴 노드는 (아직 알려지지 않은 경우) TxID를 생성하고, 글로벌 TxID 데이터 구조(402)에 TxID를 첨부하여, TxID가 글로벌 TxID 데이터 구조(402)에 저장되는 인덱스를 언급한다. 그런 다음 채굴 노드는, 위에서 설명한 재귀 폴딩 방법과 같은 TxID에 대한 압축 프로세스를 사용하여 CID 프리픽스를 생성함으로써 CID를 생성한다. 일단 프리픽스가 발견되면, 프리픽스는 TxID 저장소 인덱스(404)를 사용하여 대응하는 버킷 주소를 식별하는 데 사용된다. 그런 다음 채굴 노드는 TxID 인덱스(410)를 해당 버킷(406)에 첨부하여, 글로벌 TxID 데이터 구조(402)에 저장된 TxID의 위치, 즉 포지션 또는 인덱스 포지션을 가리킨다.
수신된 CID를 해결하기 위해, 채굴 노드는, 수신된 CID의 프리픽스 부분에 기초하여 TxID 저장소 인덱스(402)에서 대응하는 버킷 주소를 찾는다. 그런 다음, 이는 버킷(406) 내의 TxID 인덱스(들)(410)를 판독하고, TxID 인덱스(들)(410)에 의해 표시된 위치에서 글로벌 TxID 데이터 구조(402)의 대응하는 TxID를 로케이팅한다. 이러한 TxID 중 하나는 CID의 트렁케이팅된 부분과 매치할 것이다.
특히, 이 예에서 데이터 구조는 뛰어나게 스케일링하고 고도의 동시 액세스를 가능하게 한다.
이제, 압축된 트랜잭션 식별자를 생성하기 위한 예시적인 방법(500)을 흐름도 형태로 제공하는 도 5에 대한 참조가 이루어질 것이다. 방법(500)은 일부 예에서 채굴 노드에 의해 구현될 수 있다. 방법(500)은, 하나 이상의 프로세서에 의해 실행될 때, 하나 이상의 프로세서로 하여금 설명된 기능을 수행하게 하는 컴퓨터 판독 가능 매체에 저장된 프로세서 실행 가능 명령에 의해 구현될 수 있다. 명령은 SBT 모듈과 같은 애플리케이션 또는 모듈로서 구현될 수 있다. SBT 모듈은 소프트웨어의 독립형 유닛이거나, 소프트웨어 루틴, 명령, 애플리케이션, 모듈 등의 더 큰 모음의 일부로서 통합될 수 있다.
동작(502)에서, SBT 모듈은 트랜잭션 식별자를 수신한다. 트랜잭션 식별자는 새로운 트랜잭션을 유효성 검증하도록 구성된 채굴 노드 내의 트랜잭션 프로세서에 의해 제공될 수 있다. 트랜잭션 자체는 네트워크를 통한 트랜잭션 전파와 관련하여 피어-투-피어 블록체인 네트워크를 통해 수신될 수 있다. 이는 채굴 노드 및/또는 블록체인 네트워크에 연결된 상인 디바이스로부터 상인 API를 통해 수신될 수 있다. 트랜잭션 식별자는, 트랜잭션의 유효성 검증의 일부일 수 있는 트랜잭션의 해싱을 통해 트랜잭션 프로세서에 의해 결정되었을 수 있다.
CID를 생성하기 위해, SBT 모듈은 동작(504)에서 TxID와 솔트를 XOR함으로써 TxID를 랜덤화한다. 솔트는 채굴 노드에 알려진 임의의 고정 숫자일 수 있다. 일부 예에서, 솔트는 블록체인에서 가장 최근에 컴펌된 블록의 머클 트리 루트일 수 있다. 32 바이트 머클 루트에 의한 32 바이트 TxID의 XOR은 32 바이트 랜덤화된 TxID 값을 생성한다.
그런 다음, SBT 모듈은 동작(506 및 508)에서 XOR 연산을 사용하여 랜덤화된 TxID 값을 재귀적으로 폴딩한다. 재귀적 폴딩은 숫자의 제1 절반과 숫자의 제2 절반을 XOR하는 것을 수반한다. 예컨대, 32 바이트 값은 처음 16 바이트와 두 번째 16바이트를 XOR함으로써 폴딩된다. 일부 구현에서, 절반 중 하나 또는 둘 모두는 XOR 연산 이전에 회전될 수 있다. 재귀적 폴딩은 원하는 길이에 도달할 때까지 계속된다. 이 예에서, 값이 4 바이트 길이가 될 때까지 폴딩이 발생한다.
동작(510)은 선택적 회전 동작을 나타낸다. 일부 경우에, 재귀적 폴딩을 통해 획득된 최종 값에 회전이 적용될 수 있다. 동작(512)은 선택적인 트렁케이션 동작을 나타낸다. 일부 경우에, 재귀적 폴딩을 통해 획득된 최종 값의 일부만이 유지된다. 이 예에서, 폴딩된 값의 처음 3바이트만이 유지된다. 그런 다음 그 결과는 동작(514)에서 CID 프리픽스로서 출력된다.
이 예시적인 방법(500)에서, 그런 다음 CID 생성 프로세스는 동작(516)에 의해 표시된 바와 같이 트랜잭션 식별자를 트렁케이팅하는 것 및 프리픽스와 트렁케이팅된 TxID를 연접하는 것을 더 포함한다. TxID는 cid_len 파라미터에 반영된 바와 같이 규정된 CID 길이에 기초하여 결정된 길이로 트렁케이팅될 수 있다. 동작(516)은 CID의 생성을 초래하고, 그런 다음 이는 연관된 트랜잭션이 현재 채굴 노드에 의해 후보 블록에 포함되었음을 다른 채굴 노드에 시그널링하는 데 사용될 수 있다.
방법(500)은 동작(518 내지 522)에 의해 표시된 바와 같이 CID 매핑을 저장하는 것을 더 포함한다. 특히, 동작(518)에서, SBT 모듈은 global_list에 TxID를 저장하고, TxID가 저장된 위치(예컨대, 인덱스)를 언급한다. 그런 다음, 동작(520)에서, 이는 TxID에 대해 생성된 CID 프리픽스와 관련된 버킷을 식별한다. 그런 다음 global_list에 대한 인덱스가 동작(522)에서 해당 버킷에 첨부된다.
SBT 모듈에 의한 새로운 TxID의 수신과 관련하여, 다른 동작, 이를테면, 현재 채굴 노드에 대한 첨부 전용 목록(AOL)에 TxID를 첨부하거나, 현재 채굴 노드가 구축한 후보 블록의 콘텐츠를 반영하거나, 다른 채굴 노드에 전송되는 첨부 메시지에 CID를 포함하는 것이 수행될 수 있음이 이해될 것이다.
이제 제1 채굴 노드에 저장된 AOL을 업데이트하는 예시적인 방법(600)을 예시하는 흐름도를 도시하는 도 6에 대한 참조가 이루어진다. 제1 채굴 노드는 동작(602)에서 제2 채굴 노드로부터 첨부 메시지를 수신한다. 첨부 메시지는 CID의 정렬된 세트를 포함한다. 아래에서 추가로 설명될 바와 같이, 일부 경우에, 송신 채굴 노드가 더 긴 CID 또는 전체 TxID가 충돌을 피하는 데 유리할 것이라고 결정하는 경우, 첨부 메시지는 하나 이상의 확장된 CID 또는 심지어 전체 TxID를 포함할 수 있다.
수신 채굴 노드는 동작(604)에서 수신된 CID의 프리픽스 부분을 추출하고, 프리픽스는 TxID 저장소에서 대응하는 버킷을 식별하는 데 사용된다. 일 예에서, 프리픽스 부분은 처음 3 바이트이다. 위에서 설명된 바와 같이, 버킷은, 해당 프리픽스에 대응하는 TxID가 저장되는 글로벌 TxID 데이터 구조의 위치를 가리키는 하나 이상의 인덱스를 포함한다. 동작(606)에서, 인덱스(들)가 가리키는 TxID는, CID의 나머지, 즉, 트렁케이팅된 부분에 매치하는 것을 찾기 위해 판독된다. 즉, TxID의 첫 번째 부분은 CID의 나머지 부분과 매치할 것이다. 어떠한 매치도 발견되지 않거나, 버킷이 어떠한 인덱스도 포함하지 않으면, 동작(608)에서, 수신 채굴 노드는 누락된 트랜잭션 데이터를 해결하기 위해 송신 채굴 노드에 메시지를 전송할 수 있다. 예컨대, 메시지는 전체 TxID 또는 CID에 대응하는 전체 트랜잭션을 요청할 수 있다.
동작(606)에서 매치가 발견되면, 동작(610)에서 첨부 메시지의 체크섬이 유효성 검증될 수 있다. 일부 예시적인 구현에서, 첨부 메시지는, 첨부 메시지의 CID로부터 획득된 트랜잭션 식별자의 해결된 세트가 정확한지 여부를 결정하기 위한 다른 오류 검출 메커니즘 또는 체크섬을 포함할 수 있다. 만약 실패하면, 그것은 분석이 필요한 검출되지 않은 충돌을 나타낼 수 있다. 결과적으로, 수신 채굴 노드는, 동작(608)에 표시된 바와 같이, 실패한 체크섬에 관한 그리고 충돌 분석을 요청하는 메시지를 송신 채굴 노드에 전송할 수 있다. 체크섬이 유효성 검증되면, 동작(612)에서 수신 채굴 노드는 송신 채굴 노드에 대한 메모리에 저장된 AOL에 트랜잭션 식별자를 첨부한다. 일 구현에서, 첨부 메시지에서 참조되는 모든 트랜잭션 식별자의 정렬된 목록에 대해 단일 체크섬 값이 제공된다. 다른 구현에서, 첨부 메시지에서 참조되는 각각의 트랜잭션 식별자에 대해 체크섬 값이 제공된다. 또 다른 구현에서, 첨부 메시지에서 참조된 순서에서 X개의 순차적인 트랜잭션 식별자의 각각의 그룹에 대해 체크섬 값이 제공된다. 그룹의 크기 X는 블록체인 프로토콜에 의해 설정될 수 있거나, 초기화 중에 채굴 노드에 의해 구성될 수 있다.
상술한 바와 같이, CID 길이는 고정된 값일 수 있다. 고정된 값은 네트워크 프로토콜에 규정되어 있고, 일부 경우에, 하드 코딩될 수 있다. 일부 경우에, 이는 채굴 네트워크의 합의에 의해 선택된 미리 결정된 네트워크 파라미터일 수 있다. 일부 경우에, 이는, 채굴 노드가 SBT 네트워크에 참여하고 있다는 것을 시그널링하는 SBT 초기화 메시지를 전송하고 그가 시그널링할 후보 블록을 가질 때 채굴 노드가 선택한 길이에 기초할 수 있다.
대역폭 사용과 충돌 확률의 균형을 맞추기 위한 최적의 길이는 트랜잭션 볼륨의 변화에 따라 변할 수 있다. 조건 요구에 따라 CID의 길이를 조정하기 위한 우아한 메커니즘을 제공하는 것이 유리할 수 있다. 일 예에서, 디폴트 CID 길이는 CID 길이 파라미터인 cid_len에 의해 설정될 수 있지만, 프로토콜은 충돌이 송신 노드에 의해 식별되는 경우 더 긴 CID를 사용한 트랜잭션 식별자의 시그널링을 허용할 수 있다. 일부 구현에서, 경우에 따라, 충돌을 피하기 위해 길이를 점진적으로 조정하기 위해 CID 길이에 대한 둘 이상의 조정이 이루어질 수 있다. 일부 경우에, 전체 TxID 또는 심지어 전체 트랜잭션이 첨부 메시지로 전송될 수 있다.
전송되는 참조 유형을 시그널링하기 위해, 상이한 유형의 참조에 따라 상이한 작업코드가 정의될 수 있다. 예컨대, 작업코드 OP_APPEND_CID는 cid_len 바이트 길이의 압축 트랜잭션 식별자를 시그널링하기 위해 정의될 수 있다. 추가 작업코드인 OP_APPEND_ECID는, 길이가 (cid_len + 1) 바이트, 즉 CID보다 1바이트 더 긴 "확장된 CID"가 추가될 것임을 시그널링하는 데 사용될 수 있다. 즉, ECID의 트렁케이팅된 부분은 CID의 트렁케이팅된 부분보다 1바이트 더 길다.
일부 경우에, ECID가 충돌을 해결할 수 없는 경우에, "추가 확장된 CID"를 시그널링하기 위해 다른 작업코드인 OP_APPEND_XCID가 정의될 수 있다. XCID는, 예컨대, (cid_len + 4)바이트, 즉 ECID보다 3 바이트 더 길고, CID보다 4 바이트 더 긴 길이를 가질 수 있다. ECID가 충돌을 해결할 수 없는 매우 드문 경우에, 후속하는 데이터가 전체 32 바이트 TxID임을 나타내는 작업코드 OP_APPEND_ID를 사용하여 전체 TxID를 전송될 가능성이 있다.
채굴자가 피어-투-피어 블록체인 네트워크를 통하는 대신에 상인 AP로부터 직접 주입된 트랜잭션을 수신하는 경우와 같이 일부 경우에, 수신 채굴 노드가 피어-투-피어 네트워크를 통해 전파된 메시지를 아직 보지 못했을 것으로 예상하여, 채굴자는 (피어-투-피어 네트워크에서 전파하는 것 외에) 첨부 메시지 내에서 해당 트랜잭션 전체를 전송하도록 선택할 수 있다. 작업코드 OP_APPEND_FULL은 이러한 상황에 대해 정의될 수 있으며, 이는 후속 트랜잭션 데이터의 길이를 나타내는 값이 뒤따르고 그런 다음 트랜잭션 데이터 전체가 뒤따를 수 있다.
이제 압축된 트랜잭션 식별자를 생성하는 하나의 예시적인 방법(700)을 도시하는 흐름도를 도시하는 도 7에 대한 참조가 이루어진다. 방법(700)은 채굴 노드와 같은 적절하게 프로그래밍된 컴퓨팅 디바이스에 의해 구현될 수 있다. 채굴 노드가 유효성 검증된 트랜잭션에 대한 TxID를 가지고 있고 채굴 노드가 CID의 프리픽스 부분을 생성했다고 가정될 수 있다. 프리픽스 부분은, 예컨대, 도 5와 관련하여 설명된 재귀적 폴딩 방법과 같은 재귀적 압축 방법을 사용하여 생성될 수 있다.
동작(702)에서, 채굴 노드는 TxID에 대해 생성된 프리픽스에 대응하는 버킷을 식별한다. 이것은 txid_store 데이터 구조의 프리픽스와 관련하여 저장된 버킷의 주소에 대한 포인터를 식별하는 것을 포함할 수 있다. 그런 다음, 채굴 노드는 동작(704)에 표시된 바와 같이 TxID와 버킷에서 이미 참조된 TxID를 비교한다. 즉, 버킷은, 동일한 프리픽스를 가진 TxID가 저장되는 글로벌 TxID 데이터 구조의 위치를 가리키는 하나 이상의 TxID 인덱스를 이미 포함할 수 있다.
동작(706)에서, 채굴 노드는, 버킷이 참조하는 TxID 중 하나가 현재 TxID의 적어도 처음 N 바이트와 매치하는지 여부를 평가한다. N은 N = cid_len+1과 같이 CID 길이 파라미터 cid_len에 의해 설정된 값일 수 있다. 즉, N은 XCID의 규정된 길이에서 프리픽스의 3 바이트 길이를 뺀 길이와 매치할 수 있으며, 즉 N은 XCID의 트렁케이팅된 부분의 길이와 매치한다. 기존의 저장된 TxID가 현재 TxID의 처음 N 바이트와 매치하면, 동작(708)에서 채굴 노드는 전체 ID가 전송되어야 한다고 결정한다. 따라서, 전체 TxID를 첨부 메시지에 추가하기 위해 OP_APPEND_ID 작업코드가 사용된다.
어떠한 매치도 없으면, 동작(710)에서 채굴 노드는 현재 TxID의 적어도 M 바이트가 버킷에서 참조된 TxID 중 하나와 매치하는지 여부를 평가하고, 여기서 M<N이다. 일부 경우에, M은 ECID의 트렁케이팅된 부분의 길이, 예컨대, cid_len-2에 대응한다. 그렇다면, 동작(712)에서, 채굴 노드는, 예컨대, 전체 길이가 cid_len+4이고, 즉 길이가 cid_len+1 바이트인 TxID의 트렁케이팅된 부분을 갖는 XCID가 전송되어야 한다고 결정한다. 따라서, XCID는 프리픽스 및 TxID의 처음 cid_len+1 바이트로부터 어셈블링되며, OP_APPEND_XCID 작업코드는 XCID를 첨부 메시지에 추가하는 데 사용된다.
어떠한 매치도 없으면, 동작(714)에서 채굴 노드는 현재 TxID의 적어도 P 바이트가 버킷에서 참조된 TxID 중 하나와 매치하는지 여부를 평가하고, 여기서 P<M<N이다. 일부 경우에, P는 CID의 트렁케이팅된 부분의 길이, 예컨대, cid_len-3에 대응한다. 그렇다면, 동작(716)에서 채굴 노드는 예컨대, 전체 길이가 cid_len+1인 ― 여기서 트렁케이팅된 부분의 길이가 cid_len-2임 ― ECID가 전송되어야 한다고 결정한다. 따라서, ECID는 프리픽스 및 TxID의 처음 cid_len-2 바이트로부터 어셈블링되며, OP_APPEND_ECID 작업코드는 첨부 메시지에 ECID를 추가하는 데 사용된다.
동작(706, 710 또는 716)에서 어떠한 매치도 없거나, 아직 버킷에서 참조된 어떠한 TxID도 없는 경우, 동작(718)에서 채굴 노드는 프리픽스 및 TxID의 처음 cid_len-3 바이트를 사용하여 CID를 생성한다. 그런 다음 채굴 노드는 OP_APPEND_CID 작업코드를 사용하여 CID를 첨부 메시지에 추가한다.
이 예시적인 프로세스가 3개의 가능한 압축된 ID 길이(CID, ECID, XCID)를 사용하지만, 다른 구현이 더 많은 가능한 길이 또는 더 적은 가능한 길이를 가질 수 있음을 이해할 것이다. 또한, 이러한 예에서 CID, ECID 및 XCID 값의 길이는 길이의 하나의 예시적인 세트이다. 다른 구현에서 다른 길이가 사용될 수 있다. 위에서 설명한 프로세스는 압축된 식별자의 길이를 점진적으로 조정하여 검출된 충돌을 해결하고 대규모 트랜잭션 볼륨 상황에 적응한다.
위에서 설명한 방법 및 시스템은 사전 해결책 블록 템플릿 전파를 가능하게 하기 위해 채굴 노드 간에 스트리밍 블록 템플릿 데이터에 대한 다양한 옵션을 제공한다. 압축된 트랜잭션 식별자를 사용하면 감소된 대역폭 사용량을 가능하게 한다. 압축된 트랜잭션 식별자를 생성하기 위한 설명된 예시적인 프로세스는, 압축된 식별자의 우아한 적응형 확장을 통해 충돌이 발생하기 전에 충돌을 검출하고 해결하는 데 도움을 준다. 일반적으로 동등 확률 분포를 갖도록 구성된 프리픽스가 있는 압축된 식별자의 구조, 및 CID를 압축 해제/해결하기 위해 데이터를 저장하기 위한 데이터 모델의 구조는 공격 벡터에 대한 복원력을 제공하고, CID를 해결하기 위한 빠른 고도의 동시 메모리 액세스를 가능하게 한다.
대역폭 효율적인 방식으로 트랜잭션 식별자를 시그널링하기 위한 옵션을 추가로 활용하는 것이 유리할 것이다. 따라서, 다른 양상에서, 본 출원은, SBT 네트워크에 참여하는 채굴 노드가 다른 채굴 노드의 AOL에 대한 일반적으로 공통의 픽처를 구축하고 있다는 사실을 이용하는, 트랜잭션 식별자를 시그널링하기 위한 방법 및 시스템을 제공한다. 대부분의 이러한 AOL 목록은 컨펌되지 않은 트랜잭션의 동일한 전체 세트로부터 구축된다. 따라서, 일 양상에서, 채굴 노드는 다른 채굴 노드의 AOL에서 동일한 트랜잭션 식별자에 대한 포인터를 사용하여 그 자신의 AOL에서 트랜잭션 식별자를 참조할 수 있다.
도 8은 2명의 채굴자 노드: 채굴자 A와 채굴자 B를 포함하는 단순화된 예시적인 시스템을 도식적으로 도시한다. 채굴자 A는 자신의 현재 후보 블록에 추가된 트랜잭션의 정렬된 목록을 반영하는 AOL-A 목록(802), 및 채굴자 B가 채굴자 B의 후보 블록에 포함되었다고 알려준 트랜잭션의 정렬된 목록을 반영하는 AOL-B 목록(804)을 갖는다. 이는 2명의 채굴자 사이의 인증된 연결(806)을 통해 채굴자 B로부터 수신된 첨부 메시지에 기초하여 AOL-B 목록을 구축한다.
채굴자 B는 유사하게 자신의 후보 블록의 트랜잭션의 정렬된 목록을 반영하는 그 자신의 AOL-B 목록(808), 및 채굴자 A가 채굴자 A의 후보 블록에 포함되었다고 알려준 트랜잭션의 정렬된 목록을 반영하는 AOL-A 목록(810)을 유지한다.
상술한 바와 같이, 채굴자가 그들 개개의 AOL에서 트랜잭션의 정렬된 목록을 서로에게 시그널링하기 위해 사용하는 첨부 메시지는 OP_APPEND_CID, OP_APPEND_ECID, OP_APPEND_XCID 또는 OP_APPEND_ID와 같은 작업코드를 사용하여 정렬된 목록의 트랜잭션 식별자를 시그널링할 수 있다. 그러나, 채굴자 A가 자신의 AOL-A 목록(802)에 특정 트랜잭션 식별자(812)를 포함하도록 시그널링하고 그가 채굴자 B로부터의 첨부 메시지에 기초하여 AOL-B 목록(804)에 동일한 특정 트랜잭션 식별자(812)를 이미 입력한 경우, 채굴자는 A는 채굴자 B의 AOL-B 목록(804)을 가리킴으로써 해당 특정 트랜잭션 식별자를 채굴자 B에게 특정하는 옵션을 갖는다. 구체적으로, 채굴자 A는 AOL-B 목록(804)을 구성하는 트랜잭션의 정렬된 세트에서 해당 특정 트랜잭션의 인덱스를 나타낼 수 있다. 이 예에서, 인덱스는 0x03일 수 있다.
따라서, 채굴자 B에게 전송될 첨부 메시지를 구축할 때, 채굴자 A는 압축된 트랜잭션 식별자를 참조하는 다른 작업코드 대신 OP_APPEND_IDX 0x03을 사용하도록 선택할 수 있다. 첨부 메시지의 수신 시에, 채굴자 B가 OP_APPEND_IDX 작업코드를 직면할 때, 그는 특정된 인덱스가 그 자신의 AOL-B 목록(808)에 대한 인덱스임을 알게 된다. 그런 다음 그는 자신의 AOL-B 목록으로부터 AOL-A 목록(810)으로 해당 인덱스에 있는 콘텐츠, 즉 TxID를 복사할 수 있다. 이 예에서, AOL-B 목록(808)의 인덱스 0x03에 있는 TxID는 AOL-A 목록(810)에 첨부된다.
트랜잭션 식별자를 시그널링하는 이러한 방식은, AOL 인덱스 값을 시그널링하는 것이 압축된 트랜잭션 식별자를 시그널링하는 것보다 더 효율적인 경우, 특히, 압축된 트랜잭션 식별자가 확장된 또는 추가로 확장된 또는 전체 트랜잭션 식별자인 경우 대역폭 절약을 발생시킬 수 있다.
AOL에 대한 인덱스를 시그널링하여 트랜잭션 식별자를 특정하는 개념은, 하나의 채굴자가 제3 채굴자의 AOL에 대한 인덱스를 제공함으로써 트랜잭션 식별자를 제2 채굴자에게 시그널링할 수 있는 다중 채굴자 상황으로 확장될 수 있다. 도 9는 채굴자 A, 채굴자 B 및 채굴자 C를 수반하는 이러한 상황을 도시한다. 채굴자 A는 그 자신의 AOL-A 목록(902), 채굴자 B에 대한 AOL-B 목록(904) 및 채굴자 C에 대한 AOL-C 목록(906)을 유지한다. AOL-C 목록(906)은 채굴자 C로부터 수신한 첨부 메시지에 기초하여 채굴자 A에 의해 구성된다. 유사하게, 채굴자 B는 그 자신의 AOL-B 목록(910)을 저장하고, 채굴자 A는 AOL-A 목록(912)을 저장하고, 채굴자 C는 AOL-C 목록(914)를 저장한다.
채굴자 A가 자신의 AOL-A 목록(902)에 TxID(920)를 특정하는 첨부 메시지를 채굴자 B에게 전송하려고 하고, 채굴자 C에 대한 AOL-C 목록(906)에 동일한 TxID(920)가 나타난다는 것을 알고 있다면, 채굴자 A는 AOL-C 목록(906)을 특정하고 해당 목록에 대한 인덱스, 예컨대, 0x05를 특정하는 첨부 메시지를 전송될 수 있다. 그런 다음 채굴자 B는, 첨부 메시지를 수신하고 이 참조를 직면할 때, 특정된 인덱스, 예컨대, 0x05에서 그 자신의 AOL-C 목록(914)의 사본 내에서 TxID를 로케이팅할 수 있다. 그런 다음 이는 해당 TxID를 복사하고, 이를 AOL-A 목록(912)에 첨부한다.
제3자 AOL 목록에 대한 인덱스를 특정하기 위해 제3자 인덱스 참조 작업코드인 OP_APPEND_EIDX가 정의될 수 있다. OP_APPEND_EIDX는 AOL 목록 및/또는 연관된 채굴자에 대한 참조 및 인덱스 둘 모두를 포함한다. 이러한 의미에서, 이는 추가적인 데이터를 포함하기 때문에 OP_APPEND_IDX보다 덜 효율적이지만, 그럼에도 불구하고 일부 경우에, CID, ECID, XCID 및/또는 ID 시그널링에 비해 대역폭 절약을 발생시킬 수 있다.
첨부 메시지에 포함된 AOL 목록에 대한 참조는, 일부 경우에, 제3자 채굴자에 대한 참조, 예컨대, 채굴자 ID일 수 있지만, 이것은 특정 템플릿에 대한 참조를 허용하지 않을 것이지만 오히려 해당 제3자 채굴자에 대한 당시 템플릿에 대한 참조로서 해석될 수 있다. 새로운 후보 블록이 시작되면 템플릿이 다시 초기화될 수 있으므로, 블록 시간 내라도, 템플릿 자체를 참조하는 것이 유리할 수 있다.
각각의 템플릿은, 초기화 메시지를 전송할 때 사용되는 스트리밍 블록 템플릿 식별자인 sb_template_id를 갖는다. sb_template_id는 현재 템플릿 중에서 고유하며, 각각의 첨부 메시지에 적용된 시퀀스 번호와 결합하여, 수신 노드가 첨부 메시지를 적절하게 정렬하고 적용하여 이들을 적용하여 올바른 템플릿을 업데이트하는 것을 허용한다. 따라서, OP_APPEND_EIDX 동작은, 인덱스가 올바른 템플릿에서 TxID를 로케이팅하는 데 사용된다는 것을 보장하기 위해 sb_template_id 번호를 참조할 수 있다.
OP_APPEND_EIDX를 효율적으로 만들기 위해서는, SB 템플릿 식별자의 보다 간결한 형태를 사용하는 것이 유리할 수 있다. 임의의 하나의 시간에 수백 개의 템플릿만이 있을 것이라고 가정하면, SB 템플릿 식별자의 압축 형식은 2 바이트와 같은 고정된 단축 바이트 수로 이를 트렁케이팅함으로써 획득될 수 있다. 단축은 트렁케이션, 트렁케이팅된 해시, 머머 해시 또는 임의의 다른 이러한 메커니즘을 통해 이루어질 수 있다. 일부 구현에서, 새로운 템플릿을 초기화하고 새로운 SB 템플릿 식별자를 선택하는 채굴자는 먼저 SB 템플릿 식별자의 압축된 형태가 자신이 알고 있는 임의의 현재 템플릿과 충돌하는지 여부를 테스트하고, 충돌하는 경우, 채굴자는 새로운 SB 템플릿 식별자를 선택하고, 새로운 SB 템플릿 식별자의 압축된 형태를 충돌에 대해 테스트한다.
약 10억 개의 트랜잭션을 포함하는 블록으로 테스트할 때, 적어도 하나의 모델 환경에서, IDX와 CID가 유사한 평균 메시지 크기를 발생시킬 수 있음이 발견되었다. CID는 약간 더 효율적일 수 있다. 그렇지 않은 경우, ECID 또는 XCID를 사용해야 하는 경우, IDX가 선택될 수 있다. ECID는 EIDX보다 효율적일 수 있다. 이용가능한 경우, XCID 또는 ID보다 우선적으로, EIDX를 선택하는 것이 유리할 수 있다.
위에 표시된 바와 같이, SBT 프로세스는, 송신 채굴 노드에 대한 SB 템플릿 식별자를 특정하는 초기화 메시지를 SBT 네트워크 상에서 전송하거나 브로드캐스팅하는 것을 수반할 수 있다. 해당 채굴 노드는 다른 채굴 노드의 개개의 SB 템플릿 식별자를 나타내는 초기화 메시지를 다른 채굴 노드로부터 수신하고, 이러한 메시지를 수신하면, 채굴 노드는 각각의 노드에 대한 대응하는 AOL 목록을 구축할 준비를 한다. 초기화 메시지는 해당 채굴 노드의 AOL 목록과 관련된 특정 파라미터를 설정할 수 있다. 예컨대, 이는 채굴자 ID, SB 템플릿 식별자, 채굴 노드가 사용하는 CID 길이(cid_len)를 특정할 수 있다. 일부 경우에, 이는 채굴자 공개 키 정보 및 채굴자 서명을 포함할 수 있다. 일부 경우에, 이는, 첨부 메시지를 전송할 때 체크섬이 수행되고 제공되는 그룹의 트랜잭션의 수인 체크섬 그룹 크기를 특정할 수 있다. 이 값은 또한 일부 구현에서 개별 첨부 메시지에 특정될 수 있다. 일부 경우에, 초기화 메시지는 이전 블록 해시를 포함할 수 있으므로, 수신자는 메시지가 현재 채굴 윈도우와 관련된 후보 블록과 관련되어 있음을 유효성 검증할 수 있다.
초기화 메시지는, 초기화 메시지 및 첨부 메시지와 같이, 현재 채굴 노드가 SB 템플릿 데이터를 수신한 다른 채굴 노드를 추가로 특정할 수 있다. 다시 말해서, 초기화 메시지는 현재 채굴 노드가 어느 AOL 목록을 추적하고 있는지를 시그널링할 수 있다. 이것은 다른 채굴 노드가 특정 제3자 채굴 노드의 AOL 목록을 참조하는 현재 채굴 노드와의 EIDX 시그널링을 사용할 수 있는지 여부를 인지하는 것을 가능하게 한다. 일부 경우에, 채굴 노드는 후속 첨부 메시지에서 자신의 AOL 추적 데이터를 업데이트하여, 자신이 추가적인 채굴 노드에 대한 AOL 정보를 추적하고 있음을 시그널링한다. 일 예에서, 채굴 노드는, 자신의 초기화 및/또는 첨부 메시지에 특정 다른 노드에 대한 SB 템플릿 식별자를 자신이 구축하고 있는 제3자 템플릿으로서 나열함으로써 해당 다른 노드에 대한 AOL 정보를 추적하고 있음을 시그널링한다.
초기화 메시지를 전송한 후에, 채굴 노드는 자신의 당시의 후보 블록에서 트랜잭션의 정렬된 목록을 특정하는 하나 이상의 첨부 메시지를 전송할 수 있다. 동일한 템플릿과 관련하여 채굴 노드에 의해 전송된 각각의 연속적인 첨부 메시지는 템플릿 식별자와 시퀀스 번호를 포함한다. 이러한 방식으로, 순서가 잘못된 첨부 메시지를 수신하거나 처리하는 채굴 노드는, 그들이 AOL 목록을 구축하고 그리고/또는 순차적 순서에서 임의의 누락된 첨부 메시지를 식별하기 위해 올바른 순서로 처리되는 것을 보장할 수 있다.
첨부 메시지는 각각 템플릿 식별자, 시퀀스 번호, 메시지의 참조 수를 나타내는 트랜잭션 카운트를 포함할 수 있다. AOL 데이터 블록, 즉 CID, IDX 등에 대한 참조 후에, 메시지는 하나 이상의 체크섬 값을 포함할 수 있다. 일부 경우에, 이는, 체크섬을 수행하고 평가할 목적으로 함께 얼마나 많은 해결된 트랜잭션 식별자가 그룹화되는지를 특정하는 체크섬 그룹 크기 파라미터를 포함할 수 있다. 일부 경우에, 모든 해결된 트랜잭션 식별자에 대해 하나의 체크섬이 있을 수 있다. 일부 경우에, 그들은 각각의 그룹에 대한 체크섬 값을 갖는 트랜잭션 식별자의 더 작은 그룹으로 분할될 수 있다.
POW 해결책이 발견되면, 즉 채굴 노드가 자신의 후보 블록의 버전에 대한 POW를 해결하면, 채굴 노드는 다른 채굴 노드에게 해결책을 찾았음을 알리고 해결책의 세부사항을 제공하는 완결 메시지인 sbt_finalize를 SBT 네트워크 상에서 전송한다. sbt_finalize 메시지는, 예컨대, 완전한 블록 헤더, 코인베이스(생성) 트랜잭션 등을 포함할 수 있다. 이는, 아래에서 추가로 설명될 바와 같이, 후보 블록에 대한 AOL 목록의 동기화를 가능하게 하는 데이터를 더 포함할 수 있다.
동기화 문제를 이해하려면, 예시적인 채굴 노드의 다양한 부분의 동작을 고려하는 것이 유리할 수 있다. 도 10은 채굴 노드(1000)의 단순화된 예를 블록도 형태로 도시한다. 이 예에서 채굴 노드(1000)는 새로운 트랜잭션을 수신 및 유효성 검증하고 이들을 트랜잭션 데이터 저장소(1004)에 저장하도록 구성된 트랜잭션 프로세서(1002)를 포함한다. 트랜잭션 데이터 저장소(1004)는 로컬일 수 있거나, 원격에 위치될 수 있고, 하나 이상의 네트워크 연결을 통해 트랜잭션 프로세서(1004)에 연결될 수 있다.
채굴 노드(1000)는, SBT 네트워크를 통해 다른 채굴 노드에 전송될 첨부 메시지를 포함하여, CID, ECID, XCID 및 다양한 메시지를 구성하도록 구성된 SBT 모듈(1006)을 더 포함한다. SBT 모듈(1006)은 다른 채굴 노드로부터 첨부 메시지를 수신하고 로컬 메모리에 저장된 대응하는 AOL(1008)을 구축하도록 추가로 구성된다. SBT 모듈(1006)은 IDX 또는 EIDX 참조의 사용이 유리한 특정 상황에서 CID, ECID, XCID 또는 ID를 IDX 또는 EIDX 참조로 대체할지 여부를 결정하도록 추가로 구성될 수 있다.
SBT 모듈(1006)은 다른 채굴 노드와의 인증된 연결(1010)을 경유하여 SBT 네트워크를 통해 통신을 전송 및 수신한다. 트랜잭션 프로세서(1002)는 블록체인 네트워크와의 네트워크 연결(1012)을 통해 다른 노드와 피어-투-피어 메시지를 전송 및 수신할 수 있다.
트랜잭션 데이터는 3개의 소스로부터 채굴 노드(1000)에 의해 수신될 수 있다. 트랜잭션은, 적용 가능한 블록체인 프로토콜에 의해 관리되는 트랜잭션 전파에 따라 블록체인 네트워크에 대한 네트워크 연결(1012)을 통해 수신될 수 있다. 이러한 트랜잭션은 트랜잭션 프로세서(1002)에 의해 유효성 검증되고, 트랜잭션 데이터 저장소(1004)에 저장되며, 적용 가능한 경우, 네트워크 연결(1012)을 통해 블록체인 네트워크 상의 다른 노드로 추가로 전파된다.
다른 채굴 노드에 대한 인증된 연결(1010) 중 하나를 통해 SBT 네트워크를 경유하여 트랜잭션이 수신될 수 있다. 이러한 트랜잭션은, 특히 다른 채굴 노드가 해당 트랜잭션이 블록체인 네트워크에서 일반적으로 여전히 전파되지 않았음을 알고 있는 경우, 전체 형태로 해당 다른 채굴 노드로부터 수신될 수 있다. SBT 모듈(1006)은 전체 트랜잭션 데이터를 트랜잭션 프로세서(1002)에 전송하여 검증되고 트랜잭션 데이터 저장소(1004)에 저장된다.
트랜잭션은 또한 상인 연결(1014)을 통해 상인 API(1020)를 경유하여 채굴 노드(1000)에 의해 수신될 수 있다. 상인 API(1020)는, 예컨대, POS(point-of-sale) 디바이스 또는 지불 프로세싱 게이트웨이 등과 연관될 수 있고, 유효성 검증 및 전파를 위해 채굴 노드(1000)에 대한 새롭게 생성된 트랜잭션의 직접 주입을 가능하게 할 수 있다.
트랜잭션 프로세서(1002)는 후보 블록을 구축하도록 구성된 저널링 블록 어셈블러(1030)를 더 포함할 수 있다. 후보 블록은 트랜잭션 데이터 저장소(1004)로부터의 유효성 검증된 트랜잭션의 정렬된 세트를 포함한다. 이제 후보 블록 어셈블리 및 분배를 도식적으로 도시하는 도 11에 대한 참조가 또한 이루어진다.
채굴 노드(1000)는 주어진 후보 블록(1040)에 대해 POW를 검색하기 위한 계산을 수행하도록 구성된 복수의 채굴 유닛(1050)을 포함할 수 있다. 일부 경우에, 이러한 채굴 유닛(1050)은 채굴 노드(1000) 내에 있다. 일부 경우에, 이들 채굴 유닛(1050) 중 일부 또는 전부는, 채굴 노드(1000)가 채굴 풀(mining pool)에 대한 풀 조정자(pool coordinator)로서 작동하는 경우와 같이 채굴 노드(1000) 외부에 있을 수 있다.
저널링 블록 어셈블러(1030)는, 트랜잭션이 트랜잭션 프로세서(1002)에 의해 수신 및 유효성 검증됨에 따라 시간이 지남에 따라 후보 블록(1040)에 트랜잭션을 추가하도록 구성될 수 있다. 일부 구현에서, 이것은 저널링 블록 어셈블러(1030)가 새롭거나 업데이트된 후보 블록을 주기적으로 생성하게 할 수 있다. 일부 예에서, 새로운 후보 블록은 대략 1/10초마다 어셈블링된다.
채굴 유닛(1050)은 일단 자신이 동작 중인 후보 블록에 대한 해결책을 찾지 못한 경우, 새로운 후보 블록을 요청할 수 있다. 그런 다음 저널링 블록 어셈블러(1030)는 당시 어셈블링된 후보 블록(1040)을 그들에게 제공함으로써 응답할 수 있다. 따라서, 서로 다른 채굴 유닛(1050)은, 그들이 저널링 블록 어셈블러(1030)로부터 후보 블록(1040)의 상이한 "버전"을 획득한 시기에 의존하여 후보 블록(1040)의 상이한 "버전"에 대해 작동할 수 있다. 각각의 "버전"은 연관된 candidate_block 식별자를 가질 수 있다.
마찬가지로, 다소 비동기적인 방식으로, 트랜잭션 프로세서(1002) 및 일부 경우에는 특히 저널링 블록 어셈블러(1030)는 업데이트된 후보 블록 정보를 SBT 모듈(1006)에 제공할 수 있다. 그런 다음 SBT 모듈(1006)은 채굴 노드(1000)에 의해 테스트되는 후보 블록에 대해 다른 채굴 노드를 업데이트하기 위해 적절한 첨부 메시지를 구축한다. 일부 경우에, SBT 모듈(1006)은 저널링 블록 어셈블러(1030)로부터 자유 실행 기반으로 추가된 트랜잭션에 관한 후보 블록 데이터를 수신할 수 있고, 인입 정보가 새로운 candidate_block 식별자로 마킹될 때까지 해당 인입 정보에 기초하여 첨부 메시지를 구축할 수 있다. 일단 SBT 모듈(1006)이 새로운 candidate_block 식별자를 검출하면, 그는 드래프트 첨부 메시지를 폐쇄하고 전송하고 새로운 candidate_block 식별자와 연관된 새로운 트랜잭션 데이터를 사용하여 새로운 메시지를 시작한다. 이러한 방식으로, 각각의 첨부 메시지는 candidate_block 식별자에 대응하고, 이는 후속 동기화를 더 쉽게 만들 것이다.
채굴 유닛(1050)이 POW 해결책을 식별할 때, 그는 트랜잭션 프로세서(1002)에 통지하고, 그런 다음 트랜잭션 프로세서(1002)는 POW 해결책이 발견되었음을 SBT 모듈(1006)에 알리고 연관된 candidate_block 식별자를 제공한다. 채굴 유닛(1050) 모두가 동기 방식으로 현재 후보 블록에 대해 작동할 필요가 없기 때문에, SBT 모듈(1006)이 생성 및 전송된 첨부 메시지 측면에서 일부 채굴 유닛(1050)보다 앞서 실행되었을 수 있음을 알게 될 것이다. 따라서, SBT 모듈(1006)은 어떤 첨부 메시지가 해결된 candidate_block 식별자에 매치하는지를 식별한다. 첨부 메시지 각각이 템플릿 식별자, sb_template_id(이는 블록 시간 동안 일정함) 및 시퀀스 번호를 갖는다는 것이 상기된다. 일단 SBT 모듈(1006)이 어떤 시퀀스 번호가 candidate_block 식별자와 연관되는지를 결정하면, 그는 동기화가 필요한지 여부를 결정할 수 있다. 동기화가 필요한 경우, 그는 채굴 노드(1000)에 대한 자신의 AOL 목록을 업데이트하여 하나 이상의 첨부 동작을 롤백하도록 다른 채굴 노드에 지시하는 조치를 취한다.
일 예에서, 동기화 롤백은 다른 채굴 노드들에 완결 메시지의 candidate_block에 대응하는 시퀀스 번호를 전송함으로써 구현될 수 있다. 그런 다음 다른 채굴 노드는, 해결된 후보 블록과 매치하는 AOL에 도달하기 위해 후속 시퀀스 번호를 갖는 첨부 메시지로 인해 발생한 임의의 첨부를 해제(rewind)할 수 있다.
다른 예에서, 동기화 롤백은, OP_DELETE 메시지에 표시된 특정 인덱스 뒤에 첨부된 모든 트랜잭션의 삭제를 특정하는 OP_DELETE 동작을 완결 메시지에 삽입하여 구현될 수 있다.
이제 채굴 노드에 대한 후보 블록 업데이트 및 SBT 통신의 병렬 프로세스를 그래픽으로 도시하는 도 12에 대한 참조가 또한 이루어질 것이다. 도면의 좌측에는 저널링 블록 어셈블러에 의해 형성된 후보 블록의 제1 버전이 있다. 어셈블러가 유효성 검증된 트랜잭션을 순서대로 후보 블록에 추가함에 따라 제1 버전이 형성된다. 이러한 트랜잭션, 및 일부 경우에, 후보 블록의 그들의 인덱스(예컨대, 위치/순서)는 SBT 모듈에 중계된다. 해당 트랜잭션 데이터를 SBT 모듈에 전달하는 것은 후보 블록 식별자, 예컨대, candidate_block_id로 태깅된 메시지에 있다. 일 예에서, 식별자는 쉽게 참조할 수 있도록 cb_id로 지정된다. 이 간단한 예에서, cb_id는 초기에 0으로 설정되어, SBT 모듈에 중계된 제1 버전의 각각의 트랜잭션이 cb_id=0을 특정하는 메시지에 있게 된다.
SBT 모듈은, 트랜잭션 데이터가 수신될 때, 수신된 트랜잭션 데이터를 드래프트 첨부 메시지에 추가하고, 이로써 전송을 위한 첨부 메시지를 구축한다. 첨부 메시지는 전체 TxID가 아닌 CID, ECID 또는 XCID를 포함할 수 있음을 알게 될 것이다. 일부 구현에서, 특정 채굴자에게 메시지를 전송하기 전에 CID, ECID, XCID 또는 ID 참조를 IDX 또는 EIDX 참조로 대체할지 여부를 나중에 SBT 모듈이 결정하도록 남겨둘 수 있지만, 일부 경우에, 첨부 메시지는 IDX 또는 EIDX 참조를 포함할 수 있다.
일정 포인트에서, 저널링 블록 어셈블러는 현재 후보 블록의 어셈블리를 완료한다. 이것은 주기적으로, 예컨대, 1/10초마다 트리거될 수도 있거나, 새로운 블록에 대한 채굴 유닛으로부터의 요청에 대한 응답으로 트리거될 수도 있다. 일부 경우에, 저널링 블록 어셈블러가 현재 이용 가능한 트랜잭션을 사용하여 완료하자마자, 후보 블록의 초기 버전이 어셈블링되고 전송되고, 그런 다음 그는 추가적인 유효성 검증된 트랜잭션이 트랜잭션 프로세스에 의해 유효성이 검증되고 저장됨에 따라 추가적인 유효성 검증된 트랜잭션을 추가하고, 그리고 후보 블록의 새로운 '버전'은 채굴할 후보 블록에 대한 채굴 유닛의 요청에 응답하여 진화하는 후보 블록이 해당 채굴 유닛에 전송될 때마다 마킹된다.
저널링 블록 어셈블러가 후보 블록 버전이 변경되는 시기를 어떻게 결정하는지에 관계없이, 버전이 변경될 때마다, SBT 모듈에 중계되는 후속 트랜잭션은 업데이트된 후보 블록 식별자로 마킹된다. 예시된 예에서, 인덱스 위치 0x05에서의 트랜잭션이 SBT 모듈에 중계될 때, 그는 cb_id = 1을 포함하는 메시지에 있다. 따라서, 해당 메시지를 수신하면, SBT 모듈은 후보 블록 버전이 (0x00으로부터 0x01로) 변하였다고 결정한다. 결과적으로, 그는, 여전히 새로운 트랜잭션을 추가하지 않고서, 드래프트 첨부 메시지를 완료하고 이를 전송한다. 그런 다음 그는 다음 시퀀스 번호를 갖는 새로운 드래프트 첨부 메시지를 개방하고, 후보 블록의 인덱스 0x05에 있는 트랜잭션을 새로운 드래프트 첨부 메시지에 추가한다. 그는 또한 이 채굴 노드에 대한 메모리에 저장된 로컬 AOL을 업데이트하여, 후보 블록의 현재 상태를 추적할 수 있다.
이 프로세스는, 도시된 바와 같이, 계속되고, SBT 모듈은 후보 블록 식별자가 증분되었음을 저널링 블록 어셈블러로부터의 중계된 트랜잭션으로부터 발견할 때마다, 그는 첨부 메시지를 폐쇄 및 전송한다. 채굴 유닛 중 하나가 해결책을 찾으면, 그는 해결책을 찾은 후보 블록에 대한 후보 블록 식별자와 함께 트랜잭션 프로세서에 해결책을 반환한다. 작동 중인 후보 블록 버전이 채굴 유닛에 제공된 이래로, 한 번 이상 업데이트되었을 수 있기 때문에, 이것은 반드시 현재 후보 블록 식별자일 필요는 없다. 따라서, 후보 블록 식별자를 사용하여, 저널링 블록 어셈블러는 어떤 버전의 후보 블록이 해결되었는지를 결정할 수 있다.
해결책 및 그와 연관된 후보 블록 식별자가 또한 SBT 모듈에 중계된다. 그런 다음 SBT 모듈은 어떤 첨부 메시지가 해결된 후보 블록과 연관되었는지, 즉, 일단 해당 후보 블록 식별자가 증분되었다면, 어떤 첨부 메시지가 전송되었는지를 결정한다. 예컨대, 예시된 프로세스를 사용하여, 해결된 블록에 대한 후보 블록 식별자가 cb_id = 1인 경우, 후보 블록은 인덱스 0x00 내지 0x10에 걸쳐 있는 트랜잭션의 정렬된 세트를 포함한다. 그런 다음 SBT 모듈은 시퀀스 번호 0 및 1을 갖는 첨부 메시지가 후보 블록과 매치하지만 해당 첨부 메시지 시퀀스 번호 2 및 드래프트(하지만 전송되지 않은) 첨부 메시지 시퀀스 번호 3이 해결된 후보 블록의 일부가 아님을 식별한다.
따라서, SBT 모듈은 다른 채굴 노드에게 해결책이 발견되었음을 알리는 SBT 완결 메시지, 예컨대, sbt_finalize를 준비하여 전송하고, 해결책 데이터(예컨대, 블록 헤더 데이터, 코인베이스 트랜잭션 등)를 제공하고, 동기화 데이터를 제공한다. 일 예에서, 동기화 데이터는 해결된 후보 블록에 대응하는 마지막 첨부 메시지의 시퀀스 번호일 수 있다. 그런 다음 수신 채굴 노드는, 그들이 나중의 시퀀스 번호를 갖는 첨부 메시지로 대응하는 AOL 목록을 업데이트했는지 여부를 식별하고, 그들은 해당 첨부를 해제하여 AOL 목록이 해결된 후보 블록의 콘텐츠와 매치한다는 것을 보장한다. 그런 다음 그들은 SBT 완결 메시지로부터의 해결책 데이터를 사용하여 완성된 블록을 어셈블링하고, 블록 해결책을 유효성 검증할 수 있다.
대안적으로, 동기화 데이터는, 이전 첨부 동작을 해제하기 위해 AOL 목록으로부터 제거될 트랜잭션을 특정하는 하나 이상의 명시적 삭제 작업코드일 수 있다. 삭제 작업코드는, 모든 후속 첨부가 또한 제거되어야 한다는 점을 포함해서, 제거해야 하는 가장 오래된 첨부에 대한 단일 작업코드일 수 있거나, AOL 목록으로부터 제거되어야 하는 모든 각각의 트랜잭션 식별자에 대해 삭제 작업코드가 포함될 수 있다.
위의 예를 다시 참조하면, SBT 모듈이 첨부 메시지 2 및 드래프트 첨부 메시지 3이 제거되어야 한다고 결정하면, 그는 단순히 드래프트 첨부 메시지 3을 폐기하고 SBT 완결 메시지에서 시퀀스 번호 1을 특정한다. 그런 다음 수신 채굴 노드는 첨부 메시지 시퀀스 번호 2에 기초하여 어떤 트랜잭션이 추가되었는지를 결정하고, 해당 트랜잭션 식별자를 AOL 목록으로부터 제거한다. 대안적으로, SBT 완결 메시지는 해당 트랜잭션 식별자를 제거하기 위해 적용할 삭제 동작을 포함한다.
이러한 방식으로, 저널링 블록 어셈블러는 SBT 모듈과 독립적으로 실행되며, 이는 별도의 첨부 메시지에서 트랜잭션 식별자를 차단하는 측면에서 후보 블록 버전과 부분적으로 동기화되고, 그런 다음 이는 해결책 발견 시에 원격 채굴 노드에서 AOL 목록을 빠르고 우아하게 동기화하는 것을 가능하게 한다.
이제 채굴 노드 내의 트랜잭션 프로세서의 하나의 예시적인 동작 방법(1300)을 흐름도 형태로 도시하는 도 13에 대한 참조가 이루어질 것이다. 트랜잭션 프로세서의 모든 동작 또는 기능이 흐름도에 설명되어 있지는 않음을 알 수 있다. 흐름도에 설명된 동작 중 일부는 저널링 블록 어셈블러에서 수행될 수 있다. 흐름도에 설명된 동작 중 일부는 저널링 블록 어셈블러가 아닌 트랜잭션 프로세서의 다른 부분에 의해 수행될 수 있다. 일부 경우에, 흐름도에 설명된 동작 중 일부는 트랜잭션 프로세서 자체 외부의 채굴 노드 구성요소에 의해 수행될 수 있다.
동작(1302)에서, 트랜잭션이 수신된다. 트랜잭션은 피어-투-피어 블록체인 네트워크, 상인 API 연결 또는 다른 것을 통해 수신될 수 있다. 트랜잭션 프로세서는 트랜잭션을 유효성 검증하고 컨펌되지 않은 트랜잭션의 멤풀에 저장한다. 동작(1304)에서, 트랜잭션 프로세서는 트랜잭션이 현재 후보 블록에 포함되어야 한다고 결정한다. 그 결정의 근거는 상이한 구현에서 변동할 수 있다. 이 경우에, 결정이 이루어지고, 후보 블록 식별자 i를 갖는 현재 후보 블록에 트랜잭션이 첨부된다. 자신의 트랜잭션 식별자로 표현되는 트랜잭션은 후보 블록 내의 트랜잭션의 정렬된 목록에서 인덱스(n)에서 후보 블록에 첨부될 수 있다. 동작(1306)에서 후보 블록 내의 트랜잭션 식별자 및 그의 인덱스(n)는 연관된 후보 블록 식별자 i와 함께 SBT 모듈에 전송된다.
동작(1308)에서 트랜잭션 프로세서는 해결책이 자신의 채굴 유닛 중 임의의 것에 의해 발견되었는지 여부를 평가한다. 채굴 유닛 중 하나로부터의 해결책의 통지에는, 그가 해결한 후보 블록과 연관된 후보 블록 식별자 및 해결책의 세부사항, 예컨대, 논스, 머클 루트 등이 수반될 것이다. 그러한 해결책이 발견되었다면, 트랜잭션 프로세서는 해결책의 유효성 검증을 시작할 수 있으며, 그는 동작(1312)에 표시된 바와 같이 해결책 및 그의 연관된 후보 블록 식별자에 대해 SBT 모듈에 통지하여, SBT 모듈이 다른 채굴자에게 알리고 그들의 AOL 목록을 동기화하는 프로세스를 시작할 수 있도록 한다. 어떠한 그러한 해결책도 발견되지 않은 경우, 트랜잭션 프로세서는 또한 동작(1310)에 표시된 바와 같이 외부 채굴자에 의한 해결책의 통지가 수신되었는지 여부를 평가한다. 해당 통지는 피어-투-피어 블록체인 네트워크를 통해 또는 SBT 네트워크를 통해 올 수 있다. 트랜잭션 프로세서는 SBT 모듈에 의해 유지되는 대응하는 AOL 목록으로부터 새롭게 발견된 블록을 구성할 수 있으며, 새로운 블록이 합법적인 것을 컨펌하기 위해 이를 유효성 검증하는 동작을 수행할 것이라는 것이 인지될 것이다. 합법적인 블록은 또한 컨펌된 트랜잭션의 멤풀의 플러싱을 발생시킬 수 있다.
해결책이 외부 또는 내부에서 발견되면, 동작(1314)에서 블록 식별자 및 인덱스가 재설정되고, 동작(1316)에서 트랜잭션 프로세서에 의해 새로운 후보 블록이 초기화된다. 그런 다음 프로세스는 컨펌되지 않은 트랜잭션으로 새로운 후보 블록을 채우기 시작하기 위해 동작(1302)으로 복귀한다.
어떠한 해결책도 발견되지 않은 경우, 동작(1318)에서 트랜잭션 프로세서는 후보 블록 식별자를 증분할지 여부를 결정할 수 있다. 전술한 바와 같이, 트랜잭션 프로세서는 고정된 기간 기반, 예컨대, 1/10초마다 후보 블록 버전 및 식별자를 업데이트하도록 구성될 수 있다. 일부 경우에, 트랜잭션 프로세서는 채굴 유닛 중 하나 이상으로부터의 후보 블록 요청에 응답하여 후보 블록 버전 및 식별자를 업데이트하도록 구성될 수 있다. 어떠한 업데이트도 예정되어 있지 않은 경우, 인덱스(n)는 동작(1319)에서 증분되고, 프로세스는 현재 후보 블록에 컨펌되지 않은 트랜잭션을 계속 추가하기 위해 동작(1302)으로 복귀한다.
후보 블록 버전 및 인덱스가 업데이트되어야 하는 경우, 동작(1320)에서 트랜잭션 프로세서는 당시의 후보 블록을 채굴되도록 하나 이상의 채굴 유닛에 전송할 수 있고, 동작(1302)으로 복귀하기 전에 후보 블록 식별자 i를 증분하여 현재 후보 블록에 컨펌되지 않은 트랜잭션을 계속 추가할 수 있다.
채굴 노드 내의 SBT 모듈의 예시적인 동작 방법(1400)이 도 14의 흐름도에 의해 예시된다. SBT 모듈의 모든 동작 또는 기능이 흐름도에 반드시 예시되어 있지는 않음을 이해할 것이다. 예컨대, 흐름도는 인입 첨부 메시지의 취급 및 대응하는 AOL 목록의 구축, 또는 TxID 압축된 식별자 생성 또는 해결 프로세스를 예시하지는 않는다. 흐름도에 설명된 동작 중 일부는 SBT 모듈에 의해 수행될 수 있다. 흐름도에 설명된 동작 중 일부는 SBT 모듈 자체 외부에 있는 채굴 노드의 다른 구성요소에 의해 수행될 수 있다.
동작(1402)에서, SBT 모듈은 데이터 구조의 클리어링, 인덱스의 제로화, 메모리의 할당 등과 같은 초기화를 수행할 수 있다. 동작(1402)은 다른 파라미터뿐만 아니라, 현재 블록에 대해 채굴 노드에 의해 사용되는 SB 템플릿 식별자를 나타내는 초기화 메시지를 다른 채굴 노드에 전송하는 것을 더 포함할 수 있다. SBT 모듈은 동작(1404)에서 현재 후보 블록에 대한 드래프트 첨부 메시지를 시작한다. 첨부 메시지는 SB 템플릿 식별자 sb_template_id를 포함할 수 있으며, 이는 다른 채굴 노드로부터 수신된 임의의 기존 SB 템플릿 식별자, 또는 존재하는 경우 그들의 압축된 버전과 충돌하지 않도록 선택될 수 있다. 첨부 메시지는 초기에 0으로 설정될 수 있는 시퀀스 번호를 더 포함할 수 있다.
동작(1404)에서, SBT 모듈은 트랜잭션 프로세서로부터 트랜잭션 식별자, 트랜잭션이 첨부된 후보 블록 버전을 나타내는 후보 블록 식별자(예컨대, cb_id), 및 후보 블록의 트랜잭션의 정렬된 목록 내의 트랜잭션의 위치를 나타내는 인덱스와 같은 트랜잭션 데이터를 수신한다.
동작(1408)에서, SBT 모듈은, 수신된 후보 블록 식별자가 가장 최근에 수신된 식별자 이후 증분되었는지 여부를 결정한다. 그렇지 않은 경우, SBT 모듈은, 수신된 트랜잭션 식별자가 현재 후보 블록 버전에 추가되었음을 알고, 그는 동작(1410)에 표시된 바와 같이, 적용 가능한 경우, 대응하는 CID, ECID, XCID 등을 생성하도록 진행하고, 트랜잭션에 대한 참조(예컨대, CID, ECID, XCID, ID, IDX, EIDX 등)를 드래프트 첨부 메시지에 추가한다.
어떠한 블록 해결책도 발견되지 않았다고 가정하면, 동작(1416)에 표시된 바와 같이, 방법(1400)은 트랜잭션 프로세서로부터 수신된 다음 트랜잭션 데이터를 프로세싱하기 위해 동작(1406)으로 복귀한다. 이것은, SBT 모듈이, 동작(1408)에서, 트랜잭션 프로세서로부터 수신된 트랜잭션 식별자가 증분된 후보 블록 식별자, 예컨대, cb_id와 연관되어 있다고 결정할 때까지 계속될 수 있다. 그러한 경우, SBT 모듈은 새로운 트랜잭션 식별자를 추가하지 않고 드래프트 첨부 메시지를 폐쇄하고, 동작(1412)에 표시된 바와 같이 이를 다른 채굴 노드에 전송한다. 그런 다음, 그는, 동작(1414)에서, 증분된 시퀀스 번호를 갖는 새로운 드래프트 첨부 메시지를 개방하고 그런 다음, 수신된 트랜잭션 식별자(또는 그 압축된 형태)를 새로운 드래프트 첨부 메시지에 추가하기 위해 동작(1410)으로 진행한다.
블록 해결책이 동작(1416)에서 검출되고 외부 채굴 노드에 의해 발견되면, SBT 모듈은 초기화 동작(1402)으로 복귀한다. AOL 목록 및 데이터 구조가 다시 초기화되고, 새로운 후보 블록을 구축하는 프로세스가 새롭게 시작된다.
SBT 모듈이 동작(1418)에 표시된 바와 같이 이 채굴 노드에 의해 해결책이 발견되었음을 나타내는 해결책의 통지를 트랜잭션 프로세서에 의해 수신하면, SBT 모듈은 다른 채굴 노드에 전송될 SBT 완결 메시지를 준비한다. 특히, 발견된 해결책에 관한 트랜잭션 프로세서로부터의 통지는 해결책과 연관된 후보 블록 식별자에 대한 참조를 포함한다. 동작(1420)에서, SBT 모듈은, 어떤 첨부 메시지가 후보 블록 식별자와 연관된 후보 블록 내의 트랜잭션의 마지막 추가된 그룹에 대응하는지를 결정한다. 그런 다음, 그는, 동작(1422)에서, 블록 해결책 정보와 동기화 데이터를 포함하는 SBT 완결 메시지를 다른 채굴 노드에 전송한다. 위에서 언급한 바와 같이, 동기화 데이터는 일부 구현에서 해결된 후보 블록과 연관된 마지막 유효한 첨부 메시지의 시퀀스 번호를 포함할 수 있다. 일부 구현에서, 동기화 데이터는 해결된 후보 블록에 동기화하기 위해 연관된 AOL 목록으로부터 제거될 트랜잭션 식별자를 식별하는 삭제 명령을 포함할 수 있다.
이제 본 출원의 예에 따른 단순화된 채굴 노드(1500)를 블록도 형태로 도시하는 도 15에 대한 참조가 이루어진다. 채굴 노드(1500)는, 하나 이상의 마이크로프로세서, 주문형 집적 회로(ASIC), 마이크로컨트롤러, 또는 유사한 컴퓨터 처리 디바이스를 포함할 수 있는 프로세서(1502)를 포함한다. 채굴 노드(1500)는 값, 변수, 및 일부 경우에 프로세서 실행 가능 프로그램 명령을 저장하기 위한 영구 및 비영구 메모리를 포함할 수 있는 메모리(1504) 및 네트워크 인터페이스(1506)를 더 포함할 수 있다.
채굴 노드(1500)는, 실행될 때, 프로세서(1502)가 본원에 설명된 기능 또는 동작 중 하나 이상을 수행하게 하는 프로세서 실행 가능 명령을 포함하는 프로세서 실행 가능 블록체인 애플리케이션(1508)을 포함할 수 있다.
위에서 제시된 다양한 실시예는 단지 예일 뿐이며 이 출원의 범위를 제한하는 것을 의미하지 않는다. 본원에 설명된 혁신의 변형은 당업자에게 명백할 것이며, 이러한 변형은 본 출원의 의도된 범위 내에 있다. 특히, 위에서 설명된 예시적인 실시예 중 하나 이상으로부터의 특징은 위에서 명시적으로 설명되지 않을 수 있는 특징의 하위 조합을 포함하는 대안적인 예시적인 실시예를 생성하도록 선택될 수 있다. 또한, 위에서 설명된 예시적인 실시예 중 하나 이상으로부터의 특징이 선택되고 결합되어 위에서 명시적으로 설명되지 않을 수 있는 특징의 조합을 포함하는 대안적인 예시적인 실시예를 생성할 수 있다. 이러한 조합 및 하위 조합에 적합한 특징은 본 출원 전체를 검토할 때 당업자에게 용이하게 명백할 것이다. 본원 및 인용된 청구범위에 기술된 주제는 기술의 모든 적절한 변경을 포함하고 포용하도록 의도된다.

Claims (15)

  1. 블록체인 네트워크에서 제1 채굴 노드에 의해 트랜잭션 식별자를 압축하는 컴퓨터 구현 방법으로서,
    트랜잭션 식별자의 제1 정렬된 목록을 포함하는 제1 후보 블록을 구축하는 단계;
    제2 채굴 노드로부터, 상기 제2 채굴 노드에 의해 채굴되는 제2 후보 블록 내의 트랜잭션 식별자의 제2 정렬된 목록을 정의하는 데이터를 수신하는 단계;
    상기 제1 정렬된 목록 내의 트랜잭션 식별자 중 적어도 하나가 또한 상기 제2 정렬된 목록에 있다고 결정하는 단계;
    상기 트랜잭션 식별자의 제1 정렬된 목록을 정의하는 데이터를 포함하는 첨부 메시지를 생성하는 단계 ― 상기 데이터는 상기 트랜잭션 식별자의 제2 정렬된 목록 내의 상기 적어도 하나의 트랜잭션 식별자의 인덱스 포지션을 포함함으로써 상기 트랜잭션 식별자의 제1 정렬된 목록에서 상기 적어도 하나의 트랜잭션 식별자를 특정함 ― ; 및
    상기 첨부 메시지를 상기 제2 채굴 노드에 전송하는 단계를 포함하는,
    컴퓨터 구현 방법.
  2. 제1항에 있어서, 상기 생성하는 단계는 상기 인덱스 위치가 상기 적어도 하나의 트랜잭션 식별자에 대한 압축된 트랜잭션 식별자보다 더 콤팩트하다고 결정하는 단계를 포함하는,
    컴퓨터 구현 방법.
  3. 제2항에 있어서, 상기 인덱스 위치가 더 콤팩트하다고 결정하는 단계는 상기 압축된 트랜잭션 식별자를 생성하는 단계를 포함하는,
    컴퓨터 구현 방법.
  4. 제3항에 있어서, 상기 제1 채굴 노드 및 상기 제2 채굴 노드는 적어도 2개의 길이의 압축된 트랜잭션 식별자를 정의하고, 상기 압축된 트랜잭션 식별자를 생성하는 단계는 상기 적어도 하나의 트랜잭션 식별자가 충돌로 인해 상기 적어도 2개의 길이 중 더 긴 길이를 요구한다고 결정하는 단계, 및 상기 결정에 기초하여, 상기 인덱스 위치가 더 콤팩트하다고 결정하는 단계를 포함하는,
    컴퓨터 구현 방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    제3 채굴 노드로부터, 상기 제3 채굴 노드에 의해 활성적으로 채굴되고 있는 제3 후보 블록 내의 트랜잭션 식별자의 제3 정렬된 목록을 정의하는 데이터를 수신하는 단계;
    상기 제1 정렬된 목록 내의 트랜잭션 식별자 중 하나가 또한 상기 제3 정렬된 목록에 있다고 결정하는 단계; 및
    상기 제3 정렬된 목록에 대한 참조 및 상기 트랜잭션 식별자의 제3 정렬된 목록 내의 상기 트랜잭션 식별자 중 상기 하나의 인덱스 위치를 포함함으로써 상기 첨부 메시지에서 상기 트랜잭션 식별자 중 상기 하나를 특정하는 단계를 더 포함하는,
    컴퓨터 구현 방법.
  6. 제5항에 있어서, 상기 특정하는 단계는 상기 제2 채굴 노드가 상기 제3 정렬된 목록을 저장한다고 먼저 결정하는 단계를 포함하는,
    컴퓨터 구현 방법.
  7. 제6항에 있어서, 상기 제2 채굴 노드로부터, 상기 제2 채굴 노드에 저장된 목록을 특정하는 데이터를 수신하는 단계를 더 포함하고, 상기 목록을 특정하는 데이터는 상기 제3 정렬된 목록에 대한 참조를 포함하는,
    컴퓨터 구현 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서, 상기 제2 채굴 노드로부터, 제2 첨부 메시지를 수신하는 단계 ― 상기 제2 첨부 메시지는 트랜잭션 식별자의 추가 정렬된 목록을 정의하는 데이터를 포함함 ― , 상기 트랜잭션 식별자의 추가 정렬된 목록을 획득하기 위해 상기 데이터를 해결(resolve)하는 단계, 및 상기 트랜잭션 식별자의 제2 정렬된 목록에 첨부된 상기 트랜잭션 식별자의 추가 정렬된 목록을 저장하는 단계를 더 포함하는,
    컴퓨터 구현 방법.
  9. 제8항에 있어서, 상기 데이터는 상기 트랜잭션 식별자의 제1 정렬된 목록 내의 트랜잭션 식별자에 대한 참조를 포함하는,
    컴퓨터 구현 방법.
  10. 제9항에 있어서, 상기 참조는 상기 제1 정렬된 목록에서의 인덱스 위치를 포함하고, 상기 해결하는 단계는 상기 제1 정렬된 목록 내의 상기 인덱스 위치에서 상기 트랜잭션 식별자를 획득하는 단계를 포함하는,
    컴퓨터 구현 방법.
  11. 제5항 내지 제7항 중 어느 한 항에 있어서, 상기 제2 채굴 노드로부터, 제2 첨부 메시지를 수신하는 단계 ― 상기 제2 첨부 메시지는 트랜잭션 식별자의 추가 정렬된 목록을 정의하는 데이터를 포함함 ― , 상기 트랜잭션 식별자의 추가 정렬된 목록을 획득하기 위해 상기 데이터를 해결하는 단계, 및 상기 트랜잭션 식별자의 제2 정렬된 목록에 첨부된 상기 트랜잭션 식별자의 추가 정렬된 목록을 저장하는 단계를 더 포함하고, 상기 데이터는 상기 트랜잭션 식별자의 제3 정렬된 목록 내의 트랜잭션 식별자에 대한 참조를 포함하는,
    컴퓨터 구현 방법.
  12. 제11항에 있어서, 상기 참조는 상기 제3 정렬된 목록에 대한 참조 및 상기 제3 정렬된 목록 내의 인덱스 위치를 포함하고, 상기 해결하는 단계는 상기 제3 정렬된 목록 내의 상기 인덱스 위치에서 상기 트랜잭션 식별자를 획득하는 단계를 포함하는,
    컴퓨터 구현 방법.
  13. 제12항에 있어서, 상기 트랜잭션의 제3 정렬된 목록을 참조하는 초기화 메시지를 상기 제2 채굴 노드에 전송하는 단계를 더 포함하는,
    컴퓨터 구현 방법.
  14. 블록체인 네트워크에서 트랜잭션 식별자를 압축하는 컴퓨팅 디바이스로서,
    하나 이상의 프로세서;
    메모리; 및
    상기 메모리에 저장된 프로세서 실행 가능 명령을 포함하고, 상기 프로세서 실행 가능 명령은, 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 프로세서로 하여금 제1항 내지 제13항 중 어느 한 항에 청구된 방법을 수행하게 하는,
    컴퓨팅 디바이스.
  15. 블록체인 네트워크에서 트랜잭션 식별자를 압축하기 위한 프로세서 실행 가능 명령을 저장하는 컴퓨터 판독 가능 매체로서,
    상기 프로세서 실행 가능 명령은, 하나 이상의 프로세서에 의해 실행될 때, 상기 프로세서로 하여금 제1항 내지 제13항 중 어느 한 항에 청구된 방법을 수행하게 하는 명령을 포함하는,
    컴퓨터 판독 가능 매체.
KR1020237022156A 2020-12-04 2021-11-24 교차-참조를 갖는 스트리밍 블록 템플릿에 대한 방법및 시스템 KR20230110628A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2019125.0 2020-12-04
GB2019125.0A GB2601539A (en) 2020-12-04 2020-12-04 Methods and systems for streaming block templates with cross-references
PCT/EP2021/082871 WO2022117418A1 (en) 2020-12-04 2021-11-24 Methods and systems for streaming block templates with cross-references

Publications (1)

Publication Number Publication Date
KR20230110628A true KR20230110628A (ko) 2023-07-24

Family

ID=74175168

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237022156A KR20230110628A (ko) 2020-12-04 2021-11-24 교차-참조를 갖는 스트리밍 블록 템플릿에 대한 방법및 시스템

Country Status (7)

Country Link
US (1) US20240106669A1 (ko)
EP (1) EP4256750A1 (ko)
JP (1) JP2023552774A (ko)
KR (1) KR20230110628A (ko)
CN (1) CN116918298A (ko)
GB (1) GB2601539A (ko)
WO (1) WO2022117418A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116827682B (zh) * 2023-08-23 2023-11-24 腾讯科技(深圳)有限公司 数据处理方法、装置及计算机设备

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
MX2021012225A (es) 2019-04-11 2022-12-05 Btl Medical Solutions A S Metodos y aparatos para el tratamiento estetico de estructuras biologicas mediante radiofrecuencia y energia magnetica.
GB2582978B (en) 2019-04-12 2022-05-04 Nchain Holdings Ltd Methods and devices for propagating blocks in a blockchain network

Also Published As

Publication number Publication date
JP2023552774A (ja) 2023-12-19
US20240106669A1 (en) 2024-03-28
CN116918298A (zh) 2023-10-20
GB2601539A (en) 2022-06-08
EP4256750A1 (en) 2023-10-11
GB202019125D0 (en) 2021-01-20
WO2022117418A1 (en) 2022-06-09

Similar Documents

Publication Publication Date Title
EP3665858B1 (en) Verification of interactions system and method
US20220156735A1 (en) Methods and devices for propagating blocks in a blockchain network
CN112968907B (zh) 数据传输方法、数据存储方法、数据查询方法、介质及设备
KR20230110628A (ko) 교차-참조를 갖는 스트리밍 블록 템플릿에 대한 방법및 시스템
US20230162186A1 (en) Block propagation with poisoned transactions in a blockchain network
KR20230117388A (ko) 트랜잭션 식별자를 압축하기 위한 방법 및 시스템
KR20230117389A (ko) 스트리밍된 템플릿을 해결된 블록에 동기화하기 위한방법 및 시스템
JP7076757B2 (ja) ブロックの分割によりスループットを改善したブロックチェーンシステム及びコンピュータープログラム
CN113094397B (zh) 数据存储和查询响应方法、区块执行方法