KR102432731B1 - 네트워크 내의 분산 데이터베이스를 위한 방법 및 장치 - Google Patents

네트워크 내의 분산 데이터베이스를 위한 방법 및 장치 Download PDF

Info

Publication number
KR102432731B1
KR102432731B1 KR1020197038923A KR20197038923A KR102432731B1 KR 102432731 B1 KR102432731 B1 KR 102432731B1 KR 1020197038923 A KR1020197038923 A KR 1020197038923A KR 20197038923 A KR20197038923 A KR 20197038923A KR 102432731 B1 KR102432731 B1 KR 102432731B1
Authority
KR
South Korea
Prior art keywords
events
event
value
delete delete
stake
Prior art date
Application number
KR1020197038923A
Other languages
English (en)
Other versions
KR20200004444A (ko
Inventor
리먼 씨. 3세 베어드
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
Priority claimed from US14/988,873 external-priority patent/US9390154B1/en
Priority claimed from US15/153,011 external-priority patent/US9529923B1/en
Application filed by 스월즈, 인크. filed Critical 스월즈, 인크.
Priority claimed from PCT/US2016/049067 external-priority patent/WO2017040313A1/en
Publication of KR20200004444A publication Critical patent/KR20200004444A/ko
Application granted granted Critical
Publication of KR102432731B1 publication Critical patent/KR102432731B1/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/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • 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
    • 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/25Integrating or interfacing systems involving database management systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/04Payment circuits
    • G06Q20/06Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme
    • G06Q20/065Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme using e-cash

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Health & Medical Sciences (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer And Data Communications (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Telephonic Communication Services (AREA)

Abstract

일부 실시예에서, 디바이스는 분산 데이터베이스를 구현하는 컴퓨팅 디바이스들의 세트 내에 포함되도록 구성된 제1 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스를 포함한다. 또한, 장치는 제1 이벤트들의 세트에 링크된 제1 이벤트를 정의하도록 구성된 프로세서를 포함한다. 프로세서는 컴퓨팅 디바이스들의 세트로부터의 제2 컴퓨팅 디바이스로부터 (1) 제2 컴퓨팅 디바이스에 의해 정의되고 (2) 제2 이벤트들의 세트에 링크된 제2 이벤트를 나타내는 신호를 수신하도록 구성된다. 프로세서는 적어도 하나의 프로토콜 결과에 기초하여 제3 이벤트들의 세트와 연관된 순서를 식별하도록 구성된다. 프로세서는 제3 이벤트들의 세트와 연관된 순서를 분산 데이터베이스의 인스턴스에 저장하도록 구성된다.

Description

네트워크 내의 분산 데이터베이스를 위한 방법 및 장치{METHODS AND APPARATUS FOR A DISTRIBUTED DATABASE WITHIN A NETWORK}
관련 출원에 대한 상호 참조
본 출원은 2015년 8월 28일자로 출원된 발명의 명칭이 "Methods and Apparatus for a Distributed Database within a Network"인 미국 가특허 출원 제62/211,411호에 대한 우선권과 이익을 주장하는 2016년 1월 6일자로 출원된 발명의 명칭이 "Methods and Apparatus for a Distributed Database within a Network"인 미국 특허 출원 제14/988,873호의 연속 출원인 2016년 7월 8일자로 출원된 발명의 명칭이 "Methods and Apparatus for a Distributed Database within a Network"인 미국 특허 출원 제15/205,688호의 부분 연속 출원이며, 이들 출원 각각은 본 명세서에 그 전문이 참조로 통합되어 있다.
본 출원은 또한 2015년 8월 28일자로 출원된 발명의 명칭이 "Methods and Apparatus for a Distributed Database within a Network"인 미국 가특허 출원 제62/211,411호에 대한 우선권과 이익을 주장하는 2016년 1월 6일자로 출원된 발명의 명칭이 "Methods and Apparatus for a Distributed Database within a Network"인 미국 특허 출원 제14/988,873호의 부분 연속 출원인 2016년 5월 12일자로 출원된 발명의 명칭이 "Methods and Apparatus for a Distributed Database within a Network"인 미국 특허 출원 제15/153,011호의 부분 연속 출원이며, 이들 출원 각각은 그 전문이 본 명세서에 참조로 통합되어 있다.
이 출원은 또한 2015년 8월 28일 출원된 발명의 명칭이 "Methods and Apparatus for a Distributed Database within a Network"인 미국 가출원 제62/211,411호의 우선권 및 그 이익을 주장하며, 이 출원은 그 전문이 본 명세서에 참조로 통합되어 있다.
이 출원은 또한 2016년 6월 2일자로 출원된 발명의 명칭이 "Methods and Apparatus for a Distributed Database with Consensus Determined Based on Weighted Stakes"인 미국 가출원 제62/344,682호의 우선권 및 그 이익을 주장하며, 이 출원은 그 전문이 본 명세서에 참조로 통합되어 있다.
본 명세서에 설명된 실시예들은 일반적으로 데이터베이스 시스템에 관한 것으로서, 보다 상세하게는 네트워크 내의 다수의 디바이스들에 걸쳐 데이터베이스 시스템을 구현하기 위한 방법 및 장치에 관한 것이다.
일부 알려진 분산 데이터베이스 시스템은 분산 데이터베이스 시스템 내에서(예를 들어, 트랜잭션이 발생하는 순서와 관련하여) 값들에 대한 컨센서스(consensus)를 달성하려고 시도한다. 예를 들어, 온라인 멀티 플레이어 게임에는 사용자가 게임을 플레이하기 위해 액세스할 수 있는 많은 컴퓨터 서버들이 있을 수 있다. 두 명의 사용자가 동시에 게임 내의 특정 아이템을 집는 경우, 이때, 분산 데이터베이스 시스템 내의 서버들이 두 명의 사용자 중 어느 쪽이 아이템을 먼저 집었는지에 대해 최종적으로 합의에 도달하는 것이 중요하다.
그러한 분산 컨센서스는 Paxos 알고리즘 또는 그 변형들과 같은 방법들 및/또는 프로세스들에 의해 처리될 수 있다. 이러한 방법들 및/또는 프로세스들에서 데이터베이스 시스템의 한 서버가 "리더(leader)"로 설정되고 리더가 이벤트의 순서를 결정한다. 이벤트들(예를 들어, 멀티 플레이어 게임들 내의)은 리더에게 포워딩되고, 리더는 이벤트들의 순위를 선택하며, 리더는 데이터베이스 시스템의 다른 서버들로 이 순위를 방송한다.
그러나, 이러한 공지된 접근법은 데이터베이스 시스템의 사용자들(예를 들어, 게임 플레이어들)에 의해 신뢰되는 당사자(예를 들어, 중앙 관리 서버)에 의해 운영되는 서버를 사용한다. 따라서, 데이터베이스 시스템을 동작시키기 위해 리더 또는 신뢰적 제3자를 필요로 하지 않는 분산 데이터베이스 시스템을 위한 방법 및 장치가 필요하다.
다른 분산 데이터베이스는 리더가 없도록 설계되었지만 비효율적이다. 예를 들어, 한 가지 이러한 분산 데이터베이스는 컨센서스를 달성할 수 있는 "블록 체인" 데이터 구조를 기반으로 한다. 그러나, 그러한 시스템은 함께 모인 모든 참여자들에 대하여 작은 수의 총 초당 트랜잭션(예를 들어, 초당 7 트랜잭션)으로 제한될 수 있으며, 이는 대규모 게임이나 많은 전통적인 데이터베이스 용례들에는 불충분하다. 따라서, 리더 없이 컨센서스를 달성하고 효율적인 분산 데이터베이스 시스템에 대한 필요성이 존재한다.
일부 실시예에서, 디바이스는 분산 데이터베이스를 구현하는 컴퓨팅 디바이스들의 세트 내에 포함되도록 구성된 제1 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스를 포함한다. 또한, 장치는 제1 이벤트들의 세트에 링크된 제1 이벤트를 정의하도록 구성된 프로세서를 포함한다. 프로세서는 컴퓨팅 디바이스들의 세트로부터의 제2 컴퓨팅 디바이스로부터 (1) 제2 컴퓨팅 디바이스에 의해 정의되고 (2) 제2 이벤트들의 세트에 링크된 제2 이벤트를 나타내는 신호를 수신하도록 구성된다. 프로세서는 적어도 하나의 프로토콜 결과에 기초하여 제3 이벤트들의 세트와 연관된 순서를 식별하도록 구성된다. 프로세서는 제3 이벤트들의 세트와 연관된 순서를 분산 데이터베이스의 인스턴스에 저장하도록 구성된다.
도 1은 일 실시예에 따른 분산 데이터베이스 시스템을 도시하는 상위 레벨 블록도이다.
도 2는 일 실시예에 따른 분산 데이터베이스 시스템의 컴퓨팅 디바이스를 나타내는 블록도이다.
도 3 내지 도 6은 일 실시예에 따른 hashDAG의 예를 도시한다.
도 7은 일 실시예에 따른, 제1 컴퓨팅 디바이스와 제2 컴퓨팅 디바이스 사이의 통신 흐름을 나타내는 흐름도이다.
도 8은 일 실시예에 따른, 제1 컴퓨팅 디바이스와 제2 컴퓨팅 디바이스 사이의 통신 흐름을 나타내는 흐름도이다.
도 9a 내지 도 9c는 값들의 벡터들의 예를 도시하는 벡터도이다.
도 10a 내지 도 10d는 새로운 값을 포함하도록 업데이트되는 값들의 벡터의 예를 도시하는 벡터도이다.
도 11은 일 실시예에 따른 분산 데이터베이스 시스템의 동작을 도시하는 흐름도이다.
도 12는 일 실시예에 따른 분산 데이터베이스 시스템의 동작을 도시하는 흐름도이다.
도 13은 일 실시예에 따른 분산 데이터베이스 시스템의 동작을 도시하는 흐름도이다.
도 14는 일 실시예에 따른 hashDAG의 예이다.
도 15는 일 실시예에 따른 hashDAG의 예이다.
도 16a 및 도 16b는 일 실시예에 따른, hashDAG와 함께 사용하기 위한 예시적 컨센서스 방법을 도시한다.
도 17a 및 도 17b는 다른 실시예에 따른, hashDAG와 함께 사용하기 위한 예시적 컨센서스 방법의 예를 도시한다.
일부 실시예에서, 장치는 컴퓨팅 디바이스들의 세트에 동작 가능하게 결합된 네트워크를 통해 분산 데이터베이스를 구현하는 컴퓨팅 디바이스들의 세트 내에 포함되도록 구성된 제1 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스를 포함한다. 장치는 또한 분산 데이터베이스의 인스턴스를 저장하는 메모리에 동작 가능하게 결합된 프로세서를 포함한다. 프로세서는 제1 시간에 제1 이벤트들의 세트에 링크된 제1 이벤트를 정의하도록 구성된다. 프로세서는 제1 시간 이후 제2 시간에, 그리고, 컴퓨팅 디바이스들의 세트로부터의 제2 컴퓨팅 디바이스로부터 (1) 제2 컴퓨팅 디바이스에 의해 정의되고, (2) 제2 이벤트들의 세트에 링크된 제2 이벤트를 나타내는 신호를 수신하도록 구성된다. 프로세서는 적어도 하나의 프로토콜 결과에 기초하여 제3 이벤트들의 세트와 연관된 순서를 식별하도록 구성된다. 제3 이벤트들의 세트로부터의 각 이벤트는 제1 이벤트들의 세트 또는 제2 이벤트들의 세트 중 적어도 하나로부터 유래된다. 프로세서는 제3 이벤트들의 세트와 연관된 순서를 분산 데이터베이스의 인스턴스에 저장하도록 구성된다.
일부 경우에, 제3 이벤트들의 세트로부터의 각 이벤트는 일련의 속성(예를 들어, 시퀀스 번호, 세대 번호, 라운드 번호, 수신 번호 및/또는 타임스탬프 등)과 관련된다. 프로토콜의 결과는 제3 이벤트들의 세트로부터의 각 이벤트에 대한 속성들의 세트의 각 속성에 대한 값을 포함할 수 있다. 속성들의 세트로부터의 제1 속성에 대한 값은 제1 수치 값을 포함할 수 있으며 속성들의 세트로부터의 제2 속성에 대한 값은 제1 수치 값과 연관된 이진 값을 포함할 수 있다. 제3 이벤트들의 세트로부터의 이벤트에 대한 제2 속성에 대한 이진 값(예를 들어, 라운드 증분 값)은 해당 이벤트와 해당 이벤트에 링크된 제4 이벤트들의 세트 사이의 관계가 기준(예를 들어, 해당 이벤트에 의해 강력하게 식별되는 이벤트의 수)을 충족하는지 여부에 기초할 수 있다. 제4 이벤트들의 세트로부터의 각 이벤트는 (1) 제3 이벤트들의 세트로부터의 이벤트의 조상이고 (2) 제4 이벤트들의 세트로부터의 나머지 이벤트(예를 들어, 공통 라운드 번호, 라운드 R 제1 이벤트임의 표시 등)로서의 제1 공통 속성과 연관된다. 제1 공통 속성은 컴퓨팅 디바이스들의 세트로부터의 각 컴퓨팅 디바이스에 의해 정의된 이벤트가 제1 특정 값(예를 들어, 라운드 R 제1 이벤트임의 표시 등)과 연관되는 제1 인스턴스를 나타낼 수 있다.
속성들의 세트로부터의 제3 속성(예를 들어, 수신된 라운드 번호)에 대한 값은 이벤트와 이벤트에 링크된 제5 이벤트들의 세트 사이의 관계에 기초한 제2 수치 값을 포함할 수 있다. 제5 이벤트들의 세트로부터의 각 이벤트는 이벤트의 후손이며, 제5 이벤트들의 세트로부터의 나머지 이벤트로서의 제2 공통 속성(예를 들어, 유명(famous))과 연관된다. 제2 공통 속성은 (1) 컴퓨팅 디바이스들의 세트로부터의 각 컴퓨팅 디바이스에 의해 정의된 제2 이벤트가 제1 특정 값과는 상이한 제2 특정 값과 연관되는 제1 인스턴스를 나타내는 제3 공통 속성(예를 들어, 라운드 R 제1 이벤트 또는 목격자) 및 (2) 표시들의 세트에 기초한 결과와 연관될 수 있다. 표시들의 세트로부터의 각 표시는 제6 이벤트들의 세트로부터의 이벤트와 연관될 수 있다. 제6 이벤트들의 세트로부터의 각 이벤트는 컴퓨팅 디바이스들의 세트로부터의 각 컴퓨팅 디바이스에 의해 정의된 제3 이벤트가 제1 특정 값 및 제2 특정 값과는 상이한 제3 특정 값과 연관되는 제1 인스턴스를 나타내는 제4 공통 속성과 연관될 수 있다. 일부 경우에, 제1 특정 값은 제1 정수(예를 들어, 제1 라운드 번호 R)이고, 제2 특정 값은 제1 정수보다 큰 제2 정수(예를 들어, 제2 라운드 번호, R + n)이고, 제3 특정 값은 제2 정수보다 큰 제3 정수(예를 들어, 제3 라운드 번호, R + n + m)이다.
일부 실시예에서, 장치는 메모리 및 프로세서를 포함한다. 메모리는 컴퓨팅 디바이스들의 세트에 동작 가능하게 결합된 네트워크를 통해 분산 데이터베이스를 구현하는 컴퓨팅 디바이스들의 세트 내에 포함되도록 구성된 제1 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스를 포함한다. 프로세서는 분산 데이터베이스의 인스턴스를 저장하는 메모리에 동작 가능하게 결합되며, 이벤트들의 세트에 링크된 이벤트를 나타내는 신호를 수신하도록 구성된다. 프로세서는 적어도 프로토콜의 결과에 기초하여 이벤트들의 세트와 관련된 순서를 식별하도록 구성된다. 프로세서는 이벤트들의 세트와 연관된 순서를 분산 데이터베이스의 인스턴스에 저장하도록 구성된다.
일부 실시예들에서, 비-일시적 프로세서-판독 가능 매체는 프로세서에 의해 실행될 명령어들을 나타내는 코드를 저장하여 이벤트들의 세트에 링크된 이벤트를 나타내는 신호를 수신하고 이벤트들의 세트로부터의 각 이벤트와 연관된 라운드에 기초하여 이벤트들의 세트와 연관된 순서 및 각 이벤트와 연관된 라운드의 증분 시기의 표시를 식별한다. 코드는 프로세서로 하여금 컴퓨팅 디바이스들의 세트에 동작 가능하게 결합된 네트워크를 통해 분산 데이터베이스를 구현하는 컴퓨팅 디바이스들의 세트 내에 포함되도록 구성된 제1 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스에 이벤트들의 세트에 연관된 순서를 저장하게 하는 코드를 추가로 포함한다. 분산 데이터베이스의 인스턴스는 프로세서에 동작 가능하게 결합된다.
일부 실시예에서, 제1 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스는 컴퓨팅 디바이스들의 세트에 동작 가능하게 결합된 네트워크를 통해 분산 데이터베이스를 구현하는 컴퓨팅 디바이스들의 세트 내에 포함되도록 구성될 수 있다. 제1 컴퓨팅 디바이스는 분산 데이터베이스의 인스턴스에 다수의 트랜잭션을 저장한다. 데이터베이스 수렴 모듈은 제1 컴퓨팅 디바이스의 메모리 또는 프로세서에서 구현될 수 있다. 데이터베이스 수렴 모듈은 분산 데이터베이스의 인스턴스와 동작 가능하게 결합될 수 있다. 데이터베이스 수렴 모듈은 제1 시간에 제1 이벤트들의 세트에 링크된 제1 이벤트를 정의하도록 구성될 수 있다. 제1 이벤트들의 세트로부터의 각 이벤트는 바이트 시퀀스이며 (1) 다수의 트랜잭션들의 세트로부터의 트랜잭션들의 세트 및 (b) 트랜잭션들의 세트와 연관된 순서와 연관된다. 트랜잭션들의 세트로부터의 각 트랜잭션은 다수의 트랜잭션으로부터 유래된다. 데이터베이스 수렴 모듈은 제1 시간 이후 제2 시간에 그리고 컴퓨팅 디바이스들의 세트로부터의 제2 컴퓨팅 디바이스로부터 (1) 제2 컴퓨팅 디바이스에 의해 정의되고 (2) 제2 이벤트들의 세트에 링크된 제2 이벤트를 수신하도록 구성될 수 있다. 데이터베이스 수렴 모듈은 제1 이벤트와 제2 이벤트에 링크된 제3 이벤트를 정의하도록 구성될 수 있다. 데이터베이스 수렴 모듈은 적어도 제1 이벤트들의 세트 및 제2 이벤트들의 세트에 기초하여 제3 이벤트들의 세트와 연관된 순서를 식별하도록 구성될 수 있다. 제3 이벤트들의 세트로부터의 각 이벤트는 제1 이벤트들의 세트 또는 제2 이벤트들의 세트 중 적어도 하나로부터 유래된다. 데이터베이스 수렴 모듈은 적어도 (1) 제3 이벤트들의 세트와 연관된 순서 및 (2) 다수의 트랜잭션들의 세트로부터의 각 트랜잭션들의 세트와 연관된 순서에 기초하여 다수의 트랜잭션과 연관된 순서를 식별하도록 구성될 수 있다. 데이터베이스 수렴 모듈은 분산 데이터베이스의 인스턴스에 제1 컴퓨팅 디바이스에 저장된 다수의 트랜잭션과 연관된 순서를 저장하도록 구성할 수 있다.
일부 실시예에서, 제1 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스는 컴퓨팅 디바이스들의 세트에 동작 가능하게 결합된 네트워크를 통해 분산 데이터베이스를 구현하는 컴퓨팅 디바이스들의 세트 내에 포함되도록 구성될 수 있다. 데이터베이스 수렴 모듈은 제1 컴퓨팅 디바이스의 메모리 또는 프로세서에서 구현될 수 있다. 데이터베이스 수렴 모듈은 제1 시간에 제1 이벤트들의 세트에 링크된 제1 이벤트를 정의하도록 구성될 수 있다. 제1 이벤트들의 세트로부터의 각 이벤트는 바이트 시퀀스이다. 데이터베이스 수렴 모듈은 제1 시간 이후 제2 시간에 그리고 컴퓨팅 디바이스들의 세트로부터의 제2 컴퓨팅 디바이스로부터 (1) 제2 컴퓨팅 디바이스에 의해 정의되고 (2) 제2 이벤트들의 세트에 링크된 제2 이벤트를 수신하도록 구성될 수 있다. 제2 이벤트들의 세트로부터의 각 이벤트는 바이트 시퀀스이다. 데이터베이스 수렴 모듈은 제1 이벤트와 제2 이벤트에 링크된 제3 이벤트를 정의하도록 구성될 수 있다. 데이터베이스 수렴 모듈은 적어도 제1 이벤트들의 세트 및 제2 이벤트들의 세트에 기초하여 제3 이벤트들의 세트와 연관된 순서를 식별하도록 구성될 수 있다. 제3 이벤트들의 세트로부터의 각 이벤트는 제1 이벤트들의 세트 또는 제2 이벤트들의 세트 중 적어도 하나로부터 유래된다. 데이터베이스 수렴 모듈은 분산 데이터베이스의 인스턴스에 제3 이벤트들의 세트와 연관된 순서를 저장하도록 구성할 수 있다.
일부 실시예에서, 제1 트랜잭션과 연관된 데이터는 컴퓨팅 디바이스들의 세트에 동작 가능하게 결합된 네트워크를 통해 분산 데이터베이스를 구현하는 컴퓨팅 디바이스들의 세트로부터의 제1 컴퓨팅 디바이스에서 수신될 수 있다. 각 컴퓨팅 디바이스들의 세트로부터의 각 컴퓨팅 디바이스는 분산 데이터베이스의 개별 인스턴스를 갖는다. 제1 트랜잭션과 연관된 제1 트랜잭션 순서 값이 제1 시간에 정의될 수 있다. 제2 트랜잭션과 연관된 데이터는 컴퓨팅 디바이스들의 세트로부터의 제2 컴퓨팅 디바이스로부터 수신될 수 있다. 트랜잭션들의 세트는 제1 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스에 저장될 수 있다. 트랜잭션들의 세트는 적어도 제1 트랜잭션 및 제2 트랜잭션을 포함할 수 있다. 적어도 제1 트랜잭션 순서 값 및 제2 트랜잭션 순서 값을 포함하는 트랜잭션 순서 값들의 세트는 제1 시간 이후 제2 시간에 선택될 수 있다. 제2 트랜잭션 순서 값은 제2 트랜잭션과 연관될 수 있다. 데이터베이스 상태 변수는 적어도 트랜잭션들의 세트와 트랜잭션 순서 값들의 세트를 기반으로 정의될 수 있다.
일부 실시예에서, 방법은 컴퓨팅 디바이스들의 세트에 동작 가능하게 결합된 네트워크를 통해 분산 데이터베이스를 구현하는 컴퓨팅 디바이스들의 세트로부터의 제1 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스로부터 제1 이벤트를 수신하는 단계를 포함한다. 방법은 제1 이벤트 및 제2 이벤트에 기초하여 제3 이벤트를 정의하는 단계를 더 포함한다. 제3 이벤트는 이벤트들의 세트에 링크된다. 순서 값은 지분 값 기준을 충족시키는 이벤트들의 세트와 연관된 종합 지분 값에 적어도 부분적으로 기초하여 제4 이벤트에 대해 정의될 수 있다. 순서 값은 컴퓨팅 디바이스들의 세트로부터의 제2 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스에 저장할 수 있다. 일부 실시예들에서, 본 방법은 한 세트의 지분 값들의 합에 기초하여 종합 지분 값을 계산하는 단계를 더 포함한다. 지분 값들의 세트로부터의 각 지분 값은 이벤트들의 세트로부터의 이벤트를 정의한 분산 데이터베이스의 인스턴스와 연관된다.
일부 실시예에서, 방법은 컴퓨팅 디바이스들의 세트에 동작 가능하게 결합된 네트워크를 통해 분산 데이터베이스를 구현하는 컴퓨팅 디바이스들의 세트로부터의 제1 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스로부터 제1 이벤트를 수신하는 단계를 포함한다. 이 방법은 또한 제1 이벤트 및 제2 이벤트에 기초하여 제3 이벤트를 정의하고 제3 이벤트에 적어도 부분적으로 기초하여 제1 이벤트들의 세트를 결정하는 단계를 더 포함한다. 제1 이벤트들의 세트로부터의 각 이벤트는 a) 제2 이벤트들의 세트에 의해 식별되고 b) 제1 라운드 번호와 연관된다. 제2 이벤트들의 세트와 연관된 종합 지분 값은 제1 지분 값 기준을 충족하며 제2 이벤트들의 세트로부터의 각 이벤트는 (1) 분산 데이터베이스의 상이한 인스턴스에 의해 정의되고 (2) 제3 이벤트에 의해 식별된다. 제3 이벤트에 대한 라운드 번호는 제1 이벤트들의 세트로부터의 각 이벤트와 연관된 지분 값들의 합이 제2 지분 값 기준을 충족시킨다는 결정에 기초하여 계산될 수 있다. 제1 이벤트에 대한 라운드 번호는 제1 라운드 번호보다 큰 제2 라운드 번호에 대응한다. 방법은 제3 이벤트에 기초하여 제3 이벤트들의 세트를 결정하는 단계를 더 포함한다. 제3 이벤트들의 세트로부터의 각 이벤트는 a) 제3 이벤트를 포함하는 제4 이벤트들의 세트에 의해 식별되고 및 b) 제1 이벤트들의 세트로부터 유래된다. 제4 이벤트들의 세트로부터의 각 이벤트는 분산 데이터베이스의 상이한 인스턴스에 의해 정의되며 제4 이벤트들의 세트와 연관된 종합 지분 값은 제3 지분 값 기준을 충족시킨다. 그후, 제4 지분 값 기준을 충족시키는 제3 이벤트들의 세트와 연관된 종합 지분 값에 기초하여 제4 이벤트에 대해 순서 값이 정의되고, 이 순서 값은 제2 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스에 저장될 수 있다.
일부 실시예들에서, 지분 값들의 세트는 (1) 제2 이벤트들의 세트로부터 이벤트를 정의하는 분산 데이터베이스의 각 인스턴스와 연관되고 및 (2) 분산 데이터베이스의 인스턴스와 연관된 암호 화폐의 양에 비례하는 지분 값을 포함한다. 제2 이벤트들의 세트와 연관된 종합 지분 값은 지분 값들의 세트로부터의 지분 값들의 합에 기초한다.
일부 실시예에서, 제1 지분 값 기준, 제2 지분 값 기준, 제3 지분 값 기준 또는 제4 지분 값 기준 중 적어도 하나는 분산 데이터베이스의 종합 지분 값에 기초하여 정의된다. 또한, 일부 실시예에서, 제1 시간에 분산 데이터베이스를 구현하는 컴퓨팅 디바이스들의 세트는 신뢰 엔티티들의 세트와 관련되고, 제1 시간 이후 제2 시간에 분산 데이터베이스를 구현하는 컴퓨팅 디바이스들의 세트는 신뢰 엔티티들의 세트로부터 유래된 것이 아닌 엔티티를 포함하는 엔티티들의 세트와 연관된다.
본 명세서에서 사용될 때, 모듈은 예를 들어 특정 기능을 수행하는 것과 연관된 동작 가능하게 결합된 전기 컴포넌트의 임의의 어셈블리 및/또는 세트일 수 있으며, 예를 들어 메모리, 프로세서, 전기 트레이스, 광 커넥터, 소프트웨어(하드웨어에서 실행) 및/또는 등등을 포함할 수 있다.
본 명세서에서 사용되는 단수 형태는 문맥상 명확하게 다르게 지시하지 않는 한 복수 대상을 포함한다. 따라서, 예를 들어, 용어 "모듈"은 단일 모듈 또는 모듈들의 조합을 의미하도록 의도된다. 예를 들어, "네트워크"는 단일 네트워크 또는 네트워크 조합을 의미한다.
도 1은 일 실시예에 따른 분산 데이터베이스 시스템(100)을 도시하는 상위 레벨 블록도이다. 도 1은 4개의 컴퓨팅 디바이스(컴퓨팅 디바이스(110), 컴퓨팅 디바이스(120), 컴퓨팅 디바이스(130) 및 컴퓨팅 디바이스(140))에 걸쳐 구현된 분산 데이터베이스(100)를 도시하지만, 분산 데이터베이스(100)는 도 1에 도시되지 않은 컴퓨팅 디바이스를 포함하여 임의의 수의 컴퓨팅 디바이스의 세트를 사용할 수 있다. 네트워크(105)는 유선 네트워크 및/또는 무선 네트워크로서 구현되는 임의의 유형의 네트워크(예를 들어, LAN(local area network), WAN(wide area network), 가상 네트워크, 원격 통신 네트워크)일 수 있으며, 컴퓨팅 디바이스들(110, 120, 130, 140)과 동작 가능하게 결합하기 위해 사용될 수 있다. 본 명세서에서 더 상세하게 설명된 바와 같이, 일부 실시예에서, 예를 들어, 컴퓨팅 디바이스는 인터넷 서비스 제공자(ISP) 및 인터넷(예를 들어, 네트워크(105))을 통해 서로 연결된 퍼스널 컴퓨터이다. 일부 실시예에서, 임의의 2개의 컴퓨팅 디바이스(110, 120, 130, 140) 사이에서 네트워크(105)를 통해 연결이 정의될 수 있다. 도 1에 도시된 바와 같이, 예를 들어, 컴퓨팅 디바이스(110)와 컴퓨팅 디바이스(120), 컴퓨팅 디바이스(130) 또는 컴퓨팅 디바이스(140) 중 임의의 하나 사이에 연결이 정의될 수 있다.
일부 실시예에서, 컴퓨팅 디바이스(110, 120, 130, 140)는 중간 네트워크 및/또는 대안적 네트워크(도 1에 도시되지 않음)를 통해 서로간에(예를 들어, 그에 데이터를 송신 및/또는 그로부터 데이터를 수신) 그리고 네트워크와 통신할 수 있다. 이러한 중간 네트워크 및/또는 대안적 네트워크는 네트워크(105)와 동일한 유형 및/또는 상이한 유형의 네트워크일 수 있다.
각 컴퓨팅 디바이스(110, 120, 130, 140)는 하나 이상의 다른 컴퓨팅 디바이스로부터 데이터를 송신 및/또는 수신하기 위해 네트워크(105)를 통해 데이터를 송신하도록 구성된 임의의 유형의 디바이스일 수 있다. 컴퓨팅 디바이스의 예는 도 1에 도시된다. 컴퓨팅 디바이스(110)는 메모리(112), 프로세서(111) 및 출력 디바이스(113)를 포함한다. 예를 들어, 메모리(112)는 RAM(random access memory), 메모리 버퍼, 하드 드라이브, 데이터베이스, EPROM(erasable programmable read-only memory), EEPROM(electrically erasable read-only memory), ROM(read-only memory) 및/또는 등등을 포함할 수 있다. 일부 실시예에서, 컴퓨팅 디바이스(110)의 메모리(112)는 분산 데이터베이스의 인스턴스(예를 들어, 분산 데이터베이스 인스턴스(114))와 연관된 데이터를 포함한다. 일부 실시예에서, 메모리(112)는 프로세서로 하여금 분산 데이터베이스의 다른 인스턴스(예를 들어, 컴퓨팅 디바이스(120)에서의 분산 데이터베이스 인스턴스(124))로의 송신 및/또는 그로부터의 수신과 연관된 모듈, 프로세스 및/또는 기능을 실행하게 하는 명령어, 동기화 이벤트의 레코드, 다른 컴퓨팅 디바이스들과의 이전 동기화 이벤트의 레코드, 동기화 이벤트의 순서, 파라미터 값(예를 들어, 트랜잭션을 정량화하는 데이터베이스 필드, 이벤트가 발생하는 순서를 정량화하는 데이터베이스 필드 및/또는 데이터베이스에 값이 저장될 수 있는 임의의 다른 적합한 필드)을 저장한다.
분산 데이터베이스 인스턴스(114)는 예를 들어, 데이터를 저장, 수정 및/또는 삭제하는 것을 포함하여 데이터를 조작하도록 구성될 수 있다. 일부 실시예에서, 분산 데이터베이스 인스턴스(114)는 관계형 데이터베이스, 객체 데이터베이스, 사후-관계형 데이터베이스, 및/또는 임의의 다른 적합한 유형의 데이터베이스일 수 있다. 예를 들어, 분산 데이터베이스 인스턴스(114)는 임의의 특정 기능 및/또는 산업과 관련된 데이터를 저장할 수 있다. 예를 들어, 분산 데이터베이스 인스턴스(114)는 특정 금융 상품의 소유권 이력과 연관된 값 및/또는 값의 벡터를 포함하는(예를 들어, 컴퓨팅 디바이스(110)의 사용자의) 금융 트랜잭션을 저장할 수 있다. 일반적으로 벡터는 파라미터에 대한 값들의 임의의 세트일 수 있으며 파라미터는 상이한 값을 가질 수 있는 임의의 데이터 객체 및/또는 데이터베이스 필드일 수 있다. 따라서, 분산 데이터베이스 인스턴스(114)는 다수의 파라미터 및/또는 필드를 가질 수 있으며, 그 각각은 값들의 벡터와 연관된다. 값들의 벡터는 해당 데이터베이스 인스턴스(114) 내의 파라미터 및/또는 필드의 실제 값을 결정하는 데 사용된다.
일부 경우에, 분산 데이터베이스 인스턴스(114)는 (키, 값) 쌍의 세트와 같은 다른 데이터 구조를 구현하는 데 사용될 수도 있다. 분산 데이터베이스 인스턴스(114)에 의해 기록된 트랜잭션은 예를 들어 (키, 값) 쌍의 세트에서 (키, 값) 쌍을 추가, 삭제 또는 수정할 수 있다.
일부 예들에서, 분산 데이터베이스 시스템(100) 또는 임의의 분산 데이터베이스 인스턴스들(114, 124, 134, 144)이 쿼리될 수 있다. 예를 들어, 쿼리는 키로 구성될 수 있고, 분산 데이터베이스 시스템(100) 또는 분산 데이터베이스 인스턴스들(114, 124, 134, 144)로부터의 반환 결과는 키와 연관된 값일 수 있다. 일부 경우에, 분산 데이터베이스 시스템(100) 또는 임의의 분산 데이터베이스 인스턴스(114, 124, 134, 144)는 또한 트랜잭션을 통해 수정될 수 있다. 예를 들어, 데이터베이스를 수정하는 트랜잭션은 수정 트랜잭션을 인가한 당사자에 의한 디지털 서명을 포함할 수 있다.
분산 데이터베이스 시스템(100)은, 예를 들어 분산 아이덴티티 시스템에서 다양한 사용자와 연관된 속성을 저장하는 것과 같은 많은 목적으로 사용될 수 있다. 예를 들어, 그러한 시스템은 사용자의 아이덴티티를 "키"로 사용하고 사용자와 연관된 속성 목록을 "값"으로 사용할 수 있다. 일부 경우에, 아이덴티티는 해당 사용자에게 대응 개인 키가 알려진 암호 공개 키일 수 있다. 예를 들어, 각 속성은 해당 속성을 행사할 수 있는 권한을 가진 권위자에 의해 디지털 서명될 수 있다. 예를 들어, 각 속성은 속성을 판독할 수 있는 권한을 갖는 개인 또는 개인 그룹과 연관된 공개 키로 암호화될 수 있다. 일부 키 또는 값에는 키 또는 값을 수정하거나 삭제하도록 인가된 당사자의 공개 키 목록이 첨부될 수도 있다.
다른 예에서, 분산 데이터베이스 인스턴스(114)는 게임플레이 아이템의 현재 상태 및 소유권과 같은 MMG(Massively Multiplayer Game)와 관련된 데이터를 저장할 수 있다. 일부 경우에, 분산 데이터베이스 인스턴스(114)는 도 1에 도시된 바와 같이 컴퓨팅 디바이스(110) 내에 구현될 수 있다. 다른 예들에서, 분산 데이터베이스의 인스턴스는 컴퓨팅 디바이스에 의해 액세스 가능하지만(예를 들어, 네트워크를 통해) 컴퓨팅 디바이스(도 1에 도시되지 않음) 내에 구현되지는 않는다.
컴퓨팅 디바이스(110)의 프로세서(111)는 분산 데이터베이스 인스턴스(114)를 운용 및/또는 실행하도록 구성된 임의의 적합한 처리 디바이스일 수 있다. 예를 들면, 프로세서(111)는 본 명세서에 추가로 상세히 설명된 바와 같이 컴퓨팅 디바이스(120)로부터 신호를 수신하는 것에 응답하여 분산 데이터베이스 인스턴스(114)를 업데이트하고 및/또는 컴퓨팅 디바이스(120)에 신호가 전송되게 하도록 구성될 수 있다. 보다 구체적으로, 본 명세서에서 보다 상세하게 설명되는 바와 같이, 프로세서(111)는 다른 컴퓨팅 디바이스로부터 트랜잭션과 연관된 동기화 이벤트, 동기화 이벤트들의 순서와 연관된 레코드 및/또는 등등을 수신하는 것에 응답하여 분산 데이터베이스 인스턴스(114)를 업데이트하기 위해 모듈, 기능 및/또는 프로세스를 실행하도록 구성될 수 있다. 다른 실시예에서, 프로세서(111)는 분산 데이터베이스의 다른 인스턴스(예를 들어, 컴퓨팅 디바이스(120)에서의 분산 데이터베이스 인스턴스(124))에 저장된 파라미터에 대한 값을 수신하는 것에 응답하여 분산 데이터베이스 인스턴스(114)를 업데이트하고 및/또는 컴퓨팅 디바이스(110)에서의 분산 데이터베이스 인스턴스(114)에 저장된 파라미터에 대한 값이 컴퓨팅 디바이스(120)로 전송되게 하도록 모듈, 기능 및/또는 프로세스를 실행하도록 구성될 수 있다. 일부 실시예에서, 프로세서(111)는 범용 프로세서, FPGA(Field Programmable Gate Array), ASIC(Application Specific Integrated Circuit), DSP(Digital Signal Processor) 및/또는 등등일 수 있다.
디스플레이(113)는 예를 들어, 액정 디스플레이(LCD), 음극선 관 디스플레이(CRT) 등과 같은 임의의 적합한 디스플레이일 수 있다. 다른 실시예에서, 임의의 컴퓨팅 디바이스(110, 120, 130, 140)는 디스플레이(113, 123, 133, 143) 대신에 또는 그에 부가하여 다른 출력 디바이스를 포함한다. 예를 들어, 컴퓨팅 디바이스들(110, 120, 130, 140) 중 임의의 하나는 오디오 출력 디바이스(예를 들어, 스피커), 촉각적 출력 디바이스 및/또는 등등을 포함할 수 있다. 또 다른 실시예에서, 임의의 컴퓨팅 디바이스(110, 120, 130, 140)는 디스플레이(113, 123, 133, 143) 대신에 또는 그에 추가하여 입력 디바이스를 포함한다. 예를 들어, 컴퓨팅 디바이스들(110, 120, 130, 140) 중 임의의 하나는 키보드, 마우스 및/또는 등등을 포함할 수 있다.
컴퓨팅 디바이스(120)는 프로세서(111), 메모리(112) 및 디스플레이(113)와 각각 구조적 및/또는 기능적으로 유사할 수 있는 프로세서(121), 메모리(122) 및 디스플레이(123)를 갖는다. 또한, 분산 데이터베이스 인스턴스(124)는 분산 데이터베이스 인스턴스(114)와 구조적 및/또는 기능적으로 유사할 수 있다.
컴퓨팅 디바이스(130)는 프로세서(111), 메모리(112) 및 디스플레이(113)와 각각 구조적 및/또는 기능적으로 유사할 수 있는 프로세서(131), 메모리(132) 및 디스플레이(133)를 갖는다. 또한, 분산 데이터베이스 인스턴스(134)는 분산 데이터베이스 인스턴스(114)와 구조적 및/또는 기능적으로 유사할 수 있다.
컴퓨팅 디바이스(140)는 프로세서(111), 메모리(112) 및 디스플레이(113)와 각각 구조적 및/또는 기능적으로 유사할 수 있는 프로세서(141), 메모리(142) 및 디스플레이(143)를 갖는다. 또한, 분산 데이터베이스 인스턴스(144)는 분산 데이터베이스 인스턴스(114)와 구조적 및/또는 기능적으로 유사할 수 있다.
비록 컴퓨팅 디바이스(110, 120, 130, 140)가 서로 유사한 것으로 나타나 있지만, 분산 데이터베이스 시스템(100)의 각 컴퓨팅 디바이스는 다른 컴퓨팅 디바이스와 다를 수 있다. 분산 데이터베이스 시스템(100)의 각 컴퓨팅 디바이스(110, 120, 130, 140)는 컴퓨팅 엔티티(예를 들어, 데스크톱 컴퓨터, 랩톱 컴퓨터 등과 같은 개인 컴퓨팅 디바이스), 이동 전화, PDA(personal digital assistant) 등 중 임의의 것일 수 있다. 예를 들어, 컴퓨팅 디바이스(110)는 데스크톱 컴퓨터일 수 있고, 컴퓨팅 디바이스(120)는 스마트 폰일 수 있고 컴퓨팅 디바이스(130)는 서버일 수 있다.
일부 실시예에서, 컴퓨팅 디바이스(110, 120, 130, 140)의 하나 이상의 부분은 하드웨어 기반 모듈(예를 들어, DSP(digital signal processor), FPGA(field programmable gate array)) 및/또는 소프트웨어 기반 모듈(예를 들어, 메모리에 저장되고 및/또는 프로세서에서 실행되는 컴퓨터 코드의 모듈)을 포함할 수 있다. 일부 실시예에서, 컴퓨팅 디바이스(110, 120, 130, 140)와 연관된 하나 이상의 기능(예를 들어, 프로세서(111,121,131,141)와 연관된 기능)은 하나 이상의 모듈에 포함될 수 있다(예를 들어, 도 2 참조).
컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(110, 120, 130, 140))의 특성, 컴퓨팅 디바이스의 수 및 네트워크(105)를 포함하는 분산 데이터베이스 시스템(100)의 특성은 임의의 수의 방식으로 선택될 수 있다. 일부 경우에, 분산 데이터베이스 시스템(100)의 특성은 분산 데이터베이스 시스템(100)의 관리자에 의해 선택될 수 있다. 다른 예들에서, 분산 데이터베이스 시스템(100)의 특성은 분산 데이터베이스 시스템(100)의 사용자에 의해 집합적으로 선택될 수 있다.
분산 데이터베이스 시스템(100)이 사용되기 때문에, 컴퓨팅 디바이스(110, 120, 130 및 140) 사이에 리더가 지정되지 않는다. 구체적으로, 컴퓨팅 디바이스(110, 120, 130 또는 140) 중 어떠한 것도 컴퓨팅 디바이스(110, 120, 130, 140)의 분산 데이터베이스 인스턴스(111, 12, 131, 141)에 저장된 값들 사이의 분쟁을 해결하기 위한 리더로서 식별 및/또는 선택되지 않는다. 대신에, 여기에 설명된 이벤트 동기화 프로세스들, 투표 프로세스들 및/또는 방법들을 이용하여, 컴퓨팅 디바이스들(110, 120, 130, 140)은 집합적으로 파라미터에 대해 일 값에 수렴할 수 있다.
분산 데이터베이스 시스템에 리더가 없으면 분산 데이터베이스 시스템의 보안이 향상된다. 구체적으로, 리더가 있으면, 공격 및/또는 실패에 대한 단일 지점이 존재하게 된다. 악성 소프트웨어가 리더를 감염시키거나 및/또는 리더의 분산 데이터베이스 인스턴스에서 파라미터의 값이 악의적으로 변경되면 다른 분산 데이터베이스 인스턴스에 실패 및/또는 부정확한 값이 전파된다. 그러나 리더가 없는 시스템에서는 공격 및/또는 실패의 단일 지점이 존재하지 않는다. 특히 리더가 없는 시스템의 분산 데이터베이스 인스턴스의 파라미터에 값이 포함되어 있으면 이 값은 여기에서 자세히 설명하는 것처럼 분산 데이터베이스 인스턴스가 시스템의 다른 분산 데이터베이스 인스턴스와 값을 교환한 후에 변경된다. 추가적으로, 여기에 설명된 리더가 없는 분산 데이터베이스 시스템은 수렴의 속도를 증가시키면서, 본 명세서에서 보다 상세히 설명되는 바와 같이 디바이스들간에 전송되는 데이터의 양을 감소시킨다.
도 2는 일 실시예에 따른 분산 데이터베이스 시스템(예를 들어, 분산 데이터베이스 시스템(100))의 컴퓨팅 디바이스(200)를 도시한다. 일부 실시예에서, 컴퓨팅 디바이스(200)는 도 1과 관련하여 도시되고 설명된 컴퓨팅 디바이스(110, 120, 130, 140)와 유사할 수 있다. 컴퓨팅 디바이스(200)는 프로세서(210) 및 메모리(220)를 포함한다. 프로세서(210) 및 메모리(220)는 서로 동작 가능하게 결합된다. 일부 실시예에서, 프로세서(210) 및 메모리(220)는 각각 도 1과 관련하여 상세하게 설명된 프로세서(111) 및 메모리(112)와 유사할 수 있다. 도 2에 도시된 바와 같이, 프로세서(210)는 데이터베이스 수렴 모듈(211) 및 통신 모듈(210)을 포함하고, 메모리(220)는 분산 데이터베이스 인스턴스(221)를 포함한다. 통신 모듈(212)은 컴퓨팅 디바이스(200)가 다른 컴퓨팅 디바이스와 통신(예를 들어, 데이터를 그에 송신 및/또는 그로부터 수신)할 수 있게 한다. 일부 실시예에서, 통신 모듈(212)(도 1에 도시되지 않음)은 컴퓨팅 디바이스(110)가 컴퓨팅 디바이스(120, 130, 140)와 통신할 수 있게 한다. 통신 모듈(210)은 예를 들어, 네트워크 인터페이스 제어기(NIC), 무선 연결, 유선 포트 및/또는 등등을 포함 및/또는 인에이블링할 수 있다. 이와 같이, 통신 모듈(210)은 (예를 들어, 도 1의 네트워크(105) 또는 인터넷(도시되지 않음)과 같은 네트워크를 통해) 컴퓨팅 디바이스(200)와 다른 디바이스 사이의 통신 세션을 확립 및/또는 유지할 수 있다. 이와 유사하게, 통신 모듈(210)은 컴퓨팅 디바이스(200)가 다른 디바이스로 데이터를 송신하고 및/또는 다른 디바이스로부터 데이터를 수신할 수 있게 할 수 있다.
일부 경우에, 데이터베이스 수렴 모듈(211)은 다른 컴퓨팅 디바이스와 이벤트 및/또는 트랜잭션을 교환하고, 데이터베이스 수렴 모듈(211)이 수신하는 이벤트 및/또는 트랜잭션을 저장하고, 이벤트 사이의 참조들의 패턴에 의해 정의된 부분 순서에 기초하여 이벤트 및/또는 트랜잭션의 순위를 계산할 수 있다. 각 이벤트는 2개의 이전 이벤트(해당 이벤트를 2개의 이전 이벤트 및 그 조상 이벤트에 링크하거나 그 반대의 경우), 페이로드 데이터(예를 들어, 기록할 트랜잭션), 현재 시간, 그 생성자가 행사하는 타임스탬프(예를 들어, 날짜 및 UTC 시간), 즉, 이벤트가 최초 정의된 시간 같은 다른 정보 및/또는 등등의 암호 해시를 포함하는 레코드일 수 있다. 경우에 따라 구성원이 정의한 제1 이벤트는 다른 구성원이 정의한 단일 이벤트의 해시만 포함한다. 그러한 경우에, 구성원은 아직 기존 자체-해시(예를 들어, 그 구성원에 의해 이전에 정의된 이벤트의 해시)를 갖지 않는다. 경우에 따라 분산 데이터베이스의 제1 이벤트에는 어떠한 이전 이벤트의 해시도 포함되지 않는다(해당 분산 데이터베이스에 대한 이전 이벤트가 없기 때문에).
일부 실시예에서, 2개의 이전 이벤트의 이러한 암호 해시는 이벤트를 입력으로 사용하는 암호 해시 함수에 기초하여 정의된 해시 값일 수 있다. 구체적으로, 이러한 실시예에서, 이벤트는 바이트의 특정 시퀀스 또는 스트링(그 이벤트의 정보를 나타냄)을 포함한다. 이벤트 해시는 해당 이벤트에 대한 바이트 시퀀스를 입력으로 사용하여 해시 함수로부터 반환된 값일 수 있다. 다른 실시예에서, 이벤트와 연관된 임의의 다른 적합한 데이터(예를 들어, 식별자, 일련 번호, 이벤트의 특정 부분을 나타내는 바이트 등)는 해시 함수에 대한 입력으로서 사용되어 그 이벤트의 해시를 계산할 수 있다. 임의의 적합한 해시 함수를 사용하여 해시를 정의할 수 있다. 일부 실시예들에서, 각 구성원은 주어진 이벤트에 대해 각 구성원에서 동일한 해시가 생성되도록 동일한 해시 함수를 사용한다. 이벤트는 그후 이벤트를 정의 및/또는 생성하는 구성원에 의해 디지털 서명될 수 있다.
일부 경우에, 이벤트들의 세트와 그 상호 연결이 DAG(Directed Acyclic Graph)를 형성할 수 있다. 경우에 따라 DAG의 각 이벤트는 2개의 이전 이벤트를 참조하며(이전의 두 이벤트와 그 조상 이벤트에 해당 이벤트를 링크, 그리고, 그 반대), 어떠한 루프도 존재하지 않도록 각 참조는 절대적으로 이전 이벤트들에 대한 것이다. 일부 실시예에서, DAG는 암호 해시에 기초하므로, 데이터 구조는 hashDAG라고부를 수 있다. hashDAG는 부분 순서- Y가 X의 해시를 포함하거나 Y가 X의 해시가 포함된 이벤트의 해시를 포함하는 경우 이벤트 X가 이벤트 Y 이전에 발생함을 의미 -를 직접 인코딩하거나, 임의의 길이의 이런 경로에 대하여 인코딩한다. 그러나 X에서 Y까지 또는 Y에서 X까지의 경로가 없는 경우 부분 순서는 어떤 이벤트가 먼저 오는지 정의하지 않는다. 따라서 데이터베이스 수렴 모듈은 부분 순서로부터 전체 순서를 계산할 수 있다. 이것은 컴퓨팅 디바이스가 동일한 순서를 계산하도록 컴퓨팅 디바이스가 사용하는 임의의 적합한 결정론적 함수에 의해 수행될 수 있다. 일부 실시예에서, 각 구성원은 각 동기화 후에 이 순서를 재계산할 수 있고, 결국 이러한 순서는 수렴하여 컨센서스가 나타난다.
컨센서스 알고리즘은 hashDAG에서 이벤트의 순서 및/또는 이벤트 내에 저장된 트랜잭션의 순서를 결정하는 데 사용될 수 있다. 트랜잭션의 순서는 차례로 순서에 따라 이들 트랜잭션을 수행한 결과로서 데이터베이스의 상태를 정의할 수 있다. 정의된 데이터베이스의 상태는 데이터베이스 상태 변수로서 저장될 수 있다.
일부 경우에, 데이터베이스 수렴 모듈은 다음 함수를 사용하여 hashDAG의 부분 순서에서 전체 순서를 계산할 수 있다. 데이터베이스 수렴 모듈은 다른 컴퓨팅 디바이스("구성원"이라고함) 각각에 대해 hashDAG를 검사하여 해당 구성원이 해당 이벤트(및/또는 이들 이벤트의 표시)를 수신한 순서를 발견할 수 있다. 그런 다음 데이터베이스 수렴 모듈은 구성원이 수신한 제1 이벤트에 대해 랭크가 1이고, 구성원이 수신한 제2 이벤트에 대해 랭크가 2인 등의 방식으로 해당 구성원이 각 이벤트에 수치 "랭크"를 할당한 것처럼 계산할 수 있다. 데이터베이스 수렴 모듈은 hashDAG의 각 구성원에 대해 이를 수행할 수 있다. 그런 다음 각 이벤트에 대해 데이터베이스 수렴 모듈은 할당된 랭크의 중앙값을 계산할 수 있으며 이벤트를 그 중앙값으로 정렬할 수 있다. 2개의 결속된 이벤트를 그 해시의 수치 순서로 정렬하거나 각 구성원의 데이터베이스 수렴 모듈이 동일한 방법을 사용하는 다른 방법으로 정렬하는 것 같이 결정론적 방식으로 정렬은 동점을 구분할 수 있다. 이 정렬의 결과는 전체 순서이다.
도 6은 전체 순서를 결정하기 위한 일 예의 hashDAG(640)를 도시한다. HashDAG(640)는 2개의 이벤트(가장 낮은 줄무늬 원 및 가장 낮은 점표시 원)를 예시하고, 제1 시간에, 각 구성원은 이들 이벤트(다른 줄무늬 및 점표시 원)의 표시를 수신한다. 맨 위에 있는 각 구성원의 이름은 어떤 이벤트가 그 느린 순서로 우선인지에 따라 색이 지정된다. 점표시보다 더 많은 줄무늬 초기 투표가 존재하고, 따라서, 구성원 각각에 대한 컨센서스 투표는 줄무늬이다. 바꾸어 말하면, 구성원들은 점표시 이벤트 전에 줄무늬 이벤트가 발생했다는 합의에 결국 수렴한다.
이 예에서 구성원(Alice, Bob, Carol, Dave 및 Ed로 표시된 컴퓨팅 디바이스)은 이벤트 642 또는 이벤트 644 중 어느 쪽이 먼저 발생했는지에 대한 컨센서스를 정의하기 위해 작업할 것이다. 각 줄무늬 원은 구성원이 처음 이벤트(644)를 수신한 이벤트(및/또는 그 이벤트(644)의 표시)를 나타낸다. 유사하게, 각 점표시된 원은 구성원이 이벤트(642)를 최초 수신한 이벤트(및/또는 이벤트(642)의 표시)를 나타낸다. hashDAG(640)에 도시된 바와 같이, Alice, Bob 및 Carol은 각각 이벤트(642) 전에 이벤트(644)(및/또는 이벤트(644)의 표시)를 수신했다. Dave 및 Ed는 모두 이벤트(644)(및/또는 이벤트(644)의 표시) 이전에 이벤트(642)(및/또는 이벤트(642)의 표시)를 수신했다. 따라서, 더 많은 수의 구성원이 이벤트(642) 전에 이벤트(644)를 수신했기 때문에, 각 구성원에 의해 전체 순서가 결정되어 이벤트(644)가 이벤트(642) 전에 발생했음을 나타낼 수 있다.
다른 경우, 데이터베이스 수렴 모듈은 다른 함수를 사용하여 hashDAG의 부분 순서로부터 전체 순서를 계산할 수 있다. 이러한 실시예에서, 예를 들어, 데이터베이스 수렴 모듈은 전체 순서를 계산하기 위해 다음 함수를 사용할 수 있는데, 여기서, 양의 정수 Q는 구성원에 의해 공유되는 파라미터이다.
Figure 112019135805916-pat00001
이 실시예에서, fast(x,y)는 x가 생성 및/또는 정의된 직후에 생성자(x)의 의견에 따라, 이벤트의 전체 순서에서 y의 위치를 제공한다. Q가 무한대이면, 이때, 상술한 바는 앞서 설명된 실시예에서와 동일한 전체 순서를 계산한다. Q가 유한하고 모든 구성원이 온라인 상태이면, 상술한 바는 이전에 설명된 실시예와 동일한 전체 순서를 계산한다. Q가 유한하고, 소수의 구성원이 주어진 시간에 온라인 상태인 경우, 이때, 이 함수는 온라인 상태의 구성원이 그들간의 컨센서스에 도달할 수 있게 하며, 이 컨센서스는 하나씩 새로운 구성원이 천천히 온라인 상태가 될 때 불변 상태로 유지될 것이다. 그러나 네트워크의 파티션이 있는 경우, 이때, 각 파티션의 구성원은 그 자신의 컨센서스에 도달할 수 있다. 그런 다음 파티션이 조정되면 작은 파티션의 구성원이 큰 파티션의 컨센서스를 채택한다.
또 다른 예에서, 도 14 내지 도 17b에 관련하여 설명된 바와 같이, 데이터베이스 수렴 모듈은 hashDAG에서의 부분 순서로부터 전체 순서를 계산하기 위해 또 다른 함수를 사용할 수 있다. 도 14 내지 도 15에 도시된 바와 같이, 각 구성원(Alice, Bob, Carol, Dave 및 Ed)은 이벤트(도 14에 도시된 바와 같은 1401-1413; 도 15에 도시된 1501-1506)를 생성 및/또는 정의한다. 도 14 내지 도 17b와 관련하여 설명된 기능 및 하위 기능을 사용하여, 이벤트에 대한 전체 순서는 여기서 추가로 상세히 설명된 바와 같이, 그 수신된 라운드(본 명세서에서 순서 값이라고도 지칭됨)에 의해 이벤트를 정렬하고, 그 수신된 타임스탬프에 의해 동점을 구분하고, 그 서명에 의해 이들 동점을 구분함으로써 계산될 수 있다. 다른 경우, 이벤트의 전체 순서는 그 수신된 라운드에 의해 이벤트를 정렬하고, 그 수신된 세대에 의해(그 수신된 타임스탬프 대해) 결속을 끊고, 그 서명에 의해 이들 동점을 구분함으로서 계산될 수 있다. 다음 단락에서는 이벤트의 수신된 라운드 및 수신된 세대를 계산 및/또는 정의하여 이벤트의 순서를 결정하는 데 사용되는 기능을 구체화한다. 다음의 용어가 도 14 내지 도 17b와 관련하여 사용되고 예시된다.
"부모": Y가 X의 해시를 포함하면 이벤트 X는 이벤트 Y의 부모이다. 예를 들어, 도 14에서, 이벤트(1412)의 부모는 이벤트(1406) 및 이벤트(1408)를 포함한다.
"조상": 이벤트 X의 조상은 X, 그 부모, 그 부모의 부모 등이다. 예를 들어, 도 14에서, 이벤트(1412)의 조상은 이벤트(1401, 1402, 1403, 1406, 1408 및 1412)이다. 이벤트의 조상은 해당 이벤트와 링크된다고 말할 수 있으며 그 반대의 경우도 마찬가지이다.
"후손": 이벤트 X의 후손은 X, 그 자손, 그 자손의 자손 등이다. 예를 들어, 도 14에서 이벤트(1401)의 후손은 도면에 표시된 모든 이벤트이다. 다른 예에 대하여, 이벤트(1403)의 후손은 이벤트(1403, 1404, 1406, 1407, 1409, 1410, 1411, 1412 및 1413)이다. 이벤트의 후손은 해당 이벤트와 링크된다고 말할 수 있으며 그 반대의 경우도 마찬가지이다.
"N": 모집단의 구성원의 총 수. 예를 들어, 도 14에서, 구성원은 Alice, Bob, Carol, Dave 및 Ed로 표시된 컴퓨팅 디바이스이고, N은 5와 같다.
"M": N의 특정 백분율보다 큰(예를 들어, N의 2/3보다 큰) 최소 정수. 예를 들어, 도 14에서 백분율을 2/3으로 정의하면 M은 4와 같다. 다른 예에서, M은 예를 들어 N의 상이한 백분율(예를 들어, 1/3, 1/2 등), 특정 미리 정의된 수가 되도록 및/또는 임의의 다른 적합한 방식에 의해 정의될 수 있다.
"자기-부모": 이벤트 X의 자기-부모(self-parent)는 동일한 구성원이 생성 및/또는 정의한 그 부모 이벤트 Y이다. 예를 들어, 도 14에서, 이벤트(1405)의 자기-부모는 1401이다.
"자기-조상": 이벤트 X의 자기-조상(self-ancestor)은 X, 그 자기-부모, 그 자기-부모의 자기-부모 등이다.
"시퀀스 번호"(또는 "SN"): 이벤트의 자기-부모의 시퀀스 번호에 1을 더한 값에 의해 정의된 이벤트의 정수 속성. 예를 들어, 도 14에서, 이벤트(1405)의 자기-부모는 1401이다. 이벤트(1401)의 시퀀스 번호가 1이기 때문에, 이벤트(1405)의 시퀀스 번호는 2(즉, 1 + 1)이다.
"세대 번호"(또는 "GN"): 이벤트의 부모의 세대 번호 중 최대 수치에 1을 더한 값에 의해 정의된 이벤트의 정수 속성. 예를 들어, 도 14에서, 이벤트(1412)는 세대 번호 4 및 2를 각각 갖는 2개의 부모, 이벤트(1406 및 1408)를 갖는다. 따라서, 이벤트(1412)의 세대 번호는 5(즉, 4 + 1)이다.
"라운드 증분"(또는 "RI"): 0 또는 1일 수 있는 이벤트의 속성.
"라운드 번호"(또는 "RN"): 이벤트의 정수 속성. 일부 경우에, 라운드 번호는 이벤트의 부모의 라운드 번호의 최대 값과 이벤트의 라운드 증분을 합한 값에 의해 정의될 수 있다. 예를 들어, 도 14에서, 이벤트(1412)는 2개의 부모, 이벤트(1406 및 1408)를 가지며, 둘 다 라운드 번호가 1이다. 이벤트(1412)는 또한 1의 라운드 증분을 갖는다. 따라서, 이벤트(1412)의 라운드 번호는 2(즉, 1 + 1)이다. 다른 경우에, R이 최소 정수인 경우, 이벤트는 라운드 번호 R을 가질 수 있어서, 이벤트는 모두 라운드 번호 R-1을 갖는 다른 구성원에 의해 정의 및/또는 생성된 적어도 M 개의 이벤트를 강력하게 볼(여기에서 설명된 바와 같이) 수 있다. 그러한 정수가 없는 경우 이벤트에 대한 라운드 번호는 기본 값(예를 들어, 0, 1 등)이 될 수 있다. 이러한 경우 라운드 증분을 사용하지 않고 이벤트에 대한 라운드 번호를 계산할 수 있다. 예를 들어, 도 14에서, M이 N의 1/2배보다 큰 최소 정수로 정의되면, M은 3이다. 이때, 이벤트(1412)는 M 개의 이벤트(1401, 1402 및 1408)를 강력하게 보고, 이들 이벤트 각각은 상이한 구성원에 의해 정의되고 1의 라운드 번호를 갖는다. 이벤트(1412)는 상이한 구성원에 의해 정의된 2의 라운드 번호를 갖는 적어도 M 개의 이벤트를 강력하게 볼 수 없다. 따라서 이벤트 1412의 라운드 번호는 2이다. 일부 경우에, 분산 데이터베이스의 제1 이벤트는 1의 라운드 번호를 포함한다. 다른 경우, 분산 데이터베이스의 제1 이벤트는 0 또는 임의의 다른 적합한 수의 라운드 번호를 포함할 수 있다.
"포킹(forking)": 이벤트 X와 이벤트 Y가 동일한 구성원에 의해 정의 및/또는 생성되었으면서 어느 쪽도 다른 것의 자체 조상이 아닌 경우 이벤트 X는 이벤트 Y와 포크(fork)이다. 예를 들어, 도 15에서, 구성원 Dave는 이벤트(1503)가 이벤트(1504)의 자기-조상이 아니고, 이벤트(1504)가 이벤트(1503)의 자기-조상이 아니도록, 둘 모두가 동일한 자기-부모(즉, 이벤트(1501))를 가지는 이벤트(1503 및 1504)를 생성 및/또는 정의함으로써 포킹한다.
포킹의 "식별": 포킹은 2개의 이벤트가 제3 이벤트의 양 조상이 되는 경우 서로 포킹된 2개의 이벤트 이후에 생성 및/또는 정의된 제3 이벤트에 의해 "식별"될 수 있다. 예를 들어, 도 15에서, 구성원 Dave는 어느 쪽도 나머지의 자기-조상이 아닌 이벤트(1503 및 1504)를 생성함으로써 포킹한다. 이 포킹은 이벤트(1503 및 1504)가 모두 이벤트(1506)의 조상이기 때문에 나중의 이벤트(1506)에 의해 식별될 수 있다. 일부 경우에, 포킹 식별은 특정 구성원(예를 들어, Dave)이 속임수를 썼음을 나타낼 수 있다.
이벤트의 "식별": X에 Y와 포크인 조상 이벤트 Z를 갖지 않는 경우 이벤트 X는 조상 이벤트 Y를 "식별" 또는 "본"다. 예를 들어, 도 14에서, 이벤트(1403)가 이벤트(1412)의 조상이고 이벤트(1412)는 이벤트(1403)와 포크인 조상 이벤트를 갖지 않기 때문에 이벤트(1412)는 이벤트(1403)를 식별한다("본다"라고도 함). 일부 경우에, X가 이벤트 Y 이전의 포킹을 식별하지 못하면, 이벤트 X는 이벤트 Y를 식별할 수 있다. 그러한 경우, 비록 이벤트 X가 이벤트 Y에 후속하여 이벤트 Y를 정의하는 구성원에 의해 포킹을 식별하더라도, 이벤트 X는 이벤트 Y를 볼 수 있다. 이벤트 X는 포킹 이후의 해당 구성원에 의한 이벤트를 식별하지 못한다. 또한, 구성원이 이력에서 둘 모두가 구성원의 제1 이벤트인 2개의 서로 다른 이벤트를 정의하는 경우, 이벤트 X는 포킹을 식별할 수 있으며 해당 구성원에 의한 어떠한 이벤트도 식별하지 않는다.
이벤트의 "강력한 식별"(여기서는 "강력하게 본다"라고도함): 이벤트 X는 X가 Y를 식별하는 경우 X와 동일한 구성원이 생성 및/또는 정의한 조상 이벤트 Y를 "강력하게 식별한다"(또는 "강력하게 본다"). 이벤트 X는 (1) X와 Y를 모두 포함하고 (2) 이벤트 X의 조상이며, (3) 조상 이벤트 Y의 후손이고, (4) 이벤트 X에 의해 식별되며, (5) 각각 Y를 식별할 수 있고, (6) 적어도 M명의 다른 구성원에 의해 생성 및/또는 정의된 이벤트의 세트 S가 존재하는 경우 X와 동일한 구성원에 의해 생성 및/또는 정의되지 않은 조상 이벤트 Y를 "강력하게 식별"한다. 예를 들어, 도 14에서, M이 N의 2/3보다 큰 최소 정수(즉, M=1+floor(2N/3), 이 예에서는 4임)에 의해 정의된다면, 이때 이벤트(1412)는 이벤트(1401, 1402, 1406 및 1412)의 세트가 이벤트(1412)의 조상 및 이벤트(1401)의 후손인 적어도 4개의 이벤트의 세트이고 이들이 각각 4명의 구성원 Dave, Carol, Bob 및 Ed에 의해 생성 및/또는 정의되기 때문에 조상 이벤트(1401)를 강력하게 식별하고, 이벤트(1412)는 이벤트(1401, 1402, 1406 및 1412) 각각을 식별하고, 이벤트(1401, 1402, 1406 및 1412) 각각은 이벤트(1401)를 식별한다. 마찬가지로 X가 Y를 각각 볼 수 있는 상이한 구성원에 의해 생성 또는 정의된 적어도 M 개의 이벤트(예를 들어, 이벤트 1401, 1402, 1406 및 1412)를 볼 수 있는 경우, 이벤트 X(예를 들어, 이벤트 1412)는 이벤트 Y(예를 들어, 이벤트 1401)를 "강력하게" 볼 수 있다.
"라운드 R 제1" 이벤트(여기서는 "목격자"라고도함): 이벤트가 (1) 라운드 번호 R을 가지고, (2) R보다 작은 라운드 번호를 가진 자기-부모를 갖거나 부모가 없는 경우 이벤트는 "라운드 R 제1" 이벤트(또는 "목격자")이다. 예를 들어, 도 14에서, 이벤트(1412)는 2의 라운드 번호를 가지고 그 자기-부모는 1의 라운드 번호(즉, 2보다 작음)를 갖는 이벤트(1408)이기 때문에 "라운드 2 제1"이벤트이다.
경우에 따라 X가 적어도 M 개의 "라운드 R 제1" 이벤트를 "강력하게 식별"하는 경우에만 이벤트 X에 대한 라운드 증분이 1로 정의되며, 여기서 R은 그 부모의 최대 라운드 번호이다. 예를 들어, 도 14에서, M이 N의 1/2배보다 큰 최소 정수가 되는 것으로 정의되면, 이때, M은 3이다. 이때, 이벤트(1412)는 M 이벤트(1401, 1402 및 1408)를 강력하게 식별하며, 이들 모두는 라운드 1 제1 이벤트이다. 1412의 부모 모두는 라운드 1이고, 1412는 적어도 M 라운드 1 제1들을 강력하게 식별하며, 따라서, 1412에 대한 라운드 증분은 1이다. "RI=0"으로 표시된 도면의 이벤트는 각각 적어도 M 라운드 1 제1들을 강력하게 식별하는 데 실패하고, 따라서, 그 라운드 증분이 0이다.
일부 경우에, 다음 방법을 사용하여 이벤트 X가 조상 이벤트 Y를 강력하게 식별할 수 있는지 여부를 판별할 수 있다. 각 라운드 R 제1 조상 이벤트 Y에 대해, 구성원 당 하나씩 정수의 어레이 A1을 유지하여 이벤트 X의 최저 시퀀스 번호를 부여하고, 여기서 이벤트 X를 생성 및/또는 정의한 구성원 및 X는 Y를 식별할 수 있다. 각 이벤트 Z에 대해 구성원 당 하나씩 정수형 어레이 A2를 유지하여 해당 구성원에 의해 생성 및/또는 정의된 이벤트 W의 최고 시퀀스 번호를 제공하며 그래서 Z가 해당 W를 식별할 수 있다. Z가 조상 이벤트 Y를 강력하게 식별할 수 있는지를 결정하기 위해 , A1[E] <= A2[E]와 같은 요소 위치의 수(E)를 카운트한다. 이벤트 Z는 이 카운트가 M보다 큰 경우에만 Y를 강력하게 식별할 수 있다. 예를 들어, 도 14에서 구성원 Alice, Bob, Carol, Dave 및 Ed는 각각 이벤트 1401을 식별할 수 있으며, 이렇게 할 수 있는 가장 빠른 이벤트는 각각 그 이벤트 {1404, 1403, 1402, 1401, 1408}이다. 이러한 이벤트에는 시퀀스 번호 A1={1,1,1,1,1}를 갖는다. 유사하게, 이벤트(1412)에 의해 식별되는 그들 각각에 의한 최신 이벤트는 이벤트 {없음, 1406, 1402, 1401, 1412}이고, 여기서 1412가 Alice에 의한 어떠한 이벤트도 식별할 수 없기 때문에 Alice는 "없음"이다. 이들 이벤트는 각각 A2={0,2,1,1,2}의 시퀀스 번호를 가지며, 모든 이벤트는 양의 시퀀스 번호를 가지므로 0은 Alice가 1412로 식별되는 이벤트를 갖지 않음을 의미한다. 목록 A1을 목록 A2와 비교하면 네 개의 값이 참인 {거짓, 참, 참, 참, 참}와 등가인 결과 {1<=0, 1<=2, 1<=1, 1<=1, 1<=2}를 제공한다. 그러므로 1412의 조상과 1401의 후손인 네 개의 이벤트로 구성된 세트 S가 존재한다. 4는 적어도 M이므로, 1412는 1401을 강력하게 식별한다.
A1과 A2에서 이벤트 X가 조상 이벤트 Y를 강력하게 식별할 수 있는지 여부를 판별하는 방법을 구현하는 또 다른 변형은 다음과 같다. 두 어레이의 정수 요소가 128보다 작으면, 이때, 각 요소를 단일 바이트에 저장하고 이러한 요소 8개를 단일 64 비트 워드로 팩킹하고 A1과 A2를 이러한 워드의 어레이로 할 수 있다. A1의 각 바이트의 최상위 비트는 0으로 설정될 수 있으며 A2의 각 바이트의 최상위 비트는 1로 설정될 수 있다. 2개의 대응 워드를 빼고 그후 마스크를 사용하여 최상위 비트 이외의 모든 것을 제로화하도록 비트단위 AND를 수행하고, 그후 7 비트 위치만큼 오른쪽으로 시프트하여 C 프로그래밍 언어에서 다음과 같이 표현되는 값을 얻는다: ((A2[i] - A1[i]) & 0x8080808080808080) >> 7). 이는 제로로 초기화된 러닝 누산기(running accumulator)(S)에 추가될 수 있다. 이를 다수회 수행한 후 바이트 시프팅 및 추가에 의해 누산기를 카운트로 변환하여 ((S & 0xff) + ((S >> 8) & 0xff) + ((S >> 16) & 0xff) + ((S >> 24) & 0xff) + ((S >> 32) & 0xff) + ((S >> 40) & 0xff) + ((S >> 48) & 0xff) + ((S >> 56) & 0xff))를 얻는다. 일부 경우에, 이러한 계산은 C, Java 및/또는 등등 같은 프로그래밍 언어로 수행될 수 있다. 다른 경우에, 계산은 Intel 및 AMD가 제공하는 AVX(Advanced Vector Extensions) 명령어 또는 GPU(graphics processing unit) 또는 GPGPU(general-purpose graphics processing unit)의 균등물 같은 프로세서 특정 명령어를 사용하여 수행할 수 있다. 일부 아키텍처에서, 계산은 128 비트, 256 비트, 512 비트 또는 그 이상의 비트와 같이 64 비트보다 큰 워드를 사용하여 더 빨리 수행될 수 있다.
"유명(famous)" 이벤트: (1) 이벤트 X가 "라운드 R 제1" 이벤트(또는 "목격자")이고 (2) 후술된 비잔틴 합의 프로토콜의 실행을 통해 "예" 결정에 도달하는 경우 라운드 R 이벤트 X는 "유명"하다. 일부 실시예에서, 비잔틴 합의 프로토콜은 분산 데이터베이스의 인스턴스(예를 들어, 분산 데이터베이스 인스턴스(114)) 및/또는 데이터베이스 수렴 모듈(예를 들어, 데이터베이스 수렴 모듈(211))에 의해 실행될 수 있다. 예를 들어, 도 14에서, 5개의 라운드 1 제1들이 도시되어 있다: 1401, 1402, 1403, 1404 및 1408. M이 N의 1/2배보다 큰 최소 정수(3인 경우)인 것으로 정의되면, 이때, 1412는 라운드 2 제1이다. 프로토콜이 더 오래 실행되면, 이때, hashDAG가 위쪽으로 증가하고 결국 다른 4명의 구성원도 이 도면의 맨 위에서 라운드 2 제1들을 갖게 될 것이다. 각 라운드 2 제1은 라운드 1 제1들 각각이 "유명"한지 여부에 대한 "투표"를 갖는다. 이벤트 1412는 이들이 식별할 수 있는 라운드 1 제1들이므로 1401, 1402 및 1403이 유명한지에 대하여 "예"에 투표한다. 이벤트 1412는 1412가 1404를 식별할 수 없기 때문에 1404가 유명한지에 대해 "아니오"에 투표한다. 1402와 같은 주어진 라운드 1 제1의 경우, 그것이 유명한지 여부에 대한 각 라운드 2 제1의 투표를 계산하여 그 상태가 "유명"한지 여부를 결정할 것이다. 이들 투표는 1402가 유명한지 여부에 대해 최종 합의에 도달할 때까지 라운드 3 제1들, 그리고, 그후, 라운드 4 제1들 등으로 전파될 것이다. 동일한 프로세스가 다른 제1들에 대해 반복된다.
비잔틴 합의 프로토콜은 "유명 이벤트"를 식별하기 위해 "라운드 R 제1" 이벤트의 투표 및/또는 결정을 수집하고 사용할 수 있다. 예를 들어, Y가 이벤트 X를 "식별"할 수 있다면 "라운드 R+1 제1" Y는 "예"에 투표하고, 그렇지 않으면 "아니오"에 투표한다. 투표는 그후 임의의 구성원에 의해 결정이 도달될 때까지, G = R+2, R+3, R+4 등에 대해, 각 라운드 G에 대해 계산된다. 결정이 내려질 때까지, 각 라운드 G에 대해 투표가 계산된다. 이 라운드 중 일부는 "대다수(majority)" 라운드가 될 수 있고, 일부 다른 라운드는 "코인(coin)" 라운드가 될 수 있다. 일부 경우에, 라운드 R+2가 대다수 라운드이고, 미래의 라운드는 다수 또는 코인 라운드 중 어느 하나로 지정(예를 들어, 미리 정의된 스케줄에 따라)된다. 예를 들어, 미래의 라운드가 대다수 라운드인지 또는 코인 라운드인지 여부는 두 번의 연속적인 코인 라운드가 있을 수 없다는 조건하에 임의로 결정될 수 있다. 예를 들어, 5개의 대다수 라운드, 그 다음에 하나의 코인 라운드, 그후 5개의 대다수 라운드, 그후 하나의 코인 라운드가 존재하고 합의에 도달할 때까지 반복되는 것이 미리 정의될 수 있다.
일부 경우에, 라운드 G가 대다수 라운드라면, 투표는 다음과 같이 계산될 수 있다. 적어도 M 라운드 G-1 제1들의 투표 V(V는 "예" 또는 "아니오")를 강력하게 식별하는 라운드 G 이벤트가 존재하면, 컨센서스 결정은 V이며 비잔틴 합의 프로토콜이 종료된다. 그렇지 않으면 각 라운드 G 제1 이벤트는 각 라운드 G 제1 이벤트가 강력하게 식별할 수 있는 라운드 G-1 제1들의 다수인 새로운 투표를 계산한다. 대다수가 아닌 동점이 있는 경우 투표는 "예"로 지정될 수 있다.
마찬가지로 X가 라운드 R 목격자(또는 라운드 R이 제1)인 경우, 이때, 라운드 R+1, R+2 등의 투표 결과를 계산할 수 있으며 각 라운드의 목격자는 X가 유명한지에 대해 투표한다. 라운드 R+1에서 X를 볼 수 있는 모든 목격자는 "예"에 투표하고 다른 목격자는 "아니오"에 투표한다. 라운드 R+2에서, 모든 목격자는 강력하게 볼 수 있는 라운드 R+1 목격자의 대다수 투표에 따라 투표한다. 마찬가지로 라운드 R+3에서 모든 목격자는 강력하게 볼 수 있는 라운드 R+2 목격자의 대다수 투표에 따라 투표한다. 이것은 다수의 라운드 동안 계속될 수 있다. 동점인 경우 투표는 "예"로 설정될 수 있다. 다른 경우에, 동점을 "아니오"로 설정하거나 랜덤하게 설정할 수 있다. 임의의 라운드가 적어도 M명의 "아니오"에 투표한 목격자를 가지면, 그후, 선거가 끝나고 X는 유명하지 않다. 임의의 라운드에서 적어도 M명의 목격자가 "예"에 투표하면, 그후, 선거가 끝나고 X는 유명하다. "예" 또는 "아니오" 어느 것도 적어도 M 투표를 갖지 못하는 경우, 선거는 다음 라운드로 계속된다.
예로서, 도 14에서, 도시된 도면 아래에 있는 라운드 제1 이벤트(X)를 고려한다. 이때, 각 라운드 1 제1은 X가 유명한지 여부에 대한 투표를 가질 것이다. 이벤트(1412)는 라운드 1 제1 이벤트(1401, 1402 및 1408)를 강력하게 식별할 수 있다. 그래서 그 투표는 그들의 투표에 근거할 것이다. 이것이 대다수 라운드라면, 1412는 {1401, 1402, 1408} 중 적어도 M이 "예"의 투표를 가지고 있는지를 점검할 것이다. 그들이 그렇다면, 이때, 그 결정은 "예"이며 합의가 성취된다. 그들 중 적어도 M 명이 "아니오"에 투표한다면, 이때, 결정은 "아니오"이며 합의가 성취된다. 투표가 각 방향으로 적어도 M개 있지 않으면, 이때, 1412에 1401, 1402 및 1408의 것들의 투표의 대다수인 투표가 주어진다(그리고 동점이 있다면 "예"에 투표함으로써 동점을 구분한다). 그 투표는 그후 다음 라운드에서 사용되어 합의에 도달할 때까지 계속된다.
일부 경우에, 라운드 G가 코인 라운드라면, 투표는 다음과 같이 계산될 수 있다. 이벤트 X가 V(여기서 V는 "예" 또는 "아니오")에 투표하는 적어도 M 라운드 G-1 제1들을 식별하는 경우, 이때, 이벤트 X는 그 투표를 V로 변경한다. 그렇지 않으면 라운드 G가 코인 라운드인 경우, 이때, 각 라운드 G 제1 이벤트 X는 이벤트 X의 서명의 최하위 비트에 의해 정의되는 의사 랜덤 결정(일부 경우에는 코인 플립(coin flip)과 유사)의 결과로 그 투표를 변경한다.
유사하게 말하면, 이런 경우에, 선거가 라운드 R+K(코인 라운드)에 도달한 경우- K는 지정된 계수(예를 들어, 3, 6, 7, 8, 16, 32 또는 임의의 다른 적합한 수치 같은 수의 배수 -, 선거는 해당 라운드에서 끝나지 않는다. 선거가 이 라운드에 이르면 적어도 하나의 추가 라운드에 대해 계속될 수 있다. 그런 라운드에서, 이벤트 Y가 라운드 R + K 목격자라면, 이때, V에 투표한 라운드 R+K-1로부터 적어도 M명의 목격자를 강력하게 볼 수 있는 경우, Y는 V에 투표할 것이다. 그렇지 않으면, Y는 랜덤 값에 따라 투표할 것이다(예를 들어, 암호 "공유 코인" 프로토콜 및/또는 임의의 다른 랜덤 결정을 사용하여 이벤트 Y의 타임스탬프에 따른 이벤트 Y의 서명 비트(예를 들어, 최하위 비트, 최상위 비트, 랜덤 선택 비트)에 따름- 여기서, 1="예" 및 0="아니오"이거나 그 반대임 -). 이 랜덤 결정은 Y가 생성되기 전에 예측할 수 없으므로 이벤트 및 컨센서스 프로토콜의 보안을 향상시킬 수 있다.
예를 들어, 도 14에서, 라운드 2가 코인 라운드이고 라운드 1 이전의 일부 이벤트가 유명한지 여부에 대한 투표가 있으면, 이때, 이벤트(1412)는 먼저 {1401, 1402, 1408} 중 적어도 M이 "예"에 투표했는지 또는 그들 중 적어도 M 명이 "아니오"로 투표했는지 여부를 점검할 것이다. 그러한 경우, 이때, 1412는 같은 방식으로 투표할 것이다. 어떤 방향으로도 적어도 M 투표가 없다면, 이때, 1412는 랜덤 또는 의사랜덤 투표를 가질 것이다(예를 들어, Ed가 이를 생성 및/또는 정의한 시점에서 그가 서명할 때 이벤트 1412에 대해 생성한 디지털 서명의 최하위 비트에 기초함).
일부 경우에, 의사 랜덤 결정의 결과는, 예를 들어, 라운드 번호의 임계 서명의 최하위 비트로서 구현될 수 있는 암호 공유 코인 프로토콜의 결과일 수 있다.
시스템은 상술한 의사-랜덤 결정의 결과를 계산하기 위한 방법들 중 임의의 하나로부터 구축될 수 있다. 일부 경우에, 시스템은 일부 순서가 상이한 방법 통해 순환한다. 다른 경우에, 시스템은 사전 정의된 패턴에 따라 상이한 방법 중에서 선택할 수 있다.
"수신된 라운드": 이벤트 X는 라운드 번호 R을 가진 유명 라운드 R 제1 이벤트(또는 유명 목격자) 중 적어도 절반이 X의 후손 및/또는 X를 볼 수 있도록 R이 최소 정수인 경우 R의 "수신된 라운드"를 갖는다. 다른 경우에는 임의의 다른 적합한 백분율을 사용할 수 있다. 예를 들어, 또 다른 예에서, 라운드 번호 R을 갖는 유명 라운드 R 제1 이벤트(또는 유명 목격자)의 적어도 미리 결정된 백분율(예를 들어, 40 %, 60 %, 80 % 등)이 X의 후손이거나 및/또는 X를 볼 수 있도록 R이 최소 정수인 경우, 이벤트 X는 R의 "수신된 라운드"를 갖는다.
일부 경우에, 이벤트 X의 "수신된 세대"는 다음과 같이 계산될 수 있다. 이벤트 X를 식별할 수 있는 각 라운드 R 제1 이벤트를 생성 및/또는 정의한 구성원을 찾는다. 그런 다음 X를 식별할 수 있는 해당 구성원에 의한 가장 빠른 이벤트의 세대 번호를 결정한다. 그런 다음 X의 "수신된 세대"를 해당 목록의 중앙값이 되도록 정의한다.
일부 경우에, 이벤트 X의 "수신된 타임스탬프" T는 X를 식별 및/또는 보는 각 구성원에 의한 제1 이벤트를 포함하는 이벤트의 타임스탬프의 중앙값일 수 있다. 예를 들어, 이벤트(1401)의 수신된 타임스탬프는 이벤트(1402, 1403, 1403 및 1408)에 대한 타임스탬프의 값의 중앙값일 수 있다. 일부 경우에, 이벤트 1401에 대한 타임스탬프가 중앙값 계산에 포함될 수 있다. 다른 경우에, X에 대해 수신된 타임스탬프는 X를 식별하거나 보기 위해 각 구성원에 의한 제1 이벤트인 이벤트의 타임스탬프 값의 조합 또는 임의의 다른 값일 수 있다. 예를 들어, X에 대한 수신된 타임스탬프는 타임스탬프의 평균, 타임스탬프의 표준 편차, 수정된 평균(예를 들어, 계산으로부터 가장 빠른 타임스탬프 및 최신 타임스탬프를 제거함) 및/또는 등등에 기초할 수 있다. 또 다른 경우에는 확장 중앙값을 사용할 수 있다.
일부 경우에, 이벤트의 전체 순서 및/또는 컨센서스 순서는 그 수신된 라운드(순서 값이라고도함)로 이벤트를 정렬하고, 그 수신된 타임스탬프에 의해 동점을 구분하고, 그 서명을 통해 이들 동점을 구분함으로써 계산된다. 다른 경우, 이벤트의 전체 순서는 그 수신된 라운드에 의해 이벤트를 정렬하고, 그 수신된 세대에 의해 동점을 구분하고, 서명에 의해 이들 동점을 구분함으로써 계산될 수 있다. 전술한 단락은 이벤트의 수신된 라운드, 수신된 타임스탬프, 및/또는 수신된 세대를 계산 및/또는 정의하는 데 사용되는 기능을 구체화한다.
다른 경우에, 각 이벤트의 서명을 사용하는 대신에, 해당 라운드에서 수신된 세대 및/또는 동일한 수신된 라운드를 갖는 유명 이벤트 또는 유명 목격자의 서명과 XOR된 해당 이벤트의 서명이 사용될 수 있다. 다른 경우, 이벤트 서명의 임의의 다른 적합한 조합을 사용하여 이벤트의 컨센서스 순서를 정의하기 위해 동점을 구분할 수 있다.
또 다른 예에서는 "수신된 세대"를 목록의 중앙값으로서 정의하는 대신 "수신된 세대"는 목록 자체에 의해 정의할 수 있다. 그 후 수신된 세대에 의거하여 정렬할 때, 2개의 수신된 세대가 그 목록의 중간 요소에 의해 비교되어, 중간 직전의 요소에 의해 동점을 구분하고, 중간 직후 요소에 의해 이들 동점을 구분하고, 동점이 구분될 때까지 지금까지 사용된 것들 이전의 요소와 이후의 요소 사이를 번갈아 가며 계속한다.
일부 경우에, 중간 타임스탬프는 "확장 중앙값"으로 대체될 수 있다. 이러한 경우 타임스탬프의 목록은 단일 수신 타임스탬프가 아닌 각 이벤트에 대해 정의될 수 있다. 이벤트 X에 대한 타임스탬프 목록에는 X를 식별 및/또는 보는 각 구성원에 의한 제1 이벤트가 포함될 수 있다. 예를 들어, 도 14에서, 이벤트(1401)에 대한 타임스탬프의 목록은 이벤트(1402, 1403, 1403 및 1408)에 대한 타임스탬프를 포함할 수 있다. 이벤트(1401)에 대한 타임스탬프가 포함될 수도 있다. 타임스탬프 목록으로 동점을 구분할 때(즉, 2개의 이벤트가 동일한 수신된 라운드를 가짐), 각 이벤트의 목록의 중간 타임스탬프(또는 동일한 길이로 이루어지는 경우, 2개의 중간 타임스탬프의 제1 또는 제2 타임스템프 중 미리 결정된 것)가 비교될 수 있다. 이러한 타임스탬프가 같으면 중간 타임스탬프 직후의 타임스탬프가 비교될 수 있다. 이러한 타임스탬프가 같으면 중간 타임스탬프 직전의 타임스탬프가 비교될 수 있다. 이들 타임스탬프도 동일한 경우, 이미 비교된 3개의 타임스탬프 이후의 타임스탬프가 비교된다. 이것은 동점이 구분될 때까지 계속 교번될 수 있다. 위의 설명과 마찬가지로 두 목록이 동일한 경우 두 요소의 서명을 통해 동점이 구분될 수 있다.
또 다른 예에서는 "확장 중앙값" 대신 "잘린 확장 중앙값"을 사용할 수 있다. 이러한 경우 타임스탬프의 전체 목록은 각 이벤트에 저장되지 않는다. 대신 목록 중간 부근의 값 중 소수만이 저장되어 비교에 사용된다.
수신된 중간 타임스탬프는 잠재적으로 이벤트의 전체 순서를 계산하는 것에 추가로 다른 목적으로 사용될 수 있다. 예를 들어, Bob는 X에 대한 수신된 타임스탬프가 특정 마감일에 있거나 그 이전인, Alice가 동일한 계약서에 서명한 트랜잭션을 포함하는 이벤트 X가 존재하는 경우에만 계약에 의해 구속되는 데 동의하겠다는 계약에 서명할 수 있다. 이 경우 Bob는 위에서 설명한 바와 같이, "수신된 중간 타임스탬프"에 의해 나타나는 바와 같이, Alice가 마감일 이후에 서명한 경우 계약서에 구속받지 않는다.
일부 경우에 따라 컨센서스가 달성된 이후 분산 데이터베이스의 상태가 정의될 수 있다. 예를 들어, S(R)이 라운드 R에서 유명 목격자가 볼 수 있는 이벤트들의 세트인 경우, 결국 S(R)의 모든 이벤트는 알려진 수신된 라운드 및 수신된 타임스탬프를 가질 것이다. 이 시점에서 S(R) 이벤트에 대한 컨센서스 순서는 알려져 있고 변경되지 않을 것이다. 이 시점에 도달하면 구성원은 이벤트 및 그 순서의 표현을 계산 및/또는 정의할 수 있다. 예를 들어 구성원은 S(R) 이벤트의 해시 값을 그 컨센서스 순서로 계산할 수 있다. 그런 다음 구성원은 해시 값에 디지털 서명을 하고 해당 구성원이 정의한 다음 이벤트에 해시 값을 포함할 수 있다. 이것은 S(R)의 이벤트가 변경되지 않을 주어진 순서를 갖는다고 해당 구성원이 결정했다는 것을 다른 구성원들에게 알리는 데 사용될 수 있다. 구성원 중 적어도 M 명(또는 임의의 다른 적합한 수 또는 백분율의 구성원)이 S(R)의 해시 값에 서명한(따라서 해시 값이 나타내는 순서에 합의한) 이후, 구성원들의 서명 목록과 함께 이벤트의 해당 컨센서스 목록은 S(R)의 이벤트에 대해 주장된 것으로서 해당 컨센서스 순서를 증명하기 위해 사용될 수 있는 단일 파일(또는 다른 데이터 구조)을 형성할 수 있다. 다른 경우에, 이벤트가 (여기서 설명된 바와 같은) 분산 데이터베이스 시스템의 상태를 업데이트하는 트랜잭션을 포함하면, 해시 값은 컨센서스 순서로 S(R)의 이벤트 트랜잭션을 적용한 이후 분산 데이터베이스 시스템의 상태로 이루어질 수 있다.
일부 경우에, M(위에서 설명한 바와 같이)은 전체 구성원 수의 분율, 백분율 및/또는 값뿐만이 아닌 각 구성원에게 할당된 가중치 값(여기서는 지분 값이라고도 지칭됨)을 기반으로 할 수 있다. 그러한 경우, 각 구성원은 분산 데이터베이스 시스템에서 그 관심 및/또는 영향과 연관된 지분을 갖는다. 그러한 지분은 가중치 값 및/또는 지분 값이 될 수 있다. 해당 구성원에 의해 정의된 각 이벤트는 그를 정의한 구성원의 가중치 값을 갖는다고 할 수 있다. 이때, M은 모든 구성원의 전체 지분의 분율일 수 있으며 지분 값 기준 및/또는 임계값이라고 지칭될 수 있다. M에 의존하는 것으로 전술한 이벤트는 적어도 M의 지분 합을 갖는 구성원 세트가 합의(즉, 지분 값 기준을 충족)할 때 발생한다. 따라서 그 지분을 기반으로 특정 구성원은 컨센서스 순서가 도출되는 방식 및 시스템에 더 큰 영향을 미칠 수 있다. 일부 경우에, 이벤트의 트랜잭션은 하나 이상의 구성원의 지분을 변경하고, 새 구성원을 추가하고 및/또는 구성원을 삭제할 수 있다. 그러한 트랜잭션이 R의 수신된 라운드를 갖는 경우, 이때, 수신된 라운드가 계산된 후 라운드 R 목격자 이후의 이벤트는 수정된 지분 및 수정된 구성원 목록을 사용하여 라운드 번호 및 다른 정보를 다시 계산할 것이다. 일부 경우에, 라운드 R 이벤트가 유명한지 여부에 대한 투표는 기존 지분 및 구성원 목록을 사용할 수 있지만 R 이후의 라운드에 대한 투표는 새 지분 및 구성원 목록을 사용할 수 있다.
추가의 몇몇 예에서, 미리 결정된 가중치 또는 지분 값이 분산 데이터베이스 시스템의 각 구성원에 할당될 수 있다. 따라서, 비잔틴 합의 프로토콜을 통해 도달된 컨센서스는 잠재적인 Sybil 공격으로부터 모집단 또는 구성원 그룹을 보호하기 위해 연관된 보안 레벨로 구현될 수 있다. 일부 경우에, 이러한 보안 레벨은 수학적으로 보장될 수 있다. 예를 들어 공격자는 hashDAG에 등록된 이벤트의 부분 순서를 재조직하여 하나 이상의 이벤트 결과에 영향을 주기를 원할 수 있다. 분산 데이터베이스의 구성원간에 컨센서스 및/또는 최종 합의에 도달하기 전에 하나 이상의 hashDAG 부분 순서를 재조직하여 공격을 수행할 수 있다. 경우에 따라 다수의 경쟁 이벤트가 발생한 타이밍과 관련하여 논쟁이 발생할 수 있다. 전술한 바와 같이, 이벤트와 연관된 결과는 M의 값에 의존할 수 있다. 이와 같이, 일부 경우에, Alice 또는 Bob 중 어느 쪽이 이벤트(및/또는 이벤트 내의 트랜잭션)에 대해 먼저 작용했는지 여부의 결정은 합의한 투표 구성원의 투표 수 또는 지분 합이 M의 값보다 크거나 같을 때 이루어질 수 있다.
이벤트 순서 재조직 공격의 일부 유형은 공격자가 M의 값에 따라 적어도 N의 분율 또는 백분율(예를 들어, 1/10, 1/4, 1/3 등)을 제어하는 것을 필요로 한다. 일부 경우에, M의 값은 예를 들어 그룹 또는 모집단 N의 2/3이 되도록 구성될 수 있다. 그러한 경우 그룹 또는 그룹 또는 모집단의 구성원 중 2/3을 초과한 구성원이 공격의 참가자가 아닌한, 공격의 일부가 아닌 구성원에 의해 합의가 도달될 수 있으며 분산 데이터베이스는 컨센서스에 도달하고 의도한 대로 작동할 것이다. 또한 공격자는 데이터베이스를 수렴하지 못하게 하거나, 공격자가 원하는 대로 분산 데이터베이스가 수렴하게 하거나(예를 들어, 데이터베이스가 불공정 순서로 수렴하게 함), (예를 들어, 두 개의 모순 상태 모두에 공식적으로 구성원이 합의하도록) 두 개의 상이한 상태로 수렴하게 하거나, 화폐를 위조하기 위해(분산 데이터베이스 시스템이 암호 화폐에서 동작할 때) 공격 기간 동안 공격자가 그룹 또는 모집단 중 적어도 N 빼기 M(N-M) 구성원(이 예에서는 구성원의 1/3)을 제어해야 한다.
일부 구현에서, 그룹 또는 모집단의 각 구성원에게 가중치 또는 지분을 할당할 수 있으며 N은 모든 그 가중치 또는 지분의 총 합일 것이다. 따라서 신용성 또는 신뢰성을 기반으로 구성원 또는 모집단 그룹의 서브세트에 더 높은 가중치 또는 지분 값이 할당될 수 있다. 예를 들어, 공격에 관여할 가능성이 적은 또는 부정직한 행동에 참여할 성향이 없음을 나타내는 일부 지시자를 지닌 구성원에게 더 높은 가중치 또는 지분 값을 할당할 수 있다.
일부 경우에, 분산 데이터베이스 시스템 보안 레벨은 M을 N의 더 큰 분율이 되도록 선택하는 것에 의해 증가될 수 있다. 예를 들어, M이 그룹 또는 모집단 구성원의 수(N)의 2/3보다 큰 최소 정수에 대응하고, 모든 구성원이 동일한 투표 파워를 가진 경우 공격자는 공격자가 아닌 구성원간에 합의가 이루어지지 못하게 하고 분산 데이터베이스가 컨센서스에 도달하지 못하게 하기 위해 적어도 N의 1/3을 초과한 제어 또는 영향력을 가져야할 필요가 있다. 마찬가지로, 이러한 경우, 공격자는 분산 데이터베이스 시스템이 (예를 들어, 데이터베이스가 불공정한 순서에 수렴하게 하기 위해) 공격자가 원하는 대로 합의에 수렴 및/또는 도달하게 하거나, (예를 들어, 구성원들이 두 개의 상반된 상태들 모두에 공식적으로 합의하도록) 두 개의 상이한 상태에 수렴하게 하거나 또는 (분산 데이터베이스 시스템이 암호 화폐에서 동작할 때) 화폐를 위조하기 위해 적어도 N의 1/3을 초과한 제어 또는 영향력을 가져야할 필요가 있을 것이다.
일부 경우에, 예를 들어, 부정직한 구성원은 두 가지 방법으로 투표하여 분산 데이터베이스를 두 가지 상태로 수렴시킬 수 있다. 예를 들어 N=300이고 100명의 구성원이 부정직하다면 200명의 정직한 구성원이 있고 예를 들어, 트랜잭션에 대해 100 명은 "예"에 투표하고 100 명은 "아니오"에 투표한다. 100명의 부정직한 구성원이, 100명의 부정직한 구성원이 "예"에 투표하였다는 메시지(또는 이벤트)를 100명의 정직한 "예" 투표자에게 송신하면, 100명의 정직한 "예" 투표자는 최종 컨센서스가 "예"이라고 믿을 것이며, 그 이유는 이들이 구성원 중 2/3 명이 "예"에 투표하였다고 믿을 것이기 때문이다. 마찬가지로 100명의 부정직한 구성원이, 100명의 부정직한 구성원이 "아니오"에 투표하였다는 메시지(또는 이벤트)를 100명의 정직한 "아니오" 투표자에게 송신하면, 100명의 정직한 "아니오" 투표자는 최종 컨센서스가 "아니오"라고 믿을 것이며, 그 이유는 그들이 2/3명의 구성원이 "아니오"에 투표하였다고 믿을 것이기 때문이다. 따라서 이 상황에서 일부 정직한 구성원은 컨센서스가 "예"라고 믿고 다른 정직한 구성원은 컨센서스가 "아니오"라고 믿어서 분산 데이터베이스가 2개의 다른 상태에 수렴하도록 한다. 그러나 부정직한 구성원의 수가 100 명 미만인 경우 부정직한 구성원이 결국 "예" 또는 "아니오" 투표 모두를 200(즉, N의 2/3)을 초과하게 만들 수 없을 것이므로 정직한 구성원은 궁극적으로 단일 값("예" 또는 "아니오")에 수렴할 것이다. M의 다른 적합한 값은 분산 데이터베이스 시스템의 애플리케이션의 명세 및/또는 특정 요구 사항에 따라 사용될 수 있다.
일부 다른 경우에, 구성원이 비균등 투표 파워를 가질 때, 예로서, 가장 신뢰할 수 있거나 신용있는 투표자가 한 단위의 투표 파워(예를 들어, 가중치 값 또는 지분 값)을 가지고 나머지 구성원이 일 단위의 분율을 가지는 경우의 다음과 같은 투표권을 가질 때, 지분 또는 가중치 합이 M의 값에 도달하면 합의가 이루어질 수 있다. 따라서 일부 경우에, 대다수의 구성원이 최종 결정에 따르지 않지만, 대다수의 신뢰할 수 있는 또는 신용도 있는 구성원이 합의할 때에도 때때로 합의에 도달할 수 있다. 즉, 신뢰할 수 없는 구성원의 투표 파워가 희석되어 공격 가능성을 방지하거나 완화할 수 있다. 따라서 일부 경우에 M 구성원의 카운트가 아니라 M의 전체 지분을 가진 구성원의 컨센서스를 요구함으로써 보안 레벨을 높일 수 있다. M에 대한 더 높은 값은 분산 데이터베이스 시스템이 수렴하도록 하기 위해 더 많은 지분(예를 들어, 비가중 시스템에서 더 많은 수의 구성원)이 합의해야 함을 의미한다.
일부 경우에, 분산 데이터베이스 시스템은 표 1에 나타낸 프로토콜 및 이들의 임의의 조합을 포함하지만 이에 제한되지 않는 다수의 참여 보안 프로토콜을 지원할 수 있다. 표 1에 제시된 프로토콜은 그룹 또는 모집단 구성원에게 지분 또는 가중치를 할당하는 다수의 기술을 설명한다. 표 1의 프로토콜은 예를 들어, Bitcoin과 같은 암호 화폐, 기본 암호 화폐의 파생물, 분산 데이터베이스 시스템 내에서 정의된 암호 화폐 또는 임의의 다른 적합한 유형의 암호 화폐로 구현될 수 있다. 암호 화폐와 관련하여 설명되었지만, 다른 경우에, 표 1에 표시된 프로토콜은 임의의 다른 적합한 분산 데이터베이스 시스템 및 지분을 할당하는 임의의 다른 방법과 함께 사용할 수 있다.
Figure 112019135805916-pat00002
다른 것이 아닌 하나의 참여 보안 프로토콜을 선택하는 것은 특정 애플리케이션에 의존할 수 있다. 예를 들어, 하이브리드 프로토콜은 캐주얼 저가 트랜잭션, 비즈니스 협업 애플리케이션, 컴퓨터 게임 및 보안과 최소한의 계산 비용 사이의 절충이 계산 비용 쪽에 치우쳐지는 다른 유사한 유형의 애플리케이션의 구현에 적합할 수 있다. 하이브리드 프로토콜은 한명의 불만을 가진 구성원이 구성원 그룹 또는 모집단을 분열시키거나 공격하는 것을 방지하는 데 효과적일 수 있다.
또 다른 예를 들면, 보안 요구 사항이 최우선이고 모집단 구성원이 낯선 사람이거나 알려 지지 않았을 때 허가형 프로토콜이 바람직할 수 있다. 허가형 프로토콜은 예를 들어, 은행 및 컨소시엄에 묶여있는 유사한 유형의 금융 엔티티 또는 엔티티들에 대한 애플리케이션을 구현하는 데 사용될 수 있다. 이 경우 컨소시엄의 은행이 모집단의 구성원이 될 수 있으며 각 은행은 단일 구성원으로 참여하도록 제한될 수 있다. 따라서 M은 모집단의 2/3보다 큰 최소 정수로 설정될 수 있다. 은행은 상호간에 개별 엔티티로 서로 신뢰하지 않고 분산 데이터베이스 시스템이 제공하는 보안 레벨에 의존할 수 있으며, 분산 데이터베이스 시스템은 이 예에서는 부정직한 구성원의 수를 모집단의 은행의 1/3 이하로 제약한다 .
또 다른 예를 들면, 모집단에 많은 수의 낯선 사람이나 알려 지지 않은 구성원이 포함되어 있는 경우에는 소실 증명 프로토콜이 구현될 수 있다. 그러한 경우, 공격자는 M에게 주어진 값을 초과하는 전체 지분 중의 분율을 초과한 제어를 획득할 수 있다. 그러나 참여 비용은 공격의 비용이 임의의 예상되는 이익 또는 수익을 초과하도록 충분히 높게 설정될 수 있다.
다른 예를 들면, 지분 증명 프로토콜은 더 큰 그룹에 적합할 수 있다. 지분 증명 프로토콜은 대략 동일한 부분에서 상당한 양의 암호 화폐를 소유한 구성원의 큰 그룹이 존재할 때 최적의 또는 바람직한 해결책일 수 있으며, 파괴적인 구성원이 구성원의 큰 그룹이 종합적으로 소유한 양보다 높은 암호 화폐 양을 취득하는 것은 예견할 수 없거나 가능성이 없다.
다른 경우에는 표 1에 나타난 프로토콜 또는 프로토콜 조합에서 다른 추가적인 또는 더 복잡한 프로토콜이 파생될 수 있다. 예를 들어, 분산 데이터베이스 시스템은 하이브리드 프로토콜을 구현하도록 구성될 수 있으며, 하이브리드 프로토콜은 미리 결정된 시간 기간 동안 허가형 프로토콜을 따르고 결국 구성원들이 투표 지분을 서로 판매할 수 있게 한다. 또 다른 예를 들면, 분산 데이터베이스 시스템은 소실 증명 프로토콜을 구현하도록 구성될 수 있으며, 이벤트 또는 관련 트랜잭션의 값이 임계값 또는 미리 결정된 암호 화폐 값에 도달하면 결국 지분 증명 프로토콜로 전환할 수 있다.
전술한 용어, 정의 및 알고리즘은 도 14 내지 도 17b에서 설명된 실시예 및 개념을 설명하기 위해 사용된다. 도 16a 및 도 16b는 수학적 형태로 도시된 컨센서스 방법 및/또는 프로세스의 제1 예시적인 애플리케이션을 도시한다. 또한, 도 17a 및 도 17b는 수학적 형태로 나타낸 컨센서스 방법 및/또는 프로세스의 제2 예시적인 애플리케이션을 도시한다.
다른 경우 및 본 명세서에서보다 상세하게 설명되는 바와 같이, 데이터베이스 수렴 모듈(211)은 초기에 파라미터에 대한 값의 벡터를 정의할 수 있고, 다른 컴퓨팅 디바이스로부터의 파라미터에 대한 추가 값을 수신할 때 값의 벡터를 업데이트할 수 있다. 예를 들어, 데이터베이스 수렴 모듈(211)은 통신 모듈(212)을 통해 다른 컴퓨팅 디바이스로부터 파라미터에 대한 추가 값을 수신할 수 있다. 일부 예들에서, 데이터베이스 수렴 모듈은 본 명세서에서보다 상세히 설명된 바와 같이, 파라미터에 대한 값의 정의 및/또는 업데이트된 벡터에 기초하여 파라미터에 대한 값을 선택할 수 있다. 일부 실시예에서, 데이터베이스 수렴 모듈(211)은 또한 본 명세서에서 더 상세히 설명되는 바와 같이, 통신 모듈(212)을 통해 다른 컴퓨팅 디바이스로 파라미터 값을 송신할 수 있다.
일부 실시예에서, 데이터베이스 수렴 모듈(211)은 메모리(220)에 (1) 파라미터에 대한 값의 정의 및/또는 업데이트된 벡터 및/또는 (2) 파라미터에 대한 값의 정의 및/또는 업데이트된 벡터에 기초한 파라미터에 대한 선택된 값을 저장하도록 신호를 메모리(220)에 송신할 수 있다. 예를 들어, (1) 파라미터에 대한 값의 정의 및/또는 업데이트된 벡터 및/또는 (2) 파라미터에 대한 값의 정의 및/또는 업데이트된 벡터에 기초한 파라미터에 대한 선택된 값은 메모리(220)에 구현된 분산 데이터베이스 인스턴스(221)에 저장될 수 있다. 일부 실시예에서, 분산 데이터베이스 인스턴스(221)는 도 1에 도시된 분산 데이터베이스 시스템(100)의 분산 데이터베이스 인스턴스(114, 124, 134, 144)와 유사할 수 있다.
도 2에서, 데이터베이스 수렴 모듈(211)과 통신 모듈(212)은 프로세서(210)에서 구현되는 것으로 도 2에 도시된다. 다른 실시예에서, 데이터베이스 수렴 모듈(211) 및/또는 통신 모듈(212)은 메모리(220)에서 구현될 수 있다. 또 다른 실시예에서, 데이터베이스 수렴 모듈(211) 및/또는 통신 모듈(212)은 하드웨어 기반(예를 들어, ASIC, FPGA 등)일 수 있다.
도 7은 일 실시예에 따라 이벤트를 동기화하는 2개의 컴퓨팅 디바이스의 신호 흐름도를 도시한다. 특히, 일부 실시예에서, 분산 데이터베이스 인스턴스(703 및 803)는 수렴을 획득하기 위해 이벤트를 교환할 수 있다. 컴퓨팅 디바이스(700)는 컴퓨팅 디바이스(700)와의 관계에 기초하여, 컴퓨팅 디바이스(700)와의 근접성에 기초하여, 컴퓨팅 디바이스(700)와 연관된 순서화된 목록에 기초하여 및/또는 등등으로 컴퓨팅 디바이스(800)와 랜덤으로 동기화하도록 선택할 수 있다. 일부 실시예에서, 컴퓨팅 디바이스(800)가 분산 데이터베이스 시스템에 속한 컴퓨팅 디바이스들의 세트로부터 컴퓨팅 디바이스(700)에 의해 선택될 수 있기 때문에, 컴퓨팅 디바이스(700)는 연속적으로 다수회 컴퓨팅 디바이스(800)를 선택할 수 있거나, 한동안 컴퓨팅 디바이스(800)를 선택하지 않을 수 있다. 다른 실시예에서, 이전에 선택된 컴퓨팅 디바이스의 표시는 컴퓨팅 디바이스(700)에 저장될 수 있다. 이러한 실시예에서, 컴퓨팅 디바이스(700)는 컴퓨팅 디바이스(800)를 다시 선택할 수 있기 전에 미리 결정된 수의 선택을 대기할 수 있다. 상술한 바와 같이, 분산 데이터베이스 인스턴스(703 및 803)는 컴퓨팅 디바이스(700)의 메모리 및 컴퓨팅 디바이스(800)의 메모리에 각각 구현될 수 있다.
도 3 내지 도 6은 일 실시예에 따른 hashDAG의 예를 도시한다. 5명의 구성원이 있으며 각각은 어두운 수직선으로 표시된다. 각 원은 이벤트를 나타낸다. 이벤트의 2개의 하향 선은 2개의 이전 이벤트의 해시를 나타낸다. 이 예의 모든 이벤트는 각 구성원의 제1 이벤트를 제외하고 2개의 하향 선(동일한 구성원에 대한 한 개의 어두운 선과 다른 구성원에 대한 한 개의 밝은 선)을 갖는다. 시간은 위쪽으로 진행된다. 또한, 도 3 내지 도 6을 참조하면, 분산 데이터베이스의 컴퓨팅 디바이스는 Alice, Bob, Carol, Dave 및 Ed로 표시된다. 이러한 표시는 도 1과 관련하여 도시되고 설명된 컴퓨팅 디바이스(110, 120, 130 및 140)와 구조적 및 기능적으로 유사한 컴퓨팅 디바이스를 지칭하는 것으로 이해되어야 한다.
예시적인 시스템 1: 컴퓨팅 디바이스(700)는 Alice로 불리며, 컴퓨팅 디바이스(800)는 Bob이라 불리는 경우, 이들 사이의 동기화는 도 7에 도시된 바와 같을 수 있다. Alice와 Bob 사이의 동기화는 다음과 같을 수 있다:
- Alice는 분산 데이터베이스(703)에 저장된 이벤트를 Bob에게 송신한다.
- Bob은 다음을 포함하는 새로운 이벤트를 작성 및/또는 정의한다.
-- Bob가 생성 및/또는 정의한 최종 이벤트의 해시
-- Alice가 생성 및/또는 정의한 최종 이벤트의 해시
-- 상기의 Bob에 의한 디지털 서명
- Bob는 분산 데이터베이스(803)에 저장된 이벤트를 Alice에게 송신한다.
-- Alice는 새로운 이벤트를 생성 및/또는 정의한다.
- Alice가 Bob에게 해당 이벤트를 보낸다.
- Alice는 hashDAG의 함수로 이벤트의 전체 순서를 계산한다.
- Bob는 hashDAG의 함수로 이벤트의 전체 순서를 계산한다.
임의의 주어진 시간에, 구성원은 컴퓨팅 디바이스 및/또는 각 이벤트를 생성 및/또는 정의한 분산 데이터베이스 인스턴스와 연관된 식별자와 함께, 지금까지 수신된 이벤트를 저장할 수 있다. 초기 이벤트(부모 해시가 없음)와 각 새로운 구성원에 대한 제1 이벤트(이들을 초대한 기존 구성원의 이벤트를 나타내는 하나의 부모 이벤트 해시를 가짐)를 제외하면, 각 이벤트는 두 개의 이전 이벤트의 해시를 포함한다. 이 이벤트들의 세트를 나타내는 다이어그램을 그릴 수 있다. 각 구성원에 대해 수직선을 표시할 수 있고 해당 구성원이 생성 및/또는 정의한 각 이벤트에 대해 해당 선에 점을 표시할 수 있다. 이벤트(상위 점표시)가 이전 이벤트(하위 점표시)의 해시를 포함할 때마다 대각선이 두 점표시 사이에 그려진다. 이벤트는 해당 이벤트의 해시를 통해 해당 이벤트가 다른 이벤트를 참조할 수 있는 경우(직접 또는 중개 이벤트를 통해) 다른 이벤트에 링크되어 있다고 할 수 있다.
예를 들어, 도 3은 hashDAG(600)의 일 예를 나타낸다. 이벤트(602)는 Carol과 동기화의 결과로서 그리고 동기화 이후 Bob에 의해 생성 및/또는 정의된다. 이벤트(602)는 이벤트(604)(Bob에 의해 생성 및/또는 정의된 이전 이벤트)의 해시 및 이벤트(606)(Carol에 의해 생성 및/또는 정의된 이전 이벤트)의 해시를 포함한다. 일부 실시예에서, 예를 들어, 이벤트(602) 내에 포함된 이벤트(604)의 해시는 그 직계 조상 이벤트인 이벤트(608 및 610)에 대한 포인터를 포함한다. 이와 같이, Bob는 이벤트(602)를 사용하여 이벤트(608 및 610)를 참조하고 이전 이벤트에 대한 포인터를 사용하여 hashDAG를 재구성할 수 있다. 일부 경우에, 이벤트(602)는 이전의 조상 이벤트를 통해 hashDAG(600)의 이벤트 각각을 참조할 수 있기 때문에, 이벤트(602)는 hashDAG(600)에서 다른 이벤트에 링크된다고 말할 수 있다. 예를 들어, 이벤트(602)는 이벤트(604)를 통해 이벤트(608)에 링크된다. 다른 예로서, 이벤트(602)는 이벤트(606) 및 이벤트(612)를 통해 이벤트(616)에 링크된다.
예시적인 시스템 2: 예시적인 시스템 1의 시스템이며, 이벤트에는 또한 트랜잭션의 "페이로드" 또는 기록할 다른 정보를 포함한다. 이러한 페이로드는 컴퓨팅 디바이스의 직전 이벤트 이후에 발생 및/또는 정의된 임의의 트랜잭션 및/또는 정보로 이벤트를 업데이트하는 데 사용할 수 있다. 예를 들어, 이벤트(602)는 이벤트(604)가 생성 및/또는 정의된 이래로 Bob에 의해 수행되는 임의의 트랜잭션을 포함할 수 있다. 따라서, 이벤트(602)를 다른 컴퓨팅 디바이스와 동기화할 때, Bob는 이 정보를 공유할 수 있다. 따라서 Bob가 수행한 트랜잭션을 이벤트와 연관시키고 이벤트를 사용하여 다른 구성원과 공유할 수 있다.
예시적인 시스템 3: 예시적인 시스템 1의 시스템이며, 이벤트는 디버깅, 진단 및/또는 다른 목적에 유용한 현재 시간 및/또는 날짜를 포함한다. 시간 및/또는 날짜는 컴퓨팅 디바이스(예를 들어, Bob)가 이벤트를 생성 및/또는 정의하는 로컬 시간 및/또는 날짜일 수 있다. 그러한 실시예들에서, 그러한 로컬 시간 및/또는 날짜는 나머지 디바이스들과 동기화되지 않는다. 다른 실시예에서, 시간 및/또는 날짜는 (예를 들어, 이벤트를 교환할 때) 디바이스들에 걸쳐 동기화될 수 있다. 또 다른 실시예에서, 글로벌 타이머가 시간 및/또는 날짜를 결정하는 데 사용될 수 있다.
예시적인 시스템 4: 예시적인 시스템 1의 시스템이며, Alice는 Bob에 의해 생성 및/또는 정의된 이벤트도 이러한 이벤트의 조상 이벤트도 Bob에게 보내지 않는다. 이벤트 x는 y가 x의 해시를 포함하거나 y가 x의 조상인 이벤트의 해시를 포함하면 이벤트 y의 조상이다. 마찬가지로, 그러한 실시예들에서, Bob는 Alice에 의해 아직 저장되지 않은 이벤트들을 Alice에 송신하고, Alice에 의해 이미 저장된 이벤트들을 송신하지 않는다.
예를 들어, 도 4는 이벤트(622)(검은 색 원)의 조상 이벤트(점표시 원) 및 후손 이벤트(줄무늬 원)를 예시하는 예시적인 hashDAG(620)를 도시한다. 이 선들은 이벤트에 대한 부분 순서를 확립하고, 조상은 검은 이벤트 전에 나오고 후손은 검은 이벤트 뒤에 온다. 부분 순서는 흰색 이벤트가 검은 이벤트의 전인지 후인지 여부를 나타내지 않으므로 전체 순서가 그 시퀀스를 결정하는 데 사용된다. 다른 예로서, 도 5는 하나의 특정 이벤트(중실 원) 및 각 구성원이 그 이벤트(줄무늬 원)의 표시를 수신한 최초 시간을 예시하는 hashDAG의 예를 도시한다. Carol이 Dave와 동기화하여 이벤트(624)를 생성 및/또는 정의할 때 Dave는 이벤트(622)의 조상 이벤트를 Carol에게 보내지 않으며, 그 이유는 Carol이 이미 이러한 이벤트를 인식하고 이러한 이벤트를 수신했기 때문이다. 대신 Dave는 Carol이 아직 Carol의 분산 데이터베이스 인스턴스에서 수신 및/또는 저장하지 않은 이벤트를 Carol에게 보낸다. 일부 실시예에서, Dave는 Carol이 이전에 수신한 이벤트에 대해 Dave의 hashDAG가 나타내는 바에 기초하여 Carol에게 보낼 이벤트를 식별할 수 있다. 이벤트(622)는 이벤트(626)의 조상이다. 따라서 이벤트(626)의 시간에 Dave는 이미 이벤트(622)를 수신했다. 도 4는 Dave가 Carol으로부터 이벤트(622)를 수신한 Bob으로부터 이벤트(622)를 수신한 Ed로부터 이벤트(622)를 수신한 것을 도시한다. 또한, 이벤트(624)의 시점에서, 이벤트(622)는 Carol에 의해 생성 및/또는 정의된 Dave가 수신한 최종 이벤트이다. 따라서 Dave는 이벤트(622) 및 그 조상 이외에 Dave가 저장한 이벤트를 Carol에게 보낼 수 있다. 또한 Dave로부터 이벤트(626)를 수신하면 Carol은 Carol의 분산 데이터베이스 인스턴스에 저장된 이벤트의 포인터를 기반으로 hashDAG를 재구성할 수 있다. 다른 실시예에서, Dave는, Carol이 Dave에게 이벤트(622)를 송신하고(도 4에 나타내지 않음) Dave가 이벤트(622)(및 그 내부의 레퍼런스)를 사용하여 Carol이 이미 수신한 이벤트를 식별하는 것에 기초하여 Carol에게 송신할 이벤트를 식별할 수 있다.
예시적인 시스템 5: 예시적인 시스템 1의 시스템이며, 두 구성원이 수신자가 해당 이벤트의 조상을 수신 및/또는 저장할 때까지 이벤트가 전송되지 않도록 하는 순서로 다른 구성원에게 이벤트를 송신한다. 따라서, 송신자는 가장 오래된 것부터 가장 최신의 것으로 이벤트를 송신함으로써, 2개의 해시를 이미 수신된 2개의 조상 이벤트와 비교함으로써, 수신자는 이벤트가 수신될 때 각 이벤트의 2개의 해시를 검사할 수 있다. 송신자는 송신자의 hashDAG의 현재 상태(예를 들어, 송신자에 의해 정의된 데이터베이스 상태 변수) 및 수신기가 수신한 것을 나타내는 hashDAG에 기초하여 수신기에 송신할 이벤트를 식별할 수 있다. 도 3을 참조하면, 예를 들어, Bob가 이벤트(602)를 정의하기 위해 Carol과 동기화하는 경우, Carol은 이벤트(619)가 Carol이 수신한 Bob에 의해 생성 및/또는 정의된 최종 이벤트임을 식별할 수 있다. 따라서 Carol은 Bob가 해당 이벤트와 그 조상을 알고 있다고 결정할 수 있다. 따라서, Carol은 Bob 이벤트(618) 및 이벤트(616)를 먼저 송신할 수 있다(즉, Carol이 수신한 Bob가 아직 수신하지 못한 가장 오래된 이벤트). 그런 다음 Carol은 Bob 이벤트(612)를 보내고, 그후, 이벤트(606)를 보낼 수 있다. 이렇게 하면 Bob가 이벤트를 쉽게 링크하고 Bob의 hashDAG를 재구성할 수 있다. Carol의 hashDAG를 사용하여 Bob가 아직 수신하지 못한 이벤트를 식별하면 Bob이 Carol로부터 이벤트를 요청하지 않기 때문에 동기화의 효율성을 높이고 네트워크 트래픽을 줄일 수 있다.
다른 실시예에서, 가장 최근의 이벤트가 먼저 전송될 수 있다. 수신기가 2개의 이전 이벤트 중 하나를 아직 수신하지 못했다고(가장 최근 이벤트의 두 이전 이벤트의 해시 및/또는 가장 최근 이벤트의 이전 이벤트에 대한 포인터에 기초하여) 결정하는 경우, 수신기는 송신자에게 그러한 이벤트를 송신할 것을 요청한다. 이는 수신자가 가장 최근 이벤트의 조상을 수신 및/또는 저장할 때까지 발생할 수 있다. 도 3을 참조하면, 그러한 실시예에서, 예를 들어, Bob가 Carol으로부터 이벤트(606)를 수신할 때, Bob는 이벤트(606)의 이벤트(614) 및 이벤트(612)의 해시를 식별할 수 있다. Bob는 이벤트(604)를 생성 및/또는 정의할 때 이벤트(614)가 Alice로부터 이전에 수신되었음을 결정할 수 있다. 따라서 Bob는 Carol에게 이벤트(614)를 요청할 필요가 없다. Bob는 또한 이벤트(612)가 아직 수신되지 않았음을 결정할 수 있다. 그러면 Bob는 Carol에게 이벤트(612)를 요청할 수 있다. 그후 Bob는 이벤트(612) 내의 해시에 기초하여 Bob가 이벤트(616 또는 618)를 수신하지 못했음을 결정할 수 있으며 그에 따라 Carol으로부터 이들 이벤트를 요청할 수 있다. 이벤트(616 및 618)에 기초하여, Bob는 그후 그가 이벤트(606)의 조상을 수신했는지를 결정할 수 있다.
예시적인 시스템 6: 예시적인 시스템 5의 시스템이며, 구성원이 다음에 보낼 몇몇 이벤트 사이에서 선택할 때, 이벤트는 해당 구성원이 지금까지 생성 및/또는 정의한, 송신된 총 바이트 수를 최소화하도록 이벤트가 선택되는 추가 제약을 가진다. 예를 들어 Alice가 Bob에게 보내는 이벤트가 단 2개 남고, 하나는 100 바이트이고 Carol에 의해 생성 및/또는 정의되고 하나는 10 바이트이고 Dave에 의해 생성 및/또는 정의되며, 현재까지, 이 동기에서, Alice는 Carol에 의한 이벤트 중 200 바이트, 그리고, Dave에 의한 것을 210 바이트 이미 송신한 경우, 이때, Alice는 Dave 이벤트를 먼저 보내고 이후 Carol 이벤트를 보내야 한다. 210 + 10 <100 + 200이기 때문이다. 이것은 단일 구성원이 단일 거대한 이벤트 또는 작은 이벤트의 홍수를 송출하는 공격을 처리하는 데 사용할 수 있다. 트래픽이 대다수의 구성원들의 바이트 제한을 초과하는 경우(예시적인 시스템 7과 관련하여 설명됨), 예시적인 시스템 6의 방법은 공격자의 이벤트가 합법적인 사용자의 이벤트 이외에는 무시되는 것을 보장할 수 있다. 마찬가지로 큰 이벤트 전에 더 작은 이벤트를 송신함으로써 공격을 줄일 수 있다(연결을 설정하는 거대한 이벤트를 방어하기 위해). 또한 구성원이 단일 동기에서 각 이벤트를 보낼 수 없는 경우(예를 들어, 네트워크 제한, 구성원 바이트 제한 등으로 인해), 이때, 해당 구성원은, 공격자에 의해 정의 및/또는 생성된 이벤트들만을 송신하고 다른 구성원이 생성 및/또는 정의한 이벤트를 송신하지 않는(소수만 송신하는)것이 아니라, 각 구성원으로부터 몇몇 이벤트를 송신할 수 있다.
예시적인 시스템 7: 예시적인 시스템 1로부터의 시스템이며, Bob가 그가 해당 동기화 중에 수신할 최대 바이트 수를 나타내는 수치를 Alice에게 전송하고, Alice가 그녀의 제한으로 회신하는 추가적 제1 단계를 갖는다. Alice는 다음 이벤트가 이 제한을 초과할 때 송신을 중지한다. Bob도 마찬가지이다. 그러한 실시예에서, 이는 전달된 바이트 수를 제한한다. 이렇게 하면 수렴 시간이 늘어나지만 동기화 당 네트워크 트래픽 양은 줄어들 것이다.
예시적인 시스템 8: 예시적인 시스템 1로부터의 시스템이며, 동기화 프로세스를 시작할 때 다음 단계가 추가된다:
- Alice는 Bob가 생성 및/또는 정의한 이벤트를 건너 뛰거나 Bob가 생성 및/또는 정의한 이벤트의 조상인 이벤트를 건너 뛰고, 수신 및/또는 저장한 이벤트들의 세트 S를 식별한다.
- Alice는 S에서 각 이벤트를 생성 및/또는 정의한 구성원을 식별하고 Bob에게 구성원의 ID 번호 목록을 보낸다. Alice는 또한 그녀가 이미 수신 및/또는 저장한 각 구성원들에 의해 생성 및/또는 정의된 다수의 이벤트를 송신한다.
- Bob는 다른 구성원이 생성 및/또는 정의한 얼마나 많은 이벤트를 그가 수신하였는지의 목록으로 회신한다.
- 그런 다음 Alice는 Bob가 아직 받지 못한 이벤트만 Bob에게 보낸다. 예를 들어 Alice가 Bob에게 그녀가 Carol에 의해 생성 및/또는 정의된 100개의 이벤트를 수신했음을 Bob에게 알리고 Bob가 Carol에 의해 생성 및/또는 정의된 이벤트(95)개를 수신했다고 회신하면, 이때, Alice는 Carol에 의해 생성 및/또는 정의된 가장 최근의 이벤트 5개만 송신할 것이다.
예시적인 시스템 9: 예시적인 시스템 1로부터의 시스템이며, 치터(cheater) 식별 및/또는 처리를 위한 추가 메커니즘을 구비한다. 각 이벤트에는 해당 구성원이 생성 및/또는 정의한 최종 이벤트로부터의 해시("자체 해시")와 다른 구성원이 생성 및/또는 정의한 최종 이벤트로부터의 해시("외부 해시")의 2개의 해시가 포함된다. 구성원이 동일한 자체 해시를 가진 2개의 다른 이벤트를 생성 및/또는 정의하는 경우 그 구성원은 "치터"이다. Alice가 동일한 자체 해시로 그에 의해 생성 및/또는 정의된 2개의 이벤트를 수신하는 것에 의해 Dave가 치터라는 것을 발견하면, 그녀는 그가 치터라는 지시자를 저장하고 장래에 그와 동기화하지 않는다. 그녀가 그가 치터라는 것을 알았지만, 여전히 그와 계속해서 다시 동기화하고, 해당 사실을 기록하는 새로운 이벤트를 생성 및/또는 정의하는 경우, Alice는 치터가 되고, Alice가 추가로 Dave와 동기화하는 것을 학습한 다른 구성원은 Alice와의 동기화를 중단한다. 일부 실시예에서, 이는 단지 한 가지 방식으로 동기에 영향을 미친다. 예를 들어, Alice가 식별자 목록과 각 구성원에 대해 수신한 이벤트 수를 보낼 때, 치터의 ID나 카운트를 보내지 않으므로 Bob는 어떠한 대응 번호로도 회신하지 않는다. 그후, Alice는 Bob에게 그녀가 받은 치터의 이벤트를 보내고 이에 대해, 그녀는 Bob가 그러한 이벤트를 받았다는 표시를 받지 못한다. 동기화가 끝나면 Bob 또한 Dave가 치터라고 판단할 수 있고(그가 아직 Dave를 치터로 식별되지 않은 경우), Bob 또한 치터와의 동기화를 거부한다.
예시적인 시스템 10: 예시적인 시스템 9의 시스템이며, Alice가 그녀가 식별한 치터의 목록과 그녀가 저장하고 있는 치터의 이벤트의 목록을 Bob에게 송신함으로써 동기화 프로세스를 시작하고, Bob는 Alice가 식별한 치터에 추가로 그가 식별한 임의의 치터를 회신하는 추가구성을 갖는다. 그런 다음 그들은 정상적으로 계속되지만 서로 동기화할 때 치터의 카운트는 제공하지 않는다.
예시적인 시스템 11: 예시적인 시스템 1의 시스템이며, 동기화 동안 수신된 임의의 새로운 이벤트 내의 트랜잭션에 기초하여 반복적으로 현재 상태(예를 들어, 시스템 구성원이 정의한 데이터베이스 상태 변수에 의해 포착됨)를 업데이트하는 프로세스를 갖는다. 여기에는, 이벤트 시퀀스가 변경될 때마다 이전 상태의 복사본으로 돌아가서 새로운 순서로 이벤트를 처리하여 현재 상태를 다시 계산함으로써 해당 상태(예를 들어, 이벤트 순서)를 반복적으로 다시 작성하는 제2 프로세스가 포함될 수 있다. 일부 실시예에서, 현재 상태는 트랜잭션의 결과와 연관된 상태, 잔액, 조건 및/또는 등등이다. 유사하게 말하면, 상태는 트랜잭션에 의해 수정된 데이터 구조 및/또는 변수를 포함할 수 있다. 예를 들어 트랜잭션이 은행 계좌 사이의 자금 이체인 경우 현재 상태가 계좌의 현재 잔액이 될 수 있다. 다른 예로서, 트랜잭션이 멀티 플레이어 게임과 연관되는 경우, 현재 상태는 게임과 연관된 위치, 생명 수, 획득된 아이템, 게임의 상태 및/또는 등등일 수 있다.
예시적인 시스템 12: 예시적인 시스템 11의 시스템이며, 상태(예를 들어, 은행 계좌 잔액, 게임 상태 등)를 유지하기 위해 "고속 복제" arrayList를 사용하여 더 신속해진다. 고속 복제 arrayList는 하나의 추가 특징을 갖는 어레이처럼 작동하는 데이터 구조이고, 이는 원본의 복사본인 새 객체를 생성 및/또는 정의하는 것처럼 보이는 "복제" 동작을 지원한다. 복제본을 변경하는 것은 원본에 영향을 미치지 않으므로 이는 마치 실제 복사본인 것처럼 작동한다. 그러나 복제본을 생성할 때 실제로 하나의 arrayList의 전체 내용을 다른 것으로 복사 및/또는 업데이트하는 것은 아니기 때문에 복제 작업은 실제 복사본을 만드는 것보다 빠르다. 2개의 복제본 및/또는 원본 목록의 복사본을 갖는 대신 해시 표와 원본 목록에 대한 포인터를 각각 갖는 2개의 작은 객체를 사용할 수 있다. 복제본에 대한 기입이 수행되면 해시 표는 어느 요소가 수정되었는지와 새 값을 기억한다. 위치에서 판독이 수행되면 해시 표가 먼저 검사되고 해당 요소가 수정된 경우 해시 표의 새 값이 반환된다. 그렇지 않으면 원래 arrayList로부터 해당 요소가 반환된다. 이런 식으로 2개의 "복제본"은 최초에는 원래의 arrayList에 대한 포인터일 뿐이다. 그러나 각각이 반복적으로 수정되면 원본 목록과 그 자체 사이의 차이점을 저장하는 커다란 해시 표를 갖도록 성장한다. 복제본 자체를 복제하여 데이터 구조를 객체의 트리로 확장할 수 있으며, 각 객체는 자체 해시 표와 그 부모에 대한 포인터를 갖는다. 따라서 요청된 데이터를 갖는 버텍스가 발견되거나 루트에 도달할 때까지 판독은 트리를 따라 올라가게 한다. 버텍스가 너무 커지거나 복잡해지면 이때, 이는 부모의 실제 복사본으로 대체될 수 있고 해시 표의 변경 사항을 복사본에 적용할 수 있으며 해시 표는 삭제된다. 또한 복제본이 더 이상 필요하지 않으면 가비지 수집 중에 트리에서 이를 제거하고 트리를 축소할 수 있다.
예시적인 시스템 13: 예시적인 시스템 11의 시스템이며, 상태(예를 들어, 은행 계좌 잔액, 게임 상태 등)를 유지하기 위해 "고속 복제" 해시 표를 사용함으로써 더 빨라진다. 이는 트리의 루트가 arrayList가 아니라 해시 표라는 점을 제외하고는 시스템 12와 동일하다.
예시적인 시스템 14: 예시적인 시스템 11의 시스템이며, 상태(예를 들어, 은행 계좌 잔액, 게임 상태 등)를 유지하기 위해 "고속 복제" 관계형 데이터베이스를 사용함으로써 더 빨라진다. 이것은 기존 관계형 데이터베이스 관리 시스템(RDBMS)을 둘러싼 래퍼로서 작용하는 객체이다. 각 명백한 "복제본"은 실제로 ID 번호와 데이터베이스를 포함하는 객체에 대한 포인터를 갖는 객체이다. 사용자의 코드가 데이터베이스에 SQL(Structure Query Language) 쿼리를 수행하려고 하면 해당 쿼리가 먼저 수정된 다음 실제 데이터베이스로 송신된다. 각 표에 복제본 ID에 대해 하나의 추가 필드가 있는 것을 제외하면 실제 데이터베이스는 클라이언트 코드에서 볼 수 있는 데이터베이스와 동일하다. 예를 들어, 복제본 ID 1을 갖는 원본 데이터베이스가 있고 이때 데이터베이스의 2개 복제본이 ID 2와 3으로 작성되었다고 가정한다. 각 표의 각 행은 복제본 ID 필드에 1, 2 또는 3을 가질 것이다. 쿼리가 사용자 코드에서 복제본 2로 들어오면 해당 필드에 2 또는 1이 있는 행에서만 쿼리가 판독되도록 쿼리가 수정된다. 비슷하게, 3에대한 판독은 ID가 3 또는 1인 행을 찾는다. SQL(Structured Query Language) 커맨드가 복제본 2로 진행하여, 말하자면, 행을 삭제하고, 해당 행에 1이 있는 경우, 이때, 커맨드는 1에서 3으로 변경해야 하고, 이는 행이 더 이상 복제본 2 및 3에 의해 공유되지 않고 이제 단지 3에만 가시적임을 표시한다. 작업중인 다수의 개의 복제본이 있는 경우, 이때, 행의 다수의 복사본이 삽입될 수 있으며 각각은 상이한 복제본의 ID로 변경될 수 있고, 그래서, 새로운 행은 해당 행을 "삭제한" 복제본을 제외한 복제본에 대해 가시적이다. 유사하게, 행이 복제본 2에 추가되면 행은 ID가 2인 표에 추가된다. 행의 수정은 삭제 후 삽입과 동일하다. 이전처럼 다수의 클론이 가비지 수집되는 경우, 이때, 트리를 단순화할 수 있다. 해당 트리의 구조는 복제본에 액세스할 수 없고 완전히 내부적으로 사용되는 추가 표에 저장될 것이다.
예시적인 시스템 15: 예시적인 시스템 11의 시스템이며, 상태를 유지하기 위해 "고속 복제" 파일 시스템을 사용하여 더 빨라진다. 이것은 파일 시스템 둘레의 래퍼 역할을 하는 객체이다. 파일 시스템은 고속 복제 관계형 데이터베이스를 사용하여 파일 시스템의 다른 버전을 관리하기 위해 기존 파일 시스템 위에 구축된다. 하위 파일 시스템은 하나의 디렉토리에 또는 파일 이름에 따라 분할하여(디렉토리를 작게 유지) 많은 수의 파일을 저장한다. 디렉토리 트리는 데이터베이스에 저장될 수 있으며 호스트 파일 시스템에 제공되지 않는다. 파일이나 디렉토리가 복제되면 "복제본"은 ID 번호를 갖는 객체일 뿐이며 이 복제본이 이제 존재함을 반영하도록 데이터베이스가 수정된다. 고속 복제 파일 시스템이 복제되면 기존 하드 드라이브의 복사본으로 초기화된 전체의 새 하드 드라이브 전체가 생성 및/또는 정의된 것처럼 사용자에게 표시된다. 한 복사본에 대한 변경은 다른 복사본에는 영향을 미치지 않는다. 실제로는 각 파일 또는 디렉토리의 사본이 하나만 있으며 파일이 하나의 복제본을 통해 수정되면 복사가 발생한다.
예시적인 시스템 16: 예시적인 시스템 15의 시스템이며, 고속 복제 파일 시스템에서 파일의 각 N 바이트 부분에 대해 호스트 운영 체제 상에 별도의 파일이 생성 및/또는 정의된다. N은 예를 들어 4096 또는 1024와 같은 일부 적합한 크기일 수 있다. 이러한 방식으로 큰 파일에서 한 바이트가 변경되면 큰 파일의 단 하나의 청크만 복사되고 수정된다. 이는 또한 단지 몇몇 바이트의 경우와는 다른, 드라이브에 많은 파일을 저장할 때 효율성을 증가시킨다.
예시적인 시스템 17: 예시적인 시스템 11의 시스템이며, 각 구성원은 그들이 생성 및/또는 정의한 이벤트의 일부 또는 모두에 해당 시점까지 발생한 이벤트의 수와 함께 일부 이전 시간에서의 상태의 해시를 포함하여, 구성원이 이제 이벤트의 순서에 대한 컨센서스가 존재함을 인식 및/또는 식별하는 것을 나타낸다. 구성원이 주어진 상태에 대해 대다수의 사용자로부터 이런 해시를 포함하는 서명된 이벤트를 수집한 후, 구성원은 그 시점에서 컨센서스 상태에 대한 증명으로서 이를 저장하고 해당 시점 이전의 이벤트 및 트랜잭션을 메모리에서 삭제할 수 있다.
예시적인 시스템 18: 예시적인 시스템 1의 시스템이며, 중앙값 또는 대다수를 계산하는 동작이 가중 중앙값 또는 가중 대다수로 대체되며, 여기서 구성원은 그 "지분"에 의해 가중된다. 지분이란 그 구성원의 투표 카운트가 얼마나 많은 지를 나타내는 수치이다. 지분은 암호 화폐에서 보유되거나 구성원이 최초 가입을 위해 초대되었을 때 할당되고 구성원이 가입 초대한 새 구성원 사이에서 나누어진 임의의 수일 수 있다. 충분한 수의 구성원이 그 전체 지분이 존재하는 지분의 대다수가 되도록 컨센서스 상태에 합의하면 오래된 이벤트는 폐기될 수 있다. 전체 순서가 구성원이 기여한 랭크의 중앙값을 사용하여 계산된 경우, 이때, 결과는 구성원의 절반이 더 높은 랭크를 가지고 절반은 더 낮은 랭크를 갖는 경우의 수이다. 반면에 전체 순서가 가중 중앙값을 사용하여 계산된 경우, 이때, 결과는 전체 지분의 약 절반이 그보다 낮은 랭크와 연관되고, 절반이 초과하는 수이다. 가중 투표와 중앙값은 한 구성원이, 각각이 초대 구성원이 제어하는 단순한 가명일 수 있는 엄청난 수의 "삭 퍼핏" 사용자를 가입하도록 초대하는 Sybil 공격을 막는 데 유용할 수 있다. 초대 구성원이 초대 받은 자와 그 지분을 나누도록 강요되면 삭 퍼핏은 컨센서스 결과를 제어하려 시도하는 공격자에게 유용하지 않을 것이다. 따라서 일부 상황에서는 지분 증명이 유용할 수 있다.
예시적인 시스템 19: 예시적인 시스템 1의 시스템이며, 단일 분산 데이터베이스 대신 계층 구조의 다수의 데이터베이스가 존재한다. 예를 들어, 사용자가 구성원인 하나의 데이터베이스와, 각각이 구성원의 서브세트인 다수의 더 작은 데이터베이스 또는 "청크"가 있을 수 있다. 청크에서 이벤트가 발생하면 해당 청크 구성원간에 동기화되고 해당 청크 외부 구성원간에는 동기화되지 않는다. 그런 다음 수시로 청크 내에서 컨센서스 순서가 결정된 후 결과 상태(또는 그 컨센서스 전체 순서를 갖는 이벤트)를 큰 데이터베이스의 전체 구성원과 공유할 수 있다.
예시적인 시스템 20: 예시적인 시스템 11의 시스템이며, (예를 들어, 시스템의 구성원에 의해 정의된 데이터베이스 상태 변수에 의해 캡처된) 상태를 업데이트하기 위해 소프트웨어를 업데이트하는 이벤트를 구비하는 능력을 갖는다. 예를 들어, 이벤트 X 및 Y는 이들 이벤트 내의 트랜잭션을 읽고 그후 상태를 적절히 업데이트하는 소프트웨어 코드에 따라 상태를 수정하는 트랜잭션을 포함할 수 있다. 그런 다음 이벤트 Z는 새 버전의 소프트웨어를 이제 사용할 수 있다는 알림을 포함할 수 있다. 전체 순서가 이벤트가 X, Z, Y 순서로 발생한다고 말하면 X의 트랜잭션을 오래된 소프트웨어로 처리한 다음 Y의 트랜잭션을 새 소프트웨어로 처리하여 상태를 업데이트할 수 있다. 그러나 컨센서스 순서가 X, Y, Z라면 X와 Y를 모두 오래된 소프트웨어로 업데이트할 수 있고, 이는 다른 최종 상태를 제공할 수 있다. 따라서, 이러한 실시예에서, 코드를 업그레이드하라는 통지는 이벤트 내에서 발생할 수 있으며, 그래서, 커뮤니티는 구 버전에서 새로운 버전으로 전환할 때 컨센서스를 달성할 수 있다. 이렇게 하면 구성원이 동기화된 상태를 유지하는 것을 보증할 수 있다. 이는 또한 프로세스를 재부팅하거나 다시 시작할 필요 없이 업그레이드 중에도 시스템이 계속 실행되는 것을 보증한다.
예시적인 시스템 21: 예시적인 시스템 1의 시스템이며, 지분 증명 프로토콜이 구현되어 컨센서스에 도달하고 각 구성원의 투표 파워는 구성원의 소유 암호 화폐 양에 비례한다. 이 예의 암호 화폐는 이하 StakeCoin이라 지칭될 것이다. 그룹이나 모집단에 대한 멤버쉽은 공개되지만 허가되지 않으며, 따라서, 구성원간에 신뢰가 어떠한 신뢰도 존재하지 않을 수 있다.
지분 증명 프로토콜은 다른 프로토콜, 예를 들어, 작업 증명 프로토콜보다 계산 비용이 적게 든다. 이 예에서 M(위에서 설명한 바와 같음)은 구성원이 종합적으로 소유한 StakeCoins의 양의 2/3일 수 있다. 따라서 공격자가 참여한 구성원이 함께 소유한 총 StakeCoins의 1/3을 얻을 수 없으면 분산 데이터베이스 시스템을 안전하게(그리고, 의도한 대로 수렴할 수 있도록) 할 수 있다. StakeCoins 중 2/3를 초과한 양이 정직한 능동적인 구성원에 의해 소유되는 한, 분산 데이터베이스 시스템은 수학적으로 보장된 보안 레벨에서 계속 기능할 수 있다. 이는 데이터베이스가 올바르게 수렴되게 할 수 있다.
공격자가 분산 데이터베이스 시스템에 대한 제어를 얻는 방법은 분산 데이터베이스 시스템 내의 StakeCoin 소유자와 개별적으로 협의하여 StakeCoins를 구매하는 것에 의해 달성될 수 있다. 예를 들어 Alice는 Bob, Carol 및 Dave가 소유한 StakeCoins를 구입하여 StakeCoins의 대다수를 확보하여 Ed가 취약한 위치에 있게 할 수 있다. 이것은 상품에 대한 시장을 코너링하거나 적대적인 인수를 위해 회사에서 충분한 지분을 사려고 하는 것과 유사하다. 설명된 시나리오는 StakeCoins를 사용하는 분산 데이터베이스 시스템에 대한 공격 일뿐만 아니라 StakeCoin 자체에 대한 공격이기도 하다. 구성원이 암호 화폐에 대한 거의 독점적인 상태를 얻은 경우, 이런 구성원은 암호 화폐 시장 가치를 조작하고 반복적으로 고가 매도하고 저가에 매수하도록 할 수 있다. 이것은 단기간에 이익이 될 수 있지만, 궁극적으로 암호 화폐에 대한 신뢰를 약화시킬 수 있으며, 아마도 범 세계적으로 버려지는 결과를 초래할 수 있다. 화폐 시장 가치는 화폐를 전달하는 데 사용되는 기술과 독립적일 수 있다. 예를 들어, 개인이나 엔티티가 세계의 대다수의 미국 달러 또는 세계의 옥수수 선물의 대다수에 대한 소유권을 얻는 경우 그러한 개인이나 엔티티는 유리하게 시장을 훼손할 수 있다.
암호 화폐가 가치있고 널리 퍼져 있다면 암호 화폐의 거의 독점적인 상태의 취득에 의한 공격은 더 어렵다. 암호 화폐가 가치가 있다면 StakeCoin 화폐 공급의 상당 부분을 구입하는 데 많은 비용이 들 것이다. 암호 화폐가 널리 확산되어 많은 상이한 사람이 StakeCoins을 소유하면, StakeCoin 시장을 코너링하려는 시도는 조기에 드러날 것이며 StakeCoin의 가격을 자연스럽게 인상시켜 나머지 화폐 공급을 얻는 것이 더욱 어렵게 될 것이다.
제2 유형의 공격은 다수의 분산 데이터베이스 시스템에 걸친 StakeCoins의 종합적 양과 비교하여 작지만, 특정 분산 데이터베이스 시스템에 참여하는 구성원이 소유한 StakeCoins의 양과 비교하면 많은 양의 StakeCoins을 확보하여 수행할 수 있다. 이 유형의 공격은 암호 화폐가 분산 데이터베이스 시스템의 애플리케이션에서 사용하도록 구체적으로 정의될 때 피할 수 있다. 달리 말해, StakeCoins와 분산 데이터베이스 시스템의 구현은 서로 링크되도록 동시에 정의될 수 있으며, 각각은 다른 하나의 증가하는 가치에 기여한다. 마찬가지로 StakeCoins를 거래하는 분산 데이터베이스의 추가적 구현은 존재하지 않는다.
분산 데이터베이스 시스템의 구현이 새롭게 정의될 때 시작부터 가치있는 암호 화폐를 갖는 것이 바람직할 수 있다. 암호 화폐는 시간이 지남에 따라 그 값이 증가할 수 있지만, 가치있는 암호 화폐는 시스템의 초기 단계에서 유익할 수 있다. 일부 경우에, 참여 엔티티의 컨소시엄이 암호 화폐 및 그 연관 분산 데이터베이스 시스템을 시작할 수 있다. 예를 들어 창립자인 10개 대기업이나 조직이 상당량의 StakeCoins를 제공받아 StakeCoin 암호 화폐 및 분산 데이터베이스 시스템을 시작할 수 있다. 암호 화폐의 공급이 빠르게 증가하지 않고 궁극적인 크기 제한을 갖도록 시스템을 구성할 수 있다. 각 창립 엔티티는 분산 데이터베이스 시스템 및 StakeCoin의 구현(예를 들어, 컨센서스 알고리즘으로 hashDAG로 구조화될 수 있는 분산 데이터베이스 시스템으로 구현)에 구성원으로서 참여하는 것에 대한 인센티브를 가질 수 있다. 작업 증명이 없으므로 노드를 운영하는 참여 구성원이 되는 비용이 적을 수 있다. 창립 엔티티는 특히 그 소유 StakeCoins 및 구현된 분산 데이터베이스 시스템의 가치를 파괴할 수 있기 때문에 그 중 임의의 큰 부분이 공모하여 시스템을 훼손할 가능성은 거의 없다는 점에서 충분히 신뢰할 만하다.
일부 구현에서는 다른 구성원이 분산 데이터베이스 시스템에 참여할 수 있으며 다른 개인이나 엔티티는 StakeCoins를 직접 창립 엔티티에서 또는 교환으로 구매할 수 있다. 분산 데이터베이스 시스템은 참가를 위해 소량의 StakeCoins을 지불함으로써 구성원들에게 참여를 장려하도록 구성될 수 있다. 시간이 지남에 따라 시스템은 훨씬 더 분산될 수 있으며 결국에는 지분이 퍼져 나가기 때문에 창립 엔티티가 공모해 공격하는 경우에도 임의의 개인이나 엔티티가 시장을 코너링하는 것이 어려워진다. 이 시점에서 암호 화폐는 독립적인 가치에 도달할 수 있으며; 분산 데이터베이스 시스템은 독립적인 보안 레벨을 가질 수 있고; 시스템은 허가 요건없이(예를 들어, 창립 구성원에 의한 가입 초청 없이) 개방될 수 있다. 따라서 대안 프로토콜로 구현된 시스템, 예를 들어, 작업 증명 프로토콜로 구현된 시스템에서 요구되는 되풀이되는 계산 비용을 절감할 수 있다.
hashDAG 분산 데이터베이스를 사용하는 것에 관해서 위에서 설명하였지만, 임의의 다른 적합한 분산 데이터베이스 프로토콜이 예시적인 시스템 21을 구현하는 데 사용될 수 있다. 예를 들어, 특정 예 번호 및 지분이 변경될 수 있지만, 예시적인 시스템 21은 임의의 적합한 분산 데이터베이스 시스템의 보안을 증가시키는데 사용될 수 있다.
위에 설명된 시스템은 최종 컨센서스를 갖는 분산 컨센서스를 위한 효율적인 수렴 메커니즘을 생성 및/또는 달성할 것으로 예상된다. 다음과 같이 몇 가지 정리가 증명될 수 있다.
예시적인 정리 1: 이벤트 x가 부분 순서에서 이벤트 y보다 선행하면, 이때, 주어진 시간에 다른 구성원에 대한 주어진 구성원의 지식에서, 다른 구성원 각각은 y 이전에 x의 표시를 수신하거나 아직 y의 표시를 받지 않았을 것이다.
증명: 이벤트 x가 부분 순서로 이벤트 y에 선행하면, 이때 x는 y의 조상이다. 구성원이 최초로 y 표시를 수신하면 그 구성원은 이미 x 표시를 이전에 받았거나(이들이 y 이전에 x를 들었을 경우), 그 동기가 x 및 y 양쪽 모두를 해당 구성원에게 제공하는 경우가 된다(이 경우, 단일 동기화 동안 수신된 이벤트는 예시적인 시스템 5와 관련하여 설명된 바와 같이 조상 관계와 일치하는 순서로 수신된 것으로 간주되기 때문에 이들은 해당 동기화 동안 y 이전에 x를 듣게 될 것이다). QED
예시적인 정리 2: 임의의 주어진 hashDAG에 대해 x가 부분 순서에서 y에 선행하면, 이때 x는 해당 hashDAG에 대해 계산된 전체 순서에서 y에 선행한다.
증명: x가 부분 순서에서 y에 선행하면, 이때, 정리 1에 의해:
모든 i에 대해, rank(i, x) < rank(i, y)이고,
여기서 rank(i, x)는 구성원 i에 의해 이벤트 x에 할당된 랭크이고, 이는 x가 구성원 i가 받은 제1 이벤트인 경우 1, 제2 이벤트인 경우 2인 등등이다. med(x)를 모든 i에 대한 랭크(i, x)의 중앙값이라고 하고, med(y)에 대해서도 유사하게 한다.
주어진 k에 대해, rank(i1,x)가 k 번째 가장 작은 x 랭크이고 rank(i2,y)가 k 번째 가장 작은 y 랭크가 되도록 i1과 i2를 선택한다. 그때:
rank(i1,x) < rank(i2,y)이다.
이것은 랭크(i2,y)가 y 랭크의 k보다 크거나 같고, 그 각각이 대응하는 x 랭크보다 엄격하게 크기 때문이다. 따라서, rank(i2,y)는 x 랭크 중 적어도 k보다 엄격하게 크므로 k 번째 가장 작은 x 랭크보다 엄격하게 커진다. 이 논거는 임의의 k에 대해 유지된다.
n을 구성원 수(i 값의 수)라 한다. 그러면 n은 홀수이거나 짝수여야 한다. n이 홀수이면 k=(n+1)/2로하고 k 번째 가장 작은 랭크는 중앙값이 된다. 따라서 med(x) < med(y)이다. n이 짝수라면, k = n/2일 때, k 번째 가장 작은 x 랭크는 k 번째 가장 작은 y 랭크보다 엄격하게 작을 것이며, 또한 (k + 1) 번째 가장 작은 x 랭크는 (k + 1) 번째 가장 작은 y 랭크보다 엄격하게 작을 것이다. 따라서 두 x 랭크의 평균은 두 y 랭크의 평균보다 작을 것이다. 따라서, med(x) < med(y)이다. 따라서 두 경우 모두에서, x 랭크의 중앙값은 y 랭크의 중앙값보다 엄격하게 작다. 따라서 전체 순서가 중앙값 랭크에 따라 작업을 정렬하여 정의된 경우, 이때, x는 전체 순서에서 y에 선행한다. QED
예시적인 정리 3: "가십 기간(gossip period)"이 기존 이벤트가 모든 구성원에게 동기화를 통해 전파되는 시간인 경우:
1 가십 기간 이후: 모든 구성원들이 이벤트를 수신한다
2 가십 기간 이후: 모든 구성원이 해당 이벤트의 순서에 합의한다
3 가십 기간 이후: 모든 구성원은 컨센서스에 도달하였음을 안다
4 가십 기간 이후: 모든 구성원은 모든 다른 구성원들로부터 디지털 서명을 획득하여 이 컨센서스 순서를 지지한다.
증명: 주어진 시간 T0에 의해 생성되거나 정의된 이벤트의 세트를 S0이라고 한다. 모든 구성원이 궁극적으로 다른 모든 구성원과 무한정 자주 동기화되면, 이때, 확률 1로 결국 S0의 이벤트가 모든 구성원에게 확산되어 모든 구성원이 모든 이벤트를 인식할 수 있는 시간 T1이 된다. 이는 제1 가십 기간의 끝이다. S1을 시간 T1에 존재하고 T0에 아직 존재하지 않은 이벤트들의 세트라 한다. 이때, 확률 1로 결국 모든 구성원이 시간 T1에 존재하는 것들인 세트 S1의 모든 이벤트를 수신한 시간 T2가 된다. 이는 제2 가십 기간의 끝이다. 마찬가지로, T3은 T1 이전에는 아니지만 T2에는 존재하는 것들인 S2의 모든 이벤트가 모든 구성원에게 확산될 때이다. 각 가십 기간은 결국 확률 1로 끝남에 유의한다. 평균적으로, n명의 구성원이 있는 경우 각각은 log2(n) 동기화를 수행하는 동안 지속된다.
시간 T1에 의해, 모든 구성원은 S0에서 모든 이벤트를 수신할 것이다.
시간 T2에 의해, 주어진 구성원인 Alice는 S0에서 모든 이벤트를 수신하는 다른 구성원들 각 레코드를 수신할 것이다. 따라서 Alice는 모든 구성원에 대한 S0의 모든 작업에 대한 랭크(해당 구성원이 해당 작업을 받은 순서)를 계산한 다음 랭크의 중앙값으로 이벤트를 정렬한다. S0의 이벤트에 대해 결과적인 전체 순서는 변경되지 않는다. 그 이유는 결과적인 순서가 변경되지 않는, 각 구성원이 이들 이벤트 각 표시를 먼저 시간에 수신한 순서의 함수이기 때문이다. Alice의 계산된 순서에는 S0 이벤트 사이에 산재된 S1의 일부 이벤트가 있을 수 있다. 이러한 S1 이벤트는 S0 이벤트의 시퀀스 내 이들이 포함되는 위치가 여전히 바뀔 수 있다. 그러나 S0에서 이벤트의 상대적 순서는 바뀌지 않을 것이다.
시간 T3에 의해, Alice는 S0과 S1의 합집합에 대한 전체 순서를 학습할 것이고, 그 합집합에서의 이벤트의 상대적 순서는 바뀌지 않을 것이다. 또한, 그녀는 이 시퀀스 내에서 S1으로부터 가장 이른 이벤트를 발견할 수 있으며, S0의 외부의 새로운 이벤트를 삽입하는 경우에도 S1 이전의 이벤트의 시퀀스가 변하지 않는다고 결론 지을 수 있다. 따라서, 시간 T3에 의해, Alice는 제1 S1 이벤트 이전의 이력의 이벤트의 순서에 대한 컨센서스가 달성되었다고 결정할 수 있다. 그녀는 이러한 이벤트가 이 순서대로 발생하여 초래되는 상태의 해시(예를 들어, Alice에 의해 정의된 데이터베이스 상태 변수에 의해 캡처된 바와 같은)에 디지털 서명할 수 있으며 그녀가 생성 및/또는 정의한 다음 이벤트의 일부로 서명을 송신할 수 있다.
시간 T4에 의해, Alice는 다른 구성원들로부터 유사한 서명을 수신할 것이다. 그 시점에서 그녀는 단순히 서명의 목록을 그들이 입증하는 상태와 함께 유지할 수 있으며, 그녀는 제1 S1 이벤트 이전에 그녀가 저장한 이벤트를 폐기할 수 있다. QED
여기에 설명된 시스템은 컨센서스를 신속하고 안전하게 달성하는 분산 데이터베이스를 설명한다. 이것은 많은 애플리케이션에 대해 유용한 빌딩 블록이 될 수 있다. 예를 들어 트랜잭션이 하나의 암호 화폐 지갑에서 다른 암호 화폐 지갑으로의 전송을 설명하고 상태가 단순히 각 지갑의 현재 금액에 대한 선언인 경우 이 시스템은 기존 시스템의 고가의 작업 증명을 피하는 암호 화폐 시스템을 구성할 것이다. 자동 규칙 시행은 이것이 현재 암호 화폐에서 통상적이지 않은 피처를 추가하는 것을 가능하게 한다. 예를 들어, 지갑이 특정 시간 기간 동안 암호 화폐를 보내지도 수신하지도 못하면, 이때, 해당 지갑을 삭제하고 그 가치를 다른 기존 지갑에 그들이 현재 보유하는 양에 비례하여 분배하는 규칙을 시행하여 손실 코인을 회수할 수 있다. 그렇게 하면 지갑의 개인 키가 손실되더라도 화폐 공급이 늘어나거나 줄어들지 않는다.
다른 예는 분산 게임이며, 이는 서버에서 플레이되는 MMO(Massively Multiplayer Online) 게임처럼 작동하지만 중앙 서버를 사용하지 않고도 달성된다. 컨센서스는 제어되는 임의의 중앙 서버 없이 달성될 수 있다.
다른 예로는 그러한 데이터베이스 위에 구축된 소셜 미디어를 위한 시스템이다. 트랜잭션이 디지털 서명되고 구성원이 다른 구성원에 대한 정보를 수신하기 때문에, 이는 현재 시스템에 비해 보안 및 편의의 이점을 제공한다. 예를 들어 이메일이 반환 주소가 위조될 수 없기 때문에 스팸 방지 정책이 강력한 이메일 시스템을 구현할 수 있다. 이러한 시스템은 이메일, 트윗, 텍스트, 포럼, 위키 및/또는 다른 소셜 미디어에 의해 현재 수행되는 기능을 단일 분산 데이터베이스에 결합하여 통합된 소셜 시스템이 될 수도 있다.
다른 애플리케이션에는 그룹 전체가 계약이나 문서에 서명하도록 협력하는 그룹 디지털 서명과 같이 보다 정교한 암호화 기능이 포함될 수 있다. 이러한, 그리고, 다른 다자간 계산의 형태는 이러한 분산 컨센서스 시스템을 사용하여 유용하게 구현될 수 있다.
또 다른 예는 공공 원부 시스템(public ledger system)이다. 누구든지 시스템에 소정 정보를 저장하기 위해 지불할 수 있으며, 시스템에 정보를 저장하기 위해 연간 바이트 당 암호 화폐(또는 실제 화폐)를 소량 지불한다. 이러한 자금은 해당 데이터를 저장하는 구성원 및 컨센서스를 달성하기 위해 작업하도록 반복적으로 동기화하는 구성원에게 자동으로 분배될 수 있다. 그들이 동기화할 때마다 소량의 암호 화폐를 구성원에게 자동으로 전송할 수 있다.
이 예는 분산 컨센서스 데이터베이스가 많은 애플리케이션의 컴포넌트로서 유용함을 보여준다. 데이터베이스가 고비용의 작업 증명을 사용하지 않고 대신에 더 저렴한 지분 증명을 사용할 수 있기 때문에 데이터베이스는 더 소형의 컴퓨터 또는 심지어 모바일 및 내장 디바이스에서 전체 노드가 운영되는 상태로 운영될 수 있다.
2개의 이전 이벤트의 해시(하나의 자체 해시 및 하나의 외부 해시)를 포함하는 이벤트로서 위에서 설명되었지만, 다른 실시예에서, 구성원은 3개의 이전 이벤트의 해시(하나의 자체 해시 및 두 개의 외부 해시)를 포함하는 이벤트를 생성 및/또는 정의하도록 한명의 구성원이 2명의 다른 구성원과 동기화할 수 있다. 또 다른 실시예에서, 임의의 수의 구성원으로부터의 이전 이벤트의 임의의 수의 이벤트 해시가 이벤트 내에 포함될 수 있다. 일부 실시예에서, 상이한 이벤트는 상이한 수의 이전 이벤트의 해시를 포함할 수 있다. 예를 들어 제1 이벤트에는 2개의 이벤트 해시가 포함될 수 있으며 제2 이벤트에는 세 개의 이벤트 해시가 포함될 수 있다.
이벤트가 이전 이벤트의 해시(또는 암호 해시 값)를 포함하는 것으로 위에서 설명되었지만, 다른 실시예에서, 이벤트는 포인터, 식별자 및/또는 이전 이벤트에 대한 임의의 다른 적합한 참조를 포함하도록 생성 및/또는 정의될 수 있다 . 예를 들어, 이전 이벤트를 식별하고 이벤트를 링크하기 위해 이전 이벤트와 연관되고 그를 식별하기 위해 사용되는 일련 번호를 포함하도록 이벤트가 생성 및/또는 정의될 수 있다. 일부 실시예에서, 그러한 일련 번호는 예를 들어, 이벤트를 생성 및/또는 정의한 구성원과 연관된 식별자(예를 들어, 미디어 액세스 제어(MAC) 어드레스, 인터넷 프로토콜(IP) 어드레스, 할당된 어드레스 및/또는 등등) 및 해당 구성원에 의해 정의된 이벤트의 순서를 포함할 수 있다. 예를 들어, 식별자가 10이고 이벤트가 해당 구성원에 의해 생성 및/또는 정의된 15 번째 이벤트인 경우 해당 이벤트에 1015의 식별자를 할당할 수 있다. 다른 실시예에서, 임의의 다른 적합한 포맷이 이벤트에 대한 식별자를 할당하는 데 사용될 수 있다.
다른 실시예에서, 이벤트는 완전한 암호 해시를 포함할 수 있지만, 동기화 동안 이들 해시의 일부만 전송된다. 예를 들어 Alice가 Bob에게 해시 H를 포함하는 이벤트를 보내고 J가 H의 최초 3 바이트이고 Alice가 그녀가 저장한 이벤트와 해시 중 H가 J로 시작하는 유일한 해시라고 결정하는 경우, 이때, 그녀는 동기화 중에 H 대신 J를 송신할 수 있다. 그후, Bob가 J로 시작하는 다른 해시를 가지고 있다고 결정하는 경우, 그는 Alice에게 회신하여 전체 H를 요청할 수 있다. 그렇게 하면 해시가 전송 중에 압축될 수 있다.
전술한 예시적인 시스템이 다른 시스템을 참조하여 설명되었지만, 다른 실시예에서는, 예시적인 시스템 및 그와 연관된 기능의 임의의 조합이 분산 데이터베이스를 생성 및/또는 정의하도록 구현될 수 있다. 예를 들어, 예시적인 시스템 1, 예시적인 시스템 2 및 예시적인 시스템 3을 결합하여 분산 데이터베이스를 생성 및/또는 정의할 수 있다. 다른 예로서, 일부 실시예에서, 예시적인 시스템 10은 예시적인 시스템 1로, 그러나, 예시적인 시스템 9 없이 구현될 수 있다. 또 다른 예를 들면, 예시적인 시스템 7은 예시적인 시스템 6과 결합되어 구현될 수 있다. 또 다른 실시예에서, 예시적인 시스템의 임의의 다른 적합한 조합이 구현될 수 있다.
다른 실시예에서, 수렴을 얻기 위해 이벤트를 교환하는 것으로 위에서 기술하였지만, 분산 데이터베이스 인스턴스는 값 및/또는 값들의 벡터를 교환하여 도 8 내지 도 13과 관련하여 설명된 수렴을 획득할 수 있다. 구체적으로는, 예를 들면, 도 8은 일 실시예에 따른, 분산 데이터베이스 시스템(예컨대, 분산 데이터베이스 시스템(100))으로부터의 제1 컴퓨팅 디바이스(400)와 분산 데이터베이스 시스템(예컨대, 분산 데이터베이스 시스템(100))으로부터의 제2 컴퓨팅 디바이스(500) 사이의 통신 흐름을 예시한다. 일부 실시예에서, 컴퓨팅 디바이스(400, 500)는 도 2에 도시된 컴퓨팅 디바이스(200)와 구조적 및/또는 기능적으로 유사할 수 있다. 일부 실시예에서, 컴퓨팅 디바이스(400) 및 컴퓨팅 디바이스(500)는 컴퓨팅 디바이스(110, 120, 130, 140)가 도 1과 관련하여 도시되고 설명된 분산 데이터베이스 시스템(100) 내에서 서로 통신하는 방식과 유사한 방식으로 서로 통신한다.
도 2와 관련하여 설명된 컴퓨팅 디바이스(200)와 유사하게, 컴퓨팅 디바이스(400, 500)는 각각 파라미터에 대한 값들의 벡터를 초기에 정의하고, 값의 벡터를 업데이트하고, 파라미터에 대한 값의 정의 및/또는 업데이트된 벡터에 기초하여 파라미터에 대한 값을 선택하고, (1) 파라미터에 대한 값의 정의 및/또는 업데이트된 벡터 및/또는 (2) 파라미터에 대한 값의 정의 및/또는 업데이트된 벡터에 기초하여 파라미터에 대한 선택된 값을 저장할 수 있다. 컴퓨팅 디바이스들(400, 500) 각각은 초기에 파라미터에 대한 값의 벡터를 임의의 수의 방식으로 정의할 수 있다. 예를 들어, 컴퓨팅 디바이스들(400, 500) 각각은 값들의 벡터로부터의 각 값을 분산 데이터베이스 인스턴스들(403, 503) 각각에 초기 저장된 값과 동일하게 설정함으로써 파라미터에 대한 값들의 벡터를 초기에 정의할 수 있다. 다른 예를 들면, 컴퓨팅 디바이스들(400, 500) 각각은 값들의 벡터로부터의 각 값을 랜덤 값과 동일하게 설정함으로써 파라미터에 대한 값들의 벡터를 초기에 정의할 수 있다. 파라미터에 대한 값의 벡터가 초기에 정의되는 방식은, 예를 들어, 컴퓨팅 디바이스(400, 500)가 속하는 분산 데이터베이스 시스템의 관리자에 의해, 또는 분산 데이터베이스 시스템의 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(400, 500))의 사용자에 의해 개별적으로 또는 종합적으로 선택될 수 있다.
컴퓨팅 디바이스(400, 500)는 또한 분산 데이터베이스 인스턴스(403, 503) 각각에서 파라미터에 대한 값의 벡터 및/또는 파라미터에 대한 선택된 값을 각각 저장할 수 있다. 분산 데이터베이스 인스턴스들(403, 503) 각각은 도 2에 도시된 메모리(220)와 유사한 메모리(도 8에 도시되지 않음)에서 구현될 수 있다.
단계 1에서, 컴퓨팅 디바이스(400)는 컴퓨팅 디바이스(500)의 분산 데이터베이스 인스턴스(503)에 저장된 파라미터에 대한 값(예를 들어, 분산 데이터베이스 인스턴스(503)의 특정 필드에 저장된 값)을 컴퓨팅 디바이스(500)로부터 요청한다. 일부 실시예에서, 컴퓨팅 디바이스(500)는 분산 데이터베이스 시스템에 속한 컴퓨팅 디바이스들의 세트로부터 컴퓨팅 디바이스(400)에 의해 선택될 수 있다. 컴퓨팅 디바이스(500)는 랜덤하게 선택되거나, 컴퓨팅 디바이스(400)와의 관계에 기초하여 선택되거나, 컴퓨팅 디바이스(400)에 대한 근접도에 기초하여, 컴퓨팅 디바이스(400)와 연관된 순서화된 목록에 기초하여 선택되거나 및/또는 등등일 수 있다. 일부 실시예에서, 컴퓨팅 디바이스(500)는 분산 데이터베이스 시스템에 속한 컴퓨팅 디바이스들의 세트로부터의 컴퓨팅 디바이스(400)에 의해 선택될 수 있기 때문에, 컴퓨팅 디바이스(400)는 연속적으로 컴퓨팅 디바이스(500)를 다수회 선택할 수 있거나 한동안 컴퓨팅 디바이스(500)를 선택하지 않을 수 있다. 다른 실시예에서, 이전에 선택된 컴퓨팅 디바이스의 표시는 컴퓨팅 디바이스(400)에 저장될 수 있다. 이러한 실시예에서, 컴퓨팅 디바이스(400)는 컴퓨팅 디바이스(500)를 다시 선택할 수 있기 전에 미리 결정된 수의 선택을 대기할 수 있다. 상술한 바와 같이, 분산 데이터베이스 인스턴스(503)는 컴퓨팅 디바이스(500)의 메모리에서 구현될 수 있다.
일부 실시예에서, 컴퓨팅 디바이스(400)로부터의 요청은 컴퓨팅 디바이스(400)의 통신 모듈(도 8에 도시되지 않음)에 의해 송신된 신호일 수 있다. 이 신호는 네트워크(105)(도 1에 도시됨)와 같은 네트워크에 의해 전달될 수 있고 컴퓨팅 디바이스(500)의 통신 모듈에 의해 수신될 수 있다. 일부 실시예에서, 컴퓨팅 디바이스(400, 500)의 통신 모듈 각각은 프로세서 또는 메모리 내에서 구현될 수 있다. 예를 들어, 컴퓨팅 디바이스(400, 500)의 통신 모듈은 도 2에 도시된 통신 모듈(212)과 유사할 수 있다.
컴퓨팅 디바이스(400)로부터 분산 데이터베이스 인스턴스(503)에 저장된 파라미터 값에 대한 요청을 수신한 후, 컴퓨팅 디바이스(500)는 분산 데이터베이스 인스턴스(503)에 저장된 파라미터의 값을 단계 2에서 컴퓨팅 디바이스(400)로 송신한다. 일부 실시예에서, 컴퓨팅 디바이스(500)는 메모리로부터 파라미터의 값을 검색하고 컴퓨팅 디바이스(500)의 통신 모듈을 통해 신호로서 이 값을 송신할 수 있다(도 8에 도시되지 않음). 일부 경우에, 분산 데이터베이스 인스턴스(503)가 이미 파라미터에 대한 값을 포함하지 않으면(예를 들어, 트랜잭션이 분산 데이터베이스 인스턴스(503)에서 아직 정의되지 않는다면), 분산 데이터베이스 인스턴스(503)는 컴퓨팅 디바이스(403)로부터 파라미터를 위한 값을 요청하고(단계 1에서 아직 제공되지 않은 경우) 그 값을 분산 데이터베이스 인스턴스(503)에서 파라미터에 대하여 저장한다. 일부 실시예에서, 컴퓨팅 디바이스(400)는 그후 이 값을 분산 데이터베이스 인스턴스(503)의 파라미터에 대한 값으로 사용한다.
단계 3에서, 컴퓨팅 디바이스(400)는 분산 데이터베이스 인스턴스(403)에 저장된 파라미터에 대한 값을 컴퓨팅 디바이스(500)에 송신한다. 다른 실시예에서, 분산 데이터베이스 인스턴스(403)에 저장된 파라미터에 대한 값(단계 1) 및 분산 데이터베이스 인스턴스(503)에 저장된 동일한 파라미터에 대한 값에 대한 요청(단계 3)은 단일 신호로서 전송될 수 있다. 다른 실시예에서, 분산 데이터베이스 인스턴스(403)에 저장된 파라미터 값은 분산 데이터베이스 인스턴스(503)에 저장된 파라미터 값에 대한 요청에 대한 신호와 다른 신호로 송신될 수 있다. 분산 데이터베이스 인스턴스(403)에 저장된 파라미터에 대한 값이 분산 데이터베이스 인스턴스(503)에 저장된 파라미터 값에 대한 요청에 대한 신호와 다른 신호로 전송되는 실시예에서, 분산 데이터베이스 인스턴스(403)에 저장된 파라미터에 대한 값, 두 신호는 임의의 순서로 송신될 수 있다. 달리 말해, 하나의 신호가 다른 신호 이전에 송신될 수 있다.
컴퓨팅 디바이스(400)가 컴퓨팅 디바이스(500)로부터 송신된 파라미터의 값을 수신한 후에 및/또는 컴퓨팅 디바이스(500)가 컴퓨팅 디바이스(400)로부터 송신된 파라미터에 대한 값을 수신한 후에, 일부 실시예에서, 컴퓨팅 디바이스(400) 및/또는 컴퓨팅 디바이스 500)는 분산 데이터베이스 인스턴스(403)에 저장된 값들의 벡터 및/또는 분산 데이터베이스 인스턴스(503)에 저장된 값들의 벡터를 각각 업데이트할 수 있다. 예를 들어, 컴퓨팅 디바이스(400, 500)는 분산 데이터베이스 인스턴스(403, 503)에 저장된 값의 벡터를 컴퓨팅 디바이스(400, 500)에 의해 각각 수신된 파라미터의 값을 포함하도록 업데이트할 수 있다. 컴퓨팅 디바이스들(400, 500)은 또한 분산 데이터베이스 인스턴스(403)에 저장된 값들의 업데이트된 벡터 및/또는 분산 데이터베이스 인스턴스(503)에 저장된 값들의 업데이트된 벡터 각각에 기초하여 분산 데이터베이스 인스턴스(403)에 저장된 파라미터의 값 및/또는 분산 데이터베이스 인스턴스(503)에 저장된 파라미터의 값을 각각 업데이트할 수 있다.
단계들이 도 8 및 설명에서 1, 2 및 3으로 표시되어 있지만, 단계 1, 2 및 3이 임의의 순서로 수행될 수 있음을 이해해야 한다. 예를 들어 단계 3은 단계 1과 단계 2 전에 수행될 수 있다. 또한, 컴퓨팅 디바이스(400 및 500) 사이의 통신은 본 명세서에 상세히 설명된 바와 같이 도 3에 도시된 단계 1, 2 및 3에 한정되지 않는다. 또한, 단계 1, 2 및 3이 완료된 후에, 컴퓨팅 디바이스(400)는 (단계 1, 2 및 3과 유사하게) 값을 교환할 분산 데이터베이스 시스템 내의 컴퓨팅 디바이스들의 세트로부터 다른 컴퓨팅 디바이스를 선택할 수 있다.
일부 실시예에서, 컴퓨팅 디바이스(400, 500) 사이에서 통신되는 데이터는 압축된 데이터, 암호화된 데이터, 디지털 서명, 암호 체크섬 및/또는 등등을 포함할 수 있다. 또한, 컴퓨팅 디바이스들(400, 500) 각각은 다른 컴퓨팅 디바이스에 데이터를 송신하여 다른 디바이스에 의해 이전에 송신된 데이터의 수신을 확인 응답할 수 있다. 컴퓨팅 디바이스들(400, 500) 각각은 또한 다른 디바이스에 의해 반복적으로 송신된 데이터를 무시할 수 있다.
컴퓨팅 디바이스들(400, 500) 각각은 초기에 파라미터에 대한 값들의 벡터를 정의할 수 있고 분산 데이터베이스 인스턴스들(403, 503) 각각에 파라미터에 대한 값의 벡터를 저장할 수 있다. 도 9a 내지 도 9c는 파라미터에 대한 값의 벡터의 예를 도시한다. 벡터는 파라미터에 대한 임의의 값들의 세트일 수 있다(예를 들어, 파라미터에 대한 값의 1차원 어레이, 다수의 부분을 각각 갖는 값의 어레이 등). 예시의 목적으로 벡터의 세 가지 예가 도 9a 내지 도 9c에 제공되어 있다. 도시된 바와 같이, 벡터(410, 420, 430) 각각은 특정 파라미터에 대해 5개의 값을 갖는다. 그러나 값들의 벡터는 임의의 수의 값을 가질 수 있다는 것을 이해해야 한다. 일부 경우에, 값의 벡터에 포함된 값의 수는 사용자에 의해, 상황에 의해, 임의로 등등의 방식으로 설정될 수 있다.
파라미터는 다른 값을 가질 수 있는 임의의 데이터 객체일 수 있다. 예를 들어, 파라미터는 이진 투표일 수 있으며, 투표 값은 "예" 또는 "아니오"(또는 이진 "1" 또는 "0")일 수 있다. 도 9a에 도시된 바와 같이, 값들의 벡터(410)는 각각 5개의 이진 투표를 갖는 벡터이고, 값들(411, 412, 413, 414, 415)은 각각 "예", "아니오", "아니오", "예" 및 "예"이다. 다른 예를 들어, 파라미터는 데이터 요소 세트일 수 있다. 도 9b는 파라미터가 알파벳 문자 세트인 예를 도시한다. 도시된 바와 같이, 값들의 벡터(420)는 4개의 알파벳 문자의 5개의 세트를 가지고, 값(421, 422, 423, 424, 425)은 각각 {A, B, C, D}, {A, B, C, E}, {A, B, C, F}, {A, B, F, G} 및 {A, B, G, H}이다. 또 다른 예로서, 파라미터는 랭크화된 및/또는 순서화된 데이터 요소의 세트일 수 있다. 도 9c는 파라미터가 랭크화된 사람들의 세트인 예를 도시한다. 도시된 바와 같이, 값들의 벡터(430)는 6명의 사람들의 5개의 랭크화된 세트들을 가지며, 값들(431, 432, 433, 434, 435)은 각각
(1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank),
(1. Bob, 2. Alice, 3. Carol, 4. Dave, 5. Ed, 6. Frank),
(1. Bob, 2. Alice, 3. Carol, 4. Dave, 5. Frank, 6. Ed),
(1. Alice, 2. Bob, 3. Carol, 4. Ed, 5. Dave, 6. Frank), 및
(1. Alice, 2. Bob, 3. Ed, 4. Carol, 5. Dave, 6. Frank),
이다.
파라미터에 대한 값의 벡터를 정의한 후에, 컴퓨팅 디바이스(400, 500) 각각은 파라미터에 대한 값의 벡터에 기초하여 파라미터에 대한 값을 선택할 수 있다. 이러한 선택은 임의의 방법 및/또는 프로세스(예를 들어, 규칙 또는 규칙 세트)에 따라 수행될 수 있다. 예를 들어 파라미터의 값이 벡터에 포함된 값의 50 %를 초과하여 나타나는 값이 되도록 선택되는 "대다수 규칙"에 따라 선택을 수행할 수 있다. 예시를 위해, 값들의 벡터(410)(도 9a에 도시됨)는 3개의 "예" 값 및 2개의 "아니오" 값을 포함한다. "대다수 규칙"에서 값의 벡터에 기초하여 파라미터에 대해 선택된 값은 "예"이고, 그 이유는 "예"가 (값들의 벡터(410)의) 값(411, 412, 413, 414, 415)의 50 %를 초과하여 나타나기 때문이다.
다른 예를 들어, 선택은 "대다수 출현"에 따라 수행될 수 있는데, 여기서 파라미터의 값은 벡터에 포함된 값의 50 %를 초과하여 나타나는 각 데이터 요소의 세트가 되도록 선택된다. 도 9b를 사용하여 예시하기 위해, 데이터 요소 "A", "B" 및 "C"는 값의 벡터(420)의 값들(421, 422, 423, 424, 425) 중 50 %를 초과하여 나타난다. "다수 출현"에서 이러한 데이터 요소(예를 들어, "A", "B" 및 "C")만 값의 벡터(420)의 5개 값 중 3개에서 나타나기 때문에 값들의 벡터를 기반으로 파라미터에 대해 선택된 값은 {A, B, C}가 된다.
또 다른 예에서, 선택은 "중앙값에 의거한 랭크"에 따라 수행될 수 있는데, 여기서 파라미터의 값은 데이터 요소의 랭크화된 세트(예를 들어, 값의 벡터의 값 내의 고유한 데이터 값)로 선택되며, 각 데이터 요소의 랭크는 벡터에 포함된 모든 값에 걸쳐 해당 데이터 요소의 중앙값 랭크와 같다. 예시를 위해, 도 9c의 각 데이터 요소의 중앙값 랭크가 아래에 계산된다:
Alice: (1, 2, 2, 1, 1); 중앙값 랭크 = 1;
Bob: (2, 1, 1, 2, 2); 중앙값 랭크 = 2;
Carol: (3, 3, 3, 3, 4); 중앙값 랭크 = 3;
Dave: (4, 4, 4, 5, 5); 중앙값 랭크 = 4;
Ed: (5, 5, 6, 4, 3); 중앙값 랭크 = 5;
Frank: (6, 6, 5, 6, 6); 중앙값 랭크 = 6.
따라서, "중앙값에 의거한 랭크"하에서, 값들의 벡터(430)에 기초하여 계산된 랭크화된 데이터 요소 세트에 대한 값은(1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank)이다. 일부 실시예들에서, 2개 이상의 데이터 요소들이 동일한 중앙값(예를 들면, 동점)을 갖는 경우, 그 순서는 임의의 적합한 방법(예를 들어, 랜덤하게, 랭크의 최초 표시, 랭크의 최종 표시, 알파벳순 및/또는 수치순, 등)으로 결정될 수 있다.
추가적인 예를 들면, "Kemeny Young 투표"에 따라 선택이 수행될 수 있는데, 여기서 파라미터의 값은 랭크화된 데이터 요소 세트가 되도록 선택되며, 랭크는 비용 값을 최소화하도록 계산된다. 예를 들어 Alice는 5개 값들의 벡터로부터 총 3개에 대해, 값들의 벡터(431, 434, 435)에서 Bob 이전에 랭크화된다. Bob는 5개의 값들의 벡터 중에서 총 2개에 대해 값들의 벡터(432, 433)의 벡터에서 Alice 이전에 랭크화된다. Bob 이전에 Alice를 랭크 지정하기 위한 비용 값은 2/5이고 Alice 이전에 Bob를 랭크 지정하기 위한 비용 값은 3/5이다. 따라서, Bob 이전 Alice에 대한 비용 값은 더 낮으며, Alice는 "Kemeny Young 투표"에서 Bob 이전의 랭크화된다.
"대다수 규칙", "대다수 출현", "중앙값에 의거한 랭크" 및 "Kemeny Young 투표"는 파라미터에 대한 값의 벡터에 기초하여 파라미터에 대한 값을 선택하는 데 사용할 수 있는 방법 및/또는 프로세스의 예로 설명된다는 것을 이해하여야 한다. 임의의 다른 방법 및/또는 프로세스가 또한 사용될 수 있다. 예를 들어, 파라미터의 값은 벡터에 포함된 값의 x %를 초과하여 나타나는 값이 되도록 선택될 수 있으며, 여기서 x %는 임의의 백분율일 수 있다(즉, "대다수 규칙"에서 사용된 바와 같은 50 %에 제한되지 않음). 백분율(즉, x %)은 또한 다른 시간에 수행된 선택에 걸쳐, 예를 들어 신뢰도 값(여기에서 상세히 설명 됨)과 관련하여 변할 수 있다.
일부 실시예에서, 컴퓨팅 디바이스는 값을 교환하는 다른 컴퓨팅 디바이스를 랜덤으로 선택할 수 있기 때문에, 컴퓨팅 디바이스의 값들의 벡터는 임의의 한 시점에서 다른 단일 컴퓨팅 디바이스로부터의 다수의 값을 포함할 수 있다. 예를 들어 벡터 크기가 5인 경우 컴퓨팅 디바이스는 마지막 5 번의 값 교환 반복 내에서 다른 컴퓨팅 디바이스를 두 번 랜덤으로 선택할 수 있다. 따라서 다른 컴퓨팅 디바이스의 분산 데이터베이스 인스턴스에 저장된 값은 요청한 컴퓨팅 디바이스의 5개 값들의 벡터에 두 번 포함된다.
도 10a 및 도 10d는 함께 하나의 컴퓨팅 디바이스가 다른 컴퓨팅 디바이스와 통신할 때 값의 벡터가 업데이트될 수 있는 방식을 예로서 도시한다. 예를 들어, 컴퓨팅 디바이스(400)는 초기에 값들의 벡터(510)를 정의할 수 있다. 일부 실시예에서, 값들의 벡터(510)는 컴퓨팅 디바이스(400)에서 분산 데이터베이스 인스턴스(403)에 저장된 파라미터에 대한 값에 기초하여 정의될 수 있다. 예를 들어, 값들의 벡터(510)가 최초 정의될 때, 값들의 벡터(510)로부터의 각 값(즉, 값들(511, 512, 513, 514, 515)의 각각)은 분산 데이터베이스 인스턴스(403)에 저장된 파라미터에 대한 값과 같도록 설정될 수 있다. 예를 들어, 값(510)의 벡터가 정의되는 시점에서 분산 데이터베이스 인스턴스(403)에 저장된 파라미터에 대한 값이 "예"이면, 이때, 값들의 벡터(510)(즉, 값(511, 512, 513, 514, 515) 각각)는 도 10a에 도시된 바와 같이 "예"로 설정될 것이다. 컴퓨팅 디바이스(400)가 다른 컴퓨팅 디바이스의 분산 데이터베이스의 인스턴스(예를 들어, 컴퓨팅 디바이스(500)의 분산 데이터베이스 인스턴스(504))에 저장된 파라미터에 대한 값을 수신하면, 컴퓨팅 디바이스(400)는 분산 데이터베이스 인스턴스(504)에 저장된 파라미터에 대한 값을 포함하도록 값들의 벡터(510)를 업데이트할 수 있다. 일부 경우에, 값들의 벡터(510)는 선입선출(FIFO)에 따라 업데이트될 수 있다. 예를 들어, 컴퓨팅 디바이스(400)가 값 516("예")을 수신하면, 컴퓨팅 디바이스(400)는 도 10b에 도시된 바와 같이 값들의 벡터(510)에 이 값(516)을 추가하고 값들의 벡터(510)로부터 값(511)을 삭제함으로써 값들의 벡터(520)를 정의한다. 예를 들어, 나중 시간에 컴퓨팅 디바이스가 값 517, 518을 수신하면, 컴퓨팅 디바이스(400)는 값들의 벡터(510)에 이 값들(517, 518)을 추가하고 값들의 벡터(510)으로부터 값(512, 513)을 각각 삭제함으로써 값들의 벡터(530, 540)를 각각 정의한다. 다른 예들에서, 값들의 벡터(510)는 LIFO(Last In, First Out)와 같은 선입 선출(First In, First Out) 이외의 방식에 따라 업데이트될 수 있다.
컴퓨팅 디바이스(400)가 값들의 벡터(520, 530 및/또는 540)를 정의하기 위해 값들의 벡터(510)를 업데이트한 후에, 컴퓨팅 디바이스(400)는 값들의 벡터(520, 530 및/또는 540)에 기초하여 파라미터에 대한 값을 선택할 수 있다 . 이러한 선택은 도 9a 내지 도 9c에 관하여 전술한 바와 같이 임의의 방법 및/또는 프로세스(예를 들어, 규칙 또는 규칙들의 세트)에 따라 수행될 수 있다.
일부 경우에, 컴퓨팅 디바이스(400, 500)는 금융 상품을 포함하는 트랜잭션과 관련된 정보를 저장하는 분산 데이터베이스 시스템에 속할 수 있다. 예를 들어, 각 컴퓨팅 디바이스(400, 500)는 특정 주식이 구매 가능한지("파라미터"의 예)에 대해 이진 투표("값"의 예)를 저장할 수 있다. 예를 들어, 컴퓨팅 디바이스(400)의 분산 데이터베이스 인스턴스(403)는 특정 주식이 실제로 구매 가능하다는 것을 나타내는 "예" 값을 저장할 수 있다. 한편, 컴퓨팅 디바이스(500)의 분산 데이터베이스 인스턴스(503)는 특정 주식이 구매 가능하지 않다는 것을 나타내는 "아니오"의 값을 저장할 수 있다. 일부 경우에, 컴퓨팅 디바이스(400)는 초기에 분산 데이터베이스 인스턴스(403)에 저장된 이진 투표에 기초한 이진 투표의 벡터를 정의할 수 있다. 예를 들어, 컴퓨팅 디바이스(400)는 분산 데이터베이스 인스턴스(403)에 저장된 이진 투표와 동일하도록 이진 투표의 벡터 내에서 각 이진 투표를 설정할 수 있다. 이 경우, 컴퓨팅 디바이스(400)는 값들의 벡터(510)와 유사한 이진 투표들의 벡터를 정의할 수 있다. 일부 추후 시간에, 컴퓨팅 디바이스(400)는 컴퓨팅 디바이스(500)와 통신하여 컴퓨팅 디바이스(500)에 특정 주식의 구매 가능 여부에 대한 그 이진 투표를 송신해줄 것을 요청할 수 있다. 컴퓨팅 디바이스(400)가 컴퓨팅 디바이스(500)의 이진 투표를 수신하면(이 예에서, 특정 주식이 구매 가능하지 않음을 나타내는 "아니오"), 컴퓨팅 디바이스(400)는 그 이진 투표들의 벡터를 업데이트할 수 있다. 예를 들어, 이진 투표의 업데이트된 벡터는 값들의 벡터(520)와 유사할 수 있다. 이는 신뢰도 값이 미리 결정된 기준(본 명세서에서 더 상세하게 설명됨)을 충족할 때까지, 주기적으로 및/또는 등등으로 무한히 발생할 수 있다.
도 11은 일 실시예에 따른, 분산 데이터베이스 시스템(100) 내에서 컴퓨팅 디바이스(110)에 의해 수행되는 단계들을 예시하는 흐름도(10)를 도시한다. 단계 11에서, 컴퓨팅 디바이스(110)는 분산 데이터베이스 인스턴스(113)에 저장된 파라미터의 값에 기초하여 파라미터에 대한 값들의 벡터를 정의한다. 일부 실시예에서, 컴퓨팅 디바이스(110)는 분산 데이터베이스 인스턴스(113)에 저장된 파라미터에 대한 값에 기초하여 파라미터에 대한 값들의 벡터를 정의할 수 있다. 단계 12에서, 컴퓨팅 디바이스(110)는 분산 데이터베이스 시스템(110) 내의 다른 컴퓨팅 디바이스를 선택하고, 선택된 컴퓨팅 디바이스의 분산 데이터베이스 인스턴스에 저장된 파라미터에 대한 값을 선택된 컴퓨팅 디바이스로부터 요청한다. 예를 들어, 컴퓨팅 디바이스(110)는 컴퓨팅 디바이스(120, 130, 140) 중에서 컴퓨팅 디바이스(120)를 랜덤으로 선택하고, 컴퓨팅 디바이스(120)로부터 분산 데이터베이스 인스턴스(123)에 저장된 파라미터의 값을 요청할 수 있다. 단계 13에서, 컴퓨팅 디바이스(110)는 (1) 선택된 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120))로부터 선택된 컴퓨팅 디바이스의 분산 데이터베이스 인스턴스(예를 들어, 분산 데이터베이스 인스턴스(123))에 저장된 파라미터 값에 대한 값을 수신하고 및 (2) 분산 데이터베이스 인스턴스(113)에 저장된 파라미터에 대한 값을 선택된 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120))에 송신한다. 단계 14에서, 컴퓨팅 디바이스(110)는 선택된 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120))로부터 수신된 파라미터에 대한 값을 파라미터에 대한 값들의 벡터에 저장한다. 단계 15에서, 컴퓨팅 디바이스(110)는 파라미터에 대한 값들의 벡터에 기초하여 파라미터에 대한 값을 선택한다. 이러한 선택은 도 9a 내지 도 9c에 관하여 전술한 바와 같이 임의의 방법 및/또는 프로세스(예를 들어, 규칙 또는 규칙들의 세트)에 따라 수행될 수 있다. 일부 실시예에서, 컴퓨팅 디바이스(110)는 상이한 시간에 파라미터에 대한 값의 선택을 반복할 수 있다. 컴퓨팅 디바이스(110)는 또한 파라미터에 대한 값의 각 선택 사이에서 단계 12 내지 단계 14를 통해 반복적으로 순환할 수 있다.
일부 경우에, 분산 데이터베이스 시스템(100)은 MMG(Massively Multiplayer Game) 내의 트랜잭션과 관련된 정보를 저장할 수 있다. 예를 들어, 분산 데이터베이스 시스템(100)에 속하는 각 컴퓨팅 디바이스는 특정 아이템이 소유되는 순서("파라미터"의 예)에 대해 랭크화된 플레이어의 세트("값"의 예)를 저장할 수 있다. 예를 들어, 컴퓨팅 디바이스(110)의 분산 데이터베이스 인스턴스(114)는 랭크화된 플레이어의 세트(1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank)를 값 431과 비슷하게 저장하여 특정 아이템의 소유가 Alice에서 시작되고, 그 다음에 Bob에게 전달되고, Carol에게 전달된 다음 Dave로 전달된 다음 Ed로 전달되고, 마침내 Frank에게 전달되었다는 것을 나타낼 수 있다. 컴퓨팅 디바이스(120)의 분산 데이터베이스 인스턴스(124)는 값(432)과 유사하게 랭크화된 플레이어의 세트의 값을 저장할 수 있으며: (1. Bob, 2. Alice, 3. Carol, 4. Dave, 5. Ed, 6. Frank); 컴퓨팅 디바이스(130)의 분산 데이터베이스 인스턴스(134)는 값(433)과 유사하게 랭크화된 플레이어의 세트의 값을 저장할 수 있고: (1. Bob, 2. Alice, 3. Carol, 4. Dave, 5. Frank, 6. Ed); 컴퓨팅 디바이스(140)의 분산 데이터베이스 인스턴스(144)는 값(434)과 유사하게 랭크화된 플레이어들의 세트의 값을 저장할 수 있으며: (1. Alice, 2. Bob, 3. Carol, 4. Ed, 5. Dave, 6. Frank); (도 1에 도시되지 않은) 제5 컴퓨팅 디바이스의 분산 데이터베이스 인스턴스는 값(435)과 유사하게 랭크화된 플레이어들의 세트의 값을 저장할 수 있다: (1. Alice, 2. Bob, 3. Ed, 4. Carol, 5. Dave, 6. Frank).
컴퓨팅 디바이스(110)가 랭크화된 플레이어들의 세트의 벡터를 정의한 후에, 컴퓨팅 디바이스는 분산 데이터베이스 시스템(100)의 다른 컴퓨팅 디바이스로부터 랭크화된 플레이어들의 세트의 값들을 수신할 수 있다. 예를 들어, 컴퓨팅 디바이스(110)는 (1. Bob, 2. Alice, 3. Carol, 4. Dave, 5. Ed, 6. Frank)를 컴퓨팅 디바이스(120)로부터 수신할 수 있고; (1. Bob, 2. Alice, 3. Carol, 4. Dave, 5. Frank, 6. Ed)를 컴퓨팅 디바이스(130)로부터 수신할 수 있고; (1. Alice, 2. Bob, 3. Carol, 4. Ed, 5. Dave, 6. Frank)를 컴퓨팅 디바이스(140)로부터 수신할 수 있으며; (1. Alice, 2. Bob, 3. Ed, 4. Carol, 5. Dave, 6. Frank)를 제5 컴퓨팅 디바이스(도 1에 도시되지 않음)로부터 수신할 수 있다. 컴퓨팅 디바이스(110)가 다른 컴퓨팅 디바이스로부터 랭크화된 플레이어들의 세트의 값을 수신하면, 컴퓨팅 디바이스(110)는 다른 컴퓨팅 디바이스로부터 수신된 랭크화된 플레이어의 세트의 값을 포함하도록 랭크화된 플레이어의 세트의 그 벡터를 업데이트할 수 있다. 예를 들어, 위에 열거된 랭크화된 세트의 값을 수신한 후에, 컴퓨팅 디바이스(110)의 분산 데이터베이스 인스턴스(114)에 저장된 랭크화된 플레이어들의 세트의 벡터는 값들의 벡터(430)와 유사하도록 업데이트될 수 있다. 랭크화된 플레이어들의 세트의 벡터가 값들의 벡터(430)와 유사하도록 업데이트된 후에, 컴퓨팅 디바이스(110)는 랭크화된 플레이어들의 세트의 벡터에 기초하여 랭크화된 플레이어들의 세트를 선택할 수 있다. 예를 들어, 선택은 도 9a 내지 도 9c와 관련하여 전술한 바와 같이 "중앙값에 의거한 랭크"에 따라 수행될 수 있다. "중앙값에 의거한 랭크"하에서, 컴퓨팅 디바이스(110)는 (1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank)를 값들의 벡터(430)와 유사하게 랭크화된 플레이어들의 세트의 벡터에 기초하여 선택한다.
일부 경우에, 컴퓨팅 디바이스(110)는 다른 컴퓨팅 디바이스로부터 전체 값을 수신하지 못한다. 일부 경우에, 컴퓨팅 디바이스(110)는 부분 자체가 아닌 암호 해시 값과 같은 전체 값(합성 값으로도 지칭됨)의 부분과 연관된 식별자를 수신할 수 있다. 예시를 위해, 컴퓨팅 디바이스(110)는 일부 경우에 (1. Alice, 2. Bob, 3. Carol, 4. Ed, 5. Dave, 6. Frank)인 전체 값(434)을 컴퓨팅 디바이스(140)로부터 수신하지 못하고, 단지 (4. Ed, 5. Dave, 6. Frank)만을 컴퓨팅 디바이스(140)로부터 수신한다. 달리 말하면, 컴퓨팅 디바이스(110)는 컴퓨팅 디바이스(140)로부터 (1. Alice, 2. Bob, 3. Carol)의 값(434)의 특정 부분을 수신하지 못한다. 그 대신에, 컴퓨팅 디바이스(110)는 컴퓨팅 디바이스(140)로부터 값(434)의 이들 부분, 즉 (1. Alice, 2. Bob, 3. Carol)과 연관된 암호 해시 값을 수신할 수 있다.
암호 해시 값은 연관된 값의 부분을 고유하게 나타낸다. 예를 들어, (1. Alice, 2. Bob, 3. Carol)을 나타내는 암호 해시는 다음을 나타내는 암호 해시와 다르다:
(1. Alice);
(2. Bob);
(3. Carol);
(1. Alice, 2. Bob);
(2. Bob, 3. Carol);
(1. Bob, 2. Alice, 3. Carol);
(1. Carol, 2. Bob, 3. Alice);
등.
컴퓨팅 디바이스(110)가 컴퓨팅 디바이스(140)로부터 값(434)의 특정 부분과 연관된 암호 해시 값을 수신한 후에, 컴퓨팅 디바이스(110)는 (1) 분산 데이터베이스 인스턴스(113)에 저장된 값(431)의 동일한 부분을 사용하여 암호 해시 값을 생성하고, (2) 생성된 암호 해시 값을 수신된 암호 해시 값과 비교한다.
예를 들어, 컴퓨팅 디바이스(110)는 컴퓨팅 디바이스(140)로부터 이탤릭체로 표시된 값(434)의 특정 부분과 연관된 암호 해시 값을 수신할 수 있다: (1. Alice, 2. Bob, 3. Carol , 4. Ed, 5. Dave, 6. Frank). 그 다음, 컴퓨팅 디바이스는 이탤릭체로 표시된 (분산 데이터베이스 인스턴스(113)에 저장된) 값(431)의 동일한 부분을 사용하여 암호 해시 값을 생성할 수 있다: (1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank). 값 434의 이탤릭체 부분과 값 431의 이탤릭체 부분이 동일하기 때문에, (값 434의 이탤릭체 부분과 연관된) 수신된 암호 해시 값은 (값 431의 이탤릭체 부분과 연관된) 생성된 암호 해시 값과 동일할 것이다.
생성된 암호 해시 값을 수신된 암호 해시 값과 비교함으로써, 컴퓨팅 디바이스(110)는 컴퓨팅 디바이스(140)로부터 수신된 암호 해시 값과 연관된 실제 부분을 요구할 것인지를 결정할 수 있다. 생성된 암호 해시 값이 수신된 암호 해시 값과 동일한 경우, 컴퓨팅 디바이스(110)는 수신된 암호 해시 값과 연관된 실제 부분과 동일한 사본이 분산 데이터베이스 인스턴스(113)에 이미 저장되어 있고, 따라서 실제 수신된 암호 해시 값과 연관된 부분은 컴퓨팅 디바이스(140)로부터 필요하지 않다고 결정할 수 있다. 다른 한편, 생성된 암호 해시 값이 수신된 암호 해시 값과 동일하지 않으면, 컴퓨팅 디바이스(110)는 컴퓨팅 디바이스(140)로부터 수신된 암호 해시 값과 연관된 실제 부분을 요청할 수 있다.
전술한 암호 해시 값은 단일 값의 일부와 연관되지만, 암호 해시 값은 전체 단일 값 및/또는 다수의 값과 연관될 수 있음을 이해해야 한다. 예를 들어, 일부 실시예에서, 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(140))는 그 분산 데이터베이스 인스턴스(예를 들어, 분산 데이터베이스 인스턴스(144))에 값들의 세트를 저장할 수 있다. 그러한 실시예들에서, 값이 데이터베이스 인스턴스에서 업데이트된 이후의 미리 결정된 시간 기간 이후, 값에 대한 신뢰도 값(도 13과 관련하여 설명됨)이 미리 결정된 기준을 충족시킨 이후(예를 들어, 미리 결정된 임계값에 도달), 트랜잭션이 시작된 이후의 특정 시간의 양 이후 및/또는 임의의 다른 적합한 요인에 기초하여, 해당 값은 데이터가 다른 데이터베이스 인스턴스로부터 요청되고 다른 데이터베이스 인스턴스로 송신될 때 다른 값들과 함께 암호 해시 값에 포함될 수 있다. 이렇게 하면 데이터베이스 인스턴스간에 송신되는 특정 값의 수가 줄어든다.
예를 들어, 데이터베이스의 값들의 세트에는 2000년에서 2010년 사이의 트랜잭션을 포함하는 제1 값들의 세트; 2010년에서 2013년 사이의 트랜잭션을 포함하는 제2 값들의 세트; 2013년에서 2014년 사이의 트랜잭션을 포함하는 제3 값들의 세트; 및 2014년과 현재 사이의 트랜잭션을 포함하여 제4 값들의 세트가 포함될 수 있다. 이 예를 사용하여, 컴퓨팅 디바이스(110)가 컴퓨팅 디바이스(140)의 분산 데이터베이스 인스턴스(144)에 저장된 데이터를 컴퓨팅 디바이스(140)로부터 요청하는 경우, 일부 실시예에서 컴퓨팅 디바이스(140)는 컴퓨팅 디바이스(110)에 (1) 제1 값들의 세트와 연관된 제1 암호 해시 값, (2) 제2 값들의 세트와 연관된 제2 암호 해시 값, (3) 제3 값들의 세트와 연관된 제3 암호 해시 값; 및 (4) 제4 값들의 세트으로부터의 각 값을 송신할 수 있다. 값이 암호 해시에 추가되는 시기에 대한 기준은 관리자나 개별 사용자가 이미 데이터베이스 인스턴스에 있는 값의 수 및/또는 등등에 따라 설정할 수 있다. 각 개별 값 대신 암호 해시 값을 송신하면 데이터베이스 인스턴스간에 값을 교환할 때 제공되는 개별 값의 수가 줄어든다.
수신 컴퓨팅 디바이스(예컨대, 도 8의 단계 2에서 컴퓨팅 디바이스(400))는 (예를 들어, 분산 데이터베이스 인스턴스(503)의 값에 기초하여 컴퓨팅 디바이스(500)에 의해 생성된) 암호 해시 값을 수신하면, 해당 컴퓨팅 디바이스는 수신된 암호 해시 값을 생성하는 데 사용된 파라미터들(예를 들어, 지정된 시간 기간 동안의 트랜잭션들)에 대해 동일한 방법 및/또는 프로세스 및 그 데이터베이스 인스턴스(예를 들어, 분산 데이터베이스 인스턴스(403))의 값들을 사용하여 암호 해시 값을 생성한다. 그후, 수신 컴퓨팅 디바이스는 수신된 암호 해시 값과 생성된 암호 해시 값을 비교할 수 있다. 값들이 일치하지 않으면, 수신 컴퓨팅 디바이스는 송신 컴퓨팅 디바이스(예를 들어, 도 8의 컴퓨팅 디바이스(500))로부터 수신된 암호 해시를 생성하는 데 사용된 개별 값을 요청할 수 있고 송신 데이터베이스 인스턴스(예를 들어, 분산 데이터베이스 인스턴스(503))로부터의 개별 값을 수신된 데이터베이스 인스턴스(예를 들어, 분산 데이터베이스 인스턴스(403))에서의 이들 트랜잭션들에 대한 개별 값들과 비교할 수 있다.
예를 들어 수신 컴퓨팅 디바이스가 2000년에서 2010년 사이의 트랜잭션과 연관된 암호 해시 값을 수신하면 수신 컴퓨팅 디바이스는 그 데이터베이스 인스턴스에 저장된 2000년에서 2010년 사이의 트랜잭션에 대한 값을 사용하여 암호 해시를 생성할 수 있다. 수신된 암호 해시 값이 로컬에서 생성된 암호 해시 값과 일치하면 수신 컴퓨팅 디바이스는 두 데이터베이스에서 2000년에서 2010년 사이의 트랜잭션에 대한 값이 동일하고 추가 정보를 요청할 필요가 없다고 가정할 수 있다. 그러나, 수신된 암호 해시 값이 로컬에서 생성된 암호 해시 값과 일치하지 않으면, 수신 컴퓨팅 디바이스는 수신된 암호 해시 값을 생성하기 위해 송신 컴퓨팅 디바이스가 사용한 개별 값을 요청할 수 있다. 그후, 수신 컴퓨팅 디바이스는 불일치를 식별하고 해당 개별 값에 대한 값의 벡터를 업데이트할 수 있다.
암호 해시 값은 임의의 적합한 프로세스 및/또는 해시 함수에 의존하여 값의 다수의 값 및/또는 부분을 단일 식별자로 조합할 수 있다. 예를 들어, 임의의 적합한 수의 값(예를 들어, 시간 기간 내의 트랜잭션)이 해시 함수에 대한 입력으로서 사용될 수 있고 해시 값은 해시 함수에 기초하여 생성될 수 있다.
전술한 설명은 값 및/또는 값의 부분과 연관된 식별자로서 암호 해시 값을 사용하지만, 다수의 값 및/또는 값의 부분을 나타내기 위해 사용되는 다른 식별자가 사용될 수 있음을 이해해야 한다. 다른 식별자의 예는 디지털 지문, 체크섬, 정규 해시 값 및/또는 등등을 포함한다.
도 12는 일 실시예에 따른, 분산 데이터베이스 시스템(100) 내에서 컴퓨팅 디바이스(110)에 의해 수행되는 단계들을 예시하는 흐름도(흐름도 20)를 도시한다. 도 12에 도시된 실시예에서, 값들의 벡터는 미리 정의된 확률에 기초하여 재설정된다. 마찬가지로 말하면, 값들의 벡터의 각 값은 종종 그리고 확률에 기초하여 소정 값으로 재설정될 수 있다. 단계 21에서, 컴퓨팅 디바이스(110)는 도 11에 도시되고 앞서 설명된 단계 15와 유사하게, 파라미터에 대한 값들의 벡터에 기초하여 파라미터에 대한 값을 선택한다. 단계 22에서, 컴퓨팅 디바이스(110)는 다른 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120,130,140))로부터 파라미터에 대한 값을 수신하고 분산 데이터베이스 인스턴스(113)에 저장된 파라미터에 대한 값을 다른 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120, 130, 140))에 송신한다. 예를 들어, 단계 22는 다른 컴퓨팅 디바이스 각각에 대해 도 11에 도시되고 위에서 설명된 단계 12 및 13을 수행하는 단계를 포함할 수 있다. 단계 23에서, 컴퓨팅 디바이스(110)는 도 11에 도시되고 위에서 설명된 단계 14와 유사하게, 다른 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120,130,140))로부터 수신된 파라미터에 대한 값을 파라미터 값에 대한 벡터로 저장한다. 단계 24에서, 컴퓨팅 디바이스(110)는 값들의 벡터를 재설정하는 미리 정의된 확률에 기초하여 값들의 벡터를 재설정할지 여부를 결정한다. 예를 들어, 컴퓨팅 디바이스(110)가 분산 데이터베이스 인스턴스(114)에 저장된 파라미터에 대한 값들의 벡터를 업데이트하는 각 시기 이후, 컴퓨팅 디바이스(110)가 파라미터에 대한 값들의 벡터를 재설정할 10 %의 확률이 존재한다. 그러한 시나리오에서, 단계 24에서, 컴퓨팅 디바이스(110)는 10 % 확률에 기초하여 재설정 여부를 결정할 것이다. 결정은 몇몇 경우에 컴퓨팅 디바이스(110)의 프로세서(111)에 의해 수행될 수 있다.
컴퓨팅 디바이스(110)가 미리 정의된 확률에 기초하여 값들의 벡터를 재설정하도록 결정하면, 단계 25에서 컴퓨팅 디바이스(110)는 값들의 벡터를 재설정한다. 일부 실시예에서, 컴퓨팅 디바이스(110)는 재설정시에 분산 데이터베이스 인스턴스(113)에 저장된 파라미터에 대한 값과 동일하게 파라미터에 대한 값들의 벡터의 각 값을 재설정할 수 있다. 예를 들어, 재설정 직전에, 값들의 벡터가 값들의 벡터(430)이고, 분산 데이터베이스 인스턴스(113)에 저장된 파라미터에 대한 값이 (1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank)인 경우(예를 들어, "중앙값에 의거한 랭크" 하에), 이때, 값들의 벡터의 각 값은 (1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank)와 같도록 재설정된다. 달리 말하면, 값들의 벡터(430)의 값들(431, 432, 433, 434, 435) 각각은 동일한 값(431)으로 재설정될 것이다. 재설정시 분산 데이터베이스 인스턴스에 저장된 파라미터에 대한 값과 동일하도록 파라미터에 대한 값들의 벡터의 각 값을 종종 그리고 확률에 기초하여 재설정하는 것은 (컴퓨팅 디바이스가 속하는) 분산 데이터베이스 시스템이 컨센서스에 도달하는 것을 돕는다. 유사하게 말하면, 재설정은 분산 데이터베이스 시스템의 컴퓨팅 디바이스간에 파라미터의 값에 대한 합의를 용이하게 한다.
예를 들어, 컴퓨팅 디바이스(110)의 분산 데이터베이스 인스턴스(114)는 랭크화된 플레이어의 세트(1. Alice, 2. Bob, 3. Carol, 4. Dave, 5. Ed, 6. Frank)를 값 431과 비슷하게 저장하여 특정 아이템의 소유가 Alice에서 시작되고, 그 다음에 Bob에게 전달되고, Carol에게 전달된 다음 Dave로 전달된 다음 Ed로 전달되고, 마침내 Frank에게 전달되었다는 것을 나타낼 수 있다.
도 13은 일 실시예에 따른, 분산 데이터베이스 시스템(100) 내에서 컴퓨팅 디바이스(110)에 의해 수행되는 단계들을 도시하는 흐름도(흐름도 30)를 나타낸다. 도 13에 도시된 실시예에서, 분산 데이터베이스의 인스턴스와 관련된 신뢰도 값이 0일 때, 파라미터에 대한 값의 벡터에 기초한 파라미터의 값에 대한 선택이 발생한다. 신뢰도 값은 컴퓨팅 디바이스(110)에 저장된 파라미터의 값과 분산 데이터베이스 시스템(100)의 다른 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120, 130, 140))에 저장된 파라미터의 값 사이의 "컨센서스" 또는 합의의 레벨을 나타낼 수 있다. 일부 실시예들에서, 본 명세서에 상세히 설명된 바와 같이, 컴퓨팅 디바이스(110)에 의해 다른 컴퓨팅 디바이스로부터 수신된 파라미터에 대한 값이 컴퓨팅 디바이스(110)에 저장된 파라미터에 대한 값과 동일할 때마다 신뢰도 값이 증분(예를 들어, 1만큼 증가)되고, 신뢰도 값이 0보다 큰 경우, 컴퓨팅 디바이스(110)에 의해 다른 컴퓨팅 디바이스로부터 수신된 파라미터에 대한 값이 컴퓨팅 디바이스(110)에 저장된 파라미터에 대한 값과 동일하지 않을 때마다 신뢰도 값이 감분(즉, 1만큼 감소)된다.
단계 31에서, 컴퓨팅 디바이스(110)는 다른 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120))로부터 파라미터에 대한 값을 수신하고 분산 데이터베이스 인스턴스(113)에 저장된 파라미터에 대한 값을 다른 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120))에 송신한다. 예를 들어, 단계 31은 도 11에 도시되고 위에서 설명된 단계 12 및 13을 수행하는 단계를 포함할 수 있다. 단계 32에서, 컴퓨팅 디바이스(110)는 도 11에 도시되고 앞서 설명된 단계 14와 유사하게, 다른 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120))로부터 수신된 파라미터에 대한 값을 파라미터 값의 벡터에 저장한다. 단계 33에서, 컴퓨팅 디바이스(110)는 다른 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120))로부터 수신된 파라미터에 대한 값이 분산 데이터베이스 인스턴스(113)에 저장된 파라미터에 대한 값과 동일한 지 여부를 결정한다. 다른 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120))로부터 수신된 파라미터에 대한 값이 분산 데이터베이스 인스턴스(113)에 저장된 파라미터에 대한 값과 동일한 경우, 이때, 컴퓨팅 디바이스(110)는 단계 34에서, 분산 데이터베이스 인스턴스(113)와 연관된 신뢰도 값을 1만큼 증분하고, 흐름도 30에 의해 예시된 프로세스는 단계 31로 되돌아간다. 다른 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(120))로부터 수신된 파라미터에 대한 값이 분산 데이터베이스 인스턴스(113)에 저장된 파라미터의 값과 동일하지 않으면, 이때, 단계 35에서 컴퓨팅 디바이스(110)는 신뢰도 값이 0보다 큰 경우, 분산 데이터베이스 인스턴스(113)와 연관된 신뢰도 값을 1만큼 감소시킨다.
단계 36에서, 컴퓨팅 디바이스(110)는 분산 데이터베이스 인스턴스(113)와 연관된 신뢰도 값이 0과 같은지 여부를 결정한다. 신뢰도 값이 0인 경우, 이때, 단계 37에서 컴퓨팅 디바이스는 파라미터에 대한 값의 벡터에 기초하여 파라미터에 대한 값을 선택한다. 이러한 선택은 전술한 바와 같이 임의의 방법 및/또는 프로세스(예를 들어, 규칙 또는 규칙 세트)에 따라 수행될 수 있다. 신뢰도 값이 0이 아니면, 그후, 흐름도 30에 의해 예시된 프로세스는 단계 31로 되돌아 간다.
위에서 설명한 것처럼 신뢰도 값은 분산 데이터베이스 인스턴스와 연관된다. 그러나, 신뢰도 값은 또한 분산 데이터베이스 인스턴스 대신 또는 그에 추가로, 분산 데이터베이스 인스턴스 및/또는 벡터의 값을 저장하는 컴퓨팅 디바이스(예를 들어, 그 분산 데이터베이스 인스턴스 내의)에 저장된 벡터의 값과 연관될 수 있음을 이해해야 한다.
도 13과 관련하여 사용된 신뢰도 값(예를 들어, 임계값, 증분 값 및 감분 값)과 연관된 값은 단지 예시적인 목적을 위한 것이다. 신뢰도 값(예를 들어, 임계값, 증분 값 및 감분 값)과 연관된 다른 값이 사용될 수 있다는 것을 이해해야 한다. 예를 들어, 각각 단계 34와 단계 35에서 사용된 신뢰도 값의 증가 및/또는 감소는 임의의 값일 수 있다. 또 다른 예를 들어, 단계 35 및 36에서 사용된 0의 신뢰도 임계값도 임의의 값일 수 있다. 또한, 신뢰도 값(예를 들어, 임계값, 증분 값 및 감분 값)과 연관된 값은 동작 과정 동안, 즉 흐름도 30에 의해 예시된 프로세스가 반복함에 따라 변경될 수 있다.
일부 실시예들에서, 신뢰도 값은 도 8과 관련하여 상술한 분산 데이터베이스 시스템으로부터의 제1 컴퓨팅 디바이스와 분산 데이터베이스 시스템으로부터의 제2 컴퓨팅 디바이스 사이의 통신 흐름에 영향을 미칠 수 있다. 예를 들어, 제1 컴퓨팅 디바이스(예를 들어, 컴퓨팅 디바이스(110))가 그 분산 데이터베이스 인스턴스(예를 들어, 분산 데이터베이스 인스턴스(114))와 연관된 높은 신뢰도 값을 갖는다면, 이때, 제1 컴퓨팅 디바이스는 제1 컴퓨팅 디바이스가 다른 경우에 제2 컴퓨팅 디바이스로부터 요청하는 것(즉, 제1 컴퓨팅 디바이스가 그 분산 데이터베이스 인스턴스와 연관된 낮은 신뢰도 값을 갖는 경우)보다 제2 컴퓨팅 디바이스로부터 파라미터에 대한 값의 더 작은 부분(그리고, 파라미터에 대한 값의 더 큰 부분과 연관된 암호 해시 값)을 요청할 수 있다. 높은 신뢰도 값은 제1 컴퓨팅 디바이스에 저장된 파라미터의 값이 분산 데이터베이스 시스템으로부터의 다른 컴퓨팅 디바이스에 저장된 파라미터의 값과 일치할 가능성이 높다는 것을 나타낼 수 있으므로 암호 해시 값이 합의를 확인하기 위해 사용된다.
일부 경우에, 제1 컴퓨팅 디바이스의 신뢰도 값은 제1 컴퓨팅 디바이스가 더 이상 특정 값, 특정 값 부분 및/또는 특정 값과 연관된 암호 해시 값 및/또는 분산 데이터베이스 시스템으로부터의 다른 컴퓨팅 디바이스로부터의 값 중 특정 부분을 요청할 필요가 없다고 결정하는 임계값에 도달하도록 증가할 수 있다. 예를 들어, 값의 신뢰도 값이 특정 기준을 충족하면(예를 들어, 임계값에 도달), 제1 컴퓨팅 디바이스는 값이 수렴했다고 결정할 수 있고, 이 값을 다른 디바이스와 교환할 것을 추가로 요청하지 않을 수 있다. 다른 예로서, 이 값은 기준을 충족하는 그 신뢰도 값에 기초하여 암호 해시 값에 추가될 수 있다. 그러한 경우에, 앞서 상세히 설명된 바와 같이 신뢰도 값이 기준을 충족시킨 후에 개별 값 대신에 값들의 세트에 대한 암호 해시 값이 송신될 수 있다. 더 적은 수의 값 및/또는 (값들의) 더 작은 실제 부분을 (값들의) 나머지 부분과 연관된 암호 해시 값과 함께 교환하는 것은 분산 데이터베이스 시스템의 컴퓨팅 디바이스 사이의 효율적인 통신을 용이하게할 수 있다.
일부 경우에, 분산 데이터베이스 인스턴스의 파라미터의 특정 값에 대한 신뢰도 값이 높아짐에 따라, 분산 데이터베이스 인스턴스와 연관된 컴퓨팅 디바이스는 다른 컴퓨팅 디바이스와의 해당 파라미터에 대한 값을 덜 빈번하게 교환하도록 요청할 수 있다. 마찬가지로 분산 데이터베이스 인스턴스의 파라미터의 특정 값에 대한 신뢰도 값이 감소함에 따라, 분산 데이터베이스 인스턴스와 연관된 컴퓨팅 디바이스가 다른 컴퓨팅 디바이스와의 해당 파라미터에 대한 값을 더 자주 교환하도록 요청할 수 있다. 따라서 신뢰도 값을 사용하여 컴퓨팅 디바이스간에 교환되는 값의 수를 줄일 수 있다.
다양한 실시예들이 설명되었지만, 이들은 단지 예로서 제시된 것이지 제한적인 것은 아니라는 것을 이해해야 한다. 위에 설명된 방법이 특정 순서로 발생하는 특정 이벤트를 나타내는 경우 특정 이벤트의 순위는 수정될 수 있다. 또한, 이벤트 중 특정 이벤트는 가능한 경우 병렬 프로세스에서 동시에 수행될 수 있을 뿐 아니라 위에서 설명한대로 순차적으로 수행될 수 있다.
본 명세서에 설명된 일부 실시예는 다양한 컴퓨터 구현 동작을 수행하기 위한 명령어 또는 컴퓨터 코드를 갖는 비-일시적 컴퓨터-판독 가능 매체(또한 비-일시적 프로세서-판독 가능 매체라고도 함)를 갖는 컴퓨터 저장 제품에 관한 것이다. 컴퓨터-판독 가능 매체(또는 프로세서-판독 가능 매체)는 일시적 전파 신호 그 자체(예를 들어, 공간 또는 케이블과 같은 전송 매체상에서 정보를 운반하는 전파하는 전자기파)를 포함하지 않는다는 개념에서 비-일시적이다. 미디어 및 컴퓨터 코드(코드라고도 함)는 특정 목적 또는 목적들을 위해 설계 및 구성된 것일 수 있다. 비-일시적 컴퓨터-판독 가능 매체의 예로는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 저장 매체; 콤팩트 디스크/디지털 비디오 디스크(CD/DVD), 콤팩트 디스크-판독 전용 메모리(CD-ROM) 및 홀로 그래픽 디바이스와 같은 광학 저장 매체; 광 디스크와 같은 자기-광학 저장 매체; 반송파 신호 처리 모듈; ASIC들(Application-Specific Integrated Circuits), PLD들(Programmable Logic Devices), ROM(Read-Only Memory) 및 RAM(Random-Access Memory) 디바이스들과 같이 프로그램 코드를 저장하고 실행하도록 특별히 구성된 하드웨어 디바이스들을 포함하지만 이에 한정되는 것은 아니다. 본 명세서에 설명된 다른 실시예들은 예를 들어 여기서 설명된 명령어들 및/또는 컴퓨터 코드를 포함할 수 있는 컴퓨터 프로그램 제품에 관한 것이다.
컴퓨터 코드의 예에는 마이크로 코드 또는 마이크로 명령어, 컴파일러에 의해 생성된 것과 같은 기계 명령어, 웹 서비스를 생성하는 데 사용되는 코드 및 인터프리터를 사용하여 컴퓨터에 의해 실행되는 상위 레벨 명령어가 포함된 파일을 포함하지만 이에 한정되는 것은 아니다. 예를 들어, 실시예는 명령형 프로그래밍 언어(예를 들어, C, Fortran 등), 함수 프로그래밍 언어(Haskell, Erlang 등), 로직 프로그래밍 언어(예를 들어, Prolog), 객체 지향 프로그래밍 언어(예를 들어,, Java, C ++ 등) 또는 다른 적합한 프로그래밍 언어 및/또는 개발 툴을 사용하여 구현될 수 있다. 컴퓨터 코드의 추가적인 예는 제어 신호, 암호화된 코드 및 압축된 코드를 포함하지만 이에 한정되지는 않는다.
다양한 실시예가 앞서 설명되었지만, 이들 실시예는 제한이 아닌 예로서만 제시되었으며, 형태 및 세부 사항에서의 다양한 변경이 이루어질 수 있다는 것을 이해해야 한다. 여기에 설명된 장치 및/또는 방법의 임의의 부분은 상호 배타적인 조합을 제외하고는 임의의 조합으로 조합될 수 있다. 본 명세서에 설명된 실시예는 설명된 상이한 실시예의 기능, 컴포넌트 및/또는 특징의 다양한 조합 및/또는 서브 조합을 포함할 수 있다.

