KR20220140775A - 분산형 데이터베이스 - Google Patents

분산형 데이터베이스 Download PDF

Info

Publication number
KR20220140775A
KR20220140775A KR1020227031122A KR20227031122A KR20220140775A KR 20220140775 A KR20220140775 A KR 20220140775A KR 1020227031122 A KR1020227031122 A KR 1020227031122A KR 20227031122 A KR20227031122 A KR 20227031122A KR 20220140775 A KR20220140775 A KR 20220140775A
Authority
KR
South Korea
Prior art keywords
node
database
nodes
transaction
core
Prior art date
Application number
KR1020227031122A
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 KR20220140775A publication Critical patent/KR20220140775A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2358Change logging, detection, and notification
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2471Distributed queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • 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
    • 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/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3297Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving time stamps, e.g. generation of time stamps
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/56Financial cryptography, e.g. electronic payment or e-cash

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

방법은 계층화된 네트워크에서 수행된다. 계층화된 네트워크는 하나 이상의 코어 노드를 포함하는 코어 계층, 각각 하나 이상의 중간 계층 노드를 포함하는 하나 이상의 중간 계층, 및 각각 하나 이상의 외부 계층 노드를 포함하는 하나 이상의 외부 계층을 포함한다. 각각의 코어 노드는 블록체인 네트워크의 노드이다. 적어도 일부 중간 계층 노드는 데이터베이스 노드이다. 적어도 일부 외부 계층 노드는 클라이언트 노드이다. 각각의 데이터베이스 노드는 분산형 데이터베이스 중 적어도 일부를 저장한다. 방법은 하나 이상의 클라이언트 노드로부터 데이터베이스 엔트리를 업데이트하라고 요청하는 하나 이상의 업데이트 요청을 수신하는 단계; 및 각각의 업데이트 요청에 대해, 업레이트를 로컬적으로 적용하고 그리고/또는 다른 데이터베이스 노드에 포워딩하는 단계를 포함한다. 하나 이상의 업데이트 요청의 표시를 포함하는 적어도 하나의 트랜잭션이 또한 블록체인 네트워크의 블록체인에 기록된다.

Description

