KR20220012353A - 블록체인 트랜잭션의 데이터 필드의 검증 - Google Patents

블록체인 트랜잭션의 데이터 필드의 검증 Download PDF

Info

Publication number
KR20220012353A
KR20220012353A KR1020217042550A KR20217042550A KR20220012353A KR 20220012353 A KR20220012353 A KR 20220012353A KR 1020217042550 A KR1020217042550 A KR 1020217042550A KR 20217042550 A KR20217042550 A KR 20217042550A KR 20220012353 A KR20220012353 A KR 20220012353A
Authority
KR
South Korea
Prior art keywords
transaction
hash
identifier
block
data
Prior art date
Application number
KR1020217042550A
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 KR20220012353A publication Critical patent/KR20220012353A/ko

Links

Images

Classifications

    • 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/3236Cryptographic 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 using cryptographic hash functions
    • H04L9/3239Cryptographic 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 using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • 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
    • H04L2209/38

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

질의하는 사용자가 대상 트랜잭션이 후보 데이터 필드를 포함하는지 여부를 결정할 수 있게 하는 대상 트랜잭션의 세컨더리 트랜잭션 식별자를 생성하는 컴퓨터 구현 방법. 방법은, 대상 트랜잭션의 데이터 필드의 집합을 식별하는 것 - 각 데이터 필드는 트랜잭션의 각자의 데이터를 포함함; 및 트랜잭션 해시 트리를 생성하는 것을 포함한다. 각 데이터 필드는 해시되어 트랜잭션 해시 트리의 복수의 리프 해시 중 각자의 것을 생성한다. 트랜잭션 해시 트리의 루트 해시는 세컨더리 트랜잭션 식별자를 포함한다.

Description