Claims (122)

  1. 프로세서에 의해 실행되는 명령어들을 나타내는 코드를 저장하는 비-일시적 프로세서-판독 가능 매체로서, 상기 코드는 상기 프로세서로 하여금
    복수의 컴퓨팅 디바이스들 중의 제1 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스로부터 제1 이벤트를 수신하고 - 상기 복수의 컴퓨팅 디바이스들은 상기 복수의 컴퓨팅 디바이스들에 동작 가능하게 결합된 네트워크를 통해 상기 분산 데이터베이스를 구현함 -,
    상기 제1 이벤트 및 제2 이벤트에 기초하여 제3 이벤트를 정의하고,
    상기 제3 이벤트에 적어도 부분적으로 기초하여 제1 이벤트들의 세트를 결정하고 - 상기 제1 이벤트들의 세트 중의 각 이벤트는,
    제2 이벤트들의 세트에 의해 식별되고, 상기 제2 이벤트들의 세트와 연관된 종합 지분 값은 제1 지분 값 기준을 충족하고, 상기 제2 이벤트들의 세트 중의 각 이벤트는 (1) 상기 분산 데이터베이스의 상이한 인스턴스에 의해 정의되고 (2) 상기 제3 이벤트에 의해 식별되고,
    제1 라운드 번호와 연관됨 -,
    상기 제1 이벤트들의 세트 중의 각 이벤트와 연관된 지분 값들의 합이 제2 지분 값 기준을 충족시킨다는 결정에 기초하여 상기 제3 이벤트에 대한 라운드 번호를 계산하고 - 상기 제3 이벤트에 대한 라운드 번호는 상기 제1 라운드 번호보다 큰 제2 라운드 번호에 대응함 -;
    상기 제3 이벤트에 기초하여 제3 이벤트들의 세트를 결정하고 - 상기 제3 이벤트들의 세트 중의 각 이벤트는,
    상기 제3 이벤트를 포함하는 제4 이벤트들의 세트에 의해 식별되고, 상기 제4 이벤트들의 세트 중의 각 이벤트는 상기 분산 데이터베이스의 상이한 인스턴스에 의해 정의되고, 상기 제4 이벤트들의 세트와 연관된 종합 지분 값은 제3 지분 값 기준을 충족시키고,
    상기 제1 이벤트들의 세트로부터 유래됨 -,
    제4 지분 값 기준을 충족시키는 상기 제3 이벤트들의 세트와 연관된 종합 지분 값에 적어도 부분적으로 기초하여 제4 이벤트에 대한 순서 값을 정의하고,
    상기 순서 값을 상기 복수의 컴퓨팅 디바이스들 중의 제2 컴퓨팅 디바이스에서의 분산 데이터베이스의 인스턴스에 저장하게 하는
    코드를 포함하는, 비-일시적 프로세서-판독 가능 매체.
  2. 제1항에 있어서, 상기 프로세서로 하여금
    지분 값들의 세트의 합에 기초하여 상기 제3 이벤트들의 세트와 연관된 종합 지분 값을 계산하게 하는 코드를 더 포함하고, 상기 지분 값들의 세트 중의 각 지분 값은 상기 제3 이벤트들의 세트 중의 이벤트를 정의한 상기 분산 데이터베이스의 인스턴스와 연관되는, 비-일시적 프로세서-판독 가능 매체.
  3. 제1항에 있어서, 상기 프로세서로 하여금 상기 제4 이벤트에 대한 순서 값을 정의하게 하는 상기 코드는 상기 프로세서로 하여금 상기 제4 지분 값 기준을 충족시키는 종합 지분 값을 갖는 상기 제3 이벤트들의 세트에 의해 식별되는 상기 제4 이벤트에 기초하여 상기 제4 이벤트와 연관된 수신된 라운드 번호를 결정하게 하는 코드를 포함하는, 비-일시적 프로세서-판독 가능 매체.
  4. 제1항에 있어서, 상기 프로세서로 하여금
    상기 제3 이벤트들의 세트 중의 나머지 이벤트들과 연관된 값과 동일한 상기 제3 이벤트들의 세트 중의 각 이벤트와 연관된 값에 기초하여 상기 제3 이벤트들의 세트를 결정하게 하는 코드를 더 포함하고, 상기 제3 이벤트들의 세트 중의 각 이벤트와 연관된 값은 (1) 상기 제4 이벤트와 연관되고 (2) 상기 제3 이벤트들의 세트 중의 해당 이벤트가 식별할 수 있는 상기 제4 이벤트들의 세트 중의 각 이벤트에 대한 값에 기초하고,
    상기 제4 지분 값 기준은 상기 제3 이벤트들의 세트와 연관된 종합 지분 값이 상기 제4 이벤트들의 세트와 연관된 종합 지분 값에 기초한 임계값보다 큰 경우 상기 제3 이벤트들의 세트에 의해 충족되는, 비-일시적 프로세서-판독 가능 매체.
  5. 제1항에 있어서, 상기 제2 지분 값 기준은 상기 분산 데이터베이스의 종합 지분 값과 연관된 미리 정의된 비율에 기초하고, 상기 코드는 상기 프로세서로 하여금
    상기 제3 이벤트들의 세트에 의해 충족되는 상기 제4 지분 값 기준에 기초하여 상기 제3 이벤트의 라운드 번호를 상기 제4 이벤트에 대해 수신된 라운드 번호로 연관시키게 하는 코드를 더 포함하는, 비-일시적 프로세서-판독 가능 매체.
  6. 제1항에 있어서, 상기 프로세서로 하여금
    상기 제4 이벤트들의 세트 중의 각 이벤트에 대한 값에 기초하여 상기 제3 이벤트에 대한 값을 결정하게 하는 코드를 더 포함하고,
    상기 제3 이벤트에 대한 값은 상기 제4 이벤트들의 세트에 의해 충족되는 상기 제3 지분 값 기준에 기초하여 상기 제4 이벤트들의 세트 중의 대다수의 이벤트들과 연관된 값이고,
    상기 대다수의 이벤트들과 연관된 값을 갖는 상기 제4 이벤트들의 세트 중의 각 이벤트의 종합 지분 값이 제1 임계값보다 크고 제2 임계값보다 작은 경우 상기 제3 지분 값 기준은 상기 제4 이벤트들의 세트에 의해 충족되고, 상기 제1 임계값 및 상기 제2 임계값은 상기 제4 이벤트들의 세트의 종합 지분 값에 기초하는, 비-일시적 프로세서-판독 가능 매체.
  7. 제1항에 있어서, 상기 프로세서로 하여금
    상기 제4 이벤트들의 세트 중의 각 이벤트에 대한 값에 기초하여 상기 제3 이벤트에 대한 값을 결정하게 하는 코드를 더 포함하고,
    상기 제3 이벤트에 대한 값은 상기 제4 이벤트들의 세트에 의해 충족되는 상기 제4 지분 값 기준에 기초한 의사 랜덤(pseudorandom)이고,
    상기 제4 이벤트들의 세트 중의 대다수의 이벤트들과 연관된 값을 갖는 상기 제4 이벤트들의 세트 중의 각 이벤트의 종합 지분 값이 제1 임계값보다 크고 제2 임계값보다 작은 경우 상기 제4 지분 값 기준은 상기 제4 이벤트들의 세트에 의해 충족되고, 상기 제1 임계값 및 상기 제2 임계값은 상기 제4 이벤트들의 세트와 연관된 종합 지분 값에 기초하는, 비-일시적 프로세서-판독 가능 매체.
  8. 제1항에 있어서, 상기 제4 이벤트들의 세트는 제5 이벤트들의 세트 중의 이벤트들의 서브세트이고, 상기 코드는 상기 프로세서로 하여금
    상기 이벤트들의 서브세트 중의 나머지 이벤트들과 연관된 값과 동일한 상기 이벤트들의 서브세트 중의 각 이벤트와 연관된 값에 기초하여 상기 이벤트들의 서브세트를 식별하고 - 상기 이벤트들의 서브세트 중의 각 이벤트와 연관된 값은 (1) 상기 제4 이벤트와 연관되고 (2) 상기 이벤트들의 서브세트 중의 해당 이벤트가 식별할 수 있는 제6 이벤트들의 세트 중의 각 이벤트에 대한 값에 기초하고,
    상기 제5 이벤트들의 세트는 상기 제6 이벤트들의 세트의 라운드 번호보다 큰 라운드 번호를 갖고,
    상기 이벤트들의 서브세트의 종합 지분 값이 제1 임계값보다 크고 제2 임계값보다 작은 경우 제5 지분 값 기준은 상기 이벤트들의 서브세트에 의해 충족되고, 상기 제1 임계값 및 상기 제2 임계값은 상기 제5 이벤트들의 세트의 종합 지분 값에 기초함 -,
    상기 이벤트들의 서브세트에 의해 충족되는 제5 지분 값 기준에 기초하여, 상기 제4 이벤트에 대한 순서 값을 결정하기 위해 사용되는 종합 지분 값을 갖는 제7 이벤트들의 세트를 식별 - 상기 제7 이벤트들의 세트는 상기 제5 이벤트들의 세트의 라운드 번호보다 큰 라운드 번호를 갖고, 상기 제7 이벤트들의 세트 중의 각 이벤트에 대한 값은 상기 제5 이벤트들의 세트 중의 각 이벤트와 연관된 값에 기초함 -하게 하는 코드를 더 포함하는, 비-일시적 프로세서-판독 가능 매체.
  9. 제1항에 있어서, 상기 제3 이벤트들의 세트 중의 각 이벤트는 (1) 상기 분산 데이터베이스의 상이한 인스턴스에 의해 정의되고 (2) 상기 제3 이벤트에 의해 식별되고,
    상기 제4 이벤트에 대한 순서 값은 상기 제3 이벤트의 디지털 서명과 연관된 의사-랜덤 결정에 추가로 기초하는, 비-일시적 프로세서-판독 가능 매체.
  10. 제1항에 있어서, 상기 제4 지분 값 기준은 암호 화폐와 연관된 지분 값들의 세트의 합에 적어도 부분적으로 기초하고, 상기 지분 값들의 세트 중의 각 지분 값은 상기 분산 데이터베이스의 상이한 인스턴스에 의해 보유되는 암호 화폐의 양과 연관되는, 비-일시적 프로세서-판독 가능 매체.
  11. 제1항에 있어서, 상기 제3 이벤트들의 세트와 연관된 종합 지분 값이 미리 정의된 임계값보다 큰 경우 상기 제4 지분 값 기준은 충족되고, 상기 미리 정의된 임계값은 상기 분산 데이터베이스의 종합 지분 값에 적어도 부분적으로 기초하는, 비-일시적 프로세서-판독 가능 매체.
  12. 장치로서,
    제1 컴퓨팅 디바이스에서의 분산 데이터베이스의 인스턴스를 포함하는 메모리 - 상기 제1 컴퓨팅 디바이스는 복수의 컴퓨팅 디바이스들 내에 포함되도록 구성되고, 상기 복수의 컴퓨팅 디바이스들은 상기 복수의 컴퓨팅 디바이스들에 동작 가능하게 결합된 네트워크를 통해 상기 분산 데이터베이스를 구현함 -; 및
    상기 분산 데이터베이스의 인스턴스에 동작 가능하게 결합된 프로세서
    를 포함하고,
    상기 프로세서는 제1 복수의 이벤트들에 링크된 제1 이벤트를 제1 시간에 정의하도록 구성되고 - 상기 제1 복수의 이벤트들 중의 각 이벤트는 바이트들의 시퀀스임 -,
    상기 프로세서는 상기 제1 시간 이후의 제2 시간에, 상기 복수의 컴퓨팅 디바이스들 중의 제2 컴퓨팅 디바이스로부터, (1) 상기 제2 컴퓨팅 디바이스에 의해 정의되고 (2) 제2 복수의 이벤트들에 링크된 제2 이벤트를 나타내는 신호를 수신하도록 구성되고,
    상기 프로세서는 상기 복수의 컴퓨팅 디바이스들 중의 각 컴퓨팅 디바이스와 연관된 지분 값에 적어도 부분적으로 기초하여 제3 복수의 이벤트들과 연관된 순서를 식별하도록 구성되고 - 상기 제3 복수의 이벤트들 중의 각 이벤트는 상기 제1 복수의 이벤트들 또는 상기 제2 복수의 이벤트들 중 적어도 하나로부터 유래됨 -,
    상기 제3 복수의 이벤트들 중의 각 이벤트는 속성들의 세트 중의 각 속성에 대한 값과 연관되고,
    상기 제3 복수의 이벤트들 중의 각 이벤트에 대한 상기 속성들의 세트 중의 제1 속성에 대한 값은 해당 이벤트와 해당 이벤트에 링크된 제1 이벤트들의 세트 사이의 관계가 기준을 충족하는지 여부에 기초한 제1 값을 포함하고,
    상기 제1 이벤트들의 세트 중의 각 이벤트는 (1) 상기 제3 복수의 이벤트들 중의 해당 이벤트의 조상(ancestor)이고 (2) 상기 제1 이벤트들의 세트 중의 나머지 이벤트들로서의 동일한 제1 공통 속성과 연관되고 - 상기 제1 공통 속성은 상기 복수의 컴퓨팅 디바이스들 중의 각 컴퓨팅 디바이스에 의해 정의된 제1 이벤트가 특정 값과 연관되는 초기 인스턴스를 나타냄 -,
    상기 속성들의 세트 중의 제2 속성에 대한 값은 상기 제3 복수의 이벤트들 중의 해당 이벤트와 상기 제3 복수의 이벤트들 중의 해당 이벤트에 링크된 제2 이벤트들의 세트 사이의 관계에 기초한 수치 값을 포함하고,
    상기 제2 이벤트들의 세트 중의 각 이벤트는 상기 제3 복수의 이벤트들 중의 해당 이벤트의 후손(descendant)이고, 상기 제2 이벤트들의 세트 중의 나머지 이벤트들로서의 제2 공통 속성과 연관되고,
    상기 프로세서는 상기 제3 복수의 이벤트들과 연관된 순서를 상기 분산 데이터베이스의 인스턴스에 저장하도록 구성되는, 장치.
  13. 제12항에 있어서, 상기 복수의 컴퓨팅 디바이스들 중의 각 컴퓨팅 디바이스와 연관된 지분 값은 상기 복수의 컴퓨팅 디바이스들 중의 해당 컴퓨팅 디바이스에서 상기 분산 데이터베이스의 인스턴스와 연관된 암호 화폐의 양에 비례하는, 장치.
  14. 제12항에 있어서,
    상기 기준은 (1) 상기 제1 이벤트들의 세트와 연관된 지분 값들의 조합 및 (2) 상기 복수의 컴퓨팅 디바이스들 중의 각 컴퓨팅 디바이스와 연관된 지분 값에 기초하여 정의된 임계값의 비교에 기초하는, 장치.
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
  39. 삭제
  40. 삭제
  41. 삭제
  42. 삭제
  43. 삭제
  44. 삭제
  45. 삭제
  46. 삭제
  47. 삭제
  48. 삭제
  49. 삭제
  50. 삭제
  51. 삭제
  52. 삭제
  53. 삭제
  54. 삭제
  55. 삭제
  56. 삭제
  57. 삭제
  58. 삭제
  59. 삭제
  60. 삭제
  61. 삭제
  62. 삭제
  63. 삭제
  64. 삭제
  65. 삭제
  66. 삭제
  67. 삭제
  68. 삭제
  69. 삭제
  70. 삭제
  71. 삭제
  72. 삭제
  73. 삭제
  74. 삭제
  75. 삭제
  76. 삭제
  77. 삭제
  78. 삭제
  79. 삭제
  80. 삭제
  81. 삭제
  82. 삭제
  83. 삭제
  84. 삭제
  85. 삭제
  86. 삭제
  87. 삭제
  88. 삭제
  89. 삭제
  90. 삭제
  91. 삭제
  92. 삭제
  93. 삭제
  94. 삭제
  95. 삭제
  96. 삭제
  97. 삭제
  98. 삭제
  99. 삭제
  100. 장치로서,
    제1 컴퓨팅 디바이스에서의 분산 DAG(directed acyclic graph)의 인스턴스를 저장하는 메모리 - 상기 제1 컴퓨팅 디바이스는 복수의 컴퓨팅 디바이스들 내에 포함되도록 구성되고, 상기 복수의 컴퓨팅 디바이스들은 상기 복수의 컴퓨팅 디바이스들에 동작 가능하게 결합된 네트워크를 통해 상기 분산 DAG를 구현하고, 상기 복수의 컴퓨팅 디바이스들 중의 각 컴퓨팅 디바이스는 지분 값과 연관됨 -; 및
    상기 메모리에 동작 가능하게 결합된 상기 제1 컴퓨팅 디바이스의 프로세서를 포함하고, 상기 프로세서는:
    상기 복수의 컴퓨팅 디바이스들 중의 제2 컴퓨팅 디바이스에서 상기 분산 DAG의 인스턴스로부터 제1 이벤트를 수신하고,
    상기 제 1 이벤트에 기초하여 제 2 이벤트를 정의하고 - 상기 제 2 이벤트는 이벤트들의 세트에 링크되고, 상기 이벤트들의 세트 중의 각 이벤트는 상기 복수의 컴퓨팅 디바이스들 중의 컴퓨팅 디바이스들의 세트 중의 상이한 컴퓨팅 디바이스에 의해 정의됨 -,
    지분 값 기준을 충족시키는 상기 컴퓨팅 디바이스들의 세트와 연관된 종합 지분 값에 적어도 부분적으로 기초하여 제3 이벤트에 대한 순서 값을 정의하고 - 상기 종합 지분 값은 상기 컴퓨팅 디바이스들의 세트 중의 각 컴퓨팅 디바이스와 연관된 지분 값들의 합임 -;
    상기 순서 값에 기초하여 상기 분산 DAG와 연관된 상태 값을 업데이트하도록 구성되는, 장치.
  101. 제100항에 있어서, 상기 이벤트들의 세트는 상기 제3 이벤트의 후손 이벤트들인, 장치.
  102. 제100항에 있어서, 상기 제2 이벤트는 상기 제1 이벤트에 대한 참조 및 제4 이벤트에 대한 참조를 포함하고, 상기 제2 이벤트는 상기 제1 이벤트에 대한 참조 및 상기 제4 이벤트에 대한 참조를 통해 상기 이벤트들의 세트에 링크되는, 장치.
  103. 제100항에 있어서, 상기 복수의 컴퓨팅 디바이스들 중의 각 컴퓨팅 디바이스에 대한 상기 지분 값은 해당 컴퓨팅 디바이스에 의해 보유되는 암호 화폐의 양과 연관되는, 장치.
  104. 제100항에 있어서, 상기 지분 값 기준은 상기 복수의 컴퓨팅 디바이스들 중의 각 컴퓨팅 디바이스와 연관된 지분 값들의 합에 기초하는, 장치.
  105. 프로세서에 의해 실행되는 명령어들을 나타내는 코드를 저장하는 비-일시적 프로세서-판독 가능 매체로서, 상기 코드는 상기 프로세서로 하여금
    복수의 컴퓨팅 디바이스들 중의 제1 컴퓨팅 디바이스에서 분산 데이터베이스의 인스턴스로부터 제1 이벤트를 수신하고 - 상기 복수의 컴퓨팅 디바이스들은 상기 복수의 컴퓨팅 디바이스들에 동작 가능하게 결합된 네트워크를 통해 상기 분산 데이터베이스를 구현함 -,
    상기 제 1 이벤트 및 제 2 이벤트에 기초하여 제3 이벤트를 정의하고 - 상기 제3 이벤트는 이벤트들의 세트에 링크됨 -,
    지분 값 기준을 충족시키는 상기 이벤트들의 세트와 연관된 종합 지분 값에 적어도 부분적으로 기초하여 제4 이벤트에 대한 순서 값을 정의하고,
    상기 순서 값을 상기 복수의 컴퓨팅 디바이스들 중의 제2 컴퓨팅 디바이스에서의 분산 데이터베이스의 인스턴스에 저장하게 하는
    코드를 포함하는, 비-일시적 프로세서-판독 가능 매체.
  106. 제105항에 있어서, 상기 프로세서로 하여금
    지분 값들의 세트의 합에 기초하여 상기 종합 지분 값을 계산하게 하는 코드를 더 포함하고, 상기 지분 값들의 세트 중의 각 지분 값은 상기 이벤트들의 세트 중의 이벤트를 정의한 상기 분산 데이터베이스의 인스턴스와 연관되는, 비-일시적 프로세서-판독 가능 매체.
  107. 제105항에 있어서, 상기 이벤트들의 세트는 제1 이벤트들의 세트이고, 상기 제1 이벤트들의 세트 중의 각 이벤트는 (1) 상기 분산 데이터베이스의 상이한 인스턴스에 의해 정의되고 (2) 상기 제3 이벤트에 의해 식별되고, 상기 코드는 상기 프로세서로 하여금
    상기 지분 값 기준을 충족시키는 상기 제1 이벤트들의 세트와 연관된 종합 지분 값에 기초하여 제2 이벤트들의 세트를 결정하게 하는 코드를 더 포함하고, 상기 제2 이벤트들의 세트 중의 각 이벤트는 상기 제1 이벤트들의 세트에 의해 식별되는, 비-일시적 프로세서-판독 가능 매체.
  108. 제105항에 있어서, 상기 이벤트들의 세트는 제1 이벤트들의 세트이고, 상기 코드는 상기 프로세서로 하여금
    상기 제1 이벤트들의 세트 중의 각 이벤트와 연관된 지분 값들의 합이 상기 지분 값 기준을 충족시킨다는 결정에 기초하여 상기 제3 이벤트에 대한 제1 라운드 번호를 계산하게 하는 코드를 더 포함하고, 상기 제1 이벤트들의 세트 중의 각 이벤트는 (1) 제2 이벤트들의 세트에 의해 식별되고 (2) 상기 제1 라운드 번호보다 작은 제2 라운드 번호와 연관되는, 비-일시적 프로세서-판독 가능 매체.
  109. 제105항에 있어서, 상기 이벤트들의 세트는 제1 이벤트들의 세트이고, 상기 제1 이벤트들의 세트는 상기 제3 이벤트를 포함하고, 상기 코드는 상기 프로세서로 하여금
    상기 지분 값 기준을 충족시키는 상기 제1 이벤트들의 세트와 연관된 종합 지분 값에 기초하여 제2 이벤트들의 세트를 결정하게 하는 코드를 더 포함하고, 상기 제2 이벤트들의 세트 중의 각 이벤트는 상기 제1 이벤트들의 세트에 의해 식별되고, 상기 제1 이벤트들의 세트 중의 각 이벤트는 상기 분산 데이터베이스의 상이한 인스턴스에 의해 정의되는, 비-일시적 프로세서-판독 가능 매체.
  110. 제105항에 있어서, 상기 프로세서로 하여금 상기 제4 이벤트에 대한 순서 값을 정의하게 하는 상기 코드는, 상기 프로세서로 하여금 상기 종합 지분 값이 상기 지분 값 기준을 충족시키도록 상기 이벤트들의 세트 중의 이벤트들의 서브세트에 의해 식별되는 상기 제4 이벤트에 기초하여 상기 제4 이벤트와 연관된 수신된 라운드 번호를 결정하게 하는 코드를 포함하는, 비-일시적 프로세서-판독 가능 매체.
  111. 제105항에 있어서, 상기 이벤트들의 세트는 상기 제1 이벤트들의 세트 중의 이벤트들의 서브세트이고, 상기 코드는 상기 프로세서로 하여금
    상기 이벤트들의 서브세트 중의 나머지 이벤트들과 연관된 값과 동일한 상기 이벤트들의 서브세트 중의 각 이벤트와 연관된 값에 기초하여 상기 이벤트들의 서브세트를 결정하게 하는 코드를 더 포함하고, 상기 이벤트들의 서브세트 중의 각 이벤트와 연관된 값은 (1) 제5 이벤트와 연관되고 (2) 상기 이벤트들의 서브세트 중의 해당 이벤트가 식별할 수 있는 제2 이벤트들의 세트 중의 각 이벤트에 대한 값에 기초하고,
    상기 지분 값 기준은 상기 이벤트들의 서브세트와 연관된 종합 지분 값이 상기 제1 이벤트들의 세트와 연관된 종합 지분 값에 기초한 임계값보다 큰 경우 상기 이벤트들의 서브세트와 연관된 종합 지분 값에 의해 충족되는, 비-일시적 프로세서-판독 가능 매체.
  112. 제105항에 있어서, 상기 지분 값 기준은 상기 분산 데이터베이스의 종합 지분 값과 연관된 미리 정의된 비율에 기초하고, 상기 코드는 상기 프로세서로 하여금
    제5 이벤트가 유명 이벤트로 지정되도록 상기 이벤트들의 세트와 연관된 종합 지분 값에 의해 충족되는 상기 지분 값 기준에 기초하여 상기 제5 이벤트의 라운드 번호를 상기 제4 이벤트에 대해 수신된 라운드 번호와 연관시키게 하는 코드를 더 포함하는, 비-일시적 프로세서-판독 가능 매체.
  113. 제105항에 있어서, 상기 이벤트들의 세트는 복수의 이벤트들 중의 이벤트들의 서브세트이고, 상기 코드는 상기 프로세서로 하여금
    상기 이벤트들의 서브세트 중의 각 이벤트에 대한 값에 기초하여 상기 제3 이벤트에 대한 값을 결정하게 하는 코드를 더 포함하고, 상기 제3 이벤트는 상기 복수의 이벤트들 중의 각 이벤트의 라운드 번호보다 큰 라운드 번호를 가지고,
    상기 이벤트들의 서브세트와 연관된 종합 지분 값은 상기 복수의 이벤트들 중의 나머지 이벤트들과 연관된 종합 지분 값보다 크고,
    상기 이벤트들의 서브세트와 연관된 종합 지분 값이 임계값보다 작은 경우 상기 지분 값 기준은 상기 이벤트들의 서브세트와 연관된 종합 지분 값에 의해 충족되고, 상기 임계값은 상기 분산 데이터베이스와 연관된 종합 지분 값에 기초하는, 비-일시적 프로세서-판독 가능 매체.
  114. 제105항에 있어서, 상기 이벤트들의 세트는 복수의 이벤트들 중의 이벤트들의 서브세트이고, 상기 코드는 상기 프로세서로 하여금
    충족되는 상기 이벤트들의 서브세트와 연관된 지분 값 기준에 기초한 의사 랜덤 값으로서 상기 제3 이벤트에 대한 값을 결정하게 하는 코드를 더 포함하고, 상기 제3 이벤트는 상기 복수의 이벤트들 중의 각 이벤트의 라운드 번호보다 큰 라운드 번호를 갖고,
    상기 이벤트들의 서브세트와 연관된 종합 지분 값은 상기 복수의 이벤트들 중의 나머지 이벤트들과 연관된 종합 지분 값보다 크고,
    상기 이벤트들의 서브세트와 연관된 종합 지분 값이 임계값보다 작은 경우 상기 지분 값 기준은 상기 이벤트들의 서브세트와 연관된 종합 지분 값에 의해 충족되고, 상기 임계값은 상기 분산 데이터베이스와 연관된 종합 지분 값에 기초하는, 비-일시적 프로세서-판독 가능 매체.
  115. 제105항에 있어서, 상기 이벤트들의 세트는 제1 이벤트들의 세트 중의 이벤트들의 서브세트이고, 상기 코드는 상기 프로세서로 하여금
    상기 이벤트들의 서브세트 중의 나머지 이벤트들과 연관된 값과 동일한 상기 이벤트들의 서브세트 중의 각 이벤트와 연관된 값에 기초하여 상기 이벤트들의 서브세트를 식별하고 - 상기 이벤트들의 서브세트 중의 각 이벤트와 연관된 값은 (1) 제5 이벤트와 연관되고 (2) 상기 이벤트들의 서브세트 중의 해당 이벤트가 식별할 수 있는 제2 이벤트들의 세트 중의 각 이벤트에 대한 값에 기초하고,
    상기 제1 이벤트들의 세트는 상기 제2 이벤트들의 세트의 라운드 번호보다 큰 라운드 번호를 갖고,
    상기 이벤트들의 서브세트와 연관된 종합 지분 값은 상기 제1 이벤트들의 세트 중의 나머지 이벤트들과 연관된 종합 지분 값보다 크고,
    상기 이벤트들의 서브세트와 연관된 종합 지분 값이 임계값보다 작은 경우 상기 지분 값 기준은 상기 이벤트들의 서브세트와 연관된 종합 지분 값에 의해 충족되고, 상기 임계값은 상기 제1 이벤트들의 세트의 종합 지분 값에 기초함 -,
    상기 이벤트들의 서브세트에 의해 충족되는 지분 값 기준에 기초하여, 상기 제4 이벤트에 대한 순서 값을 결정하기 위해 사용되는 종합 지분 값을 갖는 제3 이벤트들의 세트를 식별 - 상기 제3 이벤트들의 세트는 상기 제1 이벤트들의 세트의 라운드 번호보다 큰 라운드 번호를 갖고, 상기 제3 이벤트들의 세트 중의 각 이벤트에 대한 값은 상기 제3 이벤트들의 세트 중의 해당 이벤트가 식별할 수 있는 상기 제1 이벤트들의 세트 중의 각 이벤트와 연관된 값에 기초함 -하게 하는 코드를 더 포함하는, 비-일시적 프로세서-판독 가능 매체.
  116. 제105항에 있어서, 상기 이벤트들의 세트 중의 각 이벤트는 (1) 상기 분산 데이터베이스의 상이한 인스턴스에 의해 정의되고 (2) 상기 제3 이벤트에 의해 식별되고,
    상기 제4 이벤트에 대한 순서 값은 상기 제3 이벤트의 디지털 서명과 연관된 의사 랜덤 결정에 추가로 기초하는, 비-일시적 프로세서-판독 가능 매체.
  117. 제105항에 있어서, 상기 지분 값 기준은 암호 화폐와 연관된 지분 값들의 세트의 합에 적어도 부분적으로 기초하고, 상기 지분 값들의 세트 중의 각 지분 값은 상기 분산 데이터베이스의 상이한 인스턴스에 의해 보유되는 암호 화폐의 양과 연관되는, 비-일시적 프로세서-판독 가능 매체.
  118. 제105항에 있어서, 상기 이벤트들의 세트와 연관된 종합 지분 값이 미리 정의된 임계값보다 큰 경우 상기 지분 값 기준은 충족되고, 상기 미리 정의된 임계값은 상기 분산 데이터베이스의 종합 지분 값에 적어도 부분적으로 기초하는, 비-일시적 프로세서-판독 가능 매체.
  119. 장치로서,
    제1 컴퓨팅 디바이스에서의 분산 데이터베이스의 인스턴스를 포함하는 메모리 - 상기 제1 컴퓨팅 디바이스는 복수의 컴퓨팅 디바이스들 내에 포함되도록 구성되고, 상기 복수의 컴퓨팅 디바이스들은 상기 복수의 컴퓨팅 디바이스들에 동작 가능하게 결합된 네트워크를 통해 상기 분산 데이터베이스를 구현함 -; 및
    상기 분산 데이터베이스의 인스턴스에 동작 가능하게 결합된 프로세서
    를 포함하고,
    상기 프로세서는 제1 복수의 이벤트들에 링크된 제1 이벤트를 제1 시간에 정의하도록 구성되고,
    상기 프로세서는 상기 제1 시간 이후의 제2 시간에, 상기 복수의 컴퓨팅 디바이스들 중의 제2 컴퓨팅 디바이스로부터, (1) 상기 제2 컴퓨팅 디바이스에 의해 정의되고 (2) 제2 복수의 이벤트들에 링크된 제2 이벤트를 나타내는 신호를 수신하도록 구성되고,
    상기 프로세서는 상기 복수의 컴퓨팅 디바이스들 중의 각 컴퓨팅 디바이스와 연관된 지분 값에 적어도 부분적으로 기초하여 제3 복수의 이벤트들과 연관된 순서를 식별하도록 구성되고 - 상기 제3 복수의 이벤트들 중의 각 이벤트는 상기 제1 복수의 이벤트들 또는 상기 제2 복수의 이벤트들 중 적어도 하나로부터 유래됨 -,
    상기 프로세서는 상기 제3 복수의 이벤트들과 연관된 순서를 상기 분산 데이터베이스의 인스턴스에 저장하도록 구성되는, 장치.
  120. 제119항에 있어서, 상기 복수의 컴퓨팅 디바이스들 중의 각 컴퓨팅 디바이스와 연관된 지분 값은 상기 복수의 컴퓨팅 디바이스들 중의 해당 컴퓨팅 디바이스에서 상기 분산 데이터베이스의 인스턴스와 연관된 암호 화폐의 양에 비례하는, 장치.
  121. 제119항에 있어서, 상기 제3 복수의 이벤트들 중의 각 이벤트는 속성들의 세트 중의 각 속성에 대한 값과 연관되고,
    상기 제3 복수의 이벤트들 중의 각 이벤트에 대한 상기 속성들의 세트 중의 제1 속성에 대한 값은 해당 이벤트와 해당 이벤트에 링크된 제1 이벤트들의 세트의 종합 지분 값 사이의 관계가 기준을 충족하는지 여부에 기초한 제1 값을 포함하고,
    상기 제1 이벤트들의 세트 중의 각 이벤트는 (1) 상기 제3 복수의 이벤트들 중의 해당 이벤트의 조상이고 (2) 상기 제1 이벤트들의 세트 중의 나머지 이벤트들로서의 동일한 제1 공통 속성과 연관되고 - 상기 제1 공통 속성은 상기 복수의 컴퓨팅 디바이스들 중의 각 컴퓨팅 디바이스에 의해 정의된 제1 이벤트가 특정 값과 연관되는 초기 인스턴스를 나타냄 -,
    상기 속성들의 세트 중의 제2 속성에 대한 값은 상기 제3 복수의 이벤트들 중의 해당 이벤트와 상기 제3 복수의 이벤트들 중의 해당 이벤트에 링크된 제2 이벤트들의 세트 사이의 관계에 기초한 수치 값을 포함하고,
    상기 제2 이벤트들의 세트 중의 각 이벤트는 상기 제3 복수의 이벤트들 중의 이벤트의 후손이고, 상기 제2 이벤트들의 세트 중의 나머지 이벤트들로서의 제2 공통 속성과 연관되는, 장치.
  122. 제119항에 있어서,
    상기 제3 복수의 이벤트들 중의 각 이벤트는 속성들의 세트 중의 각 속성에 대한 값과 연관되고,
    상기 제3 복수의 이벤트들 중의 각 이벤트에 대한 상기 속성들의 세트 중의 속성에 대한 값은 해당 이벤트와 해당 이벤트에 링크된 이벤트들의 세트의 종합 지분 값 사이의 관계가 기준을 충족하는지 여부에 기초한 제1 값을 포함하고,
    상기 기준은 상기 복수의 컴퓨팅 디바이스들의 종합 지분 값에 기초하여 정의된 임계값에 기초하는, 장치.