분산형 데이터베이스
본 개시는 상태 변화를 데이터베이스에 기록하기 위해 블록체인과 연동하여 구현된 분산형 데이터베이스에 관한 것이다.
블록체인은 분산 데이터 구조의 형태를 지칭하며, 여기에서 블록체인의 복제본이 피어-투-피어(Peer-to-Peer; P2P) 네트워크의 복수의 노드 각각에서 유지된다. 블록체인은 데이터의 블록들의 체인을 포함하며, 각각의 블록은 하나 이상의 트랜잭션들을 포함한다. 각각의 트랜잭션은 하나 이상 블록들에 걸쳐 있을 수 있는 시퀀스에서 선행 트랜잭션을 뒤로 가리킬 수 있다. 트랜잭션들은 새로운 블록들에 포함되도록 네트워크에 제출될 수 있다. 새로운 블록들은 "채굴"로 알려진 프로세스에 의해 생성되고, 이는 복수의 채굴 노드들 각각이 "작업 증명(proof-of-work)", 즉 블록들에 포함되기를 기다리는 보류 중인 트랜잭션들의 풀에 기초하여 암호화 퍼즐의 해결을 수행하기 위해 경쟁하는 것을 수반한다.
네트워크의 각각의 노드는 3개의 역할들: 포워딩, 채굴 및 저장 중 임의의 하나, 둘 또는 모두를 가질 수 있다. 포워딩 노드들은 네트워크의 노드들 전반에 걸쳐 트랜잭션들을 전파시킨다. 채굴 노드들은 블록들 내로의 트랜잭션들의 채굴을 수행한다. 저장 노드들은 블록체인의 채굴된 블록들의 그 자체의 사본을 각각 저장한다. 트랜잭션을 블록체인에 기록하기 위해, 당사자는 트랜잭션을 전파될 네트워크의 노드들 중 하나로 전송한다. 트랜잭션을 수신한 채굴 노드들은 트랜잭션을 새로운 블록 내로 채굴하기 위해 경쟁할 수 있다. 각각의 노드는 트랜잭션이 유효하기 위한 하나 이상의 조건들을 포함하는 동일한 노드 프로토콜을 준수하도록 구성된다. 유효하지 않은 트랜잭션들은 블록들 내로 채굴되거나 전파되지 않을 것이다. 트랜잭션이 유효성 검증되고 그리하여 블록체인 상에서 수락된다고 가정하면, 트랜잭션(임의의 사용자 데이터를 포함함)은 이에 따라 변경 불가능한 공개 기록으로서 P2P 네트워크의 노드들 각각에 저장된 채로 유지된다.
최신 블록을 생성하기 위하여 작업 증명 퍼즐을 성공적으로 해결한 채굴자는 일반적으로 디지털 자산의 새로운 금액을 생성하는 "생성 트랜잭션(generation transaction)"이라 불리는 새로운 트랜잭션으로 보상을 받는다. 작업 증명은 블록을 채굴하는 데 많은 양의 컴퓨팅 자원이 필요하고 이중 지출 시도가 포함된 블록은 다른 노드에서 수락되지 않을 가능성이 높기 때문에, 블록에 이중 지출 트랜잭션을 포함함으로써 채굴자가 시스템을 속이지 않도록 장려한다.
"출력 기반" 모델(때때로 UTXO 기반 모델로 지칭됨)에서, 주어진 트랜잭션의 데이터 구조는 하나 이상의 입력들과 하나 이상의 출력들을 포함한다. 임의의 지출 가능한 출력은 때때로 UTXO("비지출된 트랜잭션 출력")로 지칭되는 디지털 자산의 금액을 지정하는 요소를 포함한다. 출력은 출력을 리딤하기 위한 조건을 지정하는 잠금 스크립트(locking script)를 더 포함할 수 있다. 각각의 입력은 선행 트랜잭션에서 그러한 출력에 대한 포인터를 포함하고, 지시된 출력의 잠금 스크립트를 잠금 해제하기 위한 잠금 해제 스크립트를 더 포함할 수 있다. 따라서 한 쌍의 트랜잭션들이 고려되고, 이들을 제1 및 제2 트랜잭션(또는 "타겟" 트랜잭션)이라고 칭한다. 제1 트랜잭션은 디지털 자산의 금액을 지정하는 적어도 하나의 출력을 포함하고, 출력을 잠금 해제하는 하나 이상의 조건들을 정의하는 잠금 스크립트를 포함한다. 제2 타겟 트랜잭션은 제1 트랜잭션의 출력에 대한 포인터를 포함하는 적어도 하나의 입력, 및 제1 트랜잭션의 출력을 잠금 해제하기 위한 잠금 해제 스크립트를 포함한다.
이러한 모델에서, 제2 타겟 트랜잭션이 P2P 네트워크로 전송되어 블록체인에 전파 및 기록될 때, 각 노드에서 적용되는 유효성을 위한 기준 중 하나는, 잠금 해제 스크립트가 제1 트랜잭션의 잠금 스크립트에 정의된 하나 이상의 조건들 모두를 충족시킨다는 것일 것이다. 다른 하나는, 제1 트랜잭션의 출력이 다른 이전의 유효한 트랜잭션에 의해 이미 리딤되지 않았다는 것일 것이다. 이러한 조건들 중 하나에 따라 타겟 트랜잭션이 무효하다는 것을 발견한 임의의 노드는 이를 전파하지 않거나, 블록체인에 기록할 블록으로 채굴하기 위해 포함하지 않지 않을 것이다.
트랜잭션 모델의 대안적인 유형은 계정 기반 모델이다. 이 경우에, 각각의 트랜잭션은 과거 트랜잭션들의 시퀀스에서 선행 트랜잭션의 UTXO를 뒤로 참조하기 보다는, 절대 계정 잔액을 참조함으로써 전달될 금액을 정의한다. 모든 계정들의 현재 상태는 블록체인과 별개로 채굴자들에 의해 저장되며 지속적으로 업데이트된다.
종래에는, 블록체인의 트랜잭션들은 디지털 자산, 즉 다수의 디지털 토큰을 전달하는 데 사용된다. 그러나, 블록체인 위에 부가적인 기능성을 중첩하기 위해 블록체인이 또한 활용될 수 있다. 예컨대, 블록체인 프로토콜들은 트랜잭션의 출력에의 부가적인 사용자 데이터의 저장을 허용할 수 있다. 현대의 블록체인들은 단일 트랜잭션 내에 저장될 수 있는 최대 데이터 용량을 증가시키고 있어, 보다 복잡한 데이터가 통합되는 것을 가능하게 한다. 예컨대, 이는 블록체인에 전자 문서를 저장하거나, 심지어 오디오 또는 비디오 데이터를 저장하는 데 사용될 수 있다.
본 개시는 자신의 코어에 블록체인 네트워크의 노드를 갖는 계층화된 네트워크의 다수의 노드에 걸쳐 분산형 데이터베이스가 구현되고, 데이터베이스에 대한 상태 변화가 블록체인 네트워크의 블록체인에 기록되는 방식을 제공한다.
본원에 개시된 일 양상에 따라, 계층화된 네트워크에서 구현된 분산형 데이터베이스를 동작시키는 방법이 제공된다. 계층화된 네트워크는 하나 이상의 코어 노드를 포함하는 코어 계층, 각각 하나 이상의 중간 계층 노드를 포함하는 하나 이상의 중간 계층, 및 각각 하나 이상의 외부 계층 노드를 포함하는 하나 이상의 외부 계층을 포함한다. 코어 노드 각각은 블록체인 네트워크의 노드이고, 중간 계층 노드 중 적어도 일부는 분산형 데이터베이스의 데이터베이스 노드이고, 외부 계층 노드 중 적어도 일부는 분산형 데이터베이스의 클라이언트 노드이고, 각각의 데이터베이스 노드는 분산형 데이터베이스 중 적어도 일부를 저장한다. 방법은, 데이터베이스 노드 중 제1 데이터베이스 노드에서:
클라이언트 노드 중 하나 이상으로부터 하나 이상의 업데이트 요청을 수신하는 단계 ― 하나 이상의 업데이트 요청 각각은 분산형 데이터베이스 내의 개개의 타겟 엔트리를 업데이트하라는 요청임 ― ; 및 수신된 업데이트 요청들 각각에 대해, 상기 제1 데이터베이스 노드에 저장된 데이터베이스의 일부에서 개개의 타겟 엔트리가 발견되는지를 결정하고, 그리고 그렇다면, 제1 데이터베이스 노드에 저장된 데이터베이스의 일부 내의 개개의 타겟 엔트리에 대한 업데이트 요청의 업데이트를 수행하고, 그리고 그렇지 않다면, 개개의 타겟 엔트리를 포함하는 데이터베이스의 일부를 저장하는 데이터베이스 노드 중 다른 데이터베이스 노드에 요청을 포워딩하는 단계를 포함한다. 게다가, 하나 이상의 업데이트 요청의 표시를 포함하는 적어도 하나의 트랜잭션이 또한 블록체인 네트워크의 블록체인에 기록된다.
본 개시의 실시예들의 이해를 보조하기 위해 그리고 그러한 실시예들이 어떻게 실행될 수 있는지를 보여주기 위하여, 단지 예로서 첨부 도면들에 대한 참조가 이루어진다.
도 1은 블록체인을 구현하기 위한 시스템의 개략적인 블록도이다.
도 2는 블록체인에 기록될 수 있는 트랜잭션들의 일부 예들을 개략적으로 예시한다.
도 3은 계층화된 네트워크의 예의 개략적인 표현이다.
도 4는 계층화된 네트워크의 예의 또 다른 개략적인 표현이다.
도 5는 계층화된 네트워크의 예의 또 다른 개략적인 표현이다.
도 6은 계층화된 네트워크의 예의 또 다른 개략적인 표현이다.
도 7은 계층화된 네트워크에서 구현된 예시적인 증명 서비스를 개략적으로 도시한다.
도 8은 블록체인에 데이터 아이템의 순서를 기록하기 위한 예시적인 트랜잭션의 개략적인 트랜잭션 도면이다.
도 9는 트랜잭션 내에 세트의 데이터 아이템의 순서를 기록하기 위한 예시적인 인덱싱된 목록을 개략적으로 도시한다.
도 10은 트랜잭션 내에 세트의 데이터 아이템의 순서를 기록하기 위한 인덱싱된 목록의 다른 예를 개략적으로 도시한다.
도 11은 트랜잭션 내에 세트의 데이터 아이템의 순서를 기록하기 위한 인덱싱된 목록의 다른 예를 개략적으로 도시한다.
도 12는 계층화된 네트워크에서 구현된 분산형 데이터베이스의 예를 개략적으로 도시한다.
도 13은 비교에 의해 카산드라 데이터베이스 클러스터(Cassandra database cluster)의 아키텍처의 예를 개략적으로 도시한다.
도 14는 카산드라 클러스터 그래프의 상이한 통신 경로를 개략적으로 도시한다.
도 15는 기록 요청 동안 단일 카산드라 노드의 고레벨 아키텍처의 개략적인 블록도이다.
도 16은 완전한 네트워크 클러스터(좌측)로부터 블록체인 계층화된 네트워크(우측)로의 전환을 개략적으로 도시한다.
도 17은 분산형 데이터베이스 노드의 클러스터 및 데이터베이스에 의해 언더피닝(underpining)되는 시스템의 사용자를 포함하는 블록체인 계층화된 네트워크(BLN)를 개략적으로 도시한다.
도 18은 적어도 계층 i=2,3에서 구현된 PKI를 갖는 BLN 구현된 분산형 데이터베이스의 예를 개략적으로 도시한다.
도 19는 블록체인에 데이터베이스 업데이트의 표시를 기록하기 위한 판독/기록 트랜잭션의 예를 개략적으로 도시한다.
도 20은 BLN 구현된 분산형 데이터베이스(BLNiDD)의 예시적인 아키텍처의 판독/기록 경로를 개략적으로 도시한다.
도 21은 힌트 핸드오프 트랜잭션(hinted handoff transaction)의 예를 개략적으로 도시한다.
예시적인 시스템 개요
도 1은 블록체인(150)을 구현하기 위한 예시적인 시스템(100)을 도시한다. 시스템(100)은 패킷-교환 네트워크(101), 통상적으로 인터넷과 같은 광역 인터네트워크를 포함한다. 패킷-교환 네트워크(101)는 패킷-교환 네트워크(101) 내에서 P2P(peer-to-peer) 오버레이 네트워크(106)를 형성하도록 배열된 복수의 노드들(104)을 포함한다. 블록체인 네트워크(106)의 각각의 노드(104)는 피어들의 컴퓨터 장비를 포함하며, 노드들(104) 중 상이한 노드들은 상이한 피어들에 속한다. 각각의 노드(104)는 하나 이상의 프로세서들, 예컨대, 하나 이상의 CPU(central processing unit)들, 가속기 프로세서들, 애플리케이션 특정 프로세서 및/또는 FPGA(field programmable gate array)들을 포함하는 프로세싱 장치를 포함한다. 각각의 노드는 또한 메모리, 즉 비-일시적 컴퓨터-판독 가능 매체 또는 매체들의 형태의 컴퓨터-판독 가능 저장소를 포함한다. 메모리는 하나 이상의 메모리 매체들, 예컨대, 하드 디스크와 같은 자기 매체; 솔리드 스테이트 드라이브(SSD), 플래시 메모리 또는 EEPROM과 같은 전자 매체; 및/또는 광학 디스크 드라이브와 같은 광학 매체를 사용하는 하나 이상의 메모리 유닛들을 포함할 수 있다.
블록체인(150)은 데이터의 블록들의 체인(151)을 포함하며, 블록체인(150)의 개개의 사본이 P2P 네트워크(160)의 복수의 노드들 각각에서 유지된다. 체인의 각각의 블록(151)은 하나 이상의 트랜잭션들(152)을 포함하며, 여기서 이 맥락에서 트랜잭션은 일종의 데이터 구조를 지칭한다. 데이터 구조의 성질은 트랜잭션 모델 또는 체계(scheme)의 일부로서 사용되는 트랜잭션 프로토콜의 유형에 의존할 것이다. 주어진 블록체인은 통상적으로 전반에 걸쳐 하나의 특정 트랜잭션 프로토콜을 사용할 것이다. 하나의 공통 유형의 트랜잭션 프로토콜에서, 각각의 트랜잭션(152)의 데이터 구조는 적어도 하나의 입력 및 적어도 하나의 출력을 포함한다. 각각의 출력은, 출력이 암호학적으로 잠금된 사용자(103)에 속한 디지털 자산의 금액을 표현하는 금액을 지정한다(잠금 해제되고 그리하여 리딤(redeem) 또는 지출되기 위해 그 사용자의 서명을 요구함). 각각의 입력은 선행 트랜잭션(152)의 출력을 뒤로 가리키고, 그리하여 트랜잭션들을 링크한다.
노드들(104) 중 적어도 일부는 트랜잭션들(152)을 포워딩하고 그리하여 전파시키는 포워딩 노드들(104F)의 역할을 맡는다. 노드들(104) 중 적어도 일부는 블록들(151)을 채굴하는 채굴자들(104M)의 역할을 맡는다. 노드들(104) 중 적어도 일부는, 각각이 각자의 메모리에 동일한 블록체인(150)의 개개의 사본을 저장하는 저장 노드들(104S)(때로는 또한 "전체-사본(full-copy)" 노드들이라 칭함)의 역할을 맡는다. 각각의 채굴자 노드(104M)는 또한 블록(151)으로 채굴되기를 기다리는 트랜잭션들(152)의 풀(154)을 유지한다. 주어진 노드(104)는 포워딩 노드(104), 채굴자(104M), 저장 노드(104S) 또는 이들 중 2개 또는 모두의 임의의 조합일 수 있다.
주어진 현재 트랜잭션(152j)에서, 그(또는 각각의) 입력은 트랜잭션들의 시퀀스에서 선행 트랜잭션(152i)의 출력을 참조하는 포인터를 포함하여, 그러한 출력이 현재 트랜잭션(152j)에서 "지출"되거나 리딤됨을 지정한다. 일반적으로, 선행 트랜잭션은 풀(154) 또는 임의의 블록(151)의 임의의 트랜잭션일 수 있다. 선행 트랜잭션(152i)은 현재 트랜잭션(152j)이 생성되거나 심지어 네트워크(106)로 전송될 때 반드시 존재할 필요는 없지만, 선행 트랜잭션(152i)은 현재 트랜잭션이 유효하기 위해 존재하고 유효성 검증될 필요가 있을 것이다. 따라서 본원에서 "선행(preceding)"이라 함은 포인터들에 의해 링크된 논리적 시퀀스의 선행자를 지칭하며, 반드시 시간적 시퀀스의 전송 또는 생성 시간은 아니고, 따라서 트랜잭션들(152i, 152j)은 순서와 다르게(out-of-order)(고아 트랜잭션들에 대한 아래 논의 참조) 전송되거나 생성되는 것을 반드시 배제하지 않는다. 선행 트랜잭션(152i)은 앞선(antecedent) 트랜잭션 또는 선행자(predecessor) 트랜잭션으로 동등하게 칭해질 수 있다.
현재 트랜잭션(152j)의 입력은 또한 선행 트랜잭션(152i)의 출력이 잠금된 사용자(103a)의 서명을 포함한다. 차례로, 현재 트랜잭션(152j)의 출력은 새로운 사용자(103b)에 대해 암호학적으로 잠금될 수 있다. 따라서 현재 트랜잭션(152j)은 선행 트랜잭션(152i)의 입력에서 정의된 금액을 현재 트랜잭션(152j)의 출력에서 정의된 바와 같은 새로운 사용자(103b)에게 전달할 수 있다. 일부 경우들에서 트랜잭션(152)은 다수의 사용자들(이들 중 하나는 잔돈(change)을 주기 위해 오리지널 사용자(103a)일 수 있음) 사이에서 입력 금액을 분할하기 위해 다수의 출력들을 가질 수 있다. 일부 경우에서 트랜잭션은 또한 하나 이상의 선행 트랜잭션들의 다수의 출력들로부터 금액들을 수집하고 현재 트랜잭션의 하나 이상의 출력들에 재분배하기 위해 다수의 입력들을 가질 수 있다.
위의 내용은 "출력-기반" 트랜잭션 프로토콜로서 지칭될 수 있으며, 때로는 또한 미지출 트랜잭션 출력(UTXO) 유형 프로토콜(여기서 출력들은 UTXO들로서 지칭됨)로서 지칭된다. 사용자의 총 잔액은 블록체인에 저장된 임의의 하나의 숫자에서 정의되지 않으며, 대신 사용자는 블록체인(151)의 다수의 상이한 트랜잭션들(152) 전반에 걸쳐 흩어져 있는 그 사용자의 모든 UTXO들의 값들을 대조하기 위해 특별한 "지갑" 애플리케이션(105)을 필요로 한다.
트랜잭션 프로토콜의 대안적인 유형은 계정-기반 트랜잭션 모델의 일부로서 "계정-기반" 프로토콜로서 지칭될 수 있다. 계정-기반의 경우에, 각각의 트랜잭션은 과거 트랜잭션들의 시퀀스에서 선행 트랜잭션의 UTXO를 뒤로 참조하기 보다는, 절대 계정 잔액을 참조함으로써 전달될 금액을 정의한다. 모든 계정들의 현재 상태는 블록체인과 별개로 채굴자들에 의해 저장되며 지속적으로 업데이트된다. 트랜잭션들은 (또한 "포지션"이라 불리는) 계정의 실행 중인 트랜잭션 총계를 사용하여 순서화된다. 이 값은 그의 암호화 서명의 일부로 발신인에 의해 서명되고 트랜잭션 참조 계산의 부분으로서 해싱된다. 게다가, 선택적 데이터 필드가 또한 트랜잭션에 서명할 수 있다. 이 데이터 필드는 예컨대, 이전 트랜잭션 ID가 데이터 필드에 포함된 경우 이전 트랜잭션을 뒤로 가리킬 수 있다.
어느 유형의 모델에서도, 사용자(103)가 새로운 트랜잭션(152j)을 시행(enact)하기를 원할 때, 사용자는 자신의 컴퓨터 단말(102)로부터 P2P 유효성 검증 네트워크(106)의 노드들(104) 중 하나(이는 최근에는 통상적으로 서버들 또는 데이터 센터이지만, 원칙적으로 다른 사용자 단말들일 수 있음)로 새로운 트랜잭션을 전송한다. 이 노드(104)는 노드들(104) 각각에 적용되는 노드 프로토콜에 따라 트랜잭션이 유효한지를 체크한다. 노드 프로토콜의 세부사항들은 해당 블록체인(150)에서 사용되는 트랜잭션 프로토콜의 유형에 대응하며, 전체 트랜잭션 모델을 함께 형성한다. 노드 프로토콜은 통상적으로 노드(104)가 새로운 트랜잭션(152j)의 암호화 서명이 예상되는 서명과 매칭되는지를 체크하도록 요구하며, 이는 트랜잭션들(152)의 정렬된 시퀀스에서 이전 트랜잭션(152i)에 의존한다. 출력-기반의 경우에, 이는 새로운 트랜잭션(152j)의 입력에 포함된 사용자의 암호화 서명이 새로운 트랜잭션이 지출하는 선행 트랜잭션(152i)의 출력에 정의된 조건과 매칭되는지를 체크하는 것을 포함하며, 여기에서 이 조건은 통상적으로 적어도 새로운 트랜잭션(152j)의 입력의 암호화 서명이 새로운 트랜잭션의 입력이 가리키는 이전 트랜잭션(152i)의 출력을 잠금 해제한다는 것을 체크하는 것을 포함한다. 일부 트랜잭션 프로토콜들에서, 조건은 입력 및/또는 출력에 포함된 사용자 정의 스크립트(custom script)에 의해 적어도 부분적으로 정의될 수 있다. 대안적으로 이는 단순히 노드 프로토콜만으로 고정되거나, 이들의 조합으로 인한 것일 수 있다. 어느 쪽이든, 새로운 트랜잭션(152j)이 유효한 경우, 현재 노드는 이를 P2P 네트워크(106)의 노드들(104) 중 하나 이상의 다른 노드들에 포워딩한다. 이러한 노드(104) 중 적어도 일부는 또한 포워딩 노드(104F)로서 작용하여, 동일한 노드 프로토콜에 따른 동일한 테스트를 적용하고, 이에 따라 새로운 트랜잭션(152j)을 하나 이상의 추가 노드들(104)로 포워딩하는 식이다. 이러한 방식으로, 새로운 트랜잭션은 노드들(104)의 네트워크 전반에 걸쳐 전파된다.
출력-기반 모델에서, 주어진 출력(예컨대, UTXO)이 지출되는지 여부에 대한 정의는 그것이 노드 프로토콜에 따라 다른 전방 트랜잭션(152j)의 입력에 의해 유효하게 리딤되었는지의 여부이다. 트랜잭션이 유효하기 위한 다른 조건은 지출 또는 리딤을 시도하는 선행 트랜잭션(152i)의 출력이 다른 유효한 트랜잭션에 의해 이미 지출/리딤되지 않은 것이다. 재차, 유효하지 않은 경우, 트랜잭션(152j)은 블록체인에 기록되거나 전파되지 않을 것이다. 이는 지출자가 동일한 트랜잭션의 출력을 한번 초과로 지출하고자 시도하는 이중-지출을 경계한다.
유효성 검증에 추가하여, 노드들(104M) 중 적어도 일부는 또한 채굴로서 알려진 프로세스에서 트랜잭션들의 블록들을 최초로 생성하기 위해 경쟁하며, 이는 "작업 증명"에 의해 뒷받침된다. 채굴 노드(104M)에서, 유효한 트랜잭션들의 풀에 아직 블록에 나타나지 않은 새로운 트랜잭션들이 추가된다. 그런 다음, 채굴자들은 암호화 퍼즐을 해결하도록 시도함으로써 트랜잭션들의 풀(154)로부터 트랜잭션들(152)의 새로운 유효한 블록(151)을 조립하기 위해 경쟁한다. 통상적으로 이는 "논스(nonce)"가 트랜잭션들(154)의 풀과 연접되고(concatenated) 해시될 때, 해시의 출력이 미리 결정된 조건을 충족시키도록 논스 값을 검색하는 것을 포함한다. 예컨대, 미리 결정된 조건은 해시의 출력이 미리 정의된 특정 수의 선행 0들을 갖는 것일 수 있다. 해시 함수의 특성은 해시 함수가 그의 입력에 대해 예측 불가능한 출력을 갖는다는 것이다. 따라서, 이 검색은 무차별 대입(brute force)에 의해서만 수행될 수 있고, 이에 따라 퍼즐을 해결하고자 하는 각각의 노드(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)에서 정렬된 블록들에 기록되기 때문에, 이는 이에 따라, 트랜잭션들의 변경 불가능한 공개 원장을 제공한다.
풀(154)은 때때로 "멤풀(mempool)"로 지칭된다. 본원에서 이러한 용어는 임의의 특정 블록체인, 프로토콜 또는 모델로 제한되도록 의도되지 않는다. 이것은, 채굴자가 채굴을 수락하고 채굴자가 동일한 출력을 지출하려고 시도하는 임의의 다른 트랜잭션을 수락하지 않도록 커밋(commit)하는 트랜잭션의 풀을 지칭한다.
임의의 주어진 시간에 퍼즐을 해결하기 위해 경쟁하는 상이한 채굴자들(104M)은, 해의 검색을 시작한 시기에 의존하여, 임의의 주어진 시간에 채굴되지 않은 트랜잭션 풀(154)의 상이한 스냅샷들에 기초하여 퍼즐을 해결한다는 것에 주의한다. 각자의 퍼즐을 먼저 해결하는 사람은 어느 트랜잭션들(152)이 다음의 새로운 블록(151n)에 포함되는지를 정의하고, 채굴되지 않은 트랜잭션들의 현재 풀(154)은 업데이트된다. 그런 다음 채굴자들(104M)은 새롭게 정의된 미해결 풀(154)로부터 블록을 생성하기 위해 계속 경쟁하며, 이와 같이 계속된다. 발생할 수 있는 임의의 "포크(fork)" ― 이는 2개의 채굴자들(104M)이 서로 매우 짧은 시간 내에 그의 퍼즐을 풀어서, 블록체인에 대한 상충되는 뷰(view)가 전파되는 경우임 ― 를 해결하기 위한 프로토콜이 또한 존재한다. 요컨대, 가장 길게 성장하는 포크의 갈래가 확정적인 블록체인(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)는 메모리, 즉 비-일시적 컴퓨터-판독 가능 매체 또는 매체들의 형태의 컴퓨터-판독 가능 저장소를 더 포함한다. 이 메모리는 하나 이상의 메모리 매체들, 예컨대, 하드 디스크와 같은 자기 매체; 솔리드 스테이트 SSD, 플래시 메모리 또는 EEPROM과 같은 전자 매체; 및/또는 광학 디스크 드라이브와 같은 광학 매체를 사용하는 하나 이상의 메모리 유닛들을 포함할 수 있다. 각각의 당사자(103)의 컴퓨터 장비(102) 상의 메모리는 프로세싱 장치 상에서 실행되도록 배열된 적어도 하나의 클라이언트 애플리케이션(105)의 개개의 인스턴스를 포함하는 소프트웨어를 저장한다. 본원에서 주어진 당사자(103)에 기인한 임의의 동작은 개개의 컴퓨터 장비(102)의 프로세싱 장치 상에서 실행되는 소프트웨어를 사용하여 수행될 수 있다는 것이 이해될 것이다. 각각의 당사자(103)의 컴퓨터 장비(102)는 적어도 하나 사용자 단말, 예컨대, 데스크 톱 또는 랩톱 컴퓨터, 태블릿, 스마트폰, 또는 스마트워치와 같은 웨어러블 디바이스를 포함한다. 주어진 당사자(103)의 컴퓨터 장비(102)는 또한 사용자 단말을 통해 액세스되는 클라우드 컴퓨팅 자원들과 같은 하나 이상의 다른 네트워킹된 자원들을 포함할 수 있다.
예컨대, 서버로부터 다운로드되거나, 또는 이동식 저장 디바이스 이를테면, 이동식 SSD, 플래시 메모리 키, 이동식 EEPROM, 이동식 자기 디스크 드라이브, 자기 플로피 디스크 또는 테이프, 광학 디스크 이를테면, CD 또는 DVD ROM 또는 이동식 광학 드라이브 등 상에서 제공되는 클라이언트 애플리케이션(105)은 적절한 컴퓨터-판독 가능 저장 매체 또는 매체들 상에서 임의의 주어진 당사자(103)의 컴퓨터 장비(102)에 초기에 제공될 수 있다.
클라이언트 애플리케이션(105)은 적어도 "지갑" 기능을 포함한다. 이는 2개의 메인 기능성들을 갖는다. 이들 중 하나는 개개의 사용자 당사자(103)가 노드들(104)의 네트워크 전반에 걸쳐 전파되고 그리하여 블록체인(150)에 포함될 트랜잭션들(152)을 생성, 서명 및 전송하는 것을 가능하게 하는 것이다. 남은 하나는 개개의 당사자에게 자신이 현재 소유하고 있는 디지털 자산의 금액을 다시 보고하는 것이다. 출력-기반 시스템에서, 이 제2 기능성은 블록체인(150) 전반에 걸쳐 흩어져 있는 해당 당사자에 속하는 다양한 트랜잭션들(152)의 출력들에서 정의된 금액들을 대조하는 것을 포함한다.
유의: 다양한 클라이언트 기능이 주어진 클라이언트 애플리케이션(105)에 통합되는 것으로 설명될 수 있지만, 이것은 반드시 제한적인 것은 아니며, 대신에 본원에서 설명된 임의의 클라이언트 기능은 2개 이상의 별개의 애플리케이션들이 한 조로 구현될 수 있는데, 예컨대, API를 통해 인터페이싱하거나 또는 하나가 다른 것에 플러그 인될 수 있다. 더 일반적으로, 클라이언트 기능은 애플리케이션 계층, 또는 운영 시스템과 같은 하위 계층, 또는 이들의 임의의 조합에서 구현될 수 있다. 다음은 클라이언트 애플리케이션(105)의 관점에서 설명될 것이지만, 이것이 제한적이지 않다는 것이 인지될 것이다.
각각의 컴퓨터 장비(102) 상의 클라이언트 애플리케이션 또는 소프트웨어(105)의 인스턴스는 P2P 네트워크(106)의 포워딩 노드들(104F) 중 적어도 하나에 동작 가능하게 커플링된다. 이는 클라이언트(105)의 지갑 기능이 트랜잭션들(152)을 네트워크(106)로 전송하는 것을 가능하게 한다. 클라이언트(105)는 또한 개개의 당사자(103)가 수령인인 임의의 트랜잭션들에 대해 블록체인(150)에 질의하기 위해(또는 실시예들에서, 블록체인(150)은 그의 공개 가시성을 통해 부분적으로 트랜잭션들의 신뢰를 제공하는 공공 시설(public facility)이므로, 실제로 블록체인(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)의 구 뷰(old view)에 기초하여 퍼즐을 해결하고자 여전히 시도할 수 있지만, 누구든 먼저 도달한 사람이 다음 새로운 블록(151)이 끝나고 새로운 풀(154)이 시작되는 곳을 정의할 것이며, 결국 누군가가 앨리스의 트랜잭션(152j)을 포함하는 풀(154)의 부분에 대한 퍼즐을 해결할 것임). 새로운 트랜잭션(152j)을 포함하는 풀(154)에 대한 작업 증명이 완료되면, 이는 변경 불가능하게 블록체인(150)의 블록들(151) 중 하나의 부분이 된다. 각각의 트랜잭션(152)은 이전 트랜잭션에 대한 역 포인터를 포함하여서, 트랜잭션들의 순서가 또한 변경 불가능하게 기록된다.
채굴 및 저장 노드 둘 모두는 기능으로서 유효성 검증을 수행할 수 있다. 채굴 노드에 대해, 해당 기능은 해싱에 대한 보조일 수 있고, 저장 노드에 대해 해당 기능은 저장에 대한 보조일 수 있다.
상이한 노드들(104)은 우선 주어진 트랜잭션의 상이한 인스턴스들을 수신하고, 따라서 하나의 인스턴스가 블록(151) 내로 채굴되기 전에 어떤 인스턴스가 유효한지에 대한 충돌하는 뷰들을 가질 수 있고, 이 지점에서 모든 노드들(104)은 채굴된 인스턴스가 유일한 유효 인스턴스라고 동의한다. 노드(104)가 하나의 인스턴스를 유효한 것으로 수락하고, 그런 다음 제2 인스턴스가 블록체인(150)에 기록되었다는 것을 발견하면, 해당 노드(104)는 이것을 수락해야 하고, 자신이 초기에 수락한 채굴되지 않은 인스턴스를 폐기(즉, 무효한 것을 처리)할 것이다.
UTXO-기반 모델
도 2는 예시적인 트랜잭션 프로토콜을 예시한다. 이는 UTXO-기반 프로토콜의 예이다. 트랜잭션(152)(약칭 "Tx")은 블록체인(150)의 기본 데이터 구조이다(각각의 블록(151)은 하나 이상의 트랜잭션들(152)을 포함함). 다음은 출력-기반 또는 "UTXO" 기반 프로토콜을 참조하여 설명될 것이다. 그러나 이것은 모든 가능한 실시예들로 제한되지 않는다.
UTXO-기반 모델에서, 각각의 트랜잭션("Tx")(152)은 하나 이상의 입력들(202) 및 하나 이상의 출력들(203)을 포함하는 데이터 구조를 포함한다. 각각의 출력(203)은 (UTXO가 아직 리딤되지 않은 경우) 다른 새로운 트랜잭션의 입력(202)에 대한 소스로서 사용될 수 있는 미지출 트랜잭션 출력(unspent transaction output; UTXO)을 포함할 수 있다. UTXO는 디지털 자산의 금액을 지정하는 값을 포함한다. 이것은 (분산된) 회계장부(ledger) 상의 설정된 토큰의 수를 나타낸다. 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)은 (예컨대, 실시예에서, 전체 트랜잭션 Tx0의 해시인 그의 트랜잭션 ID인 TxID0에 의해) Tx1을 뒤로 가리키는 포인터를 포함한다. Tx1의 입력(202)은 Tx0 내에서 UTXO0을 식별하는 인덱스를 포함하여 Tx0의 임의의 다른 가능한 출력들 사이에서 그것을 식별한다. Tx1의 입력(202)은 앨리스의 암호화 서명을 포함하는 잠금 해제 스크립트 <Sig PA>를 더 포함하며, 이는 앨리스가 키 쌍으로부터 자신의 개인 키를 데이터의 미리 정의된 부분(때로는 암호화에서 "메시지"라 불림)에 적용함으로써 생성된다. 유효한 서명을 제공하기 위해 앨리스에 의해 서명될 필요가 있는 데이터(또는 "메시지")는 잠금 스크립트, 노드 프로토콜 또는 이들의 조합에 의해 정의될 수 있다.
구현에 의존하여, 요구된 서명은, 예컨대, 종래의 ECDSA(elliptic curve digital signature algorithm) 서명, DSA (Digital Signature Algorithm) 서명 또는 RSA (Rivest-Shamir-Adleman) 서명, 또는 임의의 다른 적절한 형태의 암호 서명일 수 있다. 서명에 대한 챌린지(challenge)는, 예컨대, 표준 P2PK(pay-to-public key) 퍼즐 또는 P2PKH(P2PK hash) 퍼즐로서 구현될 수 있거나, 대신에 R-퍼즐과 같은 대안이 서명에 대한 수단으로서 구현될 수 있다. 본 예는 예시로서 P2PK를 사용한다.
새로운 트랜잭션 Tx1이 노드(104)에 도달할 때, 노드는 노드 프로토콜을 적용한다. 이는 잠금 해제 스크립트가 잠금 스크립트에 정의된 조건(이 조건은 하나 이상의 기준들을 포함할 수 있음)을 충족시키는지를 체크하기 위해 잠금 스크립트 및 잠금 해제 스크립트를 함께 실행하는 것을 포함한다. 실시예들에서, 이는 2개의 스크립트들을 연결하는 것을 수반한다.
<Sig PA> < PA> || [Checksig PA]
여기에서 "||"는 연결을 표현하고 "<...>"는 스택 상에 데이터를 배치하는 것을 의미하고, "[…]"는 잠금 해제 스크립트(이 예에서, 스택-기반 언어)에 의해 구성된 함수이다. 동등하게, 스크립트들을 연결하는 대신, 스크립트들은 공통 스택을 사용하여 차례로 실행될 수 있다. 어느 쪽이든, 함께 실행될 때, 스크립트들은 Tx0의 출력의 잠금 스크립트에 포함된 바와 같은 앨리스의 공개 키 PA를 사용하여, Tx1의 입력의 잠금 스크립트가 데이터의 예상되는 부분에 서명하는 앨리스의 서명을 포함한다는 것을 인증한다. 이 인증을 수행하기 위하여 데이터의 예상되는 부분 자체("메시지")가 또한 Tx0에 포함될 필요가 있다. 실시예들에서, 서명된 데이터는 Tx0 전체를 포함한다(이에 따라, 평문으로(in-the-clear) 데이터의 서명된 부분을 지정하는 별개의 요소가 포함될 필요가 있는데, 그 이유는 이것이 이미 본질적으로 존재하기 때문임).
공개-개인 암호화에 의한 인증의 세부사항들은 당업자에게 친숙할 것이다. 기본적으로, 앨리스가 자신의 개인 키로 메시지를 암호화함으로써 그 메시지에 서명한 경우, 앨리스의 공개 키 및 평문의 일반 메시지(암호화되지 않은 메시지)를 감안하여, 노드(104)와 같은 다른 엔티티는 암호화된 버전의 메시지가 앨리스에 의해 서명된 것임이 틀림없다는 것을 인증할 수 있다. 서명은 통상적으로 메시지를 해시하는 것, 해시에 서명하는 것, 그리고 이를 서명으로서 메시지의 평문 버전에 태깅하고, 이에 따라 공개 키의 임의의 보유자(holder)가 서명을 인증하는 것을 가능하게 하는 것을 포함한다. 특정 데이터 조각 또는 트랜잭션의 부분에 서명한다는 본원에서의 임의의 참조는 실시예들에서 해당 데이터의 조각 또는 트랜잭션의 부분의 해시를 서명하는 것을 의미한다는 것이 유의된다.
본원의 어딘가에 언급된 해시는, 예컨대, SHA(Secure Hash Algorithm) 해시 함수, 또는 HMAC(hash-based message authentication code) 해시 함수, 또는 당분야에 알려진 임의의 다른 적절한 형태의 암호 해시 함수에 의해 구현될 수 있다.
Tx1의 잠금 해제 스크립트가 Tx0의 잠금 스크립트에 지정된 하나 이상의 조건들을 충족시키는 경우(이에 따라, 보여진 예에서, 앨리스의 서명이 Tx1에서 제공되고 인증된 경우), 노드(104)는 Tx1이 유효한 것으로 간주한다. 그것이 채굴 노드(104M)인 경우, 이는 그것이 작업 증명을 기다리는 트랜잭션들의 풀(154)에 추가될 것임을 의미한다. 그것이 포워딩 노드(104F)인 경우, 트랜잭션 Tx1을 네트워크(106)의 하나 이상의 다른 노드들(104)로 전달하여서, 그 트랜잭션이 네트워크에 걸쳐 전파될 것이다. Tx1이 유효성 검증되고 블록체인(150)에 포함되면, 이는 지출된 것으로 Tx0으로부터 UTXO0를 정의한다. Tx1은 그것이 미지출 트랜잭션 출력(203)을 지출하는 경우에만 유효할 수 있다는 것에 주의한다. 다른 트랜잭션(152)에 의해 이미 지출된 출력을 지출하려고 시도하는 경우, 다른 모든 조건들이 충족되는 경우 조차도 Tx1은 유효하지 않을 것이다. 따라서 노드(104)는 또한 선행 트랜잭션 Tx0에서 참조된 UTXO가 이미 지출되었는지(다른 유효한 트랜잭션에 대한 유효한 입력을 이미 형성했는지)를 체크할 필요가 있다. 이는 트랜잭션들(152) 상에 정의된 순서를 부과하는 것이 블록체인(150)에 대해 중요한 하나의 이유이다. 실제로, 주어진 노드(104)는 트랜잭션들(152)이 지출된 UTXO들(203)을 마킹하는 별개의 데이터베이스를 유지할 수 있지만, 궁극적으로 UTXO가 지출되었는지를 정의하는 것은 블록체인(150)의 다른 유효한 트랜잭션에 대한 유효한 입력이 이미 형성되었는지의 여부이다.
또한, 주어진 트랜잭션(152)의 모든 출력들(203)에서 지정된 총 금액이 모든 그의 입력들(202)에 의해 가리켜지는 총 금액보다 큰 경우, 이는 대부분의 트랜잭션 모델들에서 무효에 대한 다른 근거이다. 따라서, 이러한 트랜잭션들은 블록들(151) 내로 채굴되거나 전파되지 않을 것이다.
UTXO-기반 트랜잭션 모델에서, 주어진 UTXO는 전체로서 지출될 필요가 있다는 것에 주의한다. 다른 프랙션(fraction)이 지출되면서, 지출된 것으로 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에서 명시적으로 지정될 수 있다는 것이 반드시 배제되는 것은 아니다.
앨리스 및 밥의 디지털 자산들은 블록체인(150)의 임의의 위치의 임의의 트랜잭션들(152)에서 그들에게 잠겨 있는 미지출 UTXO로 구성된다. 따라서 통상적으로, 주어진 당사자(103)의 자산들은 블록체인(150) 전반에 걸친 다양한 트랜잭션들(152)의 UTXO들에 걸쳐 흩어져 있다. 블록체인(150)의 어떤 위치에도 주어진 당사자(103)의 총 잔액을 정의하는 숫자는 전혀 없다. 클라이언트 애플리케이션(105)에서 지갑 기능의 역할은, 개개의 당사자에게 잠겨 있으며 다른 전방 트랜잭션에서 아직 지출되지 않은 모든 다양한 UTXO들의 값들을 함께 대조하는 것이다. 이는 저장 노드들(104S) 중 임의의 것, 예컨대, 개개의 당사자의 컴퓨터 장비(102)에 가장 가깝거나 가장 잘 연결된 저장 노드(104S)에 저장된 바와 같은 블록체인(150)의 사본을 질의함으로써 가능할 수 있다.
스크립트 코드는 종종 도식적으로(즉, 정확한 언어가 아님) 표현된다는 것에 주의한다. 예컨대, [Checksig PA] = OP_DUP OP_HASH160 <H(PA)> OP_EQUALVERIFY OP_CHECKSIG를 의미하도록 [Checksig PA]가 작성될 수 있다. "OP_..."는 스크립트 언어의 특정 작업코드(opcode)를 지칭한다. OP_CHECKSIG(또한 "Checksig"라 불림)는 2개의 입력들(서명 및 공개 키)을 취하고 ECDSA(Elliptic Curve Digital Signature Algorithm)을 사용하여 서명의 유효함을 검증하는 스크립트 작업코드이다. 런타임 시에, 서명('sig')의 임의의 발생은 스크립트로부터 제거되지만, 해시 퍼즐과 같은 부가적인 요건들은 'sig' 입력에 의해 검증된 트랜잭션에서 유지된다. 다른 예로서, OP_RETURN은 트랜잭션 내에 메타데이터를 저장하고 그리하여 메타데이터를 블록체인(150)에 변경 불가능하게 기록할 수 있는 트랜잭션의 소비 불가능한 출력을 생성하기 위한 스크립트 언어의 작업코드이다. 예컨대, 메타데이터는 블록체인에 저장하고자 하는 문서를 포함할 수 있다.
서명 PA는 디지털 서명이다. 실시예들에서, 이는 타원 곡선 secp256k1을 사용하는 ECDSA에 기초한다. 디지털 서명은 특정 데이터 조각에 서명한다. 실시예들에서, 주어진 트랜잭션에 대해, 서명은 트랜잭션 입력의 일부, 및 트랜잭션 출력의 전부 또는 일부에 서명할 것이다. 서명되는 출력들의 특정 부분들은 SIGHASH 플래그에 의존한다. SIGHASH 플래그는 어느 출력들이 서명되는지를 선택하기 위해 서명의 끝에 포함된 4-바이트 코드이다(이에 따라, 서명 시에 고정됨).
잠금 스크립트는 때로는, 그것이 개개의 트랜잭션이 잠겨 있는 당사자의 공개 키를 포함한다는 사실을 지칭하는 "scriptPubKey"라 칭해진다. 잠금 해제 스크립트는 때로는 그것이 대응하는 서명을 제공한다는 사실을 지칭하는 "scriptSig"라 칭해진다. 그러나, 보다 일반적으로, UTXO가 리딤되기 위한 조건이 서명을 인증하는 것을 포함하는 것이 블록체인(150)의 모든 애플리케이션들에서 필수적인 것은 아니다. 보다 일반적으로 스크립팅 언어는 임의의 하나 이상의 조건들을 정의하는 데 사용될 수 있다. 따라서 보다 일반적인 용어들 "잠금 스크립트" 및 "잠금 해제 스크립트"가 선호될 수 있다.
계층화된 네트워크
계층화된 네트워크 구조: 계층화된 네트워크는 통신 채널 위에 계층화된 오버레이 네트워크(overlay network)이다. 예컨대, 통신 채널은 개인 영역 네트워크, 로컬 영역 네트워크(예컨대, 회사간 P2P 네트워크) 또는 인터넷과 같은 광역 네트워크와 같은 기본 인프라구조 네트워크일 수 있다. 다른 예에서, 계층화된 네트워크는 유선 연결을 통해 연결된 노드의 네트워크일 수 있다. 또 다른 예에서, 연결은 무선 연결, 예컨대, 블루투스 또는 Wi-Fi 연결일 수 있다. 일부 예들에서, 위의 예시적인 연결들 중 일부 또는 전부는 계층화된 네트워크를 형성하는 데 사용될 수 있다.
노드 중 일부 또는 전부는 연결 프로토콜에 따라 계층화된 네트워크에 연결(즉, 합류 또는 재합류)하도록 구성된 네트워크이다. 연결 프로토콜은, 연결 노드가 연결(즉, 합류 또는 재합류하려고 시도)하는 네트워크의 특정 계층에 따라 다를 수 있다. 연결 프로토콜을 자세히 설명하기 전에, 연결 프로토콜에 의해 생성되거나 시행될 수 있는 시리즈의 예시적인 계층화된 네트워크가 설명될 것이다. 그러나, 이들은 단지 예시적인 예일 뿐이며 일반적으로 연결 프로토콜을 따르는 임의의 계층화된 네트워크가 생성될 수 있다는 것이 인지될 것이다.
도 3은 계층화된 네트워크(LN)(300)의 예의 개략적인 표현을 도시한다. 일반적으로, LN은 코어 노드(301)로 구성된 코어 네트워크(또는 코어 계층), 및 시리즈의 계층(또는 셸(shell))을 포함한다. 코어 계층은 또한 LN의 제1 계층으로 지칭된다. 시리즈의 계층은 제2 노드(302)로 구성된 제2 계층으로부터 하나 이상의 외부 계층으로 순서대로 코어 계층의 외측으로 연장된다. 각각의 외부 계층은 세트의 외부 노드(303)로 구성된다. 하나의 외부 계층만이 도 3에 도시되지만, LN은 임의의 수의 외부 계층을 포함할 수 있음이 인지될 것이다. 특정 예로서, 도 5는 5개의 계층을 포함하는 LN(500)의 예를 도시하고, 도 6은 4개의 계층을 포함하는 LN(600)의 예를 도시한다.
도 3의 예시적인 LN(300)은 5개의 코어 노드(301), 6개의 제2 노드(302) 및 8개의 외부 노드(303)를 포함한다. 일부 LN(300)에서, 노드의 수는 계층마다 증가할 수 있고, 즉, 코어 계층은 가장 적은 수의 노드로 구성되고, 최외측 계층은 가장 많은 수의 노드로 구성된다. 다른 예들에서, 코어 계층과 최외측 계층 사이의 계층들 중 하나 이상은 가장 많은 수의 노드들로 구성될 수 있다. 이 예에서, 코어 계층은 LN(300)의 최내측 계층이고 제2 계층은 중간 계층이며, 유일한 외부 계층인 외부 계층은 최외측 계층이다.
코어 계층(LN 내의 네트워크)은 이 예에서 완전한 그래프를 형성하고, 즉, 각각의 코어 노드(301)는 상이한 코어 노드(301)에 연결된다. 5개의 코어 노드(301)의 코어 계층에 대해, 주어진 예에서, 코어 계층은 10개의 별개의 코어 연결(즉, 2개의 코어 노드 사이의 연결)을 필요로 한다. 다른 예(예컨대, 도 4)에서, 코어 계층은 완전한 그래프가 아닐 수 있다. 코어 계층은 "거의 완전한 그래프"를 형성할 수 있다. 거의 완전한 그래프에서, 적어도 하나의 코어 노드(301)는 적어도 하나의 다른 코어 노드(301)에 연결되지 않는다. 하나의 코어 연결만이 누락되었을 수 있다. 거의 완전한 그래프의 특정 예에서, 각각의 코어 노드(301)는 다른 코어 노드(301) 모두가 아닌 하나 이상에 연결될 수 있다.
제2 계층은 제2 노드(302)를 포함한다. "제2 노드"라는 용어는, 구성에 따라, LN(300)의 제2 계층에 위치된 노드(302)에 대한 라벨로만 사용된다는 것이 유의된다. 각각의 제2 노드(302)는 적어도 하나의 코어 노드(301)에 연결된다. 일부 예에서, 각각의 제2 노드(302)는 하나의 코어 노드(301)에만 연결될 수 있다. 대안적으로, 제2 노드(302) 중 일부 또는 전부는 하나 초과의 코어 노드(301)에 연결될 수 있다. 예컨대, 제2 노드(302) 중 일부 또는 전부는 각각의 모든 코어 노드(301)에 연결될 수 있다. 도 3의 예시적인 LN(300)에서, 각각의 코어 노드(301)는 2개의 제2 노드(302)에 연결된다. 그러나, 이 예에서, 일부 제2 노드(302)(줄무늬 원으로 도시된 것들)는 하나의 코어 노드(301)에 연결되는 반면에, 일부 제2 노드(302)(백색 원으로 도시된 것들 및 음영 원으로 도시된 것들)는 2개의 코어 노드(301)에 연결된다. 동일한 코어 노드(301)에 연결된 제2 노드(302)(및 외부 계층의 외부 노드(303))는 "커뮤니티(community)"로 지칭된다. 예컨대, 각각의 백색 노드는 함께 하나의 커뮤니티를 형성하고, 각각의 줄무늬 노드는 함께 커뮤니티를 형성하고, 각각의 음영 노드는 함께 또 다른 커뮤니티를 형성한다. 제2 노드(302)와 코어 노드(301) 사이의 연결을 "조상 연결(ancestor connection)"로 지칭되고, 넓은 점선으로 도시된다.
도 3의 예에서, 각각의 제2 노드(302)는 2개의 다른 제2 노드(302)에 연결된다. 일부 예에서, 제2 노드(302) 중 일부 또는 전부는 다른 제2 노드와 연결을 형성하지 않을 수 있고, 예컨대, 일부 제2 노드(302)는 다른 제2 노드(302)에 연결될 수 있는 반면에, 일부 제2 노드는 다른 제2 노드(302)에 연결될 수 있다. 이러한 "인트라-계층" 연결은 도 3에서 노드 사이에서 실선으로 도시된다.
도 3의 외부 계층은 외부 노드(303)를 포함한다. 본원에서 "외부 계층"에서 "외부"라는 용어는 그 자체로 전체적으로 LN 네트워크의 최외측 계층으로 반드시 제한하지는 않지만, 그것이 하나의 가능성이라는 점이 유의된다. 각각의 외부 노드(303)는 적어도 하나의 제2 노드(302)에 연결된다. 일부 예에서, 각각의 외부 노드(303)는 하나의 제2 노드(302)에만 연결될 수 있다. 대안적으로, 외부 노드(303) 중 일부 또는 전부는 하나 초과의 제2 노드(302)에 연결될 수 있다. 예컨대, 외부 노드(303) 중 일부 또는 전부는 각각의 그리고 각각의 모든 제2 노드(301)에 연결될 수 있다. 도 3의 예시적인 LN(300)에서, 각각의 외부 노드(303)는 2개의 제2 노드(302)에 연결된다. 일부 제2 노드(302)(즉, 줄무늬 노드)는 2개의 외부 노드(303)에 연결되고, 일부 제2 노드(302)(즉, 백색 노드 및 음영 노드)는 3개의 외부 노드(303)에 연결된다.
도 3의 예에서, 각각의 외부 노드(303)는 동일한 계층의 2개의 다른 외부 노드(303)에 연결된다. 일부 예에서, 외부 노드(303) 중 일부 또는 전부는 동일한 계층의 다른 외부 노드(303)와 어떠한 연결도 형성하지 않을 수 있다. 외부 노드(303) 중 일부 또는 전부는 동일한 계층의 다른 외부 노드(303)와 적어도 하나의 연결을 형성할 수 있다.
적어도 하나의 제2 노드(302)에 연결될 뿐만 아니라, 각각의 외부 노드(303)는 또한 적어도 하나의 코어 노드(301)에 연결된다. 외부 노드(303)와 코어 노드(301) 사이의 연결은 "코어 조상 연결"로 지칭되고, 얇은 점선으로 도시된다. 각각의 외부 노드(303)는, 그들의 조상의 제2 노드(들)(302)가 연결된 코어 노드(301) 각각에 연결될 수 있다. 도 3에 도시된 바와 같이, 각각의 외부 노드(303)는, 그들의 조상의 제2 노드(들)(302)가 연결된 코어 노드(301) 각각에 연결될 수 있고 다른 코어 노드(301)에는 연결되지 않을 수 있다. 이 경우에, 각각의 외부 노드(303)는 단일의 커뮤니티에 속한다.
도 4는 LN(400)의 다른 예의 개략적인 표현을 도시한다. 도 3의 LN(300)과 같이, 예시적인 LN(400)은 코어 계층, 제2 계층 및 외부 계층을 포함한다. 이러한 예시적인 LN(300, 400)은 동일한 수의 노드(즉, 5개의 코어 노드(301), 6개의 제2 노드(302) 및 8개의 외부 노드(303))를 공유하지만, 다른 수의 연결을 포함한다. 예컨대, 이 예에서, 코어 계층은, 코어 노드(301) 사이의 일부 연결이 존재하지 않기 때문에 완전한 그래프가 아니다. 또 다른 차이는, 2개의 커뮤니티(백색 노드 및 음영 노드)가 단일 코어 노드(301)를 포함하는 반면에 다른 커뮤니티(음영 노드)가 3개의 코어 노드(301)를 포함한다는 것이다. 또 다른 차이는, LN(300)의 외부 셸 내의 노드의 디그리(degree)가 2인 것과 달리, LN(400)의 외부 셸 내의 노드의 디그리가 이제 1이라는 것이다. 즉, 이 예시적인 LN(400)에서, 각각의 외부 노드(303)는 단일의 다른 외부 노드(303)에 연결된다. 따라서, 다른 계층의 노드는 상이한 디그리를 갖는다.
도 5는 LN(500)의 다른 예의 개략적인 표현을 도시한다. 이 예에서, 일부 코어 노드(301)만이 제2 노드 및 외부 노드(303)에 연결된다. 즉, 이 예에서, 일부 코어 노드(301)는 다른 코어 노드(301)와의 연결만을 형성한다. 따라서, 이 예에서, LN(500)은 단일 커뮤니티(음영 노드)를 포함한다. 이러한 예의 LN(500)은 5개의 계층: 코어 계층, 제2 계층 및 3개의 외부 계층을 포함한다. 코어 계층은 거의 완전한 그래프를 형성하는 5개의 코어 노드(301)로 구성된다. 거의 완전한 그래프의 이 예에서, 단일 코어 연결만이 누락되었다. 제2 계층은, 2개의 코어 노드(301)에 연결된 단일 제2 노드(302)로 구성된다. 제2 계층은, 2개의 코어 노드(301)에 연결된 단일 제2 노드(302)로 구성된다. 제3 계층은, 조상 연결을 통해 제2 노드(302)에 연결된 단일 외부 노드(303)로 구성된다. 제3 계층의 외부 노드(303)는 또한, 제2 노드(302)가 연결된 2개의 코어 노드(301)에 연결된다. 외부 노드(303)는 개개의 코어 조상 연결을 통해 2개의 코어 노드(301)에 연결된다. 제4 계층은 또한 단일 외부 노드(304)로 구성된다. 제4 계층의 외부 노드(304)는 조상 연결을 통해 제3 계층의 외부 노드(303)에 연결되고, 조상 연결을 통해 제2 노드(302)에 연결된다. 제4 계층의 외부 노드(304)는 또한, 제3 계층의 제2 노드(302)와 외부 노드(303)가 연결된 2개의 코어 노드(301)에 연결된다. 외부 노드(304)는 개개의 코어 조상 연결을 통해 2개의 코어 노드(301)에 연결된다. 마지막으로, 제5 계층은 2개의 외부 노드(305)로 구성된다. 제5 계층의 2개의 외부 노드(305)는 제4 계층의 외부 노드(304), 제3 계층의 외부 노드(303) 및 제2 노드(302)에 연결되며, 여기서 각각의 연결은 조상 연결이다. 2개의 외부 노드(305)는 또한 코어 조상 연결을 통해 2개의 코어 노드(301)에 연결된다. 이 예시적인 LN(500)에서, 제2 계층의 노드 및 외부 계층의 노드는 동일한 계층의 어떠한 다른 노드에도 연결되지 않는다.
도 6은 LN(600)의 다른 예의 개략적인 표현을 도시한다. 이 LN은 백색 노드와 흑색 노드로 도시된 2개의 커뮤니티의 노드를 포함한다. 이 예에서, 코어 계층은 완전한 그래프(즉, 노드의 네트워크)를 형성한다. 각각의 커뮤니티는 3개의 코어 노드(301)의 별개의 세트를 포함한다. 이 예시적인 LN(600)은 4개의 계층(코어 계층, 제2 계층 및 2개의 외부 계층)을 포함한다. 외부 계층의 각각의 노드는 선행하는 계층 내의 하나의 노드에 연결된다. 도 5의 예시적인 LN(500)과 같이, 제2 계층의 노드 및 외부 계층의 노드는 동일한 계층의 어떠한 다른 노드에도 연결되지 않는다.
일부 실시예에서, LN(300, 400, 500, 600)(이제부터 간결함을 위해 "300"으로 표기됨)은 "블록체인 계층화된 네트워크(BLN)"일 수 있다. BLN이라는 용어는 본원에서, 블록체인 네트워크, 또는 블록체인 네트워크의 적어도 일부, 예컨대, 도 1을 참조하여 설명된 블록체인 네트워크(106)를 포함하는 계층화된 네트워크로 정의된다.
BLN은 만다라(Mandala) 네트워크에서 영감을 얻었고, 일부 유사한 특징을 공유하지만, 예컨대, 블록체인 네트워크(106)를 활용하는 서비스 및 사용자 네트워크에 대해 더 유연하고 바람직한 연결 구조를 허용하도록 설계된다.
BLN(300)은 자신의 코어에서 블록체인 네트워크(106) 중 적어도 일부를 포함할 수 있다. 일반적으로, 계층화된 네트워크의 노드는 인터넷(101)과 같은 기본 인프라구조 네트워크에 오버레이된다. 코어 노드 중 일부 또는 전부는 블록체인 네트워크(106)의 노드(104)이다. 이들은 채굴 노드(104M), 저장 노드(104S), 또는 이들의 조합을 포함할 수 있다. 실시예에서, 각각의 코어 노드는 채굴 노드(104M) 및/또는 저장 노드(104S)(예컨대, 전체 사본 노드)이다.
각각의 외부 노드(303)(또는 최외측 계층의 각각의 외부 노드)는 사용자의 컴퓨터 장비를 포함하는 최종 사용자 노드일 수 있다. 이것은 개인 사용자이거나 회사, 학술 기관 또는 정부 기관 등과 같은 조직일 수 있다. 따라서, 각각의 외부 노드(303)는 하나 이상의 사이트에서 하나 이상의 서버 유닛을 포함하는 서버 및/또는 하나 이상의 사용자 단말을 포함할 수 있다. 각각의 외부 노드(303)는 하나 이상의 메모리 유닛을 포함하는 메모리, 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함한다. 이들은, 예컨대, 다른 네트워크 요소 또는 사용자 장비와 관련하여 이전에 논의된 것과 같은 메모리 매체 및/또는 프로세서의 임의의 형태를 취할 수 있다. 메모리는 처리 장치에서 실행되도록 배열된 클라이언트 소프트웨어를 저장하고, 여기서 클라이언트 소프트웨어는, 실행될 때, 다음의 실시예 또는 유사한 실시예 중 어느 하나에 따른 연결 프로토콜을 따르는 프로토콜의 클라이언트로서 노드를 동작시키도록 구성된다. 선택적으로, 최종 사용자 노드 중 하나 이상은 블록체인 네트워크(106)의 사용자(102)의 사용자 장비(103)를 포함할 수 있고, 클라이언트 소프트웨어는 블록체인 지갑 애플리케이션(105) 등을 포함할 수 있다.
각각의 제2 노드(302)는 하나 이상의 물리적 서버 유닛을 포함하는 서버의 형태를 취할 수 있다. 각각의 이러한 노드는 하나 이상의 메모리 유닛을 포함하는 메모리, 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함한다. 이들은, 예컨대, 다른 네트워크 요소와 관련하여 이전에 논의된 것과 같은 메모리 매체 및/또는 프로세서의 임의의 형태를 취할 수 있다. 메모리는 제2 노드(302)의 처리 장치에서 실행되도록 배열된 소프트웨어를 저장한다. 이 소프트웨어는, 실행될 때, 다음의 실시예 또는 유사한 실시예 중 어느 하나에 따라 연결 프로토콜을 따르도록 구성된다. 일부 실시예에서, 소프트웨어는, 실행될 때, 이하에서 설명된 실시예 또는 유사한 실시예 중 임의의 것에 따라 동작하는 서비스를 제공하도록 구성된다.
일부 예에서, 제2 노드(302) 중 일부 또는 전부는 스마트 계약 서비스를 동작시킬 수 있다. 스마트 계약 서비스는, LN(300)의 다른 노드 중 하나, 예컨대, 외부 노드(303)에 의해 스마트 계약 서비스에 전송된 블록체인 트랜잭션에 응답하여 그리고 이에 기초하여 미리 정의된 동작을 수행하도록 구성된다. 예컨대, 스마트 계약 서비스는, 외부 노드(303)로부터 특정 블록체인 트랜잭션을 수신하는 것에 응답하여, 블록체인 트랜잭션을 코어 노드(301)에 전송할 수 있다.
다른 예에서, 제2 노드(302) 중 일부 또는 전부는, 그 중에서도, 분산형 데이터베이스를 동작시킬 수 있다. 즉, 분산형 데이터베이스를 동작시키는 각각의 제2 노드(302)는 LN(300)의 다른 노드, 예컨대, 외부 노드(303)로부터 수신된 데이터를 저장하도록 구성된다. 데이터를 수신 및 저장하는 제2 노드(302)는, 분산형 데이터베이스를 또한 동작시키는 다른 제2 노드(302)에 데이터를 전파하도록 구성될 수 있다.
노드(301, 302, 303)는 오버레이 네트워크 레벨에서 서로 간의 연결을 형성하도록 구성된다. 즉, 계층화된 네트워크의 노드(301, 302, 303)는, 그들이 계층화된 네트워크의 다른 노드(301, 302, 303)와 형성할 수 있고 형성할 수 없는 연결이 무엇인지를 지정하는 오버레이 네트워크 프로토콜을 따르도록 구성된다. 따라서, 모든 노드가 기본 인프라구조(예컨대, 인터넷)를 통해 물리적으로 서로 연결될 수 있지만(반드시 그런 것은 아님), 그들이 계층화된 네트워크(300)의 관련 오버레이 네트워크 프로토콜에 따라 동작하는 계층화된 네트워크의 노드(301, 302, 303)로서 참여할 때, 이러한 노드(301, 302, 303) 간의 연결은 더 많이 제한될 수 있다. 계층화된 네트워크(300)의 2개의 노드(301, 302, 303) 사이의 연결은, 이러한 노드가 직접 통신할 수 있음을 의미하며, 이 맥락에서 이는 계층화된 네트워크(300)의 다른 노드(301, 302, 303)를 통해 홉(hop)을 수행할 필요가 없음을 의미한다. 계층화된 네트워크와 같은 오버레이 네트워크의 맥락에서, "연결"은 계층화된 네트워크(300)의 레벨(즉, 계층화된 네트워크의 오버레이 네트워크 프로토콜 레벨)에서의 연결(즉, 에지)을 의미한다.
LN(300)이 BLN인 실시예에서, 제2 노드(302) 중 일부 또는 전부는 블록체인 트랜잭션을 이러한 제2 노드(302)가 연결된 코어 노드(301)에 전송하도록 구성될 수 있다. 일부 예들에서, 제2 노드(302)는, 블록체인 트랜잭션을 코어 노드(들)(301)로 전송하기 전에, 블록체인 트랜잭션을 생성할 수 있다. 다른 예에서, 제2 노드(302)는 블록체인 트랜잭션을 코어 노드(들)(301)에 전달할 수 있다. 예컨대, 제2 노드(302)는 외부 노드(303)로부터 블록체인 트랜잭션을 수신하고, 그런 다음 수신된 블록체인 트랜잭션을 코어 노드(들)(301)에 전송할 수 있다. 유사하게, 주어진 제2 노드(302)(즉, 제2 노드 중 일부 또는 전부)는, 주어진 제2 노드(302)에 연결된 코어 노드(들)(301) 및/또는 외부 노드(303)로부터 블록체인 트랜잭션을 획득하도록 구성될 수 있다.
추가적으로 또는 대안적으로, 외부 노드(303) 중 일부 또는 전부는, 그들이 연결된 코어 노드(들)(301)에 블록체인 트랜잭션을 전송하도록 구성될 수 있다. 외부 노드(303)는 또한, 그들이 연결된 제2 노드(들)(302)에 블록체인 트랜잭션을 전송하도록 구성될 수 있다. 일부 예에서, 외부 노드(303)는 블록체인 트랜잭션을 제2 노드(302) 및 코어 노드(301)에 전송할 수 있다.
외부 노드(303) 중 일부 또는 전부는 블록체인 트랜잭션을 다른 외부 노드(303), 예컨대, 동일한 계층의 외부 노드, 또는 정렬된 세트의 계층 내의 이전 계층 또는 다음 계층의 외부 노드에 전송하도록 구성될 수 있다.
BLN(300)의 코어 노드(301) 각각이 블록체인 노드(104)의 역할을 수행하는 실시예에서, 제2 노드(302) 및/또는 외부 노드(303) 중 일부 또는 전부는, 주어진 트랜잭션이 주어진 제2 노드(302) 또는 외부 노드(303)가 연결된 채굴 노드(104M)의 트랜잭션 풀에서 수락되었다는 확인을 요청하도록 구성될 수 있다. 풀(154)(때때로 멤풀로 지칭됨)은 블록체인 네트워크(106)의 합의 규칙 세트에 따라 유효성 검증된 트랜잭션을 포함한다. 트랜잭션(예컨대, "제1 트랜잭션")이 풀(154)에 포함되는 경우, 채굴 노드(104M)는, 제1 트랜잭션의 입력에 의해 참조되는 출력을 이중으로 지출하려고 시도하는 다른 트랜잭션(예컨대, "제2 트랜잭션")을 수락하지 않을 것이다. 따라서, 제2 노드(302) 및/또는 외부 노드(303)는, 트랜잭션(예컨대, 노드(302, 303)가 블록체인 네트워크(106)에 제출한 트랜잭션)이 수락되었다는 것을 체크하거나 트랜잭션( 예컨대, BLN(300)의 다른 노드로부터 수신된 트랜잭션)이 이중 지출 시도인지를 체크하기 위해 코어 노드(301)에 질의할 수 있다. 코어 노드(301)는 요청에 대한 응답을 요청 노드(302, 303)에 전송하도록 구성된다.
추가적으로 또는 대안적으로, 제2 노드(302) 및/또는 제3 노드(303)는, 블록체인(150)의 블록(151)에서 채굴된 트랜잭션의 머클 증명에 대한 요청을 코어 노드(301)에 전송하도록 구성될 수 있다. 머클 증명은 당업자에게 익숙할 것이다. 머클 증명은, 머클 루트로 역추적하는 시퀀스의 해시이다. 트랜잭션이 블록(151)에서 채굴되었는지 여부를 검증하기 위해, 노드(302, 303)는 트랜잭션의 해시를 취하고, 머클 증명의 시퀀스의 해시 내의 제1 해시(즉, 트랜잭션의 해시와 동일한 레벨의 머클 트리에서의 해시 파트너)와 이를 연결하고 그리고 결과를 해싱한다. 이 연결 및 해싱 프로세스는, 머클 증명의 모든 해시가 활용될 때까지 반복된다. 결과적인 해시가 머클 루트와 동일하면, 트랜잭션이 머클 트리 및 따라서 블록(151)에 포함되어야 한다. 코어 노드(301)는 머클 증명을 요청 노드(302, 303)에 전송하도록 구성된다.
추가적으로 또는 대안적으로, 제2 노드(302) 및/또는 제3 노드(303)는 주어진 블록(151)의 블록 헤더에 대한 요청을 코어 노드(301)에 전송하도록 구성될 수 있다. 다른 데이터 중에서, 블록 헤더는 해당 블록(151)으로 채굴된 트랜잭션의 머클 루트를 포함한다. 코어 노드(301)는 머클 증명을 요청 노드(302, 303)에 전송하도록 구성된다.
일부 실시예에서, 코어 노드(301) 중 일부 또는 전부는 코어 노드(301)에 연결된 외부 노드(들) 중 일부 또는 전부 및/또는 제2 노드(들)(302) 중 일부 또는 전부에 세트의 트랜잭션을 전송하도록 구성될 수 있다. 세트 내의 트랜잭션은 공통 속성을 공유할 수 있다. 예컨대, 코어 노드(301)는, 특정 프로토콜 플래그를 포함하는 모든 트랜잭션을 전송할 수 있다. 플래그는 트랜잭션의 출력, 예컨대, 지출 불가능한 출력에 포함될 수 있다. 다른 예로서, 트랜잭션은 특정(및 동일한) 블록체인 어드레스를 포함할 수 있으며, 예컨대, 트랜잭션은 동일한 블록체인 어드레스에 대해 지불 가능할 수 있다. 외부 노드(303)는, 코어 노드(301)가 외부 노드(303)와 연관된 어드레스로 지불 가능한 임의의 트랜잭션을 전송할 것을 코어 노드(301)와 합의할 수 있다. 또 다른 예로서, 트랜잭션은 2차 합의 규칙 세트를 포함할 수 있다. 즉, 트랜잭션은 출력에 하나 초과의 제어 분기(control branch)를 포함할 수 있으며, 각각의 제어 분기는 각각의 합의 규칙 세트에 특정하다. 출력은 제1 규칙 세트에 특정한 제1 제어 분기 및 제2 규칙 세트에 특정한 제2 제어 분기를 포함할 수 있다(2개의 제어 분기는 if-else 조건에 포함될 수 있음). 노드(302, 303)가 제2 규칙 세트를 구현하도록 구성된 경우, 코어 노드(301)는 트랜잭션을 노드(302, 303)에 전송할 수 있다. 노드(302, 303)가 제1 규칙 세트 또는 제2 규칙 세트 중 어느 것도 구현하도록 구성되지 않은 경우, 코어 노드는 트랜잭션을 노드(302, 303)에 전송하지 않는다.
채굴 노드(104M)인 코어 노드(301)는, 해당 채굴 노드(104M)에 의해 블록(151)으로 채굴된 생성 트랜잭션("코인베이스(coinbase)" 트랜잭션으로 또한 지칭됨)에, 해당 채굴 노드(104M)에 특정한 식별자(예컨대, "채굴자 ID")를 포함할 수 있다. BLN(300)의 다른 노드는 네트워크 상에서의 해당 채굴 노드(104M)를 식별하기 위해 식별자를 사용할 수 있다.
LN(300)의 노드(301, 302, 303)를 식별하는 또 다른 방법은 디지털 인증서를 이용하는 것이다. 노드(301, 302, 303) 중 일부 또는 전부는 디지털 인증서와 연관될 수 있다. 디지털 인증서는 개개의 노드의 식별자, 예컨대, 해당 노드와 연관된 공개 키, 노드의 네트워크 어드레스(예컨대, IP 어드레스) 등을 포함하고 이를 증명한다. LN(300)의 노드는 다른 노드의 디지털 인증서를 사용하여 해당 노드에 연결될 수 있다. 예컨대, 외부 노드(303)는 제2 노드(302)로부터 디지털 인증서를 획득하고, 디지털 인증서에 포함된 제2 노드의 식별 정보를 사용하여 제2 노드(302)에 연결될 수 있다.
주어진 계층의 노드는 정렬된 세트의 계층 내의 다음 계층의 노드에 디지털 인증서를 발행할 수 있고, 즉, 코어 노드(301)는 제2 노드(302)에 디지털 인증서를 발행할 수 있고, 제2 노드(302)는 제1 외부 계층의 외부 노드(303)에 디지털 인증서를 발행할 수 있고, 이러한 식이다. 일부 예에서, 주어진 계층의 노드는 동일한 계층의 노드에 디지털 인증서를 발행할 수 있으며, 예컨대, 제2 노드(302)는 하나 이상의 다른 제2 노드(302)에 개개의 디지털 인증서를 발행할 수 있다.
연결 프로토콜: 상술된 바와 같이, 계층화된 네트워크(300)에 연결된 각각의 노드는 연결 프로토콜에 따라 연결될 수 있다. 즉, 연결 노드는 연결 프로토콜의 규칙을 따라야 한다. 연결 노드는 연결 프로토콜에 의해 허용되는 연결만을 형성할 수 있다. 어떠한 다른 연결도 형성될 수 없다. 예에서, 연결 노드는 코어 노드(301), 제2 노드(302) 또는 외부 노드(303)일 수 있다. 일부 예에서, LN(300)의 각각의 노드는 연결 프로토콜을 따라야 한다. 다른 예에서, 처음으로 LN(300)에 연결되거나 LN(300)에 다시 합류하는 노드만이 연결 프로토콜을 따라야 한다. 도 3 내지 도 6은 연결 프로토콜에 따라 설정되는 예시적인 LN(300, 400, 500, 600)을 도시한다.
물리적으로 말해서, LN(300)의 노드들 각각은, 일부 예에서, 예컨대, 인터넷을 통해 일부 다른 레벨에서 서로 연결되거나 연결될 수 있음이 유의된다. 연결 프로토콜은, 오버레이 네트워크의 레벨에서 무슨 연결이 형성될 수 있는지에 대한 제한을 부과하고, 즉, 계층화된 네트워크 레벨에서, 일부 연결이 존재하지 않거나 허용되지 않는다. LN(300)의 각각의 연결 노드는, 노드가 오버레이 레벨에서 무슨 연결을 형성할 수 있는지 및 형성할 수 없는지를 결정하는 LN(300)의 오버레이 레벨 프로토콜(연결 프로토콜을 포함함)에 따라 동작하도록 구성된다. 다시 말해서, 연결은, 2개의 노드가 그들의 프로토콜에 의해 형성하기 위해 허용되도록 구성된 허용된 통신 채널이다. 노드가 다른 노드와 연결되면, 계층화된 네트워크의 다른 노드를 통한 호핑 없이, 다른 노드와 통신할 수 있지만, 그렇지 않은 경우, 노드는 그럴 수 없고, 그들 사이에 연결된 하나 이상의 다른 노드를 통해 호핑함으로써만 통신할 수 있다.
연결 프로토콜은, 코어 노드가 일부 예에서 최내측 계층일 수 있고 따라서 선행하는 계층에 연결될 수 없다는 것을 제외하고는, 연결 노드가 선행하는(더 내부의) 계층의 적어도 하나의 노드 및 적어도 하나의 코어 노드에 연결되는 것을 요구한다. 연결 노드가 제2 노드인 예에서, 이 2개의 요건은 등가이다. 연결 노드가 제1 외부 계층의 외부 노드인 경우, 연결 노드는 적어도 제2 노드(302) 및 코어 노드(301)에 연결된다.
연결 프로토콜은, 연결 노드가 하나 초과의 코어 노드에 연결되는 것을 요구할 수 있다. 연결 프로토콜은, 연결 노드가 코어 노드 전부가 아니라 하나 초과의 코어 노드, 예컨대, 하나의 코어 노드를 제외한 모든 코어 노드에 연결되는 것을 추가로 요구할 수 있다. 연결 노드는, 둘 이상의 코어 노드에 연결되어야 하는 제2 노드일 수 있다. 즉, 제2 노드 중 일부 또는 전부는 둘 이상의 코어 노드(그리고 일부 예에서 모든 코어 노드는 아님)에 연결되어야 한다.
연결 프로토콜은, 연결 노드가 하나 이상의 제2 노드에 연결되는 것을 요구할 수 있다. 연결 노드가 제2 노드인 경우, 이것은 연결(제2) 노드가 하나 이상의 다른 제2 노드에 연결되어야 함을 의미한다. 연결 노드가 외부 노드인 경우, 연결(외부) 노드는 하나 이상의 제2 노드에 연결되어야 한다. 연결 외부 노드는 제1 외부 계층의 외부 노드, 또는 제2 계층의 외부 노드 등일 수 있다.
연결 프로토콜은, 선행하는 계층의 노드에 연결된 외부 노드가 선행하는 계층의 노드가 연결된 코어 노드(들)(위에서 "코어 조상"으로 지칭됨) 중 일부 또는 전부에 연결되어야 한다는 것을 요구할 수 있다. 예컨대, 외부 노드는 제2 노드에 연결될 수 있다. 이 경우에, 외부 노드는 또한, 제2 노드가 연결된 코어 노드(들)에 연결되어야 한다. 외부 노드가 하나 초과의 제2 노드에 연결된 경우, 연결 프로토콜은, 외부 노드가 제2 노드 각각이 연결된 코어 노드(들)에 연결되어야 함을 요구할 수 있다. 다른 예로서, 제2 외부 계층의 외부 노드는 제1 외부 계층의 외부 노드에 연결될 수 있다. 이 예에서, 연결 프로토콜은, 제2 외부 계층의 외부 노드가 제1 외부 계층의 외부 노드가 연결된 코어 노드(들)에 연결되어야 함을 요구한다.
연결 프로토콜은, 외부 노드가 동일한 외부 계층의 하나 이상(예컨대, 2개)의 외부 노드에 연결되는 것을 요구할 수 있다. 연결 프로토콜은, 각각의 외부 노드가 동일한 계층의 하나 이상의 외부 노드에 연결되는 것을 요구할 수 있다. 대안적으로, 일부 외부 계층은 하나 이상의 동일한 계층 연결을 형성하는 외부 노드를 포함할 수 있고, 일부 외부 계층은 하나 이상의 동일한 계층 연결을 형성하지 않는 외부 노드를 포함할 수 있다. 연결 프로토콜은, 동일한 외부 계층의 각각의 외부 노드가 해당 계층의 동일한 수의 상이한 외부 노드에 연결되어야 함을 요구할 수 있다. 예컨대, 제1 외부 계층의 각각의 외부 노드는 2개의 외부 노드에 연결되도록 요구될 수 있다. 제2 외부 계층의 각각의 외부 노드는 3개의 외부 노드에 연결되도록 요구될 수 있다. 즉, 외부 노드가 연결되는 동일한 계층의 외부 노드의 수는 외부 계층 간에 다를 수 있다.
일부 실시예에서, i번째 외부 계층(예컨대, 제3 외부 계층)의 외부 노드는 선행하는 (i-1)번째 계층(예컨대, 제2 외부 계층)의 외부 노드에 연결될 수 있다. 연결 프로토콜은, 연속적인 (i+1)번째 외부 계층의 외부 노드(예컨대, 모든 외부 노드)가 i번째 외부 계층의 외부 노드가 연결된 (i-1)번째 계층의 각각의 노드에 연결되어야 한다는 것을 요구할 수 있다. 예컨대, 도 5의 LN(500)에서 제5 계층의 외부 노드(305)는 제4 계층의 외부 노드(304) 및 제3 계층의 외부 노드(303)에 연결된다. 일부 예에서, 연결 프로토콜은, (i+1)번째 계층의 외부 노드가 i번째 외부 계층의 외부 노드가 연결된 각각의 선행하는 계층의 각각의 외부 노드에 연결되어야 한다것을 요구할 수 있다.
LN(300)의 노드 중 일부 또는 전부가 디지털 인증서와 연관되는 실시예에서, 연결 프로토콜은, 연결 노드가 개개의 디지털 인증서와 연관된 노드와 연관된 노드에만 연결되어야 함을 요구할 수 있다. 일부 실시예에서, 연결 프로토콜은, 개개의 노드와 연관된 디지털 인증서가 개개의 노드에 선행하는 계층의 노드(예컨대, 코어 노드), 또는 일부 예에서, 개개의 노드의 동일한 계층의 노드(예컨대, 상이한 제2 노드)에 의해 발행되었다면, 연결 노드(예컨대, 외부 노드)가 개개의 노드(예컨대, 제2 노드)에만 연결되어야 함을 요구할 수 있다.
일부 실시예에서, 연결 프로토콜은, 연결 노드가 디지털 인증서를 연결 노드에 발행한 노드에만 연결될 수 있다는 것을 요구할 수 있다. 즉, 노드에 연결되는 것은 해당 노드로부터 디지털 인증서를 수신하는 것을 포함한다.
연결 프로토콜은 BLN의 구성을 가능하게 한다. 만다라 네트워크와 마찬가지로, BLN은 계층으로 구축된다. 만다라 네트워크와 달리, 제1 계층은 불완전한 그래프(예컨대, 거의 완전한 그래프)를 형성할 수 있다. BLN과 만다라 네트워크 사이의 다른 차이는, BLN에서, 각각의 연속적인 계층 내의 노드가 상이한 디그리를 가질 수 있고, 노드가 중앙 계층 내의 하나 초과의 노드에 연결될 수 있고 그리고/또는 노드의 디그리가 계층 사이에서 상이할 수 있다는 것이다.
바람직하게는, 중앙 코어 외부의 모든 노드에 대해:
(i) 각각의 노드는 중앙 코어 내의 n1개의 노드 중 m개의 노드에 연결된다.
(ii) 각각의 노드는 모든 각각의 계층 내의 노드에 연결되며, 여기서 g는 계층의 총 수이다.
(iii) 각각의 노드는 정확히 하나의 커뮤니티의 멤버이다. 최대 n2개의 커뮤니티가 있으며, 여기서 n2는 제2 계층의 노드의 수이다.
(iv) 각각의 노드는 최대 3개의 홉으로 모든 각각의 다른 모든 노드에 연결된다. 이것을 그래프의 직경(diameter)으로 지칭된다.
BLN에서, "커뮤니티"는 정확히 동일한 세트의 코어 조상을 공유하는 노드의 세트로 정의된다. 도 6은 네트워크가 n1=6, m=3 및 g=4인 BLN을 도시하고, 2개의 별개의 커뮤니티: 흑색 노드 커뮤니티 및 백색 노드 커뮤니티의 노드가 도시된다. 백색 노드 커뮤니티는 중앙 코어의 LHS에 있는 3개의 노드에 모두 연결된 노드를 포함하는 반면에, 흑색 노드 커뮤니티는 중앙 코어의 RHS 상의 3개의 노드에 모두 연결된 노드를 포함한다.
만다라 네트워크의 특징은, 코어 계층(i=1) 외부의 모든 노드가 정확히 하나의 코어 조상(즉, 모든 곳에서 ci=1)에 연결된다는 것이다. 이것은 만다라 네트워크의 신생의 속성에 크게 기여한다.
● 네트워크 크기(
Figure pct00001
)가 증가함에 따라 상수로 점근(asymptote)하는 평균 최단 경로 길이를 갖는다.
● 네트워크 크기(
Figure pct00002
)가 증가함에 따라, 매우 희소해진다.
● 랜덤 노드 고장(random node failure)에 대해 견고하다.
BLN의 특징은, 모든 비-코어 노드가 적어도 하나의 조상에 연결된다는 것이다. 그러나, BLN 정의는 코어 조상에 대해 최대 m개의 연결을 갖는 비코어 노드를 수용한다(즉, 모든 곳에서 1≤ci≤m). BLN 전체에 걸쳐, ci=1로부터 1≤ci≤m까지 일반화하는 이유는 블록체인 프로토콜의 아티팩트로서 이해될 수 있다. 블록체인 시스템을 정의하는 프로토콜은 확률적 보안 모델(probabilistic security model)에 의존한다. 본질적으로, 이것은, 블록체인(150)에 기록되는 이벤트에 대한 기득권을 가진 BLN 내의 임의의 참가자(노드)가 네트워크 해싱 파워(network hashing power)의 최소 비율(minimum fraction)(f)에 연결함으로써 확률적 보안 모델을 고려해야 함을 의미하고, 여기서 총 해싱 파워의 100%는 BLN의 코어 계층 내의 노드 사이에 분배된다.
코어 계층이 자신의 n1개의 코어 노드 간의 해시 파워의 균일한 평형 분포(uniform equilibrium distribution)를 나타낸다고 가정하면, 노드의 최소 비율은 다음과 같다.
Figure pct00003
블록체인 프로토콜은, 최소 비율에 대한 하한이 f=0.51이지만, 스케일에서 BLN의 네트워크 참가자는 (예컨대, 이중 -지출까지의) 탄력성 증가를 위한 이보다 더 높은 비율(예컨대, f=0.67)을 요구할 수 있다는 것을 나타낸다. BLN은 파라미터(m)의 선택을 특징으로 할 수 있는데, 왜냐하면 이는 해당 BLN의 요건에 대한 특정 사용 사례에 따라 달라지는 BLN 내의 참가자에 대한 동작의 확률적 보안을 지시하기 때문이다.
코어에 가장 가까운 제2 계층(L2)의 노드는 블록체인 프로토콜의 확률적 보안 모델에 가장 크게 의존하며, 이러한 종속성은 Lg에 접근하는 계층에서 감소할 수 있다. 연결 프로토콜은, L2의 노드가 정확히 c2=m개의 코어 조상에 연결되는 것을 요구할 수 있는 반면, 모든 연속적인 계층 i>2의 노드가 어느 곳에나 1≪ci≤m 범위의 코어 조상에 연결될 수 있다는 것을 요구할 수 있다. 일부 예에서, 모든 연속적인 계층 내의 노드는 m개의 코어 조상에 연결되어야 한다.
BLN의 중앙 코어 외부에 있는 노드는 코어에 'SPV형'으로 연결될 수 있다. 이것은, 그들이 다음을 할 수 있음을 의미한다.
a) 코어 노드에 트랜잭션을 전송한다.
b) 자신의 멤풀/후보 블록에서 트랜잭션이 수락되었는지를 코어 노드에 묻는다.
c) 블록에서 채굴된 트랜잭션의 머클 증명을 요청한다.
d) 최신 블록 헤더 목록을 요청한다.
이러한 단순하고 타겟팅된 요청은, BLN을 사용하여 가능한 가장 넓은 범위의 확장 가능한 솔루션이 최상부에 구축되는 것을 허용하면서, 코어 노드(301)에 가능한 한 적은 부담을 주도록 설계된다. 많은 사용 사례는 위에서 설명된 연결 유형을 더 이상 요구하지 않을 것이다. 일부 예에서, 제2 노드(302) 및/또는 외부 노드(303)는, 그들이 위의 동작 a) 내지 d)만을 수행할 수 있도록 구성된다. 그러나, 다른 솔루션, 일반적으로 엔터프라이즈 레벨은, 특정 기준을 충족시키는 트랜잭션과 같은 더 많은 데이터를 활성적으로 서빙하도록 코어에 요구할 수 있다. 따라서, 동작 a) 내지 d)는 BLN에 대한 최소 요건이지만, 일부 예에서는, 해당 노드와 코어 간의 추가 데이터 전송이 또한 가능하다.
스마트 계약을 동작시키는 노드의 경우, 일부 노드는 SPV형 동작 a) 내지 d)만을 필요로 할 수 있는 반면에, 다른 노드는 코어 노드로부터 더 많은 데이터를 수신하도록 합의가 이루어질 것을 요구할 수 있다.
일부 BLN에서, 사용자는 계층 3 또는 그 이상의 계층의 노드를 동작시킬 수 있고, 스마트 계약은 계층 2 또는 그 이상의 계층의 노드에 의해 동작될 수 있다. 사용자는, 특정 출력 어드레스를 포함하는 트랜잭션에 대해 블록체인(150)의 지속적인 모니터링을 필요로 하기 때문에, 특정 출력 어드레스를 갖는 트랜잭션에 대해 지속적으로 블록체인을 실제로 '청취'할 수는 없다. 일정 시간 기간마다 블록체인에 전송될 수 있는 트랜잭션의 수가 계속 증가하고 있다는 점을 감안할 때, 이러한 지속적인 모니터링은 최종 사용자에게 실용적이지 않다. 일부 블록체인의 지갑 아키텍처 중에서는, 블록체인을 지속적으로 모니터링하는 것이 일반적이지만, 일정 시간 기간마다 블록체인에 제출된 트랜잭션 수 및 블록체인의 사용자의 수 둘 모두가 장래에 극적으로 증가할 것으로 예상된다는 것을 고려해볼 때, 이것은 확장 가능한 솔루션이 아니다. 다음 예가 고려된다. 앨리스는 밥에게 지불하기를 원한다. 그녀는, 밥에게 속한 것으로 그녀가 알고 있는 출력 어드레스로 원하는 금액에 대한 트랜잭션을 생성한다. 그런 다음, 앨리스는 이 트랜잭션을 밥에게 직접 제출하지 않고 채굴 네트워크에 제출한다. 밥은 트랜잭션이 수락되었음을 알기 위해, 그는 블록체인을 '청취'하여 그의 출력 어드레스를 갖는 트랜잭션이 네트워크에 나타나는지 및 시기를 확인해야 한다. 그는 채굴 노드에게 자신을 대신하여 이를 수행하도록 요청해야 한다. 이것은, 채굴 노드가 밥의 어드레스를 기록하고 그것이 수신한 모든 각각의 트랜잭션이 이 어드레스와 일치하는지를 체크해야 함을 의미한다. 채굴자가 이를 수행하기 위해 어떠한 경제적 인센티브가 없다는 점이 유의된다. 채굴자가 초당 일백만 개의 트랜잭션을 처리해야 하고, 트랜잭션들이 일백만 개의 어드레스와 일치하는지를 체크해야 한다고 가정하면, 이것이 빠르게 비현실적이라는 것을 알 수 있다.
대신에, BLN에서, 앨리스는 밥과 직접 연결될 수 있고, 그에게 트랜잭션을 직접 전송할 수 있다. 그런 다음, 밥은 코어 내의 채굴자에게 트랜잭션을 전송하고 동시에 그들이 트랜잭션을 유효한 것으로 수락하는지를 물어볼 수 있다. 트랜잭션은 그들의 수수료를 포함하기 때문에, 채굴자들은 트랜잭션을 수락하도록 장려되고, 그들은 고아가 될 블록을 구성할 위험성을 낮추기 위해 그들이 트랜잭션을 수락했는지를 확인하도록 장려된다. 시스템을 훨씬 더 안전하게 만들기 위해, 앨리스는 밥에게 그녀의 트랜잭션에 대한 입력의 머클 증명을 전송할 수 있다. 밥은 블록 헤더의 사본을 갖고 있기 때문에, 이러한 머클 증명을 체크할 수 있다. 이것은, 앨리스의 입력이 한 시점에서 블록체인(150)의 일부였고, 그녀가 이미 그것을 지출했다면, 앨리스가 그에게 제공한 트랜잭션에서 그가 앨리스로부터 서명을 수신했기 때문에 밥이 이중 지출에 대한 증명을 갖게 될 것이라는 것을 밥에게 보장한다. 밥이 스마트 계약(제2 노드)일 수 있고 앨리스가 해당 스마트 계약과 상호작용하기를 원하는 사용자(외부 노드)일 수 있다는 것이 유의된다. 스마트 계약 운영자가 스마트 계약의 처리를 가능하게 하기 위해 채굴 노드와 임의의 특정 합의를 하지 않았다는 의미에서, 스마트 계약이 '가벼운(light)' 경우에, 스마트 계약 운영자는 상태 변경을 트리거링하는 트랜잭션을 수신하기 위해 블록체인(150)을 청취하는 것에 또한 의존할 수는 없다. 앨리스는 그러한 트랜잭션을 스마트 계약에 직접 전송해야 한다.
서비스 제공자는 계층 2 또는 이상 계층의 노드를 동작시킬 수 있다. 서비스 제공자의 경우는 사용자 또는 경량 스마트 계약의 경우와 상이하다. 서비스 제공자는 코어 채굴 노드 또는 코어 노드의 모음과 상업적 합의를 할 수 있고, 그런 다음, 이들은 서비스 제공자 노드에 특정 서브세트의 트랜잭션을 전파한다. 이러한 트랜잭션은 쉽게 식별 가능하고 다음과 같은 특정 기준을 충족시켜야 한다.
● 특정 프로토콜 플래그를 갖는 OP_RETURN 데이터. 예컨대, 메타넷(Metanet) 프로토콜, 토큰화된(Tokenized) 프로토콜 또는 디지털 인증서 프로토콜.
● 특정한 작은 세트와 일치하는 출력 어드레스. 예컨대, 엔터프라이즈 레벨의 스마트 계약 또는 어드레스 화이트리스트/블랙리스트.
● OP_VER 제어 분기에 의해 표시된 2차 합의 규칙 세트.
또한, 이러한 규칙을 따르거나 다른 방식으로 서비스 레벨 합의에 참여하는 커뮤니티의 일부로서 식별되는 코어에 전송되는 트랜잭션은 더 낮은(또는 심지어 0) 트랜잭션 수수료를 가질 수 있다. 부족분은 더 높은 트랜잭션 볼륨에 의해 또는 서비스 레벨 합의로부터의 법정화폐 수익으로 보충될 수 있다.
BLN(300)의 모든 노드는 그들의 아이덴티티와 연관된 반영구적 공개 키와 연관될 수 있다. 이 공개 키는, 아이덴티티 키의 결정론적 도출을 통해 또는 아이덴티티 키를 사용하여 트랜잭션 키에 서명하거나 또는 이를 암호화함으로써, 안전한 통신을 허용하고, 블록체인 트랜잭션에 사용되는 공개 키에 대한 링크를 제공할 수 있다.
채굴 코어 노드를 식별하는 2개의 방법은 다음과 같다.
1) 채굴자 ID. 채굴자는, 그들이 채굴하는 각각의 블록의 코인베이스 트랜잭션의 입력에 그들의 아이덴티티 키를 추가함으로써 자신을 식별하도록 선택할 수 있다.
2) 네트워크 분석. 일부 채굴자는 익명성을 유지하기로 선택한다. 그러나, 네트워크의 분석에 의해, 예컨대, 새로운 블록의 출처를 검토함으로써, 어떤 노드가 블록을 구성하는지를 식별하는 것은 여전히 가능하다.
BLN의 노드가 2개의 유형의 채굴자를 식별하여, 그들이 그들의 트랜잭션이 수락되었는지 여부에 대해 가능한 한 많은 채굴자를 폴링할 수 있다는 것이 중요하다.
채굴자 ID를 갖는 코어 노드는 계층 2 노드에 디지털 인증서를 발행할 수 있다. 이는, 그들이 이러한 노드와 서비스 레벨 합의를 하였기 때문일 수 있거나, 이러한 노드가 수수료에 대한 인증서를 요청했기 때문일 수 있다. 이러한 의미에서, 코어 노드는 인증 기관(CA)의 역할을 할 수 있다.
코어 노드로부터의 인증서가 있든 없든 간에, 계층 2 노드는 디지털 인증서를 그들에게 발행하기 위해 외부 CA를 찾을 수 있다. 따라서, 각각의 계층 2 노드는 자신의 아이덴티티를 증명하는 적어도 하나의 디지털 인증서를 가질 수 있다. 그들은 계층 2의 다른 노드에 인증서를 발행하고, 이로써 그들 사이에 신뢰의 웹을 생성할 수 있다. 계층 2 내의 노드는 계층 3 내의 노드에 인증서를 발행하고, 계층 3 내의 노드는 계층 4 내의 노드에 인증서를 발행하는 식으로, PKI(Public Key Infrastructure)로 지칭되는 인증서의 계층적 구조를 생성한다.
사실상, 그러한 PKI는 BLN의 노드 식별뿐만 아니라 올바른 BLN 구조가 고수되는 것을 보장하는 데 사용될 수 있다. 예컨대, 계층 3 노드가 너무 많은 계층 4 노드에 인증서를 발행하거나, 그들이 시스템의 다른 노드에 적절히 연결된다는 것을 보장하지 않으면, 계층 3 노드의 인증서가 리보크(revoke)될 수 있다.
이러한 인증서 자체는 블록체인(150)에 저장될 수 있다. 이는 PKI를 투명하고 쉽게 감사 가능(auditable)하게 한다.
정렬 및 타임스탬핑
애플리케이션 데이터의 순서가 중요한 블록체인을 사용하여 구현될 수 있는 애플리케이션이 많이 있을 수 있다. 이를 해결하기 위해, 본 개시의 실시예에 따르면, 네트워크의 하나 이상의 노드는, 데이터 아이템의 확정적인 순서를 결정하고 그런 다음 해당 순서를 블록체인에 변경 불가능하게 기록하기 위해, 서비스에 제출된 데이터의 상이한 아이템 사이를 중재하는 증명 서비스의 역할을 하도록 구성될 수 있다.
증명 서비스는 하나 이상의 증명 노드에서 구현된다. 실시예에서, 이들은 인터넷과 같은 기본 인프라구조 네트워크 상에 오버레이된 오버레이 네트워크의 노드이다. 그러나, 대안적으로, 그들이 자체 권한으로 네트워크, 예컨대, 조직 내의 사설 네트워크의 인프라구조 노드일 수 있다는 점이 제외되지 않는다. 어느 쪽이든, 하나 이상의 증명 노드는 하나 이상의 클라이언트 노드로부터 데이터 아이템을 수신하여, 수신된 데이터 아이템의 순서를 기록하는 트랜잭션을 형성하고, 블록체인(150) 상의 기록을 위해 이러한 트랜잭션을 하나 이상의 코어 노드로 전달하도록 배열된다. 코어 노드는 블록체인 네트워크(106)의 노드(104)이다. 이들은 채굴 노드(104M), 저장 노드(104S), 또는 이들의 조합을 포함할 수 있다. 실시예에서, 각각의 코어 노드는 채굴 노드(104M) 및/또는 저장 노드(104S)(예컨대, 전체 사본 노드)이다.
클라이언트 노드 각각은, 서비스 사용자의 컴퓨터 장비를 포함하는 최종 사용자 노드일 수 있다. 이것은 개인 사용자이거나 회사, 학술 기관 또는 정부 기관 등과 같은 조직일 수 있다. 따라서, 각각의 클라이언트 노드는 하나 이상의 사이트에서 하나 이상의 서버 유닛을 포함하는 서버 및/또는 하나 이상의 사용자 단말을 포함할 수 있다. 각각의 클라이언트 노드는 하나 이상의 메모리 유닛을 포함하는 메모리, 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함한다. 이들은, 예컨대, 다른 네트워크 요소 또는 사용자 장비와 관련하여 이전에 논의된 것과 같은 메모리 매체 및/또는 프로세서의 임의의 형태를 취할 수 있다. 메모리는 처리 장치에서 실행되도록 배열된 클라이언트 소프트웨어를 저장하고, 여기서 클라이언트 소프트웨어는, 실행될 때, 다음 실시예 또는 유사한 실시예 중 어느 하나에 따라 증명 노드(들)에 의해 제공되는 증명 서비스의 클라이언트로서 노드를 동작시키도록 구성된다. 선택적으로, 전송하는 최종 사용자 노드 중 하나 이상은 블록체인 네트워크(106)의 사용자(102)의 사용자 장비(103)를 포함할 수 있고, 클라이언트 소프트웨어는 블록체인 지갑 애플리케이션(105) 등을 포함할 수 있다. 그러나, 증명 서비스는, 그러한 모든 트랜잭션이 사용자의 지갑(105)에서 반드시 공식화되기보다는, 그러한 최종 사용자를 대신하여, 적어도 일부 트랜잭션을 공식화하도록 배열될 수 있다.
증명 노드는 클라이언트 노드와 코어 노드 사이를 중재하는 증명 서비스를 제공하도록 배열된다. 각각의 증명 노드는 하나 이상의 물리적 서버 유닛을 포함하는 서버의 형태를 취할 수 있다. 각각의 이러한 노드는 하나 이상의 메모리 유닛을 포함하는 메모리, 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함한다. 이들은, 예컨대, 다른 네트워크 요소와 관련하여 이전에 논의된 것과 같은 메모리 매체 및/또는 프로세서의 임의의 형태를 취할 수 있다. 메모리는 증명 노드의 처리 장치에서 실행되도록 배열된 증명 서비스 소프트웨어를 저장한다. 이 소프트웨어는, 실행될 때, 아래에 설명된 실시예 또는 유사한 실시예 중 임의의 것에 따라 동작하는 증명 서비스를 제공하도록 구성된다. 실시예에서, 각각의 증명 노드의 아이덴티티는 인증 기관에 의해 인증되어, 클라이언트 노드, 코어 노드 및/또는 다른 증명 서비스 노드가 증명 노드의 아이덴티티를 검증할 수 있게 한다. 각각의 클라이언트 노드의 아이덴티티는 인증 기관에 의해 인증되어, 증명 서비스 노드, 코어 노드 및/또는 다른 클라이언트 노드가 클라이언트 노드의 아이덴티티를 검증할 수 있게 한다. 증명 서비스를 제공하거나 사용할 목적으로 이러한 노드 간의 상호작용은 유효성 검증을 조건으로 할 수 있다. 대안적으로 또는 추가적으로, 노드 버저닝(versioning)은 오버레이 네트워크에서 노드 식별을 위한 대안적 메커니즘으로서 사용될 수 있다.
실시예에서, 위의 어레인지먼트는, 이를테면, 도 3 내지 도 6과 관련하여 설명되고 또한 예로서 도 7에 도시된 유형의 계층화된 네트워크(700)의 형태로 구현될 수 있다. 즉, 계층화된 네트워크는: 코어 노드(701)를 포함하는 코어 네트워크; 코어 주위의 적어도 하나의 중간 계층 ― 각각의 중간 계층은 하나 이상의 중간 계층 노드(702)를 포함함 ― ; 및 중간 계층의 최외측 주위의 적어도 하나의 외부 계층을 포함하며, 각각의 외부 계층은 하나 이상의 외부 계층 노드(703)를 포함한다. 본원에서 "외부 계층"에서 "외부"라는 용어는 그 자체로 전체적으로 계층화된 네트워크(700)의 최외측 계층으로 반드시 제한하지는 않지만, 그것이 하나의 가능성이라는 점이 유의된다. 실시예에서, 도 7의 계층화된 네트워크(700)는 도 3의 계층화된 네트워크(300)일 수 있으며, 이 경우에, 도 7의 외부 계층 노드는 도 3 또는 4의 제3 계층 노드이고, 도 7의 중간 계층 노드(702)는 도 3 또는 도 4의 제2 계층 노드(302)이고, 그리고 도 7의 코어 노드(701)는 도 3 또는 도 4의 코어 노드(301)일 수 있다.
도 3 내지 도 6과 관련하여 논의된 바와 같이, 계층화된 네트워크(700)는 인터넷과 같은 기본 물리적 또는 인프라구조 네트워크 상에 오버레이된 오버레이 네트워크일 수 있다. 이러한 실시예에서, 노드(701, 702, 703)는 오버레이 네트워크 레벨에서 서로 간의 연결을 형성하도록 구성된다. 즉, 계층화된 네트워크의 노드(701, 702, 703)는, 그들이 계층화된 네트워크의 다른 노드(701, 702, 703)와 형성할 수 있고 형성할 수 없는 연결이 무엇인지를 지정하는 오버레이 네트워크 프로토콜을 따르도록 구성된다. 따라서, 모든 노드가 기본 인프라구조(예컨대, 인터넷)를 통해 물리적으로 서로 연결될 수 있지만, 그들이 계층화된 네트워크(700)의 관련 오버레이 네트워크 프로토콜에 따라 동작하는 계층화된 네트워크의 노드(701, 702, 703)로서 참여할 때, 이러한 노드(701, 702, 703) 간의 연결은 더 많이 제한될 수 있다. 계층화된 네트워크(700)의 2개의 노드(701/ 702/ 703) 사이의 연결은, 이러한 노드가 직접 통신할 수 있음을 의미하며, 이 맥락에서 이는 계층화된 네트워크(700)의 다른 노드(701/702/703)를 통해 홉을 수행할 필요가 없음을 의미한다. 오버레이 네트워크의 맥락에서, "연결"은 오버레이 네트워크의 레벨(즉, 계층화된 네트워크의 오버레이 네트워크 프로토콜의 레벨)에서의 연결(즉, 에지)을 의미한다.
각각의 중간 계층 노드(702)는 코어 네트워크의 적어도 하나의 코어 노드(701)(블록체인 네트워크 노드(104))에 연결된다. 코어 네트워크는 블록체인 네트워크(106)의 적어도 일부를 포함한다. 실시예들에서, 코어 네트워크는 그 자체로 완전한 네트워크일 수 있다.
일부 경우에, 중간 계층 노드(702) 및/또는 외부 계층 노드(703) 중 일부는 블록체인 네트워크(106)의 주변 노드(104), 예컨대, 채굴 노드(104M) 및/또는 저장 노드(104S), 이를테면, 포워딩 노드(104F) 이외의 노드를 포함할 수 있다. 대안적으로, 이들은 블록체인 네트워크(106)의 클라이언트로서가 아닌 블록체인 네트워크(106)에서의 어떠한 역할(채굴, 저장 또는 포워딩)도 갖지 않는 노드를 포함할 수 있다.
각각의 외부 계층 노드(703)는 적어도 하나의 중간 계층 내의 중간 계층 노드 중 적어도 하나에 연결된다. 실시예에서, 각각의 외부 계층 노드(703)는 또한, 적어도 하나의 코어 노드(701)(즉, 블록체인 네트워크(106))에 대한 적어도 하나의 연결을 갖는다. 이러한 일부 실시예에서, 하나 이상의 외부 계층 노드(703) 각각은 코어 노드(701) 중 전부는 아니지만 하나 초과의 코어 노드에 연결된다. 실시예에서, 계층화된 네트워크(700)는 전체적으로 불완전한 네트워크일 수 있으며, 즉 모든 각각의 노드(701, 702, 703)가 오버레이 네트워크 레벨에서 모든 각각의 다른 노드에 연결되지는 않는다. 실시예에서, 주어진 계층 내의 각각의 노드는 동일한 계층 내의 적어도 하나의 다른 노드에 연결될 수 있다. 예컨대, 중간 계층 내의 각각의 노드(702)는 동일한 중간 계층 내의 하나 이상의 다른 노드에 연결될 수 있고 그리고/또는 외부 계층 내의 각각의 노드(703)는 동일한 외부 계층 내의 하나 이상의 다른 노드에 연결될 수 있다. 실시예에서, 상이한 중간 계층 내의 상이한 중간 계층 노드(702) 및/또는 상이한 외부 계층 내의 상이한 외부 계층 노드(703) 사이에 연결이 또한 형성될 수 있다.
실시예에서, 계층화된 네트워크(700)는 도 3 내지 6과 관련하여 설명된 임의의 프로토콜 규칙 또는 구조적 특징에 따라 구성될 수 있고, 여기서 중간 노드(702)의 각각의 중간 계층은 코어와 최외측 계층 사이의 계층이고, 외부 노드(703)의 각각의 외부 계층은 제2 계층 외부의 계층이다(중간 계층(들)은 코어와 외부 계층(들) 사이에 있음).
아래의 실시예들은 계층화된 네트워크의 맥락에서 예시될 것이지만, 이것이 제한적이지 않으며, 더 일반적으로 증명 노드(들)는 블록체인 네트워크(106)의 하나 이상의 코어 노드(104)와 하나 이상의 클라이언트 노드 사이를 중재하는 임의의 유형의 오버레이 네트워크의 임의의 노드일 수 있다는 것이 인지될 것이다.
계층화된 네트워크(700)에서의 구현에서, 적어도 하나의 중간 계층 내의 중간 노드(702) 중 적어도 하나는 증명 서비스를 제공하는 증명 노드(702A)의 역할을 한다. 적어도 하나의 외부 계층 내의 외부 계층 내의 외부 노드(703) 중 적어도 하나는 증명 노드(들)(702A)에 의해 제공되는 증명 서비스의 클라이언트 노드(703C)이다. 각각의 코어 노드(701)는 블록체인 네트워크(106)의 노드(104) 중 하나, 바람직하게는 채굴자(104M) 및/또는 저장 노드(104S)(예컨대, 전체 사본 노드)이다. 2개의 클라이언트 노드(703C) 및 2개의 증명 노드(702A)만이 예시의 단순성을 위해 도 7에 도시되지만, 더 많은 노드가 있을 수 있다는 것이 인지될 것이다. 실시예에서, 클라이언트 노드(703C) 및 증명 노드(702A)는 서로 동일한 커뮤니티의 일부일 수 있다.
클라이언트 노드(703C)는 적어도, 그들이 증명 서비스의 클라이언트라는 점에서 클라이언트이다. 실시예에서, 클라이언트 노드(703C) 중 하나 이상에서 실행되는 클라이언트 소프트웨어는, 하나 이상의 제2 계층 노드(702)에 의해 제공되는 하나 이상의 추가 서비스, 예컨대, 데이터베이스 서비스 또는 스마트 계약 서비스의 클라이언트로서 자신의 노드(703C)를 동작시키도록 추가로 구성될 수 있다. 그리고/또는, 이는, 이를테면, 블록체인(150)에 질의할 수 있도록, 블록체인 네트워크(106)의 하나 이상의 코어 노드(701)(예컨대, 104M, 104S)의 클라이언트로서 자신의 노드(703C)를 동작시키도록 구성될 수 있다.
또한, 클라이언트 노드(703C)가 증명 서비스(및 선택적으로 하나 이상의 다른 서비스)의 클라이언트로서 설명된다는 사실은, 이러한 노드 자체가 또한 하나 이상의 추가 엔티티(도시되지 않음)에 대한 하나 이상의 추가 서비스의 서버일 수 있다는 가능성을 배제하지 않는다. 예컨대, 클라이언트 노드(703C)는, 고객에게 온라인 서비스를 제공하는 회사의 컴퓨터 장비를 포함할 수 있다. 본원에서 "최종 사용자"는 해당 특정 서비스의 최종 사용자를 의미하며, (확실히 물론 하나의 가능성도 있지만), 상업적 공급 체인의 끝의 개별 소비자로 반드시 제한되지는 않는다.
다음은, 정렬 서비스 엔티티(702A)가 블록체인(150)을 사용하여 데이터 요소가 하나 이상의 클라이언트 노드(703C)로부터 수신된 정렬 및 시간을 기록할 수 있는 방법을 설명한다. 선택적으로, 정렬 서비스는 또한 타임스탬핑을 수행할 수 있다.
단일의 신뢰하는 순서 증명 노드(702A)에 대한 방법이 먼저 설명된다. 이것은 블록체인 네트워크 노드(104/701)의 코어를 갖는 계층화된 네트워크(700) 내의 단일 중간 계층(예컨대, 제2 계층) 노드로서 모델링될 수 있다. 그런 다음, 이 서비스의 사용자는, (코어 내의 적어도 하나의 코너 노드(701)에 대한 연결에 의해) 서비스(702A) 및 선택적으로 또한 블록체인(150)에 직접 연결된 외부 계층(예컨대, 제3 계층) 노드(703C)의 사용자일 것이다.
데이터 요소가 외부 계층의 클라이언트 노드(703C)로부터 수신될 때, 중간 계층 타임스탬핑 서비스(702A)는, 순서가 설정되는 방식으로 데이터 요소를 함께 수집할 것이다. 특정 시간 기간, 예컨대, 0.1초가 지날 때, 이 정렬된 데이터 요소의 목록은 트랜잭션에 캡슐화되고, 코어(701)를 통해 블록체인(150)으로 전송되고, 따라서 불변으로 기록된다. 타임스탬프가 기록에 추가되면, 이것은 또한 순서뿐만 아니라 시간을 기록한다.
예시적인 애플리케이션은 데이터베이스 내의 엔트리 등에 대한 업데이트 사이의 확정적인 순서를 정의하는 것이다. 이 경우에, 클라이언트 노드(703C)로부터 수신된 각각의 데이터 아이템은 데이터베이스 내의 엔트리에 대한 개개의 상태 변경(즉, 업데이트)을 나타낼 수 있다. 그러나, 이러한 업데이트가 반드시 가환성은 아니며, 즉, 순서가 중요하다. 예컨대, 데이터 요소의 비가환성 연산, 예컨대, 좌측으로부터의 행렬 곱셈을 수행하라는 2개의 요청이 있는 경우, 순서가 중요하다. 다른 예에서, 하나의 요청은 파일을 삭제하는 것이고, 다른 하나는 파일을 판독하는 것일 수 있다. 다시 말해서, 이러한 요청이 적용되는 순서는 결과에 대한 차이를 만든다.
또 다른 예시적인 애플리케이션은 출력 기반(예컨대, UTXO 기반) 블록체인 모델에서 스마트 계약을 구현하는 것이다. UTXO 기반 트랜잭션 등은, 계정 기반 모델의 트랜잭션과 동일한 방식으로 스마트 계약을 본질적으로 지원하지 않으므로, 스마트 계약이 UTXO 기반 모델과 같은 출력 기반 모델에서 구현되는 경우, 기본 트랜잭션 모델의 최상부에 스마트 계약 기능이 계층화될 필요가 있다. 이 경우에, 블록체인(150)에 기록될 데이터 아이템은 상태 변경, 예컨대, 소유권의 변경 등을 다시 나타낼 수 있다. 다시 말해서, 예컨대, 시도된 소유권 양도가 유효한지에 순서가 영향을 줄 수 있기 때문에, 순서가 중요하다.
또 다른 예시적인 애플리케이션은 인증 기관(CA)으로부터의 디지털 인증서의 정렬 및 타임스탬핑이다. 디지털 인증서는 액세스 권한 또는 다른 전자 허가를 승인하는 데 사용되며, 예컨대, 인터넷을 뒷받침하는 SSL/TLS 및 HTTPS 보안에 사용된다. 2011년에, 네덜란드 CA는 이란에서 운영되는 것으로 생각되는 공격자에 의해 손상되었다. 프로필이 높은 도메인에 대해 거짓 인증서가 발행되었으며, CA 서버 상에서 로그 파일이 템퍼링되었다(tampered). 이러한 로그 파일이 아래에 설명된 정렬 및 타임스탬핑 서비스를 사용하여 블록체인에 저장되었다면, 작업 증명에 의해 제공되는 보안으로 인해, 로그 파일을 변경하는 것이 가능하지 않았을 것이다. 회사의 HSM에 있는 개인 키가 공격에서 손상되었다는 점은 주목할 가치가 있다. 이것은, 정보 보안을 보장하기 위해 항상 고전적인 암호 프로토콜에만 호소할 수 없다는 사실을 강조하며, 작업 증명과 같은 다른 메커니즘에 의존하여 그러한 공격을 엄청나게 번거롭게 만드는 것이 또한 유익할 수 있다.
동작 시에, 증명 노드(702A)는 중간 계층과 외부 계층 사이의 오버레이 네트워크 연결을 통해 하나 이상의 클라이언트 노드(703C)로부터 복수의 데이터 아이템을 수신하도록 배열된다. 데이터 아이템은 임의의 용어를 사용하여 본원에서 D로 라벨링될 수 있다. 해당 복수의 데이터 아이템은 동일한 클라이언트 노드(703C) 또는 상이한 클라이언트 노드(703C)로부터 수신되거나, 또는 일부는 동일한 클라이언트 노드(703C)로부터 및 일부는 상이한 클라이언트 노드(703C)로부터 수신될 수 있다. 그들은 클라이언트 노드(703C)와 증명 노드(702A) 사이의 연결을 통해 직접 수신될 수 있거나, 또는 그 사이에 있는 계층화된 네트워크의 하나 이상의 다른 노드를 통해 전달될 수 있다(즉, 전송 클라이언트 노드(703C)와 증명 노드(702A) 사이에서 하나 초과의 홉을 통해 수신될 수 있음).
증명 노드(702A)는 복수의 데이터 아이템(D)의 순서를 결정하고, 따라서 시퀀스의 복수의 데이터 아이템을 결정하도록 구성된다. 실시예에서, 결정된 순서는 증명 노드(702A)에서 데이터 아이템을 수신 순서이다. 그러나, 일부 다른 중재 규칙이 적용될 수 있음이 배제되지 않는다. 예컨대, 데이터 아이템이 자신을 전송한 클라이언트 노드(들)(703C)에 의한 전송 또는 생성의 시간으로 스탬핑되고, 증명 노드(702A)는 이러한 클라이언트 노드를 신뢰하는 경우, 순서는 수신 시간보다는 보고된 전송 또는 생성 시간일 수 있다. 다른 예로서, 순서는, 상이한 데이터 아이템에 상이한 가중치를 부여하는 우선순위 체계에 따라 달라질 수 있다.
결정된 순서가 무엇이든 간에, 증명 노드(702A)는, 블록체인(150)에 기록하기 위한 시리즈의 블록체인 트랜잭션(152)을 생성함으로써 이 순서를 증명한다. 증명 노드(702A)는, 임의의 용어에 의해 본원에서 Tx0, Tx1, Tx2…로 라벨링될 수 있는 시리즈의 2개 이상의 그러한 트랜잭션을 생성한다. 증명 노드(702A)는 시리즈 내의 트랜잭션(Tx) 중 각각의 연속적인 트랜잭션의 페이로드에 데이터 아이템(D)의 하나 이상의 상이한 세트의 표시를 포함시킨다. 페이로드는 개개의 트랜잭션의 지출 불가능한 출력에 포함될 수 있다. 이러한 출력은 해당 출력의 잠금 스크립트를 종료하는 작업코드, 예컨대, OP_RETURN에 의해 지출 불가능하게 만들 수 있다. 그러나, 다른 트랜잭션 프로토콜에서는, 페이로드는 다른 방식으로 포함될 수 있다. 각각의 연속적인 트랜잭션에 표시된 하나 이상의 데이터 아이템의 세트는, 증명 노드(702A)에 의해 결정된 데이터 아이템의 순서에 따라, 시리즈의 트랜잭션 내의 해당 트랜잭션에 바로 선행하는 트랜잭션에 표시된 세트 다음에 온다. 즉, 시리즈 내의 트랜잭션의 순서는 결정된 시퀀스의 데이터 아이템의 세트의 순서와 일치한다.
증명 노드(702A)는 시리즈의 트랜잭션에 대해 대응하는 시리즈의 공개/개인 키 쌍을 생성하거나 그렇지 않으면 결정한다.
Figure pct00004
증명 노드(702A)는 각각의 키 쌍의 개인 키를 사용하여, 시리즈의 트랜잭션 내의 대응하는 트랜잭션에 서명한다.
Figure pct00005
.
트랜잭션 Tx1은 자신의 입력의 잠금 해제 스크립트에 P1의 서명을 포함하고, 트랜잭션 Tx2는 P2의 서명을 포함하고, 이러한 식이다. 각각의 트랜잭션은 또한 예컨대, OP_RETURN 필드에 페이로드를 포함하며, 이는 개개의 트랜잭션에 의해 증명된 하나 이상의 데이터 아이템(D)의 세트의 표시를 포함한다. 이 페이로드는 각각의 서명에 의해 위에 서명된다(스크립트 언어를 사용하는 실시예에서, 적절한 SIGHASH 플래그가 사용될 수 있음). 초기 펀딩 트랜잭션 Tx0은 P1의 서명에 의해 잠금 해제될 수 있도록 구성된다. 이것은 먼지 값(dust value)을 갖는 아웃포인트 0을 가질 수 있다. 예로서, Tx1은 도 8에 도시된 바와 같이 구성될 수 있다. 모든 후속 트랜잭션은 동일한 구조를 갖는다. 즉, Tx2는 Tx1을 잠금 해제하기 위해 Tx1을 가리키는 입력에 P2를 사용하는 서명을 포함하고, 출력에는 P3의 서명에 의해 잠금 해제될 수 있는 잠금 스크립트를 갖고, 이러한 식이다. 서명은 키 쌍의 대응하는 공개 키에 기초하여 블록체인 네트워크(106)에 의해 검증될 수 있다. 펀딩 트랜잭션 Tx0은 제1 세트의 데이터 아이템의 표시를 포함하거나 포함하지 않을 수 있다(시퀀스 내의 제1 세트의 데이터 아이템은 Tx0 또는 Tx1에 표시될 수 있음).
유의: 도 8에 도시된 형태는 간략함을 위해 트랜잭션 수수료를 무시한다. 이것은 트랜잭션(예컨대, 증명 서비스에 의해 관리됨)에 다른 입력 및 출력을 추가함으로써 설명될 수 있다.
OP_RETURN 스테이트먼트는 data1이라고 불리는 페이로드를 포함한다. 이것은 Tx1이 증명된 세트 중에서 증명 서비스가 증명한 순서대로 사용자가 제출한 데이터 요소(D) 또는 그의 표시를 포함한다. (그리고 Tx2의 data2에 대해서도 유사하고 이러한 식임). 각각의 트랜잭션은 이전 트랜잭션의 해시에 서명하기 때문에, 이것은 또한 페이로드 data1, data2, data3 등의 정렬을 의미한다.
블록체인 트랜잭션은, 일단 블록체인 네트워크(106)에 의해 수락되면, 실행 가능하게 이중 지출될 수 없다. 그것은 또한 증명 노드(702A)에 의해 제공되는 증명 서비스에 대해 증명된 순서에 대한 공개 형태의 역할을 한다. 이것은, 클라이언트 노드(703)의 사용자의 데이터 요소가 이 증명 기관에 의해 증명된 순서대로 나타나는 위치가 소급적으로 변경될 수 없다는 것을 그들에게 확신을 준다. 일단 이러한 트랜잭션이 블록(151)에서 채굴되면, 이것은 기존 블록을 교체하는 데 계산 비용이 많이 들기 때문에 순서이 변경될 가능성이 훨씬 더 낮아지게 된다.
일부 실시예에서, 각각의 트랜잭션 Tx0, Tx1, Tx2…에 표시된 세트는 트랜잭션당 데이터 아이템(D) 중 단일의 데이터 아이템만으로만 구성된다(즉, 각각의 데이터 페이로드는 단일의 개개의 D만을 나타냄). 대안적으로, 이러한 각각의 트랜잭션에 표시된 세트는 트랜잭션당 다수의 데이터 아이템(D)을 포함할 수 있다(각각의 데이터 페이로드는 상이한 개개의 세트의 다수의 상이한 데이터 아이템(D)을 나타냄). 후자의 경우, 페이로드 정보는 또한 로컬 세트의 개개의 트랜잭션 내의 데이터 아이템(D)의 순서를 지정한다. 이것은, 예컨대, 페이로드에 포함된 정렬된 목록(예컨대, OP_RETURN 출력) 및/또는 각각의 D의 표시에 매핑된 순서를 나타내는 인덱스에 의해 달성될 수 있다. 곧 더 자세히 논의될 예가 도 9 내지 11에 도시된다.
트랜잭션당 다수의 데이터 아이템(D)이 표시될 때, 트랜잭션당 어떤 데이터 아이템이 함께 수집되는지를 결정하기 위해 약간의 기준이 요구된다. 원칙적으로, 트랜잭션 간에 데이터 아이템을 분할하기 위해 임의의 방식이 사용될 수 있지만, 실시예에서, 이것은 규칙적인 시간 간격에 기초하여 이루어질 수 있다. 즉, 규칙적인 시간 간격의 제1 인스턴스 내에서 증명 노드(702A)에 의해 수신된 모든 데이터 아이템(D)은 시리즈 내의 제1 트랜잭션에 포함되고, 그런 다음 규칙적인 시간 간격의 다음 인스턴스 내에서 수신된 모든 데이터 아이템(D)은 시리즈 내의 다음 트랜잭션에 표시되고, 이러한 식이다.
트랜잭션 간 간격의 정확한 타이밍은 구현에 의해 구성될 수 있다. 예컨대, 트랜잭션은 0.1초 간격으로 제출될 수 있다.
개개의 세트의 데이터 아이템은, 해당 세트의 데이터 아이템(들)을 개개의 트랜잭션 Tx의 페이로드에 명시적으로("평문으로") 포함함으로써 트랜잭션에 간단히 표시될 수 있다. 대안적으로 또는 추가적으로, 그들은 해시, 암호화된 형태 또는 r-퍼즐과 같은 변형된 형태로 표시될 수 있다. 예는 도 9 내지 도 11과 관련하여 더 상세히 논의될 것이다. 순서 증명 서비스의 맥락에서, 최소한으로, 본원에서 데이터 아이템의 "표시"는, 트랜잭션을 검사하는 질의 노드가 데이터 아이템의 증명된 순서를 검증하는 것을 일부 정보가 가능하게 한다는 것을 의미한다. 데이터 아이템(D)의 명시적 값이 트랜잭션에 명시적으로 포함되지 않은 일부 경우에, 이것은, 질의 노드가 데이터 아이템(D)의 값에 대해 미리 결정된 지식을 갖고 단순히 온체인 또는 블록체인 노드(104)의 멤풀(154)에서 트랜잭션을 조사하여 해당 아이템의 예상된 순서를 확인하는 것을 요구할 수 있다.
실시예에서, 증명 노드(702A)는 또한 시리즈의 각각의 트랜잭션 Tx0, Tx1, Tx2 …의 페이로드에 적어도 하나의 타임스탬프를 포함할 수 있다. 타임스탬프는, 개개의 데이터 아이템(들)이 증명 노드(702A)에서 수신된 시간을 나타낸다. 트랜잭션당 단일 데이터 아이템(D)의 경우에, 이것은 단순히 해당 데이터 아이템의 수신 시간일 수 있다. 트랜잭션 Tx당 다수의 데이터 아이템(D)의 경우에, 각각의 트랜잭션 페이로드는 세트에 대한 도착 시간(예컨대, 데이터 아이템이 수신된 시간 간격)을 나타내는 단일 타임스탬프 또는 세트 내의 데이터 아이템(D)당 개별 타임스탬프를 포함할 수 있다.
증명 서비스가 사용자의 데이터를 포함하는 트랜잭션을 블록체인(150)에 제출할 때, 일부 실시예에서, 증명 서비스는 또한 이러한 트랜잭션을, 데이터 아이템(D)을 제출한 클라이언트 노드(들)(703)에 전송할 것이다. 외부 계층(예컨대, 계층 3)의 사용자가 중간(예컨대, 계층 2)의 증명 노드(702A)에 직접 연결되기 때문에, 이것이 가능하다. 실시예에서, 클라이언트 노드(703)가 또한 코어의 블록체인 채굴 노드(104M) 및/또는 저장 노드(104S)에 직접 연결되기 때문에, 클라이언트 노드(703)는, 트랜잭션 Tx0, Tx1, Tx2…이 블록체인 네트워크(106)에 의해 수락되었다는 것을 독립적으로 체크할 수 있다. 따라서, 클라이언트 노드(703A)는, 예상된 순서가 증명되었다는 것을 확인하기 위해, 채굴자(104M)의 멤풀(154) 및/또는 저장 노드(104S) 상의 실제 블록체인(150) 기록을 질의할 수 있다. 다른 제3자 노드는 또한 블록체인 네트워크(106)의 임의의 적절한 연결을 통해 유사한 방식으로 이를 검증할 수 있다. 일부 실시예에서, 클라이언트 노드(703A)에 의한 질의는, 도 3 내지 도 6과 관련하여 이전에 논의된 SPV형 연결만을 사용하여 클라이언트 노드(703C)와 코어 사이의 연결을 통해 수행될 수 있다.
선택적으로, 증명 서비스는 또한, 데이터 아이템을 제출한 클라이언트 노드(들)(703C)에, 그들의 데이터를 포함하는 트랜잭션에 선행하는 트랜잭션의 체인을 전송할 수 있다. 이것은, 서비스에 의해 블록체인에 제출된 상이한 순서를 가진 2개의 경쟁하는 트랜잭션의 체인이 없다는 것을 사용자가 확신할 수 있도록 하기 위함이다. 트랜잭션의 체인의 길이는 사용자가 요구하는 신뢰 레벨에 적합해야 한다. 이 신뢰는 아웃소싱될 수 있고, 예컨대, 인증 기관은 매시간 트랜잭션 체인의 정확성을 인증할 수 있다.
실시예에서, 계층 내의 클라이언트 노드(703C)는 또한 서로 연결될 수 있고, 그들의 및 대응하는 머클 증명을 포함하는 (채굴된) 트랜잭션을 서로에게 전송할 수 있다. 실시예에서 각각의 외부 계층(예컨대, 계층 3) 노드가 블록체인(150)에 독립적으로 연결되기 때문에, 그들은 머클 증명이 정확하다는 것을 검증할 수 있다. 이것은 외부 계층(예컨대, 계층 3)의 사용자가, 블록체인의 작업 증명에 대한 신뢰도가 인수받기 전에, 타임스탬핑 서비스에 대한 최소량의 임시 신뢰도만으로 데이터의 정렬에 동의하는 것을 허용한다.
다음은 이제 OP_RETURN payload data1를 더 자세히 탐구할 것이다. 목표는, 데이터 요소 D1, D2, D3,…이 시간 간격으로 수신된 순서를 서비스가 증명하는 것이다. 데이터 요소가 각각의 사용자와 관련된 데이터의 해시 커밋을 나타낼 수 있다는 것이 유의된다. 이것은, 사용자가 자신의 데이터를 공개할지 또는 대신에 그들의 데이터의 해시 커밋을 기록할지 선택하는지에 대한 사용자의 재량권에 달려 있을 수 있다.
세트의 데이터 아이템(D) 및 그들의 상대적 순서가 트랜잭션 Tx 내에서 표시될 수 있는 몇몇의 상이한 방법이 있다. 가장 간단한 방법은 각각의 요소를 그저 인덱싱하는 것이며, OP_RETURN가 서명되기 때문에, 이것은 타임스탬핑 서비스에 의해 증명된다. 그러나, 정렬에 대한 추가 증명을 제공하고 분산형 타임스탬프 서비스에 대한 일반화를 허용하는, 이를 행하는 더 스마트한 방법이 있다.
방법 1.1: 해시 체인. 고유 인덱스(i)가 각각의 데이터 요소 Di에 할당되고, 해시 체인의 엔트리 Hi가 생성된다. Hi의 값은 데이터 요소 및 해시 체인의 이전 요소에 의존한다. 이것은, 해시 체인의 각각의 요소가 이전 요소 다음에 생성되어 순서를 적용해야 함을 의미한다. 해시 체인의 예가 도 9의 표에 도시된다. 이 표는 트랜잭션의 페이로드(데이터)에 포함될 것이고, 선택적으로 명시적 D 열(column)이 트랜잭션에 포함되거나 포함되지 않는다.
D의 값이 명시적으로 포함되지 않은 경우의 하나의 이점은, 해시가 D보다 작을 수 있고 따라서 이것은 더 적은 비트가 체인에 저장되는 것을 요구한다는 것이다. 또한, 이것은, 사용자가 D의 실제 값의 공개를 원하지 않는 경우, D의 실제 값을 공개할 필요가 없음을 의미한다. 어느 쪽이든, D 값이 명시적으로 포함되었는지 여부에 관계없이, 해시 체인의 또 다른 이점은, 이것이 순서를 변경하기 어렵게 만든다는 것이다. 예시로서, 트랜잭션당 1000개의 데이터 아이템(D)이 있다고 가정한다. 그런 다음, 이러한 데이터 아이템을 재정렬하려면 1000개의 해시를 수행할 것을 요구하며, 이는 계산상 부담이 될 것이다. 따라서, 증명 노드(702A)가 완전히 신뢰되지 않더라도, 이는, 데이터 아이템이 재정렬되지 않았다는 추가적인 확신을 사용자에게 제공한다.
일부 실시예에서, 각각의 데이터 요소(Di)의 수신의 타임스탬프(ti)의 증명이 또한 포함될 수 있다. 이를 수행하는 하나의 방법은, 해시 체인의 각각의 요소의 프리이미지에 타임스탬프를 포함하는 것이고, 예컨대, 다음과 같다.
Figure pct00006
,
Figure pct00007
등이 있다.
이 경우에, 시간을 포함하는 열이 또한 도 9의 표에 추가될 것이다.
OP_RETURN payload data1은 도 9에 도시된 바와 같은 표로 구성된다. 공간을 절약하거나 데이터 요소를 비공개로 유지하기 위해 '데이터' 열이 생략될 수 있다. 이 경우에, 누군가가 해시 체인의 순서를 입증할 수 있는 유일한 방법은 모든 데이터 요소가 알려지는 것 뿐이란 것이 유의된다.
해시 함수를 HMAC로 교체함으로써 추가 보안이 제공될 수 있다. HMAC는 RFC 2104에 설명되며, 해싱 절차에 비밀 대칭 키를 도입한다. 이는, 비밀 키를 알고 있는 사람만이 데이터의 순서를 입증할 수 있음을 의미한다.
방법 1.2: 머클 트리를 갖는 해시 체인. 이 경우는 도 9의 해시 체인과 유사하지만, 전체 해시 체인을 공개하는 것 대신에, 이것은 머클 트리로 전환되고, 루트만이 공개된다. 이 경우에, 세트의 각각의 데이터 아이템(D)은 머클 트리의 리프로서 모델링된다. 그리고, 머클 루트가 표시로서 트랜잭션에 포함된다. 데이터의 인덱스가 머클 트리의 리프에 나타나는 순서에 의해 데이터의 인덱스가 암시된다는 것이 유의된다. 머클 증명은, 사용자가 머클 트리에서 데이터 아이템의 존재 및 그의 위치를 체크하는 것을 허용하기 위해 나중에 사용자에게 제공될 수 있다. 이 방법은, 머클 루트에 대한 OP_RETURN 페이로드에 256비트만이 요구되기 때문에, 트랜잭션에서 공간을 절약한다.
추가적으로 또는 대안적으로, 각각의 데이터 아이템은 해당 리프에 대한 대응하는 머클 증명에 의해 트랜잭션에 표시될 수 있다. 당업자에게 친숙할 바와 같이, 머클 트리는, 머클 루트와 데이터 아이템에 대한 머클 증명(루트와 리프 사이의 해시의 체인임)이 주어지면, 주어진 데이터 아이템이 세트의 멤버임을 입증하는 것을 허용한다.
방법 2.1: 서명의 체인. 이 방법에서는, 각각의 데이터 요소(D)에 대해 새로운 공개 키가 생성되고, 해당 요소가 새로운 공개 키로 서명된다. 이것은 RFC 3161에 약술된 타임스탬핑 프로토콜의 요건에 따라 조정된다.
도 10에 도시된 서명 및 공개 키의 시퀀스가 고려된다. 아이디어는, 각각의 공개 키가 선행 데이터에 기초하여 생성된다는 것이다. 해시 체인과 유사하게, 시퀀스의 각각의 공개 키(그리고 따라서 서명)는 시퀀스의 이전 공개 키를 알아야만 생성되고, 따라서 순서가 적용될 수 있다.
이 방법의 변형에서, 표의 엔트리 각각은 그 자체가 트랜잭션이 될 수 있다.
방법 2.2: r-퍼즐의 체인. R-퍼즐은 최근에 공개된 챌린지 및 증명의 형태이다. 이는 ECDSA 서명(S, R)의 r-part를 기반으로 하며 해당 비밀을 공개하지 않고 비밀에 대한 지식을 입증하는 방법을 제공한다. https://www.youtube.com/watch?v=9EHKvNuRc0A&t=978shttps://www.youtube.com/watch?v=CqqTCsLzbEA가 참조된다.
ECDSA(elliptic curve digital signature algorithm) 서명은 (S,R) 조합으로 구성되며, 여기서 R은 임시 키 쌍의 공개 부분에 대한 x 좌표이다. 각각의 서명에 대해 동일한 공개 키를 사용하지만, 임시 키를 함께 연결(chain)하는 것이 가능하다. 이것은 도 11에 도시된 시퀀스를 제공할 것이다. 이것은 위의 방법 중 임의의 것에 대한 대안으로 또는 추가로 트랜잭션 페이로드(데이터)에 포함될 수 있다.
여기서 R1은 랜덤 임시 키이고, <S1, R1i> (H(Di))는 데이터 H(Di)가 임시 키(R1i)를 사용하여 P1로 서명된다는 것을 의미한다.
일반적으로, 방법 1.1, 1.2, 2.2 및/또는 2.2 및/또는 다른 방법 중 어느 하나는 개별적으로 또는 함께 사용되어, 트랜잭션의 페이로드(데이터)에 있는 세트의 데이터 아이템(D) 간의 순서를 나타낼 수 있다.
분산된 경우: 위의 내용은 순서 증명 서비스가 개별 노드(702A)에 의해 제공되는 시나리오에서 설명되었다. 다수의 증명 노드(702A)를 통해 이러한 서비스를 제공하는 것이 또한 가능하다.
예컨대, 합의를 달성하기 위해 계층화된 네트워크(700)를 사용하는 분산형 증명 서비스를 갖는 상황이 고려된다. 이 경우에, 도 7의 중간 계층 노드(702)(예컨대, 계층 2 노드) 중 하나 초과의 중간 계층 노드는 증명 노드의 역할을 할 것이다.
대부분의 증명 노드(702A)가 정직하게 작동하고, 증명 서비스 노드(702A)와 사용자(703C)로 구성된 (앞서 정의된 바와 같은) 커뮤니티 주위에 전파되는 데이터의 정렬 및 타임스탬핑에 대한 합의를 달성하기를 원한다고 가정한다. 동일한 서브세트의 m개의 코어 채굴 노드(701)에 연결되고 따라서 계층화된 네트워크(700)의 커뮤니티를 정의하는 N개의 독립적인 증명 서비스 노드(703A)가 있다고 가정한다. 다수의 중간 계층(예컨대, 계층 2) 증명 노드(702A)가 있다는 사실은, 중간 계층 노드에 대한 부하가 너무 높게 되지 않고도(너무 많은 연결 없이도), 외부 계층(들)(예컨대, 계층 3)의 많은 사용자가 중간 계층(예컨대, 계층 2) 내의 노드(702)에 연결되는 것을 허용한다.
이를테면, 분산된 경우에, 해결해야 할 문제는, 예컨대, 2명의 사용자가 제출한 2개의 데이터 아이템(D1, D2)이 다른 것과 비교하여 하나의 증명 노드(702A)에 다른 순서로 도착하더라도, 중간 계층 증명 노드(702A)(예컨대, 계층 2 노드)가 2개의 데이터 아이템(D1, D2)의 정렬에서 어떻게 합의할 수 있는지에 대한 것이다.
이 문제를 해결하기 위한 하나의 방법은 임계값 서명을 사용하는 것이고, 즉, 앞서 논의된 바와 같이, 트랜잭션(Tx)을 잠금 해제하기 위해, 단지 하나보다는 적어도 M개의 상이한 서명(M>1)이 필요로 된다. 증명 서비스 노드(702A)에 적용된, 설명된 바와 같은 M-of-N 임계값 서명 시스템이 고려된다. 이것은, 개인 키 공유(private keyshare)(a1, a2,.., aN)를 갖는 N개의 참여 노드가 있음을 의미한다. 임의의 서브그룹의 M명의 참가자는, 시리즈 내의 선행 트랜잭션을 잠금 해제할 메시지의 서명을 제공하기 위해 결합되는 서명 공유를 생성할 수 있다.
증명 서비스 노드(702A) 중 하나는, 자신이 선택된 시간 기간에 수신한 모든 데이터 요소(D)의 정렬된 목록인 OP_REUTRN payload data1을 포함하는 후보 트랜잭션 Tx1을 생성한다고 가정된다. 이 노드는 후보 트랜잭션을 모든 다른 증명 서비스 노드(702A)(또는 그들 중 적어도 일부)에 브로드캐스팅하고, 트랜잭션에 서명하기 위해 그들의 서명 공유를 요청할 수 있다. 그들이 (자신의 소유를 포함하여) 적어도 M개의 서명 공유를 수신하면, 트랜잭션은 블록체인 네트워크(106)에 제출되고 블록(151)으로 채굴될 수 있다. 이것은, 데이터 요소의 정렬이 분산형 네트워크에서 적어도 M-of-N 타임스탬핑 서비스에 의해 합의되는 것을 보장한다.
단일 증명 노드(702A)는 트랜잭션을 생성하기 위해 어떻게 선택되는가? 위의 내용은, 후보 트랜잭션 Tx1을 생성하는 단지 하나의 증명 서비스 노드(702A)가 존재하고 다른 증명 노드(702A)는 이를 OK하였다고 가정하였다. 그러나, 다음 후보 트랜잭션은 어찌할 것인가? 다음과 같이 적어도 2개의 옵션이 있는데: (i) 후보 트랜잭션을 생성하는 하나의 권한 있는 증명 노드(702A)가 항상 존재하거나, 또는 (ii) 각각의 트랜잭션이 생성된 후에, 증명 노드(702A) 중 하나가 다음 트랜잭션을 생성하는 다음 노드인 것으로 랜덤으로 선택된다. 이것은 앞서 결정된 랜덤 시퀀스일 수 있거나, 방금 제출된 트랜잭션 Tx1과 관련된 시드에 기초하는 결정론적으로 랜덤한 선택일 수도 있다. 예컨대, 시드는 Tx1인 것으로 취해질 수 있다. 분산형 컴퓨팅을 위한 다른 분산형 중재 알고리즘이 또한 가능할 수 있다.
분산형 데이터베이스
도 12는 본원에서 개시된 실시예에 따른, 계층화된 네트워크(1200)에서 구현된 분산형 데이터베이스의 예를 도시한다.
계층화된 네트워크(1200)는: 하나 이상의 코어 노드(1201)를 포함하는 코어 네트워크; 코어 주위의 적어도 하나의 중간 계층 ― 각각의 중간 계층은 하나 이상의 중간 계층 노드(1202)를 포함함 ― ; 및 중간 계층의 최외측 주위의 적어도 하나의 외부 계층을 포함하며, 각각의 외부 계층은 하나 이상의 외부 계층 노드(1203)를 포함한다. 다시, 본원에서 "외부 계층"에서 "외부"라는 용어는 최외측으로 반드시 제한하지는 않지만, 그것이 하나의 가능성이다. 계층화된 네트워크(1200)는 인터넷과 같은 기본 물리적 또는 인프라구조 네트워크 위에 오버레이된 오버레이 네트워크일 수 있거나, 대안적으로 기관 내의 전용 및/또는 내부(예컨대, 사설) 네트워크와 같은 독립형 네트워크일 수 있다.
코어 노드(1201)는 블록체인 네트워크(106)의 노드(104)이다. 이들은 채굴 노드(104M), 저장 노드(104S), 또는 이들의 조합을 포함할 수 있다. 실시예에서, 각각의 코어 노드는 채굴 노드(104M) 및/또는 저장 노드(104S)(예컨대, 전체 복사 노드)이다.
일부 경우에, 중간 계층 노드(1202) 및/또는 외부 계층 노드(1203) 중 일부는 블록체인 네트워크(106)의 주변 노드(104), 예컨대, 채굴 노드(104M) 및/또는 포워딩 노드(104F)와 같은 저장 노드(104S) 이외의 노드를 포함할 수 있다. 대안적으로, 이들은 블록체인 네트워크(106)의 클라이언트로서가 아닌 블록체인 네트워크(106)에서의 어떠한 역할(채굴, 저장 또는 포워딩)도 갖지 않는 노드를 포함할 수 있다.
중간 노드(1202)는 계층화된 네트워크(1200)의 하나 이상의 중간 계층에 걸친 복수의 데이터베이스 노드(1202DB)를 포함한다. 이러한 데이터베이스 노드(1202DB)는 분산형 데이터베이스를 저장하도록 구성되고, 이로써 각각의 데이터베이스 노드(1202DB)는 하나 이상의 데이터베이스 엔트리를 포함하는 전체 데이터베이스 중 적어도 일부를 저장한다. 실시예에서, 엔트리가 하나 초과의 노드에 걸쳐 복제되어, 적어도 일부 엔트리가 하나 초과의 데이터베이스 노드(1202DB)에 걸쳐 복제된다. 일부 경우에, 각각의 데이터베이스 노드(1202DB)는 전체 데이터베이스의 사본을 저장할 수 있지만, 다른 실시예에서, 각각의 데이터베이스 노드(1202DB)는 데이터베이스의 일부만을 저장하고, 각각의 엔트리는 데이터베이스 노드(1202DB)의 전부가 아니라 일부에만 걸쳐 복제될 수 있다(그들 사이의 데이터베이스 노드(1202DB)가 전체 데이터베이스를 저장하도록 분산됨).
각각의 데이터베이스 노드(1202DB)는 하나 이상의 물리적 서버 유닛을 포함하는 서버의 형태를 취할 수 있다. 각각의 이러한 노드는 하나 이상의 메모리 유닛을 포함하는 메모리, 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함한다. 이들은, 예컨대, 다른 네트워크 요소와 관련하여 이전에 논의된 것과 같은 메모리 매체 및/또는 프로세서의 임의의 형태를 취할 수 있다. 데이터베이스 엔트리 자체뿐만 아니라, 메모리는 증명 노드의 처리 장치에서 실행되도록 구성된 데이터베이스 소프트웨어를 저장한다. 이 소프트웨어는, 실행될 때, 아래에 설명된 실시예 또는 유사한 실시예 중 임의의 것에 따라 동작하는 데이터베이스 서비스를 제공하도록 구성된다.
실시예에서, 각각의 데이터베이스 노드(1202DB)의 아이덴티티는, 클라이언트 노드(들)(1203C), 코어 노드(1201) 및/또는 다른 데이터베이스 노드(1202DB) 또는 다른 중간 계층 노드(이를테면, 증명 서비스 노드(702A) 또는 스마트 계약 노드)가 데이터베이스 노드(1202DB)의 아이덴티티를 검증하는 것을 가능하게 하도록 인증 기관에 의해 인증될 수 있다. 이러한 노드 사이의 상호작용은 검증에 대해 조건부일 수 있다. 예컨대, 클라이언트 노드(1203C)는 인증에 기초하여 자신의 아이덴티티를 검증하는 것을 조건으로 업데이트 요청만을 데이터베이스 노드(1202DB)에 전송할 수 있다. 대안적으로 또는 추가적으로, 노드 버저닝은 오버레이 네트워크에서 노드 식별을 위한 대안적 메커니즘으로서 사용될 수 있다.
클라이언트 노드(1203C) 각각은, 서비스 사용자의 컴퓨터 장비를 포함하는 최종 사용자 노드일 수 있다. 다시, 이것은 개인 사용자이거나 회사, 학술 기관 또는 정부 기관 등과 같은 조직일 수 있다. 따라서, 각각의 클라이언트 노드는 하나 이상의 사이트에서 하나 이상의 서버 유닛을 포함하는 서버 및/또는 하나 이상의 사용자 단말을 포함할 수 있다. 각각의 클라이언트 노드는 하나 이상의 메모리 유닛을 포함하는 메모리, 및 하나 이상의 처리 유닛을 포함하는 처리 장치를 포함한다. 이들은, 예컨대, 다른 네트워크 요소 또는 사용자 장비와 관련하여 이전에 논의된 것과 같은 메모리 매체 및/또는 프로세서의 임의의 형태를 취할 수 있다. 메모리는 처리 장치에서 실행되도록 배열된 클라이언트 소프트웨어를 저장하고, 여기서 클라이언트 소프트웨어는, 실행될 때, 다음 실시예 또는 유사한 실시예 중 어느 하나에 따라 데이터베이스 노드(1202DB)에 의해 제공되는 데이터베이스 서비스에 의해 제공된 분산형 데이터베이스의 클라이언트로서 노드를 동작시키도록 구성된다. 선택적으로, 전송하는 사용자 노드 중 하나 이상은 블록체인 네트워크(106)의 사용자(102)의 사용자 장비(103)를 포함할 수 있고, 클라이언트 소프트웨어는 블록체인 지갑 애플리케이션(105) 등을 포함할 수 있다.
실시예에서, 각각의 클라이언트 노드(1203c)의 아이덴티티는, 데이터베이스 노드(1202DB), 다른 중간 계층 노드(이를테면, 증명 서비스 노드(702A) 또는 스마트 계약 노드), 코어 노드(1201) 및/또는 다른 클라이언트 노드(1203C)가 클라이언트 노드(1203C) 아이덴티티를 검증하는 것을 가능하게 하도록 인증 기관에 의해 인증될 수 있다. 이러한 노드 사이의 상호작용은 검증에 대해 조건부일 수 있다. 예컨대, 데이터베이스 노드(1202DB)는, 인증에 기초하여 자신의 아이덴티티를 검증하는 것을 조건으로 클라이언트 노드(1203C)로부터 업데이트만을 수락할 수 있다. 대안적으로 또는 추가적으로, 노드 버저닝은 오버레이 네트워크에서 노드 식별을 위한 대안적 메커니즘으로서 사용될 수 있다.
실시예에서, 계층화된 네트워크(1200)는 도 3 내지 6 및/또는 7에 관련하여 설명된 프로토콜 규칙 또는 구조적 특징 중 임의의 것에 따라 구성될 수 있다. 노드(1201, 1202, 1203)는, 계층화된 네트워크(1200)가 인터넷과 같은 기본 인프라구조 네트워크 상에 오버레이된 오버레이 네트워크인 경우에, 오버레이 네트워크 레벨에서 서로 간의 연결을 형성하도록 구성된다. 즉, 계층화된 네트워크의 노드(1201, 1202, 1203)는, 그들이 계층화된 네트워크의 다른 노드(1201, 1202, 1203)와 형성할 수 있고 형성할 수 없는 연결이 무엇인지를 지정하는 오버레이 네트워크 프로토콜을 따르도록 구성된다.
예컨대, 실시예에서, 각각의 중간 계층 노드(1202)는 코어 네트워크의 적어도 하나의 코어 노드(1201)(블록체인 네트워크 노드(104))에 연결된다. 코어 네트워크는 블록체인 네트워크(106)의 적어도 일부를 포함한다. 실시예에서, 코어 네트워크는, 그 자체로, 완전한 네트워크(즉, 완전한 그래프)일 수 있다. 각각의 외부 계층 노드(1203)는 적어도 하나의 중간 계층 내의 중간 계층 노드 중 적어도 하나에 연결될 수 있다. 실시예에서, 각각의 외부 계층 노드(1203)는 또한, 적어도 하나의 코어 노드(1201)(즉, 블록체인 네트워크)에 대한 적어도 하나의 연결을 갖는다. 이러한 일부 실시예에서, 하나 이상의 외부 계층 노드(1203) 각각은 코어 노드(1201) 중 전부는 아니만 하나 초과의 코어 노드에 연결된다. 실시예에서, 계층화된 네트워크(1200)는 전체적으로 불완전한 네트워크일 수 있으며, 즉 모든 각각의 노드(1201, 1202, 1203)가 오버레이 네트워크 레벨에서 모든 각각의 다른 노드에 연결되지는 않는다. 실시예에서, 주어진 계층 내의 각각의 노드는 동일한 계층 내의 적어도 하나의 다른 노드에 연결될 수 있다. 예컨대, 중간 계층 내의 각각의 노드(1202)는 동일한 중간 계층 내의 하나 이상의 다른 노드에 연결될 수 있고 그리고/또는 외부 계층 내의 각각의 노드(1203)는 동일한 외부 계층 내의 하나 이상의 다른 노드에 연결될 수 있다. 실시예에서, 상이한 중간 계층 내의 상이한 중간 계층 노드(1202) 및/또는 상이한 외부 계층 내의 상이한 외부 계층 노드(1203) 사이에 연결이 또한 형성될 수 있다.
계층화된 네트워크(1200)의 2개의 노드(1201/ 1202/ 1203) 사이의 연결은, 이러한 노드가 직접 통신할 수 있음을 의미하며, 이 맥락에서 이는 계층화된 네트워크(1200)의 다른 노드(1201/1202/1203)를 통해 홉을 수행할 필요가 없음을 의미한다. 오버레이 네트워크의 맥락에서, "연결"은 오버레이 네트워크의 레벨(즉, 계층화된 네트워크의 오버레이 네트워크 프로토콜의 레벨)에서의 연결(즉, 에지)을 의미한다.
2개의 클라이언트 노드(1203C) 및 2개의 데이터베이스 노드(1202DB)만이 예시의 단순성을 위해 도 12에 도시되지만, 더 많은 노드가 있을 수 있다는 것이 인지될 것이다. 실시예에서, 클라이언트 노드(1203C) 및 데이터베이스 노드(1202DB)는 서로 동일한 커뮤니티의 일부일 수 있다.
클라이언트 노드(1203C)는 적어도, 그들이 데이터베이스 서비스의 클라이언트라는 점에서 클라이언트이다. 실시예에서, 클라이언트 노드(1203C) 중 하나 이상에서 실행되는 클라이언트 소프트웨어는, 하나 이상의 제2 계층 노드(1202)에 의해 제공되는 하나 이상의 추가 서비스, 예컨대, 정렬 증명 서비스 또는 스마트 계약 서비스의 클라이언트로서 자신의 노드(1203C)를 동작시키도록 추가로 구성될 수 있다. 그리고/또는, 이는, 이를테면, 블록체인(150)에 질의할 수 있도록, 블록체인 네트워크(106)의 하나 이상의 코어 노드(1201)(예컨대, 104M, 104S)의 클라이언트로서 자신의 노드(1203C)를 동작시키도록 구성될 수 있다. 또한, 클라이언트 노드(1203C)가 데이터베이스 서비스(및 선택적으로 하나 이상의 다른 서비스)의 클라이언트로서 설명된다는 사실은, 이러한 노드 자체가 또한 하나 이상의 추가 엔티티(도시되지 않음)에 대한 하나 이상의 추가 서비스의 서버일 수 있다는 가능성을 배제하지 않는다. 예컨대, 클라이언트 노드(1203C)는, 웹을 통해 고객에게 온라인 서비스를 제공하는 회사의 컴퓨터 장비를 포함할 수 있다.
실시예에서, 도 12의 계층화된 네트워크(1200)는 도 3 또는 4의 계층화된 네트워크(300)일 수 있으며, 이 경우에, 도 12의 외부 계층 노드(1203)는 도 3 또는 4의 제3 계층 노드(303)이고, 도 12의 중간 계층 노드(1202)는 도 3 또는 도 4의 제2 계층 노드(302)이고, 그리고 도 12의 코어 노드(1201)는 도 3 또는 도 4의 코어 노드(401)이다.
일부 실시예에서, 도 12의 계층화된 네트워크(1200)는 도 7의 계층화된 네트워크(700)일 수 있으며, 이 경우에, 도 12의 외부 계층 노드는 도 7의 외부 계층 노드이고, 도 12의 중간 계층 노드(1202)는 도 7의 중간 계층 노드(702)이고, 그리고 도 12의 코어 노드(1201)는 도 7의 코어 노드(701)이다. 그러한 실시예에서, 증명 노드(702A)의 증명 서비스는 데이터베이스 노드(1202DB)와 동일한 중간 계층 노드(702/1202) 중 일부 또는 전부에 통합될 수 있고, 그리고/또는 증명 노드(702A)는 동일한 및/또는 상이한 커뮤니티의 동일한 및/또는 상이한 중간 계층에 별도의 중간 계층 노드(702/1202)를 포함할 수 있다.
동작 시에, 데이터베이스 노드(1202DB)는 클라이언트 노드(1203C) 중 하나 이상으로부터 업데이트 요청을 수신한다. 다수의 업데이트 요청은 동일한 클라이언트 노드(1203C) 및/또는 상이한 클라이언트 노드(1203C)로부터 수신될 수 있다. 실시예에서, 각각의 업데이트 요청은 요청 클라이언트 노드(1203C)와 수신 데이터베이스 노드(1202DB) 사이에서 관련 외부 계층과 중간 계층(예컨대, 계층 2 및 계층 3) 사이의 계층화된 네트워크 연결 중 하나를 통해 직접 수신될 수 있다. 대안적으로, 업데이트 요청은, 이를테면, 발신 클라이언트 노드(1203C)(아래 참조)로부터 요청의 직접적인 수신자였던 다른 데이터베이스 노드(1202DB)로부터 포워딩됨으로써 하나 초과의 홉을 통해 간접적으로 수신될 수 있다. 간접적인 경우에, 메시지는 계층화된 네트워크(1202) 내에서 (동일 및/또는 상이한 중간 계층 내의) 중간 계층 노드(1202) 사이의 연결을 통해 전파될 수 있다.
각각의 업데이트 요청은 데이터베이스 내의 특정한 개개의 타겟 엔트리를 업데이트하라는 요청이다. 이러한 각각의 요청에 대해, 수신 데이터베이스 노드(1202DB)는, 요청이 수신 데이터베이스 노드(1202DB) 자체 또는 다른 데이터베이스 노드(1202DB)를 목적지로 하는지를 결정하고, 즉, 요청이 수정하고자 하는 개개의 타겟 엔트리는 수신 데이터베이스 노드(1202DB) 또는 다른 데이터베이스 노드(1202DB)에 로컬적으로 저장된 데이터베이스의 일부에서 발견된다. 데이터 엔트리가 다수의 데이터베이스 노드(1202DB)에 걸쳐 복제되는 경우에, 타겟 엔트리는 수신 데이터베이스 노드(1202DB) 및 하나 이상의 다른 노드 둘 모두에서 발견될 수 있다는 것이 유의된다. 요청이 수신 데이터베이스 노드가 아닌 다수의 다른 데이터베이스 노드를 목적지로 하는 것이 또한 가능하다.
각각의 업데이트 요청은 데이터 콘텐츠, 즉, 수행할 실제 업데이트를 포함한다. 이것은 절대적인 용어, 즉, 타겟 엔트리의 기존 콘텐츠의 일부 또는 전부를 대체하기 위한 대체 데이터로 표현될 수 있다. 대안적으로, 업데이트의 콘텐츠는 요청에 델타(차이), 즉, 개개의 타겟 엔트리에 적용할 수정으로 표현될 수 있다. 데이터 콘텐츠는, 사용자가 저장하고자 하는 궁극적인 사용자 데이터의 전체 버전을 포함할 수 있거나, 또는 대신에 명시적으로 전체 버전 자체가 아닌 사용자 데이터의 압축 버전 또는 지문의 형태를 취할 수 있다. 어느 쪽이든, 업데이트가 수신 데이터베이스 노드(1202DB)를 목적지로 하면, 수신 데이터베이스 노드는 요청된 업데이트를 수신 노드(1202DB)에 로컬적으로 저장된 관련 타겟 엔트리의 사본에 로컬적으로 적용되거나, 또는 업데이트가 데이터베이스 노드(1202DB) 중 하나 이상 다른 데이터베이스 노드를 목적지로 하면, 수신 데이터베이스 노드(1202DB)는 관련 데이터베이스 노드(들)(1202DB)에 저장된 타겟 엔트리의 사본에 적용될 업데이트 요청을 관련 데이터베이스 노드에 포워딩한다. 엔트리가 데이터베이스 노드(1202DB)에 걸쳐 복제되는 경우에, 둘 다가 수행될 수 있음이 다시 유의된다. 필요한 경우, 업데이트는 중간 계층 내의 통신을 통해 데이터베이스 노드(1202DB) 사이 그리고/또는 상이한 중간 계층 사이에서 전파될 수 있다.
또한 클라이언트 노드(1203C)가 복수의 수신 데이터베이스 노드(1202DB) 각각에 업데이트 요청을 전송할 수 있으며, 이 경우에 각각의 수신 데이터베이스 노드(1202DB)가 위에 제시된 바와 같이 거동할 수 있다는 것이 유의된다.
하나 이상의 데이터베이스 노드(1202DB)에 기록되는 것 외에도, 본 개시에 따라, 각각의 업데이트 요청의 표시가 또한 코어(1201)에 대한 연결 중 하나를 통해 블록체인(150)에 기록된다. 이는, 이를테면, 데이터베이스 노드(1202DB) 사이의 일관성을 개선하기 위해 네트워크의 노드 사이의 합의를 구축하는 데 도움이 된다.
업데이트의 표시는 트랜잭션(152)에서 코어 노드(1201) 중 하나로 전송되어 블록(151)으로 채굴되고, 따라서 블록체인에 기록된다. 이것은 요청 클라이언트 노드(1203C)에 의해 전송될 수 있다. 이 경우에, 데이터베이스 노드(1202DB) 중 하나 이상은, 요청된 업데이트가 체인에 기록(또는 멤풀(154)에 수락)되었다는 것을 체크하기 위해 블록체인(150)(또는 채굴자의 멤풀(154))에 질의할 수 있다. 예컨대, 데이터베이스 노드(1202DB)는 자신이 업데이트를 확인하는 경우에만 업데이트를 적용할 수 있다. 체크는 데이터베이스 노드(1202DB) 및 코어 노드(1201) 중 하나 이상 사이의 계층화된 네트워크(1200) 내의 연결을 통해 직접 수행되거나, 대안적으로 하나 초과의 홉을 통해 대리로서(vicariously) 수행될 수 있다.
대안적인 시나리오에서, 업데이트의 표시를 포함하는 트랜잭션은, 업데이트 요청을 수신하는 것에 응답하여, 데이터베이스 노드(1202DB) 중 하나에 의해 코어(1201)에 전송될 수 있다. 이 경우에, 요청 클라이언트 노드(1203C)(또는 심지어 제3자 노드)는, 예상된 업데이트가 블록체인에 기록(또는 채굴자의 멤풀(154)로 수락)되었다는 것을 체크할 수 있다. 이러한 체크는 클라이언트 노드(1203C)와 코어 노드(1201) 중 하나 이상 사이의 계층화된 네트워크(1200) 내의 연결을 통해 직접 수행되거나, 대안적으로 하나 초과의 홉을 통해 대리로서 수행될 수 있다.
다른 대안에서, 업데이트의 표시를 포함하는 트랜잭션은 중간 계층 중 하나 내의 제3자 서비스, 예컨대, 증명 서비스(702A) 또는 이와 유사한 것에 의해 코어(1201)에 전송될 수 있다. 이것은 직접 또는 대리로서 전송될 수 있다. 요청 클라이언트 노드(1203C) 및/또는 데이터베이스 노드(1202DB) 중 하나 이상은, 예상된 업데이트가 체인에 기록(또는 멤풀(154)에 수락)되었다는 것을 체크할 수 있다. 다시 이 체크는 직접(단일 홉) 또는 대리로서(하나 초과의 홉) 수행될 수 있다.
체인에 기록될 업데이트의 "표시"는 업데이트 자체의 실제 콘텐츠를 명시적으로(절대적으로 또는 델타로) 포함할 수 있거나 포함하지 않을 수 있다. 대안으로서 또는 추가로, 이는 프리이미지의 해시와 같은 업데이트의 변환(transformation)을 포함할 수 있으며, 프리이미지는 업데이트를 포함한다. 이것은 "해시 커밋(hash commit)"으로 지칭될 수 있다. 해시 커밋 등만이 기록되는 경우에, 이것은, 알려진 업데이트가 체인에 기록(또는 채굴자의 멤풀(154)에 수락)되었다는 것을 체크하는 것을 가능하게 하지만, 업데이트에 대한 지식이 없는 제3자는 이를 볼 수 없을 것이다. 해시는 또한 콘텐츠 자체를 저장하기에 더 작을 수 있다.
하나의 유리한 어레인지먼트에서, 데이터베이스 노드(1202DB)가 계층화된 네트워크(1200)로부터 일시적으로 연결 해제되면, 데이터베이스 노드(1202DB)는 블록체인(150)에 저장된 기록을 사용하여 임의의 관련 업데이트를 체크하고, 온라인으로 돌아올 때 그/그들의 업데이트를 수행할 수 있다. 다시 이러한 체크는 해당 데이터베이스 노드(1202DB) 및 코어 노드(1201) 중 하나 이상 사이의 계층화된 네트워크(1200) 내의 연결을 통해 직접 수행되거나, 하나 초과의 홉을 통해 간접적으로 수행될 수 있다.
예컨대, 이것은 당업계에 알려진 용어인 "좀비 기록"의 잠재적인 문제를 해결하는 데 사용될 수 있다. 일부 분산형 데이터베이스에서, 노드가 연결 해제될 때, 노드는 삭제 형식으로 업데이트를 누락시킬 수 있다. 연결 해제된 노드가 다시 연결될 때까지 다른 모든 노드가 삭제된 엔트리를 완전히 말소(expunge)했다면, 해당 노드는, 삭제된 엔트리가 데이터베이스에 추가할 새로운 엔트리였던 것처럼 삭제된 데이터를 다시 전파할 수 있다. 그러나, 체인에 저장된 삭제 기록을 유지함으로써, 이것이 회피될 수 있다. 또 다른 유리한 시나리오에서, 체인 상의 기록은 "힌트 핸드오프(hinted handoff)"를 제공하는 데 사용될 수 있다. 힌트 핸드오프는 당분야의 용어이다. 본원에서 "핸드오프"는, 데이터베이스 노드가 연결 해제된 기간 후에 재연결될 때 데이터베이스 노드에 업데이트를 제공하는 것을 의미하며, 힌트는 업데이트가 지시되어야 하는(즉, 관련 엔트리 또는 엔트리들을 포함하는 데이터베이스 중 일부를 저장하는) 데이터베이스 노드 또는 노드들의 ID를 포함한다. 이것은 또한 다른 필드를 포함할 수 있다. 데이터베이스 노드(1202DB)가 다른 데이터베이스 노드(1202DB)에 전파되어야 하는 업데이트 요청을 수신하지만, 해당 다른 데이터베이스 노드(1202DB)는 현재 계층화된 네트워크(1200)로부터 연결 해제되어 있다고 가정한다. 종래에, 수신 데이터베이스 노드(1202DB)는, 다른 데이터베이스 노드(1202DB)가 다시 온라인 상태가 될 때까지, 힌트를 포함하는 업데이트를 저장해야 할 수 있다. 그러나, 대신에 온체인에 힌트를 기록함으로써, 수신 데이터베이스 노드(1202DB)는 이를 수행할 필요가 없다.
체인에 대안적으로 또는 추가로 저장될 수 있는 표시의 또 다른 예는 순서 정보이다. 일부 시나리오에서, 동일한 타겟 엔트리를 업데이트하라고 요청하는 다수의 업데이트 요청이 해당 엔트리를 저장하는 동일한 데이터베이스 노드(1202DB)에서 수신될 수 있다. 이를 수용하기 위해, 데이터베이스 노드(1202DB)는 업데이트를 지정된 순서로 타겟 엔트리에 적용하도록 구성될 수 있다. 일부 실시예에서, 지정된 순서는 수신 데이터베이스 노드(1202DB)에서의 수신 시간, 또는 전송 클라이언트 노드(1203C) 또는 포워딩 데이터베이스 노드(1202DB)에 의해 추가된 타임스탬프(예컨대, 원래 전송 클라이언트(1203C)로부터 직접 요청을 수신한 데이터베이스 노드에서의 수신 시간)에 기초할 수 있다. 대안적으로, 지정된 순서는 클라이언트로부터의 하나 이상의 업데이트 요청에서, 또는 다른 데이터베이스 노드(1202DB) 또는 증명 서비스 노드(702A)와 같은 다른 중간 계층 노드(1202)로부터의 또는 코어(1201)로부터의 메시지에서 어서팅될(asserted) 수 있다. 예컨대, 순서는 다수의 업데이트의 정렬된 목록 또는 각각의 업데이트 요청에 매핑된 순서의 인덱스 형태로 어서팅될 수 있다.
실시예에서, 지정된 순서는, 예컨대, 이전에 논의된 증명 서비스(702A)에 의해 블록체인(150)에 기록될 수 있다. 그러한 실시예에서, 요청을 하는 클라이언트 노드(1203C)는 증명 서비스(702A)로부터 순서를 획득하고 이를 데이터베이스 노드(1202DB)에 제출할 수 있다. 이 경우에, 블록체인(150)에 순서를 기록할 뿐만 아니라, 순서 증명 서비스(702)는 또한 지정된 순서를 포함하는 메시지를 요청 클라이언트 노드(1203C)(이는 또한 증명 서비스(702A)의 클라이언트(703C)임)에 반환한다. 클라이언트(1203C)가 데이터베이스 노드(1202DB)에 대해 업데이트를 요청할 때, 클라이언트는 또한 업데이트 요청 중 적어도 하나에서 증명 서비스(702A)로부터 획득된 순서를 데이터베이스 노드(1202DB)에 제출한다. 데이터베이스 노드(1202DB)는 블록체인(또는 채굴자의 멤풀(154))에 기록된 순서에 대해 이를 체크하고, 그런 다음, 클라이언트(1203C)가 제출한 순서가 체인(150)에 기록된 순서와 일치하는 것을 조건으로 지정된 순서로 업데이트를 적용한다. 체크는 데이터베이스 노드(1202DB)와 코어(1201) 사이의 연결을 통해 직접적으로, 또는 대안적으로 하나 초과의 홉을 통해 수행될 수 있다.
대안적으로, 업데이트를 수행하는 데이터베이스 노드(1202DB)는 블록체인(150)으로부터 직접 순서를 판독하고, 블록체인(150)(또는 채굴자의 멤풀(154))로부터 판독된 순서를 적용할 수 있다.
다른 변형에서, 증명 서비스(702A)는 데이터베이스 노드(1202DB) 중 하나 이상에 통합될 수 있다. 이 경우에, 데이터베이스 노드(1202DB) 중 하나는 순서를 결정하고(그리고 선택적으로 타임스탬프를 추가하고) 이를 블록체인(150)에 기록하는 것을 담당한다. 순서를 담당하는 데이터베이스 노드(1202DB)는 지정된 순서를 중간 계층(들) 내의 노드 사이의 연결 주위의 다른 데이터베이스 노드(1202DB)에 전파할 수 있다. 다른 데이터베이스 노드(1202DB)는 블록체인에 기록된 순서에 대해 이를 체크할 수 있거나, 대안적으로 블록체인(150)으로부터(또는 채굴자의 멤풀(154)에서) 직접 순서를 판독할 수 있다. 이것은 데이터베이스 노드(1202DB)와 코어(1202) 사이의 연결을 통해 직접적으로, 또는 대안적으로 하나 초과의 홉을 통해 수행될 수 있다.
순서 정보는, 계층화된 네트워크(1200)의 중간 계층(들) 전반에 걸쳐 전파될 때 상이한 업데이트 요청이 상이한 지연을 경험하는 시나리오에서 특히(그러나 배타적이지 않음) 유용하다. 예컨대, 제1 업데이트 요청이 다른 클라이언트 노드(1203C)로부터의 제2 업데이트 요청보다 먼저 개개의 클라이언트 노드(1203C)에 의해 발행되지만, 제2 업데이트 요청이 타겟 엔트리를 저장하는 데이터베이스 노드(1202DB)에 제1 업데이트 요청보다 늦게 도달하는 시나리오가 고려된다. 예컨대, 제1 업데이트 요청이 제2 업데이트 요청이 통과하지 않는 방화벽을 통과해야 하기 때문에, 그리고/또는 제1 업데이트 요청이 지리적으로 더 멀리 떨어진 위치로부터 전송되기 때문에, 이것이 발생할 수 있다. 본원의 실시예에 따른 순서 정보의 사용은, 업데이트가 발행된 순서, 또는 업데이트가 원래 제출되었던 업데이트의 중간 데이터베이스 노드(1202DB)에 의해 먼저 수신된 순서로 업데이트가 적용되는 것을 보장하기 위해 이러한 상황을 처리하는 데 사용될 수 있다.
그러나, 이것이 필수적인 것은 아니라는 것이 유의된다. 더 일반적으로, 일부 확정적인 순서에 대한 합의에 도달하는 한, 그 순서가 발행 순서 또는 최초 수신 순서일 필요는 없다. 일부 확정적인 순서가 동의되는 한, 분산형 데이터베이스의 임의의 주어진 엔트리는 (적어도 결국) 확정적인 상태를 가질 것이며, 이 순서는 일관된 방식으로 데이터베이스 노드(또는 클라이언트 노드) 중 임의의 것에 의해 독립적으로 다시 도출 및 검증될 수 있다.
개시된 방식 이외의 원리들 중 일부를 설명하기 위해, 이제 특정 구현이 예로서 설명될 것이다. 예시로서, 계층 2에서 구현되는 데이터베이스 노드 및 계층 3 내의 클라이언트(사용자) 노드에 대해 참조가 이루어질 것이지만 이것은 각각 임의의 중간 및 외부 계층으로 일반화될 수 있다.
계층화된 네트워크를 사용하는 하나의 이유는, 계층 2의 노드가 바람직하게는 일관된 데이터를 저장해야 하지만 모든 노드가 서로 직접 연결되지 않을 수 있다는 것이다. 데이터의 일관성은, 데이터 및 커맨드가 전송 및 수신되는 순서, 및 따라서 데이터 저장소를 사용하여 데이터가 어떻게 변환되는지에 관련된다. 예컨대, 데이터 요소에 대해 비가환성 연산, 예컨대, 좌측으로부터의 행렬 곱셈을 수행하라는 2개의 요청이 있는 경우, 순서가 중요하다. 다른 예에서, 하나의 요청은 파일을 삭제하는 것이고, 다른 하나는 파일을 판독하는 것일 수 있다. 다시, 이러한 요청이 수신되는 순서가 중요하다. 분쟁을 중지하기 위해, 데이터 삽입의 순서를 정의하는 것이 바람직할 것이다. 이것은 중앙 조정자(central coordinator)로서 블록체인에 의해 달성될 수 있다.
트랜잭션 및 데이터 전파에 대한 인센티브는 서비스 레벨 동의(agreement)에 의해 제공될 수 있다. 데이터베이스 노드는, 이를테면, 데이터 및 트랜잭션을 계층 2 전체에 전파하기 위해 트랜잭션을 커뮤니티 전체에 전파하여, 데이터베이스가 일관되도록 할 것이다. 이것은 그들의 서비스 레벨 동의를 준수하기 위한 요건일 수 있다. 데이터의 사용자는 이를 계층 3 전체에 전파하고, 신뢰성과 불변성에 대한 증명으로서 머클 증명 및 트랜잭션을 함할 수 있다.
계층 2 노드에 디지털 인증서가 발행될 수 있다. 계층 3 노드의 사용자에게 또한 디지털 인증서가 제공될 수 있다. 계층 아래로 내려가는 전체 PKI(public key infrastructure)가 있을 수 있고, 이는 PKI 개념에 대해 UTXO를 사용하여 블록체인 상에 있을 수 있다.
비교를 통해, 블록체인을 사용하지 않고 블록체인 네트워크 노드의 코어가 없는 비계층화된 네트워크에서 구현된 분산형 데이터베이스에 대한 참조가 이루어진다. 이러한 비교의 데이터베이스의 예는 기존 카산드라(Cassandra) 데이터베이스이다.
종래의 데이터베이스 이론에서, CAP 정리(또는 브루어(Brewer)의 정리)는, 데이터베이스 시스템의 3개의 주요 바람직한 속성 중 2개만을 달성하는 것이 가능하다고 명시한다.
● 일관성 ― 데이터베이스로부터 판독된 데이터는 항상 가장 최근의 기록에 대응함;
● 가용성 ― 데이터는 요청 시 데이터베이스로부터 항상 판독될 수 있음; 및
● 파티션 허용(Partition tolerance) ― 시스템은 네트워크 파티션의 이벤트에도 계속 동작함.
현재 개시된 방식은 이 트릴레마(trilemma)를 해결하는 데 사용될 수 있다.
카산드라 데이터베이스 관리 시스템은, CAP 정리의 3개의 양상 중 2개를 충족시키지만 데이터의 일관성을 희생하는 고가용성, 파티션 허용 데이터베이스 아키텍처이다.
카산드라 데이터베이스 시스템의 기본 아키텍처는, 인덱싱된 데이터를 카산드라 노드 클러스터의 일부로서 저장하는 분산형 노드의 세트이다. 클러스터에서, 모든 노드는 동등한 것으로 간주되며, 다른 분산 시스템에서와 같이 '슬레이브' 노드와 '마스터' 노드 사이의 어떠한 구분도 없다. 결과로서, 클러스터 내의 카산드라 노드는 완전한 그래프를 형성하며, 여기서 모든 노드는 네트워크 내의 다른 모든 노드를 식별하고 이와 통신할 수 있다. 이 아키텍처가 도 13(a)에 도시된다. 이것은 모든 각각의 카산드라 노드(1301)의 쌍 사이에 카산드라 네트워크 연결(1399)을 갖는 카산드라 노드 클러스터(1300)를 도시한다.
데이터베이스에 저장되는 데이터는 노드 사이에서 파티셔닝되며, 일반적으로 도 13(b)에 도시된 바와 같이 노드의 네트워크의 파티션에 대한 내성(resistance) 및 고가용성을 허용하기 위해 다수의 노드에 의해 복제될 것이다. 이것은 3개의 예시적인 데이터 파티션: 데이터 파티션 1(1301), 데이터 파티션 2(1352) 및 데이터 파티션 3(1353)을 도시한다.
데이터 아이템이 복제되는 카산드라 노드의 수는 클러스터의 복제 인수(replication factor)로 알려져 있다. 3인 복제 인수는, 각각의 데이터 아이템이 네트워크 상의 3개의 노드에서 복제됨을 의미한다.
카산드라 클러스터의 노드 사이에 저장된 데이터의 일관성은 실질적으로, 판독 요청에 응답하여 노드에 의해 반환된 데이터가 실제로 카산드라 클러스터에 가장 최근에 기록된 요청된 데이터 버전일 확률이다. 카산드라 클러스터의 일관성 레벨은 판독 및 기록 동작에 대해 설정될 수 있고, 특정 사용 사례의 요구사항을 충족시키도록 구성될 수 있다.
본 개시는 카산드라 데이터베이스에서 더 높은 일관성 ― 이는 일반적으로 설계에 의한 성능을 위해 일관성을 희생함 ― 을 달성하는 데 사용되는 프로세스를 개선하기 위한 새로운 방법을 소개한다.
데이터 센터 및 클러스터: 카산드라 아키텍처는 노드의 다양성(multiplicity)과 관련된 2개의 정의를 사용한다.
● 데이터 센터 ― 물리적 또는 가상 집합일 수 있는 관련 노드의 집합. 단일 데이터 센터는 데이터베이스의 완전한 사본을 유지하는 데 사용될 수 있고, 단일 지리적 위치에 하우징될 수 있다.
● 클러스터 ― 클러스터는 카산드라 데이터베이스와 관련된 데이터 센터의 집합. 클러스터는 다수의 물리적 위치에 걸쳐 있을 수 있다.
데이터 센터 및 클러스터가 블록체인 네트워크 노드의 코어를 갖는 계층화된 네트워크의 네트워크 구조를 사용하여 복제될 수 있음을 나중에 알 수 있다.
기록 및 판독 경로: 카산드라 데이터베이스 시스템에서, 일반적으로 노드간 통신이라고 칭해지는, 노드들이 통신할 수 있는 2개의 방향(way)이 존재한다. 이것들은 다음과 같다:
● 직접 통신 ― 일반적으로, 카산드라 클러스터 내의 각각의 노드가 각각의 다른 노드와 통신하는 것이 가능하다. 이것은 카산드라 클러스터를 완전한 그래프인 것으로 간주하기 위한 기초이다. 이러한 방식으로 임의의 노드의 쌍 사이에 직접 전송되는 메시지는 기록 요청 및 판독 요청과 관련된다.
● 가십 프로토콜(Gossip protocol) ― 상태 메시지를 교환하기 위해 카산드라 노드에 의해 사용되는 피어-투-피어 통신 프로토콜. 메시지는 노드와 클러스터 내의 최대 3개의 다른 노드 사이에 초당 한 번 가십된다. 이것은 노드 상태를 통신하는 데 사용되고, 따라서 손상되었거나 도달할 수 없는 노드의 실패 검출을 허용한다.
클라이언트가 카산드라 클러스터를 사용하여 데이터를 판독 또는 기록할 때, 클러스터의 임의의 노드가 무차별적으로 취급되기 때문에, 클라이언트는 임의의 노드와 통신하도록 선택할 수 있다. 클라이언트가 선택된 노드는, 클라이언트에 의해 이루어지는 특정 판독 또는 기록 요청을 수행하기 위한 조정자 노드가 된다.
이것은, 조정자가 클러스터 내의 어떤 노드가 기록/판독해야 하는지를 식별하고 그에 따라 해당 노드로부터 데이터를 페칭하거나 이에 데이터를 기록하는 것을 수반한다.
도 14는 카산드라 클러스터 그래프의 상이한 통신 경로를 도시한다. 노드는 가십(점선, 1402)을 통해 상태 메시지를 통신하고, 직접 통신(굵은 실선, 1401)을 통해 기록/판독 요청을 통신한다. 도 14는 클라이언트(1403)가 판독 또는 기록 요청(1404)을 조정자 노드(1301c)(속이 찬 흑색)에 전송하고, 가십 메시지를 조정자(1301c)로부터 복수의 복제 노드(1301r)(십자형 해칭)에 전송하는 것을 도시한다.
데이터 로깅 & 기록: 고레벨에서, 카산드라 노드 1301의 하드웨어 구성요소는 다음을 포함한다.
디스크:
○ 커밋 로그 ― 카산드라 노드에 대해 이루어지는 모든 변형(mutation)의 추가 전용 로그.
○ SSTable ― 카산드라 노드의 디스크에 데이터를 유지하는 데 사용되는 변경할 수 없는 데이터 파일.
메모리:
○ Memtable ― 카산드라 노드가 기록 요청으로부터 데이터를 버퍼링하는 메모리내 구조.
카산드라 노드의 이러한 구성요소는, 도 15에 도시된 바와 같이, 노드가 조정자 노드로부터 기록 요청을 수신할 때 실행되는 기록 경로 동안 상호작용한다. 카산드라 노드(1301)는 커밋 로그(1503) 및 SSTable(1504)을 포함하는 디스크(1501), 및 Memtable(1505)을 포함하는 메모리(1502)를 포함한다.
노드(1301)에 의해 서비스되는 기록 요청을 상세히 설명하는 도 15의 프로세스는 다음과 같다.
(S1) 커밋 로그에 기록 요청(변형)을 기록(1503).
(S2) 기록 데이터 블롭(blob) 및 인덱스를 메모리에 저장(1502).
(S3) 메모리로부터 디스크로 데이터 및 인덱스를 플러싱(1501).
이 상호작용의 중요성은, 카산드라 데이터베이스 시스템이 AP(가용성, 파티션 허용) 데이터베이스이고 CAP 정리에 따라 일관성을 희생한다는 사실과 관련이 있다.
AP 시스템으로서, 카산드라 데이터베이스는 최종 일관성 모델에 의존한다. 이것은, 변형이 발생하고 일정 시간 후에, 데이터베이스가 가장 최근의 변형을 반영할 것이라는 것을 의미한다. 최종 일관성을 달성하는 데 있어서 가정은, 클러스터의 노드에 대해 이루어진 각각의 변형에 대한 동작의 순서가 기록 및 유지된다는 것이다. 이것은, SSTable에 저장된 데이터에 대한 변형이 올바른 순서로 수행되는 것을 보장하기 위해 온-디스크 커밋 로그를 사용하여 수행된다.
본 개시는, 블록체인-노드 코어를 갖는 계층화된 네트워크의 사용이 최종 일관성에 도달하기 위한 메커니즘을 개선할 수 있는 프로세스를 개선하는 방법을 소개한다. 예는 나중에 더 상세히 논의될 것이다.
데이터의 삭제: 카산드라 데이터베이스 노드로부터 데이터의 삭제는 다음 기술을 함께 사용한다.
● 업서트(Upsert) ― 카산드라 데이터베이스는, 새로운 버전의 데이터가 삽입되지만 더 최근의 타임스탬프를 갖는 삽입 유형('upsertion')으로서 삭제를 취급한다.
● 툼스톤(Tombstone) ― 삭제의 경우에, 기록된 새로운 기록은 툼스톤이라 불리고, 이는 단순히 해당 데이터에 대한 삭제 마커이다. 툼스톤 마커는 본래 갖춰진(built-in) 만료 시간을 갖고, 그 이후에는 압축(compaction)에 의해 데이터가 삭제된다.
● 압축 ― 압축 프로세스는 툼스톤으로 마킹된 데이터를 삭제하는 메커니즘이다. 이것은 해당 데이터의 행의 모든 기존 버전을 취하지만, 가장 최근에 타임스탬핑된 모든 버전을 삭제하는 것을 수반한다.
● TTL(Time-to-Live) ― 업서트로서 데이터에 추가될 수 있는 마커, 이는 데이터 행이 툼스톤으로 마킹되고 그에 따라 삭제되는 시간을 나타낸다.
좀비 기록으로 알려진 카산드라의 분산형 복제 모델에 고유한 알려진 문제가 있다. 데이터의 행 삭제(즉, 툼스톤 및 압축) 동안에 노드에 도달할 수 없는 경우에, 해당 노드가 클러스터에 재합류할 때, 노드는 기록을 새로운 기록으로서 취급하고 이를 다른 복제 노드에 포워딩하려고 시도할 것이다. 기록이 삭제되는 동안 온라인 상태였던 다른 복제 노드가 이미 기록을 삭제했기 때문에, 이는 좀비 기록으로 알려져 있다.
본원에 설명된 실시예는 분산형 데이터베이스 시스템에서 좀비 기록의 가능성을 완화하기 위한 방법을 제공한다. 예는 나중에 더 상세히 논의될 것이다.
기록 복구: 기록 경로 동안의 복구(힌트 핸드오프). 데이터 기록이 수행되어야 하는 복제 노드 중 하나(또는 그 이상)가 도달할 수 없는 경우에, 해당 기록 요청에 대한 조정자 노드는 누락된 기록 데이터의 로컬 사본을 힌트 핸드오프로서 저장할 수 있다. 힌트 핸드오프는 다음을 포함한다.
● 도달할 수 없는 노드의 노드 ID;
● 데이터에 대한 타임스탬프로서 역할을 하는 힌트 ID;
● 카산드라 버전을 식별하는 메시지 ID; 및
● 기록될 데이터의 데이터 블롭.
도달할 수 없는 노드(노드 ID로 식별됨)가 다시 온라인 상태가 될 때, 조정자는 해당 노드에 대한 힌트를 재생하고 사실상 사후에(after the fact) 기록 요청을 노드에 포워딩하는 것을 담당한다. 이것은, 디스크 공간 및 처리 둘 모두에서, 도달할 수 없는 노드가 네트워크에 다시 합류할 때, 도달할 수 없는 노드를 업데이트하기 위한 부담이 조정자에게 반드시 주어진다는 것을 의미한다.
본원에 개시된 실시예는, 조정자에 대한 부담을 감소시킴으로써 이 복구(repair) 프로세스를 개선하기 위해 블록체인 노드 코어를 갖는 계층화된 네트워크를 사용한다. 예는 나중에 더 상세히 논의될 것이다.
분산형 데이터베이스의 계층화된 네트워크로의 통합: 본 개시는, 분산형 데이터베이스가 자신의 코어에서 블록체인 네트워크(1201/104) 노드의 클러스터를 갖는 계층화된 네트워크(1200)의 일부가 되도록, 카산드라 유형 데이터베이스 시스템 등에 관한 수정을 제공한다. 구조는 적어도 다음 계층을 포함한다.
● 블록체인 코어 계층(i=1) ― 바람직하게는 완전한 그래프를 형성하는 블록체인 네트워크 피어(104)를 독점적으로 포함하는 계층화된 네트워크의 최내측 계층.
● 데이터베이스 노드 계층(i=2) ― 완전한 그래프를 형성하지 않는 분산형 데이터베이스 클러스터의 노드를 포함하는 계층(예컨대, 이는 OTT(over-the-top) 콘텐츠 제공자의 데이터베이스 클러스터일 수 있음).
● 사용자/클라이언트 계층(i=3) ― 분산형 데이터베이스에 의해 뒷받침되는 시스템 또는 애플리케이션의 사용자(예컨대, OTT 서비스의 사용자)를 포함하는 계층.
편의상 이러한 유형의 네트워크는 본원에서 "블록체인 계층화된 네트워크(BLN)"로 지칭될 수 있다.
도 16은, 인트라-쉘 연결(intra-shell connection)을 제거하고(인트라-쉘 그래프의 완성도를 깨고) 데이터베이스 노드로부터 블록체인 코어 조상 노드로의 연결을 도입함으로써 그 외의 통상의 클러스터를 통합하여 BLN을 형성하는 방법을 도시한다.
도면은 상이한 크기의 두 개의 별개의 클러스터에 대한 이 변환을 도시하고, 단순성을 위해 외부 사용자 계층을 도시하지는 않는다.
도 16은 완전한(예컨대, 카산드라) 노드 클러스터(왼쪽)를 BLN(오른쪽)으로 통합하는 2개의 예를 도시한다. LHS에서, 노드는 완전한 그래프를 형성한다. RHS에서, 노드는, 데이터베이스 노드로부터 그들의 BLN 코어 조상의 세트로의 연결로 인해 블록체인 네트워크 중앙 코어 (i=1)에 의해 조정되는 부족한(sparser) 그래프 계층 (i>1)을 형성한다.
네트워크의 모두 3개의 계층을 포함하는 전체 BLN의 예가 도 17에 도시된다. BLNiDD(BLN-implemented distributed database)라는 문구는 본원에서, 분산형 데이터베이스 노드의 클러스터가 코어 주위의 중간 계층 중 하나를 구성하는 BLN을 일반적으로 지칭하는 데 사용될 수 있다.
특정 실시예에서, BLN의 i=2 계층 내의 카산드라 노드의 거동에 관한 다음과 같은 처방(prescription)이 내려질 수 있다.
● 데이터베이스 노드는 상태 메시지에 대해 동일한 가십 프로토콜 등을 사용할 수 있다.
● 데이터베이스 노드는 또한 동일한 가십 프로토콜 등을 사용하여 그들 사이에서 트랜잭션 메시지를 전파할 수 있다.
● 데이터베이스 노드는, i=2에서 직접 연결된 노드의 쌍에 대한 기록 및 판독 요청의 직접 통신을 사용할 수 있다.
BLNiDD의 커뮤니티: 카산드라 아키텍처의 데이터 센터 및 클러스터에 대한 기존 정의가 BLNiDD에 적용될 수 있다. 데이터 센터는 단순히 BLNiDD의 단일 커뮤니티에 속하는 데이터베이스 노드의 세트인 반면에, 클러스터 자체는 BLNiDD 내의 모든 커뮤니티로부터의 데이터베이스 노드의 전체 계층(i=2)이다.
공개 키 인프라구조: 데이터베이스 노드 클러스터(i=2) 내의 노드와 사용자(또한 BLN 그래프 내의 노드, i=3) 사이의 통신이 신뢰성을 향상시키기 위해 신뢰된다는 것을 보장하는 것이 바람직할 수 있다. 이것은 BLN에 대해 네트워크 전체의 PKI(Public Key Infrastructure)를 구현함으로써 달성될 수 있다.
데이터베이스 클러스터 및 그의 사용자를 포함하는 BLN에 대한 PKI 구현은 다음을 포함할 수 있다.
● 사용자 PKI(i=3):
○ 데이터베이스의 관리자(즉, DBA)에 의해 할당될 수 있는 데이터베이스의 n3명의 사용자에 대한 사용자 공개 키
Figure pct00008
의 할당.
○ 데이터베이스에 대한 신뢰할 수 있는 인증 기관(CA)으로서 데이터베이스 관리자에 의한 사용자 공개 키의 인증.
카산드라 노드 PKI(i=2):
○ DBA에 의해 또한 발행될 수 있는 데이터베이스 노드 클러스터를 형성하는 n2개의 노드에 대한 데이터베이스 노드 공개 키
Figure pct00009
의 할당.
○ 데이터베이스에 대한 신뢰할 수 있는 CA로서 데이터베이스 관리자에 의한 데이터베이스 노드 공개 키의 인증.
비트코인 코어 PKI(i=1):
○ 분산형 데이터 저장 및 리트리벌 시스템을 위한 BLN은 MinerID 시스템과 같은 블록체인 코어 네트워크의 기존 (의사)PKI를 레버리지(leverage)할 수 있다.
○ 데이터베이스 클러스터 노드 및 데이터베이스 사용자 둘 모두가 연결되는 블록체인 코어 네트워크 노드는, 비즈니스/서비스 제공자로서 식별 및 등록될 수 있는 공개 엔티티일 수 있다.
위의 확장으로서, 사용자 PKI 및 데이터베이스 노드 PKI 양상 둘 모두를 온체인으로 구현하는 것이 또한 가능할 수 있다. MinerID 시스템을 사용하는 블록체인 네트워크 코어 PKI는 또한 온체인이고, 이는 이러한 BLN 아키텍처에 대한 전체 PKI 구현이 온체인으로 실현 가능하게 구현될 수 있다는 것을 의미할 것이다. MinerID 시스템은, 예컨대, https://www.youtube.com/watch?v=ZSfT_WtBmyQ&feature=emb_title에 개시된다.
도 18은 적어도 계층 i=2,3에서 구현된 PKI를 갖는 BLN 구현 분산형 데이터베이스의 예를 도시한다.
예시적인 방법: 블록체인은, 카산드라 데이터베이스 등과 비교하여, 최종 일관성에 도달하기 위한 더 강건하고 감사 가능하고, 검증 가능한 메커니즘을 가능하게 하는 데 사용될 수 있다. 이것은, 위에서 설명된 바와 같이, 데이터베이스 클러스터를 BLN에 통합함으로써 수행될 수 있다. 다음 방법 중 임의의 것에 대해, 용도는 또한 다음으로 구성될 수 있다.
● BLN의 계층에 대한 PKI, 및/또는
● 타임스탬핑된 이벤트를 정렬하기 위한 방법.
다음의 방법에서, 개별적이지만 관련된 다수의 문제를 해결함으로써 분산형 데이터베이스 시스템을 개선하기 위해, 블록체인, 및 더 구체적으로 그의 코어 네트워크에 구축된 BLN을 사용하는 다수의 방법이 약술되어 있다.
방법 1 ― 최종 일관성을 개선하고 그리고/또는 좀비를 완화하기 위해 BLN의 사용. 카산드라 데이터베이스는 AP 시스템이고, 이는, 카산드라 데이터베이스가 CAP 정리에 따라 데이터의 일관성을 희생하고 대신에 최종 일관성 메커니즘을 사용한다는 것을 의미한다. 동작의 순서는 이를 행하는 데 중요하며, 실패는 데이터베이스를 통해 전파되는 좀비 기록을 발생시킬 수 있다.
다중-노드 클러스터에서, 상이한 데이터베이스 노드는 동일한 데이터의 복제품을 저장할 수 있다. 노드가 로컬적으로 저장한 데이터에 대한 삭제 요청을 수신하면, 노드는 지정된 데이터베이스 엔트리를 툼스톤하고, 또한 동일한 기록의 복제품을 포함하는 다른 노드에 툼스톤을 포워딩하려고 시도한다. 그러나, 하나의 복제 노드가 그 당시에 도달할 수 없다면, 복제 노드는 툼스톤을 즉시 수신하지 않을 것이고, 그래서 복제는 삭제 동작 이전으로부터의 기록 버전을 계속 포함한다. "툼스톤" 기록이 해당 노드가 복구되기 전에 클러스터의 나머지로부터 이미 삭제되었다면, 이제 복구된 노드의 해당 엔트리는 그것이 온라인 상태로 다시 돌아가게 될 때 새로운 데이터로서 취급될 수 있고, 따라서 클러스터의 나머지에 새로운 추가로서 전파될 수 있다. 이것은 좀비 기록으로 지칭된다.
이러한 문제 등을 해결하기 위해, 단순한 카산드라 시스템 대신에 BLNiDD가 사용되어, 최종 일관성으로 이어지는 동작의 순서를 결정하기 위한 중앙 조정자로서 블록체인 코어 네트워크를 레버리지할 수 있다. 순서는 불변하고 공개적으로 검증 가능하게 된다. 계층 i=2 내의 데이터베이스 노드는, 직접 통신보다는, 가십(또는 다른 이러한 프로토콜)을 사용하여 데이터 블롭의 해시를 통해 모든 상태 변형을 전파한다.
다시 말해서, 동작의 순서가 중요할 수 있으며, 정확한 최종 일관성 상태에 도달하는 것이 바람직할 수 있다. 이를 해결하기 위해, 계층 i = 2에서의 데이터베이스 클러스터(불완전한 그래프)는 i = 1의 블록체인 코어 네트워크를 사용하여 이벤트를 정렬하고 최종 일관성을 보장한다. 최종 일관성의 아이디어는, 블록체인이 다수(예컨대, 6개)의 블록 후에(즉, 최종적으로) 변경 불가능한 상태로 붕괴되는 것과 잘 연결된다.
이것은 또한, 네트워크로부터 일시적으로 오프(off)가 되는 노드에 대한 재온보딩 프로세스(re-onboarding process)에 적용될 수 있다. 다른 노드는 가십 등을 사용하여 상태 변경을 통신하고, 상태 변경이 실제로 발생/요청되었음을 해당 노드에 증명하기 위한 머클(Merkle) 증명을 제공할 수 있다. 데이터베이스 노드는 여기에서 SPV형일 수 있다. 재온보딩의 경우에, 이것은 BLN의 강력한 속성을 보여준다.
방법은 다음과 같이 동작할 수 있다.
1. 사용자/클라이언트는 데이터베이스 노드에 판독/기록 요청을 한다. 사용자/클라이언트는 판독/기록 요청 트랜잭션을 동시에 생성 및 브로드캐스팅하고, 블록체인 코어 계층에 직접 전송한다. 사용자/클라이언트는 또한 이러한 트랜잭션의 TxID를 조정자 데이터베이스 노드에 전송한다.
2. 조정자는, 판독/기록 요청이 속하는 관련 노드를 식별함으로써 평소와 같이 거동한다. 요청 유형에 의존하여, 조정자는 다음을 수행한다.
a. 판독 요청: 임의 노드에 대해 요구된 어떠한 상태 변형도 없고, 그래서 조정자 운영자는 가십 또는 직접 통신(직접 연결된 경우)을 통해 관련 노드에 요청을 포워딩한다.
b. 기록 요청: 기록에 대해 상태 변형이 요구되고, 따라서 조정자는 요청 및 데이터 둘 모두를 (가십 또는 직접 연결을 통해) 관련 복제 노드에 전파해야 한다.
c. 어느 경우에서나, 조정자는 또한 동작 순서의 증명으로서 기록 요청의 TxID를 관련 노드에 전파한다.
3. 피어로부터 요청 및 데이터를 수신할 때, 복제 노드는, 수신한 요청이 요청 트랜잭션의 요청 세부사항과 일치한다는 것을 코어로부터 확인하고, 조정자에게 확인응답(acknowledgement)을 반환한다. 실시예에서, 복제 노드는 이 체크를 조건으로 그 자신의 로컬 기록에만 업데이트를 적용할 수 있다.
4. 조정자는 다음을 반환한다.
a. 사용자/클라이언트에 대한 성공 또는 실패 메시지.
b. 선택 사항: 채굴을 위한 블록체인 코어 계층에 대한 성공 또는 실패 트랜잭션.
예시적인 판독/기록 트랜잭션의 세부사항이 아래의 도 19에 도시된다. <요청 데이터> 패킷은 고유한 요청 ID, 해당 요청에 대한 조정자 노드의 ID 및 요청되는 데이터의 행에 대한 키를 포함할 수 있다.
이 방법에 대한 새로운 판독/기록 경로가 도 20에 도시된다. 표준 카산드라 판독/기록 경로와의 주요 차이점은 다음과 같다.
● 사용자/클라이언트는 그들의 판독/기록 요청을 데이터베이스 클러스터 및 블록체인 코어 계층에 동시에 제출하고, 그리고
● 데이터베이스 클러스터의 노드는, 조정자와 요청에 대한 관련 복제 노드 사이의 거리에 의존하여, 가십(또는 이와 유사한 것, 즉, 간접적으로) 또는 직접 통신 중 어느 하나를 사용하여 요청 및 데이터를 전파할 수 있다.
하나의 이점은, 이것이 올바른 동작 순서를 반복함으로써 복제 노드가 동일한 최종 일관성에 도달하는 것을 보장하기 위한 조정자의 부담을 감소시킨다는 것이다. 이것은 비트코인 네트워크로 오프로드된다. 또 다른 이점은, 오프라인 동안에 노드가 누락한 동작(삭제를 포함함)의 순서가 블록체인에 저장되고 이로부터 복구 가능하기 때문에, 이것이 좀비 기록의 가능성을 완화한다는 것이다.
방법 2 ― 힌트 핸드오프 동안 조정자 노드에 대한 부담을 감소시킨다. 종래에, 카산드라와 같은 분산형 데이터베이스에서, 기록 경로 동안에 복제 노드에 도달할 수 없는 경우에, 힌트 핸드오프가 조정자 노드에 기록된다. 이것은, 힌트를 로컬적으로 저장하고 재합류 노드에 포워딩함으로써 복제 노드가 네트워크에 재합류하는 것을 돕기 위해 조정자에 대한 추가적인 부담을 준다. 힌트 핸드오프가 또한 시간 초과되어, 데이터의 최종 일관성을 깨뜨릴 수 있다.
BLNiDD를 사용하여 이를 해결하기 위해, 힌트 핸드오프는, 변경할 수 없는 순서를 위해 힌트 핸드오프를 블록체인 코어 계층에 전파함으로써 블록체인에 기록될 수 있다. 노드가 네트워크에 다시 합류할 때, 노드는 (예컨대, 노드 ID 및/또는 PKI를 사용하여) 자신과 관련된 힌트에 대해 블록체인 코어 계층에 질의할 수 있다. 선택적으로, 적어도 하나의 복제 노드는 기록 요청에 대한 데이터를 기록했으며, 재합류 노드는 (블록체인에 블롭을 또한 저장하는 것 대신에) 기록 데이터 블롭을 획득하기 위해 이를 사용할 수 있다.
이 방법은 다음과 같이 동작할 수 있다.
1. 사용자/클라이언트는 복제 인수, 예컨대, 3의 복제 인수를 사용하여 노드(조정자)에 기록을 요청한다.
a. 선택 사항: 사용자/클라이언트는 또한 비트코인 코어 계층에 요청의 기록을 전송한다.
2. 조정자는 데이터를 기록할 3개의 노드를 식별하고, 기록 요청을 포워딩한다.
3. 노드 중 2개는 데이터를 기록하고 요청에 긍정적으로 응답하지만, 제3 노드는 도달할 수 없다.
4. 조정자는 사용자/클라이언트에게 긍정적인 응답을 반환하고, 힌트 핸드오프 트랜잭션을 기록하고(도 21 참조), 채굴을 위해 이를 블록체인 코어 계층에 브로드캐스팅한다. 힌트 핸드오프는 다음을 포함한다.
a. 도달할 수 없는 노드의 노드 ID,
Figure pct00010
;
b. 데이터를 타임스탬핑하는 힌트 ID;
c. 메시지 ID;
d. 데이터가 성공적으로 기록된 2개의 복제품의 노드 ID,
Figure pct00011
;
e. 기록될 데이터 블롭의 해시.
f. 선택 사항: 데이터 자체
5. 도달할 수 없는 노드는 네트워크에 다시 합류하고, 인입하는 힌트 핸드오프에 대해 블록체인 코어 네트워크에서 자신의 연결을 질의한다. 힌트 핸드오프를 획드할 때, 노드는 다음을 수행할 것이다.
a. 노드
Figure pct00012
및/또는
Figure pct00013
로부터 데이터 블롭을 획득하고;
i. 선택 사항: 블롭이 힌트 핸드오프에 포함되면, 단순히 블롭을 획득한다.
b. 데이터 블롭이 힌트 핸드오프에서 해시로 해싱된다는 것을 검증하고;.
c. 어떠한 다른 동작도 누락되지 않았다고 가정하면(이는 또한 그 자신의 힌트 핸드오프에 의해 식별됨), 데이터 블롭을 자신의 로컬 디스크에 기록한다.
도 21은 힌트 핸드오프 트랜잭션의 예를 도시한다.
방법 3 ― 재온보딩 데이터베이스 노드의 보안 개선. 카산드라 노드가 클러스터의 나머지로부터 손상/파티셔닝될 때, 카산드라 노드는 나중에 재-온보딩되어야 한다. 이것은, 해당 노드가 도달할 수 없는 동안 해당 노드에 대해 요청된 모든 로컬 데이터베이스 변형을 획득하고 구현하는 것을 수반한다.
전형적으로, 카산드라 클러스터는 신뢰할 수 있는 환경으로 간주될 수 있고, 이로써 클러스터 내의 모든 노드는 이러한 누락된 변형 요청을 전파 및 통신하기 위해 서로를 신뢰한다. 그러나, 데이터베이스 노드가 올바른 누락 변형 요청을 다른 노드에 전송하기 위해 다른 노드에 대한 신뢰가 필요하지 않도록, 데이터베이스 노드에 대한 재합류 프로세스를 개선하는 것이 바람직할 수 있다.
이것은, 손상된 노드로부터 잘못된 변형을 전파하려고 하는 정교한 공격자에 의해 분산형 데이터베이스의 많은 노드가 손상되는 것을 방지하는 데 유리할 수 있다.
신뢰도에 대한 의존도에서 이러한 유리한 감소는, BLNiDD를 사용함으로써 그리고 블록체인 코어 네트워크로부터 획득된 서명된 트랜잭션으로부터 누락된 변형 요청을 획득하도록 재합류 노드에 요구하는 재합류 프로토콜(아래에 설명됨)을 사용함으로써 달성될 수 있다(확인 또는 미확인 트랜잭션이 사용될 수 있음).
무신뢰 재합류 프로토콜은 다음과 같을 수 있다.
1. 노드
Figure pct00014
은 상당한 시간 기간 동안 데이터베이스 클러스터로부터 파티셔닝된다. 이 시간 동안:
a.
Figure pct00015
에 의해 복제된 데이터와 관련하여 다수의 기록 요청(업서트를 포함함)이 이루어진다.
b. 노드
Figure pct00016
은 악의적인 공격으로 인해 파티셔닝되었는지 여부를 확신할 수 없고, 이것은, 다른 노드가 유사하게 손상되었을 수 있고 공격자의 제어 하에 있을 수 있다고 가정하면, 노드가 네트워크에 재합류해야 한다는 것을 의미한다.
2. 노드가 재합류할 때, 재합류 노드는 블록체인 코어 네트워크로부터 획득된 서명된 트랜잭션으로부터 누락된 변형 요청을 획득한다.
이는 방법 1과 유사하지만, 다른 데이터베이스 노드에 정확한 업데이트를 제공하기 위해 그들을 신뢰하지 않고서도, 최근에 손상된 노드가 데이터베이스 클러스터에 재온보딩되도록 직접 질의할 수 있는 이벤트를 시간-정렬하기 위해 블록체인 코어 네트워크를 사용한다.
일부 실시예에서, 재온보딩을 위해 머클 증명이 사용될 수 있다.
위의 것의 이점은, 복제 노드가 올바른 동작 순서를 반복함으로써 이것은 동일한 최종 일관성에 도달하는 것을 보장하기 위한 조정자에 대한 부담을 감소시킨다는 것이다. 이것은 블록체인 네트워크로 오프로드된다.
방법 4 ― 트랜잭션 세트를 갖는 모든 노드의 커밋 로그를 복제 또는 교체함. 카산드라 클러스터의 모든 노드가 수행하도록 요청받은 모든 데이터베이스 변형의 커밋 로그의 로컬 사본을 그들이 유지해야 한다는 것이 그들의 요건이다. 이것은 카산드라 노드의 성능을 제한할 수 있는 하드웨어 부담을 카산드라 노드에 준다.
본원에 개시된 실시예에서, 블록체인은 데이터베이스 노드로부터 커밋 로그를 저장하는 부담을 오프로드하기 위해 변하지 않는 타임스탬프 원장으로서 사용될 수 있다. 커밋 로그는 필요할 때 블록체인으로부터 리트리브될 수 있기 때문에, 커밋 로그는 데이터베이스 노드 자체에 임시로(ephemerally) 저장되기만 하면 된다.
이것은, 대신에 블록체인에 모든 노드를 기록함으로써, 그 자신의 로컬 커밋 로그를 유지하는 데이터베이스 클러스터 내의 모든 노드에 대한 부담을 감소시킬 수 있다.
실시예에서, 이전에 논의된 데이터 타임스탬핑 방법은 링크된 트랜잭션의 세트로서 전체 커밋 로그를 블록체인에 저장하는 데 사용될 수 있고, 커밋 로그의 데이터 및 동작 순서 둘 모두는 블록체인 네트워크 코어 계층 노드의 액션에 의해 블록체인에 변경 불가능하게 기록된다.
이전에 상세된 바와 같이, 카산드라 커밋 로그는 단일 카산드라 노드에 대한 이루어지는 모든 변형의 추가 전용 로그이다. 블록체인 로그는, 블록체인에 커밋된 트랜잭션의 추가 전용 이벤트 로그일 수 있다는 점에서 유사할 수 있다.
결론
위의 실시예들은 단지 예로서만 설명되었다는 것이 인지될 것이다. 보다 일반적으로, 다음 스테이트먼트들 중 임의의 하나 이상에 따른 방법, 장치 또는 프로그램이 제공될 수 있다.
스테이트먼트 1: 계층화된 네트워크에서 구현된 분산형 데이터베이스를 동작시키는 방법으로서, 계층화된 네트워크는 하나 이상의 코어 노드를 포함하는 코어 계층, 각각 하나 이상의 중간 계층 노드를 포함하는 하나 이상의 중간 계층, 및 각각 하나 이상의 외부 계층 노드를 포함하는 하나 이상의 외부 계층을 포함하고, 코어 노드 각각은 블록체인 네트워크의 노드이고, 중간 계층 노드 중 적어도 일부는 분산형 데이터베이스의 데이터베이스 노드이고, 외부 계층 노드 중 적어도 일부는 분산형 데이터베이스의 클라이언트 노드이고, 각각의 데이터베이스 노드는 분산형 데이터베이스 중 적어도 일부를 저장하고, 방법은, 데이터베이스 노드 중 제1 데이터베이스 노드에서: 클라이언트 노드 중 하나 이상으로부터 하나 이상의 업데이트 요청을 수신하는 단계 ― 하나 이상의 업데이트 요청 각각은 분산형 데이터베이스 내의 개개의 타겟 엔트리를 업데이트하라는 요청임 ― ; 및 수신된 업데이트 요청들 각각에 대해, 상기 제1 데이터베이스 노드에 저장된 데이터베이스의 일부에서 개개의 타겟 엔트리가 발견되는지를 결정하고, 그리고 그렇다면, 제1 데이터베이스 노드에 저장된 데이터베이스의 일부 내의 개개의 타겟 엔트리에 대한 업데이트 요청의 업데이트를 수행하고, 그리고 그렇지 않다면, 개개의 타겟 엔트리를 포함하는 데이터베이스의 일부를 저장하는 데이터베이스 노드 중 다른 데이터베이스 노드에 요청을 포워딩하는 단계를 포함하고, 하나 이상의 업데이트 요청의 표시를 포함하는 적어도 하나의 트랜잭션이 또한 블록체인 네트워크의 블록체인에 기록된다.
이 문맥에서 "제1"은 단지 데이터베이스 노드 중 정해진 하나에 대한 임의의 라벨일 뿐이며, 그 자체로 다른 데이터베이스 노드와 관련된 임의의 특정 상태를 반드시 의미하는 것은 아니라는 것이 인지될 것이다.
업데이트 요청은 동일한 클라이언트 노드, 또는 상이한 클라이언트 노드로부터 수신될 수 있거나, 일부는 동일한 클라이언트 노드로부터 수신될 수 있고, 일부는 상이한 클라이언트 노드로부터 수신될 수 있다.
스테이트먼트 2: 스테이트먼트 1의 방법에 있어서, 각각의 클라이언트 노드는 계층화된 네트워크 내에서 데이터베이스 노드 중 적어도 하나에 연결되고, 제1 데이터베이스 노드는 클라이언트 노드와 데이터베이스 노드 사이의 연결 중 하나를 통해 클라이언트 노드로부터 직접 업데이트 요청 중 적어도 하나를 수신한다.
스테이트먼트 3: 스테이트먼트 1 또는 2의 방법에 있어서, 데이터베이스 노드 각각은 계층화된 네트워크 내에서 데이터베이스 노드 중 적어도 하나의 다른 데이터베이스 노드에 연결되고, 업데이트 요청 중 적어도 하나는, 데이터베이스 노드 사이의 연결 중 적어도 하나를 통해, 제1 데이터베이스 노드 이외에, 데이터베이스 노드 중 적어도 하나의 다른 데이터베이스 노드를 통해 간접적으로 수신되고, 그리고/또는 다른 데이터베이스 노드 중 하나에 저장된 데이터베이스의 일부에서 업데이트 요청 중 적어도 하나의 업데이트 요청의 개개의 타겟 엔트리가 발견되고, 상기 포워딩하는 단계는 데이터베이스 노드 사이의 상기 연결들 중 적어도 하나를 통해 다른 데이터베이스 노드에 포워딩하는 단계를 포함한다.
스테이트먼트 4: 임의의 이전 스테이트먼트의 방법에 있어서, 상기 적어도 하나의 트랜잭션은 클라이언트 노드 중 적어도 하나에 의해 공식화되고, 블록체인으로 채굴되도록 적어도 하나의 클라이언트 노드에 의해 코어 계층에 전송된다.
스테이트먼트 5: 임의의 이전 스테이트먼트의 방법에 있어서, 각각의 클라이언트 노드는 계층화된 네트워크 내에서 코어 노드 중 적어도 하나에 연결되어, 클라이언트 노드가 업데이트 요청이 블록체인에 기록되었는지를 체크하는 것을 가능하게 한다.
스테이트먼트 6: 스테이트먼트 5의 방법에 있어서, 각각의 클라이언트는 계층화된 네트워크 내에서 코어 노드 중 하나 초과에 연결된다.
스테이트먼트 7: 스테이트먼트 6의 방법에 있어서, 각각의 클라이언트는 계층화된 네트워크 내에서 코어 노드 모두는 아니지만 하나 초과에 연결된다.
스테이트먼트 8: 스테이트먼트 5 내지 7 중 임의의 방법에 있어서, 상기 적어도 하나의 트랜잭션은, 클라이언트 노드와 코어 노드 사이의 상기 연결 중 적어도 하나를 통해 클라이언트 노드 중 적어도 하나에 의해 코어 계층에 직접 전송된다.
대안적으로, 이것은 하나 초과의 홉을 통해 간접적으로 전송될 수 있다.
스테이트먼트 9: 스테이트먼트 1 내지 3 중 임의의 방법에 있어서, 상기 적어도 하나의 트랜잭션은 데이터베이스 노드 중 적어도 하나의 다른 데이터베이스 노드 또는 제1 데이터베이스 노드 이외의 중간 계층 노드에 의해 공식화되고, 그리고 블록체인으로 채굴되도록 적어도 하나의 다른 노드에 의해 코어 계층에 전송된다.
예컨대, 적어도 하나의 트랜잭션은 조정자로서 역할을 하는 다른 데이터베이스 노드 중 하나에 의해, 또는 증명 서비스(attestation service)를 제공하는 다른 유형의 중간 계층 노드에 의해 공식화되어 전송될 수 있다.
스테이트먼트 10: 임의의 이전 스테이트먼트의 방법에 있어서, 상기 적어도 하나의 트랜잭션은 클라이언트 노드 중 적어도 하나 또는 데이터베이스 노드 중 적어도 하나의 다른 데이터베이스 노드 또는 제1 데이터베이스 노드 이외에 다른 중간 계층 노드에 의해 공식화되어 코어 계층에 전송되고; 그리고 방법은, 제1 데이터베이스 노드에 의해: 하나 이상의 업데이트 요청의 표시가 블록체인에 기록되었다는 것을 체크하기 위해 블록체인을 조사하고, 그리고/또는 적어도 하나의 트랜잭션이 수락되었다는 것을 체크하기 위해 하나 이상의 채굴자의 멤풀을 조사하는 단계를 더 포함한다.
스테이트먼트 11: 스테이트먼트 10의 방법에 있어서, 상기 업데이트를 수행하는 단계는 상기 체크를 조건으로 한다.
스테이트먼트 12: 스테이트먼트 10 또는 11의 방법에 있어서, 제1 데이터베이스 노드는, 계층화된 네트워크 내에서 제1 노드와 코어 노드 중 적어도 하나 사이의 연결을 통해 직접 상기 조사를 수행하도록 구성된다.
스테이트먼트 13: 스테이트먼트 1 내지 3 중 임의의 방법에 있어서, 상기 적어도 하나의 트랜잭션은 제1 데이터베이스 노드에 의해 공식화되고, 블록체인으로 채굴되도록 제1 데이터베이스 노드에 의해 코어 계층에 전송된다.
스테이트먼트 14: 임의의 이전 스테이트먼트의 방법에 있어서, 데이터베이스 노드 각각은 계층화된 네트워크 내에서 코어 노드 중 적어도 하나에 연결된다.
스테이트먼트 15: 스테이트먼트 14의 방법에 있어서, 데이터베이스 노드 각각은 계층화된 네트워크 내에서 코어 노드 모두가 아니지만 적어도 하나에 연결된다.
스테이트먼트 16: 스테이트먼트 14 또는 15의 방법에 있어서, 적어도 하나의 트랜잭션은 데이터베이스 노드와 코어 노드 사이의 연결 중 적어도 하나를 통해 직접 데이터베이스 노드 중 적어도 하나에 의해 코어 계층에 전송된다.
스테이트먼트 17: 임의의 이전 스테이트먼트의 방법에 있어서, 적어도 하나의 트랜잭션에 포함된 하나 이상의 업데이트 요청의 표시는, 개개의 데이터 엔트리 또는 엔트리들의 콘텐츠에 수행하기 위한 업데이트인 하나 이상의 업데이트의 데이터 콘텐츠를 포함한다.
데이터 업데이트의 콘텐츠는 개개의 타겟 엔트리의 이전 값 또는 값들을 대체하기 위한 값 또는 값들, 및/또는 개개의 타겟 엔트리의 기존 값 또는 값들에 적용할 델타(delta)의 형태를 취할 수 있다.
스테이트먼트 18: 임의의 이전 스테이트먼트의 방법에 있어서, 적어도 하나의 트랜잭션에 포함된 하나 이상의 업데이트 요청의 표시는 하나 이상의 해시를 포함하고, 각각의 해시는 업데이트 중 적어도 하나의 업데이트의 데이터 콘텐츠를 포함하는 프리이미지의 해시이다.
스테이트먼트 19: 임의의 이전 스테이트먼트의 방법에 있어서, 적어도 하나의 트랜잭션에 포함된 하나 이상의 업데이트 요청의 표시는, 개개의 타겟 엔트리가 발견된 데이터베이스의 일부를 저장하는 데이터베이스 노드 또는 노드들의 ID를 포함한다.
스테이트먼트 20: 임의의 이전 스테이트먼트의 방법에 있어서, 상기 하나 이상의 업데이트 요청은 복수의 업데이트 요청이고, 업데이트 요청 중 적어도 일부의 개개의 타겟 엔트리는 제1 데이터베이스 노드에 저장된 데이터베이스의 일부에서 발견된 데이터베이스 내의 동일한 엔트리이고, 그리고 상기 업데이트를 수행하는 단계는 지정된 순서에 따라 업데이트를 수행하는 단계를 포함한다.
스테이트먼트 21: 스테이트먼트 20의 방법에 있어서, 적어도 하나의 트랜잭션에 포함된 하나 이상의 업데이트 요청의 표시는, 복수의 업데이트 요청의 지정된 순서를 포함한다.
순서는 다수의 상이한 가능한 형태, 예컨대, i) 업데이트 요청의 정렬된 목록, ii) 각각의 업데이트 요청에 매핑된 인덱스, iii) 해시 체인, 키의 체인, 여기서 각각의 키는 체인의 이전 업데이트 요청에 기초함, iv) r-퍼즐의 체인, 및/또는 v) 각각의 업데이트 요청과 연관된 타임스탬프 중 임의의 하나 이상으로 표시될 수 있다.
스테이트먼트 22: 스테이트먼트 21의 방법에 있어서, 적어도 하나의 트랜잭션은 클라이언트 노드 중 적어도 하나 또는 데이터베이스 노드 중 적어도 하나의 다른 데이터베이스 노드 또는 제1 데이터베이스 노드 이외에 다른 중간 계층 노드부터 발생하고, 그리고 방법은: 제1 데이터베이스 노드가 블록체인 또는 블록체인 네트워크의 채굴자의 멤풀로부터 지정된 순서를 판독하는 단계를 포함하고, 상기 업데이트를 수행하는 단계는, 블록체인 또는 멤풀로부터 결정된 상기 순서에 따라 업데이트를 수행하는 단계를 포함한다.
예컨대, 지정된 순서는, 제1 데이터베이스 노드 이외에 중간 노드 중 하나 이상의 다른 중간 노드에서 구현된 정렬 서비스에 의해 결정되어 체인 상에 기록될 수 있다.
스테이트먼트 23: 스테이트먼트 20 또는 스테이트먼트 21의 방법에 있어서, 순서는 클라이언트 노드가 정렬 서비스에 제출하는 것, 정렬 서비스로부터 순서의 지정을 다시 수신하는 것, 및 업데이트 요청 중 적어도 하나에 지정된 순서를 포함시키는 것 중 적어도 하나에 의해 결정된다.
정렬 서비스는 제1 데이터베이스 노드 이외에 중간 노드 중 하나 이상 다른 중간 노드에서 구현될 수 있다.
스테이트먼트 24: 스테이트먼트 20 또는 21의 방법에 있어서, 지정된 순서는 제1 데이터베이스 노드에서 구현된 정렬 서비스에 의해 결정된다.
스테이트먼트 25: 임의의 이전 스테이트먼트의 방법에 있어서, 데이터베이스의 하나 이상의 엔트리는 복수의 데이터베이스 노드에 저장된 데이터베이스의 일부에 걸쳐 복제된다.
스테이트먼트 26: 스테이트먼트 25의 방법에 있어서, 제1 데이터베이스 노드에 저장된 데이터베이스의 일부 및 데이터베이스 노드들 중 다른 데이터베이스 노드 둘 모두에서 업데이트 요청 중 적어도 하나의 업데이트 요청의 타겟 엔트리가 발견되어, 방법은 제1 데이터베이스 노드에서 업데이트를 수행하는 단계, 및 요청을 다른 데이터베이스 노드에 포워딩하는 단계 둘 모두를 포함한다.
스테이트먼트 27: 임의의 이전 스테이트먼트의 방법에 있어서, 제1 데이터베이스 노드 이외에 데이터베이스 노드 중 다른 데이터베이스 노드에 저장된 데이터베이스의 일부에서 업데이트 요청 중 적어도 하나의 업데이트 요청의 타겟 엔트리가 발견되고, 그리고 상기 포워딩하는 단계는: 다른 데이터베이스 노드가 계층화된 네트워크를 통해 현재 도달 가능한지 여부를 결정하고, 그리고 상기 결정에 따라 다른 데이터베이스 노드가 도달 가능한 것으로 결정된 것을 조건으로 업데이트 요청을 다른 데이터베이스 노드에 포워딩하는 단계를 포함한다.
스테이트먼트 28: 스테이트먼트 27의 방법에 있어서, 다른 데이터베이스 노드는 계층화된 네트워크로부터 일시적으로 연결 해제되고, 적어도 하나의 트랜잭션의 상기 표시는, 상기 다른 데이터베이스 노드가 계층화된 네트워크에 재연결될 때, 다른 데이터베이스 노드가 적어도 하나의 업데이트 요청의 업데이트를 수행하는 것을 가능하게 한다.
스테이트먼트 29: 임의의 이전 스테이트먼트의 방법에 있어서, 일정 기간 동안, 제1 데이터베이스 노드는 계층화된 네트워크로부터 일시적으로 연결 해제되고, 그리고 방법은, 제1 데이터베이스 노드가 계층화된 네트워크에 재연결될 때: 하나 이상의 다른 데이터베이스 노드에 의해 수신된 임의의 업데이트 요청을 기록하고, 제1 데이터베이스 노드가 연결 해제된 동안, 상기 제1 데이터베이스 노드에 의해 저장된 데이터베이스의 일부 내의 개개의 타겟 엔트리에 관련된 하나 이상의 추가 트랜잭션을 체크하기 위해, 제1 노드가 블록체인, 또는 블록체인 네트워크의 채굴자의 멤풀을 조사하는 단계, 및 임의의 이러한 업데이트를 수행하는 단계를 더 포함하는,
표시는, 업데이트가 이루어질 엔트리를 포함하는 데이터베이스의 일부를 저장하는 것을 담당하는 데이터베이스 노드 또는 노드들의 ID를 적어도 포함할 수 있다. 업데이트의 데이터 콘텐츠는 트랜잭션에 저장된 표시에 저장되고 이로부터 리트리브(retrieved)될 수 있거나, 또는 대신에 데이터 콘텐츠는 엔트리의 복제품을 저장하는 데이터베이스 노드 중 다른 데이터베이스 노드로부터 리트리브될 수 있다. 예컨대, 복제품을 저장하는 노드는 적어도 하나의 트랜잭션의 ID로부터 결정될 수 있다.
스테이트먼트 30: 스테이트먼트 10 내지 12 또는 27 중 임의의 방법에 있어서, 제1 노드는 계층화된 네트워크 내에서 제1 노드와 코어 노드 중 적어도 하나 사이의 연결을 통해 직접 상기 조사를 수행하도록 구성된다.
대안적으로, 이것은 하나 초과의 홉을 통해 수행될 수 있다.
스테이트먼트 31: 임의의 이전 스테이트먼트의 방법에 있어서, 코어 층은 완전하다.
즉, 코어 계층 내의 모든 각각의 코어 노드는 계층화된 네트워크 내에서 코어 계층 내의 모든 각각의 다른 노드에 연결된다.
스테이트먼트 32: 임의의 이전 스테이트먼트의 방법에 있어서, 계층화된 네트워크는 전체적으로 불완전하다.
즉, 모든 각각의 계층의 모든 각각의 노드는 계층화된 네트워크 내에서 모든 각각의 다른 코어 계층의 모든 각각의 다른 노드에 연결되는 것은 아니다. 이러한 일부 실시예에서, 주어진 계층 내의 모든 각각의 노드는 반드시 동일한 계층의 모든 각각의 다른 노드에 연결되는 것은 아니다.
스테이트먼트 33: 임의의 이전 스테이트먼트의 방법에 있어서, 클라이언트 노드 및/또는 데이터베이스 노드 각각은 인증 기관에 의해 인증된다.
스테이트먼트 34: 컴퓨터 장비는 하나 이상의 메모리 유닛을 포함하는 메모리, 하나 이상의 처리 유닛을 포함하는 처리 장치, 및 하나 이상의 네트워크 인터페이스 유닛을 포함하는 네트워크 인터페이스를 포함하고, 메모리는 처리 장치에서 실행되도록 배열된 코드를 저장하고, 코드는, 처리 장치에서 실행될 때, 네트워크 인터페이스를 통해 업데이트 요청을 수신하는 것을 포함하는, 임의의 이전 스테이트먼트의 방법을 수행함으로써 상기 제1 데이터베이스 노드로서 컴퓨터 장비를 동작시키도록 구성된다.
스테이트먼트 35: 컴퓨터 판독 가능 저장 장치에서 구현되고, 하나 이상의 프로세서에서 실행될 때, 스테이트먼트 1 내지 스테이트먼트 33 중 어느 한 스테이트먼트의 방법을 수행하도록 구성된 컴퓨터 프로그램.
스테이트먼트 36: 계층화된 네트워크에서 구현된 분산형 데이터베이스를 사용하는 방법으로서, 계층화된 네트워크는 하나 이상의 코어 노드를 포함하는 코어 계층, 각각 하나 이상의 중간 계층 노드를 포함하는 하나 이상의 중간 계층, 및 각각 하나 이상의 외부 계층 노드를 포함하는 하나 이상의 외부 계층을 포함하고, 코어 노드 각각은 블록체인 네트워크의 노드이고, 중간 계층 노드 중 적어도 일부는 분산형 데이터베이스의 데이터베이스 노드이고, 외부 계층 노드 중 적어도 일부는 분산형 데이터베이스의 클라이언트 노드이고, 각각의 데이터베이스 노드는 분산형 데이터베이스 중 적어도 일부를 저장하고, 방법은, 데이터베이스 노드 중 제1 데이터베이스 노드에서: 하나 이상의 업데이트 요청을 데이터베이스 노드 중 하나 이상에 전송하는 단계 ― 하나 이상의 업데이트 요청 각각은 분산형 데이터베이스 내의 개개의 타겟 엔트리를 업데이트하라는 요청임 ― ; 및 계층화된 네트워크 내에서 제1 클라이언트 노드와 코어 계층 내의 코어 노드 중 적어도 하나 사이의 연결을 사용하여 직접적으로: I) 블록체인 네트워크의 블록체인에 기록될 적어도 하나의 트랜잭션을 전송하고 ― 적어도 하나의 트랜잭션은 하나 이상의 업데이트 요청의 표시를 포함함 ― , 그리고/또는 II) 하나 이상의 업데이트 요청의 표시를 포함하는 적어도 하나의 트랜잭션이 블록체인에 기록되었거나 블록체인 네트워크의 채굴자의 멤풀 내로 적어도 수락되었다는 것을 체크하는 단계를 포함한다.
스테이트먼트 37: 스테이트먼트 36의 방법에 있어서, 제1 클라이언트 노드는, 통신 프로토콜을 사용하여 상기 적어도 하나의 트랜잭션을 전송하고 그리고/또는 상기 체크를 수행하는 것을 포함하여, 적어도 하나의 코어 노드와 통신하도록 구성되고, 통신 프로토콜에서 메시지는: a) 클라이언트 노드로부터 코어 노드로 전송된 트랜잭션; b) 트랜잭션이 채굴자의 멤풀 내로 수락되었는지 여부에 관한 클라이언트 노드로부터 코어 노드로의 질의, 및 코어 노드로부터의 대응하는 응답; c) 트랜잭션이 블록 내로 채굴되었다는 머클 증명에 대한 클라이언트 노드로부터 코어 노드로의 요청, 및 머클 증명을 포함하는 코어 노드로부터의 응답; 및/또는 d) 블록 헤더의 목록에 대한 클라이언트 노드로부터 코어 노드로의 요청, 및 블록 헤더의 목록을 포함하는 코어 노드로부터의 응답의 형태를 취한다.
실시예에서, 제1 클라이언트 노드는 적어도 하나의 코어 노드와의 연결을 통해 통신할 때 a) 내지 d)만을 사용하도록 구성될 수 있다.
실시예에서, 상기 프로토콜은 SPV 프로토콜일 수 있다.
스테이트먼트 38: 컴퓨터 장비는: 하나 이상의 메모리 유닛을 포함하는 메모리: 하나 이상의 처리 유닛을 포함하는 처리 장치, 및 하나 이상의 네트워크 인터페이스 유닛을 포함하는 네트워크 인터페이스를 포함하고, 메모리는 처리 장치에서 실행되도록 배열된 코드를 저장하고, 코드는, 처리 장치에서 실행될 때, 네트워크 인터페이스를 통해 I 및/또는 II를 수행하는 것을 포함하는, 스테이트먼트 36 또는 37의 방법을 수행함으로써 상기 제1 클라이언트 노드로서 컴퓨터 장비를 동작시키도록 구성된다.
스테이트먼트 39: 컴퓨터 프로그램은 컴퓨터 판독 가능 저장 장치에서 구현되고, 하나 이상의 프로세서에서 실행될 때, 스테이트먼트 36 또는 37의 방법을 수행하도록 구성된다.
개시된 기술들의 다른 변형들 또는 사용 사례들은 본원에서의 개시가 주어지면 당업자에게 명백해질 수 있다. 본 개시의 범위는 설명된 실시예에 의해 제한되는 것이 아니라 첨부된 청구들에 의해서만 제한된다.