블록체인 트랜잭션의 데이터 필드의 검증
본 개시는 질의하는 사용자가 블록체인의 블록 내의 트랜잭션의 후보 데이터 필드 포함 여부를 검증할 수 있게 하는 방법에 관한 것이다.
블록체인은 분산 데이터 구조의 일 형태를 지칭하며, 여기에서 블록체인의 복제본이 피어-투-피어(Peer-to-Peer; P2P) 네트워크의 복수의 노드의 각각에서 유지된다. 블록체인은 데이터의 블록의 체인을 포함하며, 각 블록은 하나 이상의 트랜잭션을 포함한다. 각 트랜잭션은 시퀀스 내에서 선행 트랜잭션을 뒤로 가리키며(point back), 블록체인의 시작 부분의 제네시스 블록까지 뒤로 갈 수 있다. 트랜잭션은 "채굴"로 알려진 프로세스에 의해 새로운 블록에 포함되도록 네트워크에 제출될 수 있으며, 이는 복수의 채굴 노드 각각이 "작업 증명", 즉 블록에 포함되기를 기다리는 보류 중인 트랜잭션의 풀에 기초하여 암호화 퍼즐 해결을 수행하기 위해 경쟁하는 것을 수반한다.
일반적으로 블록체인의 트랜잭션은 디지털 자산, 즉 가치 저장소 역할을 하는 데이터를 전달하는 데 사용된다. 그러나, 블록체인 위에 추가적인 기능을 쌓기 위해 블록체인을 활용할 수도 있다. 예를 들어, 블록체인 프로토콜은 트랜잭션 출력 내에 추가 사용자 데이터의 저장을 허용한다. 최신 블록체인은 단일 트랜잭션에 저장할 수 있는 최대 데이터 용량을 늘리고 있어, 더욱 복잡한 데이터를 통합할 수 있다. 예를 들어 이는 블록체인에 전자 문서를 저장하거나, 오디오 또는 비디오 데이터를 저장하는 데에도 사용할 수 있다.
네트워크의 각 노드는 전달, 채굴 및 저장의 세 가지 역할 중 임의의 하나, 둘 또는 모두를 가질 수 있다. 전달 노드는 네트워크 노드 전체에 트랜잭션을 전파한다. 채굴 노드는 트랜잭션을 블록으로 채굴한다. 저장 노드는 각각 블록체인의 채굴된 블록에 대한 자체 사본을 저장한다. 트랜잭션을 블록체인에 기록하기 위해, 당사자는 트랜잭션을 네트워크의 노드 중 하나로 전송하여 전파한다. 트랜잭션을 수신한 채굴 노드는 트랜잭션을 새로운 블록으로 채굴하기 위해 경쟁할 수 있다. 각 노드는 트랜잭션이 유효하기 위한 하나 이상의 조건을 포함하는 동일한 노드 프로토콜을 따르도록 구성된다. 유효하지 않은 트랜잭션은 전파되거나 블록으로 채굴되지 않는다. 트랜잭션이 유효성 검증되어 블록체인에서 수락된다고 가정하면, 추가 사용자 데이터는 P2P 네트워크의 각 노드에 변경 불가능한 공개 기록으로 저장되어 유지된다.
최신 블록을 생성하기 위하여 작업 증명 퍼즐을 성공적으로 해결한 채굴자는 일반적으로 디지털 자산의 새로운 금액을 생성하는 "생성 트랜잭션(generation transaction)"이라는 트랜잭션으로 보상을 받는다. 작업 증명은 블록을 채굴하는 데 많은 양의 컴퓨팅 자원이 필요하고 이중 지출 시도가 포함된 블록은 다른 노드에서 수락되지 않을 가능성이 높기 때문에, 블록에 이중 지출 트랜잭션을 포함함으로써 채굴자가 시스템을 속이지 않도록 장려한다.
블록체인의 각 블록은 일반적으로 블록의 모든 트랜잭션의 요약을 포함한다. 이 요약은 "머클 트리(Merkle tree)"를 사용하여 생성된다. 머클 트리는 암호화 해시를 포함하는 해시 트리이다. "머클 트리"라는 용어는 문헌에서 이진 해시 트리를 나타내기 위해 때때로 사용되지만, 머클의 원래 개시는 이진 해시 트리로 제한되지 않았고 문헌의 다른 곳에서 "해시 트리"와 "머클 트리"가 동의어로 사용된다. 전자의 정의가 본원에서 채택된다. "트리"라는 용어는 맨 위에 "루트"가 있고 바닥에 "리프"가 있는, 분기 데이터 구조를 지칭한다. 머클 트리는 루트 또는 머클 루트라는 하나의 해시만이 있을 때까지 노드 쌍을 재귀적으로 해시하여 구성된다. 루트 해시는 블록에 있는 전체 트랜잭션 집합의 전반적 디지털 지문을 나타내며, 트랜잭션이 블록에 포함되어 있는지 여부를 확인하는 효율적인 프로세스를 제공한다. 특정 트랜잭션이 블록에 포함되어 있음을 증명하기 위하여, 노드는 특정 트랜잭션을 트리의 루트로 연결하는 인증 경로 또는 "머클 경로"를 구성하는 비교적 적은 수의 해시만을 생성하면 된다.
대부분의 블록체인 생태계에서 다양한 유형의 노드의 기능과 능력은 다양하다. 예를 들어, 채굴자는 블록체인의 전체 사본을 저장하고 들어오는 모든 트랜잭션을 검증할 수 있도록 훨씬 더 많은 계산 자원에 접근할 수 있는 반면, 블록체인의 일반 사용자는 지불의 생성 및 방송을 위한 더 가벼운 클라이언트를 가질 가능성이 높다.
머클 트리, 또는 일반적으로 해시 트리는 노드에서 주어진 트랜잭션이 블록체인으로 채굴되었는지 검증하는 데 사용할 수 있다. 이는 당업계에서 간편 지불 검증(simplified payment verification; SPV)으로 지칭되지만, 지불 트랜잭션을 검증하는 것으로 제한되지는 않는다. 이 검증 방법은 일반적으로 노드(경량 클라이언트만을 실행 가능할 수 있음)가 전체 트랜잭션 데이터를 얻고 이를 해시하고 "머클 증명"을 수행해야 한다.
현재 SPV 방법은 이미지 파일과 같은 작은 크기의 데이터가 블록체인에 존재하는지 검증해야 하는 경량 클라이언트에 적합하다. 그러나, 블록체인 생태계가 확장됨에 따라, 트랜잭션 크기가 현저히 증가할 가능성이 있으며 그에 따라 내부에 포함된 임의 데이터 패킷의 크기 또한 그러할 것이다. 이는 특히 경량 클라이언트의 경우, 트랜잭션을 검증할 때 전체 트랜잭션을 해시해야 하므로 문제가 되며, 이는 블록체인의 트랜잭션 내의 훨씬 작은(예를 들어 킬로바이트) 데이터 패킷의 존재를 검증하기 위해 큰(예를 들어 메가바이트 또는 기가바이트) 트랜잭션을 검색해야 할 수도 있다는 것을 의미한다.
따라서 노드(예를 들어 경량 클라이언트)가 전체 트랜잭션을 획득할 필요 없이 트랜잭션의 일부(예를 들어 더 작은 데이터 패킷)의 존재를 증명할 수 있는 것이 바람직하다.
본원에 개시된 일 양상에 따르면, 대상 트랜잭션(target transaction)의 세컨더리 트랜잭션 식별자(secondary transaction identifier)를 생성하는 컴퓨터 구현 방법이 제공되며, 세컨더리 트랜잭션 식별자는 대상 트랜잭션이 후보 데이터 필드를 포함하는지 여부를 질의하는 사용자가 결정할 수 있게 하고; 방법은 생성 사용자에 의해 수행되며: 대상 트랜잭션의 데이터 필드 집합을 식별하는 것 - 각 데이터 필드는 트랜잭션의 각자의 데이터를 포함함; 트랜잭션 해시 트리를 생성하는 것을 포함하고, 트랜잭션 해시 트리는: i) 복수의 리프 해시를 포함하는 리프 계층 - 각 데이터 필드는 복수의 리프 해시 중 각자의 것을 생성하도록 해시됨, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 세컨더리 트랜잭션 식별자를 포함하는 루트 계층 - 세컨더리 트랜잭션 식별자는 하나 이상의 내부 계층 중 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨 - 을 포함한다.
본 개시는 노드(즉, 질의하는 사용자)가 트랜잭션의 개별 데이터 필드를 검증할 수 있도록 머클 트리, 또는 더 일반적으로 해시 트리가 이용될 수 있는 추가 방식을 인식한다. 트랜잭션은 해시 트리를 생성하기 위해 데이터 필드의 집합으로 분할(또는 파싱)된다. 즉, 트랜잭션의 상이한 부분은 별도의 데이터 필드로 식별된다. 해시 트리의 루트는 트랜잭션의 새로운 세컨더리 식별자 역할을 한다. 예를 들어 경량 클라이언트만을 운영할 수 있는 질의하는 사용자는 전체 트랜잭션 데이터를 가져와 해시할 필요 없이, 세컨더리 식별자를 사용하여, 트랜잭션 내의 (작은) 데이터 필드의 존재를 증명하는, 증명을 수행할 수 있다.
세컨더리 트랜잭션 식별자는 전체 트랜잭션 데이터에 접근할 수 있는 임의의 사용자가 생성할 수 있다. 예를 들어, 생성 사용자는 트랜잭션을 수신한 채굴자, 블록체인 네트워크의 사용자(예를 들어 트랜잭션을 생성한 앨리스), 또는 실제로 트랜잭션을 제공받았거나 볼 수 있는 블록체인 네트워크 외부의 사용자일 수 있다.
본원에 개시된 다른 양상에 따르면, 블록체인의 블록 내의 대상 트랜잭션이 후보 데이터 필드를 포함하는지 여부를 질의하는 사용자가 결정할 수 있게 하는 컴퓨터 구현 방법이 제공되며, 방법은 커밋 사용자에 의해 수행되고: 대상 트랜잭션의 세컨더리 트랜잭션 식별자를 획득하는 것; 및 세컨더리 트랜잭션 식별자를 블록체인의 블록 내로 포함하기 위한 트랜잭션으로 커밋하는 것을 포함하고, 세컨더리 트랜잭션 식별자는: 대상 트랜잭션의 데이터 필드 집합을 식별하는 것 - 각 데이터 필드는 트랜잭션의 각자의 데이터를 포함함; 및 트랜잭션 해시 트리를 생성하는 것에 의해 생성되었으며, 트랜잭션 해시 트리는: i) 데이터 필드의 정렬된 집합에 기초하여 정렬된 복수의 리프 해시를 포함하는 리프 계층 - 각 데이터 필드는 복수의 리프 해시 중 각자의 것을 생성하도록 해시됨, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 세컨더리 트랜잭션 식별자를 포함하는 루트 계층 - 세컨더리 트랜잭션 식별자는 하나 이상의 내부 계층 중 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨 - 을 포함한다.
세컨더리 트랜잭션 식별자는 질의하는 사용자가 접근할 수 있도록 온체인(on-chain)에 저장될 수 있다. 추가적으로 또는 대안적으로, Tx1의 세컨더리 트랜잭션 식별자는 상이한 트랜잭션 Tx2에 기록될 수 있다. 세컨더리 트랜잭션 식별자는 채굴자에 의해 생성 트랜잭션에 기록될 수 있다.
임의의 사용자는 세컨더리 트랜잭션 식별자를 온체인에 기록(즉, 블록체인에 포함되도록 함)할 수 있다. 예를 들어 채굴자는 블록(대상 트랜잭션을 포함하는 동일한 블록 또는 다른 블록)의 생성 트랜잭션에 이를 포함할 수 있다. 대안적으로, 당사자(예를 들어 앨리스)는 세컨더리 트랜잭션 식별자를 포함하는 (유효한) 트랜잭션을 블록체인으로 채굴되도록 하나 이상의 노드로 전송하여 식별자가 블록체인의 블록 내에 포함되도록 할 수 있다.
본원에 개시된 다른 양상에 따르면, 블록체인의 블록 내의 대상 트랜잭션의 후보 세컨더리 트랜잭션 식별자가 특정 프로토콜에 따라 생성되었는지 여부를 검증하는 컴퓨터 구현 방법이 제공되며, 방법은 검증 사용자에 의해 수행되고: 후보 세컨더리 트랜잭션 식별자를 획득하는 것; 대상 트랜잭션의 데이터 필드 집합을 식별하는 것 - 각 데이터 필드는 트랜잭션의 각자의 데이터를 포함함; 트랜잭션 해시 트리를 생성하는 것 - 트랜잭션 해시 트리는: i) 복수의 리프 해시를 포함하는 리프 계층 - 각 데이터 필드는 각자의 리프 해시를 생성하도록 해시됨, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 세컨더리 트랜잭션 식별자를 포함하는 루트 계층 - 세컨더리 트랜잭션 식별자는 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨 - 을 포함함; 및 세컨더리 트랜잭션 식별자가 후보 세컨더리 트랜잭션 식별자와 일치하는지 여부를 검증하는 것을 포함한다.
이는 전체 트랜잭션에 접근할 수 있는 임의의 사용자(예를 들어 채굴자와 같은 블록체인 네트워크의 노드)가 생성 사용자가 올바른 프로토콜(예를 들어 트랜잭션 데이터 필드의 올바른 식별 및 해시 트리의 올바른 생성)을 사용하여 세컨더리 트랜잭션 식별자를 생성하였는지 여부를 검증할 수 있게 한다. 기록 사용자가 올바른 프로토콜을 사용하였는지 확인하면, 검증 노드는 예를 들어 질의하는 사용자와 같은 다른 블록체인 사용자에게 알림으로써 해당 사실을 입증할 수 있다.
본원에 개시된 다른 양상에 따르면, 블록체인의 블록 내의 대상 트랜잭션이 후보 데이터 필드를 포함하는지 여부를 결정하는 컴퓨터 구현 방법이 제공되며, 방법은 질의하는 사용자에 의해 수행되고: 후보 리프 해시를 획득하는 것 - 후보 리프 해시는 후보 데이터 필드의 해시임; 대상 트랜잭션의 후보 세컨더리 트랜잭션 식별자를 획득하는 것 - 세컨더리 트랜잭션 식별자는 대상 트랜잭션의 데이터 필드 집합을 식별하는 것 - 각 데이터 필드는 트랜잭션의 각자의 데이터를 포함함, 및 트랜잭션 해시 트리를 생성하는 것 - 트랜잭션 해시 트리의 루트 계층은 세컨더리 트랜잭션 식별자를 포함함 - 에 의해 생성된 것임; 후보 데이터 필드에 대한 인증 경로를 획득하는 것 - 인증 경로는 정렬된 해시 집합을 포함하고, 정렬된 해시 집합은 적어도 하나의 리프 해시 및 하나 이상의 내부 해시 집합을 포함하고, 각 내부 해시 집합은 트랜잭션 해시 트리의 각자의 내부 계층에 속함; 및 획득한 후보 리프 해시, 획득한 후보 세컨더리 트랜잭션 식별자 및 후보 데이터 필드에 대한 획득한 인증 경로를 사용하여 해시 트리 증명을 수행하는 것 - 상기 수행하는 것은 세컨더리 트랜잭션 식별자를 생성함 - 을 포함하고; 상기 결정은 세컨더리 트랜잭션 식별자가 후보 세컨더리 트랜잭션 식별자와 일치하는지 여부에 기초한다.
위에서 언급한 바와 같이, 현재는 블록체인에서 트랜잭션의 존재를 검증하기 위하여 SPV 방법이 사용된다. 해당 방법에서, 블록의 각 트랜잭션은 해시 트리의 리프를 형성한다. 대조적으로, 본 개시는 개별 데이터 필드를 해시 트리의 리프로 사용하여 이러한 데이터 필드 중 하나의 존재를 검증한다. N개의 데이터 필드가 해시되어 루트 해시로 요약될 때, 질의하는 사용자는 해시 트리 증명(해시 트리가 머클 트리인 경우 머클 증명이라고 함)을 수행하여 해시 트리(및 따라서 트랜잭션) 내에 어떤 데이터 필드가 포함되어 있는지 확인할 수 있다. 이를 위해, 질의하는 사용자에게 해시 트리 경로라고도 하는 인증 경로가 제공된다(해시 트리가 머클 트리인 경우 머클 경로라고도 함). 질의하는 사용자는 후보 세컨더리 트랜잭션 식별자(루트 해시)가 생성될 때까지 해시 트리 경로의 연속 해시로 후보 데이터 필드를 재귀적으로 해시한다. 세컨더리 트랜잭션 식별자는 생성에 사용된 기본 해시 함수만큼 고유하다. 따라서 해시 함수의 속성으로 인해, 후보 데이터 필드가 해당 동일한 트랜잭션의 일부인 경우에만 후보 세컨더리 트랜잭션 식별자가 트랜잭션의 세컨더리 트랜잭션 식별자와 동일할 것이다. 후보 및 획득한 세컨더리 트랜잭션 식별자가 일치하면, 질의하는 사용자는 후보 데이터 필드가 트랜잭션의 일부를 형성한다고 확신할 수 있다.
본원에 개시된 다른 양상에 따르면, 블록체인의 블록의 세컨더리 블록 식별자(secondary block identifier)를 생성하는 컴퓨터 구현 방법이 제공되며, 블록은 트랜잭션 집합을 포함하고, 세컨더리 블록 식별자는 트랜잭션 집합이 후보 데이터 필드를 포함하는지 여부를 질의하는 사용자가 결정할 수 있게 하며; 방법은 생성 사용자에 의해 수행되고: 트랜잭션 집합 내의 각 트랜잭션에 대하여, 각자의 세컨더리 트랜잭션 식별자를 획득하는 것; 및 트랜잭션 집합 해시 트리를 생성하는 것을 포함하고, 트랜잭션 집합 해시 트리는: i) 복수의 리프 해시를 포함하는 리프 계층 - 각 리프 해시는 세컨더리 트랜잭션 식별자 중 각자의 것에 대응함, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 세컨더리 블록 식별자를 포함하는 루트 계층 - 세컨더리 블록 식별자는 하나 이상의 내부 계층 중 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨 - 을 포함한다.
여기에서, 블록 내 각 트랜잭션의 각자의 세컨더리 트랜잭션 식별자는 "트랜잭션 해시 트리의 트리"의 리프로 사용된다. 즉, 각 세컨더리 트랜잭션 식별자 자체가 트랜잭션 해시 트리의 루트 해시이다. 트랜잭션 해시 트리의 트리(트랜잭션 집합 해시 트리로도 지칭됨)의 루트는 블록 내 모든 트랜잭션의 압축이므로 세컨더리 블록 식별자 역할을 한다. 세컨더리 블록 식별자는 모든 세컨더리 트랜잭션 식별자를 획득(예를 들어 생성)할 수 있는 임의의 사용자에 의해 생성될 수 있다. 예를 들어, 생성 사용자는 세컨더리 트랜잭션 식별자를 생성한 채굴자일 수 있다. 대안적으로, 세컨더리 트랜잭션 식별자는 세컨더리 트랜잭션 식별자를 포함하는 트랜잭션(예를 들어 생성 트랜잭션)에서 추출될 수 있다.
블록을 식별하는 다른 방법, 예를 들어 블록 헤더, 블록 높이, 블록 깊이 및 블록 번호가 있음을 유의한다. 그러나, "블록 식별자"라는 용어는 해시 트리의 (머클) 루트를 지칭하기 위해 전체적으로 사용된다. 예를 들어, 세컨더리 블록 식별자는 트랜잭션 트리의 트리의 루트이다.
본원에 개시된 다른 양상에 따르면, 블록체인의 블록 내의 트랜잭션 집합이 후보 데이터 필드를 포함하는지 여부를 질의하는 사용자가 결정할 수 있게 하는 컴퓨터 구현 방법이 제공되며, 방법은 커밋 사용자에 의해 수행되고: 트랜잭션 집합을 포함하는 블록의 세컨더리 블록 식별자를 획득하는 것; 및 세컨더리 블록 식별자를 블록체인의 블록 내로 포함하기 위한 트랜잭션으로 커밋하는 것을 포함하고, 세컨더리 블록 식별자는: 트랜잭션 집합 내의 각 트랜잭션에 대하여, 각자의 세컨더리 트랜잭션 식별자를 획득하는 것; 및 트랜잭션 집합 해시 트리를 생성하는 것에 의해 생성되었으며, 트랜잭션 집합 해시 트리는: i) 복수의 리프 해시를 포함하는 리프 계층 - 각 리프 해시는 세컨더리 트랜잭션 식별자 중 각자의 것에 대응함, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 세컨더리 블록 식별자를 포함하는 루트 계층 - 세컨더리 블록 식별자는 하나 이상의 내부 계층 중 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨 - 을 포함한다.
다시, 세컨더리 트랜잭션 식별자에 접근할 수 있는 임의의 사용자(예를 들어 이러한 식별자를 생성한 사용자)는 세컨더리 블록 식별자를 생성할 수 있다. 그러나, 채굴자만이 블록의 생성 트랜잭션 내에서 세컨더리 블록 식별자를 기록할 수 있다.
본원에 개시된 다른 양상에 따르면, 블록체인의 블록의 후보 세컨더리 블록 식별자가 특정 프로토콜에 따라 생성되었는지 여부를 검증하는 컴퓨터 구현 방법이 제공되며, 블록은 트랜잭션 집합을 포함하고, 방법은 검증 사용자에 의해 수행되며: 후보 세컨더리 블록 식별자를 획득하는 것; 트랜잭션 집합 내의 각 트랜잭션에 대하여, 각자의 세컨더리 트랜잭션 식별자를 획득하는 것; 트랜잭션 집합 해시 트리를 생성하는 것 - 트랜잭션 집합 해시 트리는: i) 복수의 리프 해시를 포함하는 리프 계층 - 각 리프 해시는 세컨더리 트랜잭션 식별자 중 각자의 것에 대응함, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 세컨더리 블록 식별자를 포함하는 루트 계층-세컨더리 블록 식별자는 하나 이상의 내부 계층 중 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨 - 을 포함함; 및 세컨더리 블록 식별자가 후보 세컨더리 블록 식별자와 일치하는지 여부를 검증하는 것을 포함한다.
이는 각 트랜잭션 전체에 접근할 수 있는 임의의 사용자(예를 들어 채굴자 또는 저장 노드와 같은 블록체인 네트워크의 노드)가 생성 사용자가 올바른 프로토콜(예를 들어 트랜잭션 집합 해시 트리의 올바른 생성)을 사용하여 세컨더리 블록 식별자를 생성하였는지 여부를 검증할 수 있게 한다.
본원에 개시된 다른 양상에 따르면, 블록체인의 블록이 후보 데이터 필드를 포함하는 대상 트랜잭션을 포함하는지 여부를 결정하는 컴퓨터 구현 방법이 제공되며, 블록은 상기 대상 트랜잭션을 포함하는 트랜잭션 집합을 포함하고, 방법은 질의하는 사용자에 의해 수행되며: i) 후보 리프 해시 - 후보 리프 해시는 후보 데이터 필드의 해시임; ii) 대상 트랜잭션의 후보 세컨더리 트랜잭션 식별자 및 iii) 후보 데이터 필드에 대한 인증 경로를 획득하는 것; 세컨더리 트랜잭션 식별자를 생성하기 위해 i), ii) 및 iii)을 사용하여 해시 트리 증명을 수행하는 것; iv) 후보 세컨더리 블록 식별자 및 v) 후보 세컨더리 블록 식별자에 대한 인증 경로를 획득하는 것; 세컨더리 블록 식별자를 생성하기 위해 iv), v) 및 생성된 세컨더리 트랜잭션 식별자를 사용하여 해시 트리 증명을 수행하는 것; vi) 대상 트랜잭션의 후보 프라이머리 트랜잭션 식별자, vii) 트랜잭션 집합을 포함하는 블록의 후보 프라이머리 블록 식별자 및 viii) 프라이머리 블록 식별자에 대한 인증 경로를 획득하는 것; 및 프라이머리 블록 식별자를 생성하기 위해 vi), vii) 및 viii)을 사용하여 해시 트리 증명을 수행하는 것을 포함하고; 상기 결정은: a) 생성된 세컨더리 트랜잭션 식별자가 후보 세컨더리 트랜잭션 식별자와 일치하는지, b) 생성된 세컨더리 블록 식별자가 후보 세컨더리 블록 식별자와 일치하는지, 및 c) 생성된 프라이머리 블록 식별자가 후보 프라이머리 블록 식별자와 일치하는지 여부에 기초한다.
(프라이머리 및 세컨더리 버전 각각에 대해) 후보 및 생성된 블록 식별자가 서로 일치하는지 확인하면, 질의하는 사용자는 블록체인으로 채굴된 블록이 대상 트랜잭션을 포함하고, 대상 트랜잭션은 후보 데이터 필드를 포함한다고 확신할 수 있다. 이는 프라이머리 및 세컨더리 블록 식별자가 모두 동일한 입력 데이터(트랜잭션)로 구성되어, 작업 증명 합의로 인해 신뢰할 수 있기 때문이다.
본 개시의 실시예의 이해를 돕고 그러한 실시예가 실행되는 방법을 보여주기 위하여, 단지 예로서 첨부 도면을 참조한다:
도 1은 블록체인을 구현하는 시스템의 개략적인 블록도이다.
도 2는 블록체인에 기록될 수 있는 트랜잭션의 일부 예를 개략적으로 도시한다.
도 3은 블록체인을 구현하는 다른 시스템의 개략적인 블록도이다.
도 4는 머클 트리의 개략도이다.
도 5는 머클 경로를 사용하는, 루트 R로 표현되는 트리 내의 데이터 블록 D1의 머클 존재 증명(Merkle proof-of-existence)을 도시한다.
도 6은 트랜잭션 머클 트리의 개략도이다.
도 7은 루트 RB가 유효한 블록의 블록 헤더에 포함된 블록 머클 트리 TB의 개략도이다.
도 8은 트랜잭션 머클 트리 TM의 트리의 루트 RM이 생성 트랜잭션에 포함된 블록의 개략도이다.
도 9a 및 9b는 각각 트랜잭션에 저장된 예시적인 학술 논문 데이터의 전체 및 경량 버전을 도시한다.
도 1은 일반적으로 블록체인(150)을 구현하는 예시적인 시스템(100)을 도시한다. 시스템(100)은 패킷 교환 네트워크(101), 일반적으로 인터넷과 같은 광역 인터네트워크를 포함한다. 패킷 교환 네트워크(101)는 패킷 교환 네트워크(101) 내에서 피어-투-피어(P2P) 오버레이 네트워크(106)를 형성하도록 배열된 복수의 노드(104)를 포함한다. 각 노드(104)는 피어의 컴퓨터 장비를 포함하며, 상이한 노드(104)는 상이한 피어에 속한다. 각 노드(104)는 하나 이상의 프로세서, 예를 들어, 하나 이상의 중앙 처리 장치(CPU), 가속기 프로세서, 애플리케이션 특정 프로세서 및/또는 필드 프로그램 가능 게이트 어레이(FPGA)를 포함한다. 각 노드는 또한 메모리, 즉 비일시적 컴퓨터 판독 가능 매체 형태의 컴퓨터 판독 가능 스토리지를 포함한다. 메모리는 하나 이상의 메모리 매체, 예를 들어, 하드 디스크와 같은 자기 매체; 솔리드 스테이트 드라이브(SSD), 플래시 메모리 또는 EEPROM과 같은 전자 매체; 및/또는 광 디스크 드라이브와 같은 광 매체를 사용하는 하나 이상의 메모리 유닛을 포함할 수 있다.
블록체인(150)은 데이터 블록의 체인(151)을 포함하며, 블록체인(150)의 각자의 사본이 P2P 네트워크(160)의 복수의 노드 각각에서 유지된다. 체인 내의 각 블록(151)은 하나 이상의 트랜잭션(152)을 포함하며, 이 맥락에서 트랜잭션은 일종의 데이터 구조를 지칭한다. 데이터 구조의 특성은 트랜잭션 모델 또는 체계의 일부로 사용되는 트랜잭션 프로토콜 유형에 의존할 것이다. 주어진 블록체인은 일반적으로 전체에 걸쳐 하나의 특정 트랜잭션 프로토콜을 사용한다. 하나의 공통 유형의 트랜잭션 프로토콜에서, 각 트랜잭션(152)의 데이터 구조는 적어도 하나의 입력 및 적어도 하나의 출력을 포함한다. 각 출력은 출력이 암호로 잠긴 사용자(103)에 속한 디지털 자산의 양을 나타내는 금액을 지정한다(잠금을 해제하여 리딤(redeem)하거나 지출하기 위해서는 해당 사용자의 서명이 필요함). 각 입력은 선행 트랜잭션(152)의 출력을 뒤로 가리키므로, 트랜잭션을 연결한다.
노드(104) 중 적어도 일부는 트랜잭션(152)을 전달하고 이에 따라 전파하는 전달 노드(104F)의 역할을 수행한다. 노드(104) 중 적어도 일부는 블록(151)을 채굴하는 채굴자(104M)의 역할을 수행한다. 노드(104) 중 적어도 일부는 각자의 메모리에 동일한 블록체인(150)의 각자의 사본을 저장하는 저장 노드(104S)(때때로 "전체 사본(full-copy)" 노드라고도 함)의 역할을 한다. 각 채굴자 노드(104M)는 또한 블록(151)으로 채굴되기를 기다리는 트랜잭션(152)의 풀(154)을 유지한다. 주어진 노드(104)는 전달 노드(104), 채굴자(104M), 저장 노드(104S) 또는 이들 중 임의의 둘 또는 모두의 조합일 수 있다.
주어진 현재 트랜잭션(152j)에서, 그(또는 각각의) 입력은 트랜잭션 시퀀스에서 선행 트랜잭션(152i)의 출력을 참조하는 포인터를 포함하며, 이 출력이 현재 트랜잭션(152j)에서 리딤되거나 "지출됨"을 지정한다. 일반적으로, 선행 트랜잭션은 풀(154) 또는 임의의 블록(151) 내의 임의의 트랜잭션일 수 있다. 선행 트랜잭션(152i)은 현재 트랜잭션(152j)이 생성되거나 네트워크(106)로 전송될 때 반드시 존재할 필요는 없지만, 선행 트랜잭션(152i)은 현재 트랜잭션이 유효하려면 존재하고 유효성 검증되어야 한다. 따라서 본원에서 "선행(preceding)"은 포인터에 의해 연결된 논리적 시퀀스의 선행자를 지칭하며, 반드시 시간적 시퀀스로 생성 또는 전송하는 시간이 아니고, 따라서 트랜잭션(152i, 152j)가 순서와 다르게(out-of-order)(고아(orphan) 트랜잭션에 대한 아래 논의 참조) 생성되거나 전송되는 것을 반드시 배제하지 않는다. 선행 트랜잭션(152i)은 앞선(antecedent) 트랜잭션 또는 선행자(predecessor) 트랜잭션으로 동등하게 지칭될 수 있다.
현재 트랜잭션(152j)의 입력은 또한 선행 트랜잭션(152i)의 출력이 잠겨 있는 사용자(103a)의 서명을 포함한다. 차례로, 현재 트랜잭션(152j)의 출력은 새로운 사용자(103b)에 대해 암호학적으로 잠길 수 있다. 따라서 현재 트랜잭션(152j)은 선행 트랜잭션(152i)의 입력에 정의된 금액을 현재 트랜잭션(152j)의 출력에 정의된 바와 같이 새로운 사용자(103b)에게 전달할 수 있다. 일부 경우에 트랜잭션(152)은 다수의 사용자(그 중 하나는 잔돈을 주기 위해 원래 사용자(103a)일 수 있음) 사이에 입력 금액을 분할하기 위해 다수의 출력을 가질 수 있다. 일부 경우에 트랜잭션은 또한 하나 이상의 선행 트랜잭션의 다수의 출력에서 금액을 수집하고 현재 트랜잭션의 하나 이상의 출력에 재분배하기 위해 다수의 입력을 가질 수도 있다.
위의 것은 "출력 기반" 트랜잭션 프로토콜로 지칭될 수 있으며, 때때로 또한 미지출 트랜잭션 출력(UTXO) 유형 프로토콜(출력을 UTXO로 지칭함)로 지칭된다. 사용자의 총 잔액은 블록체인에 저장된 어떤 하나의 숫자로 정의되지 않으며, 대신 사용자는 블록체인(151) 내의 많은 상이한 트랜잭션(152)에 흩어져 있는 해당 사용자의 모든 UTXO 값을 대조하기 위해 특별한 "지갑" 애플리케이션(105)이 필요하다.
트랜잭션 프로토콜의 대안적인 유형은 계정 기반 트랜잭션 모델의 일부로 "계정 기반" 프로토콜로 지칭될 수 있다. 계정 기반의 경우, 각 트랜잭션은 과거 트랜잭션의 시퀀스에서 선행 트랜잭션의 UTXO를 뒤로 참조하여 전달할 금액을 정의하지 않고, 절대 계정 잔액을 참조한다. 모든 계정의 현재 상태는 블록체인과 별도로 채굴자에 의해 저장되며 지속적으로 갱신된다. 이러한 시스템에서, 트랜잭션은 계정의 실행 중인 트랜잭션 집계("포지션"이라고도 함)를 사용하여 정렬된다. 이 값은 암호화 서명의 일부로 발신인이 서명하고 트랜잭션 참조 계산의 일부로 해시된다. 또한, 선택적 데이터 필드가 또한 트랜잭션 내에 서명될 수도 있다. 이 데이터 필드는 예를 들어 선행 트랜잭션 ID가 데이터 필드에 포함된 경우 선행 트랜잭션을 뒤로 가리킬 수 있다.
트랜잭션 프로토콜의 어느 유형이든, 사용자(103)가 새로운 트랜잭션(152j)을 시행하기를 원할 때, 그/그녀는 자신의 컴퓨터 단말(102)에서 P2P 네트워크(106)의 노드(104) 중 하나(최근에는 일반적으로 서버 또는 데이터 센터, 그러나 원칙적으로 다른 사용자 단말이 될 수 있음)로 새로운 트랜잭션을 보낸다. 이 노드(104)는 각 노드(104)에 적용되는 노드 프로토콜에 따라 트랜잭션이 유효한지 확인한다. 노드 프로토콜의 세부사항은 해당 블록체인(150)에서 사용되는 트랜잭션 프로토콜의 유형에 대응하며, 함께 전체 트랜잭션 모델을 형성한다. 노드 프로토콜은 일반적으로 노드(104)가 새로운 트랜잭션(152j)의 암호화 서명이 예상되는 서명과 일치하는지 확인하도록 요구하며, 이는 트랜잭션(152)의 정렬된 시퀀스에서 이전 트랜잭션(152i)에 의존한다. 출력 기반의 경우에, 이는 새로운 트랜잭션(152j)의 입력에 포함된 사용자의 암호화 서명이 새로운 트랜잭션이 지출하는 선행 트랜잭션(152i)의 출력에 정의된 조건과 일치하는지 확인하는 것을 포함하며, 여기에서 이 조건은 일반적으로 적어도 새로운 트랜잭션(152j)의 입력 내의 암호화 서명이 새로운 트랜잭션의 입력이 가리키는 이전 트랜잭션(152i)의 출력을 잠금 해제하는지 확인하는 것을 포함한다. 일부 트랜잭션 프로토콜에서 조건은 입력 및/또는 출력에 포함된 사용자 정의 스크립트에 의해 적어도 부분적으로 정의될 수 있다. 대안적으로 단순히 노드 프로토콜만으로 고정되거나, 이들의 조합으로 인한 것일 수 있다. 어느 쪽이든, 새로운 트랜잭션(152j)이 유효하면, 현재 노드는 이를 P2P 네트워크(106)의 하나 이상의 다른 노드(104)로 전달한다. 이러한 노드(104) 중 적어도 일부는 또한 전달 노드(104F)의 역할을 하여, 동일한 노드 프로토콜에 따른 동일한 테스트를 적용하고, 새로운 트랜잭션(152j)을 하나 이상의 추가 노드(104)로 전달하며, 이와 같이 계속된다. 이러한 방식으로 새로운 트랜잭션은 노드(104)의 네트워크 전체에 전파된다.
출력 기반 모델에서, 주어진 출력(예를 들어, UTXO)의 지출 여부에 대한 정의는 노드 프로토콜에 따라 다른 앞의 트랜잭션(152j)의 입력에 의해 유효하게 리딤되었는지의 여부이다. 트랜잭션이 유효하기 위한 다른 조건은 지출 또는 리딤을 시도하는 선행 트랜잭션(152i)의 출력이 다른 유효한 트랜잭션에 의해 이미 지출/리딤되지 않은 것이다. 유효하지 않은 경우에는, 트랜잭션(152j)은 블록체인에 전파되거나 기록되지 않는다. 이는 지출자가 동일한 트랜잭션의 출력을 두 번 이상 사용하고자 시도하는 이중 지출을 방지한다. 반면 계정 기반 모델은 계정 잔액을 유지하여 이중 지출을 방지한다. 트랜잭션의 정의된 순서가 있기 때문에, 계정 잔액은 임의의 일 시간에 단일의 정의된 상태를 갖는다.
유효성 검증에 추가하여, 노드(104M) 중 적어도 일부는 "작업 증명"에 의해 뒷받침되는 채굴로 알려진 프로세스에서 트랜잭션 블록을 최초로 생성하기 위해 경쟁한다. 채굴 노드(104M)에서, 아직 블록에 나타나지 않은 유효한 트랜잭션의 풀에 새로운 트랜잭션이 추가된다. 그런 다음 채굴자는 암호화 퍼즐을 풀고자 시도함으로써 트랜잭션의 풀(154)로부터 트랜잭션(152)의 새로운 유효한 블록(151)을 조립하기 위해 경쟁한다. 일반적으로 이것은 논스(nonce)가 트랜잭션(154)의 풀과 연결되고 해시될 때 해시의 출력이 미리 결정된 조건을 충족하도록 "논스" 값을 검색하는 것을 포함한다. 예를 들어 사전 결정된 조건은 해시의 출력이 사전 정의된 특정 수의 선행 0을 갖는 것일 수 있다. 해시 함수의 속성은 그 입력에 대해 예측할 수 없는 출력을 갖는다는 것이다. 따라서 이 검색은 무차별 대입에 의해서만 수행될 수 있으므로, 퍼즐을 풀고자 하는 각 노드(104M)에서 상당한 양의 처리 자원을 소비한다.
퍼즐을 풀고자 하는 제1 채굴자 노드(104M)는 이를 네트워크(106)에 발표하고, 그 해(solution)를 증명으로 제공하며, 이는 네트워크의 다른 노드(104)가 쉽게 확인할 수 있다(해시에 대한 해가 주어지면 해시의 출력이 조건을 충족하도록 하는지 확인하는 것은 간단하다). 승자가 퍼즐을 해결한 트랜잭션의 풀(154)은 각 노드에서 승자의 발표된 해를 확인한 것에 기초하여, 저장 노드(104S)의 역할을 하는 적어도 일부의 노드(104) 에 의해 블록체인(150)에 새로운 블록(151)으로 기록된다. 블록 포인터(155)가 또한 체인에서 이전에 생성된 블록(151n-1)을 뒤로 가리키는 새로운 블록(151n)에 할당된다. 새로운 블록(151)을 생성하는 데 많은 노력이 필요하고 이중 지출을 포함하는 블록은 다른 노드(104)에 의해 거부될 가능성이 높기 때문에, 채굴 노드(104M)는 이중 지출이 블록에 포함되는 것을 허용하지 않도록 장려되어 작업 증명은 이중 지출의 위험을 줄이는 데 도움이 된다. 일단 생성되면, 블록(151)은 동일한 프로토콜에 따라 P2P 네트워크(106)의 저장 노드(104S) 각각에서 인식되고 유지되기 때문에 수정될 수 없다. 블록 포인터(155)는 또한 블록(151)에 순차적인 순서를 부과한다. 트랜잭션(152)은 P2P 네트워크(106)의 각 저장 노드(104S)에서 순서화된 블록에 기록되기 때문에, 이는 따라서 트랜잭션의 불변 공개 원장을 제공한다.
해의 검색을 시작한 시기에 따라, 주어진 시간에 퍼즐을 풀기 위해 경쟁하는 다른 채굴자(104M)가, 주어진 시간에 채굴되지 않은 트랜잭션 풀(154)의 다른 스냅샷에 기초하여 그렇게 할 수 있다는 점에 유의한다. 각자의 퍼즐을 먼저 푸는 사람이 다음의 새로운 블록(151n)에 포함되는 트랜잭션(152)을 정의하고, 채굴되지 않은 트랜잭션의 현재 풀(154)이 갱신된다. 그런 다음 채굴자(104M)는 새로 정의된 미해결 풀(154)로부터 블록을 생성하기 위해 계속 경쟁하며, 이와 같이 계속된다. 두 채굴자(104M)가 매우 짧은 시간 내에 퍼즐을 해결하여 블록체인에 대한 상충되는 뷰(view)가 전파되는 것인 "포크(fork)"가 발생하는 것을 해결하기 위한 프로토콜 또한 존재한다. 요컨대, 포크의 갈래가 가장 길게 자라는 것이 최종 블록체인(150)이 된다.
대부분의 블록체인에서, 승리한 채굴자(104M)는 새로운 양의 디지털 자산을 어디에선지 모르게 생성하는(한 사용자로부터 다른 사용자에게 디지털 자산의 금액을 전달하는 일반 트랜잭션과 반대) 특별한 종류의 새로운 트랜잭션으로 자동 보상을 받는다. 따라서 승리한 노드는 디지털 자산의 양을 "채굴"했다고 한다. 이 특별한 유형의 트랜잭션은 때때로 "생성(generation)" 트랜잭션으로 지칭된다. 이는 새로운 블록(151n)의 일부를 자동으로 형성한다. 이 보상은 채굴자(104M)가 작업 증명 경쟁에 참여하는 인센티브를 제공한다. 종종 일반(비생성) 트랜잭션(152) 또한 해당 트랜잭션이 포함된 블록(151n)을 생성한 우승 채굴자(104M)에게 추가로 보상하기 위해, 그 출력 중 하나에 추가 트랜잭션 수수료를 지정할 것이다.
채굴과 관련된 계산 자원으로 인해, 일반적으로 적어도 각 채굴자 노드(104M)는 하나 이상의 물리적 서버 유닛, 또는 심지어 전체 데이터 센터를 포함하는 서버의 형태를 취한다. 각 전달 노드(104M) 및/또는 저장 노드(104S) 또한 서버 또는 데이터 센터의 형태를 취할 수 있다. 그러나 원칙적으로 임의의 주어진 노드(104)는 함께 네트워크로 연결된 사용자 단말 또는 그룹의 형태를 취할 수 있다.
각 노드(104)의 메모리는 노드 프로토콜에 따라 각자의 역할을 수행하고 트랜잭션(152)을 처리하기 위해 노드(104)의 처리 장치에서 실행되도록 구성된 소프트웨어를 저장한다. 본원에서 노드(104)에 기인한 임의의 동작은 각자의 컴퓨터 장비의 처리 장치에서 실행되는 소프트웨어에 의해 수행될 수 있다는 것이 이해될 것이다. 또한, 본원에서 사용하는 "블록체인"이라는 용어는 일반적으로 기술의 종류를 지칭하는 총칭으로, 특정 독점 블록체인, 프로토콜 또는 서비스에 제한되지 않는다.
또한 네트워크(101)에는 소비 사용자의 역할을 하는 복수의 당사자(103) 각각의 컴퓨터 장비(102)가 연결되어 있다. 이들은 트랜잭션에서 지급인 및 수취인 역할을 하지만 다른 당사자를 대신하여 트랜잭션을 채굴하거나 전파하는 데 반드시 참여하는 것은 아니다. 그들은 반드시 채굴 프로토콜을 실행할 필요는 없다. 제1 당사자(103a) 및 그/그녀의 각각의 컴퓨터 장비(102a), 및 제2 당사자(103b) 및 그/그녀의 각각의 컴퓨터 장비(102b)인 두 당사자(103) 및 그들 각자의 장비(102)가 예시 목적으로 도시되어 있다. 더 많은 이러한 당사자(103) 및 그들 각자의 컴퓨터 장비(102)가 존재하고 시스템에 참여할 수 있지만, 편의상 그것들은 도시되지 않았다는 것이 이해될 것이다. 각 당사자(103)는 개인 또는 조직일 수 있다. 순전히 예시로서 제1 당사자(103a)는 본원에서 앨리스(Alice)로 지칭되고 제2 당사자(103b)는 밥(Bob)으로 지칭되지만, 이것이 제한적이지 않고 앨리스 또는 밥에 대한 본원에서의 임의의 언급은 각각 "제1 당사자" 및 "제2 당사자"로 대체될 수 있음을 이해할 것이다.
각 당사자(103)의 컴퓨터 장비(102)는 하나 이상의 프로세서, 예를 들어, 하나 이상의 CPU, GPU, 기타 가속기 프로세서, 애플리케이션 특정 프로세서 및/또는 FPGA를 포함하는 각자의 처리 장치를 포함한다. 각 당사자(103)의 컴퓨터 장비(102)는 메모리, 즉 비일시적 컴퓨터 판독 가능 매체 형태의 컴퓨터 판독 가능 스토리지(storage)를 더 포함한다. 이 메모리는 하나 이상의 메모리 매체, 예를 들어, 하드 디스크와 같은 자기 매체; SSD, 플래시 메모리 또는 EEPROM과 같은 전자 매체; 및/또는 광 디스크 드라이브와 같은 광 매체를 사용하는 하나 이상의 메모리 유닛을 포함할 수 있다. 각 당사자(103)의 컴퓨터 장비(102) 상의 메모리는 처리 장치 상에서 실행되도록 배열된 적어도 하나의 클라이언트 애플리케이션(105)의 각자의 인스턴스를 포함하는 소프트웨어를 저장한다. 본원에서 주어진 당사자(103)에 기인한 임의의 동작은 각자의 컴퓨터 장비(102)의 처리 장치에서 실행되는 소프트웨어를 사용하여 수행될 수 있다는 것을 이해할 것이다. 각 당사자(103)의 컴퓨터 장비(102)는 적어도 하나 사용자 단말, 예를 들어 데스크탑 또는 랩탑 컴퓨터, 태블릿, 스마트폰, 또는 스마트워치와 같은 웨어러블 장치를 포함한다. 주어진 당사자(103)의 컴퓨터 장비(102)는 또한 사용자 단말을 통해 접근되는 클라우드 컴퓨팅 자원과 같은 하나 이상의 다른 네트워크 자원을 포함할 수 있다.
클라이언트 애플리케이션 또는 소프트웨어(105)는 임의의 주어진 당사자(103)의 컴퓨터 장비(102)에 적절한 컴퓨터 판독 가능 저장 매체 상에, 예를 들어 서버로부터 다운로드하거나, 또는 이동식 SSD, 플래시 메모리 키, 이동식 EEPROM, 이동식 자기 디스크 드라이브, 자기 플로피 디스크 또는 테이프, CD 또는 DVD ROM과 같은 광 디스크 또는 이동식 광 드라이브 등과 같은 이동식 저장 장치에 제공되어 초기에 제공될 수 있다.
클라이언트 애플리케이션(105)은 적어도 "지갑" 기능을 포함한다. 여기에는 두 가지 주요 기능이 있다. 이들 중 하나는 각 사용자 당사자(103)가 노드(104)의 네트워크 전체에 전파되어 블록체인(150)에 포함될 트랜잭션(152)을 생성, 서명 및 전송할 수 있게 하는 것이다. 다른 하나는 각각의 당사자에게 현재 소유하고 있는 디지털 자산의 금액을 다시 보고하는 것이다. 출력 기반 시스템에서, 이 제2 기능은 블록체인(150) 전체에 흩어져 있는 해당 당사자에 속하는 다양한 트랜잭션(152)의 출력에 정의된 금액을 대조하는 것을 포함한다.
각 컴퓨터 장비(102) 상의 클라이언트 애플리케이션(105)의 인스턴스는 P2P 네트워크(106)의 전달 노드(104F) 중 적어도 하나에 동작 가능하게 연결된다. 이는 클라이언트(105)의 지갑 기능이 트랜잭션(152)을 네트워크(106)로 전송할 수 있게 한다. 클라이언트(105)는 또한 각각의 당사자(103)가 수령인인 임의의 트랜잭션에 대해 블록체인(150)에 질의하기 위해(또는 실제로 블록체인(150)에서 다른 당사자의 트랜잭션을 검사하기 위해, 실시예에서 블록체인(150)은 그 공개 가시성을 통해 부분적으로 트랜잭션에 대한 신뢰를 제공하는 공공 시설이므로) 저장 노드(104) 중 하나, 일부 또는 전부에 접촉할 수 있다. 각 컴퓨터 장비(102) 상의 지갑 기능은 트랜잭션 프로토콜에 따라 트랜잭션(152)을 공식화(formulate) 하고 전송하도록 구성된다. 각 노드(104)는 노드 프로토콜에 따라 트랜잭션(152)을 유효성 검증하도록 구성된 소프트웨어를 실행하고, 전달 노드(104F)의 경우 네트워크(106) 전체에 전파하기 위해 트랜잭션(152)을 전달한다. 트랜잭션 프로토콜과 노드 프로토콜은 서로 대응하며, 주어진 트랜잭션 프로토콜은 주어진 트랜잭션 모델을 함께 구현하는 주어진 노드 프로토콜을 따른다. 블록체인(150)의 모든 트랜잭션(152)에 대해 동일한 트랜잭션 프로토콜이 사용된다(그러나 트랜잭션 프로토콜은 내부에서 상이한 하위 유형의 트랜잭션을 허용할 수 있음). 동일한 노드 프로토콜이 네트워크(106)의 모든 노드(104)에 의해 사용된다(그러나 이는 해당 하위 유형에 대해 정의된 규칙에 따라 상이한 하위 유형의 트랜잭션을 상이하게 처리할 수 있으며, 또한 상이한 노드가 상이한 역할을 수행하여 프로토콜의 상이한 대응하는 양상을 구현할 수 있음).
언급된 바와 같이, 블록체인(150)은 블록(151)의 체인을 포함하고, 여기에서 각 블록(151)은 이전에 논의된 바와 같이 작업 증명 프로세스에 의해 생성된 하나 이상의 트랜잭션(152) 집합을 포함한다. 각 블록(151)은 또한 블록(151)에 대한 순차적인 순서를 정의하기 위해 체인에서 이전에 생성된 블록(151)을 뒤로 가리키는 블록 포인터(155)를 포함한다. 블록체인(150)은 또한 작업 증명 프로세스에 의해 새로운 블록에 포함되기를 기다리는 유효한 트랜잭션의 풀(154)을 포함한다. 각 트랜잭션(152)은 트랜잭션 시퀀스에 대한 순서를 정의하기 위해 이전 트랜잭션에 대한 포인터를 다시 포함한다(트랜잭션(152)의 시퀀스는 분기가 허용됨을 유의한다). 블록의 체인(151)은 체인의 첫 번째 블록인 제네시스(genesis) 블록(Gb)(153)까지 거슬러 올라간다. 체인(150) 초반의 하나 이상의 원래 트랜잭션(152)은 선행 트랜잭션이 아닌 제네시스 블록(153)을 가리킨다.
주어진 당사자(103), 예를 들어 앨리스가 블록체인(150)에 포함될 새로운 트랜잭션(152j)을 전송하기를 원할 때, 그녀는 (자신의 클라이언트 애플리케이션(105)에서 지갑 기능을 사용하여) 관련 트랜잭션 프로토콜에 따라 새로운 트랜잭션을 공식화한다. 그런 다음 그녀는 클라이언트 애플리케이션(105)으로부터 자신이 연결된 하나 이상의 전달 노드(104F) 중 하나로 트랜잭션(152)을 전송한다. 예를 들어 이는 앨리스의 컴퓨터(102)에 가장 가깝거나 가장 잘 연결된 전달 노드(104F)일 수 있다. 임의의 주어진 노드(104)가 새로운 트랜잭션(152j)을 수신할 때, 노드 프로토콜 및 각자의 역할에 따라 이를 처리한다. 이는 새로 수신된 트랜잭션(152j)이 "유효하기" 위한 특정 조건을 충족하는지 여부를 먼저 확인하는 것을 포함하며, 그 예는 곧 더 자세히 논의될 것이다. 일부 트랜잭션 프로토콜에서, 유효성 검증을 위한 조건은 트랜잭션(152)에 포함된 스크립트에 의해 트랜잭션별로 구성할 수 있다. 대안적으로 조건은 단순히 노드 프로토콜의 내장 기능이거나, 스크립트 및 노드 프로토콜의 조합으로 정의될 수 있다.
새로 수신된 트랜잭션(152j)이 유효한 것으로 간주되는 테스트를 통과한 경우(즉, "유효성 검증된" 조건에서), 트랜잭션(152j)을 수신하는 임의의 저장 노드(104S)는 새로운 유효성 검증된 트랜잭션(152)을 해당 노드(104S)에서 유지되는 블록체인(150)의 사본 내의 풀(154)에 추가할 것이다. 또한, 트랜잭션(152j)을 수신하는 임의의 전달 노드(104F)는 유효성 검증된 트랜잭션(152)을 P2P 네트워크(106)의 하나 이상의 다른 노드(104)로 전파할 것이다. 각 전달 노드(104F)가 동일한 프로토콜을 적용하기 때문에, 트랜잭션(152j)이 유효하다고 가정하면, 이는 곧 전체 P2P 네트워크(106)에 전파될 것임을 의미한다.
하나 이상의 저장 노드(104)에서 유지되는 블록체인(150)의 사본에서 풀(154)에 일단 승인되면, 채굴자 노드(104M)는 새로운 트랜잭션(152)을 포함하는 풀(154)의 최신 버전에서 작업 증명 퍼즐을 풀기 위해 경쟁하기 시작할 것이다(다른 채굴자(104M)가 풀(154)의 이전 뷰에 기초하여 퍼즐을 풀고자 여전히 시도할 수 있지만, 누구든 먼저 도달한 사람이 다음 새로운 블록(151)이 끝나고 새로운 풀(154)이 시작되는 위치를 정의할 것이며, 결국 누군가가 앨리스의 트랜잭션(152j)을 포함하는 풀(154)의 일부에 대한 퍼즐을 풀게 될 것이다). 새로운 트랜잭션(152j)을 포함하는 풀(154)에 대한 작업 증명이 완료되면, 이는 변경 불가능하게 블록체인(150) 내의 블록(151) 중 하나의 일부가 된다. 각 트랜잭션(152)은 이전 트랜잭션에 대한 뒤로의 포인터를 포함하므로, 트랜잭션의 순서가 또한 변경 불가능하게 기록된다.
도 2는 예시적인 트랜잭션 프로토콜을 도시한다. 이는 UTXO 기반 프로토콜의 예이다. 트랜잭션(152)(약칭 "Tx")은 블록체인(150)의 기본 데이터 구조이다(각 블록(151)은 하나 이상의 트랜잭션(152)를 포함함). 다음은 출력 기반 또는 "UTXO" 기반 프로토콜을 참조하여 설명될 것이다. 그러나 이것은 모든 가능한 실시예로 제한되지 않는다.
UTXO 기반 모델에서, 각 트랜잭션("Tx")(152)은 하나 이상의 입력(202) 및 하나 이상의 출력(203)을 포함하는 데이터 구조를 포함한다. 각 출력(203)은 다른 새로운 트랜잭션의 입력(202)에 대한 출처로서 사용될 수 있는(UTXO가 아직 리딤되지 않은 경우), 미지출 트랜잭션 출력(UTXO)을 포함할 수 있다. UTXO는 디지털 자산(가치 저장소)의 금액을 지정한다. 이는 또한 다른 정보와 함께, 트랜잭션이 발생한 트랜잭션 ID를 포함할 수 있다. 트랜잭션 데이터 구조는 또한 입력 필드(들)(202) 및 출력 필드(들)(203)의 크기의 표시자를 포함할 수 있는 헤더(201)를 포함할 수 있다. 헤더(201)는 또한 트랜잭션의 ID를 포함할 수 있다. 실시예에서 트랜잭션 ID는 트랜잭션 데이터의 해시이고(트랜잭션 ID 자체는 제외) 채굴자(104M)에게 제출된 원시 트랜잭션(152)의 헤더(201)에 저장된다.
앨리스(103a)가 문제의 디지털 자산의 금액을 밥(103b)에게 전달하는 트랜잭션(152j)을 생성하기를 원한다고 하자. 도 2에서 앨리스의 새로운 트랜잭션(152j)은 "Tx1"로 라벨이 지정된다. 이는 시퀀스 내의 선행 트랜잭션(152i)의 출력(203)에서 앨리스에게 잠긴 디지털 자산의 금액을 취하고, 이 중 적어도 일부를 밥에게 전달한다. 선행 트랜잭션(152i)은 도 2에서 "Tx0"으로 라벨이 지정된다. Tx0 및 Tx1은 임의의 라벨일 뿐이다. Tx0이 블록체인(151)의 첫 번째 트랜잭션이거나, Tx1이 풀(154)의 바로 다음 트랜잭션이라는 것을 반드시 의미하지는 않는다. Tx1은 앨리스에게 잠긴 미지출 출력(203)을 여전히 갖고 있는 임의의 선행(즉, 앞선) 트랜잭션을 뒤로 가리킬 수 있다.
선행 트랜잭션 Tx0은 앨리스가 새로운 트랜잭션 Tx1을 생성할 때, 또는 적어도 그녀가 그것을 네트워크(106)에 전송할 때 이미 유효성 검증되어 블록체인(150)에 포함되어 있을 수 있다. 이는 그 시간에 이미 블록(151) 중 하나에 포함되었거나, 풀(154)에서 여전히 대기 중일 수 있으며, 이 경우 곧 새로운 블록(151)에 포함될 것이다. 대안적으로 Tx0 및 Tx1이 생성되어 네트워크(102)에 함께 전송되거나, 또는 노드 프로토콜이 "고아" 트랜잭션 버퍼링을 허용하는 경우 Tx0이 Tx1 이후에 전송될 수 있다. 트랜잭션의 시퀀스의 맥락에서 본원에서 사용되는 "선행" 및 "후속"이라는 용어는 (트랜잭션이 다른 트랜잭션을 뒤로 가리키고, 이와 같이 계속되는) 트랜잭션 내에 지정된 트랜잭션 포인터에 의해 정의된 시퀀스 내의 트랜잭션의 순서를 지칭한다. 이는 "선행자(predecessor)"와 "후행자(successor)", 또는 "앞선(antecedent)"과 "후위의(descendant)", "부모"와 "자식" 등으로 동등하게 대체될 수 있다. 이는 그것들이 생성되고, 네트워크(106)로 전송되거나, 임의의 주어진 노드(104)에 도달하는 순서를 반드시 의미하지는 않는다. 그럼에도 불구하고, 선행 트랜잭션(앞선 트랜잭션 또는 "부모")을 가리키는 후속 트랜잭션(후위의 트랜잭션 또는 "자식")은 부모 트랜잭션이 유효성 검증될 때까지 그리고 유효성 검증되지 않는 한 유효성 검증되지 않는다. 부모보다 먼저 노드(104)에 도착하는 자식은 고아로 간주된다. 이는 노드 프로토콜 및/또는 채굴자 행위에 따라 삭제되거나 부모를 기다리기 위해 특정 시간 동안 버퍼링될 수 있다.
선행 트랜잭션 Tx0의 하나 이상의 출력(203) 중 하나는, 본원에서 UTXO0으로 라벨이 지정되는 특정 UTXO를 포함한다. 각 UTXO는 UTXO가 나타내는 디지털 자산의 금액을 지정하는 값과 후속 트랜잭션이 유효성 검증되고 따라서 UTXO가 성공적으로 리딤되기 위하여 후속 트랜잭션의 입력(202)에서 잠금 해제 스크립트가 만족해야 하는 조건을 정의하는 잠금 스크립트를 포함한다. 일반적으로 잠금 스크립트는 특정 당사자(그것이 포함된 트랜잭션의 수혜자)에게 금액을 잠근다. 즉, 잠금 스크립트는, 일반적으로 후속 트랜잭션의 입력 내의 잠금 해제 스크립트가 선행 트랜잭션이 잠겨 있는 당사자의 암호화 서명을 포함하는 조건을 포함하는 잠금 해제 조건을 정의한다.
잠금 스크립트(일명 scriptPubKey)는 노드 프로토콜에 의해 인식되는 도메인 특정 언어로 작성된 코드이다. 이러한 언어의 특정 예를 "스크립트(Script)"(대문자 S)라고 한다. 잠금 스크립트는 트랜잭션 출력(203)을 사용하는 데 필요한 정보, 예를 들어 앨리스의 서명의 요구 사항을 지정한다. 잠금 해제 스크립트는 트랜잭션 출력에 나타난다. 잠금 해제 스크립트(일명 scriptSig)는 잠금 스크립트 기준을 충족하는 데 필요한 정보를 제공하는 도메인 특정 언어로 작성된 코드이다. 예를 들어, 이는 밥의 서명을 포함할 수 있다. 잠금 해제 스크립트는 트랜잭션의 입력(202)에 나타난다.
따라서 도시된 예에서, Tx0의 출력(203)에 있는 UTXO0은 UTXO0을 리딤하기 위해(엄밀히 말하자면, UTXO0을 리딤하고자 시도하는 후속 트랜잭션이 유효하기 위해) 앨리스의 서명 Sig PA를 요구하는 잠금 스크립트 [Checksig PA]를 포함한다. [Checksig PA]는 앨리스의 공개-개인 키 쌍의 공개 키 PA를 포함한다. Tx1의 입력(202)은 Tx1을 뒤로 가리키는 포인터를 포함한다(예를 들어, 실시예에서 전체 트랜잭션 Tx0의 해시인 트랜잭션 ID TxID0에 의해). Tx1의 입력(202)은 Tx0의 다른 가능한 출력들 사이에서 이를 식별하기 위해 Tx0 내에서 UTXO0을 식별하는 색인을 포함한다. Tx1의 입력(202)은 앨리스의 암호화 서명을 포함하는 잠금 해제 스크립트 <Sig PA>를 더 포함하며, 이는 앨리스가 키 쌍으로부터 자신의 개인 키를 데이터의 미리 정의된 부분(때때로 암호화에서 "메시지"라고 함)에 적용하여 생성된다. 유효한 서명을 제공하기 위해 앨리스가 서명해야 하는 데이터(또는 "메시지")는 잠금 스크립트, 노드 프로토콜 또는 이들의 조합에 의해 정의될 수 있다.
새로운 트랜잭션 Tx1이 노드(104)에 도달하면, 노드는 노드 프로토콜을 적용한다. 이는 잠금 스크립트와 잠금 해제 스크립트를 함께 실행하여 잠금 해제 스크립트가 잠금 스크립트에 정의된 조건(이 조건은 하나 이상의 기준을 포함할 수 있음)을 만족하는지 여부를 확인하는 것을 포함한다. 실시예에서 이것은 두 개의 스크립트를 연결하는 것을 포함한다:
<Sig P A > <P A > || [Checksig P A ]
여기에서 "||"는 연결을 나타내고 "<...>"는 데이터를 스택에 배치하는 것을 의미하고, "[…]"는 잠금 해제 스크립트(이 예에서는 스택 기반 언어)로 구성된 함수이다. 스크립트를 연결하는 대신, 동등하게 스크립트는 공통 스택을 사용하여 차례로 실행될 수 있다. 어느 쪽이든, 함께 실행될 때, 스크립트는 Tx0의 출력에 있는 잠금 스크립트에 포함된 앨리스의 공개 키 PA를 사용하여 Tx1의 입력에 있는 잠금 스크립트에 예상되는 데이터 부분에 서명하는 앨리스의 서명이 포함되어 있는지 인증한다. 이 인증을 수행하기 위하여 예상되는 데이터 부분 자체("메시지") 또한 Tx0에 포함되어야 한다. 실시예에서 서명된 데이터는 Tx0의 전체를 포함한다(따라서 데이터의 서명된 부분을 지정하는 별도의 요소는 책임 없이 포함되어야 하는데, 이미 본질적으로 존재하기 때문이다).
공개-개인 암호화에 의한 인증의 세부 사항은 당업자에게 친숙할 것이다. 기본적으로, 앨리스가 자신의 개인 키로 메시지를 암호화하여 메시지에 서명한 경우, 앨리스의 공개 키와 일반 메시지(암호화되지 않은 메시지)가 주어지면, 노드(104)와 같은 다른 엔티티는 암호화된 버전의 메시지가 앨리스가 서명한 것이라고 인증할 수 있다. 서명은 일반적으로 메시지를 해시하고, 해시에 서명하고, 이를 메시지의 일반 버전에 서명으로 태그를 지정하여, 공개 키 소유자가 서명을 인증할 수 있도록 하는 것을 포함한다.
Tx1의 잠금 해제 스크립트가 Tx0의 잠금 스크립트에 지정된 하나 이상의 조건을 충족하는 경우(따라서 표시된 예에서 앨리스의 서명이 Tx1에 제공되고 인증된 경우), 노드(104)는 Tx1이 유효한 것으로 간주한다. 그것이 저장 노드(104S)라면, 이는 작업 증명을 기다리는 트랜잭션의 풀(154)에 추가할 것임을 의미한다. 그것이 전달 노드(104F)라면, 트랜잭션 Tx1을 네트워크(106)의 하나 이상의 다른 노드(104)로 전달하여, 네트워크를 통해 전파될 것이다. Tx1이 유효성 검증되고 블록체인(150)에 포함되면, Tx0의 UTXO0이 지출된 것으로 정의된다. Tx1은 미지출 트랜잭션 출력(203)을 지출하는 경우에만 유효할 수 있음을 유의한다. 다른 트랜잭션(152)에서 이미 지출한 출력을 지출하려고 시도하는 경우, 다른 모든 조건이 충족되더라도 Tx1은 유효하지 않다. 따라서 노드(104)는 또한 선행 트랜잭션 Tx0에서 참조된 UTXO가 이미 지출되었는지(다른 유효한 트랜잭션에 대한 유효한 입력을 이미 형성했는지) 확인할 필요가 있다. 이것이 블록체인(150)이 트랜잭션(152)에 정의된 순서를 부과하는 것이 중요한 이유 중 하나이다. 실제로 주어진 노드(104)는 트랜잭션(152)이 지출된 UTXO(203)를 표시하는 별도의 데이터베이스를 유지할 수 있지만, 궁극적으로 UTXO가 지출되었는지 여부를 결정하는 것은 블록체인(150) 내의 다른 유효한 트랜잭션에 대한 유효한 입력을 이미 형성했는지의 여부이다.
UTXO 기반 트랜잭션 모델에서, 주어진 UTXO는 전체로서 지출되어야 한다는 점을 유의한다. UTXO에 정의된 금액의 일부가 지출되는 한편 다른 일부가 지출되도록 "뒤에 남겨둘" 수 없다. 그러나 UTXO의 금액은 다음 트랜잭션의 다수의 출력 사이에 분할될 수 있다. 예를 들어 Tx0의 UTXO0에 정의된 금액은 Tx1의 다수의 UTXO 사이에 분할될 수 있다. 따라서 앨리스가 UTXO0에 정의된 모든 금액을 밥에게 주기를 원하지 않으면, 나머지를 사용하여 Tx1의 제2 출력에서 자신에게 잔돈을 주거나, 다른 당사자에게 지불할 수 있다.
실제로 앨리스는 또한 일반적으로 승리한 채굴자에 대한 수수료를 포함해야 하는데, 왜냐하면 최근에는 생성 트랜잭션의 보상만으로는 일반적으로 채굴 동기를 부여하기에 충분하지 않기 때문이다. 앨리스가 채굴자에 대한 수수료를 포함하지 않으면, Tx0은 채굴자 노드(104M)에 의해 거부될 가능성이 있으므로, 기술적으로 유효하지만, 여전히 전파되지 않고 블록체인(150)에 포함되지 않는다(채굴자 프로토콜은 채굴자(104M)가 원하지 않는 경우 트랜잭션(152)을 수락하도록 강요하지 않는다). 일부 프로토콜에서, 채굴 수수료는 그 자체의 별도 출력(203)을 필요로 하지 않는다(즉, 별도의 UTXO가 필요하지 않음). 대신 주어진 트랜잭션(152)의 입력(들)(202)이 가리키는 총 금액과 출력(들)(203)에 지정된 총 금액 사이의 임의의 차이가 자동으로 승리한 채굴자(104)에게 제공된다. 예를 들어, UTXO0에 대한 포인터가 Tx1에 대한 유일한 입력이고 Tx1에는 하나의 출력 UTXO1만 있다고 가정한다. UTXO0에 지정된 디지털 자산의 금액이 UTXO1에 지정된 금액보다 크면, 차액은 자동으로 승리한 채굴자(104M)에게 넘어간다. 그러나 대안적으로 또는 추가적으로, 채굴자 수수료가 트랜잭션(152)의 UTXO(203) 중 그 자체의 UTXO 중 하나에 명시적으로 지정될 수 있다는 것이 반드시 배제되는 것은 아니다.
주어진 트랜잭션(152)의 모든 출력(203)에 지정된 총 금액이 모든 입력(202)이 가리키는 총 금액보다 큰 경우, 이는 대부분의 트랜잭션 모델에서 무효에 대한 다른 근거가 된다는 점을 또한 유의한다. 따라서 이러한 트랜잭션은 전파되거나 블록(151)으로 채굴되지 않는다.
앨리스와 밥의 디지털 자산은 블록체인(150)의 임의의 위치의 임의의 트랜잭션(152)에 잠겨 있는 미지출 UTXO로 구성된다. 따라서 일반적으로, 주어진 당사자(103)의 자산은 블록체인(150) 전체에 걸쳐 다양한 트랜잭션(152)의 UTXO에 걸쳐 흩어져 있다. 주어진 당사자(103)의 총 잔액을 정의하는 블록체인(150)의 어떤 곳에 저장된 하나의 숫자는 없다. 클라이언트 애플리케이션(105)에서 지갑 기능의 역할은 각 당사자에게 잠겨 있으며 다른 전방 트랜잭션에서 아직 지출되지 않은 모든 다양한 UTXO의 값을 함께 대조하는 것이다. 이는 저장 노드(104S) 중 임의의 것, 예를 들어, 각 당사자의 컴퓨터 장비(102)에 가장 가깝거나 가장 잘 연결된 저장 노드(104S) 에 저장된 블록체인(150)의 사본을 질의함으로써 이를 수행할 수 있다.
스크립트 코드는 종종 도식적으로 표현됨(즉, 정확한 언어가 아님)을 유의한다. 예를 들어, [Checksig PA]를 작성하여 [Checksig PA] = OP_DUP OP_HASH160 <Pa> OP_EQUALVERIFY OP_CHECKSIG를 의미할 수 있다. "OP_..."는 스크립트 언어의 특정 작업코드(opcode)를 나타낸다. OP_CHECKSIG("Checksig"라고도 함)는 두 개의 입력(서명 및 공개 키)을 사용하고 타원 곡선 디지털 서명 알고리즘(ECDSA)을 사용하여 서명의 유효성을 검증하는 스크립트 작업코드이다. 런타임에서, 임의의 서명('sig')의 발생은 스크립트에서 제거되지만 해시 퍼즐과 같은 추가 요구 사항은 'sig' 입력으로 검증된 트랜잭션에 남아 있다. 다른 예로서, OP_RETURN은 트랜잭션 내에 메타데이터를 저장할 수 있는 트랜잭션의 지출 불가능한 출력을 생성하기 위한 스크립트 언어의 작업코드이며, 이에 따라 메타데이터를 블록체인(150)에 불변으로 기록할 수 있다. 메타데이터는 블록체인에 저장하려는 문서를 포함할 수 있다.
서명 PA는 디지털 서명이다. 실시예에서 이것은 타원 곡선 secp256k1을 사용하는 ECDSA에 기초한다. 디지털 서명은 특정 데이터 조각에 서명한다. 실시예에서, 주어진 트랜잭션에 대해 서명은 트랜잭션 입력의 일부와 트랜잭션 출력의 전부 또는 일부에 서명할 것이다. 서명하는 출력의 특정 부분은 SIGHASH 플래그에 따라 다르다. SIGHASH 플래그는 서명된 출력을 선택하기 위해 서명 끝에 포함된 4바이트 코드이다(따라서 서명 시에 고정된다).
잠금 스크립트는 해당 트랜잭션이 잠겨 있는 당사자의 공개 키를 포함한다는 사실을 지칭하여 "scriptPubKey"라고도 한다. 잠금 해제 스크립트는 대응하는 서명을 제공한다는 사실을 지칭하여 "scriptSig"라고도 한다. 그러나, 더 일반적으로 UTXO가 리딤되기 위한 조건이 서명 인증을 포함하는 것이 블록체인(150)의 모든 애플리케이션에서 필수적인 것은 아니다. 더 일반적으로 스크립팅 언어는 하나 이상의 조건을 정의하는 데 사용할 수 있다. 따라서 보다 일반적인 용어 "잠금 스크립트" 및 "잠금 해제 스크립트"가 선호될 수 있다.
도 3은 블록체인(150)을 구현하기 위한 시스템(100)을 도시한다. 시스템(100)은 추가 기능을 포함한다는 점을 제외하고는 도 1과 관련하여 설명된 것과 실질적으로 동일하다. 네트워크의 하나 이상의 노드(104)는 블록체인(150)의 블록(151)에 기록될 대상 트랜잭션(target transaction)(152)의 세컨더리 트랜잭션 식별자(secondary transaction identifier)를 생성하기 위한 소프트웨어(301)를 포함할 수 있다. 바람직하게는, 하나, 일부 또는 모든 채굴자(104M)가 상기 소프트웨어("채굴자 소프트웨어"로 지칭됨)를 포함할 수 있지만, 하나 이상의 당사자(예를 들어 앨리스 및/또는 밥)의 컴퓨터 장비가 상기 소프트웨어를 포함할 수 있다는 것이 배제되지 않는다.
도 3은 또한 하나 이상의 모듈을 포함할 수 있는 채굴자 소프트웨어의 블록도를 도시한다. 식별 모듈(302)은 대상 트랜잭션을 획득하도록 구성되며, 예를 들어 대상 트랜잭션은 네트워크의 전달 노드(104F)로부터 수신될 수 있고, 그리고 대상 트랜잭션의 데이터 필드 집합을 식별하도록 구성될 수 있다. 집합의 각 데이터 필드는 대상 트랜잭션의 데이터를 포함한다. 예를 들어, 하나 이상의 데이터 필드는 지불 관련 데이터를 포함할 수 있다. 데이터 필드의 집합이 함께 전체 트랜잭션을 형성한다. 트랜잭션이 미디어 콘텐츠를 포함하는 경우, 하나 이상의 데이터 필드는 해당 미디어 콘텐츠의 일부 또는 전체를 포함할 수 있다. 트리 생성 모듈(303)은 데이터 필드의 집합을 사용하여 해시 트리를 생성하도록 구성된다. 데이터 필드의 집합은 해시 트리(예를 들어 머클 트리)를 생성하기 위해 알고리즘에 입력된다. 해시 트리는 루트 해시를 포함하며, 이는 다음 논의에서 대상 트랜잭션의 세컨더리 트랜잭션 식별자의 역할을 한다. 기록 모듈(304)은 블록(152)의 제1 트랜잭션 필드(생성 트랜잭션)에 세컨더리 트랜잭션 식별자(루트 해시)를 기록하도록 구성된다. 그런 다음, 블록은 블록체인에 기록된다.
세컨더리 트랜잭션 식별자는 질의하는 사용자가 전체 트랜잭션을 획득하거나 접근할 필요 없이, 대상 트랜잭션 내의 데이터 필드(본원에서 후보 데이터 필드로 지칭됨)의 존재를 확인할 수 있도록 한다. 예를 들어, 사용자(예를 들어 밥)의 클라이언트 애플리케이션(105)은 전체 트랜잭션을 획득하기에 충분한 능력을 갖지 않을 수 있다. 예를 들어, 밥은 전체 트랜잭션을 얻을 필요 없이 대상 트랜잭션이 미디어 콘텐츠(예를 들어 영화 클립)를 포함하는지 여부를 초기에 확인하기를 원할 수 있다. 다른 예로서, 채굴자는 트랜잭션의 다른 부분을 저장할 필요 없이 트랜잭션의 지불 부분을 확인하기를 원할 수 있다. 추가 예로서, 노드(예를 들어 채굴자 또는 저장 노드)는 트랜잭션을 프루닝(pruning)하기를 원할 수 있다. 여기에서, 프루닝은 트랜잭션의 적어도 일부를 원본 데이터의 해시로 대체하는 것을 의미한다. 그러나, 노드는 현재 "프루닝"된(즉, 해시로 대체된) 후보 데이터 필드(예를 들어 트랜잭션의 지출 가능한 출력)가 트랜잭션에 포함되어 있는지 질의하는 사용자에게 여전히 증명해야 할 수 있다.
대상 트랜잭션이 후보 데이터 필드를 포함하는지 확인하기 위하여, 질의하는 사용자(예를 들어 밥(103b))는 후보 데이터 필드(또는 그 해시), 대상 트랜잭션의 세컨더리 트랜잭션 식별자 및 인증 경로(또는 해시 경로)를 획득한다. 인증 경로는 해시 트리에서 가져온 해시 집합을 포함한다. 질의하는 사용자는 후보 데이터 필드의 해시와 인증 경로의 해시를 사용하여 해시 트리를 횡단하여(traverse) 후보 세컨더리 트랜잭션 식별자를 획득한다. 후보 세컨더리 트랜잭션 식별자가 획득된 세컨더리 트랜잭션 식별자와 일치하면, 트랜잭션이 후보 데이터 필드를 포함하며, 그 반대의 경우도 마찬가지이다. 다시 말하자면, 질의하는 사용자는 후보 데이터 필드가 세컨더리 트랜잭션 식별자로 표시되는 트랜잭션의 일부를 형성하는지 여부를 확인할 수 있다. 해시 트리를 횡단하는 데 전체 트랜잭션이 필요하지 않음을 유의한다. 후보 데이터 필드의 해시와 이후에 생성된 해시 값의 해시 파트너만이 요구된다. 이 과정은 도 5를 참조하여 아래에서 더 자세히 설명된다.
트랜잭션
상위 수준에서 트랜잭션 Tx는 입력 및 출력을 포함할 수 있는 메시지이며, 디지털 자산의 소유권을 제1 주소 집합에서 제2 주소 집합(제1 집합 내의 하나 이상의 주소를 포함하거나 포함하지 않을 수 있음)으로 이전한다.
하나의 특정 블록체인 프로토콜은 버전(version), txin_count, txin, txout_count, txout 및 잠금 시간(locktime) 중 하나 이상을 포함하는 필드가 있는 트랜잭션을 사용한다. 다른 프로토콜은 이러한 필드 중 일부를 포함하거나 전혀 포함하지 않는 트랜잭션을 사용할 수 있다. 본원에 공개된 기술은 임의의 블록체인 프로토콜에 적용된다. 아래에서 설명하는 필드는 예시로만 사용된다.
버전 필드는 프로토콜 규칙의 세트를 나타내는 정수(예를 들어 4바이트 정수)이며 트랜잭션의 생성자가 뒤따른다. txin_count 필드는 트랜잭션의 입력의 수를 지정하는 양의 정수(예를 들어 1바이트에서 9바이트 사이)이다.
txin 필드는 트랜잭션 입력의 배열이다. 각 입력은 다음과 같은 하위 필드 중 하나 이상을 포함한다: 아웃포인트(outpoint)-지출되는 UTXO에 대한 쌍(TxID,n)을 나타내는 구조로, txid_prev-지출되는 UTXO에 대한 트랜잭션 식별자 TxID(예를 들어 32바이트 문자열); vout-지출되는 UTXO에 대한 출력 인덱스(예를 들어 4바이트 정수) n; scriptSigLen-잠금 해제 스크립트의 최대 10,000바이트의 정수 길이(바이트); scriptSig-많은 개별 요소를 포함할 수 있는 잠금 해제 스크립트의 구조; 및 시퀀스(sequence)-트랜잭션의 현재 버전을 나타내는 정수(예를 들어 4바이트 정수)를 포함한다.
txout_count 필드는 트랜잭션의 출력의 수를 지정하는, 1바이트에서 9바이트 사이의 양의 정수이다. txout 필드는 트랜잭션 출력의 배열이다. 각 출력은 다음 하위 필드 중 하나 이상을 포함할 수 있다: 값(value)-출력 값을 나타내는 정수(예를 들어 8바이트 정수); scriptPubKeyLen-최대 10,000바이트인 잠금 스크립트의 정수 길이(바이트); scriptPubKey-많은 개별 요소를 포함할 수 있는 잠금 스크립트의 구조; 및 잠금 시간-트랜잭션이 블록에 포함될 수 있는 가장 빠른 시간을 나타내는 정수(예를 들어 4바이트 정수).
이 예시적인 프로토콜에서, 상당한 크기의 데이터를 포함할 수 있는 트랜잭션의 유일한 필드는 스크립트 필드, 즉 scriptSig 및 scriptPubKey이다. 따라서 이 두 필드는 대용량 데이터에 대한 경량 존재 증명 계산의 문제를 해결할 때 가장 중요하게 고려된다.
하나의 입력과 하나의 출력을 포함하는 트랜잭션의 예가 아래에 나타나 있으며, P와 H(P)는 각각 공개 키와 그 RIPEMD-160 해시를 나타낸다.
{
"version": 1,
"locktime": 0,
"txin_count": 1,
"vin": [
{
"txid_prev": "7957g8585g094508030923405gbb0500bgg04gss093",
"vout": 0,
"scriptSigLen": 4,
"scriptSig": {
"asm": "904389685hghg0304905jfjf0439058345jfjf03405...",
"hex": "837ff78336245908903573993409hghf09023843904..."
},
"sequence": 4294967295
}
],
"txout_count": 1,
"vout": [
{
"value": 0.01500000,
"scriptPubKeyLen": 4,
"scriptPubKey":{
"asm": "OP_DUP OP_HASH160 <
Figure pct00001
(
Figure pct00002
)> OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a859uf781923hfghg9491hdjd9391djjg9042jfjf49393459",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"1GdK9hPHb48JFMjfuie485jfkHFHnR",
]
}
]
}
질의하는 사용자는 트랜잭션의 버전을 확인하여 해당 트랜잭션(또는 블록의 모든 트랜잭션)이 동일한 버전이나 프로토콜을 사용하여 이루어졌는지 여부를 확인하고자 할 수 있다. 질의하는 사용자는 txin_count를 확인하여 예를 들어 연구 목적으로 블록체인 분석을 수행할 수 있다. 질의하는 사용자(예를 들어 채굴자)는 출력의 유효성(예를 들어 디지털 자산을 지출할 수 있는지)을 확인하기 위해 트랜잭션의 출력(들)을 확인하기만을 원할 수 있다.
트랜잭션은 트랜잭션 데이터의 해시 또는 이중 해시를 사용하여 고유하게 식별될 수 있다. 예를 들어, 트랜잭션은 그 SHA-256 이중 해시에 의해 식별될 수 있다. 트랜잭션 식별자 TxID는 예를 들어 주어진 트랜잭션 Tx의 함수로 다음과 같이 작성될 수 있다.
Figure pct00003
,
여기에서 H는 해시 함수(예를 들어 SHA-256 암호화 해시 함수)이다. 이러한 암호화 해시 함수의 충돌 방지(collision-resistant) 속성은 올바른 TxID를 생성하기 위하여 전체 트랜잭션 메시지 m=Tx가 필요하다는 것을 의미하는 것을 유의하여야 한다. 달리 말하자면, 대안적인 메시지 Tx'가 해시되면, Tx'≠Tx이면, 대안적인 식별자 TxID'가 생성된다.
생성 트랜잭션
블록의 첫 번째 트랜잭션은 채굴자가 채굴 인센티브를 회수할 수 있도록 하기 위해 사용되기 때문에 일반 트랜잭션에 비해 위에서 설명한 구조와 상이하다. 새로운 블록이 채굴될 때마다 새로운 디지털 자산이 생성되기 때문에 이를 또한 '생성(generation)' 트랜잭션이라고도 한다. 이는 블록 보상으로 알려져 있다. 생성 트랜잭션은 또한 채굴자가 블록의 다른 트랜잭션에 의해 결정된 총 트랜잭션 수수료를 청구할 수 있게 한다. 생성 트랜잭션은 txin-count 및 txin 필드에서만 일반 형식과 다르다. 생성 트랜잭션이 단일 입력을 포함하므로 txin_count 필드는 정수 '01'을 포함한다. txin 필드 자체는 다음과 같이 여러 하위 필드에서 비생성 트랜잭션과 다르다. 이 경우 UTXO가 지출되지 않기 때문에 아웃포인트의 하위 필드는 다음과 같다: txid_prev 이전 아웃포인트가 없음을 나타내는 null 값(모두 0, 예를 들어 32바이트의 0); 및 vout -이전 아웃포인트가 없음을 나타내는 값(예를 들어 0xffffffff). scriptSigLen 필드는 잠금 해제 스크립트의 정수 길이(바이트)로 최대 100바이트이다. '잠금 해제'할 UTXO가 없기 때문에, scriptSig 필드는 두 개의 필드로 구성된다: 높이(height) 필드-이 트랜잭션을 포함하는 블록의 (예를 들어 4바이트의) 블록 높이; 및 generation_script-최대 96바이트의 임의 데이터. 마지막 필드는 트랜잭션의 현재 버전을 나타내는 (예를 들어 4바이트의) 정수인 시퀀스(sequence) 필드이다.
생성 트랜잭션의 generation_script 필드는 사용자(예를 들어 채굴자)가 트랜잭션에 임의의 데이터를 포함하는 데 사용할 수 있다.
블록
블록은 트랜잭션 집합과 블록이 블록체인에 추가(채굴)되는 방법과 관련된 선택적 추가 필드를 포함하는 데이터 구조이다. 특정 블록체인 프로토콜의 블록 필드는 블록 헤더, txn_count 및 txns로 요약될 수 있다. 블록 헤더는 블록이 채굴된 방법과 시기, 블록에 포함된 내용에 대한 정보를 포함하는 구조이다. 이는 다음 6개의 하위 필드 중 하나 이상을 포함한다: 버전(version)-블록 유효성 검증에 사용되는 프로토콜 규칙의 세트를 나타내는 정수(예를 들어 4바이트 정수); prev_block-이전 블록 헤더의 이중 해시(예를 들어 32바이트 SHA-256); Merkle_root-트랜잭션의 머클 트리에서 유도된 이중 해시(예를 들어 32바이트 SHA-256); 타임스탬프(timestamp)-채굴자가 헤더를 생성한 Unix 시간을 인코딩하는 정수(예를 들어 4바이트 정수); nbits-블록을 채굴하는 데 필요한 목표 난이도를 인코딩하는 정수(예를 들어 4바이트 정수); 및 논스(nonce)-필요한 난이도의 블록 헤더 해시를 달성하기 위해 선택된 정수(예를 들어 4바이트 정수). txn_count 필드는 블록 내의 트랜잭션 수를 나타내는 가변 크기의 정수이다. txns 필드는 블록에 포함된 트랜잭션의 전체 목록에 대한 트랜잭션 데이터를 포함하는 구조이다. 이 목록의 제1 트랜잭션은 항상 생성 트랜잭션이고, 나머지는 위에서 설명한 일반 트랜잭션 구조를 따른다.
머클 트리(Merkle tree)
이진 해시 트리로도 알려져 있는, 머클 트리는 해시 트리의 특정 형태이다. 트리의 각 노드(원으로 표시됨)에는 인덱스 쌍(i,j)이 지정되고 N(i,j)로 표시된다. 인덱스 i,j는 트리에서의 특정 위치와 관련된 숫자 라벨이다. 머클 트리의 특징은 그것의 노드 각각의 구성이 다음 식에 의해 관리된다는 것이다:
Figure pct00004
여기에서 k=((i+j-1))/2이고 H는 암호화 해시 함수이다.
이러한 식에 따라 구성된 이진 해시 트리(400)가 도 4에 도시되어 있다. 도 4는 i=j 경우가 리프 노드(401)에 해당함을 나타내며, 이는 단순히 데이터 Di의 대응하는 제i 블록의 해시이다. i≠j 경우는 내부 노드(402) 또는 루트 노드(403)에 대응하며, 특정 노드 또는 루트에 도달할 때까지 트리의 자식 노드를 재귀적으로 해시 및 연결하여 생성된다. 해시 트리의 리프 노드는 또한 본원에서 리프 해시로도 지칭된다. 유사하게, 내부 노드와 루트 노드는 또한 내부 해시 또는 루트 해시로도 지칭된다.
머클 트리의 구성은 암호화 해시 함수의 사용을 필요로 한다. 일반적으로, 해시 함수는 다음의 속성을 갖는 경우 암호학적으로 안전한 것으로 간주된다.
1) 사전 이미지 저항성 - h=H(m)가 주어지면, m을 찾는 것은 계산적으로 어렵다.
2) 제2 사전 이미지 저항성 - h=H(m) 및 m이 주어지면, H(m')=h이 되는 m'을 찾는 것은 계산적으로 어렵다.
3) 충돌 저항성 - H(m)=H(m')이 되는 메시지 쌍 m 및 m'을 찾는 것은 계산적으로 어렵다.
트랜잭션의 프라이머리 트랜잭션 식별자(primary transaction identifier) TxID는 이러한 해시 함수를 사용하여 생성되므로, 식별자는 해시 함수의 다이제스트(digest) 속성을 상속한다. 해시 트리의 루트는 해시 트리 루트의 고유성이 기본 암호화 해시 함수의 고유성으로 축소될 수 있다는 점에서 TxID와 매우 유사한 속성을 가지고 있다. 이는 두 경우 모두 동일한 해시 함수를 사용하는 경우 데이터를 해시하여 생성된 식별자만큼 고유한 데이터에 대한 식별자로 루트를 사용할 수 있기 때문에 유용하다.
대부분의 애플리케이션에서 해시 트리의 주요 기능은 일부 데이터 블록 Di(404)가 N 데이터 블록 D∈{D1,…,DN}의 목록 또는 집합의 구성원이라는 증명을 용이하게 하는 것이다. 해시 트리 루트와 후보 데이터 블록 Di가 주어지면 이는 집합 내 블록의 '존재 증명(proof-of-existence)'으로 취급될 수 있다. 이러한 증명을 위한 메커니즘은 해시 트리 증명(또는 머클 트리에 대한 머클 증명)으로 알려져 있으며 주어진 데이터 블록 Di 및 루트 R에 대한 해시 또는 인증 경로(또는 머클 경로)로 알려진 해시 집합을 획득하는 것을 포함한다. 데이터 블록에 대한 인증 경로는 반복적인 해시 및 연결을 통해 루트 R을 재구성하는 데 필요한 최소 해시 목록이다. 모든 블록 D1,…,DN이 증명자에게 알려지면 존재 증명이 수행될 수 있다. 그러나 이는 인증 경로 자체보다 훨씬 더 큰 저장 오버헤드를 필요로 할 뿐만 아니라, 증명자가 전체 데이터 집합을 사용할 수 있어야 한다.
해시 트리는 데이터 필드 Di의 존재뿐만 아니라, 이것이 데이터 집합 D의 구성원임을 증명한다. 또한, 트랜잭션이 블록체인에 있을 때, 해시 트리는 데이터 필드 Di가 블록체인에 기록된 트랜잭션의 일부임을 증명한다..
도 5는 머클 경로를 사용한, 루트 R로 표현되는 트리 내의 데이터 블록 D1의 머클 존재 증명을 보여준다. 머클 루트 R이 주어지면, 다음과 같이 머클 증명을 수행하여 데이터 블록 D1이 R로 표현되는 집합 D∈{D1,…,DN}에 속함을 증명할 수 있다:
1) 신뢰할 수 있는 출처에서 머클 루트 R을 획득한다.
2) 출처에서 머클 경로 Γ를 획득한다. 이 경우, Γ는 해시의 집합이다:
Γ={N(2,2),N(3,4),N(5,8)}.
3) 다음과 같이 D1및 Γ를 사용하여 머클 증명을 계산한다:
a. 데이터 블록을 해시(또는 구현에 따라 이중 해시)하여 N(1,1)=H(D1)를 획득한다.
b. N(2,2)와 해시를 연결하여 N(1,2)=H(N(1,1)∥N(2,2))를 획득한다.
c. N(3,4)와 해시를 연결하여 N(1,4)=H(N(1,2)∥N(3,4))를 획득한다.
d. N(5,8)과 해시를 연결하여 루트를 획득한다:
N(1,8)=H(N(1,4)|N(5,8)),
R'=N(1,8).
e. 계산된 루트 R'를 (1)에서 획득한 루트 R과 비교한다.
I.R'=R이면, 트리, 따라서 데이터 집합 D 내에서 D1의 존재가 확인된다.
II.R'≠R이면 증명이 실패한 것이고 D1은 D의 구성원으로 확인되지 않는다.
이는 주어진 블록 D1 및 루트 R에 대해 머클 증명을 수행하는 것이 필요한 최소한의 해시 값만 사용하여 머클 트리를 '상향'으로 효과적으로 횡단(traverse)한다는 것을 보여준다. 이는 일부 데이터가 머클 트리와 그 루트로 표현되는 데이터 집합의 일부라는 존재 증명을 제공하기 위한 효율적인 메커니즘이다. 예를 들어, 데이터 D1이 블록체인 트랜잭션에 해당하고 루트 R이 블록 헤더의 일부로 공개적으로 사용 가능하면 트랜잭션이 해당 블록에 포함되었음을 빠르게 증명할 수 있다.
이하에서 튜플(tuple)(D,R,Γ)은 데이터 패킷 D가 루트 R에 의해 표현되는 집합 D의 일부라는 해시 트리 증명을 나타내는 데 사용된다.
트랜잭션 트리 생성 알고리즘
위에서 언급한 바와 같이, 본 개시는 해당 트랜잭션이, "후보 데이터 필드"로 지칭되는, 특정 데이터 조각을 포함하는지 여부를 결정하는데 사용하기 위한 트랜잭션의 세컨더리 트랜잭션 식별자(secondary transaction identifier)를 생성하는 방법을 제공한다. 대부분의 블록체인 프로토콜에서, 각 트랜잭션은 일반적으로 전체 트랜잭션을 해시(또는 이중 해시)하여 생성되는 프라이머리 트랜잭션 식별자(primary transaction identifier)와 연관되기 때문에, 세컨더리 트랜잭션 식별자라고 한다.
이 방법은 트랜잭션을 세컨더리 트랜잭션 식별자에 대응하는 해시 트리의 루트를 갖는 해시 트리, 예를 들어, 머클 트리의 리프로 사용될 수 있는 데이터 패킷(또는 데이터 필드) 집합으로 필드별로 분할하는 것을 포함한다. 여기에서, 분할은 트랜잭션의 데이터 필드를 식별하는 것과 같다. 달리 말하자면, 트랜잭션을 실제로 "분할"할 필요는 없다. 대신, 트랜잭션의 상이한 부분이 데이터 필드 집합의 상이한 부분으로 식별(예를 들어 할당)될 수 있다. 세컨더리 트랜잭션 식별자는 주어진 트랜잭션에 고유하다(예를 들어 주어진 트랜잭션의 고유한 256비트 숫자 표현(해시 값)). 이 해시 값은 전체 집합(즉, 전체 트랜잭션)을 획득하지 않고 개별 필드가 해시 트리의 유효한 리프인지 여부를 확인하는 데 사용할 수 있다.
트랜잭션 Tx가 주어지면, 그것이 블록체인으로 채굴되었는지 검증하는 한 가지 방법은 그 대응하는 TxID(프라이머리 트랜잭션 식별자)가 블록에 나타나는지 검증하는 것이다. 이 확인은 해시 트리 증명(예를 들어 머클 증명)을 수행하여 TxID에 대응하는 트랜잭션이 블록 헤더의 해시 루트로 표현되는 트랜잭션 집합의 일부인지 확인하여 수행할 수 있다. 그러나 이 확인은 검증자가 먼저 전체 트랜잭션 메시지 m=Tx를 획득하고 TxID=H(Tx)가 실제로 주어진 Tx와 가정된 TxID에 대해 유지된다는 것을 확인하도록 요구하고, 여기에서 H는 해시 함수이다. 이는 블록체인의 일부 사용자에게, 특히, 사용자가 경량 클라이언트를 구현하거나 메시지 m이 큰 경우 문제가 될 수 있다.
예에서 세컨더리 트랜잭션 식별자 MTxID는 다음 정의를 따르도록 생성될 수 있다: MTxID:=F(Tx,TxID). 알고리즘 F는 두 개의 입력 메시지 Tx 및 TxID로부터 세컨더리 트랜잭션 식별자를 생성하는 일방향 함수로 작동한다. TxID가 TxID:=H2(Tx)와 같이 트랜잭션 메시지 Tx의 함수로 작성될 수 있다는 사실을 감안할 때, 이는 MTxID가 단일 메시지 m=Tx의 함수로 다음과 같은 방식으로 작성될 수 있음을 의미한다: MTxID:=F(Tx, H22(Tx)):= F(Tx). 알고리즘 F는 해시 트리 생성기를 포함한다. 알고리즘은 전체 트랜잭션을 입력 Tx로 사용하고 트랜잭션에 대한 세컨더리 식별자로 사용할 수 있는 해시 다이제스트 MTxID를 반환한다. 세컨더리 식별자는 256비트 해시 다이제스트일 수 있다. 이 체계에서 세컨더리 식별자 MTxID는 프라이머리 식별자 TxID를 대체하지 않는다는 것을 이해해야 한다. 이를 강화하기 위하여, 알고리즘 F의 설계는 TxID 생성, 예를 들어 일반적인 이중 해시 기능 H2(Tx)를 사용하는 것이 포함되며, 이는 세컨더리 식별자를 프라이머리 식별자에 결속한다.
세컨더리 트랜잭션 식별자 MTxID를 생성하는 방법은 아래에 요약된 바와 같이 3가지 주요 단계로 나눌 수 있다.
입력: Tx
F(Tx):
1) TxID:= H22(Tx)를 계산한다.
2) Tx를 N=2k 개의 정렬된 데이터 패킷 D:={D1,D2,...,DN}의 집합 D로 분리한다.
3) 집합 D의 패킷을 리프로 사용하여 이진 해시 트리 T를 생성하고 그 루트 R을 계산한다.
출력: MTxID=R
이 예에서 해시 트리는 이진 해시 트리(즉, 머클 트리)이다. 그러나 일반적으로 모든 n진(n-ary) 해시 트리를 사용할 수 있으며 n은 트리의 분기를 나타낸다. 예를 들어, 이진 해시 트리에서 두 개의 자식 노드가 해시되어 부모 노드를 형성하고, 삼진(ternary) 해시 트리에서 세 개의 자식 노드가 해시되어 부모 노드를 형성하는 등이다.
단계 1:
Figure pct00005
계산
생성하는 사용자는 블록체인 네트워크의 하나 이상의 다른 당사자(또는 노드)로부터 트랜잭션을 수신할 수 있다. 예를 들어, 트랜잭션은 네트워크의 한 노드에 의해 생성 사용자에게 직접 전송되거나 하나 이상의 다른 노드를 통해 전송될 수 있다. 생성 사용자는 블록체인의 블록에 트랜잭션을 기록하려는 채굴자일 수 있다.
방법은 트랜잭션을 해시하여 기본 트랜잭션 식별자를 생성하는 것을 포함할 수 있다. 제1 단계는 Tx에 대해 수행되는 SHA-256 이중 해시 계산으로, 프라이머리 트랜잭션 식별자 TxID를 생성한다. 다른 해시 함수가 사용될 수 있으며, 일부 예에서는 단일 해시 계산만 수행된다. 일반적으로 Tx 메시지 자체는 TxID를 명시적으로 포함하지 않는다. 따라서 후속 단계에서는 이 프라이머리 식별자를 명시적으로 인코딩하는 방식으로 해시 트리를 구성할 수 있도록 TxID의 이러한 명시적 사전 계산이 필요하다.
단계 2:
Figure pct00006
를 정렬된 데이터 집합
Figure pct00007
로 분리
메시지 Tx를 포함하는 트랜잭션 데이터는 해시 트리 T의 리프로 사용할 수 있는 개별 패킷으로 분리된다. 트랜잭션은 기존 필드로 분할될 수 있다. 이러한 필드의 대부분은 일반적으로 크기가 매우 작은(일반적으로 1에서 32바이트 사이의) 간단한 숫자 데이터를 포함한다. 따라서 증가된 전체 트랜잭션 크기에 대한 핵심 관심사는 각각 입력(잠금 해제) 및 출력(잠금)과 관련된 sigScript 및 scriptPubKey 필드와 관련된다. 트랜잭션의 필드는 입력 필드, 출력 필드 및 기타 필드의 세 가지 범주를 사용하여 구분할 수 있다. 일부 예에서, 트랜잭션은 세 가지 범주, 예를 들어 모든 입력 필드를 포함하는 하나의 데이터 필드, 모든 출력 필드를 포함하는 하나의 데이터 필드 및 다른 필드를 포함하는 하나의 데이터 필드로 분할된다. 입력 및 출력 필드는 비-스크립트 및 스크립트 필드로 분리될 수 있으며, 비-스크립트 필드는 숫자 데이터를 포함하고 스크립트 필드는 스크립트 데이터를 포함한다.
다음 표는 트랜잭션이 데이터 필드 집합으로 분할될 수 있는 방법을 보여준다.
필드 크기
(바이트)
입력, 출력 또는 기타? 스크립트 또는
비-스크립트?
version 4 기타
txin_count 1-9 기타
tx_in []
txid_prev 32 입력 비-스크립트
vout 4 입력 비-스크립트
scriptSigLen 가변 입력 비-스크립트
scriptSig 가변 입력 스크립트
sequence 4 입력 비-스크립트
txout-_count 1-9 기타
txout []
value 8 출력 비-스크립트
scriptPubKeyLen 가변 출력 비-스크립트
scriptPubKey 가변 출력 스크립트
locktime 4 기타
이 표는 Tx 메시지가 여러 가지 방법으로 패킷 집합 D를 형성하기 위해 구성요소 필드로 분할될 수 있음을 보여준다.
일부 예에서, 트랜잭션은 트랜잭션의 입력 데이터(예를 들어, txid_prev)를 포함하는 적어도 하나의 데이터 필드; 트랜잭션의 출력 데이터(예를 들어 값)를 포함하는 적어도 하나의 데이터 필드; 및 트랜잭션의 비입력 및 비출력 데이터(즉, 다른 데이터, 예를 들어 버전)를 포함하는 적어도 하나의 데이터 필드로 분할될 수 있다. 각 데이터 필드는 한 가지 유형의 데이터, 예를 들어 입력 데이터로만 구성될 수 있다.
다른 예에서, 트랜잭션은 더 많은 데이터 필드로 분할될 수 있다. 예를 들어, 데이터 필드의 집합은 트랜잭션의 스크립트 입력 데이터(예를 들어, scriptSig)를 포함하는 적어도 하나의 데이터 필드; 트랜잭션의 비-스크립트 입력 데이터(예를 들어 vout)를 포함하는 적어도 하나의 데이터 필드; 트랜잭션의 스크립트 출력 데이터(예를 들어, scriptPubkey)를 포함하는 적어도 하나의 데이터 필드; 및 트랜잭션의 비-스크립트 출력 데이터(예를 들어, scriptPubKeyLen)를 포함하는 적어도 하나의 데이터 필드를 포함할 수 있다.
트랜잭션 Tx는 다음과 같은 정렬된 데이터 패킷 집합으로 분할될 수 있다.
Figure pct00008
<version>,
Figure pct00009
<txin_count>,
Figure pct00010
<txout_count>,
Figure pct00011
<locktime>,
Figure pct00012
<txid_prev>
Figure pct00013
<vout>
Figure pct00014
<scriptSigLen>
Figure pct00015
<sequence>,
Figure pct00016
<scriptSig>,
Figure pct00017
<value>
Figure pct00018
<scriptPubKeyLen>,
Figure pct00019
<scriptPubKey>.
이러한 방식으로 데이터를 분할하는 선택은 각 패킷 Di가 이진 해시 트리의 리프인 경우 몇 가지 이점이 있다. 첫째, 모든 비-스크립트 입력은 연결되어 패킷 D5를 형성하고 유사하게 모든 비-스크립트 출력은 연결되어 D7을 형성한다. 이는 트랜잭션의 모든 입력 및 출력이 비-스크립트 구성 요소와 스크립트 구성 요소의 두 부분으로 정확히 분할된다는 것을 의미한다. 이진 해시 트리에서, 이는 모든 입력과 출력이 형제 리프로 쌍을 이룰 수 있음을 의미하므로 특히 유리하다. 따라서 입력 및 출력은 다른 필드와 완전히 분리될 수 있으며, 각 입력 또는 출력의 스크립트 및 비-스크립트 구성 요소 또한 분리될 수 있다. 이는, 주어진 스크립트가 매우 큰 경우에도, 큰 스크립트 자체를 처리하지 않고 해시 트리 증명을 수행하여 비-스크립트 구성 요소를 여전히 확인할 수 있음을 의미한다.
이러한 필드에 추가하여, TxID 또한 해시 트리 T의 리프로 포함될 수 있다. 위의 예에 이어, 이는 데이터 필드 D9= <TxID>를 포함한다는 의미이다. 일반적으로, 트랜잭션에는 많은 입력과 많은 출력이 있을 수 있으며, 각각은 알고리즘 F에 의해 두 개의 구성요소로 분할될 수 있다. 이 트리 T 내의 데이터 블록의 총 수 N=|D|가 따라서 다음 방정식으로 주어진다.
Figure pct00020
여기에서 nin, nout은 각각 트랜잭션 입력 및 출력의 수이다. 일부 예에서, 다른 모든 데이터 필드는 연결되어 단일 데이터 필드를 형성할 수 있다. 이렇게 하면 총 리프 수가 N=2+2(nin+ nout)로 줄어든다.
N=2k와 같은
Figure pct00021
가 없는 경우, 이진 해시 트리의 충분한 리프가 있도록 보장하기 위하여 널(null) 패딩 데이터의 2k -N>0 데이터 패킷이 추가될 수 있다. 이 패딩은 프라이머리 트랜잭션 식별자와 최종 세컨더리 식별자 MTxID 사이의 연결을 강화하기 위하여 널 데이터이거나 TxID의 2k -N 복사본일 수 있다.
주어진 트랜잭션은 다중 입력 및/또는 다중 출력을 포함할 수 있다. 각 입력은 스크립트 데이터 및 비-스크립트 데이터를 포함할 수 있다. 유사하게, 각 출력은 스크립트 데이터 및 비-스크립트 데이터를 포함할 수 있다. 트랜잭션은 하나의 데이터 필드가 각 입력의 모든 스크립트 데이터를 포함하고 하나의 데이터 필드가 각 입력의 모든 비-스크립트 데이터를 포함하도록 분할될 수 있다. 출력 데이터도 유사하게 분할될 수 있다. 대안적으로, 조합된 하나 이상의 데이터 필드는 각각의 입력으로부터의 모든 스크립트 데이터를 포함할 수 있고 조합된 하나 이상의 데이터 필드는 각 입력으로부터의 모든 비-스크립트 데이터를 포함할 수 있다. 다시, 출력 데이터는 유사하게 분할될 수 있다.
일부 경우에는, 주어진 필드 내에서 데이터의 일부를 추출하고 이를 해시 트리 T의 추가 리프로 사용하는 것이 바람직할 수 있다. scriptSig 필드에서 추출할 수 있는 데이터의 예로는 서명 <Sig(P,m) >, scriptPubKey 필드에서 추출할 수 있는 데이터의 예로는 공개 키 해시 <H(P)>가 있다. 예에서, 이들 중 하나 또는 둘 모두를 추출하여 별도의 데이터 필드를 형성할 수 있다. 스크립트에서 이러한 데이터 요소를 추출하고 해시 트리에 추가 데이터 패킷으로 포함하면 다른 데이터를 처리할 필요 없이 트랜잭션 참여자와 서명을 경량으로 검증할 수 있다.
다른 예로, 트랜잭션 유형의 식별자가 해시 트리의 리프로 포함될 수 있다. TxID와 유사한 의미에서 이것은 트랜잭션 메시지에 포함된 필드나 데이터 요소가 아니지만, 표준 트랜잭션 유형, 예를 들어 공개 키 해시에 지불(pay-to-public key hash; P2PKH), 스크립트 해시에 지불(pay-to-script hash; P2SH) 또는 비표준 기준에 기초하여 메시지를 해석하여 식별할 수 있다. 트랜잭션 유형을 나타내는 데이터 요소를 포함하면 경량 사용자가 로컬에서 검색하거나 분석하지 않고도 트랜잭션에 대한 중요한 정보를 식별할 수 있다.
일부 시나리오에서 세컨더리 트랜잭션 식별자를 생성하는 것은, 예를 들어 트랜잭션을 블록체인으로 채굴하는 시점에서 채굴자이다. 채굴자를 위해 구현하기 가장 간단한 방식으로 트랜잭션을 분할하는 것이 바람직할 수 있다. 좋은 후보는 각 트리의 리프 수(예를 들어 N=2k)를 고정하고 트랜잭션 메시지를 m=m1∥m2∥...∥mN이 되도록 N개의 데이터 패킷으로 분할하여 해시 트리를 생성하는 것이며, 여기에서 공통 패킷 크기는 총 트랜잭션 크기에 따라 선형으로 확장된다.
대안적으로, 해시 트리의 데이터 리프에 대한 공통 패킷 크기 S가 고정될 수 있다. 그런 다음 트랜잭션은 필요한 만큼 N개의 패킷으로 분할될 수 있다. 이 옵션은 적절하게 작은 S를 선택하여 저대역폭 경량 검증 유틸리티가 훼손되지 않도록 하는 데 사용할 수 있다.
방법은 트랜잭션을 데이터 필드의 정렬된 집합으로 분할하는 것을 포함하며, 각 데이터 필드는 트랜잭션의 각자의 데이터를 포함한다. 트랜잭션 메시지 Tx는 정렬된 데이터 집합 D{D1,D2,...,DN}를 포함하는 N개의 개별 데이터 패킷으로 분리될 수 있다. 이는 위에서 설명한 대로 여러 가지 방법으로 수행할 수 있다.
단계 3:
Figure pct00022
를 사용한 해시 트리
Figure pct00023
생성 및 루트
Figure pct00024
계산
방법은 데이터 필드 집합을 트랜잭션 해시 트리의 리프로 사용하는 것을 포함한다. 트랜잭션 해시 트리는 리프 계층, 하나 이상의 내부 계층 및 루트 계층을 포함한다. 리프 계층은 복수의 리프 노드(각 노드가 해시 다이제스트이므로 리프 해시로도 지칭됨)를 포함한다. 각 리프 노드는 트랜잭션의 각자의 데이터 필드를 해시하여 생성된다. 적어도 하나의 리프 해시는 프라이머리 트랜잭션 식별자에 기초한다. 일부 예에서, 프라이머리 트랜잭션 식별자를 해시하여 하나 이상의 리프 해시가 생성된다. 일부 예에서, 트랜잭션의 하나 이상의 데이터 필드는 프라이머리 트랜잭션 식별자와 연결되고 그런 다음 해시되어 각자의 리프 해시를 생성한다. 각 내부 계층은 복수의 내부 노드(또는 내부 해시)를 포함한다. 주어진 내부 계층의 각 내부 해시는 하위 계층에서 적어도 두 개의 해시의 연결을 해시하여 생성된다. 예를 들어 제1 또는 최하위 내부 계층(즉, 리프 계층에 직접 연결된 내부 계층)은 적어도 두 개의 리프 해시의 연결을 해시하여 생성된 내부 노드를 포함한다. 이진 해시 트리의 경우, 주어진 계층의 두 노드가 연결되고 그런 다음 해시되어 다음 계층의 노드가 생성된다. n진 해시 트리의 경우, 주어진 계층의 n 노드를 연결한 다음 해시하여 다음 계층의 노드를 생성한다. 루트 계층은 트랜잭션 트리의 루트, 즉 세컨더리 트랜잭션 식별자를 포함한다. 세컨더리 트랜잭션 식별자는 하나 이상의 내부 계층의 최상위 내부 계층(즉, 루트 계층에 직접 연결된 내부 계층)의 내부 해시의 연결을 해시하여 생성된다.
세컨더리 트랜잭션 식별자(트랜잭션 해시 트리의 루트)는 블록의 생성 트랜잭션에 포함될 수 있다. 그런 다음 블록은 블록체인에 기록될 수 있다. 대안적으로, 후술하는 바와 같이, 네트워크의 하나 이상의 노드를 통해 채굴자에게 전송되는 트랜잭션에 세컨더리 트랜잭션 식별자가 포함될 수 있다.
알고리즘 F는 데이터 패킷 D의 정렬된 집합을 취하고 이들 패킷을 리프로 사용하여 해시 트리 T를 구성한다. 도 6은 이진 해시 트리의 예시적인 구성을 도시한다. 이 예에서 처음 4개의 데이터 필드 D1,…, D4는 트랜잭션의 기타 필드이고, 다음
Figure pct00025
필드는 스크립트 D5, D6 및 비-스크립트 D7, D8 필드 데이터의 쌍으로 나타나는 입력 및 출력 필드이다. 나머지 데이터 필드는 TxID를 포함하는 적어도 하나의 필드 D9, D10 및 일부 정수 k에 대해 N=2k에 도달하는 데 필요한 임의의 패딩(padding) DN을 포함한다.
이 이러한 N개의 데이터 필드가 리프로 주어지면, 해시 트리 생성 알고리즘은 머클 트리 T를 생성한다. 머클 트리는 프라이머리 트랜잭션 식별자를 생성하는 데 사용된 동일한 알고리즘을 사용하여 구성될 수 있다. 이는 T가 블록 헤더에서 루트 RB(프라이머리 트랜잭션 식별자)를 찾을 수 있는 트랜잭션 트리 TB와 동일한 방식으로 구성됨을 의미하며, 이는 리프에 대한 해시 함수의 사용과 내부 노드에 대한 해시 함수의 사용을 포함한다. 트랜잭션 트리 TB의 구성에 대해서는 후술한다. 해시 트리 T와 기존 TB 모두에서, 데이터 필드는 트리의 리프를 생성하기 위해 이중 해시될 수 있음을 유의한다. 이는 경량 존재 증명에 유용하다. 대안적으로, 데이터 필드를 단일 해시하여 트리의 리프를 생성할 수 있다. 여기에서 한 가지 차이점은 T의 리프는 프라이머리 트랜잭션의 필드를 포함하는 패킷 D∈{D1,…, DN}인 반면 TB의 리프는 주어진 블록에 포함된 개별 트랜잭션이라는 것이다. 바람직하게는 해시 트리의 리프 순서는 단계 3에서 지정된 패킷의 순서와 정확히 동일하다.
노드(예를 들어 노드에서 실행되는 채굴자 소프트웨어)는 전체 해시 트리를 저장하는 대신 트랜잭션 메시지 Tx를 정렬된 리프 집합 내로 파싱(parse)하고 루트 R과 함께 간단히 저장할 수 있다. 대안적으로, 해시의 전체 트리가 또한 저장될 수 있다. 정렬된 리프와 루트만을 유지하면 Tx를 저장하는 것과 비교할 때 저장 오버헤드가 R에 대한 32바이트만 증가하고, 이 정보에서 언제든지 트리를 재구성할 수 있다. 노드가 평소와 같이 데이터 패킷을 저장하도록 선택하고, 필요할 때 패킷에서 트리와 루트를 구성하면 이러한 작은 저장 오버헤드 또한 완화될 수 있다.
세컨더리 트랜잭션 식별자가 채굴자에 의해 생성되면, 채굴자는 블록 생성 트랜잭션에 이를 포함할 수 있다. 세컨더리 트랜잭션 식별자가 채굴자가 아닌 다른 사용자, 예를 들어 앨리스에 의해 생성되면, 해당 사용자는 네트워크를 통해 전파되는 트랜잭션에 이를 포함하여 채굴자가 블록으로 채굴할 수 있다. 다른 예로, 세컨더리 트랜잭션 식별자는 블록체인 네트워크에 연결되어 있지 않지만 대상 트랜잭션에 접근할 수 있는 사용자에 의해 생성될 수 있다. 해당 사용자는 예를 들어 인터넷을 통해 (블록체인 네트워크에 연결되거나 연결되지 않을 수 있는) 하나 이상의 당사자에게 세컨더리 트랜잭션 식별자를 전송할 수 있다. 세컨더리 트랜잭션 식별자(트랜잭션 해시 트리의 루트)는 블록(대상 트랜잭션을 포함하는 동일한 블록 또는 상이한 블록)의 생성 트랜잭션 내에 기록(즉, 기록되도록 커밋(commit))될 수 있다. 그런 다음 블록은 블록체인에 기록될 수 있다. 세컨더리 트랜잭션 식별자는 생성 트랜잭션 이외의 트랜잭션에 커밋될 수 있다. 예를 들어, 사용자는 세컨더리 트랜잭션 식별자를 획득하고, 이를 트랜잭션(예를 들어 트랜잭션 스크립트)에 포함하고, 해당 트랜잭션을 네트워크의 하나 이상의 노드에 전송하여 블록체인으로 채굴되도록 할 수 있다. 세컨더리 트랜잭션 식별자를 생성한 사용자는 추가적으로 또는 대안적으로 식별자를 로컬 메모리에 저장할 수 있다.
후보 데이터 필드 검증
언급한 바와 같이, 세컨더리 트랜잭션 식별자는 질의하는 사용자가 트랜잭션의 후보 데이터 필드 포함 여부를 확인할 수 있게 한다. 질의하는 사용자는 이러한 확인을 수행하기 위하여 후보 데이터 필드(또는 그 해시), 세컨더리 트랜잭션 식별자 및 해시 트리 경로(또는 인증 경로)가 필요하다. 생성 사용자는 이러한 요구 사항 요소 중 하나 이상을 질의하는 사용자에게 전송할 수 있다. 대안적으로, 질의하는 사용자는 다른 사용자 또는 블록체인 자체에서 하나 이상의 요소를 획득할 수 있다(예를 들어 생성 트랜잭션에서 세컨더리 트랜잭션 식별자가 획득될 수 있다).
일부 예에서 생성 사용자는 전체 트랜잭션을 드러내지 않고 트랜잭션이 후보 데이터 필드를 포함한다는 것을 질의하는 사용자에게 증명하기를 원할 수 있다(또는 대안적으로 질의하는 사용자가 트랜잭션이 후보 데이터 필드를 포함하는지 여부만 확인하기를 원할 수 있다). 이 경우 생성하는 사용자는 질의하는 사용자에게 후보 데이터 필드만을 전송할 수 있다.
해시 트리 경로는 정렬된 해시 집합을 포함한다. 해시 집합은 적어도 리프 해시를 포함한다. 집합은 하나 이상의 내부 해시를 더 포함할 수 있다. 내부 해시의 수는 트랜잭션이 분할되는 데이터 필드의 수와 해시 트리의 유형(예를 들어 해시 트리가 이진 해시 트리인지, 삼진 해시 트리인지 등) 양자에 의존한다.
질의하는 사용자는 후보 데이터 필드(또는 그 해시)와 해시 경로를 사용하여 해당 요소를 사용하여 생성된 해시 트리의 루트가 트랜잭션의 세컨더리 트랜잭션 식별자와 일치하는지 여부를 결정한다(해시 트리 증명을 수행하여). 루트가 세컨더리 트랜잭션 식별자와 일치하면, 기본 해시 함수의 고유성으로 인하여, 질의하는 사용자는 트랜잭션이 후보 데이터 필드를 포함한다고 확신할 수 있다.
해시 트리 증명은 후보 데이터 필드의 해시를 정렬된 해시 집합(해시 트리 경로) 내의 적어도 하나의 리프 해시와 연결하는 것을 포함한다. 이것은 내부 해시(또는 해시 트리의 내부 노드)를 생성한다. 생성된 내부 해시는 해시 트리 경로에서 하나 이상의 해시와 연결된다(해시 트리가 이진 해시 트리인 경우 단일 해시). 연결된 내부 해시는 다음 해시를 생성하기 위해 해시된다. 해시 트리의 크기(예를 들어 데이터 필드 수)에 따라, 다음 해시는 다른 내부 해시 또는 루트 해시가 될 수 있다. 다음 해시가 다른 내부 해시이면, 해시 트리 경로에서 하나 이상의 내부 해시를 연결하고 그 결과를 해시하는 과정이 루트 해시가 생성될 때까지 계속된다. 해시 트리 경로의 각 해시는 한 번만 사용됨을 유의한다.
루트 해시는 후보 세컨더리 트랜잭션 식별자와 동일하다. 후보 세컨더리 트랜잭션 식별자가 획득한 세컨더리 트랜잭션 식별자와 일치하면, 후보 데이터 필드는 트랜잭션의 일부를 형성한다. 후보 데이터 필드가 트랜잭션의 일부를 형성하는지 여부를 나타내기 위해 표시(예를 들어 참 또는 거짓)가 (예를 들어 사용자 디바이스를 통해 사용자에게) 출력될 수 있다. 출력은 시각적 또는 청각적 경고일 수 있다.
일부 예에서, 트랜잭션은 콘텐츠 데이터(예를 들어, 미디어 데이터)를 포함한다. 하나 이상의 데이터 필드는 콘텐츠 데이터를 포함할 수 있다. 콘텐츠 데이터는, 예를 들어, 이미지 데이터(예를 들어 사진), 사운드 데이터(예를 들어 노래), 비디오 데이터(예를 들어 영화) 또는 문서 데이터(예를 들어 워드(word) 문서 또는 pdf)일 수 있다. 후보 데이터 필드는 데이터를 포함하는 데이터 필드일 수 있다. 따라서 이는 트랜잭션이 상기 콘텐츠를 포함하는지 여부를 당사자가 확인할 수 있게 한다.
일부 예에서, 보조 트랜잭션 식별자 및 후보 데이터 필드를 제공하는 생성 사용자는 네트워크의 신뢰할 수 있는 노드일 수 있다.
본원에서 "사용자"는 최종 사용자 또는 소비자로 제한되지 않는다. 예를 들어 실시예에서 생성 사용자(기록 당사자)는 채굴자(104M)일 수 있다. 질의하는 사용자는 앨리스(103a)와 같은 소비자(103) 또는 채굴자 노드(104M)일 수 있다. 사용자에 의한 질의는 수동으로 시작된 질의로 제한되지 않는다. 실시예에서 질의는 사용자에 의해 실행되는 자동화된 프로세스에 의해 이루어질 수 있다. 예를 들어, 프로세스는 검증 또는 채굴 중인 각 트랜잭션의 지불 부분만 확인하기를 원하는 채굴자 또는 다른 노드(104)에 의해 실행되는 자동화된 프로세스일 수 있다.
트랜잭션 트리 검증 알고리즘
당사자(즉, 검증 사용자)는 트랜잭션 트리 생성 알고리즘 F를 보완하는 검증 알고리즘 VF를 수행할 수 있다. 이 검증 알고리즘은 검증자 앨리스가 다른 당사자 밥이 후보 MTxID를 생성하기 위해 생성 알고리즘을 올바르게 사용했는지 여부를 확인할 수 있게 한다. 검증 알고리즘 VF(MTxID,Tx)는 밥의 후보 식별자 MTxID와 MTxID로 식별되어야 하는 트랜잭션 Tx라는 두 가지 입력을 취한다. 알고리즘은 후보 식별자 MTxID가 올바르게 생성되었는지 여부를 나타내기 위해 참 또는 거짓(또는 일부 다른 표시)을 출력할 수 있다. 출력은 사용자 디바이스를 통한 사용자에 대한 출력일 수 있다(예를 들어 시각적 또는 청각적 경고).
검증 알고리즘은 다음과 같이 작성할 수 있다.
입력:
Figure pct00026
,
Figure pct00027
Figure pct00028
:
1)
Figure pct00029
계산.
2) 알고리즘 F와 동일한 절차를 사용하여,
Figure pct00030
Figure pct00031
개의 정렬된 데이터 패킷의 집합
Figure pct00032
로 분리. 계산된
Figure pct00033
는 패킷 중 적어도 하나이다.
3) 집합
Figure pct00034
의 패킷을 리프로 사용하여 이진 머클 트리
Figure pct00035
생성 및 그 머클 루트
Figure pct00036
계산.
4)
Figure pct00037
Figure pct00038
가 동일한지 확인:
4.1
Figure pct00039
이면, "참" 반환.
4.2
Figure pct00040
이면, "거짓" 반환.
출력: "참" 또는 "거짓"
이 알고리즘은 프로토콜이 이진 해시 트리를 사용하여 보조 트랜잭션 식별자를 생성하도록 지정할 때 적용된다. 그러나 일반적으로, 위에서 논의한 바와 같이, 임의의 n진 해시 트리가 사용될 수 있다.
질의 당사자(앨리스)는 생성 사용자(밥) 또는 네트워크의 다른 노드로부터 후보 세컨더리 트랜잭션 식별자 MTxID를 얻을 수 있다. 대안적으로, 검증 당사자는 블록체인의 블록에서 추출하여 후보 MTxID를 얻을 수 있다(세컨더리 트랜잭션 식별자는 블록의 생성 트랜잭션에 기록될 수 있음을 기억한다).
검증 알고리즘은 임의의 네트워크 피어가 다른 피어(예를 들어 채굴자)가 증명한 MTxID가 생성 알고리즘 F에 따라 정확하고 정직하게 계산되었는지 여부를 독립적으로 확인할 수 있게 한다. 검증자는 VF를 사용하여 검증을 수행하는 시점에서, 후보 MTxID에 대응하는 전체 트랜잭션 데이터 Tx 및 생성 알고리즘 F를 알고 있다. 예를 들어, 생성 알고리즘 및/또는 트랜잭션은 네트워크의 노드 사이에 분산될 수 있다.
Figure pct00041
신뢰
세컨더리 트랜잭션 식별자 MTxID:=R을 생성하는 한 가지 목적은 경량 클라이언트 앨리스가 전체 트랜잭션을 검색하고 해석할 필요 없이, 블록체인에서 관심 있는 트랜잭션 필드 또는 데이터 요소의 존재를 확인할 수 있도록 하는 것이다.
그러나, 공개적으로 알려진 MTxID는 클라이언트가 반드시 신뢰할 수는 없다. 예를 들어, 앨리스가 신뢰할 수 없는 당사자인 밥으로부터 MTxID 값을 수신하면 그가 올바른 생성 함수 F를 사용했는지 알 수 없다. 그 이유는 일부 데이터 패킷 Di가 블록체인에 있는 트랜잭션 Tx에 대응하는 정렬된 집합 D의 구성요소임을 증명할 수 있기 위해서 두 가지 조건을 포함하는 것이다:
1) Di∈D임을 증명한다. 여기에서 D는 루트 해시 R=MTxID를 계산하는 데 사용된다(위에서 설명한 바와 같이).
2) MTxID가 TxID로 식별되는 채굴된 트랜잭션 Tx에 대응함을 증명한다.
트랜잭션의 해시 트리 T에 대한 해시 증명(예를 들어 머클 증명)을 수행하는 것은 이 두 조건 중 제1 조건을 충족하기에만 충분한 것이다. MTxID를 신뢰하는 이 문제에 대한 해결책을 "계층-2 프로토콜"이라고 하며, 이는 임의의 주어진 트랜잭션에 대하여 두 식별자 TxID와 MTxID 사이에 직접적인 온체인 링크를 제공한다.
생성 사용자는 추가 해시 트리 TM (해시 트리의 트리)을 구성하고 그 루트 해시 RM을 생성 트랜잭션의 스크립트에 데이터 요소로 포함할 수 있다. TM의 구성은 각 새로운 블록에 대한 채굴의 일부로 트랜잭션의 집계와 병렬로 수행될 수 있다. RM을 포함하려면 생성 트랜잭션에 저장되는 비교적 작은 32바이트 값만이 필요하다.
프로토콜은 다음 단계를 포함할 수 있다.
1) 생성 사용자는 다음 블록으로 채굴하기 위해 N개의 트랜잭션의 집합
Figure pct00042
를 수신한다.
2) 기존 블록체인 프로토콜에 따라 후보 블록에 대하여 집합
Figure pct00043
를 정렬한다.
3) 두 개의 해시 트리를 생성한다.
3.1) (2)에서 결정된 순서대로 각 트랜잭션을 리프로 사용하여 블록 해시 트리 TB를 생성하며, 이는 블록 해시 트리 생성을 위한 표준 방법을 사용하여 수행된다. 이 단계는, 각 트랜잭션에 대하여, 트랜잭션을 해시하여 각자의 프라이머리 트랜잭션 식별자를 생성하는 것을 포함한다.
3.2) (2)에서 결정된 순서대로 각 트랜잭션의 MTxID를 리프로 사용하여 트랜잭션 해시 트리 TM의 트리를 생성한다. MTxID의 순서는 (3.1)의 대응하는 Tx의 순서와 같으며 각각은 함수 MTxIDi=F(Txi)를 사용하여 생성된다.
4) 후보 블록에 각 루트를 기록한다.
4.1) 후보 블록 헤더의 Merkle_root 필드에 트리 TB의 루트 RB를 기록한다.
4.2) 후보 블록 생성 트랜잭션의 필드에 트리 TM의 루트 RM을 기록한다.
RM은 후보 블록 생성 트랜잭션의 하나 이상의 필드에 기록될 수 있다. 예를 들어, 해당 트랜잭션의 출력 스크립트 중 하나에.
위에서 설명한 검증 알고리즘과 마찬가지로, 검증 사용자는 동일한 트랜잭션 집합을 사용하여 트랜잭션 해시 트리의 트리를 생성하고 트리 TM의 결과 루트 RM이 생성 사용자에 의해 생성된 것과 동일한지 여부를 검증할 수 있다.
도 7은 예시적인 블록 해시 트리 TB(700)를 도시한다. 도시된 바와 같이, 각 트랜잭션(701)은 해시되어 TB의 각자의 리프(702)를 형성하고 루트 RB는 유효한 블록의 블록 헤더에 포함된다.
도 8은 트랜잭션 해시 트리 TM의 트리의 루트 RM이 생성 트랜잭션의 스크립트 필드에 포함된 예시적인 블록 구성을 도시한다. 블록 해시 트리 TB도 도시되며, 그 루트 RB가 블록 헤더에 저장된다.
이 프로토콜은 블록에 포함된 트랜잭션의 TxID와 그 대응하는 MTxID 간에 채굴자 인증 링크(miner-attested link) 를 설정할 수 있게 한다. 이는 블록의 트랜잭션 목록(RB로 표시됨)과 그 대응하는 MtxID 목록(RT로 표시됨)을 생성하는 것은 항상 동일한 채굴자이기 때문이며 이들은 모두 블록체인에 저장된다. 임의의 블록에서, 작업 증명(PoW) 합의 알고리즘은 RB 및 대응하는 트리 TB의 값을 신뢰할 수 있도록 보장한다. RB에 대한 신뢰는 RM의 값도 신뢰할 수 있는지 확인하는 데 사용되는데 이것이 PoW에 의해 보호되는 정보와 부합하기 때문이다. 그 이유는 두 트리 모두가 동일한 입력 데이터인 트랜잭션 집합
Figure pct00044
로 구성되고, 트랜잭션 집합이 PoW 합의 알고리즘에 의해 보호되는 정보이기 때문이다. 따라서 TxID와 MTxID 간의 필수적인 일대일 대응은 경량 클라이언트를 포함하여 임의의 네트워크 노드에서 확인할 수 있다.
상술한 바와 같이, 생성 사용자는 세컨더리 블록 식별자가 생성되는 "계층 2 프로토콜"을 구현할 수 있다. 계층 2 프로토콜은 기본(base) 블록체인 프로토콜의 '온탑(on-top)'으로 구현된 프로토콜이다. 기본 프로토콜은 이러한 계층 2 프로토콜의 영향을 받지 않는다(또는 '인식'할 필요도 없음). 계층 2 프로토콜은 단순히 블록체인 프로토콜의 확장으로 추가 기능을 구축한다.
세컨더리 블록 식별자는 트랜잭션 집합 해시 트리(또는 트랜잭션 해시 트리의 트리)의 루트이다. 트랜잭션 집합 해시 트리의 각 리프는 블록 내 다른 트랜잭션의 세컨더리 트랜잭션 식별자일 수 있다(블록 내의 트랜잭션 수에 따라, 하나 이상의 해시 값이 패딩으로 사용될 수 있음). 동일한 생성 사용자가 세컨더리 트랜잭션 식별자와 세컨더리 블록 식별자를 생성할 수 있다. 대안적으로, 제1 생성 사용자가 세컨더리 트랜잭션 식별자를 생성할 수 있는 한편, 다른 생성 사용자가 세컨더리 블록 식별자를 생성할 수 있다. 일부 예에서는 채굴자만이 세컨더리 블록 식별자를 생성할 수 있다. 예를 들어, 제1 생성 사용자는 제1 트랜잭션 내에 세컨더리 트랜잭션 식별자를 포함하고 이를 네트워크를 통해 전송할 수 있다. 유사하게, 제2 생성 사용자는 제2의 다른 트랜잭션에 대해 동일한 작업을 수행할 수 있다. 제3 생성 사용자는 하나 이상의 상이한 트랜잭션의 것과 함께, 제1 및 제2 트랜잭션의 세컨더리 트랜잭션 식별자를 획득한 다음, 세컨더리 블록 식별자를 생성할 수 있다.
생성 사용자가 세컨더리 트랜잭션 식별자 및/또는 세컨더리 블록 식별자를 생성하는 데 사용한 트랜잭션(들)에 접근할 수 있는 임의의 사용자(검증 사용자)는 이러한 식별자가 올바르게, 즉 블록체인 프로토콜에 따라 생성되었는지 여부를 확인할 수 있다. 검증 사용자는 예를 들어 트랜잭션의 출처 또는 블록체인의 전체 또는 부분 사본으로부터 트랜잭션(들)을 획득할 수 있다. 검증 사용자는 프로토콜을 올바르게 준수했다면 생성 사용자가 완료해야 하는 것과 동일한 프로세스를 반복한다. 세컨더리 트랜잭션 식별자가 생성 사용자에 의해 생성된 것과 일치하면, 검증 사용자는 이 식별자가 올바르게 생성되었음을 입증할 수 있다. 세컨더리 블록 식별자에도 동일하게 적용된다.
세컨더리 트랜잭션 식별자(들)와 세컨더리 블록 식별자는 동일한 트랜잭션에 커밋되거나 블록체인에 채굴될 다른 트랜잭션에 커밋될 수 있다. 세컨더리 트랜잭션 식별자가 채굴자에 의해 생성되면, 채굴자는 블록 생성 트랜잭션에 이를 포함할 수 있다. 세컨더리 트랜잭션 식별자가 채굴자가 아닌 다른 사용자, 예를 들어 앨리스 에 의해 생성된 경우, 해당 사용자는 네트워크를 통해 전파되는 트랜잭션에 이를 포함하여 채굴자가 블록으로 채굴할 수 있다. 다른 예로, 세컨더리 트랜잭션 식별자는 블록체인 네트워크에 연결되어 있지 않지만 대상 트랜잭션에 접근할 수 있는 사용자에 의해 생성될 수 있다. 해당 사용자는 예를 들어 인터넷을 통해 하나 이상의 당사자(블록체인 네트워크에 연결되거나 연결되지 않을 수 있음)에게 세컨더리 트랜잭션 식별자를 전송할 수 있다. 세컨더리 트랜잭션 식별자(트랜잭션 해시 트리의 루트)는 블록(대상 트랜잭션을 포함하는 동일한 블록 또는 다른 블록)의 생성 트랜잭션에 기록(즉, 커밋되도록 기록)될 수 있다. 그런 다음 블록은 블록체인에 기록될 수 있다. 세컨더리 트랜잭션 식별자는 생성 트랜잭션 이외의 트랜잭션에 커밋될 수 있다. 예를 들어, 사용자는 세컨더리 트랜잭션 식별자를 획득하고, 이를 트랜잭션(예를 들어 트랜잭션 스크립트) 내에 포함하고, 해당 트랜잭션을 블록체인 내로 채굴되도록 네트워크의 하나 이상의 노드에 전송할 수 있다. 세컨더리 트랜잭션 식별자를 생성한 사용자는 추가적으로 또는 대안적으로 식별자를 로컬 메모리에 저장할 수 있다.
동일한 커밋 사용자는 블록체인의 블록(동일한 블록 또는 다른 블록)에 포함하기 위해 세컨더리 트랜잭션 식별자와 세컨더리 블록 식별자를 커밋할 수 있다. 대안적으로, 제1 커밋 사용자가 세컨더리 트랜잭션 식별자를 트랜잭션에 커밋할 수 있는 한편, 다른 커밋 사용자가 세컨더리 블록 식별자를 트랜잭션(예를 들어 생성 트랜잭션)에 커밋할 수 있다. 예를 들어, 채굴자만이 세컨더리 블록 식별자를 생성 트랜잭션에 커밋할 수 있는 반면 다른 사용자는 트랜잭션에 세컨더리 트랜잭션 식별자를 포함할 수 있다.
존재 증명
트랜잭션의 임의의 개별 필드는, 다음과 같은 존재 증명 세트를 사용하여, 전체 트랜잭션을 요구하지 않고, 그 블록체인에의 존재 여부를 확인할 수 있다:
1)
Figure pct00045
에 대한 해시 증명을 획득한다. 여기에서 R=MTxID이다. 즉, 후보 데이터 필드 Di가 세컨더리 식별자로 R을 갖는 트랜잭션의 일부인지 검증한다.
2)
Figure pct00046
에 대한 해시 증명을 획득한다. 즉, 후보 세컨더리 트랜잭션 식별자 MTxID가 루트로 RM을 갖는 해시 트리 TM의 트리의 일부인지 검증한다.
3)
Figure pct00047
에 대한 해시 증명을 획득한다. 즉, 후보 트랜잭션 식별자 TxID가 RB를 루트로 갖는 블록 해시 트리 TB의 일부인지 검증한다.
4) RM과 RB가 같은 블록에 있는지 검증한다. 이는 블록체인의 블록을 검사하여 확인할 수 있다.
선택적으로, 존재 증명은 TxID 및 MTxID가 각각 TB 및 TM에서 동일한 리프 노드 위치에 있는지 검증하는 것을 포함할 수 있다.
이러한 테스트는 Di가 트랜잭션 Tx의 일부임을 증명하기에 충분하다. 또한, 이러한 테스트는 비교적 적은 수(32비트)의 해시 값만을 요구하므로, 경량 클라이언트가 처리하기에 적당하다. 이는 임의의 씬 클라이언트(thin client)가 전체 트랜잭션 데이터를 획득할 필요 없이 경량 존재 증명을 수행할 수 있음을 의미한다. 위에서 설명한 것과 동일한 존재 증명이 데이터 블록 자체의 단일(예를 들어 SHA-256) 해시에서 수행될 수 있음을 유의한다. 이것은 Di가 아닌 H(Di)에 대한 존재 증명이 될 것이다. 많은 경우 데이터 자체를 제공하거나 공개하지 않고도 데이터의 존재를 효과적으로 증명할 수 있기 때문에 데이터 해시에 대한 그러한 증명이 선호된다.
질의하는 사용자는 후보 데이터 필드가 블록체인 블록 내에 포함된 트랜잭션의 일부인지 알고 싶어할 수 있다. 최소한 질의하는 사용자는 후보 데이터 필드의 해시를 필요로 한다(사용자에게 제공될 수 있거나, 질의하는 사용자에게 후보 데이터 필드가 제공되고 이를 사용자가 해시할 수 있음). 세컨더리 트랜잭션 식별자에 대한 인증 경로(또는 해시 트리 경로) 또한 필요하다.
계층 2 존재 증명을 구현하기 위하여, 질의하는 사용자는 또한 후보 세컨더리 블록 식별자 및 후보 세컨더리 블록 식별자에 대한 인증 경로를 필요로 한다. 그 외에도, 대상 트랜잭션의 후보 프라이머리 트랜잭션 식별자, 트랜잭션 집합을 포함하는 블록의 후보 프라이머리 블록 식별자 및 프라이머리 블록 식별자에 대한 인증 경로 또한 필요하다.
생성 사용자 또는 블록체인 네트워크의 다른 노드에 의해 질의하는 사용자에게 위의 요구 사항 중 각각 또는 일부가 제공될 수 있다. 대안적으로, 이들을 블록체인 자체(예를 들어 블록체인의 전체 또는 부분 사본)에서 얻을 수 있다. 다른 예로서, 블록체인과 별개의 당사자(예를 들어 서비스 제공자)는 요구 사항 중 하나 이상에 접근하고 이를 제공할 수 있다.
불참 기간에 대한 고려
이 프로토콜에 참여하는 채굴자는 자신이 채굴한 블록에 대해서만 가치 있는 MTxID 정보-RM으로 인코딩됨-를 네트워크에 제공할 수 있다. 일부 경우에 모든 채굴자가 프로토콜에 참여하는 것은 아니다. 프로토콜에 참여하는 채굴자 M은 그 생성 트랜잭션의 스크립트 필드에 다른(32바이트) 해시 값 RM Inter를 포함할 수 있다. RM Inter값은 제3 해시 트리 TM Inter의 루트이다. 이 추가 트리는 TM과 동일한 방식으로 구성되지만 대신 M이 성공적으로 채굴한 블록 사이의 중간 기간 동안 채굴된 모든 트랜잭션에 대해, 채굴된 순서로, MTxID를 사용한다. 이는 채굴자가 그 생성 트랜잭션에 추가로 32바이트를 저장하는 것을 요구하지만, 다른 채굴자의 참여 없이, 신뢰할 수 있는 MTxID를 제공할 수 있으며, 따라서 가벼운 존재 증명을 제공할 수 있음을 의미한다. 이는 다시 유효성 검증에 필요한 모든 정보가 온체인(on-chain)으로 저장되어 있기 때문이다.
예시적인 사용 사례
도 9a 및 9b를 참조하면, 다음은 생성 사용자가 트랜잭션이 후보 데이터 필드를 포함하는지 여부를 확인하기를 원하는 예를 제공한다. 트랜잭션은 디지털 자산 전달과 관련되지 않은, 콘텐츠 데이터를 저장하는 데 사용할 수 있다. 예를 들어 일부 트랜잭션은 디지털 자산 수신자의 주소와 관련이 없을 수 있는 OP_RETURN scriptPubkey 필드 내에 데이터를 포함할 수 있다. 디지털 자산 전달과 명시적으로 관련된 데이터에서 콘텐츠 데이터를 분리하기 때문에, 많은 경우에 사용자는 전체 트랜잭션 데이터를 다운로드하지 않고 블록체인 내의 트랜잭션 단편의 존재만을 검증하고자 할 수 있다.
앨리스가 설명된 프로토콜에 참여하는 채굴자의 생성 트랜잭션으로부터 블록 헤더 정보 및 생성 스크립트 데이터의 기록을 유지하는 SPV 노드라고 가정한다. 밥이 또한 블록체인의 전체 사본을 가지고 있는 그러한 채굴자라고 한다. 학술 논문의 디지털 버전을 포함하는, 블록체인의 트랜잭션 Tx1을 고려한다. 문서에 대한 데이터는 두 개의 개별 OP_RETURN 출력 scriptPubKey 필드에 포함되며, 도 9a에 따라 제목과 초록은 제1 OP_RETURN(출력 1)에 포함되고 논문의 나머지 부분은 제2 OP_RETURN(출력 2)에 포함된다.
앨리스는 Tx1에 대한 TxID를 알고 있지만 전체 트랜잭션 데이터를 가지고 있지 않다. 앨리스는 Tx1에 접근하기를 원하므로 밥에게 요청하지만, 밥은 전체 트랜잭션 데이터를 앨리스에게 제공하는 대가로 지불을 원한다. 반면 앨리스는 수신할 트랜잭션 데이터가 논문을 포함할 것이라는 확신이 있기 전에는 밥에게 지불하고 싶지 않다. 밥은 경량 존재 증명과 함께 미리보기를 앨리스에게 보내 이러한 확실성을 제공할 수 있다. 밥은 먼저 Tx1에서 논문 중 많은 부분을 뺀 트랜잭션 데이터를 앨리스에게 보내고 제2 OP_RETURN(출력 2) 다음의 데이터를 데이터의 SHA256 해시로 대체한다(도 9b 참조).
한편 앨리스는 수신한 제목과 요약(트랜잭션 단편)이 변경되지 않았는지 검증하기를 원하지만 밥은 전체 트랜잭션을 제공하기를 원하지 않는다. 밥은 앨리스가 자신의 SPV 지갑이 제공할 수 있는 트랜잭션 또는 다른 데이터(블록 헤더 및 생성 데이터)를 다운로드하지 않고도 앨리스가 수신한 데이터가 블록체인에 저장되어 있음을 증명해야 한다.
경량 존재 증명은 밥이 보낸 Tx1의 경량 버전이 변경되지 않았는지(즉, 블록체인에서 온 것인지) 확인하는 데 사용할 수 있다. 경량 Tx1과 함께, 밥은 해시 증명을 제공한다. 즉 밥은 앨리스가 수신한 데이터를 Tx1이 저장된 블록의 생성 트랜잭션에 저장된 트리 루트 RM에 대해 검증할 수 있게 하는 위에서 약술된 방법에 따른 시퀀스 해시를 제공한다(도 9a 참조). 앨리스는 RM을 가지고 있으므로 밥이 보낸 데이터의 무결성을 검증하기 위해 해시 증명을 수행할 수 있다.
밥이 전체 학술 논문의 단편을 보냈다고 확신하는 앨리스는 전체 트랜잭션을 보고 싶어할 수 있으며, 이 경우 전체 트랜잭션 데이터를 요청할 수 있다. 누락된 데이터(즉, 전체 트랜잭션)를 수신하면 앨리스는 제2 OP_RETURN(출력 2)의 데이터가 경량 트랜잭션에 제공된 OP_RETURN(출력 2) 데이터와 동일한 문자열로 해시되는지 확인하여 마지막 확인을 수행할 수 있다. 대안적으로, 앨리스는 전체 트랜잭션을 해시하고 처음에 가지고 있던 TxID를 확인할 수 있다.
다른 예로서, 당사자는 트랜잭션에서 데이터를 프루닝하기를 원할 수 있다. 예를 들어, 개인 데이터 요구 사항을 준수하거나, 저장 공간을 절약하기 위해. 그러나, 당사자는 여전히 트랜잭션이 후보 데이터 필드(예를 들어 트랜잭션의 지출 가능한 출력)를 포함하는 것을 다른 사람에게 증명해야 할 수 있다. 트랜잭션의 보조 트랜잭션 식별자는 임의의 당사자가 프루닝된 트랜잭션이 후보 데이터 필드를 포함하는지 확인할 수 있게 한다. 프루닝된 데이터(예를 들어 개인 정보)는 프루닝된 데이터의 해시로 대체될 수 있다. 프루닝 가능성이 높은 후보는 저장할 수 있는 데이터량의 증가로 인해 OP_RETURN 데이터 또는 스크립트 필드이다. 따라서 프루닝된 트랜잭션이 후보 데이터 필드를 포함하는지 여부를 노드가 확인하려는 경우, 해시 트리에서 리프 노드로 사용하기 위해 프루닝된 데이터의 해시를 당사자에게 제공할 수 있다.
위의 실시예들은 단지 예로서 설명되었다는 것을 이해할 것이다.
본원에 개시된 교시의 제1 예시에 따르면 대상 트랜잭션(target transaction)의 세컨더리 트랜잭션 식별자(secondary transaction identifier)를 생성하는 컴퓨터 구현 방법이 제공되며, 세컨더리 트랜잭션 식별자는 대상 트랜잭션이 후보 데이터 필드를 포함하는지 여부를 질의하는 사용자가 결정할 수 있게 하고; 방법은 생성 사용자에 의해 수행되며: 대상 트랜잭션의 데이터 필드 집합을 식별하는 것-각 데이터 필드는 트랜잭션의 각자의 데이터를 포함함; 트랜잭션 해시 트리를 생성하는 것을 포함하고, 트랜잭션 해시 트리는: i) 복수의 리프 해시를 포함하는 리프 계층-각 데이터 필드는 복수의 리프 해시 중 각자의 것을 생성하도록 해시됨, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층-각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 세컨더리 트랜잭션 식별자를 포함하는 루트 계층-세컨더리 트랜잭션 식별자는 하나 이상의 내부 계층 중 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨-을 포함한다.
일부 예에서, 방법은 블록체인 네트워크의 하나 이상의 노드, 예를 들어 하나 이상의 최종 사용자로부터 상기 트랜잭션을 수신하는 것을 포함할 수 있다. 트랜잭션은 UTXO 기반 모델의 트랜잭션일 수 있다. 대안적으로 계정 기반 모델의 트랜잭션일 수 있다.
일부 예에서, 내부 해시의 각 집합은 단일 해시로 구성될 수 있다(예를 들어 해시 트리는 이진 해시 트리이다). 대안적으로, 내부 해시의 각 집합은 둘 이상의 해시(예를 들어 해시 트리가 삼진 해시 트리이면 두 개의 해시)로 구성될 수 있다.
제2 선택적 예시에 따르면, 방법이 세컨더리 트랜잭션 식별자를 블록체인으로 커밋하는 것을 포함할 수 있는, 제1 예시에 따른 방법이 제공될 수 있다.
생성 사용자는 블록체인 네트워크의 노드에서 채굴자일 수 있다. 질의하는 사용자는 최종 사용자, 채굴자 또는 네트워크의 다른 유형의 노드일 수 있다.
제3 선택적 예시에 따르면, 방법이 세컨더리 트랜잭션 식별자를 블록체인의 블록 내로 포함하기 위한 트랜잭션으로 커밋(commit)하는 것; 세컨더리 트랜잭션 식별자를 블록체인의 블록 내로 포함하기 위한 생성 트랜잭션으로 커밋하는 것; 세컨더리 트랜잭션 식별자를 블록체인 네트워크의 노드로 전송하는 것; 및 세컨더리 트랜잭션 식별자를 생성 사용자의 컴퓨팅 장비의 메모리에 저장하는 것 중 하나, 일부 또는 전부를 포함할 수 있는, 제1 또는 제2 예시에 따른 방법이 제공될 수 있다.
생성 트랜잭션은 블록 내의 논리적으로 첫 번째 트랜잭션일 수 있다.
본원에 개시된 교시의 제4 예시에 따르면 블록체인의 블록 내의 대상 트랜잭션이 후보 데이터 필드를 포함하는지 여부를 질의하는 사용자가 결정할 수 있게 하는 컴퓨터 구현 방법이 제공되고, 방법은 커밋 사용자에 의해 수행되며: 대상 트랜잭션의 세컨더리 트랜잭션 식별자를 획득하는 것; 및 세컨더리 트랜잭션 식별자를 블록체인의 블록 내로 포함하기 위한 트랜잭션으로 커밋하는 것을 포함하고, 세컨더리 트랜잭션 식별자는: 대상 트랜잭션의 데이터 필드 집합을 식별하는 것-각 데이터 필드는 트랜잭션의 각자의 데이터를 포함함; 및 트랜잭션 해시 트리를 생성하는 것에 의해 생성되었으며, 트랜잭션 해시 트리는: i) 데이터 필드의 정렬된 집합에 기초하여 정렬된 복수의 리프 해시를 포함하는 리프 계층-각 데이터 필드는 복수의 리프 해시 중 각자의 것을 생성하도록 해시됨, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층-각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 세컨더리 트랜잭션 식별자를 포함하는 루트 계층-세컨더리 트랜잭션 식별자는 하나 이상의 내부 계층 중 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨-을 포함한다.
제5 선택적 예시에 따르면, 상기 획득하는 것은: 세컨더리 트랜잭션 식별자를 생성하는 것; 세컨더리 트랜잭션 식별자를 블록체인 네트워크의 노드로부터 수신하는 것; 세컨더리 트랜잭션 식별자를 블록체인 네트워크 외부의 노드로부터 수신하는 것 중 적어도 하나를 포함할 수 있는, 제4 예시에 따른 방법이 제공될 수 있다.
제6 선택적 예시에 따르면, 상기 커밋하는 것은 세컨더리 트랜잭션 식별자를 블록체인의 블록 내의 생성 트랜잭션으로 커밋하는 것을 포함할 수 있는, 제4 또는 제5 예시에 따른 방법이 제공될 수 있다.
제7 선택적 예시에 따르면, 트랜잭션 해시 트리는 이진 해시 트리일 수 있고, 최하위 내부 계층의 각 내부 해시는 두 개의 상이한 리프 해시의 연결을 해시하여 생성되고, 각 내부 계층의 각 내부 해시는 하위 계층으로부터 두 개의 해시의 연결을 해시하여 생성되고, 최상위 내부 계층은 두 개의 내부 해시를 포함하는, 제1 내지 제6 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
해시 트리가 이진 해시 트리인 경우, 내부 해시의 각 집합은 단일 내부 해시로 구성된다.
제8 선택적 예시에 따르면, 방법은 질의하는 사용자에게 후보 데이터 필드에 대한 인증 경로를 전송하는 것을 포함할 수 있고, 인증 경로는 정렬된 해시 집합을 포함하며, 정렬된 해시 집합은 적어도 하나의 리프 해시 및 하나 이상의 내부 해시 집합을 포함하고, 각 내부 해시 집합은 트랜잭션 해시 트리의 내부 계층 중 각자의 것에 속하는, 제1 내지 제7 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
제9 선택적 예시에 따르면, 방법은 질의하는 당사자에게 후보 데이터 필드 또는 그 해시를 전송하지만 대상 트랜잭션의 적어도 하나의 다른 데이터 필드를 전송하지 않는 것을 포함할 수 있는, 제1 내지 제8 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
예를 들어, 동일한 노드가 후보 데이터 필드 및 세컨더리 트랜잭션 식별자 모두를 전송할 수 있다. 노드는 신뢰할 수 있는 노드일 수 있다.
일부 예에서, 질의하는 당사자에게 후보 필드만이 전송되고 대상 트랜잭션의 임의의 다른 데이터 필드는 전송되지 않을 수 있다.
제10 선택적 예시에 따르면, 데이터 필드의 집합은: i) 대상 트랜잭션의 입력 데이터를 포함하는 적어도 하나의 데이터 필드; ii) 대상 트랜잭션의 출력 데이터를 포함하는 적어도 하나의 데이터 필드; 및iii) 대상 트랜잭션의 비-입력 및 비-출력 데이터를 포함하는 적어도 하나의 데이터 필드를 포함할 수 있는, 제1 내지 제9 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
일부 예에서, 각 데이터 필드는 단지 하나의 유형의 데이터, 예를 들어 입력 데이터, 출력 데이터 또는 다른 데이터(즉 비-입력 & 비-출력 데이터)만을 포함할 수 있다.
제11 선택적 예시에 따르면, 데이터 필드의 집합은: i) 대상 트랜잭션의 스크립트 입력 데이터를 포함하는 적어도 하나의 데이터 필드; ii) 대상 트랜잭션의 비-스크립트 입력 데이터를 포함하는 적어도 하나의 데이터 필드; iii) 대상 트랜잭션의 스크립트 출력 데이터를 포함하는 적어도 하나의 데이터 필드; 및 iv) 대상 트랜잭션의 비-스크립트 출력 데이터를 포함하는 적어도 하나의 데이터 필드를 포함할 수 있는, 제1 내지 제10 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
제12 선택적 예시에 따르면, 대상 트랜잭션은 다중 입력에 대응하는 데이터를 포함할 수 있고, 데이터 필드 집합은, 입력 중 각각의 것에 대하여: 해당 입력의 스크립트 데이터를 포함하는 적어도 하나의 데이터 필드, 및 해당 입력의 비-스크립트 데이터를 포함하는 적어도 하나의 데이터 필드를 포함함; 및/또는 대상 트랜잭션은 다중 출력에 대응하는 데이터를 포함할 수 있고, 데이터 필드 집합은, 출력 중 각각의 것에 대하여: 해당 출력의 스크립트 데이터를 포함하는 적어도 하나의 데이터 필드, 및 해당 출력의 비-스크립트 데이터를 포함하는 적어도 하나의 데이터 필드를 포함함 중 하나 또는 모두인, 제1 내지 제11 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
제13 선택적 예시에 따르면, 데이터 필드 집합은: i) 하나 이상의 서명을 포함하는 적어도 하나의 데이터 필드; ii) 서명이 아닌 대상 트랜잭션의 스크립트 입력 데이터를 포함하는 적어도 하나의 데이터 필드; iii) 하나 이상의 공개 키 해시를 포함하는 적어도 하나의 데이터 필드; iv) 공개 키 해시가 아닌 대상 트랜잭션의 스크립트 출력 데이터를 포함하는 적어도 하나의 데이터 필드를 포함할 수 있는, 제1 내지 제12 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
제14 선택적 예시에 따르면, 데이터 필드 집합의 적어도 하나는 대상 트랜잭션의 프라이머리 트랜잭션 식별자(primary transaction identifier)를 포함할 수 있고, 및/또는 데이터 필드의 적어도 하나에는 대상 트랜잭션의 프라이머리 트랜잭션 식별자가 추가되는, 제1 내지 제13 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
일부 예에서, 각 데이터 필드에는 프라이머리 트랜잭션 식별자가 추가될 수 있다. 대안적으로, 프라이머리 트랜잭션 식별자를 포함하지 않는 각 데이터 필드에 프라이머리 트랜잭션 식별자가 추가될 수 있다.
제15 선택적 예시에 따르면, 프라이머리 트랜잭션 식별자는 대상 트랜잭션을 해시하여 생성될 수 있는, 제1 내지 제14 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
프라이머리 트랜잭션 식별자는 대상 트랜잭션의 이중 해시에 의해 생성될 수 있다.
제16 선택적 예시에 따르면, 상기 식별하는 것은 고정된 수의 데이터 필드 집합을 식별하는 것을 포함할 수 있는, 제1 내지 제15 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
제17 선택적 예시에 따르면, 상기 식별하는 것은 고정된 데이터량을 포함하는 데이터 필드 집합을 식별하는 것을 포함할 수 있는, 제1 내지 제15 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
제18 선택적 예시에 따르면, 대상 트랜잭션은 콘텐츠 데이터를 포함할 수 있으며, 후보 데이터 필드는 해당 콘텐츠 데이터의 적어도 일부를 포함하는, 제1 내지 제17 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
제19 선택적 예시에 따르면, 콘텐츠 데이터는 이미지 데이터; 사운드 데이터; 비디오 데이터; 및 텍스트 데이터 중 하나, 일부 또는 전부를 포함하는, 제1 내지 제18 예시 중 어느 하나에 따른 방법이 제공될 수 있다.
본원에 개시된 교시의 제20 예시에 따르면 하나 이상의 메모리 유닛을 포함하는 메모리; 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 메모리는 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 코드는 처리 장치 상일 때 제1 내지 제3 예시 중 어느 하나 및/또는 제8 내지 제19 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 장비가 제공된다.
본원에 개시된 교시의 제21 예시에 따르면 컴퓨터 판독 가능 스토리지 상에 구현되고, 컴퓨터 장비 상에서 실행될 때, 제1 내지 제3 예시 중 어느 하나 및/또는 제8 내지 제19 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 프로그램이 제공된다.
본원에 개시된 교시의 제22 예시에 따르면 하나 이상의 메모리 유닛을 포함하는 메모리; 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 메모리는 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 코드는 처리 장치 상일 때 제4 내지 제19 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 장비가 제공된다.
본원에 개시된 교시의 제23 예시에 따르면 컴퓨터 판독 가능 스토리지 상에 구현되고, 컴퓨터 장비 상에서 실행될 때, 제4 내지 제19 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 프로그램이 제공된다.
본원에 개시된 교시의 제24 예시에 따르면 블록체인의 블록 내의 대상 트랜잭션의 후보 세컨더리 트랜잭션 식별자가 특정 프로토콜에 따라 생성되었는지 여부를 검증하는 컴퓨터 구현 방법이 제공되며, 방법은 검증 사용자에 의해 수행되고: 후보 세컨더리 트랜잭션 식별자를 획득하는 것; 대상 트랜잭션의 데이터 필드 집합을 식별하는 것-각 데이터 필드는 트랜잭션의 각자의 데이터를 포함함; 트랜잭션 해시 트리를 생성하는 것-트랜잭션 해시 트리는: i) 복수의 리프 해시를 포함하는 리프 계층-각 데이터 필드는 각자의 리프 해시를 생성하도록 해시됨, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층-각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 세컨더리 트랜잭션 식별자를 포함하는 루트 계층- 세컨더리 트랜잭션 식별자는 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨-을 포함함; 및 세컨더리 트랜잭션 식별자가 후보 세컨더리 트랜잭션 식별자와 일치하는지 여부를 검증하는 것을 포함한다.
제25 선택적 예시에 따르면, 상기 획득하는 것은: 후보 세컨더리 트랜잭션 식별자를 블록체인 네트워크의 노드로부터 수신하는 것; 후보 세컨더리 트랜잭션 식별자를 블록체인 네트워크 외부의 노드로부터 수신하는 것; 및 후보 세컨더리 트랜잭션 식별자를 블록체인의 블록 내의 트랜잭션으로부터 추출하는 것 중 하나 이상을 포함할 수 있는, 제24 예시에 따른 방법이 제공될 수 있다.
본원에 개시된 교시의 제26 예시에 따르면 하나 이상의 메모리 유닛을 포함하는 메모리; 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 메모리는 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 코드는 처리 장치 상일 때 제24 및 제25 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 장비가 제공된다.
본원에 개시된 교시의 제27 예시에 따르면 컴퓨터 판독 가능 스토리지 상에 구현되고, 컴퓨터 장비 상에서 실행될 때, 제24 및 제25 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 프로그램이 제공된다.
본원에 개시된 교시의 제28 예시에 따르면 블록체인의 블록 내의 대상 트랜잭션이 후보 데이터 필드를 포함하는지 여부를 결정하는 컴퓨터 구현 방법이 제공되며, 방법은 질의하는 사용자에 의해 수행되고: 후보 리프 해시를 획득하는 것-후보 리프 해시는 후보 데이터 필드의 해시임; 대상 트랜잭션의 후보 세컨더리 트랜잭션 식별자를 획득하는 것-세컨더리 트랜잭션 식별자는 대상 트랜잭션의 데이터 필드 집합을 식별하는 것-각 데이터 필드는 트랜잭션의 각자의 데이터를 포함함, 및 트랜잭션 해시 트리를 생성하는 것-트랜잭션 해시 트리의 루트 계층은 세컨더리 트랜잭션 식별자를 포함함-에 의해 생성된 것임; 후보 데이터 필드에 대한 인증 경로를 획득하는 것-인증 경로는 정렬된 해시 집합을 포함하고, 정렬된 해시 집합은 적어도 하나의 리프 해시 및 하나 이상의 내부 해시 집합을 포함하고, 각 내부 해시 집합은 트랜잭션 해시 트리의 각자의 내부 계층에 속함; 및 획득한 후보 리프 해시, 획득한 후보 세컨더리 트랜잭션 식별자 및 후보 데이터 필드에 대한 획득한 인증 경로를 사용하여 해시 트리 증명을 수행하는 것-상기 수행하는 것은 세컨더리 트랜잭션 식별자를 생성함-을 포함하고; 상기 결정은 세컨더리 트랜잭션 식별자가 후보 세컨더리 트랜잭션 식별자와 일치하는지 여부에 기초한다.
일부 예에서, 후보 데이터 필드의 해시를 상기 획득하는 것은 후보 데이터 필드를 획득하는 것 및 상기 후보 데이터 필드를 해시하는 것을 포함할 수 있다. 대안적으로, 상기 획득하는 것은 예를 들어 기록 당사자 또는 다른 노드로부터 후보 데이터 필드의 해시를 수신하는 것을 포함할 수 있다.
제29 선택적 예시에 따르면, 해시 트리 증명을 상기 수행하는 것은: 후보 리프 해시와 정렬된 해시 집합 내의 적어도 하나의 리프 해시의 연결을 해시하는 것; 및 그런 다음, 이전 해시의 결과와 인증 경로 내의 하나 이상의 내부 해시 집합의 다음 것의 연결을 해시하는 과정을 하나 이상의 내부 해시 집합의 마지막 것이 이전 해시와 연결된 후에 해시될 때까지 반복하는 것을 포함할 수 있고, 세컨더리 트랜잭션 식별자는 최종 해시의 결과인, 제28 예시에 따른 방법이 제공될 수 있다.
제30 선택적 예시에 따르면, 후보 리프 해시를 상기 획득하는 것은: 후보 리프 해시를 수신하는 것; 또는 후보 데이터 필드를 수신하고 후보 데이터 필드를 해시하여 후보 리프 해시를 생성하는 것을 포함할 수 있는, 제28 또는 제29 예시에 따른 방법이 제공될 수 있다.
제31 선택적 예시에 따르면, 후보 세컨더리 트랜잭션 식별자를 상기 획득하는 것은: 후보 세컨더리 트랜잭션 식별자를 블록체인 네트워크의 노드로부터 수신하는 것; 후보 세컨더리 트랜잭션 식별자를 블록체인 네트워크 외부의 노드로부터 수신하는 것; 및 후보 세컨더리 트랜잭션 식별자를 블록체인의 블록 내의 트랜잭션으로부터 추출하는 것 중 적어도 하나를 포함할 수 있는, 제28 내지 제30예시 중 어느 하나에 따른 방법이 제공될 수 있다.
본원에 개시된 교시의 제32 예시에 따르면 하나 이상의 메모리 유닛을 포함하는 메모리; 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 메모리는 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 코드는 처리 장치 상일 때 제28 내지 제31 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 장비가 제공된다.
본원에 개시된 교시의 제33 예시에 따르면 컴퓨터 판독 가능 스토리지 상에 구현되고, 컴퓨터 장비 상에서 실행될 때, 제28 내지 제31 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 프로그램이 제공된다.
본원에 개시된 교시의 제34 예시에 따르면 블록체인의 블록의 세컨더리 블록 식별자(secondary block identifier)를 생성하는 컴퓨터 구현 방법이 제공되며, 블록은 트랜잭션 집합을 포함하고, 세컨더리 블록 식별자는 트랜잭션 집합이 후보 데이터 필드를 포함하는지 여부를 질의하는 사용자가 결정할 수 있게 하며; 방법은 생성 사용자에 의해 수행되고: 트랜잭션 집합 내의 각 트랜잭션에 대하여, 각자의 세컨더리 트랜잭션 식별자를 획득하는 것; 및 트랜잭션 집합 해시 트리를 생성하는 것을 포함하고, 트랜잭션 집합 해시 트리는: i) 복수의 리프 해시를 포함하는 리프 계층-각 리프 해시는 세컨더리 트랜잭션 식별자 중 각자의 것에 대응함, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층-각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 세컨더리 블록 식별자를 포함하는 루트 계층-세컨더리 블록 식별자는 하나 이상의 내부 계층 중 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨-을 포함한다.
프라이머리 블록 식별자는 또한 프라이머리 블록 머클 루트로 지칭될 수 있다. 세컨더리 블록 식별자는 또한 세컨더리 블록 머클 루트로 지칭될 수 있다.
제35 선택적 예시에 따르면, 방법이 세컨더리 블록 식별자를 블록체인의 블록 내로 포함하기 위한 트랜잭션으로 커밋하는 것; 세컨더리 블록 식별자를 블록체인의 블록 내로 포함하기 위한 생성 트랜잭션으로 커밋하는 것; 세컨더리 블록 식별자를 블록체인 네트워크의 노드로 전송하는 것; 및 세컨더리 트랜잭션 식별자를 생성 사용자의 컴퓨팅 장비의 메모리에 저장하는 것 중 하나, 일부 또는 전부를 포함할 수 있는, 제34 예시에 따른 방법이 제공될 수 있다.
일부 예에서, 블록 해시 트리 및/또는 트랜잭션 집합 해시 트리는 이진 해시 트리이다.
제36 선택적 예시에 따르면, 각자의 세컨더리 트랜잭션 식별자를 상기 획득하는 것은: 각자의 세컨더리 트랜잭션 식별자 중 하나, 일부 또는 전부를 생성하는 것; 각자의 세컨더리 트랜잭션 식별자 중 하나, 일부 또는 전부를 블록체인 네트워크의 노드로부터 수신하는 것; 각자의 세컨더리 트랜잭션 식별자 중 하나, 일부 또는 전부를 블록체인 네트워크 외부의 노드로부터 수신하는 것; 및 각자의 세컨더리 트랜잭션 식별자 중 하나, 일부 또는 전부를 블록체인의 블록 내의 적어도 하나의 트랜잭션으로부터 추출하는 것 중 하나 이상을 포함할 수 있는, 제34 또는 제35 예시에 따른 방법이 제공될 수 있다.
본원에 개시된 교시의 제37 예시에 따르면 하나 이상의 메모리 유닛을 포함하는 메모리; 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 메모리는 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 코드는 처리 장치 상일 때 제34 내지 제36 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 장비가 제공된다.
본원에 개시된 교시의 제38 예시에 따르면 컴퓨터 판독 가능 스토리지 상에 구현되고, 컴퓨터 장비 상에서 실행될 때, 제34 내지 제36 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 프로그램이 제공된다.
본원에 개시된 교시의 제39 예시에 따르면 블록체인의 블록 내의 트랜잭션 집합이 후보 데이터 필드를 포함하는지 여부를 질의하는 사용자가 결정할 수 있게 하는 컴퓨터 구현 방법이 제공되며, 방법은 커밋 사용자에 의해 수행되고: 트랜잭션 집합을 포함하는 블록의 세컨더리 블록 식별자를 획득하는 것; 및 세컨더리 블록 식별자를 블록체인의 블록 내로 포함하기 위한 트랜잭션으로 커밋하는 것을 포함하고, 세컨더리 블록 식별자는: 트랜잭션 집합 내의 각 트랜잭션에 대하여, 각자의 세컨더리 트랜잭션 식별자를 획득하는 것; 및 트랜잭션 집합 해시 트리를 생성하는 것에 의해 생성되었으며, 트랜잭션 집합 해시 트리는: i) 복수의 리프 해시를 포함하는 리프 계층-각 리프 해시는 세컨더리 트랜잭션 식별자 중 각자의 것에 대응함, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층-각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 세컨더리 블록 식별자를 포함하는 루트 계층-세컨더리 블록 식별자는 하나 이상의 내부 계층 중 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨-을 포함한다.
제40 선택적 예시에 따르면, 상기 커밋하는 것은 세컨더리 트랜잭션 식별자를 블록체인의 블록 내의 생성 트랜잭션으로 커밋하는 것을 포함할 수 있는, 제39 예시에 따른 방법이 제공될 수 있다.
제41 선택적 예시에 따르면, 방법이 트랜잭션 집합을 포함하는 블록의 프라이머리 블록 식별자(primary block identifier)를 획득하는 것; 및 세컨더리 트랜잭션 식별자를 블록체인의 블록의 생성 트랜잭션으로 커밋하는 것을 포함할 수 있고, 상기 프라이머리 블록 식별자는: 트랜잭션 집합 내의 각 트랜잭션에 대하여, 해당 트랜잭션을 해시하여 각자의 프라이머리 트랜잭션 식별자를 생성하는 것; 및 블록 해시 트리를 생성하는 것에 의해 생성되며, 블록 해시 트리는: i) 복수의 리프 해시를 포함하는 리프 계층-각 리프 해시는 프라이머리 트랜잭션 식별자 중 하나에 대응함, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층-각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 블록 식별자를 포함하는 루트 계층-블록 식별자는 하나 이상의 내부 계층 중 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨-을 포함하는, 제39 또는 제40예시에 따른 방법이 제공될 수 있다.
본원에 개시된 교시의 제42 예시에 따르면 하나 이상의 메모리 유닛을 포함하는 메모리; 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 메모리는 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 코드는 처리 장치 상일 때 제39 내지 내지 제41 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 장비가 제공된다.
본원에 개시된 교시의 제43 예시에 따르면 컴퓨터 판독 가능 스토리지 상에 구현되고, 컴퓨터 장비 상에서 실행될 때, 제39 내지 내지 제41 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 프로그램이 제공된다.
본원에 개시된 교시의 제44 예시에 따르면 블록체인의 블록의 후보 세컨더리 블록 식별자가 특정 프로토콜에 따라 생성되었는지 여부를 검증하는 컴퓨터 구현 방법이 제공되며, 블록은 트랜잭션 집합을 포함하고, 방법은 검증 사용자에 의해 수행되며: 후보 세컨더리 블록 식별자를 획득하는 것; 트랜잭션 집합 내의 각 트랜잭션에 대하여, 각자의 세컨더리 트랜잭션 식별자를 획득하는 것; 트랜잭션 집합 해시 트리를 생성하는 것-트랜잭션 집합 해시 트리는: i) 복수의 리프 해시를 포함하는 리프 계층-각 리프 해시는 세컨더리 트랜잭션 식별자 중 각자의 것에 대응함, ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층-각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및 iii) 세컨더리 블록 식별자를 포함하는 루트 계층-세컨더리 블록 식별자는 하나 이상의 내부 계층 중 최상위 내부 계층의 내부 해시의 연결을 해시하여 생성됨-을 포함함; 및 세컨더리 블록 식별자가 후보 세컨더리 블록 식별자와 일치하는지 여부를 검증하는 것을 포함한다.
제45 선택적 예시에 따르면, 상기 획득하는 것은: 후보 세컨더리 블록 식별자를 블록체인 네트워크의 노드로부터 수신하는 것; 후보 세컨더리 블록 식별자를 블록체인 네트워크 외부의 노드로부터 수신하는 것; 및 후보 세컨더리 블록 식별자를 블록체인의 블록의 트랜잭션으로부터 추출하는 것 중 하나 이상을 포함할 수 있는, 제44 예시에 따른 방법이 제공될 수 있다.
본원에 개시된 교시의 제46 예시에 따르면 하나 이상의 메모리 유닛을 포함하는 메모리; 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 메모리는 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 코드는 처리 장치 상일 때 제44 내지 제45 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 장비가 제공된다.
본원에 개시된 교시의 제47 예시에 따르면 컴퓨터 판독 가능 스토리지 상에 구현되고, 컴퓨터 장비 상에서 실행될 때, 제44 내지 제45 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 프로그램이 제공된다.
본원에 개시된 교시의 제48 예시에 따르면 블록체인의 블록이 후보 데이터 필드를 포함하는 대상 트랜잭션을 포함하는지 여부를 결정하는 컴퓨터 구현 방법이 제공되며, 블록은 상기 대상 트랜잭션을 포함하는 트랜잭션 집합을 포함하고, 방법은 질의하는 사용자에 의해 수행되며: i) 후보 리프 해시- 후보 리프 해시는 후보 데이터 필드의 해시임; ii) 대상 트랜잭션의 후보 세컨더리 트랜잭션 식별자 및 iii) 후보 데이터 필드에 대한 인증 경로를 획득하는 것; i), ii) 및 iii)을 사용하여 해시 트리 증명을 수행하여 세컨더리 트랜잭션 식별자를 생성하는 것; iv) 후보 세컨더리 블록 식별자 및 v) 후보 세컨더리 블록 식별자에 대한 인증 경로를 획득하는 것; iv), v) 및 생성된 세컨더리 트랜잭션 식별자를 사용하여 해시 트리 증명을 수행하여 세컨더리 블록 식별자를 생성하는 것; vi) 대상 트랜잭션의 후보 프라이머리 트랜잭션 식별자, vii) 트랜잭션 집합을 포함하는 블록의 후보 프라이머리 블록 식별자 및 viii) 프라이머리 블록 식별자에 대한 인증 경로를 획득하는 것; 및 vi), vii) 및 viii)을 사용하여 해시 트리 증명을 수행하여 프라이머리 블록 식별자를 생성하는 것을 포함하고; 상기 결정은: a) 생성된 세컨더리 트랜잭션 식별자가 후보 세컨더리 트랜잭션 식별자와 일치하는지, b) 생성된 세컨더리 블록 식별자가 후보 세컨더리 블록 식별자와 일치하는지, 및 c) 생성된 프라이머리 블록 식별자가 후보 프라이머리 블록 식별자와 일치하는지 여부에 기초한다.
제49 선택적 예시에 따르면, 상기 결정은 트랜잭션 집합을 포함하는 블록이 상기 후보 프라이머리 블록 식별자 및 상기 후보 세컨더리 블록 식별자를 포함하는지 여부에 더 기초할 수 있는, 제48 예시에 따른 방법이 제공될 수 있다.
본원에 개시된 교시의 제50 예시에 따르면 하나 이상의 메모리 유닛을 포함하는 메모리; 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 메모리는 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 코드는 처리 장치 상일 때 제48 내지 제49 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 장비가 제공된다.
본원에 개시된 교시의 제51 예시에 따르면 컴퓨터 판독 가능 스토리지 상에 구현되고, 컴퓨터 장비 상에서 실행될 때, 제48 내지 제49 예시 중 어느 하나의 방법을 수행하도록 구성되는 컴퓨터 프로그램이 제공된다.
본원에 개시된 다른 예시에 따르면, 생성 사용자, 질의하는 사용자, 관련될 수 있는 임의의 제3자 및 노드의 네트워크의 동작을 포함하는 방법이 제공될 수 있다.
본원에 개시된 다른 예시에 따르면, 생성 사용자의 컴퓨터 장비, 커밋 사용자의 컴퓨터 장비, 검증 사용자의 컴퓨터 장비, 질의하는 사용자의 컴퓨터 장비, 임의의 제3자의 컴퓨터 장비 및 노드 네트워크를 포함하는 시스템이 제공될 수 있다.
개시된 기술의 다른 변형 또는 사용 사례는 본원에서 개시가 주어지면 당업자에게 명백해질 수 있다. 개시의 범위는 설명된 실시예에 의해 제한되지 않고 첨부된 청구범위에 의해서만 제한된다.