KR1020197038923A 2015-08-28 2016-08-26 네트워크 내의 분산 데이터베이스를 위한 방법 및 장치 KR102432731B1 (ko)

Applications Claiming Priority (12)

Application Number Priority Date Filing Date Title
US201562211411P 2015-08-28 2015-08-28
US62/211,411 2015-08-28
US14/988,873 2016-01-06
US14/988,873 US9390154B1 (en) 2015-08-28 2016-01-06 Methods and apparatus for a distributed database within a network
US15/153,011 US9529923B1 (en) 2015-08-28 2016-05-12 Methods and apparatus for a distributed database within a network
US15/153,011 2016-05-12
US201662344682P 2016-06-02 2016-06-02
US62/344,682 2016-06-02
US15/205,688 US10318505B2 (en) 2015-08-28 2016-07-08 Methods and apparatus for a distributed database within a network
US15/205,688 2016-07-08
PCT/US2016/049067 WO2017040313A1 (en) 2015-08-28 2016-08-26 Methods and apparatus for a distributed database within a network
KR1020197023809A KR102062896B1 (ko) 2015-08-28 2016-08-26 네트워크 내의 분산 데이터베이스를 위한 방법 및 장치

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020197023809A Division KR102062896B1 (ko) 2015-08-28 2016-08-26 네트워크 내의 분산 데이터베이스를 위한 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20200004444A KR20200004444A (ko) 2020-01-13
KR102432731B1 true KR102432731B1 (ko) 2022-08-12

