KR20200107771A - 블록체인 월드 스테이트 머클 패트리샤 트리 서브트리 구성 - Google Patents

블록체인 월드 스테이트 머클 패트리샤 트리 서브트리 구성 Download PDF

Info

Publication number
KR20200107771A
KR20200107771A KR1020197028618A KR20197028618A KR20200107771A KR 20200107771 A KR20200107771 A KR 20200107771A KR 1020197028618 A KR1020197028618 A KR 1020197028618A KR 20197028618 A KR20197028618 A KR 20197028618A KR 20200107771 A KR20200107771 A KR 20200107771A
Authority
KR
South Korea
Prior art keywords
node
subtree
world state
current node
nodes
Prior art date
Application number
KR1020197028618A
Other languages
English (en)
Other versions
KR102277289B1 (ko
Inventor
웬빈 장
Original Assignee
알리바바 그룹 홀딩 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 알리바바 그룹 홀딩 리미티드 filed Critical 알리바바 그룹 홀딩 리미티드
Publication of KR20200107771A publication Critical patent/KR20200107771A/ko
Application granted granted Critical
Publication of KR102277289B1 publication Critical patent/KR102277289B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2315Optimistic concurrency control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2264Multidimensional index structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0637Modes of operation, e.g. cipher block chaining [CBC], electronic codebook [ECB] or Galois/counter mode [GCM]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees

Abstract

본 명세서의 구현들은 월드 스테이트 MPT를 다수의 반복들로 순회하는 단계, 및 각각의 반복에서, 월드 스테이트 MPT의 현재 노드에 대해, 현재 노드를 계정 노드로서 마킹하고, 현재 노드의 어드레스를 어드레스 리스트에 저장하는 것, 현재 노드가 확장 노드라고 결정하고, 순회의 다음 반복으로 이동하여 현재 노드를 확장 노드에 의해 참조되는 노드로 설정하는 것, 및 현재 노드를 전환 노드로서 마킹하고, 현재 노드의 어드레스를 어드레스 리스트에 저장하는 것 중 하나를 실행하는 단계; 어드레스 리스트에 기초하여 월드 스테이트 MPT의 서브트리를 생성하는 단계 - 서브트리의 루트 노드는 월드 스테이트 MPT의 루트 노드를 포함하고, 서브트리의 하나 이상의 차일드 노드는 어드레스 리스트에 저장된 어드레스를 갖는 월드 스테이트 MPT의 노드들에 대응함 - 를 포함한다.

Description

블록체인 월드 스테이트 머클 패트리샤 트리 서브트리 구성
합의 네트워크들 및/또는 블록체인 네트워크들로 또한 지칭될 수 있는 분산형 원장 시스템들(DLS들)은 참여 엔티티들이 데이터를 안전하고 불변으로 저장할 수 있게 한다. DLS들은 통상적으로 임의의 특정 사용 경우를 참조하지 않고 블록체인 네트워크들로 지칭된다. 예시적인 유형들의 블록체인 네트워크들은 공개 네트워크들, 사설 블록체인 네트워크들 및 콘소시엄 블록체인 네트워크들을 포함할 수 있다. 공개 블록체인 네트워크는, DLS를 사용하고 합의 프로세스에 참여하는 모든 엔티티들에게 공개된다. 사설 블록체인 네트워크는 판독 및 기록 허가들을 중앙에서 제어하는 특정 엔티티에게 제공된다. 콘소시엄 블록체인 네트워크는 합의 프로세스를 제어하는 엔티티들의 선택 그룹에게 제공되고, 액세스 제어 계층을 포함한다.
해시 트리들은 정보를 저장하기 위해 블록체인 네트워크들에 대해 사용될 수 있다. 예를 들어, 블록체인 네트워크의 월드 스테이트(예를 들어, 블록체인 네트워크에서 노드들(계정들)의 스테이트)가 해시 트리에 저장될 수 있다. 해시 트리의 예는, 블록체인 네트워크 내의 모든 노드들(계정들)의 월드 스테이트를 유지하는 월드 스테이트 머클 패트리샤 트리(MPT; Merkle Patricia Trie)를 포함한다. 블록체인 네트워크들이 성장함에 따라, 월드 스테이트 정보는 대응적으로 성장하여 복잡한 데이터 집약적 해시 트리를 도출한다.
블록체인 네트워크 내의 모든 노드들이 블록체인의 월드 스테이트를 유지할 필요는 없다. 예를 들어, 블록체인 네트워크 내의 블록체인에 트랜잭션들을 추가하는데 참여하는 소위 합의 노드들(완전한 클라이언트들)은 월드 스테이트 해시 트리들을 유지하여 합의 프로세스에의 참여를 가능하게 한다. 단지 블록체인 네트워크 내의 트랜잭션들을 수행하는 다른 노드들(라이트 클라이언트들)은 월드 스테이트를 유지하거나 심지어 인식할 필요가 없다. 그러나, 이러한 노드들은 그들 자신의 스테이트, 및 블록체인 내에서 그들이 트랜잭션하는 다른 노드들의 스테이트(예를 들어, 부분적 스테이트)를 인식해야 한다. 월드 스테이트 해시 트리들의 크기 및 복잡도, 및 라이트 클라이언트들에 의해 사용되는 디바이스들의 자원 제한들이 주어지면, 자원 및 대역폭 효율적 데이터 구조 및 블록체인 네트워크의 부분적 스테이트를 유지하기 위한 데이터 구조를 업데이트하기 위한 프로세스가 필요하다.
본 명세서의 구현들은 월드 스테이트 머클 패트리샤 트리(MPT)들의 서브트리들을 생성하고, 서브트리들을 업데이트하기 위한 컴퓨터로 구현되는(computer-implemented) 방법들을 포함한다.
일부 구현들에서, 액션들은, 블록체인 네트워크의 합의 클라이언트에 의해, 월드 스테이트 MPT, 및 블록체인 네트워크 내의 노드들의 어드레스들을 저장하기 위한 어드레스 리스트를 제공하는 것 - 어드레스 리스트는 초기에 비어있음 - , 합의 클라이언트에 의해, 월드 스테이트 MPT 중 적어도 일부의 순회(traversal)를 다수의 반복들로 실행하는 것, 각각의 반복에서, 월드 스테이트 MPT 중 적어도 일부 중의 현재 노드에 대해, 현재 노드를 계정 노드(account node)로서 마킹하고, 현재 노드의 어드레스를 어드레스 리스트에 저장하는 것, 현재 노드가 확장 노드(extension node)라고 결정하고, 순회의 다음 반복으로 이동하여 현재 노드를 확장 노드에 의해 참조되는 노드로 설정하는 것, 및 현재 노드를 전환 노드(transition node)로서 마킹하고, 현재 노드의 어드레스를 어드레스 리스트에 저장하는 것 중 하나를 실행하는 것; 합의 클라이언트에 의해, 어드레스 리스트에 기초하여 월드 스테이트 MPT의 서브트리를 생성하는 것 - 서브트리의 루트 노드(root node)는 월드 스테이트 MPT의 루트 노드를 포함하고, 서브트리의 하나 이상의 차일드 노드(child node)는 어드레스 리스트에 저장된 어드레스를 갖는 월드 스테이트 MPT의 노드들에 대응함 - , 및 합의 클라이언트에 의해, 월드 스테이트 MPT의 서브트리를 블록체인 네트워크의 비합의 클라이언트(non-consensus client)에 송신하는 것 - 서브트리는 비합의 클라이언트와 연관된 계정들의 스테이트를 제공함 - 을 포함한다. 다른 구현들은 대응하는 시스템들, 장치, 및 컴퓨터 저장 디바이스들 상에 인코딩된, 방법들의 액션들을 수행하도록 구성된 컴퓨터 프로그램들을 포함한다.
이러한 구현들 및 다른 구현들 각각은 선택적으로 하기 특징들 중 하나 이상을 포함할 수 있다: 현재 노드는, 현재 노드가 리프 노드(leaf node) 중 하나이고, 널 값(null value)이 없는 브랜치 노드(branch node)라고 결정한 것에 응답하여 계정 노드로서 마킹되고; 현재 노드는, 현재 노드가 브랜치 노드이고, 브랜치 노드의 모든 차일드 노드들이 순회되었다고 결정한 것에 응답하여 전환 노드로서 마킹되고; 현재 노드를 계정 노드로서 마킹한 후, 순회의 다음 반복의 현재 노드는 계정 노드의 페어런트 노드(parent node)를 포함하고; 현재 노드를 계정 노드 및 전환 노드 중 하나로서 마킹한 후, 순회의 다음 반복의 현재 노드는 계정 노드 및 전환 노드 중 하나의 차일드 노드를 포함하고; 어드레스 리스트에 기초하여 월드 스테이트 MPT의 서브트리를 생성하는 단계는 적어도 부분적으로, 어드레스 리스트에 계정 노드로서 마킹된 어드레스에 대해, 월드 스테이트 MPT 내의 경로를 결정하고, 경로를 서브트리에 추가하는 단계를 포함하고; 순회는 깊이 우선 전위(depth-first pre-order)를 포함한다.
본 명세서는 또한, 하나 이상의 프로세서에 결합되고 명령어들이 저장된 하나 이상의 비일시적 컴퓨터 판독가능 저장 매체를 제공하고, 명령어들은 하나 이상의 프로세서에 의해 실행되는 경우, 하나 이상의 프로세서로 하여금 본 명세서에 제공된 방법들의 구현들에 따른 동작들을 수행하게 한다.
본 명세서는 본 명세서에 제공된 방법들을 구현하기 위한 시스템을 추가로 제공한다. 시스템은, 하나 이상의 프로세서, 및 하나 이상의 프로세서에 결합되고 명령어들이 저장된 하나 이상의 비일시적 컴퓨터 판독가능 저장 매체를 포함하고, 명령어들은 하나 이상의 프로세서에 의해 실행되는 경우, 하나 이상의 프로세서로 하여금 본 명세서에 제공된 방법들의 구현들에 따른 동작들을 수행하게 한다.
본 명세서에 따른 방법들은 본 명세서에 설명된 양상들 및 특징들의 임의의 조합을 포함할 수 있음이 인식된다. 즉, 본 명세서에 따른 방법들은 본 명세서에 구체적으로 설명된 양상들 및 특징들의 조합들로 제한되는 것이 아니라, 제공된 양상들 및 특징들의 임의의 조합을 또한 포함한다.
본 명세서의 하나 이상의 구현의 세부사항들은 첨부된 도면들 및 이하의 설명에서 기술된다. 본 명세서의 다른 특징들 및 이점들은 상세한 설명 및 도면들 및 청구항들로부터 명백해질 것이다.
도 1은 본 명세서의 구현들을 실행하기 위해 사용될 수 있는 환경의 예를 도시한다.
도 2는 본 명세서의 구현들에 따른 개념적 아키텍처의 예를 도시한다.
도 3은 월드 스테이트 머클 패트리샤 트리(MPT)의 예를 도시한다.
도 4는 본 명세서의 구현들에 따라 도 3의 예시적인 월드 스테이트 MPT에 기초하여 생성된 서브트리의 예를 도시한다.
도 5a 및 도 5b는 본 명세서의 구현들에 따라 실행될 수 있는 프로세스들의 예들을 도시한다.
도 6은 업데이트들을 포함하는 도 3의 예시적인 월드 스테이트 MPT를 도시한다.
도 7은 본 명세서의 구현들에 따라 도 6의 예시적인 월드 스테이트 MPT에 기초한 업데이트들을 포함하는 도 4의 예시적인 서브트리를 도시한다.
도 8a 및 도 8b는 본 명세서의 구현들에 따라 실행될 수 있는 프로세스들의 예들을 도시한다.
도 9는 본 명세서의 구현들에 따른 장치의 모듈들의 예들을 도시한다.
도 10은 본 명세서의 구현들에 따른 장치의 모듈들의 예들을 도시한다.
다양한 도면들에서 유사한 참조 부호들은 유사한 요소들을 표시한다.
본 명세서의 구현들은 월드 스테이트 머클 패트리샤 트리(MPT)들의 서브트리들을 생성하고, 서브트리들을 업데이트하기 위한 컴퓨터로 구현되는 방법들을 포함한다. 본 명세서에 더 상세히 설명되는 바와 같이, 본 명세서의 구현들은 월드 스테이트 MPT를 다수의 반복들로 순회하는 액션, 및 각각의 반복에서, 월드 스테이트 MPT의 현재 노드에 대해, 현재 노드를 계정 노드로서 마킹하고, 현재 노드의 어드레스를 어드레스 리스트에 저장하는 것, 현재 노드가 확장 노드라고 결정하고, 순회의 다음 반복으로 이동하여 현재 노드를 확장 노드에 의해 참조되는 노드로 설정하는 것, 및 현재 노드를 전환 노드로서 마킹하고, 현재 노드의 어드레스를 어드레스 리스트에 저장하는 것 중 하나를 실행하는 액션; 어드레스 리스트에 기초하여 월드 스테이트 MPT의 서브트리를 생성하는 액션 - 서브트리의 루트 노드는 월드 스테이트 MPT의 루트 노드를 포함하고, 서브트리의 하나 이상의 차일드 노드는 어드레스 리스트에 저장된 어드레스를 갖는 월드 스테이트 MPT의 노드들에 대응함 - 을 포함한다.
본 명세서의 구현들에 대한 추가적인 콘텍스트를 제공하기 위해, 그리고 앞서 소개된 바와 같이, 합의 네트워크들(예를 들어, 피어 투 피어 노드들로 구성됨) 및 블록체인 네트워크들로 또한 지칭될 수 있는 분산형 원장 시스템들(DLS들) 및 블록체인 네트워크들은 참여 엔티티들이 트랜잭션들을 안전하고 불변으로 수행하고 데이터를 저장할 수 있게 한다. 용어 블록체인은 일반적으로 특정 네트워크들 및/또는 사용 경우들과 연관되지만, 블록체인은 본 명세서에서 일반적으로 임의의 특정 사용 경우를 참조하지 않고 DLS를 지칭하기 위해 사용된다.
블록체인은, 트랜잭션들이 불변인 방식으로 트랜잭션들을 저장하는 데이터 구조이다. 따라서, 블록체인 상에 레코딩된 트랜잭션들은 신뢰가능하고 믿을 수 있다. 블록체인은 하나 이상의 블록을 포함한다. 체인 내의 각각의 블록은 이전 블록의 암호화 해시를 포함함으로써 체인 내에서 그 직전의 이전 블록에 링크된다. 각각의 블록은 또한 타임스탬프, 자기 자신의 암호화 해시 및 하나 이상의 트랜잭션을 포함한다. 블록체인 네트워크의 노드들에 의해 이미 검증된 트랜잭션들은 해시되고 머클 트리(Merkle tree)에 인코딩된다. 머클 트리는, 트리의 리프 노드들의 데이터가 해시되고, 트리의 각각의 브랜치의 모든 해시들이 브랜치의 루트에서 연쇄되는 데이터 구조이다. 이러한 프로세스는 전체 트리의 루트까지 트리에서 계속되며, 루트는 트리의 모든 데이터를 표현하는 해시를 저장한다. 트리에 저장된 트랜잭션인 것으로 알려진 해시는, 이것이 트리의 구조와 일치하는지 여부를 결정함으로써 신속하게 검증될 수 있다. 블록체인은 트랜잭션들을 저장하기 위한 분산형 또는 적어도 부분적으로 분산형의 데이터 구조이지만, 블록체인 네트워크는 트랜잭션들을 브로드캐스트, 검증 및 확인 등을 행함으로써 하나 이상의 블록체인을 관리, 업데이트 및 유지하는 노드들을 컴퓨팅하는 네트워크이다.
앞서 소개된 바와 같이, 블록체인 네트워크는 공개 블록체인 네트워크, 사설 블록체인 네트워크 또는 콘소시엄 블록체인 네트워크로서 제공될 수 있다. 본 명세서의 구현들은 콘소시엄 블록체인 네트워크를 참조하여 본 명세서에서 더 상세히 설명된다. 그러나, 본 명세서의 구현들은 임의의 적절한 유형의 블록체인 네트워크에서 실현될 수 있는 것으로 고려된다. 본 명세서에서 설명된 기술들은 콘소시엄 블록체인 네트워크들과 관련되는 것으로 표시되지만, 이 기술들은 또한, 변화들에 의해 또는 변화들 없이, 공개 블록체인 네트워크들 및 사설 블록체인 네트워크들을 포함하는 다른 유형들의 블록체인 네트워크들에서 사용될 수 있다.
일반적으로, 콘소시엄 블록체인 네트워크는 참여 엔티티들 사이에서 비밀이다. 콘소시엄 블록체인 네트워크에서, 합의 프로세스는 합의 노드들로 지칭될 수 있는 노드들의 인가된 세트에 의해 제어되고, 하나 이상의 노드는 각각의 엔티티(예를 들어, 금융 기관, 보험 회사)에 의해 동작된다. 예를 들어, 열(10)개의 엔티티들(예를 들어, 금융 기관들, 보험 회사들)의 콘소시엄이 콘소시엄 블록체인 네트워크를 동작시킬 수 있고, 이들 각각은 콘소시엄 블록체인 네트워크의 적어도 하나의 노드를 동작시킨다.
일부 예들에서, 콘소시엄 블록체인 네트워크 내에서는, 모든 노드들에 걸쳐 복제된 블록체인으로서 글로벌 블록체인이 제공된다. 즉, 모든 합의 노드들은 글로벌 블록체인에 대해 완전한 스테이트 합의에 있다. 합의(예를 들어, 블록의 블록체인에의 추가에 대한 동의)를 달성하기 위해, 합의 프로토콜이 콘소시엄 블록체인 네트워크 내에서 구현된다. 합의 프로토콜들의 예들은 제한 없이, PBFT(practical Byzantine fault tolerance), POW(proof-of-work) , POS(proof-of-stake) 및 POA(proof-of-authority)를 포함한다.
본 명세서의 구현들은 상기 콘텍스트의 관점에서 본 명세서에서 더 상세히 설명된다. 더 상세하게는, 그리고 본 명세서에서 더 상세히 설명되는 바와 같이, 본 명세서의 구현들은 MPT 트리에서 서치 어드레스(search addresse)들의 주문을 개선하기 위해 깊이 우선 전위 순회를 실행하고, 2개의 계정 노드들(리프 노드들) 사이에서, 본 명세서에서 전환 노드로 지칭되는 순회 프로세스의 특수한 타입의 노드를 활용한다.
더 상세하게는, 본 명세서의 구현들은 월드 스테이트 MPT T0 및 어드레스 리스트 L0에 기초하여, 본 명세서에서 서브트리 T2로 지칭되는 월드 스테이트 서브트리를 제공한다. 본 명세서의 구현들은, 먼저 본 명세서에서 서브트리 T1로 지칭되는 어드레스 리스트 L0으로부터의 서브트리를 구성하고, 그 다음 서브트리 T1에서 깊이 우선 전위 순회를 실행함으로써, 각각의 어드레스에 대해 루트 노드로부터 리프 노드까지의 경로를 찾는 것을 회피한다. 계정 노드 어드레스 및 전환 노드 어드레스는 깊이 우선 전위 순회를 통해 차례로 찾아진다. 2개의 계정 노드들 사이에 전환 노드가 존재하면, 제1 계정 노드는 전환 노드로 리턴되고, 다른 계정 노드가 전환 노드로부터 찾아진다. 이러한 방식으로, 제2 계정 노드에 대한 서치는 루트 노드에서 시작할 필요가 없고, 그 대신 전환 노드에서 시작한다.
또한 본 명세서에서 더 상세히 설명되는 바와 같이, 본 명세서의 구현들은 프로세서 및 저장 요건들을 감소시킨다. 예를 들어, 각각의 어드레스에 대해, 루트 노드로부터 이의 대응하는 리프 노드까지의 경로가 저장되고, 이러한 경로들에서 중첩하는 노드들이 병합된다. 더 상세하게는, 루트 노드로부터 각각의 계정 노드(즉, 계정 어드레스에 대응하는 각각의 리프 노드)까지의 완전한 경로들을 저장하는 대신, 2개의 계정 노드들 사이에 전환 노드가 존재하면, 단지 전환 노드로부터 다음 계정 노드까지의 경로가 저장된다. 이러한 방식으로, 다수의 계정 노드들에 대한 경로가 병합되고, 이는 효율을 개선하고, 중첩하는 경로들에 의해 초래되는 동작 및 저장소 낭비를 회피한다.
도 1은 본 명세서의 구현들을 실행하기 위해 사용될 수 있는 환경(100)의 예를 도시한다. 일부 예들에서, 예시적인 환경(100)은 엔티티들이 콘소시엄 블록체인 네트워크(102)에 참여할 수 있게 한다. 예시적인 환경(100)은 컴퓨팅 디바이스들(106, 108) 및 네트워크(110)를 포함한다. 일부 예들에서, 네트워크(110)는 로컬 영역 네트워크(LAN), 광역 네트워크(WAN), 인터넷 또는 이들의 조합을 포함하고, 웹 사이트들, 사용자 디바이스들(예를 들어, 컴퓨팅 디바이스들) 및 백엔드 시스템들을 연결한다. 일부 예들에서, 네트워크(110)는 유선 및/또는 무선 통신 링크를 통해 액세스될 수 있다. 일부 예들에서, 네트워크(110)는 콘소시엄 블록체인 네트워크(102)와의 및 그 안에서의 통신을 가능하게 한다. 일반적으로 네트워크(110)는 하나 이상의 통신 네트워크를 표현한다. 일부 경우들에서, 컴퓨팅 디바이스들(106, 108)은 클라우드 컴퓨팅 시스템(미도시)의 노드들일 수 있거나 또는 각각의 컴퓨팅 디바이스(106, 108)는 네트워크에 의해 상호연결된 복수의 컴퓨터들을 포함하고 분산형 프로세싱 시스템으로 기능하는 별개의 클라우드 컴퓨팅 시스템일 수 있다.
도시된 예에서, 컴퓨팅 시스템들(106, 108) 각각은 콘소시엄 블록체인 네트워크(102)의 노드로서 참여를 가능하게 하는 임의의 적절한 컴퓨팅 시스템을 포함할 수 있다. 컴퓨팅 디바이스들의 예들은 제한 없이 서버, 데스크탑 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨팅 디바이스 및 스마트폰을 포함한다. 일부 예들에서, 컴퓨팅 시스템들(106, 108)은 콘소시엄 블록체인 네트워크(102)와 상호작용하기 위한 하나 이상의 컴퓨터로 구현되는 서비스를 호스팅한다. 예를 들어, 컴퓨팅 시스템(106)은, 제1 엔티티(예를 들어, 참여자 A)가 하나 이상의 다른 엔티티(예를 들어, 다른 참여자들)와 자신의 트랜잭션들을 관리하기 위해 사용하는 트랜잭션 관리 시스템과 같은, 제1 엔티티의 컴퓨터로 구현되는 서비스들을 호스팅할 수 있다. 컴퓨팅 시스템(108)은, 제2 엔티티(예를 들어, 참여자 B)가 하나 이상의 다른 엔티티(예를 들어, 다른 참여자들)와 자신의 트랜잭션들을 관리하기 위해 사용하는 트랜잭션 관리 시스템과 같은, 제2 엔티티의 컴퓨터로 구현되는 서비스들을 호스팅할 수 있다. 도 1의 예에서, 콘소시엄 블록체인 네트워크(102)는 노드들의 피어 투 피어 네트워크로 표현되고, 컴퓨팅 시스템들(106, 108)은 각각, 콘소시엄 블록체인 네트워크(102)에 참여한 제1 엔티티 및 제2 엔티티의 노드들을 제공한다.
도 2는 본 명세서의 구현들에 따른 개념적 아키텍처(200)의 예를 도시한다. 예시적인 개념적 아키텍처(200)는 참여자 A, 참여자 B, 및 참여자 C에 각각 대응하는 참여자 시스템들(202, 204, 206)을 포함한다. 각각의 참여자(예를 들어, 사용자, 기업)는 복수의 노드들(214)을 포함하는 피어 투 피어 네트워크로서 제공된 블록체인 네트워크(212)에 참여하고, 노드들 중 적어도 일부는 정보를 블록체인(216)에 불변으로 레코딩한다. 단일 블록체인(216)가 블록체인 네트워크(212) 내에 개략적으로 도시되지만, 블록체인(216)의 다수의 카피들이 제공되고, 본 명세서에 더 상세히 설명되는 바와 같이 블록체인 네트워크(212)에 걸쳐 유지된다.
도시된 예에서, 각각의 참여자 시스템(202, 204, 206)는 각각 참여자 A, 참여자 B 및 참여자 C에 의해 또는 그 대신에 제공되고, 블록체인 네트워크 내에서 각각의 노드(214)로서 기능한다. 본 명세서에서 사용되는 바와 같이, 노드는 일반적으로 블록체인 네트워크(212)에 접속된 개별적인 시스템(예를 들어, 컴퓨터, 서버)을 지칭하며, 각각의 참여자가 블록체인 네트워크에 참여할 수 있게 한다. 도 2의 예에서, 참여자는 각각의 노드(214)에 대응한다. 그러나, 참여자는 블록체인 네트워크(212) 내의 다수의 노드들(214)을 동작시킬 수 있고 그리고/또는 다수의 참여자들은 노드(214)를 공유할 수 있음이 고려된다. 일부 예들에서, 참여자 시스템들(202, 204, 206)은 프로토콜(예를 들어, 하이퍼텍스트 전송 프로토콜 보안(HTTPS))을 사용하여 그리고/또는 원격 절차 호출들(RPC들)을 사용하여 블록체인 네트워크(212)과 또는 그를 통해 통신한다.
노드들(214)은 블록체인 네트워크(212) 내에서 다양한 참여도를 가질 수 있다. 예를 들어, 일부 노드들(214)은 합의 프로세스에 참여할 수 있는 한편(예를 들어, 블록체인(216)에 블록들을 추가하는 마인더(minder) 노드들), 다른 노드들(214)은 합의 프로세스에 참여하지 않는다. 다른 예로서, 일부 노드들(214)은 블록체인(216)의 완전한 카피를 저장하는 한편, 다른 노드들(214)은 블록체인(216)의 일부분들의 카피들만을 저장한다. 예를 들어, 데이터 액세스 특권들은, 각각의 참여자가 자신의 각각의 시스템 내에 저장하는 블록체인 데이터를 제한할 수 있다. 도 2의 예에서, 참여자 시스템들(202, 204)은 블록체인(216)의 각각의 완전한 카피들(216', 216")을 저장한다.
블록체인 네트워크에 참여하는 노드들은 클라이언트들로 지칭될 수 있고, 이들은 피어 투 피어 방식으로 다른 클라이언트들에 연결된다. 앞서 언급된 바와 같이, 클라이언트들(노드들)은 다양한 정도들로 블록체인 네트워크에 참여할 수 있다. 예를 들어, 클라이언트들은 완전한 클라이언트들, 및 라이트 클라이언트들을 포함할 수 있다.
일부 예들에서, 완전한 클라이언트는 합의 프로세싱에 참여하고, 블록체인의 스테이트를 유지한다(예를 들어, 저장하고 블록체인을 연속적으로 업데이트한다). 결과적으로, 각각의 완전한 클라이언트는, 블록체인에 추가되는 모든 블록, 및 그에 따른 각각의 블록의 모든 트랜잭션을 다운로드하고 검증한다. 도 2의 예에서, 참여자 시스템들(202, 204)은 완전한 클라이언트들(완전한 노드들)로 고려될 수 있다.
일부 예들에서, 라이트 클라이언트(라이트 노드)는 사용자들이 블록체인 시스템에 액세스하고 그와 상호작용할 수 있게 한다. 라이트 클라이언트들은 합의 프로세싱에 참여하지 않고 완전한 블록체인을 동기화하지 않는다. 결과적으로, 라이트 클라이언트는 비합의 노드로 지칭될 수 있다. 그 대신, 라이트 클라이언트는 하나 이상의 완전한 클라이언트에 연결되고, 이를 통해 라이트 클라이언트는 블록체인과 상호작용한다. 즉, 라이트 클라이언트는 블록체인과 직접 상호작용하지 않고, 그 대신 완전한 노드들은 중재자로서 사용한다. 따라서, 라이트 클라이언트들은 완전한 클라이언트들보다 상당히 적은 컴퓨팅 자원들 및 저장소를 요구한다(예를 들어, 수십배 더 적음). 그러나, 라이트 클라이언트들은 블록체인 전체에 대한 액세스를 갖지 않을 수 있고, 그 대신, 단지 그들이 액세스하도록 인가된 데이터만을 보거나 액세스할 수 있다. 도 2의 예에서, 참여자 시스템들(206)은 블록체인(216)의 카피가 없는 라이트 클라이언트로 고려될 수 있다.
블록체인(예를 들어, 도 2의 블록체인(216))은 블록들의 체인으로 이루어지고, 각각의 블록은 데이터를 저장한다. 데이터의 예는 둘 이상의 참여자들 사이의 트랜잭션을 표현하는 트랜잭션 데이터를 포함한다. 트랜잭션들은 비제한적인 예시의 방식으로 본 명세서에서 사용되지만, 임의의 적절한 데이터가 블록체인에 저장될 수 있음이 고려된다(예를 들어, 문서들, 이미지들, 비디오들, 오디오). 트랜잭션들의 예들은 제한 없이 어떠한 값(예를 들어, 자산들, 제품들, 서비스들, 화폐)의 교환들을 포함할 수 있다. 트랜잭션 데이터는 블록체인 내에 불변으로 저장된다. 즉, 트랜잭션 데이터는 변경될 수 없다.
블록에 저장하기 전에, 트랜잭션 데이터는 해시(hash)된다. 해시는 트랜잭션 데이터(스트링 데이터로서 제공됨)를 고정 길이 해시 값(또한 스트링 데이터로서 제공됨)으로 변환하는 프로세스이다. 트랜잭션 데이터를 획득하기 위해, 해시 값을 언해시(un-hash)하는 것은 가능하지 않다. 해시하는 것은, 트랜잭션 데이터에서 심지어 약간의 변화로도 완전히 상이한 해시 값을 도출하는 것을 보장한다. 추가로, 그리고 앞서 언급된 바와 같이, 해시 값은 고정 길이이다. 즉, 트랜잭션 데이터의 크기와 무관하게, 해시 값의 길이가 고정된다. 해시하는 것은 해시 값을 생성하기 위해 해시 함수를 통해 트랜잭션 데이터를 프로세싱하는 것을 포함한다. 예시적인 해시 함수는 제한 없이, 보안 해시 알고리즘(SHA)-256을 포함하고, 이는 256 비트 해시 값들을 출력한다.
다수의 트랜잭션들의 트랜잭션 데이터는 해시되고 블록에 저장된다. 예를 들어, 2개의 트랜잭션들의 해시 값들이 제공되고, 다른 해시를 제공하기 위해 스스로 해시된다. 이러한 프로세스는, 블록에 저장될 모든 트랜잭션들에 대해, 단일 해시 값이 제공될 때까지 반복된다. 이러한 해시 값은 머클 루트 해시로 지칭되고, 블록의 헤더에 저장된다. 트랜잭션들 중 임의의 것에서의 변화는 그 해시 값에서의 변화, 및 궁극적으로 머클 루트 해시에서의 변화를 도출할 것이다.
블록들은 합의 프로토콜을 통해 블록체인에 추가된다. 블록체인 네트워크 내의 다수의 노드들은 합의 프로토콜에 참여하고, 블록을 블록체인에 추가되는 블록을 갖기 위한 작업을 수행한다. 이러한 노드들은 합의 노드들로 지칭된다. 앞서 소개된 PBFT는 합의 프로토콜의 비제한적인 예로서 사용된다. 합의 노드들은 트랜잭션들을 블록체인에 추가하기 위해 합의 프로토콜을 실행한다.
더 상세하게는, 합의 노드는 블록 헤더를 생성하고, 블록 내의 트랜잭션들 전부를 해시하고, 블록 내의 모든 트랜잭션들에 대해 단일 해시 값이 제공될 때까지 추가적인 해시 값들을 생성하기 위해 해시 값을 쌍으로 조합한다(머클 루트 해시). 이러한 해시는 블록 헤더에 추가된다. 합의 노드는 또한 블록체인에서 가장 최근의 블록(즉, 블록체인에 추가된 마지막 블록)의 해시 값을 결정한다. 합의 노드는 또한 넌스(nonce) 값 및 타임스탬프를 블록 헤더에 추가한다.
일반적으로, PBFT는 비잔틴(Byzantine) 오류들(예를 들어, 오작동 노드들, 악성 노드들)을 견디는 실용적인 비잔틴 스테이트 머신 복제를 제공한다. 이는, 오류들이 발생할 것으로 가정(예를 들어, 독립적 노드 실패들 및/또는 합의 노드들에 의해 전송된 조작된 메시지들의 존재를 가정)함으로써 PBFT에서 달성된다. PBFT에서, 합의 노드들은, 프라이머리 합의 노드 및 백업 합의 노드들을 포함하는 시퀀스에서 제공된다. 프라이머리 합의 노드는 주기적으로 변경되고, 트랜잭션들은, 블록체인 네트워크의 월드 스테이트에 관한 동의에 도달한 블록체인 네트워크 내의 모든 합의 노드들에 의해 블록체인에 추가된다. 이러한 프로세스에서, 메시지들은 합의 노드들 사이에서 송신되고, 각각의 합의 노드들은, 메시지가 특정 피어 노드로부터 수신된 것을 입증하고, 메시지가 송신 동안 수정되지 않은 것을 검증한다.
PBFT에서, 합의 프로토콜은 동일한 스테이트에서 시작하는 모든 합의 노드들에 의해 다수의 스테이트들에서 제공된다. 시작하기 위해, 클라이언트는 서비스 동작을 호출(예를 들어, 블록체인 네트워크 내에서 트랜잭션을 실행)하기 위해 프라이머리 합의 노드에 요청을 전송한다. 요청을 수신하는 것에 응답하여, 프라이머리 합의 노드는 요청을 백업 합의 노드들에 멀티캐스트한다. 백업 합의 노드들은 요청을 실행하고, 각각 답신을 클라이언트에 전송한다. 클라이언트는 임계 수의 답신들이 수신될 때까지 대기한다. 일부 예들에서, 클라이언트는 f+1개의 답신들이 수신되기를 대기하고, 여기서 f는 블록체인 네트워크 내에서 견디어 질 수 있는 오류 합의 노드들의 최대 수이다. 최종 결과는, 충분한 수의 합의 노드들이 블록체인에 추가될 레코드의 주문에 동의하고, 레코드가 수락되거나 거부되는 것이다.
일부 블록체인 네트워크들에서, 트랜잭션들의 프라이버시를 유지하기 위해 암호화가 구현된다. 예를 들어, 블록체인 네트워크의 다른 노드들이 트랜잭션의 세부사항들을 인식할 수 없도록 2개의 노드들이 트랜잭션을 비밀로 유지하기를 원하면, 그 노드들은 트랜잭션 데이터를 암호화할 수 있다. 예시적인 암호화는 제한 없이 대칭적 암호화 및 비대칭적 암호화를 포함한다. 대칭적 암호화는 암호화(평문으로부터 암호문을 생성함) 및 암호해독(암호문으로부터 평문을 생성함) 둘 모두에 대해 단일 키를 사용하는 암호화 프로세스를 지칭한다. 대칭적 암호화에서는, 다수의 노드들에 동일한 키가 이용가능하여, 각각의 노드는 트랜잭션 데이터를 암호화/암호해독할 수 있다.
비대칭적 암호화는, 비밀 키 및 공개 키를 각각 포함하는 키 쌍들을 사용하고, 비밀 키는 오직 각각의 노드에만 알려지고, 공개 키는 블록체인 네트워크의 임의의 또는 모든 다른 노드들에 알려진다. 노드는 데이터를 암호화하기 위해 다른 노드의 공개 키를 사용할 수 있고, 암호화된 데이터는 다른 노드의 비밀 키를 사용하여 암호해독될 수 있다. 예를 들어, 도 2를 다시 참조하면, 참여자 A는 참여자 B의 공개 키를 사용하여 데이터를 암호화하고 암호화된 데이터를 참여자 B에게 전송할 수 있다. 참여자 B는 자신의 비밀 키를 사용하여 암호화된 데이터(암호문)를 암호해독하고 원래의 데이터(평문)을 추출할 수 있다. 노드의 공개 키로 암호화된 메시지들은 오직 노드의 비밀 키를 사용하여 암호해독될 수 있다.
비대칭적 암호화는 디지털 서명들을 제공하기 위해 사용되며, 이는 트랜잭션 내의 참여자들이 트랜잭션 내의 다른 참여자들 뿐만 아니라 트랜잭션의 유효성을 확인할 수 있게 한다. 예를 들어, 노드는 메시지를 디지털 방식으로 서명할 수 있고, 다른 노드는 메시지가 참여자 A의 디지털 서명에 기초하여 노드에 의해 전송된 것을 확인할 수 있다. 디지털 서명들은 또한 메시지들이 전달 동안 위조되지 않은 것을 보장하기 위해 사용될 수 있다. 예를 들어, 도 2를 다시 참조하면, 참여자 A는 참여자 B에게 메시지를 전송할 것이다. 참여자 A는 메시지의 해시를 생성하고, 그 다음, 자신의 비밀 키를 사용하여, 해시를 암호화하여 암호화된 해시로서 디지털 서명을 제공한다. 참여자 A는 디지털 서명을 메시지에 첨부하고, 디지털 서명을 갖는 메시지를 참여자 B에게 전송한다. 참여자 B는 참여자 A의 공개 키를 사용하여 디지털 서명을 암호해독하고 해시를 추출한다. 참여자 B는 메시지를 해시하고 해시들을 비교한다. 해시들이 동일하면, 참여자 B는 메시지가 실제로 참여자 A로부터의 것이었고 위조되지 않았음을 확인할 수 있다.
본 명세서의 구현들에 대한 추가적 콘텍스트를 제공하기 위해, 해시 트리(또한 앞서 소개된 머클 트리로 지칭됨)는 노드들의 트리, 및 노드들 사이의 에지들이다. 머클 트리는 루트 노드, 차일드 노드들, 리프 노드들을 포함한다. 블록체인 네트워크에서, 머클 트리는 앞서 설명된 해시 값들을 저장한다. 머클 트리에서, 각각의 리프 노드는 데이터 블록의 해시로 라벨링되고, 모든 비리프 노드(non-leaf node)는 그 노드의 차일드 노드들의 라벨들의 해시로 라벨링된다. 머클 트리들은 블록체인들과 같은 큰 데이터 구조들의 콘텐츠의 효율적이고 보안된 검증을 가능하게 한다. 트리(또한 프리픽스 트리로 지칭됨)는 알파벳을 통해 스트링들을 저장하기 위해 사용될 수 있는 다중 경로 트리 구조이다. 패트리샤 트리는, 단지 차일드 노드인 임의의 노드가 페어런트 노드와 병합되는 트리의 콤팩트한 표현이다. 머클 패트리샤 트리(또한 머클 패트리샤 트리(트리) 또는 MPT로 지칭됨)는 머클 트리 및 패트리샤 트리(프리픽스 트리) 둘 모두를 통합하여 둘 모두의 이점들을 승계하는 트리이다. MPT는 신속한 비교 및 데이터의 업데이트를 제공한다.
더 상세하게는, MPT는 256 비트 이진 프래그먼트들과 임의의 길이의 이진 데이터(바이트 어레이들) 사이에서 매핑하는 영구적 변경가능 데이터 구조로서 설명될 수 있다. 일부 예들에서, MPT는 데이터베이스로서 구현될 수 있다. MPT는 32 바이트 시퀀스 또는 빈(empty) 바이트 시퀀스일 수 있는 키 값 쌍들의 주어진 세트를 식별하는 단일 값을 제공한다. 예를 들어, MPT가 루트 노드로부터 리프 노드까지 순회될 때, 대응하는 키 값 쌍이 제공된다. 키는 순회를 통해 누적되어, 아래에서 설명되는, 각각의 브랜치 노드로부터 단일 니블(nibble)(즉, 단일 16진수 숫자(16진수))을 획득한다. 다수의 키들이 동일한 프리픽스를 공유하는 인스턴스들에서, 또는 단일 키가 고유의 서픽스(suffix)를 갖는 경우에, 노드들을 최적화하는 것이 제공된다. 결과적으로, MPT를 순회하는 동안, 다른 2개의 노드 유형들, 즉, 확장 노드들 및 리프 노드들 각각으로부터 다수의 니블들이 획득될 수 있다.
MPT에서, 리프 노드들 각각은 2 아이템 구조로서 제공된다. 하나의 아이템은 키들의 누적에 의해 아직 처리되지 않은 키의 니블들, 및 루트로부터 순회된 브랜치들에 대응한다. 헥스 프리픽스(hex-prefix) 인코딩이 사용되고, 함수에 대한 제2 파라미터가 참일 것이 요구된다. 리프 노드들의 예들 및 각각의 아이템들은 본 명세서에서 더 상세히 설명된다. 확장 노드들 각각은 2 아이템 구조로서 제공된다. 하나의 아이템은, 니블 키들의 누적 이후 적어도 2개의 별개의 키들에 의해 공유되는 것보다 큰 크기의 일련의 니블들, 및 루트로부터 순회되는 브랜치들에 대응한다. 헥스 프리픽스 인코딩이 사용되고, 함수에 대한 제2 파라미터가 거짓일 것이 요구된다. 확장 노드들의 예들 및 각각의 아이템들은 본 명세서에서 더 상세히 설명된다. 브랜치 노드들은 17 아이템 구조로서 제공되고, 처음 16개의 아이템들은, 이들의 순회에서의 이러한 포인트에서 키들에 대한 16개의 가능한 니블 값들 각각에 대응한다(예를 들어, 16진수 값들 0 내지 f). 17번째 아이템은, 이것이 종단자 노드이고, 따라서 키가 순회에서의 이러한 포인트에서 종료되는 경우에 사용된다. 브랜치는 단지 필요할 때에만 사용되고, 단지 단일 비제로 엔트리를 포함하는 어떠한 브랜치 노드들도 존재하지 않을 수 있다.
블록체인 네트워크들에서, MPT들은 암호화 인증 및 성능 균형을 가능하게 하고, 사용자들의 계정 스테이트들(및 스마트 계약들)을 조직화하는 월드 스테이트 데이터 조직화를 위해 사용된다. 일부 블록체인 네트워크들에서, 소위 월드 스테이트 MPT를 통해 계정의 스테이트를 질의하기 위한 인터페이스가 제공된다. 예를 들어, 계정 어드레스는 인터페이스를 통해 입력될 수 있고, 블록체인 네트워크의 노드(예를 들어, 완전한 클라이언트)는 계정의 스테이트를 리턴한다. 많은 수의 계정들의 스테이트를 질의할 때, 인터페이스가 반복적으로 호출되고, 각각의 계정의 스테이트가 리턴된다. 리턴된 데이터(예를 들어, 계정, 스테이트)는 프래그먼트화되고 구조를 갖지 않음을 주목할 수 있다. 이러한 데이터는 스테이트 트리에 로컬로 어셈블될 수 있지만, 결과적 스테이트 트리 및 월드 스테이트 MPT는 일반적으로 불일치한다. 결과적으로, MPT 자체의 이점들이 상실되고, 비교적 낮은 성능의 동작들 및 저장소들이 존재한다.
본 명세서에서 더 상세히 설명되는 바와 같이, 본 명세서의 구현들은 MPT 트리에서 서치 어드레스들의 주문을 개선하기 위해 깊이 우선 전위 순회를 실행하고, 2개의 계정 노드들(리프 노드들) 사이에서, 본 명세서에서 전환 노드로 지칭되는 순회 프로세스의 특수한 타입의 노드를 활용한다. 더 상세하게는, 본 명세서의 구현들은 월드 스테이트 MPT T0 및 어드레스 리스트 L0에 기초하여, 본 명세서에서 서브트리 T2로 지칭되는 월드 스테이트 서브트리를 제공한다. 본 명세서의 구현들은, 먼저 본 명세서에서 서브트리 T1로 지칭되는 어드레스 리스트 L0으로부터의 서브트리를 구성하고, 그 다음 서브트리 T1에서 깊이 우선 전위 순회를 실행함으로써, 각각의 어드레스에 대해 루트 노드로부터 리프 노드까지의 경로를 찾는 것을 회피한다. 계정 노드 어드레스 및 전환 노드 어드레스는 깊이 우선 전위 순회를 통해 차례로 찾아진다. 2개의 계정 노드들 사이에 전환 노드가 존재하면, 제1 계정 노드는 전환 노드로 리턴되고, 다른 계정 노드가 전환 노드로부터 찾아진다. 이러한 방식으로, 제2 계정 노드에 대한 서치는 루트 노드에서 시작할 필요가 없고, 그 대신 전환 노드에서 시작한다.
또한 본 명세서에서 더 상세히 설명되는 바와 같이, 본 명세서의 구현들은 프로세서 및 저장 요건들을 감소시킨다. 예를 들어, 각각의 어드레스에 대해, 루트 노드로부터 이의 대응하는 리프 노드까지의 경로가 저장되고, 이러한 경로들에서 중첩하는 노드들이 병합된다. 더 상세하게는, 루트 노드로부터 각각의 계정 노드(즉, 계정 어드레스에 대응하는 각각의 리프 노드)까지의 완전한 경로들을 저장하는 대신, 2개의 계정 노드들 사이에 전환 노드가 존재하면, 단지 전환 노드로부터 다음 계정 노드까지의 경로가 저장된다. 이러한 방식으로, 다수의 계정 노드들에 대한 경로가 병합되고, 이는 효율을 개선하고, 중첩하는 경로들에 의해 초래되는 동작 및 저장소 낭비를 회피한다.
일부 구현들에서, 그리고 본 명세서에서 더 상세히 설명되는 바와 같이, 월드 스테이트 MPT에서 계정 어드레스들의 리스트가 주어지면, 어드레스 리스트의 서브트리가 제공된다. 본 명세서의 구현들은 MPT에서 서치 어드레스들의 주문 및 노드들의 효율을 개선하기 위해 깊이 우선 전위 순회 알고리즘을 채택한다. 추가로, 본 명세서의 구현들은 2개의 계정 노드들 사이에 전환 노드를 포함하는 노드 순회 프로세스를 제공한다. 루트 노드로부터 각각의 계정 노드를 검색함으로써 초래되는 서치 낭비를 회피하기 위해, 구현들은 전환 노드로부터 다음 계정 노드까지의 경로를 저장하여, 루트 노드의 2개의 계정 노드들의 경로까지 중첩을 처리하는 것을 포함한다. 본 명세서에 설명된 바와 같이, 본 명세서의 구현들은 효율을 개선하고, 중첩하는 경로들에 의해 초래되는 동작들 및 저장소의 낭비를 회피한다.
본 명세서의 구현들은 예시적인 월드 스테이트 MPT를 참조하여 더 상세히 설명된다. 예시적인 월드 스테이트 MPT는 The Ethereum Foundation of Zug, Switzerland에 의해 제공되는 이더리움 블록체인 애플리케이션 플랫폼에 기초한다. 이더리움은 이더(ETH)로 지칭되는 디지털 자산을 제공하고, 이의 최소 단위는 웨이(WEI)로 지칭된다. 그러나, 본 명세서의 구현들은 임의의 적절한 블록체인 네트워크 및 임의의 적절한 월드 스테이트 MPT에서 실현될 수 있는 것으로 고려된다.
도 3은 월드 스테이트 MPT(300)의 예를 도시한다. 도 3의 예시적인 월드 스테이트 MPT(300)는 본 명세서의 구현들의 이해를 용이하게 하기 위해 비교적 간단한 것이 인식된다. 그러나, 본 명세서의 구현들은 다양한 정도의 복잡도(예를 들어, 수백, 수천 개의 노드들)를 갖는 MPT들로 실현될 수 있음이 고려된다. 도 3의 예에서, MPT(300)는 루트 노드(302), 브랜치 노드들(304, 306), 확장 노드(308) 및 리프 노드들(310, 312, 314)을 포함한다. 일부 예들에서, 리프 노드들(310, 312, 314)은 블록체인 네트워크 내의 각각의 계정들(Acct_1, Acct_2, Acct_3)에 대응한다. 예시적인 월드 스테이트 MPT(300)는 또한 키 값 쌍들을 레코딩하는 표(320)를 포함한다. 도 3의 예에서, 표(320)는 각각 리프 노드들(310, 312, 314)에 대응하는 키 값 쌍들(322, 324, 326)을 포함한다.
일부 예들에서, 도 3의 월드 스테이트 MPT(300)는 블록체인 네트워크 내의 다수의 클라이언트들에 의해 유지(예를 들어, 구성, 업데이트)된다. 예를 들어, 앞서 설명된 완전한 클라이언트들은 합의 프로세스에 참여하고, 블록체인의 월드 스테이트를 블록체인 네트워크 내에 유지할 수 있다. 이는, 예를 들어, 블록체인 및 월드 스테이트 MPT(300)의 완전한 카피를 저장하는 것을 포함할 수 있다. 예시적인 완전한 클라이언트들은 앞서 설명된 바와 같이 도 2의 참여자 시스템들(202, 204)을 포함한다.
앞서 설명된 바와 같이, 블록체인 네트워크는 라이트 클라이언트들을 포함할 수 있고, 이들은 블록체인의 월드 스테이트를 유지하지 않고 블록체인 및 월드 스테이트 MPT(300)의 완전한 카피들을 저장하지 않는다. 비제한적인 예에 의해, 라이트 클라이언트는 블록체인 네트워크 내의 계정들의 서브세트(예를 들어, Acct_1, Acct_2)에 관심이 있거나 오직 그에 대한 액세스만을 가질 수 있고, 다른 계정들(예를 들어, Acct_3)에 대해서는 관심이 없거나 액세스가 인가되지 않는다. 본 명세서의 구현들에 따르면, 라이트 클라이언트는 월드 스테이트 MPT(300)에서 제공된 스테이트와 일치하는 계정들의 서브세트의 스테이트를 유지할 수 있다. 본 명세서에서 더 상세히 설명되는 바와 같이, 완전한 클라이언트는 MPT(300)의 서브트리를 생성하고, 서브트리는 계정들의 서브세트와 관련된 월드 스테이트 MPT(300)의 일부분을 표현한다. 서브트리는 라이트 클라이언트에 제공되고, 주기적으로 업데이트되어, 서브트리의 스테이트가 월드 스테이트 MPT(300)의 스테이트와 일치하도록 보장한다.
도 4는 본 명세서의 구현들에 따라 도 3의 예시적인 월드 스테이트 MPT(300)에 기초하여 생성된 서브트리(400)의 예를 도시한다. 도 4에서, 예시적인 서브트리(400)는 루트 노드(402), 브랜치 노드들(404, 406), 확장 노드(408) 및 리프 노드들(410, 412)을 포함하고, 이들은 도 3의 월드 스테이트 MPT(300)의 루트 노드(302), 브랜치 노드들(304, 306), 확장 노드(308) 및 리프 노드들(310, 312)에 대응한다. 리프 노드들(410, 412)은, 블록체인 네트워크 내에서 각각의 클라이언트(예를 들어, 라이트 클라이언트)가 액세스를 갖는 각각의 계정들(Acct_1, Acct_2)에 대응한다. 예시적인 서브트리(400)는 또한 키 값 쌍들을 레코딩하는 표(420)를 포함한다. 도 4의 예에서, 표(420)는 각각 리프 노드들(410, 412)에 대응하는 키 값 쌍들(422, 424)을 포함한다.
도 4의 서브트리(400)는 도 3의 월드 스테이트 MPT 트리(300)의 리프 노드(314)에 대응하는 리프 노드가 없다(예를 들어, 라이트 클라이언트는 리프 노드(314)에 의해 표현되는 계정(Acct_3)에 대한 액세스를 갖지 않는다). 그 대신, 브랜치 노드(406)는 10번째 아이템에 플레이스홀더 문자(placeholder character)(*)를 포함한다.
본 명세서의 구현들에 따라, 그리고 본 명세서에 상세히 설명되는 바와 같이, 서브트리(400)는 라이트 클라이언트에 대해 완전한 클라이언트에 의해 생성될 수 있다. 예를 들어, 라이트 클라이언트는 서브트리에 대한 요청을 블록체인 네트워크에 제출할 수 있다. 요청에 응답하여, 완전한 클라이언트는, 라이트 클라이언트가 액세스를 갖는 계정들, 및 완전한 클라이언트에 의해 유지되는 월드 스테이트 MPT(300)에 기초하여 서브트리(400)를 생성할 수 있다. 일부 예들에서, 라이트 클라이언트로부터의 요청은 라이트 클라이언트가 액세스를 갖는 계정들의 서브세트에 대응하는 어드레스 리스트를 포함한다. 일부 예들에서, 라이트 클라이언트가 액세스를 갖는 계정들의 서브세트에 대한 어드레스 리스트는 완전한 클라이언트에 의해(예를 들어, 블록체인 네트워크 내의 라이트 클라이언트의 고유의 식별자를 사용하여 액세스 제어 리스트(ACL)를 인덱싱함으로써) 결정된다. 본 명세서에서 더 상세히 설명되는 바와 같이, 월드 스테이트 MPT(300) 및 어드레스 리스트가 주어지면, 완전한 클라이언트는 서브트리(400)를 생성하고, 요청한 라이트 클라이언트에 서브트리(400)를 리턴한다.
도 5a 및 도 5b는 본 명세서의 구현들에 따라 실행될 수 있는 프로세스들(500, 550)의 예들을 도시한다. 일부 구현들에서, 예시적인 프로세스들(500, 550)은 하나 이상의 컴퓨팅 디바이스를 사용하여 실행되는 하나 이상의 컴퓨터 실행가능 프로그램을 사용하여 수행될 수 있다. 예를 들어, 예시적인 프로세스들(500, 550)은 블록체인 네트워크 내의 라이트 클라이언트에 대한 서브트리를 생성하기 위해 완전한 클라이언트에 의해 실행될 수 있다.
도 5a를 특히 참조하면, 예시적인 프로세스(500)는 서브트리 T2의 구성을 위해 월드 스테이트 MPT T0으로부터 어드레스 리스트 L1을 제공하도록 실행될 수 있다.
월드 스테이트 MPT T0 및 어드레스 리스트 L0이 제공된다(502). 예를 들어, 월드 스테이트 MPT T0(예를 들어, 도 3의 월드 스테이트 MPT(300)) 및 어드레스 리스트 L0은 완전한 클라이언트에 의해 어드레스 리스트의 서브트리를 생성하기 위한 입력으로서 제공된다(예를 들어, 완전한 클라이언트는 월드 스테이트 MPT(300)를 저장하고 어드레스 리스트를 수신한다). 일부 예들에서, 어드레스 리스트 L0의 각각의 어드레스는 MPT 트리 T0의 리프 노드(예를 들어, MPT(300)의 리프 노드들(310, 312, 314))의 어드레스이다. 임의의 순서의 계정 어드레스들이 어드레스 리스트 L0 내에 제공될 수 있다. 일부 구현들에서, 그리고 본 명세서에서 더 상세히 설명되는 바와 같이, MPT 트리 T0의 노드들에 걸친 서치에 대해 깊이 우선 전위 순회 알고리즘이 사용된다.
MPT 트리 T1은 어드레스 리스트 L0으로부터 제공된다(502). 일부 예들에서, 어드레스 리스트 L0은 특정 라이트 클라이언트의 액세스가 허용된 어드레스들의 리스트를 표현하는 ACL에 기초한다. 일부 예들에서, 어드레스 리스트 L0은 생성될 서브트리 T2에 포함될 어드레스들을 제공한다. 일부 예들에서, 어드레스 리스트 L0 내의 각각의 어드레스의 값은 디폴트로 빈 스트링(예를 들어, 널로 지칭됨)으로 간주되고, T1의 각각의 노드의 값이 계산될 수 있다. 빈 어드레스 리스트 L1이 생성된다(504). 노드 순회는 T1의 루트 노드로부터 시작하여 깊이 우선 전위 순회로 T1을 순회하여 수행된다(506). 본 명세서에서 더 상세히 설명되는 바와 같이, 예시적인 프로세스(500)는 대응하는 어드레스 리스트 L0의 어드레스들의 노드들, 및 이들 사이의 전환 노드들을 어드레스 리스트 L1에 회귀적으로 레코딩한다.
현재 노드가 리프 노드인지 여부가 결정된다(508). 현재 노드가 리프 노드이면, 노드는 어드레스 리스트의 노드에 대응한다. 노드는 (예를 들어, "계정 노드"로서) 마킹되고, 노드의 어드레스 및 마크는 어드레스 L1에 저장된다(510). 순회는 리프 노드의 페어런트 노드로 리턴한다(512). 현재 노드가 리프 노드가 아니면, 현재 노드가 확장 노드인지 여부가 결정된다(514). 현재 노드가 확장 노드이면, 노드의 값은 다른 노드에 대한 참조를 포인팅하고, 순회는 참조된 노드로 이동한다(516).
현재 노드가 확장 노드가 아니면, 현재 노드는 브랜치 노드이고, 그 노드에 대한 제1 시간인지 여부가 결정된다(520). 제1 시간이 아니면, 현재 노드의 모든 차일드 노드가 순회되었는지 여부가 결정된다(522). 모든 차일드 노드가 순회되었다면, 순회는 브랜치 노드의 페어런트 노드로 리턴한다(512). 모든 차일드 노드가 순회되지 않았다면, 노드는 "전환 노드"로서 마킹되고, 그 노드의 어드레스 및 마크는 L1에 저장되고(524), 순회는, 순회되지 않은 차일드 노드로 이동한다(526). 현재 노드(브랜치 노드)에 대한 제1 시간이면, 그 값이 비어 있는지(예를 들어, 또한 널로 지칭되는 빈 스트링) 여부가 결정된다(528). 값이 비어 있으면, 이는, 그 노드가 어드레스 리스트의 노드에 대응하는 것을 표시하고, 노드는 "계정 노드"로서 마킹되고, 마크, 및 어드레스 및 마크는 L1에 저장되고(530), 순회는 제1 차일드 노드로 이동한다(526).
도 5b를 특히 참조하면, 예시적인 프로세스(550)는 어드레스 리스트 L1 및 월드 스테이트 MPT T0으로부터 서브트리 T2를 구성하도록 실행될 수 있다.본 명세서에 설명된 바와 같이, 서브트리 T2는 월드 스테이트 MPT T0과 동일한 루트 노드를 포함하고, 서브트리 T2의 나머지는 하기 내용을 회귀적으로 수행함으로써 루트 노드로부터 구성된다.
서브트리 T2에는 T0의 루트 노드가 제공된다(552). 어드레스 리스트 L1에서 "계정 노드"로서 마킹된 제1 어드레스가 선택된다(554). 대응하는 노드가 T0에서 찾아진다(556). 따라서, 루트 노드로부터 T0에서 대응하는 노드까지 서치 경로가 제공된다. 경로 상의 각각의 노드가 T2에 추가된다(558). 어드레스 리스트 L1의 다음 어드레스가 선택된다(560). 어드레스에 대응하는 노드가 "계정 노드"로서 마킹되는지 여부가 결정된다(562). 노드가 "계정 노드"로서 마킹되면, T0의 현재 노드에서 시작하여, 어드레스에 대응하는 노드가 T0에서 찾아지고, 경로 상의 각각의 노드가 T2에 추가된다(564).
노드가 "계정 노드"로서 마킹되지 않으면, 노드가 "전환 노드"로서 마킹되는지 여부가 결정된다(566). 노드가 "전환 노드"로서 마킹되면, T0의 현재 노드에서 시작하여, 어드레스에 대응하는 노드가 결정되고, T0에서 (새로운) 현재 노드로서 제공된다(568). 계정 노드에서 전환 노드로의 경로는 T2에 추가되지 않는다. 어드레스 리스트 L1의 어드레스들 모두를 순회한 후, 결과적 T2는 원래의 월드 스테이트 MPT T0의 어드레스 리스트 L0의 서브트리이다.
앞서 소개된 바와 같이, 본 명세서의 구현들은 또한 월드 스테이트 MPT들에 기초하여 서브트리들을 업데이트하는 것에 관한 것이다. 더 상세하게는, 월드 스테이트가 모든 노드들의 계정 스테이트(예를 들어, 사용자들, 스마트 계약들)를 레코딩하기 때문에, 월드 스테이트 MPT에 레코딩된 데이터의 양은 비교적 클 수 있다. 클라이언트들, 예를 들어, 라이트 클라이언트들의 경우, 많은 양의 데이터는 무관하거나 액세스불가능하다(예를 들어, 액세스 특권 없음). 결과적으로, 앞서 소개된 바와 같이, 일부 클라이언트들은 월드 스테이트에서 자신들과 연관된 사용자들(및 스마트 계약들) 중 일부의 계정 스테이트를 단지 로컬로 유지하려 할 수 있다. 이는, 본 명세서에서 설명된 바와 같이, 클라이언트가 로컬로 저장하는 월드 스테이트 MPT 트리의 서브트리를 클라이언트(라이트 클라이언트)에 제공함으로써 달성된다.
그러나, (예를 들어, 월드 스테이트 MPT에서) 합의 노드들에 의해 유지되는 월드 스테이트는 빈번하게 업데이트된다. 결과적으로, 클라이언트에 의해 유지되는 서브트리는 또한 주기적을 업데이트될 필요가 있다. 일반적으로, 서브트리의 업데이트는 서브트리의 가장 최근의 데이터를 합의 노드의 월드 스테이트 MPT의 데이터와 동기화하는 것을 포함할 수 있다. 이러한 관점에서, 본 명세서의 구현들은 서브트리를 대역폭, 프로세서, 및 메모리 효율적 방식으로 업데이트하기 위해 업데이트된 월드 스테이트 MPT 트리로부터 서브트리의 업데이트된 스테이트를 결정하는 것을 제공한다.
도 6은 업데이트들을 포함하는 도 3의 예시적인 월드 스테이트 MPT(300)를 도시한다. 도 6의 예에서, MPT(300)는 루트 노드(302), 브랜치 노드들(304, 306), 확장 노드(308), 리프 노드들(310, 312, 314) 및 리프 노드(318)를 포함한다. 일부 예들에서, 그리고 앞서 설명된 바와 같이, 리프 노드들(310, 312, 314)은 블록체인 네트워크 내의 각각의 계정들(Acct_1, Acct_2, Acct_3)에 대응한다. 리프 노드(318)는 (예를 들어, 도 3의 월드 스테이트 MPT(300)가 제공된 후) 블록체인 네트워크에 추가된 각각의 계정(Acct_4)에 대응한다. 예시적인 표(320)는, 리프 노드들(310, 312, 314)에 각각 대응하는 키 값 쌍들(322, 324, 326) 및 리프 노드(318)에 대응하는 키 값 쌍(328)을 레코딩한다. 따라서, 월드 스테이트 MPT(300)에 대한 업데이트들은 리프 노드(318) 및 각각의 키 값 쌍(328)을 포함한다.
본 명세서의 구현들에 따라, 그리고 본 명세서에 상세히 설명되는 바와 같이, 도 4의 서브트리(400)는 라이트 클라이언트에 대해 완전한 클라이언트에 의해 제공된 업데이트들의 세트에 기초하여 업데이트될 수 있다. 예를 들어, 라이트 클라이언트는 업데이트된 서브트리에 대한 요청을 블록체인 네트워크에 제출할 수 있다. 요청에 응답하여, 완전한 클라이언트는, 완전한 클라이언트에 의해 유지되는 (예를 들어, 도 6에 도시된 바와 같이) 월드 스테이트 MPT(300)의 현재 스테이트에 기초하여 서브트리(400)에 대한 업데이트들을 결정할 수 있다. 일부 예들에서, 완전한 클라이언트는 (예를 들어, 새로운 서브트리와 반대로) 업데이트들의 세트를 생성하고, 업데이트들의 세트를 라이트 클라이언트에 송신한다. 라이트 클라이언트는 서브트리(400)를 업데이트하기 위해 업데이트들의 세트를 프로세싱한다.
도 7은 본 명세서의 구현들에 따라 도 6의 예시적인 월드 스테이트 MPT(300)에 기초한 업데이트들을 포함하는 도 4의 예시적인 서브트리(400)를 도시한다. 도 7의 예시적인 서브트리(400)는 루트 노드(402), 브랜치 노드들(404, 406), 확장 노드(408) 및 리프 노드들(410, 412)을 포함하고, 이들은 도 3의 월드 스테이트 MPT(300)의 루트 노드(302), 브랜치 노드들(304, 306), 확장 노드(308) 및 리프 노드들(310, 312)에 대응한다. 리프 노드들(410, 412)은, 블록체인 네트워크 내에서 각각의 클라이언트(예를 들어, 라이트 클라이언트)가 액세스를 갖는 각각의 계정들(Acct_1, Acct_2)에 대응한다. 예시적인 서브트리(400)는 또한 키 값 쌍들을 레코딩하는 표(420)를 포함한다. 도 7의 예에서, 표(420)는 각각 리프 노드들(410, 412, 414)에 대응하는 키 값 쌍들(422, 424, 426)을 포함한다.
도 4에서와 같이, 도 7의 서브트리(400)는 도 3 및 도 6의 월드 스테이트 MPT 트리(300)의 리프 노드(312)에 대응하는 리프 노드가 없다(예를 들어, 라이트 클라이언트는 리프 노드(312)에 의해 표현되는 계정(Acct_3)에 대한 액세스를 갖지 않는다). 그 대신, 브랜치 노드(406)는 10번째 아이템에 플레이스홀더 문자(*)를 포함한다. 추가로, 도 7의 서브트리(400)는 도 6의 월드 스테이트 MPT 트리(300)의 리프 노드(318)에 대응하는 리프 노드가 없다(예를 들어, 라이트 클라이언트는 리프 노드(318)에 의해 표현되는 계정(Acct_4)에 대한 액세스를 갖지 않는다). 그 대신, 브랜치 노드(404)는 16번째 아이템에 플레이스홀더 문자(*)를 포함한다.
도 8a 및 도 8b는 본 명세서의 구현들에 따라 실행될 수 있는 프로세스들(800, 850)의 예들을 도시한다. 일부 구현들에서, 예시적인 프로세스들(800, 850)은 하나 이상의 컴퓨팅 디바이스fmf 사용하여 실행되는 하나 이상의 컴퓨터 실행가능 프로그램을 사용하여 수행될 수 있다. 예를 들어, 예시적인 프로세스(800)는 블록체인 네트워크 내의 라이트 클라이언트에 대한 서브트리에 대한 업데이트들의 세트를 생성하기 위해 완전한 클라이언트에 의해 실행될 수 있고, 예시적인 프로세스(850)는 로컬로 유지되는 서브트리를 업데이트하기 위해 라이트 클라이언트에 의해 실행될 수 있다.
도 8a를 특히 참조하면, 예시적인 프로세스(800)는 월드 스테이트 MPT T0 및 서브트리 T2로부터 (예를 들어, 업데이트된 노드들의 서브트리 T2'로서 제공된) 업데이트들의 세트를 제공하도록 실행될 수 있다. 본 명세서에 설명된 바와 같이, 예시적인 프로세스(800)는 서브트리 T2의 노드(현재 노드)와 월드 스테이트 MPT T0의 대응하는 노드(현재 노드) 사이의 쌍 단위 노드 비교를 수행하고, 상이한 월드 스테이트 MPT T0의 임의의 노드들을 업데이트된 트리 T2'에 추가한다.
T0의 루트 노드의 값 및 T2의 루트 노드의 값이 결정되고(802), 값들이 비교된다(804). 값들이 동일하면, 서브트리 T2는 MPT T0과 일치하는 스테이트에 있고, (806)과 같이 표시된다. 예를 들어, 응답은 완전한 클라이언트로부터, 업데이트를 요청한 라이트 클라이언트에 전송되어, 서브트리 T2가 월드 스테이트와 일치하는 것을 표시할 수 있다. 값들이 상이하면, 월드 스테이트 MPT T0은 서브트리 T2가 생성된 이후 업데이트되었다. 결과적으로, 업데이트 트리 T2'는 MPT T0의 루트 노드에 의해 생성되고, 현재 노드는 서브트리 T2의 루트 노드로부터 참조된 값을 갖는 노드로 이동한다(808). 즉, 리프 노드의 값은 데이터베이스(키 값 쌍들을 저장함)에 저장된 일부 데이터에 대한 키이다. 결과적으로, 리프 노드의 값은 데이터베이스의 실제 데이터를 참조한다. 비리프 노드의 경우, 그 값은 다른 노드의 어드레스이다. 즉, 비리프 노드는 다른 노드를 포인팅한다(참조한다).
서브트리 T2의 현재 노드에 대한 제1 시간인지 여부가 결정된다(810). 서브트리 T2의 현재 노드에 대한 제1 시간이면, 현재 노드의 어드레스에 대응하는 노드가 MPT T0에서 찾아지고, 서치 경로가 제공된다(812). 일부 예들에서, 서치 경로는 대응하는 노드에 대한 MPT T0 내의 깊이 순회이다. 서치 경로에 임의의 중재자 노드들이 존재하는지 여부가 결정된다(814). 서치 경로에 하나 이상의 중재자 노드가 존재하면, 중재자 노드(들)가 트리 T2'에 추가되고, 이들이 서브트리 T2가 포함하지 않는 노드들임을 표시하도록 각각 태그(마킹)된다. 일부 예들에서, 태그는 본 명세서에서 설명되는 바와 같이 노드를 마킹하기 위해 사용되는 메타데이터로서 제공된다.
T2의 현재 노드가 리프 노드인지 여부가 결정된다(818). T2의 현재 노드가 리프 노드이면, T0의 현재 노드가 리프 노드인지 여부가 결정된다(820). T0 내의 현재 노드가 리프 노드이면, T2 및 T0의 현재 노드들의 값들이 비교된다(822). 값들이 상이하면, T0의 현재 노드가 T2'에 추가된다(824). 값들이 상이하지 않으면, T2의 현재 노드가 페어런트 노드로 이동한다(826). 이러한 방식으로, T0의 현재 노드는 오직, T2의 현재 노드와 상이한 유형의 노드이거나, T2의 현재 노드의 상이한 값인 경우 업데이트 트리 T2'에 추가된다. 이들이 동일한 유형 및 값인 경우, T0의 현재 노드는 업데이트 트리 T2'에 추가되지 않는다. T2의 현재 노드가 리프 노드가 아니면, T2의 현재 노드가 확장 노드인지 여부가 결정된다(828). T2의 현재 노드가 확장 노드이면, T0의 현재 노드는 T2'에 추가되고, T2의 현재 노드는 슬롯에 의해 포인팅된 노드로 이동하고 예시적인 프로세스(800)는 루프 백(loop back)한다.
T2의 현재 노드가 확장 노드가 아니면, T2의 현재 노드 및 T0의 현재 노드 각각은 브랜치 노드이다. T2의 현재 노드가 고려되고 있는 제1 시간인지 여부가 결정된다(832). 제1 시간이면, T2의 현재 노드 및 T0의 현재 노드의 값들이 상이한지 여부가 결정된다(834). 값들이 상이하면, T0의 현재 노드가 업데이트 트리 T2'에 추가된다(834). 값들이 동일하면, T2의 다른 노드를 포인팅하는 T2의 현재 노드의 다음 슬롯이 결정되고, T2의 현재 노드는 슬롯이 포인팅하는 노드로 이동한다. 즉, T2의 다른 노드를 포인팅하지 않는 임의의 슬롯들은 그 값이 널이 아닌 경우에도 고려되지 않는데, 이는, 이러한 슬롯들이 T2에 있지 않은 T0의 노드를 포인팅하기 때문이다. 따라서, 예시적인 프로세스(800)는, 제1 슬롯부터 시작하여 상이한 값을 갖는 슬롯을 직면할 때까지 슬롯 비교를 제공하고, T2의 현재 노드는 이러한 슬롯에 의해 포인팅된 노드로 이동하고(836), 예시적인 프로세스(800)는 루프 백한다.
T2의 현재 노드에 대한 제1 시간이 아니면(832), T2의 현재 노드와 T0의 현재 노드 사이의 모든 슬롯들이 비교되었는지 여부가 결정된다(838). 모든 슬롯들이 비교되었으면, 예시적인 프로세스(800)는 페어런트 노드로 이동하도록 루프 백한다(826). 모든 슬롯들이 비교되지 않았다면, 널이 아닌 나머지 슬롯들은, 상이한 나머지 슬롯들의 값을 직면할 때까지 T0의 현재 노드의 슬롯들과 반복적으로 비교된다(840). T0의 현재 노드는 이러한 슬롯에 의해 나타나는 노드로 이동하고(842), 예시적인 프로세스(800)는 루프 백한다.
예시적인 프로세스(800)가 회귀적으로 실행되고, 서브트리 T2의 현재 노드는 페어런트 노드로 반복적으로 이동하고(826), 페어런트 노드가 루트 노드인지 여부가 결정된다(844). 페어런트 노드가 루트 노드가 아니면, 예시적인 프로세스(800)는 MPT T0에 대한 서브트리 T2의 (새로운) 현재 노드를 고려하도록 루프 백한다. 페어런트 노드가 루트 노드이면, 업데이트 트리 T2'가 리턴된다(846). 업데이트 서브트리는 업데이트된 월드 스테이트 MPT T0의 관점에서 서브트리 T2의 모든 업데이트된 노드들로 구성된다. 즉, 업데이트 트리 T2'는 오직, 업데이트된 MPT T0의 관점에서 업데이트된 서브트리 T2의 그러한 노드들을 포함한다.
도 8b를 특히 참조하면, 예시적인 프로세스(850)는 완전한 클라이언트로부터 제공된 업데이트된 트리 T2'에 기초하여 라이트 클라이언트에서 서브트리 T2를 업데이트하도록 실행될 수 있다. 즉, 완전한 클라이언트는 완전히 새로 생성된 서브트리와 반대로, 라이트 클라이언트에 업데이트 트리 T2'를 송신하기만 하면 된다. 업데이트 트리 T2'는 오직 업데이트된 노드들만을 포함하기 때문에, 이는 서브트리 T2보다 작은 데이터 구조이다. 따라서, 오직 업데이트된 트리 T2'만을 전송함으로써, 컴퓨팅 자원들 및 대역폭이 (예를 들어, 완전히 새로운 서브트리 T2를 라이트 클라이언트에 전송하는 것에 비해) 보존된다. 일부 예들에서, 라이트 클라이언트는 서브트리 T2를 로컬로 업데이트하기 위해 업데이트 트리 T2'를 수신할 때 예시적인 프로세스(850)를 실행한다.
업데이트 트리 T1의 루트 노드로 시작하여, 예시적인 프로세스(800)는 각각의 노드를 (현재 노드로서) 고려하기 위해 깊이 우선 주문 순회를 실행한다. 현재 노드가 고려되었는지 여부가 결정된다(852). 현재 노드가 고려되었다면, 다음 노드가 현재 노드로서 선택되고(854), 예시적인 프로세스(850)는 루프 백한다. 현재 노드가 고려되지 않았다면, 현재 노드가 태그를 갖는지(마킹되는지) 여부가 결정된다(856). 현재 노드가 태그를 갖지 않으면, 원래의 서브트리 T2에 있는 어드레스를 갖는 노드가 결정되고, 오래된 노드는 업데이트 트리 T2'로부터의 새로운 노드로 대체된다(858). 현재 노드가 태그를 가지면(즉, 그 어드레스가 원래의 서브트리 T2의 대응하는 노드를 갖지 않으면), 노드는 서브트리 T2로 삽입된다(860). 업데이트 트리 T2'의 모든 노드들을 순회한 후, 서브트리 T2는 업데이트된 MPT T0의 관련 업데이트들을 반영하도록 업데이트된다.
도 9는 본 명세서의 구현들에 따른 장치(900)의 모듈들의 예들을 도시한다. 장치(900)는 콘소시엄 블록체인 네트워크와 같은 블록체인 네트워크에서 월드 스테이트 MPT의 서브트리를 생성하도록 구성된 블록체인 노드의 예시적인 구현일 수 있다. 장치(900)는 앞서 설명된 구현들에 대응할 수 있고, 장치(900)는, 월드 스테이트 MPT 및 블록체인 네트워크 내의 노드들의 어드레스들을 저장하기 위한 어드레스 리스트를 제공하기 위한 발생기 또는 발생 유닛(902), 월드 스테이트 MPT의 순회를 위한 실행기 또는 실행 유닛(904), 월드 스테이트 MPT의 서브트리를 생성하기 위한 생성기 또는 생성 유닛(906), 및 월드 스테이트 MPT의 서브트리를 블록체인 네트워크의 비합의 클라이언트에 송신하기 위한 송신기 또는 송신 유닛(908)을 포함한다.
도 10은 본 명세서의 구현들에 따른 장치(1000)의 모듈들의 예들을 도시한다. 장치(1000)는 콘소시엄 블록체인 네트워크와 같은 블록체인 네트워크에서 월드 스테이트 MPT의 서브트리를 업데이트하도록 구성된 블록체인 노드의 예시적인 구현일 수 있다. 장치(1000)는 앞서 설명된 구현들에 대응할 수 있고, 장치(1000)는, 월드 스테이트 MPT의 루트 노드를 포함하고 초기에 다른 노드들이 없는 업데이트 트리를 생성하기 위한 발생기 또는 발생 유닛(1002); 서브트리 중 적어도 일부분의 순회를 다수의 반복으로 실행하기 위한 실행기 또는 실행 유닛(1004); 및 블록체인 네트워크의 비합의 노드에 서브트리의 업데이트 트리를 송신하기 위한 송신기 또는 송신 유닛(1006)을 포함하고, 비합의 클라이언트는 비합의 클라이언트와 연관된 계정들의 스테이트를 제공하는 업데이트된 서브트리를 제공하기 위해 업데이트 트리를 사용하여 로컬로 저장된 서브트리를 업데이트한다.
이전의 구현들에서 예시된 시스템, 장치, 모듈 또는 유닛은 컴퓨터 칩 또는 엔티티를 사용함으로써 구현될 수 있거나 또는 특정 기능을 갖는 제품을 사용함으로써 구현될 수 있다. 통상적인 구현 디바이스는 컴퓨터이고, 컴퓨터는 개인용 컴퓨터, 랩탑 컴퓨터, 셀룰러 폰, 카메라 폰, 스마트 폰, 개인 휴대 정보 단말, 미디어 플레이어, 네비게이션 디바이스, 이메일 수신 및 전송 디바이스, 게임 콘솔, 태블릿 컴퓨터, 웨어러블 디바이스, 또는 이러한 디바이스들의 임의의 조합일 수 있다.
장치에서 각각의 유닛의 기능들 및 역할들의 구현 프로세스에 대해, 이전 방법에서의 대응하는 단계들의 구현 프로세스가 참조될 수 있다. 세부사항들은 단순화를 위해 여기에서 생략된다.
장치 구현이 기본적으로 방법 구현에 대응하기 때문에, 관련 부분들에 대해, 방법 구현에서의 관련 설명들이 참조될 수 있다. 이전에 설명된 장치 구현은 단지 예이다. 별개의 부분들로 설명된 유닛들은 물리적으로 별개일 수 있거나 아닐 수 있고, 유닛들로 디스플레이된 부분들은 물리적 유닛들일 수 있거나 아닐 수 있고, 하나의 위치에 위치될 수 있거나, 또는 다수의 네트워크 유닛들 상에 분산될 수 있다. 모듈들 중 일부 또는 전부는 본 명세서의 솔루션들의 목적들을 달성하기 위한 실제 요구들에 기초하여 선택될 수 있다. 당업자는 창작적 노력 없이 본 출원의 구현들을 이해하고 구현할 수 있다.
도 9를 다시 참조하면, 이는, 월드 스테이트 MPT 생성 장치의 서브트리의 내부 기능 모듈 및 구조를 예시하는 것으로 해석될 수 있다. 월드 스테이트 MPT 생성 장치의 서브트리는 블록체인 네트워크 내의 월드 스테이트 MPT의 서브트리를 생성하도록 구성된 블록체인 노드의 예일 수 있다. 도 10을 다시 참조하면, 이는, 월드 스테이트 MPT 업데이트 장치의 서브트리의 내부 기능 모듈 및 구조를 예시하는 것으로 해석될 수 있다. 월드 스테이트 MPT 업데이트 장치의 서브트리는 블록체인 네트워크 내의 월드 스테이트 MPT의 서브트리를 업데이트하도록 구성된 블록체인 노드의 예일 수 있다. 실행 본체는 본질적으로 전자 디바이스일 수 있고, 전자 디바이스는 하나 이상의 프로세서; 및 하나 이상의 프로세서의 실행가능한 명령어를 저장하는 메모리를 포함한다.
본 요지의 설명된 구현들은 하나 이상의 특징을 단독으로 또는 조합하여 포함할 수 있다. 예를 들어, 제1 구현에서, 액션들은, 월드 스테이트 MPT, 및 블록체인 네트워크 내의 노드들의 어드레스들을 저장하기 위한 어드레스 리스트를 제공하는 것 - 어드레스 리스트는 초기에 비어있음 - , 월드 스테이트 MPT 중 적어도 일부의 순회를 다수의 반복들로 실행하는 것, 각각의 반복에서, 월드 스테이트 MPT 중 적어도 일부 중의 현재 노드에 대해, 현재 노드를 계정 노드로서 마킹하고, 현재 노드의 어드레스를 어드레스 리스트에 저장하는 것, 현재 노드가 확장 노드라고 결정하고, 순회의 다음 반복으로 이동하여 현재 노드를 확장 노드에 의해 참조되는 노드로 설정하는 것, 및 현재 노드를 전환 노드로서 마킹하고, 현재 노드의 어드레스를 어드레스 리스트에 저장하는 것 중 하나를 실행하는 것; 어드레스 리스트에 기초하여 월드 스테이트 MPT의 서브트리를 생성하는 것 - 서브트리의 루트 노드는 월드 스테이트 MPT의 루트 노드를 포함하고, 서브트리의 하나 이상의 차일드 노드는 어드레스 리스트에 저장된 어드레스를 갖는 월드 스테이트 MPT의 노드들에 대응함 - , 및 월드 스테이트 MPT의 서브트리를 블록체인 네트워크의 비합의 클라이언트에 송신하는 것 - 서브트리는 비합의 클라이언트와 연관된 계정들의 스테이트를 제공함 - 을 위해 실행된다.
전술한 구현들 및 다른 설명된 구현들 각각은 선택적으로 하기 특징들 중 하나 이상을 포함할 수 있다:
하기 특징들 중 임의의 것과 조합가능한 제1 특징에서, 현재 노드는, 현재 노드가 리프 노드 중 하나이고, 널 값이 없는 브랜치 노드라고 결정한 것에 응답하여 계정 노드로서 마킹된다.
하기 특징들 중 임의의 것과 조합가능한 제2 특징에서, 현재 노드는, 현재 노드가 브랜치 노드이고, 브랜치 노드의 모든 차일드 노드들이 순회되었다고 결정한 것에 응답하여 전환 노드로서 마킹된다.
하기 특징들 중 임의의 것과 조합가능한 제3 특징에서, 현재 노드를 계정 노드로서 마킹한 후, 순회의 다음 반복의 현재 노드는 계정 노드의 페어런트 노드를 포함한다.
하기 특징들 중 임의의 것과 조합가능한 제4 특징에서, 현재 노드를 계정 노드 및 전환 노드 중 하나로서 마킹한 후, 순회의 다음 반복의 현재 노드는 계정 노드 및 전환 노드 중 하나의 차일드 노드를 포함한다.
하기 특징들 중 임의의 것과 조합가능한 제5 특징에서, 어드레스 리스트에 기초하여 월드 스테이트 MPT의 서브트리를 생성하는 단계는 적어도 부분적으로, 어드레스 리스트에 계정 노드로서 마킹된 어드레스에 대해, 월드 스테이트 MPT 내의 경로를 결정하고, 경로를 서브트리에 추가하는 단계를 포함한다.
하기 특징들 중 임의의 것과 조합가능한 제6 특징에서, 순회는 깊이 우선 전위를 포함한다.
본 명세서에 설명된 요지, 액션들 및 동작들의 구현들은 디지털 전자 회로로, 유형적으로 구현된 컴퓨터 소프트웨어 또는 펌웨어로, 또는 본 명세서에서 개시된 구조들 및 이들의 구조적 등가물들을 포함하는 컴퓨터 하드웨어로, 또는 이들의 하나 이상의 조합으로 구현될 수 있다. 본 명세서에 설명된 요지의 구현들은 하나 이상의 컴퓨터 프로그램, 예를 들어, 데이터 프로세싱 장치에 의한 실행을 위해 또는 데이터 프로세싱 장치의 동작을 제어하기 위해, 컴퓨터 프로그램 캐리어 상에 인코딩된 컴퓨터 프로그램 명령어들의 하나 이상의 모듈로서 구현될 수 있다. 캐리어는 유형의 비일시적 컴퓨터 저장 매체일 수 있다. 대안적으로 또는 추가적으로, 캐리어는 인공적으로 생성된 전파되는 신호, 예를 들어, 데이터 프로세싱 장치에 의한 실행을 위해 적절한 수신기 장치로의 송신을 위해 정보를 인코딩하도록 생성된 머신으로 생성된 전기적, 광학적 또는 전자기적 신호일 수 있다. 컴퓨터 저장 매체는 머신 판독가능 저장 디바이스, 머신 판독가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 디바이스, 또는 이들 중 하나 이상의 조합일 수 있거나 또는 이들의 일부일 수 있다. 컴퓨터 저장 매체는 전파되는 신호가 아니다.
용어 "데이터 프로세싱 장치"는 예를 들어, 프로그래밍가능 프로세서, 컴퓨터, 또는 다수의 프로세서들 또는 컴퓨터들을 포함하는, 데이터를 프로세싱하기 위한 모든 종류의 장치, 디바이스들 및 머신들을 포함한다. 데이터 프로세싱 장치는 특수 목적 로직 회로, 예를 들어, FPGA(field programmable gate array), ASIC(application-specific integrated circuit) 또는 GPU(graphics processing unit)를 포함할 수 있다. 장치는 또한 하드웨어에 추가로, 컴퓨터 프로그램들에 대한 실행 환경을 생성하는 코드, 예를 들어, 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 시스템 또는 이들의 하나 이상의 조합을 구성하는 코드를 포함할 수 있다
프로그램, 소프트웨어, 소프트웨어 애플리케이션, 앱, 모듈, 소프트웨어 모듈, 엔진, 스크립트 또는 코드로 또한 지칭되거나 설명될 수 있는 컴퓨터 프로그램은 컴파일된 또는 해석된 언어들, 또는 선언적 또는 절차적 언어들을 포함하는 임의의 형태의 프로그래밍 언어로 기록될 수 있고, 독립형 프로그램으로서 또는 모듈, 컴포넌트, 엔진, 서브루틴 또는 컴퓨팅 환경에서 실행하기에 적합한 다른 유닛을 포함하는 임의의 형태로 배치될 수 있고, 이러한 환경은 하나 이상의 위치에서 데이터 통신 네트워크에 의해 상호연결되는 하나 이상의 컴퓨터를 포함할 수 있다.
컴퓨터 프로그램은 파일 시스템 내의 파일에 대응할 수 있지만 반드시 그럴 필요는 없다. 컴퓨터 프로그램은 다른 프로그램들 또는 데이터, 예를 들어, 마크업 언어 문서에 저장된 하나 이상의 스크립트, 문제의 프로그램에 전용되는 단일 파일, 또는 다수의 조정된 파일들, 예를 들어, 하나 이상의 모듈, 서브 프로그램 또는 코드의 일부들을 저장하는 파일들에 저장될 수 있다.
본 명세서에서 설명된 프로세스들 및 로직 흐름들은 입력 데이터에 대해 동작하고 출력을 생성함으로써 동작들을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 컴퓨터에 의해 수행될 수 있다. 프로세스들 및 로직 흐름들은 또한 특수 목적 로직 회로, 예를 들어, FPGA, ASIC 또는 GPU에 의해, 또는 특수 목적 로직 회로와 하나 이상의 프로그래밍된 컴퓨터의 조합에 의해 수행될 수 있다.
컴퓨터 프로그램의 실행에 적합한 컴퓨터들은 범용 또는 특수 목적 마이크로프로세서들 또는 둘 모두, 또는 임의의 다른 종류의 중앙 프로세싱 유닛에 기초할 수 있다. 일반적으로, 중앙 프로세싱 유닛은 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 둘 모두로부터 명령어들 및 데이터를 수신할 것이다. 컴퓨터의 요소들은 명령어들을 실행하기 위한 중앙 프로세싱 유닛 및 명령어들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스를 포함할 수 있다. 중앙 프로세싱 유닛 및 메모리는 특수 목적 로직 회로에 의해 보완되거나 그에 통합될 수 있다.
일반적으로, 컴퓨터는 또한 데이터를 하나 이상의 대용량 저장 디바이스를 포함하거나, 또는 이들로부터 데이터를 수신하거나 이들에 데이터를 전송하기 위해 동작가능하게 결합될 것이다. 대용량 저장 디바이스들은 예를 들어, 자기, 자기 광학 또는 광학 디스크들 또는 솔리드 스테이트 드라이브들일 수 있다. 그러나, 컴퓨터는 이러한 디바이스들을 가질 필요가 없다. 또한, 컴퓨터는 다른 디바이스, 예를 들어, 몇몇 예를 들자면, 모바일 전화, 개인 휴대 정보 단말(PDA), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, GPS(Global Positioning System) 수신기, 휴대용 저장 디바이스, 예를 들어, 범용 직렬 버스(USB) 플래시 드라이브에 내장될 수 있다.
사용자와의 상호작용을 제공하기 위해, 본 명세서에서 설명된 요지의 구현들은, 사용자에게 정보를 디스플레이하기 위한 디스플레이 디바이스, 예를 들어, LCD(liquid crystal display) 모니터, 및 사용자가 컴퓨터에 입력을 제공할 수 있게 하는 입력 디바이스, 예를 들어, 키보드 및 포인팅 디바이스, 예를 들어, 마우스, 트랙볼 또는 터치패드를 갖는 컴퓨터 상에 구현되거나 그와 통신하도록 구성될 수 있다. 다른 종류들의 디바이스들이 또한 사용자와의 상호작용을 제공하기 위해 사용될 수 있는데: 예를 들어, 사용자에게 제공된 피드백은 임의의 형태의 센서 피드백, 예를 들어, 시각적 피드백, 청각적 피드백 또는 촉각적 피드백일 수 있고; 사용자로부터의 입력은 음향, 스피치 또는 촉각적 입력을 포함하는 임의의 형태로 수신될 수 있다. 또한, 컴퓨터는 예를 들어, 웹 브라우저로부터 수신된 요청들에 응답하여 사용자의 디바이스 상의 웹 브라우저에 웹 페이지들을 전송함으로써, 또는 사용자 디바이스, 예를 들어, 스마트폰 또는 전자 태블릿 상에서 실행되는 앱과 상호작용함으로써, 사용자에 의해 사용되는 디바이스에 문서들을 전송하고 그로부터 문서들을 수신함으로써 사용자와 상호작용할 수 있다. 또한, 컴퓨터는 개인용 디바이스, 예를 들어, 메시징 애플리케이션을 실행하고 리턴으로 사용자로부터 응답 메시지들을 수신하는 스마트폰에 텍스트 메시지들 또는 다른 형태들의 메시지를 전송함으로써 사용자와 상호작용할 수 있다.
본 명세서는 시스템들, 장치 및 컴퓨터 프로그램 컴포넌트들과 관련하여 용어 "구성되는"을 사용한다. 하나 이상의 컴퓨터의 시스템이 특정 동작들 또는 액션들을 수행하도록 구성되는 것은, 시스템이 시스템으로 하여금 동작들 또는 액션들을 수행하게 하도록 동작하는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합이 설치되어 있음을 의미한다. 하나 이상의 컴퓨터 프로그램이 특정 동작들 또는 액션들을 수행하도록 구성되는 것은, 하나 이상의 프로그램이 데이터 프로세싱 장치에 의해 실행되는 경우 장치로 하여금 동작들 또는 액션들을 수행하게 하는 명령어들을 포함함을 의미한다. 특수 목적 로직 회로가 특정 동작들 또는 액션들을 수행하도록 구성되는 것은, 회로가 동작들 또는 액션들을 수행하는 전자 로직을 가짐을 의미한다.
본 명세서서는 많은 특정 구현 세부사항들을 포함하지만, 이들은, 청구항들 자체에 의해 정의되는, 청구되고 있는 범주에 대한 제한들로서 해석되는 것이 아니라, 오히려 특정 구현들에 특정될 수 있는 특징들의 설명들로서 해석되어야 한다. 별개의 구현들의 콘텍스트에서 본 명세서에서 설명된 특정 특징들은 또한 조합하여 단일 구현으로 실현될 수 있다. 반대로, 단일 구현의 콘텍스트에서 설명된 다양한 특징들은 또한 다수의 구현들에서 별개로 또는 임의의 적절한 하위 조합으로 실현될 수 있다. 또한, 특징들은 특정 조합들로 작용하는 것으로 앞서 설명되고 심지어 초기에 이와 같이 청구될 수 있지만, 청구된 조합으로부터의 하나 이상의 특징은 일부 경우들에서 조합으로부터 제거될 수 있고, 청구항은 하위 조합 또는 하위 조합의 변형으로 유도될 수 있다.
유사하게, 동작들이 도면들에서 도시되고 청구항들에서 특정 순서로 인용되어 있지만, 이는 바람직한 결과들을 달성하기 위해 이러한 동작들이 도시된 특정 순서로 또는 순차적인 순서로 수행되거나 모든 예시된 동작들이 수행되도록 요구하는 것으로 이해되어서는 안된다. 특정 상황들에서, 멀티태스킹 및 병렬적 프로세싱이 유리할 수 있다. 또한, 앞서 설명된 구현들에서 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 구현들에서 이러한 분리를 요구하는 것으로 이해되지 않아야 하며, 설명된 프로그램 컴포넌트들 및 시스템들은 일반적으로 단일 소프트웨어 제품에서 함께 통합되거나 다수의 소프트웨어 제품들로 패키징될 수 있음을 이해해야 한다.
요지의 특정 구현들이 설명되었다. 다른 구현들은 다음의 청구항들의 범위 내에 존재한다. 예를 들어, 청구항들에서 인용되는 액션들은 상이한 순서로 수행되고 여전히 바람직한 결과들을 달성할 수 있다. 일례로서, 첨부된 도면들에 도시된 프로세스들은, 바람직한 결과들을 달성하기 위해, 반드시 도시된 특정 순서 또는 순차적인 순서를 요구하지는 않는다. 일부 경우들에서, 멀티태스킹 및 병렬적 프로세싱이 유리할 수 있다.

Claims (21)

  1. 블록체인 네트워크 내에서 월드 스테이트(world-state) 머클 패트리샤 트리(MPT; Merkle Patricia Trie)의 서브트리(sub-tree)를 제공하기 위한 컴퓨터로 구현되는(computer-implemented) 방법에 있어서,
    블록체인 네트워크의 합의 클라이언트(consensus client)에 의해, 월드 스테이트 MPT, 및 상기 블록체인 네트워크 내의 노드들의 어드레스들을 저장하기 위한 어드레스 리스트를 제공하는 단계 - 상기 어드레스 리스트는 초기에 비어있음 - ;
    상기 합의 클라이언트에 의해, 상기 월드 스테이트 MPT 중 적어도 일부의 순회(traversal)를 다수의 반복들로 실행하는 단계 - 각각의 반복에서, 상기 월드 스테이트 MPT 중 상기 적어도 일부 중의 현재 노드에 대해,
    상기 현재 노드를 계정 노드(account node)로서 마킹하고, 상기 현재 노드의 어드레스를 상기 어드레스 리스트에 저장하는 것,
    상기 현재 노드가 확장 노드(extension node)라고 결정하고, 상기 순회의 다음 반복으로 이동하여 상기 현재 노드를 상기 확장 노드에 의해 참조되는 노드로 설정하는 것, 및
    상기 현재 노드를 전환 노드(transition node)로서 마킹하고, 상기 현재 노드의 어드레스를 상기 어드레스 리스트에 저장하는 것 중 하나를 실행함 - ;
    상기 합의 클라이언트에 의해, 상기 어드레스 리스트에 기초하여 상기 월드 스테이트 MPT의 서브트리를 생성하는 단계 - 상기 서브트리의 루트 노드(root node)는 상기 월드 스테이트 MPT의 루트 노드를 포함하고, 상기 서브트리의 하나 이상의 차일드 노드(child node)는 상기 어드레스 리스트에 저장된 어드레스를 갖는 상기 월드 스테이트 MPT의 노드들에 대응함 - ; 및
    상기 합의 클라이언트에 의해, 상기 월드 스테이트 MPT의 서브트리를 상기 블록체인 네트워크의 비합의 클라이언트(non-consensus client)에 송신하는 단계 - 상기 서브트리는 상기 비합의 클라이언트와 연관된 계정들의 스테이트를 제공함 - 를 포함하는, 블록체인 네트워크 내에서 월드 스테이트 머클 패트리샤 트리(MPT)의 서브트리를 제공하기 위한 컴퓨터로 구현되는 방법.
  2. 제1항에 있어서, 상기 현재 노드는, 상기 현재 노드가 리프 노드(leaf node) 중 하나이고, 널 값(null value)이 없는 브랜치 노드(branch node)라고 결정한 것에 응답하여 계정 노드로서 마킹되는 것인, 방법.
  3. 제1항에 있어서, 상기 현재 노드는, 상기 현재 노드가 브랜치 노드이고, 상기 브랜치 노드의 모든 차일드 노드들이 순회되었다고 결정한 것에 응답하여 전환 노드로서 마킹되는 것인, 방법.
  4. 제1항에 있어서, 상기 현재 노드를 계정 노드로서 마킹한 후, 상기 순회의 다음 반복의 현재 노드는 상기 계정 노드의 페어런트 노드(parent node)를 포함하는 것인, 방법.
  5. 제1항에 있어서, 상기 현재 노드를 계정 노드 및 전환 노드 중 하나로서 마킹한 후, 상기 순회의 다음 반복의 현재 노드는 상기 계정 노드 및 상기 전환 노드 중 상기 하나의 차일드 노드를 포함하는 것인, 방법.
  6. 제1항에 있어서, 상기 어드레스 리스트에 기초하여 상기 월드 스테이트 MPT의 서브트리를 생성하는 단계는 적어도 부분적으로, 상기 어드레스 리스트에 계정 노드로서 마킹된 어드레스에 대해, 상기 월드 스테이트 MPT 내의 경로를 결정하고, 상기 경로를 상기 서브트리에 추가하는 단계를 포함하는 것인, 방법.
  7. 제1항에 있어서, 상기 순회는 깊이 우선 전위(depth-first pre-order) 순회를 포함하는 것인, 방법.
  8. 하나 이상의 컴퓨터에 결합되고 명령어들이 저장된 비일시적 컴퓨터 판독가능 저장 매체에 있어서, 상기 명령어들은 블록체인 네트워크 내에서 월드 스테이트 머클 패트리샤 트리(MPT)의 서브트리를 제공하도록 실행가능하고, 상기 명령어들은,
    블록체인 네트워크의 합의 클라이언트에 의해, 월드 스테이트 MPT, 및 상기 블록체인 네트워크 내의 노드들의 어드레스들을 저장하기 위한 어드레스 리스트를 제공하도록 - 상기 어드레스 리스트는 초기에 비어있음 - ;
    상기 합의 클라이언트에 의해, 상기 월드 스테이트 MPT 중 적어도 일부의 순회를 다수의 반복들로 실행하도록 - 각각의 반복에서, 상기 월드 스테이트 MPT 중 상기 적어도 일부 중의 현재 노드에 대해,
    상기 현재 노드를 계정 노드로서 마킹하고, 상기 현재 노드의 어드레스를 상기 어드레스 리스트에 저장하는 것,
    상기 현재 노드가 확장 노드라고 결정하고, 상기 순회의 다음 반복으로 이동하여 상기 현재 노드를 상기 확장 노드에 의해 참조되는 노드로 설정하는 것, 및
    상기 현재 노드를 전환 노드로서 마킹하고, 상기 현재 노드의 어드레스를 상기 어드레스 리스트에 저장하는 것 중 하나를 실행함 - ;
    상기 합의 클라이언트에 의해, 상기 어드레스 리스트에 기초하여 상기 월드 스테이트 MPT의 서브트리를 생성하도록 - 상기 서브트리의 루트 노드는 상기 월드 스테이트 MPT의 루트 노드를 포함하고, 상기 서브트리의 하나 이상의 차일드 노드는 상기 어드레스 리스트에 저장된 어드레스를 갖는 상기 월드 스테이트 MPT의 노드들에 대응함 - ;
    상기 합의 클라이언트에 의해, 상기 월드 스테이트 MPT의 서브트리를 상기 블록체인 네트워크의 비합의 클라이언트에 송신하도록 - 상기 서브트리는 상기 비합의 클라이언트와 연관된 계정들의 스테이트를 제공함 - 상기 하나 이상의 컴퓨터에 의해 실행가능한 것인, 하나 이상의 컴퓨터에 결합되고 명령어들이 저장된 비일시적 컴퓨터 판독가능 저장 매체.
  9. 제8항에 있어서, 상기 현재 노드는, 상기 현재 노드가 리프 노드 중 하나이고, 널 값이 없는 브랜치 노드라고 결정한 것에 응답하여 계정 노드로서 마킹되는 것인, 컴퓨터 판독가능 저장 매체.
  10. 제8항에 있어서, 상기 현재 노드는, 상기 현재 노드가 브랜치 노드이고, 상기 브랜치 노드의 모든 차일드 노드들이 순회되었다고 결정한 것에 응답하여 전환 노드로서 마킹되는 것인, 컴퓨터 판독가능 저장 매체.
  11. 제8항에 있어서, 상기 현재 노드를 계정 노드로서 마킹한 후, 상기 순회의 다음 반복의 현재 노드는 상기 계정 노드의 페어런트 노드를 포함하는 것인, 컴퓨터 판독가능 저장 매체.
  12. 제8항에 있어서, 상기 현재 노드를 계정 노드 및 전환 노드 중 하나로서 마킹한 후, 상기 순회의 다음 반복의 현재 노드는 상기 계정 노드 및 상기 전환 노드 중 상기 하나의 차일드 노드를 포함하는 것인, 컴퓨터 판독가능 저장 매체.
  13. 제8항에 있어서, 상기 어드레스 리스트에 기초하여 상기 월드 스테이트 MPT의 서브트리를 생성하는 것은 적어도 부분적으로, 상기 어드레스 리스트에 계정 노드로서 마킹된 어드레스에 대해, 상기 월드 스테이트 MPT 내의 경로를 결정하고, 상기 경로를 상기 서브트리에 추가하는 것을 포함하는 것인, 컴퓨터 판독가능 저장 매체.
  14. 제8항에 있어서, 상기 순회는 깊이 우선 전위 순회를 포함하는 것인, 컴퓨터 판독가능 저장 매체.
  15. 시스템에 있어서,
    하나 이상의 컴퓨터; 및
    상기 하나 이상의 컴퓨터에 결합되고 명령어들이 저장된 하나 이상의 컴퓨터 판독가능 메모리를 포함하고, 상기 명령어들은 블록체인 네트워크 내에서 월드 스테이트 머클 패트리샤 트리(MPT)의 서브트리를 제공하도록 실행가능하고, 상기 명령어들은,
    블록체인 네트워크의 합의 클라이언트에 의해, 월드 스테이트 MPT, 및 상기 블록체인 네트워크 내의 노드들의 어드레스들을 저장하기 위한 어드레스 리스트를 제공하도록 - 상기 어드레스 리스트는 초기에 비어있음 - ;
    상기 합의 클라이언트에 의해, 상기 월드 스테이트 MPT 중 적어도 일부의 순회를 다수의 반복들로 실행하도록 - 각각의 반복에서, 상기 월드 스테이트 MPT 중 상기 적어도 일부 중의 현재 노드에 대해,
    상기 현재 노드를 계정 노드로서 마킹하고, 상기 현재 노드의 어드레스를 상기 어드레스 리스트에 저장하는 것,
    상기 현재 노드가 확장 노드라고 결정하고, 상기 순회의 다음 반복으로 이동하여 상기 현재 노드를 상기 확장 노드에 의해 참조되는 노드로 설정하는 것, 및
    상기 현재 노드를 전환 노드로서 마킹하고, 상기 현재 노드의 어드레스를 상기 어드레스 리스트에 저장하는 것 중 하나를 실행함 - ;
    상기 합의 클라이언트에 의해, 상기 어드레스 리스트에 기초하여 상기 월드 스테이트 MPT의 서브트리를 생성하도록 - 상기 서브트리의 루트 노드는 상기 월드 스테이트 MPT의 루트 노드를 포함하고, 상기 서브트리의 하나 이상의 차일드 노드는 상기 어드레스 리스트에 저장된 어드레스를 갖는 상기 월드 스테이트 MPT의 노드들에 대응함 - ;
    상기 합의 클라이언트에 의해, 상기 월드 스테이트 MPT의 서브트리를 상기 블록체인 네트워크의 비합의 클라이언트에 송신하도록 - 상기 서브트리는 상기 비합의 클라이언트와 연관된 계정들의 스테이트를 제공함 - 상기 하나 이상의 컴퓨터에 의해 실행가능한 것인, 시스템.
  16. 제15항에 있어서, 상기 현재 노드는, 상기 현재 노드가 리프 노드 중 하나이고, 널 값이 없는 브랜치 노드라고 결정한 것에 응답하여 계정 노드로서 마킹되는 것인, 시스템.
  17. 제15항에 있어서, 상기 현재 노드는, 상기 현재 노드가 브랜치 노드이고, 상기 브랜치 노드의 모든 차일드 노드들이 순회되었다고 결정한 것에 응답하여 전환 노드로서 마킹되는 것인, 시스템.
  18. 제15항에 있어서, 상기 현재 노드를 계정 노드로서 마킹한 후, 상기 순회의 다음 반복의 현재 노드는 상기 계정 노드의 페어런트 노드를 포함하는 것인, 시스템.
  19. 제15항에 있어서, 상기 현재 노드를 계정 노드 및 전환 노드 중 하나로서 마킹한 후, 상기 순회의 다음 반복의 현재 노드는 상기 계정 노드 및 상기 전환 노드 중 상기 하나의 차일드 노드를 포함하는 것인, 시스템.
  20. 제15항에 있어서, 상기 어드레스 리스트에 기초하여 상기 월드 스테이트 MPT의 서브트리를 생성하는 것은 적어도 부분적으로, 상기 어드레스 리스트에 계정 노드로서 마킹된 어드레스에 대해, 상기 월드 스테이트 MPT 내의 경로를 결정하고, 상기 경로를 상기 서브트리에 추가하는 것을 포함하는 것인, 시스템.
  21. 제15항에 있어서, 상기 순회는 깊이 우선 전위 순회를 포함하는 것인, 시스템.
KR1020197028618A 2019-03-04 2019-03-04 블록체인 월드 스테이트 머클 패트리샤 트리 서브트리 구성 KR102277289B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2019/076814 WO2019101230A2 (en) 2019-03-04 2019-03-04 Constructing blockchain world state merkle patricia trie subtree

Publications (2)

Publication Number Publication Date
KR20200107771A true KR20200107771A (ko) 2020-09-16
KR102277289B1 KR102277289B1 (ko) 2021-07-16

Family

ID=66631231

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197028618A KR102277289B1 (ko) 2019-03-04 2019-03-04 블록체인 월드 스테이트 머클 패트리샤 트리 서브트리 구성

Country Status (10)

Country Link
US (2) US10691665B1 (ko)
EP (1) EP3596684A4 (ko)
JP (1) JP6865851B2 (ko)
KR (1) KR102277289B1 (ko)
CN (1) CN110800008B (ko)
AU (1) AU2019203850B2 (ko)
CA (1) CA3057738A1 (ko)
SG (1) SG11201908944WA (ko)
TW (1) TWI720712B (ko)
WO (1) WO2019101230A2 (ko)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11582042B2 (en) * 2018-03-16 2023-02-14 General Electric Company Industrial data verification using secure, distributed ledger
CN110046901B (zh) * 2018-12-28 2020-06-30 阿里巴巴集团控股有限公司 联盟链的可信度验证方法、系统、装置及设备
CN110800008B (zh) 2019-03-04 2023-06-30 创新先进技术有限公司 构建区块链世界状态默克尔帕特里夏字典树子树
CN114096958A (zh) * 2019-06-04 2022-02-25 数字资产(瑞士)股份有限公司 多用户数据库系统及方法
SG11202001975SA (en) 2019-07-11 2020-04-29 Alibaba Group Holding Ltd Shared blockchain data storage
SG11202001989WA (en) 2019-07-11 2020-04-29 Alibaba Group Holding Ltd Shared blockchain data storage
WO2019179539A2 (en) 2019-07-11 2019-09-26 Alibaba Group Holding Limited Shared blockchain data storage
SG11202002036WA (en) 2019-08-20 2020-04-29 Alibaba Group Holding Ltd Blockchain data storage based on shared nodes and error correction code
CN110597822B (zh) * 2019-09-20 2023-10-27 腾讯科技(深圳)有限公司 区块链中的信息查找方法、装置、存储介质和计算机设备
US11720526B2 (en) * 2019-11-12 2023-08-08 ClearTrace Technologies, Inc. Sustainable energy tracking system utilizing blockchain technology and Merkle tree hashing structure
CN111026806A (zh) * 2019-11-14 2020-04-17 杭州复杂美科技有限公司 一种默克尔状态树同步方法、设备及存储介质
US11528146B1 (en) * 2019-12-10 2022-12-13 Hiro Systems Pbc Fork table of an authenticated index data structure
CN111209341B (zh) * 2020-01-07 2023-03-14 北京众享比特科技有限公司 区块链的数据存储方法、装置、设备及介质
CN111339191B (zh) * 2020-02-20 2023-05-26 百度在线网络技术(北京)有限公司 一种区块链的数据存储方法、装置、设备和介质
CN111488349A (zh) * 2020-04-08 2020-08-04 北京瑞策科技有限公司 基于业务数据区块链的数据查询方法及装置
WO2020143852A2 (en) 2020-04-15 2020-07-16 Alipay (Hangzhou) Information Technology Co., Ltd. Distributed blockchain data storage under account model
SG11202103246SA (en) 2020-04-20 2021-04-29 Alipay Hangzhou Inf Tech Co Ltd Distributed blockchain data storage under account model
CN113301002B (zh) * 2020-04-24 2023-05-09 阿里巴巴集团控股有限公司 一种信息处理方法、装置、电子设备以及存储介质
CN111553669B (zh) * 2020-04-28 2021-09-10 腾讯科技(深圳)有限公司 一种交易路由方法、装置及计算机可读存储介质
CN111651300B (zh) * 2020-06-05 2023-03-21 成都质数斯达克科技有限公司 一种区块链数据恢复方法、装置、设备及介质
EP3933638A1 (en) * 2020-06-29 2022-01-05 Siemens Aktiengesellschaft Consensus method for a distributed database
CN112511629B (zh) * 2020-11-30 2022-11-11 上海简苏网络科技有限公司 一种mpt结构的账户树的数据压缩方法及系统
CA3206764C (en) 2021-01-29 2024-02-27 Troy Martin Sustainable energy physical delivery tracking and verification of actual environmental impact
US11743327B2 (en) * 2021-02-05 2023-08-29 International Business Machines Corporation Topological ordering of blockchain associated proposals
CN113220685B (zh) * 2021-05-11 2022-04-19 支付宝(杭州)信息技术有限公司 智能合约存储内容的遍历方法及装置、电子设备
CN112967065B (zh) * 2021-05-18 2021-07-13 腾讯科技(深圳)有限公司 一种交易验证方法、装置、设备及存储介质
CN113780779A (zh) * 2021-08-31 2021-12-10 杭州协能科技股份有限公司 数据状态控制方法、系统及梯次电池数据状态控制方法
CN114218232B (zh) * 2022-02-21 2022-05-24 浙商银行股份有限公司 一种基于增量桶的世界状态分片存储方法及装置
CN116701414A (zh) * 2022-02-24 2023-09-05 腾讯科技(深圳)有限公司 基于区块链的数据处理方法、装置、设备及可读存储介质
CN114866567B (zh) * 2022-05-26 2023-06-02 成都质数斯达克科技有限公司 一种抗容灾的多层次区块链网络区块同步方法和装置
CN115617818B (zh) * 2022-12-15 2023-03-24 深圳市迈科龙电子有限公司 区块链中的mpt树批量更新方法、电子设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106657187A (zh) * 2015-10-30 2017-05-10 南京中兴新软件有限责任公司 报文处理的方法及装置
WO2017148527A1 (en) * 2016-03-03 2017-09-08 Nec Europe Ltd. Method for managing data in a network of nodes
US20180097779A1 (en) * 2016-09-30 2018-04-05 Nec Europe Ltd. Method and system for providing a transaction forwarding service in blockchain implementations
US20180115428A1 (en) * 2016-10-26 2018-04-26 Acronis International Gmbh System and method for verification of data transferred among several data storages
CN108711052A (zh) * 2018-05-18 2018-10-26 电子科技大学 一种基于区块链的信息验证系统
CN108805565A (zh) * 2018-05-17 2018-11-13 深圳前海微众银行股份有限公司 基于区块链的承诺存在性证明方法、设备及可读存储介质

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100361093C (zh) * 2004-12-07 2008-01-09 华为技术有限公司 一种处理器中使用缓存区的方法
CN100444167C (zh) * 2005-12-21 2008-12-17 中国科学院计算技术研究所 完美双数组trie树词典管理与检索方法
US20130132547A1 (en) * 2011-05-09 2013-05-23 Respect Network Corporation Apparatus and Method for Address Book Automation Over a Trust Network
WO2013078644A1 (zh) * 2011-11-30 2013-06-06 华为技术有限公司 路由前缀存储方法、装置及路由地址查找方法、装置
WO2014201047A1 (en) * 2013-06-11 2014-12-18 InfiniteBio Fast, scalable dictionary construction and maintenance
US10264001B2 (en) * 2015-08-12 2019-04-16 Wizard Tower TechnoServices Ltd. Method and system for network resource attack detection using a client identifier
US10046228B2 (en) * 2016-05-02 2018-08-14 Bao Tran Smart device
CN106126722B (zh) 2016-06-30 2019-10-18 中国科学院计算技术研究所 一种基于验证的前缀混合树及设计方法
CN108197226A (zh) 2017-12-29 2018-06-22 山大地纬软件股份有限公司 Mptc账户状态树以及mptc区块链快速检索方法
CN108282474B (zh) 2018-01-18 2020-04-17 山东大学 基于区块链的数字资产交易一致性的维护方法
CN108846013B (zh) * 2018-05-04 2021-11-23 昆明理工大学 一种基于geohash与Patricia Trie的空间关键词查询方法及装置
CN110800008B (zh) 2019-03-04 2023-06-30 创新先进技术有限公司 构建区块链世界状态默克尔帕特里夏字典树子树

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106657187A (zh) * 2015-10-30 2017-05-10 南京中兴新软件有限责任公司 报文处理的方法及装置
WO2017148527A1 (en) * 2016-03-03 2017-09-08 Nec Europe Ltd. Method for managing data in a network of nodes
US20180097779A1 (en) * 2016-09-30 2018-04-05 Nec Europe Ltd. Method and system for providing a transaction forwarding service in blockchain implementations
US20180115428A1 (en) * 2016-10-26 2018-04-26 Acronis International Gmbh System and method for verification of data transferred among several data storages
CN108805565A (zh) * 2018-05-17 2018-11-13 深圳前海微众银行股份有限公司 基于区块链的承诺存在性证明方法、设备及可读存储介质
CN108711052A (zh) * 2018-05-18 2018-10-26 电子科技大学 一种基于区块链的信息验证系统

Non-Patent Citations (8)

* Cited by examiner, † Cited by third party
Title
GAVIN WOOD, "ETHEREUM: A SECURE DECENTRALISED GENERALISED TRANSACTION LEDGER, EIP-150 REVISION (1e18248 - 2017-04-12),2017.04.12 *
Takenobu T, ethereum_evm_illustrated, 2018.03 *
머클 패트리시아 트리, https://ihpark92.tistory.com/48 *
머클트리 등, https://blog.naver.com/PostView.nhn?blogId=pcmola&logNo=222092198653&categoryNo=0&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView *
머클패트리샤트리, https://sejinik.tistory.com/121 *
이더리움 블로그, https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/ *
이더리움, https://ethereum.github.io/yellowpaper/paper.pdf *
이더리움-블록체인-머클트리-구조, https://drhot552.github.io/blockchain *

Also Published As

Publication number Publication date
US10929374B2 (en) 2021-02-23
EP3596684A4 (en) 2020-04-01
AU2019203850A1 (en) 2019-05-31
EP3596684A2 (en) 2020-01-22
CA3057738A1 (en) 2019-05-31
CN110800008B (zh) 2023-06-30
TWI720712B (zh) 2021-03-01
WO2019101230A2 (en) 2019-05-31
TW202034246A (zh) 2020-09-16
AU2019203850B2 (en) 2021-09-16
KR102277289B1 (ko) 2021-07-16
CN110800008A (zh) 2020-02-14
US10691665B1 (en) 2020-06-23
JP6865851B2 (ja) 2021-04-28
WO2019101230A3 (en) 2019-12-26
SG11201908944WA (en) 2019-10-30
US20200320055A1 (en) 2020-10-08
JP2020530213A (ja) 2020-10-15

Similar Documents

Publication Publication Date Title
KR102277289B1 (ko) 블록체인 월드 스테이트 머클 패트리샤 트리 서브트리 구성
US10691676B1 (en) Updating blockchain world state Merkle Patricia Trie subtree
US11270308B2 (en) Shared blockchain data storage
US10892898B2 (en) Shared blockchain data storage
US11265322B2 (en) Data isolation in blockchain networks
US11108555B2 (en) Performing map iterations in a blockchain-based system
US11119987B2 (en) Shared blockchain data storage based on error correction code
US11251969B2 (en) Performing map iterations in a blockchain-based system
CN110998633A (zh) 在基于读写集模型的区块链技术中避免双花问题的方法和设备

Legal Events

Date Code Title Description
N231 Notification of change of applicant
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right