Claims (51)

  1. 대상 트랜잭션(target transaction)의 세컨더리 트랜잭션 식별자(secondary transaction identifier)를 생성하는 컴퓨터 구현 방법에 있어서, 상기 세컨더리 트랜잭션 식별자는 상기 대상 트랜잭션이 후보 데이터 필드를 포함하는지 여부를 질의하는 사용자가 결정할 수 있게 하고; 상기 방법은 생성 사용자에 의해 수행되며:
    상기 대상 트랜잭션의 데이터 필드 집합을 식별하는 것 - 각 데이터 필드는 상기 트랜잭션의 각자의 데이터를 포함함;
    트랜잭션 해시 트리를 생성하는 것을 포함하고, 상기 트랜잭션 해시 트리는:
    i) 복수의 리프 해시를 포함하는 리프 계층 - 각 데이터 필드는 상기 복수의 리프 해시 중 각자의 것을 생성하도록 해시됨,
    ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 상기 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및
    iii) 상기 세컨더리 트랜잭션 식별자를 포함하는 루트 계층 - 상기 세컨더리 트랜잭션 식별자는 상기 하나 이상의 내부 계층 중 최상위 내부 계층의 상기 내부 해시의 연결을 해시하여 생성됨 - 을 포함하는 방법.
  2. 제1항에 있어서:
    상기 세컨더리 트랜잭션 식별자를 상기 블록체인의 블록 내로 포함하기 위한 트랜잭션으로 커밋(commit)하는 것;
    상기 세컨더리 트랜잭션 식별자를 상기 블록체인의 블록 내로 포함하기 위한 생성 트랜잭션으로 커밋하는 것;
    상기 세컨더리 트랜잭션 식별자를 블록체인 네트워크의 노드로 전송하는 것; 및
    상기 세컨더리 트랜잭션 식별자를 상기 생성 사용자의 컴퓨팅 장비의 메모리에 저장하는 것
    중 하나, 일부 또는 전부를 포함하는 방법.
  3. 제1항 또는 제2항에 있어서, 상기 세컨더리 트랜잭션 식별자를 상기 블록체인으로 커밋하는 것을 포함하는 방법.
  4. 블록체인의 블록 내의 대상 트랜잭션이 후보 데이터 필드를 포함하는지 여부를 질의하는 사용자가 결정할 수 있게 하는 컴퓨터 구현 방법에 있어서, 상기 방법은 커밋 사용자에 의해 수행되며:
    상기 대상 트랜잭션의 세컨더리 트랜잭션 식별자를 획득하는 것; 및
    상기 세컨더리 트랜잭션 식별자를 상기 블록체인의 블록 내로 포함하기 위한 트랜잭션으로 커밋하는 것을 포함하고,
    상기 세컨더리 트랜잭션 식별자는:
    상기 대상 트랜잭션의 데이터 필드 집합을 식별하는 것 - 각 데이터 필드는 상기 트랜잭션의 각자의 데이터를 포함함; 및
    트랜잭션 해시 트리를 생성하는 것에 의해 생성되었으며, 상기 트랜잭션 해시 트리는:
    i) 상기 데이터 필드의 정렬된 집합에 기초하여 정렬된 복수의 리프 해시를 포함하는 리프 계층 - 각 데이터 필드는 상기 복수의 리프 해시 중 각자의 것을 생성하도록 해시됨,
    ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 상기 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및
    iii) 상기 세컨더리 트랜잭션 식별자를 포함하는 루트 계층 - 상기 세컨더리 트랜잭션 식별자는 상기 하나 이상의 내부 계층 중 최상위 내부 계층의 상기 내부 해시의 연결을 해시하여 생성됨 - 을 포함하는 방법.
  5. 제4항에 있어서, 상기 획득하는 것은:
    상기 세컨더리 트랜잭션 식별자를 생성하는 것;
    상기 세컨더리 트랜잭션 식별자를 블록체인 네트워크의 노드로부터 수신하는 것;
    상기 세컨더리 트랜잭션 식별자를 상기 블록체인 네트워크 외부의 노드로부터 수신하는 것
    중 적어도 하나를 포함하는 방법.
  6. 제4항 또는 제5항에 있어서, 상기 커밋하는 것은 상기 세컨더리 트랜잭션 식별자를 상기 블록체인의 블록 내의 생성 트랜잭션으로 커밋하는 것을 포함하는 방법.
  7. 전술한 항 중 어느 한 항에 있어서, 상기 트랜잭션 해시 트리는 이진 해시 트리이고, 상기 최하위 내부 계층의 각 내부 해시는 두 개의 상이한 리프 해시의 연결을 해시하여 생성되고, 각 내부 계층의 각 내부 해시는 하위 계층으로부터 두 개의 해시의 연결을 해시하여 생성되고, 상기 최상위 내부 계층은 두 개의 내부 해시를 포함하는 방법.
  8. 전술한 항 중 어느 한 항에 있어서, 상기 질의하는 사용자에게 상기 후보 데이터 필드에 대한 인증 경로를 전송하는 것을 포함하고, 상기 인증 경로는 정렬된 해시 집합을 포함하며, 상기 정렬된 해시 집합은 적어도 하나의 리프 해시 및 하나 이상의 내부 해시 집합을 포함하고, 각 내부 해시 집합은 상기 트랜잭션 해시 트리의 상기 내부 계층 중 각자의 것에 속하는 방법.
  9. 전술한 항 중 어느 한 항에 있어서, 상기 질의하는 당사자에게 상기 후보 데이터 필드 또는 그 해시를 전송하지만 상기 대상 트랜잭션의 적어도 하나의 다른 데이터 필드를 전송하지 않는 것을 포함하는 방법.
  10. 전술한 항 중 어느 한 항에 있어서, 상기 데이터 필드 집합은:
    i) 상기 대상 트랜잭션의 입력 데이터를 포함하는 적어도 하나의 데이터 필드;
    ii) 상기 대상 트랜잭션의 출력 데이터를 포함하는 적어도 하나의 데이터 필드; 및
    iii) 상기 대상 트랜잭션의 비-입력 및 비-출력 데이터를 포함하는 적어도 하나의 데이터 필드를 포함하는 방법.
  11. 전술한 항 중 어느 한 항에 있어서, 상기 데이터 필드 집합은:
    i) 상기 대상 트랜잭션의 스크립트 입력 데이터를 포함하는 적어도 하나의 데이터 필드;
    ii) 상기 대상 트랜잭션의 비-스크립트 입력 데이터를 포함하는 적어도 하나의 데이터 필드;
    iii) 상기 대상 트랜잭션의 스크립트 출력 데이터를 포함하는 적어도 하나의 데이터 필드; 및
    iv) 상기 대상 트랜잭션의 비-스크립트 출력 데이터를 포함하는 적어도 하나의 데이터 필드를 포함하는 방법.
  12. 전술한 항 중 어느 한 항에 있어서,
    상기 대상 트랜잭션은 다중 입력에 대응하는 데이터를 포함하고, 상기 데이터 필드 집합은, 상기 입력 중 각각의 것에 대하여: 해당 입력의 스크립트 데이터를 포함하는 적어도 하나의 데이터 필드, 및 해당 입력의 비-스크립트 데이터를 포함하는 적어도 하나의 데이터 필드를 포함함; 및/또는
    상기 대상 트랜잭션은 다중 출력에 대응하는 데이터를 포함하고, 상기 데이터 필드 집합은, 상기 출력 중 각각의 것에 대하여: 해당 출력의 스크립트 데이터를 포함하는 적어도 하나의 데이터 필드, 및 해당 출력의 비-스크립트 데이터를 포함하는 적어도 하나의 데이터 필드를 포함함;
    중 하나 또는 모두인 방법.
  13. 전술한 항 중 어느 한 항에 있어서, 상기 데이터 필드 집합은:
    i) 하나 이상의 서명을 포함하는 적어도 하나의 데이터 필드;
    ii) 서명이 아닌 상기 대상 트랜잭션의 스크립트 입력 데이터를 포함하는 적어도 하나의 데이터 필드;
    iii) 하나 이상의 공개 키 해시를 포함하는 적어도 하나의 데이터 필드;
    iv) 공개 키 해시가 아닌 상기 대상 트랜잭션의 스크립트 출력 데이터를 포함하는 적어도 하나의 데이터 필드를 포함하는 방법.
  14. 전술한 항 중 어느 한 항에 있어서, 상기 데이터 필드 집합의 적어도 하나는 상기 대상 트랜잭션의 프라이머리 트랜잭션 식별자(primary transaction identifier)를 포함하고, 및/또는 상기 데이터 필드의 적어도 하나에는 상기 대상 트랜잭션의 상기 프라이머리 트랜잭션 식별자가 추가되는 방법.
  15. 제14항에 있어서, 상기 프라이머리 트랜잭션 식별자는 상기 대상 트랜잭션을 해시하여 생성되는 방법.
  16. 전술한 항 중 어느 한 항에 있어서, 상기 식별하는 것은 고정된 수의 데이터 필드 집합을 식별하는 것을 포함하는 방법.
  17. 제1항 내지 제15항 중 어느 한 항에 있어서, 상기 식별하는 것은 각각 고정된 데이터량을 포함하는 데이터 필드 집합을 식별하는 것을 포함하는 방법.
  18. 전술한 항 중 어느 한 항에 있어서, 상기 대상 트랜잭션은 콘텐츠 데이터를 포함하며, 상기 후보 데이터 필드는 해당 콘텐츠 데이터의 적어도 일부를 포함하는 방법.
  19. 제18항에 있어서, 상기 콘텐츠 데이터는:
    - 이미지 데이터;
    - 사운드 데이터;
    - 비디오 데이터; 및
    - 텍스트 데이터
    중 하나, 일부 또는 전부를 포함하는 방법.
  20. 하나 이상의 메모리 유닛을 포함하는 메모리; 및
    하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 상기 메모리는 상기 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 상기 코드는 상기 처리 장치 상일 때 제1항 내지 제3항 및/또는 제8항 내지 제19항 중 어느 한 항의 방법을 수행하도록 구성되는 생성 사용자의 컴퓨터 장비.
  21. 컴퓨터 판독 가능 스토리지 상에 구현되고, 생성 사용자의 컴퓨터 장비 상에서 실행될 때, 제1항 내지 제3항 및/또는 제8항 내지 제19항 중 어느 한 항의 방법을 수행하도록 구성되는 컴퓨터 프로그램.
  22. 하나 이상의 메모리 유닛을 포함하는 메모리; 및
    하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 상기 메모리는 상기 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 상기 코드는 상기 처리 장치 상일 때 제4항 내지 제19항 중 어느 한 항의 방법을 수행하는 청구항의 방법을 수행하도록 구성되는 커밋 사용자의 컴퓨터 장비.
  23. 컴퓨터 판독 가능 스토리지 상에 구현되고, 커밋 사용자의 컴퓨터 장비 상에서 실행될 때, 제4항 내지 제19항 중 어느 한 항의 방법을 수행하도록 구성되는 컴퓨터 프로그램.
  24. 블록체인의 블록 내의 대상 트랜잭션의 후보 세컨더리 트랜잭션 식별자가 특정 프로토콜에 따라 생성되었는지 여부를 검증하는 컴퓨터 구현 방법에 있어서, 상기 방법은 검증 사용자에 의해 수행되며:
    상기 후보 세컨더리 트랜잭션 식별자를 획득하는 것;
    상기 대상 트랜잭션의 데이터 필드 집합을 식별하는 것 - 각 데이터 필드는 상기 트랜잭션의 각자의 데이터를 포함함;
    트랜잭션 해시 트리를 생성하는 것 - 상기 트랜잭션 해시 트리는:
    i) 복수의 리프 해시를 포함하는 리프 계층 - 각 데이터 필드는 각자의 리프 해시를 생성하도록 해시됨,
    ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및
    iii) 세컨더리 트랜잭션 식별자를 포함하는 루트 계층 - 상기 세컨더리 트랜잭션 식별자는 최상위 내부 계층의 상기 내부 해시의 연결을 해시하여 생성됨-을 포함함; 및
    상기 세컨더리 트랜잭션 식별자가 상기 후보 세컨더리 트랜잭션 식별자와 일치하는지 여부를 검증하는 것을 포함하는 방법.
  25. 제24항에 있어서, 상기 획득하는 것은:
    상기 후보 세컨더리 트랜잭션 식별자를 블록체인 네트워크의 노드로부터 수신하는 것;
    상기 후보 세컨더리 트랜잭션 식별자를 상기 블록체인 네트워크 외부의 노드로부터 수신하는 것; 및
    상기 후보 세컨더리 트랜잭션 식별자를 상기 블록체인의 블록 내의 트랜잭션으로부터 추출하는 것
    중 하나 이상을 포함하는 방법.
  26. 하나 이상의 메모리 유닛을 포함하는 메모리; 및
    하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 상기 메모리는 상기 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 상기 코드는 상기 처리 장치 상일 때 제24항 및 제25항 중 어느 한 항의 방법을 수행하는 청구항의 방법을 수행하도록 구성되는 검증 사용자의 컴퓨터 장비.
  27. 컴퓨터 판독 가능 스토리지 상에 구현되고, 검증 사용자의 컴퓨터 장비 상에서 실행될 때, 제24항 및 제25항 중 어느 한 항의 방법을 수행하도록 구성되는 컴퓨터 프로그램.
  28. 블록체인의 블록 내의 대상 트랜잭션이 후보 데이터 필드를 포함하는지 여부를 결정하는 컴퓨터 구현 방법에 있어서, 상기 방법은 질의하는 사용자에 의해 수행되며:
    후보 리프 해시를 획득하는 것 - 상기 후보 리프 해시는 상기 후보 데이터 필드의 해시임;
    상기 대상 트랜잭션의 후보 세컨더리 트랜잭션 식별자를 획득하는 것 - 세컨더리 트랜잭션 식별자는 상기 대상 트랜잭션의 데이터 필드 집합을 식별하는 것 - 각 데이터 필드는 상기 트랜잭션의 각자의 데이터를 포함함, 및 트랜잭션 해시 트리를 생성하는 것 - 상기 트랜잭션 해시 트리의 루트 계층은 상기 세컨더리 트랜잭션 식별자를 포함함 - 에 의해 생성된 것임;
    상기 후보 데이터 필드에 대한 인증 경로를 획득하는 것 - 상기 인증 경로는 정렬된 해시 집합을 포함하고, 상기 정렬된 해시 집합은 적어도 하나의 리프 해시 및 하나 이상의 내부 해시 집합을 포함하고, 각 내부 해시 집합은 상기 트랜잭션 해시 트리의 각자의 내부 계층에 속함; 및
    상기 획득한 후보 리프 해시, 상기 획득한 후보 세컨더리 트랜잭션 식별자 및 상기 후보 데이터 필드에 대한 상기 획득한 인증 경로를 사용하여 해시 트리 증명을 수행하는 것 - 상기 수행하는 것은 세컨더리 트랜잭션 식별자를 생성함 - 을 포함하고;
    상기 결정은 상기 세컨더리 트랜잭션 식별자가 상기 후보 세컨더리 트랜잭션 식별자와 일치하는지 여부에 기초하는 방법.
  29. 제28항에 있어서, 상기 해시 트리 증명을 상기 수행하는 것은:
    상기 후보 리프 해시와 상기 정렬된 해시 집합 내의 적어도 하나의 리프 해시의 연결을 해시하는 것; 및
    그런 다음, 이전 해시의 결과와 상기 인증 경로 내의 상기 하나 이상의 내부 해시 집합의 다음 것의 연결을 해시하는 과정을 상기 하나 이상의 내부 해시 집합의 마지막 것이 상기 이전 해시와 연결된 후에 해시될 때까지 반복하는 것을 포함하고, 상기 세컨더리 트랜잭션 식별자는 최종 해시의 결과인 방법.
  30. 제28항 또는 제29항에 있어서, 상기 후보 리프 해시를 상기 획득하는 것은:
    상기 후보 리프 해시를 수신하는 것; 또는
    상기 후보 리프 해시를 생성하기 위해 상기 후보 데이터 필드를 수신하고 상기 후보 데이터 필드를 해시하는 것을 포함하는 방법.
  31. 제28항 내지 제30항 중 어느 한 항에 있어서, 상기 후보 세컨더리 트랜잭션 식별자를 상기 획득하는 것은:
    상기 세컨더리 트랜잭션 식별자를 상기 블록체인 네트워크의 노드로부터 수신하는 것;
    상기 세컨더리 트랜잭션 식별자를 상기 블록체인 네트워크 외부의 노드로부터 수신하는 것; 및
    상기 세컨더리 트랜잭션 식별자를 상기 블록체인의 블록 내의 트랜잭션으로부터 추출하는 것
    중 적어도 하나를 포함하는 방법.
  32. 하나 이상의 메모리 유닛을 포함하는 메모리; 및
    하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 상기 메모리는 상기 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 상기 코드는 상기 처리 장치 상일 때 제28항 내지 제31항 중 어느 한 항의 방법을 수행하는 청구항의 방법을 수행하도록 구성되는 질의하는 사용자의 컴퓨터 장비.
  33. 컴퓨터 판독 가능 스토리지 상에 구현되고, 질의하는 사용자의 컴퓨터 장비 상에서 실행될 때, 제28항 내지 제31항 중 어느 한 항의 방법을 수행하도록 구성되는 컴퓨터 프로그램.
  34. 블록체인의 블록의 세컨더리 블록 식별자(secondary block identifier)를 생성하는 컴퓨터 구현 방법에 있어서, 상기 블록은 트랜잭션 집합을 포함하고, 상기 세컨더리 블록 식별자는 상기 트랜잭션 집합이 후보 데이터 필드를 포함하는지 여부를 질의하는 사용자가 결정할 수 있게 하며; 상기 방법은 생성 사용자에 의해 수행되고:
    상기 트랜잭션 집합 내의 각 트랜잭션에 대하여, 각자의 세컨더리 트랜잭션 식별자를 획득하는 것; 및
    트랜잭션 집합 해시 트리를 생성하는 것을 포함하고, 상기 트랜잭션 집합 해시 트리는:
    i) 복수의 리프 해시를 포함하는 리프 계층 - 각 리프 해시는 상기 세컨더리 트랜잭션 식별자 중 각자의 것에 대응함,
    ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 상기 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및
    iii) 상기 세컨더리 블록 식별자를 포함하는 루트 계층 - 상기 세컨더리 블록 식별자는 상기 하나 이상의 내부 계층 중 최상위 내부 계층의 상기 내부 해시의 연결을 해시하여 생성됨 - 을 포함하는 방법.
  35. 제34항에 있어서:
    상기 세컨더리 블록 식별자를 상기 블록체인의 블록 내로 포함하기 위한 트랜잭션으로 커밋하는 것;
    상기 세컨더리 블록 식별자를 상기 블록체인의 블록 내로 포함하기 위한 생성 트랜잭션으로 커밋하는 것;
    상기 세컨더리 블록 식별자를 블록체인 네트워크의 노드로 전송하는 것; 및
    상기 세컨더리 트랜잭션 식별자를 상기 생성 사용자의 컴퓨팅 장비의 메모리에 저장하는 것
    중 하나, 일부 또는 전부를 포함하는 방법.
  36. 제34항 또는 제35항에 있어서, 상기 각자의 세컨더리 트랜잭션 식별자를 상기 획득하는 것은:
    상기 각자의 세컨더리 트랜잭션 식별자 중 하나, 일부 또는 전부를 생성하는 것;
    상기 각자의 세컨더리 트랜잭션 식별자 중 하나, 일부 또는 전부를 상기 블록체인 네트워크의 노드로부터 수신하는 것;
    상기 각자의 세컨더리 트랜잭션 식별자 중 하나, 일부 또는 전부를 상기 블록체인 네트워크 외부의 노드로부터 수신하는 것; 및
    상기 각자의 세컨더리 트랜잭션 식별자 중 하나, 일부 또는 전부를 상기 블록체인의 블록 내의 적어도 하나의 트랜잭션으로부터 추출하는 것
    중 하나 이상을 포함하는 방법.
  37. 하나 이상의 메모리 유닛을 포함하는 메모리; 및
    하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 상기 메모리는 상기 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 상기 코드는 상기 처리 장치 상일 때 제34항 내지 제36항 중 어느 한 항의 방법을 수행하는 청구항의 방법을 수행하도록 구성되는 생성 사용자의 컴퓨터 장비.
  38. 컴퓨터 판독 가능 스토리지 상에 구현되고, 생성 사용자의 컴퓨터 장비 상에서 실행될 때, 제34항 내지 제36항 중 어느 한 항의 방법을 수행하도록 구성되는 컴퓨터 프로그램.
  39. 블록체인의 블록 내의 트랜잭션 집합이 후보 데이터 필드를 포함하는지 여부를 질의하는 사용자가 결정할 수 있게 하는 컴퓨터 구현 방법에 있어서, 상기 방법은 커밋 사용자에 의해 수행되며:
    상기 트랜잭션 집합을 포함하는 상기 블록의 세컨더리 블록 식별자를 획득하는 것; 및
    상기 세컨더리 블록 식별자를 상기 블록체인의 블록 내로 포함하기 위한 트랜잭션으로 커밋하는 것을 포함하고,
    상기 세컨더리 블록 식별자는:
    상기 트랜잭션 집합 내의 각 트랜잭션에 대하여, 각자의 세컨더리 트랜잭션 식별자를 획득하는 것; 및
    트랜잭션 집합 해시 트리를 생성하는 것에 의해 생성되었으며, 상기 트랜잭션 집합 해시 트리는:
    i) 복수의 리프 해시를 포함하는 리프 계층 - 각 리프 해시는 상기 세컨더리 트랜잭션 식별자 중 각자의 것에 대응함,
    ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 상기 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및
    iii) 상기 세컨더리 블록 식별자를 포함하는 루트 계층 - 상기 세컨더리 블록 식별자는 상기 하나 이상의 내부 계층 중 최상위 내부 계층의 상기 내부 해시의 연결을 해시하여 생성됨 - 을 포함하는 방법.
  40. 제39항에 있어서, 상기 커밋하는 것은 상기 세컨더리 트랜잭션 식별자를 상기 블록체인의 블록 내의 생성 트랜잭션으로 커밋하는 것을 포함하는 방법.
  41. 제39항 또는 제40항에 있어서:
    상기 트랜잭션 집합을 포함하는 상기 블록의 프라이머리 블록 식별자(primary block identifier)를 획득하는 것; 및
    상기 세컨더리 트랜잭션 식별자를 상기 블록체인의 상기 블록의 상기 생성 트랜잭션으로 커밋하는 것을 포함하고,
    상기 프라이머리 블록 식별자는:
    상기 트랜잭션 집합 내의 각 트랜잭션에 대하여, 해당 트랜잭션을 해시하여 각자의 프라이머리 트랜잭션 식별자를 생성하는 것; 및
    블록 해시 트리를 생성하는 것에 의해 생성되며, 상기 블록 해시 트리는:
    i) 복수의 리프 해시를 포함하는 리프 계층 - 각 리프 해시는 상기 프라이머리 트랜잭션 식별자 중 하나에 대응함,
    ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 상기 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및
    iii) 상기 블록 식별자를 포함하는 루트 계층 - 상기 블록 식별자는 상기 하나 이상의 내부 계층 중 최상위 내부 계층의 상기 내부 해시의 연결을 해시하여 생성됨 - 을 포함하는 방법.
  42. 하나 이상의 메모리 유닛을 포함하는 메모리; 및
    하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 상기 메모리는 상기 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 상기 코드는 상기 처리 장치 상일 때 제39항 내지 제41항 중 어느 한 항의 방법을 수행하는 청구항의 방법을 수행하도록 구성되는 커밋 사용자의 컴퓨터 장비.
  43. 컴퓨터 판독 가능 스토리지 상에 구현되고, 커밋 사용자의 컴퓨터 장비 상에서 실행될 때, 제39항 내지 제41항 중 어느 한 항의 방법을 수행하도록 구성되는 컴퓨터 프로그램.
  44. 블록체인의 블록의 후보 세컨더리 블록 식별자가 특정 프로토콜에 따라 생성되었는지 여부를 검증하는 컴퓨터 구현 방법에 있어서, 상기 블록은 트랜잭션 집합을 포함하고, 상기 방법은 검증 사용자에 의해 수행되며:
    상기 후보 세컨더리 블록 식별자를 획득하는 것;
    상기 트랜잭션 집합 내의 각 트랜잭션에 대하여, 각자의 세컨더리 트랜잭션 식별자를 획득하는 것;
    트랜잭션 집합 해시 트리를 생성하는 것 - 상기 트랜잭션 집합 해시 트리는:
    i) 복수의 리프 해시를 포함하는 리프 계층 - 각 리프 해시는 상기 세컨더리 트랜잭션 식별자 중 각자의 것에 대응함,
    ii) 각각 복수의 내부 해시를 포함하는 하나 이상의 내부 계층 - 각 내부 계층의 각 내부 해시는 하위 계층으로부터 적어도 두 개의 해시의 연결을 해시하여 생성되고, 상기 하나 이상의 내부 계층 중 최하위 내부 계층의 각 내부 해시는 적어도 두 개의 상이한 리프 해시의 연결을 해시하여 생성됨, 및
    iii) 상기 세컨더리 블록 식별자를 포함하는 루트 계층 - 상기 세컨더리 블록 식별자는 상기 하나 이상의 내부 계층 중 최상위 내부 계층의 상기 내부 해시의 연결을 해시하여 생성됨 - 을 포함함; 및
    상기 세컨더리 블록 식별자가 상기 후보 세컨더리 블록 식별자와 일치하는지 여부를 검증하는 것을 포함하는 방법.
  45. 제44항에 있어서, 상기 획득하는 것은:
    상기 후보 세컨더리 블록 식별자를 상기 블록체인 네트워크의 노드로부터 수신하는 것;
    상기 후보 세컨더리 블록 식별자를 상기 블록체인 네트워크 외부의 노드로부터 수신하는 것; 및
    상기 후보 세컨더리 블록 식별자를 상기 블록체인의 블록의 트랜잭션으로부터 추출하는 것
    중 하나 이상을 포함하는 방법.
  46. 하나 이상의 메모리 유닛을 포함하는 메모리; 및
    하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 상기 메모리는 상기 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 상기 코드는 상기 처리 장치 상일 때 제44항 및 제45항 중 어느 한 항의 방법을 수행하는 청구항의 방법을 수행하도록 구성되는 검증 사용자의 컴퓨터 장비.
  47. 컴퓨터 판독 가능 스토리지 상에 구현되고, 검증 사용자의 컴퓨터 장비 상에서 실행될 때, 제44항 및 제45항 중 어느 한 항의 방법을 수행하도록 구성되는 컴퓨터 프로그램.
  48. 블록체인의 블록이 후보 데이터 필드를 포함하는 대상 트랜잭션을 포함하는지 여부를 결정하는 컴퓨터 구현 방법에 있어서, 상기 블록은 상기 대상 트랜잭션을 포함하는 트랜잭션 집합을 포함하고, 상기 방법은 질의하는 사용자에 의해 수행되며:
    i) 후보 리프 해시 - 상기 후보 리프 해시는 상기 후보 데이터 필드의 해시임; ii) 상기 대상 트랜잭션의 후보 세컨더리 트랜잭션 식별자 및 iii) 상기 후보 데이터 필드에 대한 인증 경로를 획득하는 것;
    세컨더리 트랜잭션 식별자를 생성하기 위해 i), ii) 및 iii)을 사용하여 해시 트리 증명을 수행하는 것;
    iv) 후보 세컨더리 블록 식별자 및 v) 상기 후보 세컨더리 블록 식별자에 대한 인증 경로를 획득하는 것;
    세컨더리 블록 식별자를 생성하기 위해 iv), v) 및 상기 생성된 세컨더리 트랜잭션 식별자를 사용하여 해시 트리 증명을 수행하는 것;
    vi) 상기 대상 트랜잭션의 후보 프라이머리 트랜잭션 식별자, vii) 상기 트랜잭션 집합을 포함하는 상기 블록의 후보 프라이머리 블록 식별자 및 viii) 상기 프라이머리 블록 식별자에 대한 인증 경로를 획득하는 것; 및
    프라이머리 블록 식별자를 생성하기 위해 vi), vii) 및 viii)을 사용하여 해시 트리 증명을 수행하는 것을 포함하고;
    상기 결정은: a) 상기 생성된 세컨더리 트랜잭션 식별자가 상기 후보 세컨더리 트랜잭션 식별자와 일치하는지, b) 상기 생성된 세컨더리 블록 식별자가 상기 후보 세컨더리 블록 식별자와 일치하는지, 및 c) 상기 생성된 프라이머리 블록 식별자가 상기 후보 프라이머리 블록 식별자와 일치하는지 여부에 기초하는 방법.
  49. 제48항에 있어서, 상기 결정은 상기 트랜잭션 집합을 포함하는 상기 블록이 상기 후보 프라이머리 블록 식별자 및 상기 후보 세컨더리 블록 식별자를 포함하는지 여부에 더 기초하는 방법.
  50. 하나 이상의 메모리 유닛을 포함하는 메모리; 및
    하나 이상의 처리 유닛을 포함하는 처리 장치를 포함하고, 상기 메모리는 상기 처리 장치 상에서 실행되도록 배열된 코드를 저장하고, 상기 코드는 상기 처리 장치 상일 때 제48항 내지 제49항 중 어느 한 항의 방법을 수행하는 청구항의 방법을 수행하도록 구성되는 질의하는 사용자의 컴퓨터 장비.
  51. 컴퓨터 판독 가능 스토리지 상에 구현되고, 질의하는 사용자의 컴퓨터 장비 상에서 실행될 때, 제48항 내지 제49항 중 어느 한 항의 방법을 수행하도록 구성되는 컴퓨터 프로그램.