Claims (39)

  1. 계층화된 네트워크에서 구현된 분산형 데이터베이스를 동작시키는 방법으로서,
    상기 계층화된 네트워크는 하나 이상의 코어 노드를 포함하는 코어 계층, 각각 하나 이상의 중간 계층 노드를 포함하는 하나 이상의 중간 계층, 및 각각 하나 이상의 외부 계층 노드를 포함하는 하나 이상의 외부 계층을 포함하고, 상기 코어 노드 각각은 블록체인 네트워크의 노드이고, 상기 중간 계층 노드 중 적어도 일부는 상기 분산형 데이터베이스의 데이터베이스 노드이고, 상기 외부 계층 노드 중 적어도 일부는 상기 분산형 데이터베이스의 클라이언트 노드이고, 각각의 데이터베이스 노드는 상기 분산형 데이터베이스 중 적어도 일부를 저장하고,
    상기 방법은, 상기 데이터베이스 노드 중 제1 데이터베이스 노드에서:
    상기 클라이언트 노드 중 하나 이상으로부터 하나 이상의 업데이트 요청을 수신하는 단계 ― 상기 하나 이상의 업데이트 요청 각각은 상기 분산형 데이터베이스 내의 개개의 타겟 엔트리를 업데이트하라는 요청임 ― ; 및
    상기 수신된 업데이트 요청들 각각에 대해, 상기 제1 데이터베이스 노드에 저장된 상기 데이터베이스의 일부에서 상기 개개의 타겟 엔트리가 발견되는지를 결정하고, 그리고 그렇다면, 상기 제1 데이터베이스 노드에 저장된 상기 데이터베이스의 일부 내의 상기 개개의 타겟 엔트리에 대한 상기 업데이트 요청의 업데이트를 수행하고, 그리고 그렇지 않다면, 상기 개개의 타겟 엔트리를 포함하는 상기 데이터베이스의 일부를 저장하는 상기 데이터베이스 노드 중 다른 데이터베이스 노드에 상기 요청을 포워딩하는 단계를 포함하고,
    상기 하나 이상의 업데이트 요청의 표시를 포함하는 적어도 하나의 트랜잭션이 또한 상기 블록체인 네트워크의 블록체인에 기록되는,
    분산형 데이터베이스를 동작시키는 방법.
  2. 제1 항에 있어서,
    각각의 클라이언트 노드는 상기 계층화된 네트워크 내에서 상기 데이터베이스 노드 중 적어도 하나에 연결되고, 상기 제1 데이터베이스 노드는 클라이언트 노드와 데이터베이스 노드 사이의 연결 중 하나를 통해 상기 클라이언트 노드로부터 직접 상기 업데이트 요청 중 적어도 하나를 수신하는,
    분산형 데이터베이스를 동작시키는 방법.
  3. 제1 항 또는 제2 항에 있어서,
    상기 데이터베이스 노드 각각은 상기 계층화된 네트워크 내에서 상기 데이터베이스 노드 중 적어도 하나의 다른 데이터베이스 노드에 연결되고,
    상기 업데이트 요청 중 적어도 하나는, 상기 데이터베이스 노드 사이의 연결 중 적어도 하나를 통해, 상기 제1 데이터베이스 노드 이외에, 상기 데이터베이스 노드 중 적어도 하나의 다른 데이터베이스 노드를 통해 간접적으로 수신되고, 그리고/또는
    상기 다른 데이터베이스 노드 중 하나에 저장된 상기 데이터베이스의 일부에서 상기 업데이트 요청 중 적어도 하나의 업데이트 요청의 상기 개개의 타겟 엔트리가 발견되고, 상기 포워딩하는 단계는 상기 데이터베이스 노드 사이의 상기 연결들 중 적어도 하나를 통해 상기 다른 데이터베이스 노드에 포워딩하는 단계를 포함하는,
    분산형 데이터베이스를 동작시키는 방법.
  4. 제1 항 내지 제3 항 중 어느 한 항에 있어서,
    상기 적어도 하나의 트랜잭션은 상기 클라이언트 노드 중 적어도 하나에 의해 공식화되고, 상기 블록체인으로 채굴되도록 상기 적어도 하나의 클라이언트 노드에 의해 상기 코어 계층에 전송되는,
    분산형 데이터베이스를 동작시키는 방법.
  5. 제1 항 내지 제4 항 중 어느 한 항에 있어서,
    각각의 클라이언트 노드는 상기 계층화된 네트워크 내에서 상기 코어 노드 중 적어도 하나에 연결되어, 상기 클라이언트 노드가 업데이트 요청이 상기 블록체인에 기록되었는지를 체크하는 것을 가능하게 하는,
    분산형 데이터베이스를 동작시키는 방법.
  6. 제5 항에 있어서,
    각각의 클라이언트는 상기 계층화된 네트워크 내에서 상기 코어 노드 중 하나 초과에 연결되는,
    분산형 데이터베이스를 동작시키는 방법.
  7. 제6 항에 있어서,
    각각의 클라이언트는 상기 계층화된 네트워크 내에서 상기 코어 노드 모두는 아니지만 하나 초과에 연결되는,
    분산형 데이터베이스를 동작시키는 방법.
  8. 제5 항 내지 제7 항 중 어느 한 항에 있어서,
    상기 적어도 하나의 트랜잭션은, 클라이언트 노드와 코어 노드 사이의 상기 연결 중 적어도 하나를 통해 상기 클라이언트 노드 중 적어도 하나에 의해 상기 코어 계층에 직접 전송되는,
    분산형 데이터베이스를 동작시키는 방법.
  9. 제1 항 내지 제3 항 중 어느 한 항에 있어서,
    상기 적어도 하나의 트랜잭션은 상기 데이터베이스 노드 중 적어도 하나의 다른 데이터베이스 노드 또는 상기 제1 데이터베이스 노드 이외의 중간 계층 노드에 의해 공식화되고, 그리고 상기 블록체인으로 채굴되도록 상기 적어도 하나의 다른 노드에 의해 상기 코어 계층에 전송되는,
    분산형 데이터베이스를 동작시키는 방법.
  10. 제1 항 내지 제9 항 중 어느 한 항에 있어서,
    상기 적어도 하나의 트랜잭션은 상기 클라이언트 노드 중 적어도 하나 또는 상기 데이터베이스 노드 중 적어도 하나의 다른 데이터베이스 노드 또는 상기 제1 데이터베이스 노드 이외에 다른 중간 계층 노드에 의해 공식화되어 상기 코어 계층에 전송되고; 그리고
    상기 방법은, 상기 제1 데이터베이스 노드에 의해:
    상기 하나 이상의 업데이트 요청의 표시가 상기 블록체인에 기록되었다는 것을 체크하기 위해 상기 블록체인을 조사하고, 그리고/또는 상기 적어도 하나의 트랜잭션이 수락되었다는 것을 체크하기 위해 하나 이상의 채굴자의 멤풀을 조사하는 단계를 더 포함하는,
    분산형 데이터베이스를 동작시키는 방법.
  11. 제10 항에 있어서,
    상기 업데이트를 수행하는 단계는 상기 체크를 조건으로 하는,
    분산형 데이터베이스를 동작시키는 방법.
  12. 제10 항 또는 제11 항에 있어서,
    상기 제1 데이터베이스 노드는, 상기 계층화된 네트워크 내에서 상기 제1 노드와 상기 코어 노드 중 적어도 하나 사이의 연결을 통해 직접 상기 조사를 수행하도록 구성되는,
    분산형 데이터베이스를 동작시키는 방법.
  13. 제1 항 내지 제3 항 중 어느 한 항에 있어서,
    상기 적어도 하나의 트랜잭션은 상기 제1 데이터베이스 노드에 의해 공식화되고, 상기 블록체인으로 채굴되도록 상기 제1 데이터베이스 노드에 의해 상기 코어 계층에 전송되는,
    분산형 데이터베이스를 동작시키는 방법.
  14. 제1 항 내지 제13 항 중 어느 한 항에 있어서,
    상기 데이터베이스 노드 각각은 상기 계층화된 네트워크 내에서 코어 노드 중 적어도 하나에 연결되는,
    분산형 데이터베이스를 동작시키는 방법.
  15. 제14 항에 있어서,
    상기 데이터베이스 노드 각각은 상기 계층화된 네트워크 내에서 상기 코어 노드 모두가 아니지만 적어도 하나에 연결되는,
    분산형 데이터베이스를 동작시키는 방법.
  16. 제14 항 또는 제15 항에 있어서,
    상기 적어도 하나의 트랜잭션은 데이터베이스 노드와 코어 노드 사이의 연결 중 적어도 하나를 통해 직접 상기 데이터베이스 노드 중 적어도 하나에 의해 상기 코어 계층에 전송되는,
    분산형 데이터베이스를 동작시키는 방법.
  17. 제1 항 내지 제16 항 중 어느 한 항에 있어서,
    상기 적어도 하나의 트랜잭션에 포함된 상기 하나 이상의 업데이트 요청의 표시는, 상기 개개의 데이터 엔트리 또는 엔트리들의 콘텐츠에 수행하기 위한 업데이트인 상기 하나 이상의 업데이트의 데이터 콘텐츠를 포함하는,
    분산형 데이터베이스를 동작시키는 방법.
  18. 제1 항 내지 제17 항 중 어느 한 항에 있어서,
    상기 적어도 하나의 트랜잭션에 포함된 상기 하나 이상의 업데이트 요청의 표시는 하나 이상의 해시를 포함하고, 각각의 해시는 상기 업데이트 중 적어도 하나의 업데이트의 데이터 콘텐츠를 포함하는 프리이미지의 해시인,
    분산형 데이터베이스를 동작시키는 방법.
  19. 제1 항 내지 제18 항 중 어느 한 항에 있어서,
    상기 적어도 하나의 트랜잭션에 포함된 상기 하나 이상의 업데이트 요청의 표시는, 상기 개개의 타겟 엔트리가 발견된 상기 데이터베이스의 일부를 저장하는 상기 데이터베이스 노드 또는 노드들의 ID를 포함하는,
    분산형 데이터베이스를 동작시키는 방법.
  20. 제1 항 내지 제19 항 중 어느 한 항에 있어서,
    상기 하나 이상의 업데이트 요청은 복수의 업데이트 요청이고, 상기 업데이트 요청 중 적어도 일부의 상기 개개의 타겟 엔트리는 상기 제1 데이터베이스 노드에 저장된 상기 데이터베이스의 일부에서 발견된 상기 데이터베이스 내의 동일한 엔트리이고, 그리고 상기 업데이트를 수행하는 단계는 지정된 순서에 따라 상기 업데이트를 수행하는 단계를 포함하는,
    분산형 데이터베이스를 동작시키는 방법.
  21. 제20 항에 있어서,
    상기 적어도 하나의 트랜잭션에 포함된 상기 하나 이상의 업데이트 요청의 표시는, 상기 복수의 업데이트 요청의 지정된 순서를 포함하는,
    분산형 데이터베이스를 동작시키는 방법.
  22. 제21 항에 있어서,
    상기 적어도 하나의 트랜잭션은 상기 클라이언트 노드 중 적어도 하나 또는 상기 데이터베이스 노드 중 적어도 하나의 다른 데이터베이스 노드 또는 상기 제1 데이터베이스 노드 이외에 다른 중간 계층 노드부터 발생하고, 그리고
    상기 방법은:
    상기 제1 데이터베이스 노드가 상기 블록체인 또는 상기 블록체인 네트워크의 채굴자의 멤풀로부터 상기 지정된 순서를 판독하는 단계를 포함하고,
    상기 업데이트를 수행하는 단계는, 상기 블록체인 또는 멤풀로부터 결정된 상기 순서에 따라 상기 업데이트를 수행하는 단계를 포함하는,
    분산형 데이터베이스를 동작시키는 방법.
  23. 제20 항 또는 제21 항에 있어서,
    상기 순서는 상기 클라이언트 노드가 정렬 서비스에 제출하는 것, 상기 정렬 서비스로부터 상기 순서의 지정을 다시 수신하는 것, 및 상기 업데이트 요청 중 적어도 하나에 상기 지정된 순서를 포함시키는 것 중 적어도 하나에 의해 결정되는,
    분산형 데이터베이스를 동작시키는 방법.
  24. 제20 항 또는 제21 항에 있어서,
    상기 지정된 순서는 상기 제1 데이터베이스 노드에서 구현된 정렬 서비스에 의해 결정되는,
    분산형 데이터베이스를 동작시키는 방법.
  25. 제1 항 내지 제24 항 중 어느 한 항에 있어서,
    상기 데이터베이스의 하나 이상의 엔트리는 복수의 데이터베이스 노드에 저장된 상기 데이터베이스의 일부에 걸쳐 복제되는,
    분산형 데이터베이스를 동작시키는 방법.
  26. 제25 항에 있어서,
    상기 제1 데이터베이스 노드에 저장된 상기 데이터베이스의 일부 및 상기 데이터베이스 노드들 중 다른 데이터베이스 노드 둘 모두에서 상기 업데이트 요청 중 적어도 하나의 업데이트 요청의 타겟 엔트리가 발견되어, 상기 방법은 상기 제1 데이터베이스 노드에서 상기 업데이트를 수행하는 단계, 및 상기 요청을 상기 다른 데이터베이스 노드에 포워딩하는 단계 둘 모두를 포함하는,
    분산형 데이터베이스를 동작시키는 방법.
  27. 제1 항 내지 제26 항 중 어느 한 항에 있어서,
    상기 제1 데이터베이스 노드 이외에 상기 데이터베이스 노드 중 다른 데이터베이스 노드에 저장된 상기 데이터베이스의 일부에서 상기 업데이트 요청 중 적어도 하나의 업데이트 요청의 타겟 엔트리가 발견되고, 그리고
    상기 포워딩하는 단계는:
    상기 다른 데이터베이스 노드가 상기 계층화된 네트워크를 통해 현재 도달 가능한지 여부를 결정하고, 그리고 상기 결정에 따라 상기 다른 데이터베이스 노드가 도달 가능한 것으로 결정된 것을 조건으로 상기 업데이트 요청을 상기 다른 데이터베이스 노드에 포워딩하는 단계를 포함하는,
    분산형 데이터베이스를 동작시키는 방법.
  28. 제27 항에 있어서,
    상기 다른 데이터베이스 노드는 상기 계층화된 네트워크로부터 일시적으로 연결 해제되고, 상기 적어도 하나의 트랜잭션의 상기 표시는, 상기 다른 데이터베이스 노드가 상기 계층화된 네트워크에 재연결될 때, 상기 다른 데이터베이스 노드가 적어도 하나의 업데이트 요청의 업데이트를 수행하는 것을 가능하게 하는,
    분산형 데이터베이스를 동작시키는 방법.
  29. 제1 항 내지 제28 항 중 어느 한 항에 있어서,
    일정 기간 동안, 상기 제1 데이터베이스 노드는 상기 계층화된 네트워크로부터 일시적으로 연결 해제되고, 그리고
    상기 방법은, 상기 제1 데이터베이스 노드가 상기 계층화된 네트워크에 재연결될 때:
    하나 이상의 다른 데이터베이스 노드에 의해 수신된 임의의 업데이트 요청을 기록하고, 상기 제1 데이터베이스 노드가 연결 해제된 동안, 상기 제1 데이터베이스 노드에 의해 저장된 상기 데이터베이스의 일부 내의 개개의 타겟 엔트리에 관련된 하나 이상의 추가 트랜잭션을 체크하기 위해, 상기 제1 노드가 상기 블록체인, 또는 상기 블록체인 네트워크의 채굴자의 멤풀을 조사하는 단계, 및 임의의 이러한 업데이트를 수행하는 단계를 더 포함하는,
    분산형 데이터베이스를 동작시키는 방법.
  30. 제10 항 내지 제12 항 또는 제29 항 중 어느 한 항에 있어서,
    상기 제1 노드는 상기 계층화된 네트워크 내에서 상기 제1 노드와 상기 코어 노드 중 적어도 하나 사이의 연결을 통해 직접 상기 조사를 수행하도록 구성되는,
    분산형 데이터베이스를 동작시키는 방법.
  31. 제1 항 내지 제30 항 중 어느 한 항에 있어서,
    상기 코어 층은 완전한,
    분산형 데이터베이스를 동작시키는 방법.
  32. 제1 항 내지 제31 항 중 어느 한 항에 있어서,
    상기 계층화된 네트워크는 전체적으로 불완전한,
    분산형 데이터베이스를 동작시키는 방법.
  33. 제1 항 내지 제32 항 중 어느 한 항에 있어서,
    상기 클라이언트 노드 및/또는 데이터베이스 노드 각각은 인증 기관에 의해 인증되는,
    분산형 데이터베이스를 동작시키는 방법.
  34. 컴퓨터 장비로서,
    하나 이상의 메모리 유닛을 포함하는 메모리,
    하나 이상의 처리 유닛을 포함하는 처리 장치, 및
    하나 이상의 네트워크 인터페이스 유닛을 포함하는 네트워크 인터페이스를 포함하고,
    상기 메모리는 상기 처리 장치에서 실행되도록 배열된 코드를 저장하고, 상기 코드는, 상기 처리 장치에서 실행될 때, 상기 네트워크 인터페이스를 통해 업데이트 요청을 수신하는 것을 포함하는, 제1 항 내지 제33 항 중 어느 한 항의 방법을 수행함으로써 제1 데이터베이스 노드로서 상기 컴퓨터 장비를 동작시키도록 구성되는,
    컴퓨터 장비.
  35. 컴퓨터 판독 가능 저장 장치에서 구현되고, 하나 이상의 프로세서에서 실행될 때, 제1 항 내지 제33 항 중 어느 한 항의 방법을 수행하도록 구성된 컴퓨터 프로그램.
  36. 계층화된 네트워크에서 구현된 분산형 데이터베이스를 사용하는 방법으로서, 상기 계층화된 네트워크는 하나 이상의 코어 노드를 포함하는 코어 계층, 각각 하나 이상의 중간 계층 노드를 포함하는 하나 이상의 중간 계층, 및 각각 하나 이상의 외부 계층 노드를 포함하는 하나 이상의 외부 계층을 포함하고, 상기 코어 노드 각각은 블록체인 네트워크의 노드이고, 상기 중간 계층 노드 중 적어도 일부는 상기 분산형 데이터베이스의 데이터베이스 노드이고, 상기 외부 계층 노드 중 적어도 일부는 상기 분산형 데이터베이스의 클라이언트 노드이고, 각각의 데이터베이스 노드는 상기 분산형 데이터베이스 중 적어도 일부를 저장하고,
    상기 방법은, 상기 클라이언트 노드 중 제1 클라이언트 노드에서:
    하나 이상의 업데이트 요청을 상기 데이터베이스 노드 중 하나 이상에 전송하는 단계 ― 상기 하나 이상의 업데이트 요청 각각은 상기 분산형 데이터베이스 내의 개개의 타겟 엔트리를 업데이트하라는 요청임 ― ; 및
    상기 계층화된 네트워크 내에서 상기 제1 클라이언트 노드와 상기 코어 계층 내의 상기 코어 노드 중 적어도 하나 사이의 연결을 사용하여 직접적으로:
    I) 상기 블록체인 네트워크의 블록체인에 기록될 적어도 하나의 트랜잭션을 전송하고 ― 상기 적어도 하나의 트랜잭션은 상기 하나 이상의 업데이트 요청의 표시를 포함함 ― , 그리고/또는
    II) 상기 하나 이상의 업데이트 요청의 표시를 포함하는 적어도 하나의 트랜잭션이 상기 블록체인에 기록되었거나 상기 블록체인 네트워크의 채굴자의 멤풀 내로 적어도 수락되었다는 것을 체크하는 단계를 포함하는,
    분산형 데이터베이스를 사용하는 방법.
  37. 제36 항에 있어서,
    상기 제1 클라이언트 노드는, 통신 프로토콜을 사용하여 상기 적어도 하나의 트랜잭션을 전송하고 그리고/또는 상기 체크를 수행하는 것을 포함하여, 적어도 하나의 코어 노드와 통신하도록 구성되고,
    상기 통신 프로토콜에서 메시지는:
    a) 클라이언트 노드로부터 코어 노드로 전송된 트랜잭션;
    b) 트랜잭션이 채굴자의 멤풀 내로 수락되었는지 여부에 관한 클라이언트 노드로부터 코어 노드로의 질의, 및 상기 코어 노드로부터의 대응하는 응답;
    c) 트랜잭션이 블록 내로 채굴되었다는 머클 증명에 대한 클라이언트 노드로부터 코어 노드로의 요청, 및 상기 머클 증명을 포함하는 상기 코어 노드로부터의 응답; 및/또는
    d) 블록 헤더의 목록에 대한 클라이언트 노드로부터 코어 노드로의 요청, 및 상기 블록 헤더의 목록을 포함하는 상기 코어 노드로부터의 응답의 형태를 취하는,
    분산형 데이터베이스를 사용하는 방법.
  38. 컴퓨터 장비로서,
    하나 이상의 메모리 유닛을 포함하는 메모리,
    하나 이상의 처리 유닛을 포함하는 처리 장치, 및
    하나 이상의 네트워크 인터페이스 유닛을 포함하는 네트워크 인터페이스를 포함하고,
    상기 메모리는 상기 처리 장치에서 실행되도록 배열된 코드를 저장하고, 상기 코드는, 상기 처리 장치에서 실행될 때, 상기 네트워크 인터페이스를 통해 I) 및 II)를 수행하는 것을 포함하는, 제36 항 또는 제37 항의 방법을 수행함으로써 상기 제1 클라이언트 노드로서 상기 컴퓨터 장비를 동작시키도록 구성되는,
    컴퓨터 장비.
  39. 컴퓨터 판독 가능 저장소 상에서 구현되고, 하나 이상의 프로세서에서 실행될 때, 제36 항 또는 제37 항의 방법을 수행하도록 구성된 컴퓨터 프로그램.