Family

ID=61557412

Family Applications (3)

Application Number Title Priority Date Filing Date
KR1020197023809A KR102062896B1 (ko) 2015-08-28 2016-08-26 네트워크 내의 분산 데이터베이스를 위한 방법 및 장치
KR1020187008784A KR102012435B1 (ko) 2015-08-28 2016-08-26 네트워크 내의 분산 데이터베이스를 위한 방법 및 장치
KR1020197038923A KR102432731B1 (ko) 2015-08-28 2016-08-26 네트워크 내의 분산 데이터베이스를 위한 방법 및 장치

Family Applications Before (2)

Application Number Title Priority Date Filing Date
KR1020197023809A KR102062896B1 (ko) 2015-08-28 2016-08-26 네트워크 내의 분산 데이터베이스를 위한 방법 및 장치
KR1020187008784A KR102012435B1 (ko) 2015-08-28 2016-08-26 네트워크 내의 분산 데이터베이스를 위한 방법 및 장치

Country Status (19)

Country Link
EP (6) EP3796186A1 (ko)
JP (5) JP6518838B6 (ko)
KR (3) KR102062896B1 (ko)
CN (4) CN110633327B (ko)
AU (7) AU2016316777B2 (ko)
CA (3) CA3027398C (ko)
CY (5) CY1123630T1 (ko)
DK (5) DK3341864T3 (ko)
ES (5) ES2840071T3 (ko)
HK (1) HK1249233A1 (ko)
HR (5) HRP20201935T1 (ko)
HU (5) HUE053427T2 (ko)
LT (5) LT3418915T (ko)
PL (1) PL3341864T3 (ko)
PT (5) PT3341864T (ko)
RS (5) RS61199B1 (ko)
RU (1) RU2709673C2 (ko)
SG (7) SG10201912712VA (ko)
SI (5) SI3418915T1 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019226099A1 (en) * 2018-05-23 2019-11-28 Haj Enterprise Ab A system and a method for achieving consensus between multiple parties on an event
CN109218289B (zh) * 2018-08-03 2021-03-26 中山大学 一种基于串行工作量证明的缠结网络的共识机制
CN110851435B (zh) * 2018-08-03 2022-02-11 杭州海康威视数字技术股份有限公司 一种存储数据的方法及装置
EP3871400A1 (en) * 2018-10-23 2021-09-01 tZERO IP, LLC Context based filtering within subsets of network nodes implementing a trading system
KR102130900B1 (ko) * 2018-11-15 2020-07-06 주식회사 스마트코어 블록체인 시스템에서의 고속 합의 방법
CN111222984B (zh) * 2018-11-26 2023-04-18 本无链科技(深圳)有限公司 一种用于区块链分布式交易同步处理方法及系统
CN109672733B (zh) * 2018-12-20 2022-06-07 众安信息技术服务有限公司 基于dag的区块链的账本同步方法及设备
CN109544344B (zh) * 2018-12-24 2021-07-02 众安信息技术服务有限公司 基于dag的区块链的交易处理方法及设备
CN109739689B (zh) * 2018-12-25 2023-03-14 四川效率源信息安全技术股份有限公司 一种雕复SQL Server数据库文件的方法
CN110209061B (zh) * 2019-05-28 2022-08-09 九阳股份有限公司 一种智能控制系统中的事件上报处理方法及中控装置
CN110445755A (zh) * 2019-07-04 2019-11-12 杭州复杂美科技有限公司 交易攻击的防御方法、设备和存储介质
CN110910237B (zh) * 2019-11-20 2024-05-24 腾讯科技(深圳)有限公司 区块链中的数据处理方法、装置及智能终端、存储介质
WO2021100831A1 (ja) * 2019-11-21 2021-05-27 パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ 制御方法、装置、及び、プログラム
KR102308667B1 (ko) * 2020-01-08 2021-10-05 고려대학교 산학협력단 배열 데이터베이스에서의 점진적인 상위 k 질의 처리 장치 및 방법
EP3851974B1 (en) * 2020-01-20 2023-07-26 Decard Ag System and a method implementing a directed acyclic graph (dag) consensus algorithm via a gossip protocol
CN111464826B (zh) * 2020-04-14 2022-09-09 北京达佳互联信息技术有限公司 虚拟资源的榜单更新方法、装置、电子设备及存储介质
US10946283B1 (en) * 2020-07-16 2021-03-16 Big Time Studios Ltd. Computer system and method for more efficiently storing, issuing, and transacting tokenized blockchain game assets managed by a smart contract
CN112150283B (zh) * 2020-08-26 2023-08-04 深圳区块大陆科技有限公司 应用剩余面积计算法来进行链上累积和占比计算的方法
CN112488704B (zh) * 2020-11-16 2024-03-19 华南师范大学 基于区块链的数据处理方法、系统、装置及介质
WO2022260501A1 (ko) * 2021-06-11 2022-12-15 삼성전자 주식회사 블록체인 네트워크에서 부분 원장을 가진 전자 장치 및 그의 동작 방법
EP4307645A1 (en) * 2021-06-11 2024-01-17 Samsung Electronics Co., Ltd. Electronic device having partial ledger in blockchain network, and operating method therefor
CN113810465B (zh) * 2021-08-12 2022-08-12 清华大学 一种异步二元共识方法及装置
CN113722548A (zh) * 2021-08-30 2021-11-30 北京天空卫士网络安全技术有限公司 一种业务系统中引用关系的处理方法和装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140012812A1 (en) * 2010-02-09 2014-01-09 Google Inc. Method and System for Efficiently Replicating Data in Non-Relational Databases

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6856993B1 (en) * 2000-03-30 2005-02-15 Microsoft Corporation Transactional file system
US6966836B1 (en) * 2000-11-16 2005-11-22 Ea.Com, Inc. Positive-return gambling
US7062490B2 (en) * 2001-03-26 2006-06-13 Microsoft Corporation Serverless distributed file system
RU2376635C2 (ru) * 2002-10-23 2009-12-20 Закрытое акционерное общество "МедиаЛингва" Способ и система проведения транзакций в сети с использованием сетевых идентификаторов
US7844745B1 (en) * 2004-08-19 2010-11-30 Nortel Networks Limited Alternate home subscriber server (HSS) node to receive a request if a first HSS node cannot handle said request
US9104962B2 (en) * 2007-03-06 2015-08-11 Trion Worlds, Inc. Distributed network architecture for introducing dynamic content into a synthetic environment
JP5211514B2 (ja) * 2007-03-09 2013-06-12 富士通株式会社 更新装置、更新方法および更新プログラム
EP2155342A4 (en) * 2007-06-11 2014-01-22 Skillz Systems Inc METHOD AND DEVICE FOR TRAINING SPORTS TECHNIQUES
US8533582B2 (en) * 2009-03-20 2013-09-10 Xerox Corporation Trail-based data content discovery, organization, and processing
EP2485150A1 (en) * 2009-05-18 2012-08-08 Shuhei Nishiyama Meta-information sharing distributed database system in virtual single memory storage
US8356007B2 (en) * 2010-10-20 2013-01-15 Microsoft Corporation Distributed transaction management for database systems with multiversioning
US8862617B2 (en) * 2010-02-09 2014-10-14 Google Inc. System and method for replicating objects in a distributed storage system
US20110250974A1 (en) * 2010-04-07 2011-10-13 Gary Stephen Shuster Simulated gaming using prior game outcome
US8671074B2 (en) * 2010-04-12 2014-03-11 Microsoft Corporation Logical replication in clustered database system with adaptive cloning
JP5431261B2 (ja) * 2010-07-23 2014-03-05 インターナショナル・ビジネス・マシーンズ・コーポレーション 情報管理システム、方法及びプログラム
US8868512B2 (en) * 2011-01-14 2014-10-21 Sap Se Logging scheme for column-oriented in-memory databases
US8577873B2 (en) * 2011-03-30 2013-11-05 Indian Statistical Institute Determining a relative importance among ordered lists
US8732140B2 (en) * 2011-05-24 2014-05-20 Red Lambda, Inc. Methods for storing files in a distributed environment
WO2013019892A1 (en) * 2011-08-01 2013-02-07 Tagged, Inc. Generalized reconciliation in a distributed database
CN102831156B (zh) * 2012-06-29 2014-12-31 浙江大学 一种云计算平台上的分布式事务处理方法
FR2995437B1 (fr) * 2012-09-07 2014-10-10 Commissariat Energie Atomique Dispositif de controle nucleaire pour reacteur refroidi au metal liquide de type rnr.
WO2015094329A1 (en) * 2013-12-20 2015-06-25 Hitachi Data Systems Engineering UK Limited System for queue based object cloning
US10324922B2 (en) * 2014-02-13 2019-06-18 Salesforce.Com, Inc. Providing a timeline of events regarding a database record

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140012812A1 (en) * 2010-02-09 2014-01-09 Google Inc. Method and System for Efficiently Replicating Data in Non-Relational Databases