KR1020217042550A 2019-05-24 2020-04-22 블록체인 트랜잭션의 데이터 필드의 검증 KR20220012353A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1907349.3 2019-05-24
GBGB1907349.3A GB201907349D0 (en) 2019-05-24 2019-05-24 Verification of data fields of blockchain transactions
PCT/IB2020/053813 WO2020240296A1 (en) 2019-05-24 2020-04-22 Verification of data fields of blockchain transactions

Publications (1)

Publication Number Publication Date
KR20220012353A true KR20220012353A (ko) 2022-02-03

Family

ID=67385545

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217042550A KR20220012353A (ko) 2019-05-24 2020-04-22 블록체인 트랜잭션의 데이터 필드의 검증

Country Status (8)

Country Link
US (1) US20220216997A1 (ko)
EP (1) EP3966996A1 (ko)
JP (1) JP2022533355A (ko)
KR (1) KR20220012353A (ko)
CN (1) CN113924747A (ko)
GB (1) GB201907349D0 (ko)
SG (1) SG11202112019PA (ko)
WO (1) WO2020240296A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11528146B1 (en) 2019-12-10 2022-12-13 Hiro Systems Pbc Fork table of an authenticated index data structure
CN111144887A (zh) * 2019-12-20 2020-05-12 辽宁振兴银行股份有限公司 一种区块链共享数据的保护方法
CN111539816B (zh) * 2020-02-19 2022-07-15 杭州溪塔科技有限公司 一种区块链中确定交易标识的方法、装置和电子设备
CN112765420A (zh) * 2021-01-13 2021-05-07 湖北宸威玺链信息技术有限公司 基于区块链的错误字段数据处理方法及系统及装置及介质
GB202101589D0 (en) * 2021-02-05 2021-03-24 Nchain Holdings Ltd Blockchain tree structure
GB202104312D0 (en) * 2021-03-26 2021-05-12 Nchain Licensing Ag Computer-implemented method & system
US20220029814A1 (en) * 2021-06-02 2022-01-27 Fujitsu Limited Non-transitory computer-readable storage medium, information processing method, and information processing apparatus
US11902426B2 (en) * 2021-06-26 2024-02-13 Ceremorphic, Inc. Efficient storage of blockchain in embedded device
US11854009B2 (en) * 2021-10-07 2023-12-26 Chia Network Inc. Method for pooling in a proof-of-space-based blockchain via singletons
US20230119482A1 (en) * 2021-10-15 2023-04-20 Chia Network Inc. Method for securing private structured databases within a public blockchain
US20230410212A1 (en) * 2022-05-27 2023-12-21 Intuit Inc. Matching validation

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101637868B1 (ko) * 2016-02-22 2016-07-08 주식회사 코인플러그 블록체인을 기반으로 하는 금융기관 제증명서류 위변조 검증시스템 및 방법
EP3593487B1 (en) * 2017-03-10 2021-04-28 Visa International Service Association Compact recordation protocol
US11387981B2 (en) * 2018-02-13 2022-07-12 Accenture Global Solutions Limited Platform for multi-party digital records using distributed ledger system

Also Published As

Publication number Publication date
CN113924747A (zh) 2022-01-11
SG11202112019PA (en) 2021-12-30
US20220216997A1 (en) 2022-07-07
EP3966996A1 (en) 2022-03-16
WO2020240296A1 (en) 2020-12-03
GB201907349D0 (en) 2019-07-10
JP2022533355A (ja) 2022-07-22

Similar Documents

Publication Publication Date Title
KR20220012353A (ko) 블록체인 트랜잭션의 데이터 필드의 검증
CN110869967B (zh) 用于并行处理区块链交易的系统和方法
US20220148111A1 (en) Method of using a blockchain
US20220278859A1 (en) Digital contracts using blockchain transactions
US20230066711A1 (en) Attestation service for use with a blockchain network
KR20220123221A (ko) 효율적인 데이터 검증을 위한 데이터 구조
KR20230101883A (ko) 머클 증명 엔티티
US20220309504A1 (en) Multi-criteria blockchain protocol
US20230394063A1 (en) Merkle proof entity
US20240171407A1 (en) Improved methods &amp; systems for signature verification in blockchain-implemented data applications
US20240121118A1 (en) Blockchain tree structure
WO2023057149A1 (en) Redacting content from blockchain transactions
CN117121440A (zh) 统一资源标识符
WO2023180486A1 (en) Ordered, append-only data storage
WO2022248130A1 (en) Partial sha-based hash function
WO2023031368A1 (en) A computer implemented method and system
GB2606194A (en) Methods and devices for pruning stored merkle tree data
GB2606196A (en) Subtree-based storage and retrieval of merkle tree data
CN117693926A (zh) 区块链区块和存在证明