KR1020227031122A 2020-02-19 2021-01-19 분산형 데이터베이스 KR20220140775A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2002303.2 2020-02-19
GB2002303.2A GB2592222A (en) 2020-02-19 2020-02-19 Distributed database
PCT/IB2021/050365 WO2021165756A1 (en) 2020-02-19 2021-01-19 Distributed database

Publications (1)

Publication Number Publication Date
KR20220140775A true KR20220140775A (ko) 2022-10-18

Family

ID=69956628

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227031122A KR20220140775A (ko) 2020-02-19 2021-01-19 분산형 데이터베이스

Country Status (7)

Country Link
US (1) US20230054245A1 (ko)
EP (1) EP4097917A1 (ko)
JP (1) JP2023515369A (ko)
KR (1) KR20220140775A (ko)
CN (1) CN115136566A (ko)
GB (1) GB2592222A (ko)
WO (1) WO2021165756A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11669518B1 (en) * 2021-12-14 2023-06-06 Huawei Technologies Co., Ltd. Method and system for processing database transactions in a distributed online transaction processing (OLTP) database
US20220109581A1 (en) * 2021-12-15 2022-04-07 Intel Corporation Distributed attestation in heterogenous computing clusters
CN118035345A (zh) * 2022-11-07 2024-05-14 腾讯科技(深圳)有限公司 一种基于区块链的数据处理方法、装置、设备及介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109003078B (zh) * 2018-06-27 2021-08-24 创新先进技术有限公司 基于区块链的智能合约调用方法及装置、电子设备

Also Published As

Publication number Publication date
CN115136566A (zh) 2022-09-30
EP4097917A1 (en) 2022-12-07
US20230054245A1 (en) 2023-02-23
GB2592222A (en) 2021-08-25
GB202002303D0 (en) 2020-04-01
WO2021165756A1 (en) 2021-08-26
JP2023515369A (ja) 2023-04-13

Similar Documents

Publication Publication Date Title
JP7408619B2 (ja) ブロックチェーンネットワークにおいて大規模分散メモリプールを管理するためのコンピュータ実装されたシステム及び方法
KR102443888B1 (ko) 익명 엔트리들을 포함하는 분산형 데이터베이스를 위한 방법 및 장치
US20220393891A1 (en) Communication protocol using blockchain transactions
KR20220140775A (ko) 분산형 데이터베이스
US20230066711A1 (en) Attestation service for use with a blockchain network
CN115606150A (zh) 多层通信网络
TW202231018A (zh) 識別阻斷服務攻擊之技術
US20230072531A1 (en) Layered network
TW202220410A (zh) 默克爾證明實體
US20230076195A1 (en) Adapting connections of a layered network
TW202220411A (zh) 默克爾證明實體
CN115699676A (zh) 自定义事务脚本
US20240106670A1 (en) Headers client for determining the best chain
TW202304171A (zh) 用於以區塊鏈實施之資料應用程式中簽章驗證的改良方法與系統
WO2023227467A1 (en) Blockchain-based message journaling
WO2023057149A1 (en) Redacting content from blockchain transactions
WO2024033015A1 (en) Attesting to knowledge of blockchain transaction outputs
WO2024041862A1 (en) Blockchain transaction
WO2023156104A1 (en) Attesting to membership of a set
WO2024041866A1 (en) Blockchain transaction
CN117795516A (zh) 一种计算机实现的方法和系统
CN114391241A (zh) 具有可调整法定数量的区块链分片
CN117693926A (zh) 区块链区块和存在证明
Valerio Anonymity and trust in large-scale distributed storage systems