Also Published As

Publication number Publication date
SG10201911700PA (en) 2020-02-27
CA2996714A1 (en) 2017-03-09
ES2840070T3 (es) 2021-07-06
AU2021200938B2 (en) 2022-12-01
EP3399447A1 (en) 2018-11-07
RU2019132736A3 (ko) 2022-03-29
HUE053421T2 (hu) 2021-07-28
AU2019229435B2 (en) 2019-10-31
AU2019229437B2 (en) 2019-10-31
HRP20201982T1 (hr) 2021-04-16
AU2019229437A1 (en) 2019-10-03
AU2016316777B2 (en) 2019-02-28
SI3341864T1 (sl) 2021-03-31
KR20180066054A (ko) 2018-06-18
CN110659331B (zh) 2021-07-16
JP6518838B6 (ja) 2019-06-12
JP6811350B2 (ja) 2021-01-13
HRP20201937T1 (hr) 2021-04-16
LT3399446T (lt) 2021-01-11
HRP20201936T1 (hr) 2021-04-16
KR102062896B1 (ko) 2020-01-07
SI3399446T1 (sl) 2021-02-26
JP2021061013A (ja) 2021-04-15
JP6686209B2 (ja) 2020-04-22
RU2019132736A (ru) 2019-12-16
CN110633327A (zh) 2019-12-31
JP2021131879A (ja) 2021-09-09
CA3129804A1 (en) 2017-03-09
ES2840071T3 (es) 2021-07-06
HRP20201983T1 (hr) 2021-04-16
HUE053427T2 (hu) 2021-07-28
CN110659331A (zh) 2020-01-07
EP3418915A1 (en) 2018-12-26
CA3027398A1 (en) 2017-03-09
CN113486089A (zh) 2021-10-08
SG10201903623WA (en) 2019-05-30
SG10201911702QA (en) 2020-02-27
CY1123640T1 (el) 2022-03-24
JP2019175471A (ja) 2019-10-10
PL3341864T3 (pl) 2021-03-08
EP3399446A1 (en) 2018-11-07
DK3399447T3 (da) 2020-12-07
JP6878670B2 (ja) 2021-06-02
HK1249233A1 (zh) 2018-10-26
LT3399448T (lt) 2021-01-11
CY1123629T1 (el) 2022-03-24
EP3341864A1 (en) 2018-07-04
DK3341864T3 (da) 2020-12-07
EP3399448A1 (en) 2018-11-07
AU2019202138A1 (en) 2019-04-18
PT3399448T (pt) 2020-12-30
PT3418915T (pt) 2021-01-04
SG10201911692XA (en) 2020-02-27
SG10201912712VA (en) 2020-02-27
AU2019202138B2 (en) 2019-08-08
EP3796186A1 (en) 2021-03-24
CN108351882A (zh) 2018-07-31
JP7184959B2 (ja) 2022-12-06
CY1123641T1 (el) 2022-03-24
AU2020200149B2 (en) 2020-03-19
RU2018110579A (ru) 2019-10-01
RU2709673C2 (ru) 2019-12-19
SG10201805466SA (en) 2018-07-30
KR102012435B1 (ko) 2019-08-20
DK3418915T3 (da) 2020-12-21
JP2018528555A (ja) 2018-09-27
CN108351882B (zh) 2019-09-27
AU2021200938A1 (en) 2021-03-11
AU2016316777A1 (en) 2018-03-15
RS61196B1 (sr) 2021-01-29
DK3399448T3 (da) 2020-12-14
EP3399446B1 (en) 2020-09-23
RU2018110579A3 (ko) 2019-10-01
PT3399447T (pt) 2020-12-21
EP3341864A4 (en) 2018-07-04
AU2020201827A1 (en) 2020-04-02
LT3341864T (lt) 2021-03-10
SI3399447T1 (sl) 2021-03-31
LT3418915T (lt) 2021-01-11
JP2020155133A (ja) 2020-09-24
SI3418915T1 (sl) 2021-03-31
SI3399448T1 (sl) 2021-03-31
AU2020200149A1 (en) 2020-01-30
LT3399447T (lt) 2021-01-11
AU2020201827B2 (en) 2020-12-10
HUE053423T2 (hu) 2021-07-28
CA2996714C (en) 2019-01-22
HRP20201935T1 (hr) 2021-04-16
CN110633327B (zh) 2024-03-05
EP3418915B1 (en) 2020-11-25
DK3399446T3 (da) 2020-12-07
RS61195B1 (sr) 2021-01-29
PT3341864T (pt) 2020-12-21
EP3341864B1 (en) 2020-11-18
SG10201805458PA (en) 2018-07-30
ES2836526T3 (es) 2021-06-25
HUE052995T2 (hu) 2021-06-28
CA3027398C (en) 2022-08-09
EP3399447B1 (en) 2020-11-18
ES2837476T3 (es) 2021-06-30
JP6518838B2 (ja) 2019-05-22
EP3399448B1 (en) 2020-11-25
RS61245B1 (sr) 2021-01-29
HUE052785T2 (hu) 2021-05-28
KR20200004444A (ko) 2020-01-13
AU2019229435A1 (en) 2019-10-03
PT3399446T (pt) 2020-12-21
RS61199B1 (sr) 2021-01-29
CY1123628T1 (el) 2022-03-24
RS61244B1 (sr) 2021-01-29
KR20190097328A (ko) 2019-08-20
ES2837480T3 (es) 2021-06-30
CY1123630T1 (el) 2022-03-24

Similar Documents

Publication Publication Date Title
AU2021200938B2 (en) Methods and apparatus for a distributed database within a network
US11232081B2 (en) Methods and apparatus for a distributed database within a network
US11734260B2 (en) Methods and apparatus for a distributed database within a network
US9646029B1 (en) Methods and apparatus for a distributed database within a network
WO2017040313A1 (en) Methods and apparatus for a distributed database within a network

Legal Events

Date Code Title Description
A107 Divisional application of patent
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant