KR20240056400A - 에러 정정 코드 기반 블록체인 데이터 저장 방법 및 장치 - Google Patents

에러 정정 코드 기반 블록체인 데이터 저장 방법 및 장치 Download PDF

Info

Publication number
KR20240056400A
KR20240056400A KR1020230104187A KR20230104187A KR20240056400A KR 20240056400 A KR20240056400 A KR 20240056400A KR 1020230104187 A KR1020230104187 A KR 1020230104187A KR 20230104187 A KR20230104187 A KR 20230104187A KR 20240056400 A KR20240056400 A KR 20240056400A
Authority
KR
South Korea
Prior art keywords
blockchain
block
data
nodes
data storage
Prior art date
Application number
KR1020230104187A
Other languages
English (en)
Inventor
김창수
이명철
Original Assignee
한국전자통신연구원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국전자통신연구원 filed Critical 한국전자통신연구원
Publication of KR20240056400A publication Critical patent/KR20240056400A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0045Arrangements at the receiver end
    • H04L1/0046Code rate detection or code type detection
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0056Systems characterized by the type of code used
    • H04L1/0061Error detection codes
    • 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

본 발명의 일 실시예에 따른 에러 정정 코드 기반 블록체인 데이터 저장 방법은 저장할 블록 데이터를 복수의 서브 블록 데이터 세트로 분할하는 단계; 상기 블록 데이터에 상응하는 패리티 데이터 세트를 생성하는 단계; 및 상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 블록체인 데이터 저장 노드들의 저장 용량에 비례하도록 저장하는 단계를 포함한다.

Description

에러 정정 코드 기반 블록체인 데이터 저장 방법 및 장치{METHOD AND APPARATUS FOR STORING BLOCKCHAIN DATA BASED ON ERROR CORRECTION CODING}
본 발명은 블록체인 네트워크에 참여하는 노드들의 저장 공간을 고려한 에러 정정 코드 기반 블록체인 데이터 저장 기술에 관한 것이다.
블록체인 네트워크 또는 컨센서스 네트워크로 지칭될 수 있는 분산 원장 시스템은 상호 신뢰할 수 없는 다수의 참여자들의 데이터를 안전하고 불변적으로 저장할 수 있게 한다. 블록체인 네트워크는 공개 블록체인 네트워크, 비공개 블록체인 네트워크 및 컨소시엄 블록체인 네트워크들을 포함한다. 분산 원장은 트랜잭션 데이터, 상태 데이터 및 다른 유형의 데이터를 저장할 수 있다.
일부 블록체인 네트워크는 분산 원장을 블록체인 네트워크에 참여하는 각 노드에 중복해서 저장한다. 트랜잭션이 지속적으로 발생하면서 분산 원장은 크기가 매우 커질 수 있다. 이는 컴퓨팅 능력과 저장공간을 많이 요구하게 되어 보통 수준의 시스템에서 블록체인 데이터 저장 및 처리를 불가능하게 하는 문제가 있다. 결국에는 높은 컴퓨팅 능력과 저장공간을 보유한 노드만 완전한 기능을 수행하는 풀노드(Full Node)로서 참여 가능해지면서 탈중앙화에 역행하는 문제가 발생한다.
일부 블록체인 네트워크는 원장 데이터를 참여 노드에 중복 저장하는 대신, 에러 정정 코드(Error Correction Code; ECC)의 한 종류인 소거 코드(Erasure Code)를 활용하여 참여 노드에 분산 저장하는 방법을 사용한다.
소거 코드는 원본 데이터를 k개로 분할하고, m개의 패리티 비트를 추가하여 n(=k+m)개의 데이터 세트를 생성(인코딩)한다. n개의 데이터 세트 중 임의의 k개 데이터 세트가 주어지면 원본 데이터를 복구할 수 있다. 즉, n개의 데이터 세트 중 임의의 m개 데이터 세트가 소실되더라도 원본 데이터의 복구가 가능하다. 블록체인 네트워크는 n개의 데이터 세트 중 한 개씩을 n개의 블록체인 노드에 분산하여 저장한다. 소거 코드 기반 블록체인 네트워크는 상당한 저장공간을 절약할 수 있다. 그러나, 블록체인 네트워크에 참여하는 각 노드는 상이한 저장 공간을 구비할 수 있으며, 노드들 중 상대적으로 적은 공간을 가지는 노드는 계속 증가하는 원장의 크기에 따라 어느 시점 이후부터는 참여가 불가능하게 되는 문제가 있다.
따라서, 블록체인 네트워크에 참여하는 노드들의 저장공간을 고려하여 블록체인 데이터를 분산 저장하게 하는 것이 바람직할 것이다. 또한, 이것은 블록체인 네트워크에서 발생할 수 있는 비잔틴 노드(고장으로 액세스 불가능하거나 악의적인 사용자에 의해 이상한 행동을 하는 노드)로 인한 문제를 해결할 수 있어야 한다.
국내 공개특허공보 제2020-0112236호(발명의 명칭: 분산 식별자 관리 방법 및 장치)
본 발명의 목적은 블록체인 참여 노드의 저장 공간을 고려한 분산 저장 방법을 제공하는 것이다.
또한, 본 발명의 목적은 에러 정정 코딩 기반 블록체인 데이터 저장을 통해 비잔틴 장애 내성을 보장하고 저장 공간을 줄이는 것이다.
상기한 목적을 달성하기 위한 본 발명의 일 실시예에 따른 에러 정정 코드 기반 블록체인 데이터 저장 방법은 저장할 블록 데이터를 복수의 서브 블록 데이터 세트로 분할하는 단계; 상기 블록 데이터에 상응하는 패리티 데이터 세트를 생성하는 단계; 및 상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 블록체인 데이터 저장 노드들의 저장 용량에 비례하도록 저장하는 단계를 포함한다.
이때, 상기 저장 용량에 비례하도록 저장하는 단계는 상기 서브 블록 데이터 세트 또는 상기 패리티 데이터 세트를 저장하지 않은 다른 블록체인 데이터 저장 노드에 상기 서브 블록 데이터 세트 또는 상기 패리티 데이터 세트에 상응하는 해시값을 저장할 수 있다.
이때, 상기 블록체인 데이터 저장 노드는 상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 저장할 수 있는 최대 데이터 세트 수를 가질 수 있다.
이때, 상기 최대 데이터 세트 수는 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율에 기반하여 결정될 수 있다.
이때, 상기 패리티 데이터 세트의 수는 허용할 수 있는 비잔틴 노드 수 및 상기 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율에 기반하여 결정될 수 있다.
이때, 상기 방법은 신규 블록체인 데이터 저장 노드가 추가되면, 상기 신규 블록체인 데이터 저장 노드에 기존 블록체인 데이터를 재인코딩하여 저장하는 단계를 더 포함할 수 있다.
이때, 상기 재인코딩하여 저장하는 단계는 변경된 블록체인 데이터 저장 노드 수에 상응하도록 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수를 조절할 수 있다.
이때, 상기 재인코딩하여 저장하는 단계는 신규 블록체인 데이터 저장 노드가 추가되고, 상기 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수의 변경이 필요하지 않으면 상기 패리티 데이터 세트 및 서브 블록 데이터 세트의 재배치를 수행할 수 있다.
이때, 상기 방법은 상기 조절된 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수를 기설정된 데이터 구조로 저장하는 단계를 더 포함할 수 있다.
이때, 상기 저장 용량에 비례하도록 저장하는 단계는 상기 블록체인 데이터 저장 장치들의 저장 용량에 상응하도록 생성된 확률 분포 기반 랜덤 정수 발생 함수를 이용하여 수행될 수 있다.
이때, 서브 블록 데이터 세트 수 및 패리티 데이터 세트 수의 합은 R*(f+1)에 상응하고, R은 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율을 나타내고, f는 허용 가능한 비잔틴 노드의 수를 나타낼 수 있다.
이때, 상기 방법은 블록체인 데이터 저장 노드가 탈퇴하면, 상기 블록체인 데이터 저장 노드 탈퇴 후 코드 레이트와 상기 블록체인 데이터 저장 노드 탈퇴 전 코드 레이트를 비교하는 단계를 더 포함할 수 있다.
이때, 상기 코드 레이트를 비교하는 단계는 상기 탈퇴 후 코드 레이트가 상기 탈퇴 전 코드 레이트 이상이면 재인코딩을 수행하지 않을 수 있다.
이때, 상기 저장할 블록 데이터는 복수의 블록 그룹 데이터에 상응할 수 있다.
또한, 상기한 목적을 달성하기 위한 본 발명의 일 실시예에 따른 에러 정정 코드 기반 블록체인 데이터 저장 장치는 하나 이상의 프로세서 및 상기 하나 이상의 프로세서에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리를 포함하고, 상기 적어도 하나 이상의 프로그램은 저장할 블록 데이터를 복수의 서브 블록 데이터 세트로 분할하는 단계; 상기 블록 데이터에 상응하는 패리티 데이터 세트를 생성하는 단계; 및 상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 블록체인 데이터 저장 노드들의 저장 용량에 비례하도록 저장하는 단계의 수행을 위한 명령어들을 포함한다.
이때, 상기 저장 용량에 비례하도록 저장하는 단계는 상기 서브 블록 데이터 세트 또는 상기 패리티 데이터 세트를 저장하지 않은 다른 블록체인 데이터 저장 노드에 상기 서브 블록 데이터 세트 또는 상기 패리티 데이터 세트에 상응하는 해시값을 저장할 수 있다.
이때, 상기 블록체인 데이터 저장 노드들은 상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 저장할 수 있는 최대 데이터 세트 수를 가질 수 있다.
이때, 상기 최대 데이터 세트 수는 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율에 기반하여 결정될 수 있다.
이때, 상기 패리티 데이터 세트의 수는 허용할 수 있는 비잔틴 노드 수 및 상기 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율에 기반하여 결정될 수 있다.
이때, 상기 프로그램은 신규 블록체인 데이터 저장 노드가 추가되면, 상기 신규 블록체인 데이터 저장 노드에 기존 블록체인 데이터를 재인코딩하여 저장하는 단계의 수행을 위한 명령어를 더 포함할 수 있다.
이때, 상기 재인코딩하여 저장하는 단계는 변경된 블록체인 데이터 저장 노드 수에 상응하도록 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수를 조절할 수 있다.
이때, 상기 재인코딩하여 저장하는 단계는 신규 블록체인 데이터 저장 노드가 추가되고, 상기 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수의 변경이 필요하지 않으면 상기 패리티 데이터 세트 및 서브 블록 데이터 세트의 재배치를 수행할 수 있다.
이때, 상기 프로그램은 상기 조절된 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수를 기설정된 데이터 구조로 저장하는 단계의 수행을 위한 명령어를 더 포함할 수 있다.
이때, 상기 저장 용량에 비례하도록 저장하는 단계는 상기 블록체인 데이터 저장 장치들의 저장 용량에 상응하도록 생성된 확률 분포 기반 랜덤 정수 발생 함수를 이용하여 수행될 수 있다.
이때, 서브 블록 데이터 세트 수 및 패리티 데이터 세트 수의 합은 R*(f+1)에 상응하고, R은 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율을 나타내고, f는 허용 가능한 비잔틴 노드의 수를 나타낼 수 있다.
이때, 상기 프로그램은 블록체인 데이터 저장 노드가 탈퇴하면, 상기 블록체인 데이터 저장 노드 탈퇴 후 코드 레이트와 상기 블록체인 데이터 저장 노드 탈퇴 전 코드 레이트를 비교하는 단계의 수행을 위한 명령어를 더 포함할 수 있다.
이때, 상기 코드 레이트를 비교하는 단계는 상기 탈퇴 후 코드 레이트가 상기 탈퇴 전 코드 레이트 이상이면 재인코딩을 수행하지 않을 수 있다.
이때, 상기 저장할 블록 데이터는 복수의 블록 그룹 데이터에 상응할 수 있다.
본 발명에 따르면, 블록체인 참여 노드의 저장 공간을 고려한 분산 저장 방법을 제공할 수 있다.
또한, 본 발명은 에러 정정 코딩 기반 블록체인 데이터 저장을 통해 비잔틴 장애 내성을 보장하고 저장 공간을 줄일 수 있다.
도 1은 본 발명의 일 실시예에 따른 에러 정정 코드 기반 블록체인 데이터 저장 방법을 나타낸 흐름도이다.
도 2는 본 발명을 수행하기 위한 블록체인 시스템의 일 예이다.
도 3은 본 발명의 일실시예에 따른 블록 인코딩 및 해싱 프로세스를 개념적으로 나타낸다.
도 4는 블록체인 노드 별 저장 공간에 따른 데이터 세트 저장 확률 분포도의 일 예이다.
도 5는 본 발명의 일 실시예에 따라 인코딩된 데이터 세트 저장 방법의 일 예이다.
도 6은 본 발명의 일 실시예에 따라 인코딩된 데이터 세트 저장 방법의 다른 예이다.
도 7은 블록체인에 새로운 블록체인 노드의 추가 및 블록 생성 상황을 나타낸 일 예이다.
도 8은 본 발명의 일 실시예에 따른 인덱스 데이터 구조의 일 예이다.
도 9는 본 발명의 일 실시예에 따른 블록 접근 및 복구 과정을 나타낸다.
도 10은 본 발명의 일 실시예에 따른 블록 그룹 데이터 인코딩 및 해싱 프로세스를 나타낸다.
도 11은 ECC 인코딩된 데이터 세트들 이외에 추가적인 블록 데이터를 일부 블록체인 노드에 저장하는 예시이다.
도 12는 실시예에 따른 컴퓨터 시스템의 구성을 나타낸 도면이다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 것이며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
비록 "제1" 또는 "제2" 등이 다양한 구성요소를 서술하기 위해서 사용되나, 이러한 구성요소는 상기와 같은 용어에 의해 제한되지 않는다. 상기와 같은 용어는 단지 하나의 구성요소를 다른 구성요소와 구별하기 위하여 사용될 수 있다. 따라서, 이하에서 언급되는 제1 구성요소는 본 발명의 기술적 사상 내에서 제2 구성요소일 수도 있다.
본 명세서에서 사용된 용어는 실시예를 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다. 명세서에서 사용되는 "포함한다(comprises)" 또는 "포함하는(comprising)"은 언급된 구성요소 또는 단계가 하나 이상의 다른 구성요소 또는 단계의 존재 또는 추가를 배제하지 않는다는 의미를 내포한다.
본 명세서에서, "A 또는 B", "A 및 B 중 적어도 하나", "A 또는 B 중 적어도 하나", "A, B 또는 C", "A, B 및 C 중 적어도 하나", 및 "A, B, 또는 C 중 적어도 하나"와 같은 문구들 각각은 그 문구들 중 해당하는 문구에 함께 나열된 항목들 중 어느 하나, 또는 그들의 모든 가능한 조합을 포함할 수 있다.
다른 정의가 없다면, 본 명세서에서 사용되는 모든 용어는 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 공통적으로 이해될 수 있는 의미로 해석될 수 있다. 또한, 일반적으로 사용되는 사전에 정의되어 있는 용어들은 명백하게 특별히 정의되어 있지 않는 한 이상적으로 또는 과도하게 해석되지 않는다.
이하, 첨부된 도면을 참조하여 본 발명의 실시예들을 상세히 설명하기로 하며, 도면을 참조하여 설명할 때 동일하거나 대응하는 구성 요소는 동일한 도면 부호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다.
본 발명은 블록체인 네트워크에서 원장 데이터를 저장하는 방법 및 장치에 관한 것이다. 원장 데이터는 트랜잭션 데이터들의 집합인 블록 데이터, 상태 데이터 및 다른 유형의 데이터를 포함할 수 있다. 이하는 설명을 위한 일실시예로서 블록 데이터를 대상으로 설명한다. 본 발명은 블록 데이터에 제한되지 않고, 상태 데이터, 다른 유형의 원장 데이터에 대해 선택적으로 조합될 수 있다.
일반적으로 블록체인 네트워크는 공개 블록체인 네트워크, 비공개 블록체인 네트워크 및 컨소시엄 블록체인 네트워크들을 포함한다. 본 명세서의 실시예들은 컨소시엄 블록체인 네트워크를 참조하여 설명한다. 그러나, 본 명세서의 실시예들은 임의의 적절한 유형의 블록체인 네트워크에서 실현될 수 있다.
블록체인 네트워크는 컨센서스(예를 들어, 새로운 블록의 추가에 대한 합의)를 달성하기 위해, 컨센서스 프로토콜을 사용한다. 컨센서스 프로토콜은 다양한 유형이 있으며, 컨소시엄 블록체인 네트워크에서 주로 활용되는 컨센서스 프로토콜로는 PBFT(Practical Byzantine Fault Tolerance)가 있다. 비잔틴장애허용(Byzantine Fault Tolerance) 시스템은 비잔틴 노드(오류로 액세스가 불가능하거나, 악의적인 사용자에 의해 이상한 행동을 하는 노드)가 f개 이하일 때, 시스템의 정상 동작을 보장한다.
분산 환경에 참여하는 노드의 총 수가 n개일 때, PBFT 프로토콜에서 최대 허용가능한 비잔틴 노드의 수 f는 int((n-1)/3)이다. 즉 n >= 3f+1일 때 정상 동작을 보장한다. 다른 유형의 프로토콜로 Zilliqa는 f = int((n-1)/4)를, Ripple의 경우 f = int((n-1)/5)를 지원한다. 본 명세서의 실시예들은 PBFT를 참조하여 설명한다. 그러나, 본 명세서의 실시예들은 임의의 컨센서스 프로토콜에 적용될 수 있다.
본 발명은 에러 정정 코드(ECC)에 기반하여 블록체인 원장 데이터를 처리하고 저장하기 위한 기술들을 설명한다. ECC는 데이터에 특정 수학적 구조를 가진 중복 비트들을 추가함으로써 데이터 일부에 접근하지 못할 때에도 중복비트를 통해 원래 데이터를 복구할 수 있는 기술이다. ECC에 의해 인코딩된 출력은 원본 데이터를 그대로 나타나게 하거나 그렇지 않을 수 있다. 원본 데이터가 출력에 그대로 나타나는 ECC 코드들을 체계적(Systematic) 코드로 지칭되며, 그렇지 않은 경우 비체계적(Non-Systematic)코드로 지칭된다.
에러 정정 코드의 하나의 예시로는 소거 코딩(Erasure Coding)을 들 수 있다. 소거 코딩을 이용하여, k개 심볼의 메시지는 n개의 심볼을 갖는 코드 워드로 인코딩 될 수 있다. 이때 k와 n은 자연수이고 k < n이다. 메시지는 n개 심볼 코드워드 중 서브셋(최소 k개)으로부터 복구될 수 있다. 소거 코드의 코드레이트 r = k/n이다.
본 발명의 설명된 실시 예들은 하나 이상의 특징을 단독으로 또는 선택적으로 조합하여 포함할 수 있다.
도 1은 본 발명의 일 실시예에 따른 에러 정정 코드 기반 블록체인 데이터 저장 방법을 나타낸 흐름도이다.
본 발명의 일 실시예에 따른 에러 정정 코드 기반 블록체인 데이터 저장 방법은 에러 정정 코드 기반 블록체인 데이터 저장 장치 또는 복수의 저장 장치를 포함하는 시스템에서 수행될 수 있다.
도 1을 참조하면, 본 발명의 일 실시예에 따른 에러 정정 코드 기반 블록체인 데이터 저장 방법은 저장할 블록 데이터를 복수의 서브 블록 데이터 세트로 분할하는 단계(S110), 상기 블록 데이터에 상응하는 패리티 데이터 세트를 생성하는 단계(S120) 및 상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 블록체인 데이터 저장 노드들의 저장 용량에 비례하도록 저장하는 단계(S130)를 포함한다.
이때, 상기 저장 용량에 비례하도록 저장하는 단계(S130)는 상기 서브 블록 데이터 세트 또는 상기 패리티 데이터 세트를 저장하지 않은 다른 블록체인 데이터 저장 노드에 상기 서브 블록 데이터 세트 또는 상기 패리티 데이터 세트에 상응하는 해시값을 저장할 수 있다.
이때, 상기 블록체인 데이터 저장 노드는 상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 저장할 수 있는 최대 데이터 세트 수를 가질 수 있다.
이때, 상기 최대 데이터 세트 수는 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율에 기반하여 결정될 수 있다.
이때, 상기 패리티 데이터 세트의 수는 허용할 수 있는 비잔틴 노드 수 및 상기 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율에 기반하여 결정될 수 있다.
또한, 상기 패리티 데이터 세트의 수는 상기 최대 데이터 세트 수 및 허용할 수 있는 비잔틴 노드 수에 기반하여 결정될 수 있다.
이때, 도 1에는 도시되지 않았지만, 상기 방법은 신규 블록체인 데이터 저장 노드가 추가되면, 상기 신규 블록체인 데이터 저장 노드에 기존 블록체인 데이터를 재인코딩하여 저장하는 단계를 더 포함할 수 있다.
이때, 상기 재인코딩하여 저장하는 단계는 변경된 블록체인 데이터 저장 노드 수에 상응하도록 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수를 조절할 수 있다.
이때, 상기 재인코딩하여 저장하는 단계는 신규 블록체인 데이터 저장 노드가 추가되고, 상기 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수의 변경이 필요하지 않으면 상기 패리티 데이터 세트 및 서브 블록 데이터 세트의 재배치를 수행할 수 있다.
이때, 도 1에는 도시되지 않았지만, 상기 방법은 상기 조절된 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수를 기설정된 데이터 구조로 저장하는 단계를 더 포함할 수 있다.
이때, 상기 저장 용량에 비례하도록 저장하는 단계는 상기 블록체인 데이터 저장 장치들의 저장 용량에 상응하도록 생성된 확률 분포 기반 랜덤 정수 발생 함수를 이용하여 수행될 수 있다.
이때, 서브 블록 데이터 세트 수 및 패리티 데이터 세트 수의 합은 R*(f+1)에 상응하고, R은 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율을 나타내고, f는 허용 가능한 비잔틴 노드의 수를 나타낼 수 있다.
이때, 상기 방법은 블록체인 데이터 저장 노드가 탈퇴하면, 상기 블록체인 데이터 저장 노드 탈퇴 후 코드 레이트와 상기 블록체인 데이터 저장 노드 탈퇴 전 코드 레이트를 비교하는 단계를 더 포함할 수 있다.
이때, 상기 코드 레이트를 비교하는 단계는 상기 탈퇴 후 코드 레이트가 상기 탈퇴 전 코드 레이트 이상이면 재인코딩을 수행하지 않을 수 있다.
이때, 상기 저장할 블록 데이터는 복수의 블록 그룹 데이터에 상응할 수 있다.
도 2는 본 발명을 수행하기 위한 블록체인 시스템의 일 예이다.
도 2를 참조하면, 다양한 종류의 컴퓨팅 장치들이 노드로서 블록체인 네트워크에 참여할 수 있다. 블록체인 네트워크에 참여한 각 노드들은 다양한 유형의 네트워크로 연결될 수 있다. 이러한 네트워크 유형으로는 직접 연결, LAN, WAN 및 무선 유형들을 포함할 수 있다. 블록체인 네트워크에 참여하는 각 노드는 스토리지 공간을 구비하고 분산 원장(블록데이터, 상태 데이터 및 다른 유형의 데이터를 포함)을 저장할 수 있다.
블록체인 네트워크에 참여하는 노드들은 블록체인 네트워크 내에서 다양한 참가도를 가질 수 있다. 원장을 저장하는 관점에서 보면 블록체인 네트워크에는 원장을 저장하지 않는 노드들, 일부 사본들만 저장하는 노드들 및 완전한 사본들을 저장하는 노드들로 구성될 수 있다. 완전한 노드(Full Node)로 지칭되는 노드들은 일반적으로 완전한 사본들을 저장하는 노드들이다. 이하, 본 발명의 상세한 설명에서는 본 발명의 일실시예로서 완전한 노드들을 기준으로 설명한다. 그러나, 본 발명의 범위가 이에 제한되는 것은 아니다.
도 3은 본 발명의 일실시예에 따른 블록 인코딩 및 해싱 프로세스를 개념적으로 나타낸다.
이하, 도 3과 같이 블록체인 노드들(202, 204, 206, 208)은 총 4개로 블록체인 네트워크에 참여한 상황을 가정하여 본 발명의 실시예를 설명한다. 각 노드들은 서로 상이한 크기의 저장공간을 구비할 수 있다. 본 발명의 일 실시예에서 블록 100이 블록체인 네트워크에서 컨센서스를 거쳐 새로운 블록으로 결정될 수 있다. 블록 100이 새로운 블록으로 결정되면, 블록체인 네트워크의 각 노드는 해당 블록을 자신의 원장에 저장(312)할 수 있다. 이하, 인코딩 및 해싱 프로세스를 설명하기 위해 블록체인 노드 1(302)을 기준으로 상세한 프로세스를 설명한다.
일부 실시예에서, 블록체인 노드 1(302)은 하나 이상의 접근빈도가 낮은 블록들을 식별할 수 있다. 한 예로, 오래 전 발생한 블록의 경우 블록체인 네트워크의 서비스를 위해 액세스되는 빈도가 낮을 가능성이 높다. 접근 빈도가 낮은 블록의 식별 방법은 다양할 수 있다. 접근 빈도가 낮은 블록(들)을 식별하면 해당 블록(들)에 대해 ECC(314)를 수행할 수 있다. ECC에 의해 복구될 수 있는 에러 또는 누락비트들의 최대 비율은 ECC 코드의 설계에 의해 결정될 수 있다. 따라서, 상이한 조건에 따라 적합한 ECC 코드들이 선택적으로 사용될 수 있다. ECC의 일 예로는 소거 코딩을 들 수 있다. 이하, 소거 코딩의 한 알고리즘인 RS-Code(Reed-Solomon Code)를 예시로 설명한다.
ECC를 사용하여 블록체인 노드들 각각은 인코딩된 블록 데이터의 일부를 저장하고, 해당 블록이 필요할 때 다른 블록체인 노드들로부터 인코딩된 블록 데이터의 나머지를 제공받을 수 있다. 이러한 ECC 실행은 일부 실시예에서 블록체인 노드 1(302)의 계산 자원 사용률이 일정 비율 이하일때만 수행될 수 있다. 또한, ECC 실행은 블록체인 노드 1(302)의 저장 공간 사용 비율이 일정 비율 이상일 때 수행되어, ECC 실행 후 일부 데이터를 삭제함으로써 저장공간 사용을 줄일 수 있다.
도 3에서 블록체인 노드 1(302)은 블록 99를 접근 빈도가 낮은 블록으로 식별하고 ECC를 수행(314)할 수 있다. 일 실시예로 소거 코딩에 따라 블록 99는 2개의 데이터 세트(Data1, Data2)로 분할되고(k = 2), 여기에 2개의 패리티 데이터 세트(parity1, parity2)를 추가(m = 2)하여 총 4개의 데이터 세트로 인코딩 될 수 있다. 인코딩된 4개의 데이터 세트 각각은 도 4 및 도 5를 참조하여 후술할 바와 같이, 저장 방법에 따라 블록체인 노드들 중 어느 하나에 저장될 수 있다.
또한, 인코딩된 4개의 데이터 세트 각각에 대해 해싱을 수행(316)하여 해시값들(H-data1, H-data2, H-parity1, H-parity2)을 계산할 수 있다. 각 노드는 자신이 저장하는 인코딩된 데이터 세트를 제외한 나머지 데이터 세트들에 대한 해시값들을 저장한다. 저장된 해시값들은 해당 블록을 복원 시, 다른 노드로부터 제공받은 인코딩된 데이터 세트의 진위 여부를 확인하기 위해 사용될 수 있다.
일 실시예로 블록체인 노드 1(302)이 저장 방법에 따라 Data1을 저장하도록 지정되면, 블록체인 노드 1(302)은 Data1과 나머지 데이터 세트들에 대한 해시값들인 H-data2, H-parity1, H-parity2를 함께 저장한다. 선택된 데이터 세트(들) 이외의 데이터 세트(들)(Data2, parity1, parity2) 및 블록 99는 저장공간 절약을 위해 삭제할 수 있다.
일 실시예에서 블록 99는 2개의 데이터 세트로 분할되고, 2개의 중복 비트로서 2개의 패리티 데이터 세트를 추가한다. 데이터 세트 분할 수와 추가되는 중복 비트(패리티) 데이터 세트 수를 결정하는 방법은 수학식 1, 2, 3 및 4를 참조하여 상세히 설명한다.
도 4는 도 3의 예시에 따른 블록체인 노드 별 저장 공간에 따른 데이터 세트 저장 확률 분포도의 일 예이다.
도 4를 참조하면, x축의 1은 20GB의 저장공간을 갖는 블록체인 노드 1(302), 2는 70GB의 저장공간을 갖는 블록체인 노드 2(304), 3은 50GB의 저장공간을 갖는 블록체인 노드 3(306), 4는 10GB의 저장공간을 갖는 블록체인 노드 4(308)에 대응된다.
본 발명의 일실시예로, 블록체인 노드 1(302)은 도 4의 확률분포에 따라 랜덤하게 [1,4(블록체인 전체 노드 수)] 범위의 정수를 발생시키는 확률분포 기반 랜덤 정수 발생함수(제1 함수)를 실행시킬 수 있다. 제1 함수를 통해 랜덤 정수 발생 시, 모든 노드에서 동일한 시퀀스의 수를 얻도록 하기 위해, 시드 값으로 블록 넘버 또는 해당 블록의 해시값을 사용할 수 있다. 시퀀스 내의 수는 인코딩된 모든 데이터 세트들을 블록체인 노드에 할당할 수 있을 때까지 발생시킨다. 일 실시예로 해당 정수 시퀀스를 (3,2,1,2,3,2,4, …)로 가정한다.
도 5는 본 발명의 일 실시예에 따라 인코딩된 데이터 세트 저장 방법의 일 예이다.
도 5를 참조하면, 인코딩된 데이터 세트 Data1은 시퀀스의 첫번째 수가 3이므로 노드 3에 대응하는 블록체인 노드 3(506)에 저장된다. Data2는 시퀀스의 두번째 수 2를 참고하여 노드 2(504)에, Parity1은 노드 1(502)에, Parity 2는 노드 2(504)에 저장된다. 이런 방식으로 인코딩된 데이터 세트들을 저장하면, 결국 각 노드의 저장공간 비율에 대응하는 양의 비율로 블록체인 노드에 인코딩된 데이터들을 저장할 수 있다. 데이터 저장 방법에 따라, 블록체인 노드 1(502)은 parity1을 저장하고 나머지 데이터 세트에 대응하는 해시값 H-Data1, H-Data2, H-parity2를 생성하고 함께 저장한다. 블록체인 노드 2(504)는 Data2와 Parity2를 저장하고, 해시값 H-Data1, H-parity1을 생성하고 저장한다.
일 실시예에서 블록체인 노드 2(504)는 인코딩된 데이터 세트들 중 2개를 저장한다. 한편, 블록체인 네트워크는 비잔틴 노드(오류 또는 악의적인 노드)로 인해 발생 가능한 문제 상황을 해결 가능해야 한다. 만일 블록체인 노드 2(504)가 비잔틴 노드이고, 3개의 데이터 세트를 저장한다면, 다른 블록체인 노드들이 블록 99를 접근할 때, 복구가 불가능한 상황이 발생될 수 있다. 따라서 비잔틴 장애 상황을 극복하기 위해서 각 블록체인 노드가 최대로 저장 가능한 데이터 세트의 수는 일정 수 이하로 통제되어야 한다. 각 블록체인 노드에 의해 저장 가능한 최대 데이터 세트 수의 결정 방법을 수학식 1 및 2를 참조하여 상세히 설명한다.
ECC 인코딩된 블록들을 블록체인 노드들이 공유함으로써, 변조된 데이터가 존재하거나 오류 등에 의해 데이터 손실이 발생한 경우, 정직한 블록체인 노드들 또는 정상적인 데이터 세트의 백분율이 ECC의 코드 레이트 이상인 한 원래의 블록 데이터는 복구될 수 있다. ECC의 한 실시예로 소거 코드는 원본 데이터를 k개로 분할하고, m개의 패리티 비트를 추가하여 n(=k+m)개의 데이터 세트를 생성(인코딩)한다. n개의 데이터 세트 중 임의의 k개 데이터 세트가 주어지면 원본 데이터를 복구할 수 있다. 즉, n개의 데이터 세트 중 임의의 m개 데이터 세트가 소실되더라도 원본 데이터의 복구가 가능하다.
블록체인 네트워크에서 활용하는 컨센서스 방식은 다양한 유형이 있다. 이러한 컨센서스 방식별로 허용할 수 있는 비잔틴 노드의 수 역시 다르다.
수학식 1은 컨센서스 방식 별 전체 블록체인 노드 수(n)와 허용 가능한 최대 비잔틴 노드 수(f)의 관계를 도시한다. 블록체인 네트워크에서 f+1개의 올바른 정보가 있다면 비잔틴 노드가 존재하더라도 정상적으로 동작이 가능하다. 일부 실시예로 PBFT를 활용하는 블록체인 네트워크에서 비잔틴 노드 비율 R = 3이고 전체 블록체인 노드 수가 4인 경우 최대 허용가능한 비잔틴 노드의 수 f = 1이다. 이 경우, ECC 인코딩된 데이터 세트의 총 수는 블록체인 노드 수인 4와 동일하다. 인코딩된 데이터 세트 중 f+1 = 2개의 데이터 세트가 올바른 정보라면 원래 블록 데이터는 복구 가능하다. 비잔틴 노드 비율 R은 컨센서스 방식에 따라 달라질 수 있으며, PBFT의 경우 3, Zilliqa의 경우 4, Ripple의 경우 5에 상응할 수 있다.
[수학식 1]
상기 수학식 1에서, R은 비잔틴 노드 비율, n은 블록 체인 전체 노드 수, f는 허용가능한 최대 비잔틴 노드 수를 나타낼 수 있다.
수학식 2, 3 및 4는 각각 본 발명의 일 실시예에 따른 ECC 인코딩 시 코드 레이트를 결정하는 패리티 데이터 세트 수, 서브 블록 데이터 세트 수 및 노드 당 저장 가능 데이터 세트 수를 나타낸다.
[수학식 2]
패리티 데이터 세트 수(m) = (R-1)*f
[수학식 3]
서브 블록 데이터 세트 수(k) = n - m
[수학식 4]
블록체인 노드 당 저장 가능 데이터 세트 수 = R - 1 = m/f
수학식 1을 참조하면, 전체 블록체인 노드 수(n)는 R*f + 1에 대응되고, f+1개의 올바른 정보가 주어지면 원래 데이터의 복구가 가능하므로 패리티 데이터 세트 수(m)는 (R-1)*f가 된다. 이에 따라 서브 블록 데이터 세트 수(k)는 전체 데이터 세트 수(전체 블록체인 노드 수(n))에서 패리티 데이터 세트 수(m)를 뺀 값이 된다.
한편, 블록체인 네트워크에는 최대 f개의 비잔틴 노드가 존재할 수 있고, m(=(R-1)*f)개의 데이터 세트 오류를 허용할 수 있으므로 비잔틴 노드가 가질 수 있는 최대 데이터 수는 R-1개가 된다.
이에 기초하여 도 4 및 도 5에서 설명한 PBFT 환경을 고려하면 n=4, R=3, f=1이다. 따라서, 패리티 데이터 세트 수(m)은 2가 되어, 패리티 데이터 세트(parity1, parity2)는 2개가 된다. 또한 서브 블록 데이터 세트 수(k)는 2가 되어 Data1, Data2로 분할된다. 또한, 각 노드에 저장 가능한 최대 데이터 세트 수는 2가 된다.
또 다른 실시예로서, 도 4의 설명에 따른 확률 분포 기반 랜덤 정수 시퀀스가 (2,3,2,2,1,2,4, …)라고 가정하면, 데이터 세트의 저장 노드 할당은 (Data1, 노드 2(504)), (Data2, 노드 3(506)), (Parity1, 노드 2(504)), (Parity2, 노드 1(502))이 된다. 데이터 세트 Parity2는 시퀀스에 따르면 노드 2(504)에 할당되어야 하지만, 이미 노드 2(504)가 저장 가능 최대 수 2를 만족하고 있으므로 다음 시퀀스 정수로 할당이 변경된다. 블록체인 네트워크에 참여하는 모든 노드들은 인코딩 대상 블록에 대하여 동일한 랜덤 정수 시퀀스를 얻을 수 있고, 최대 저장가능 데이터 세트의 수를 알 수 있으므로 각 데이터 세트의 저장 노드들 식별할 수 있다.
또 다른 실시예로서, ECC 인코딩의 코드 레이트(k/n)를 정함에 있어, 패리티 데이터 세트 수(m)가 높을수록(이에 따라, 블록체인 노드 당 최대 저장 가능 데이터 세트 수도 높아짐) 코드 레이트가 낮아져 저장공간 효율이 감소할 수 있다. 따라서 실시예에 따른 블록체인 네트워크 상황에 맞춰 패리티 데이터 세트 수 (및 블록체인 노드 당 최대 저장 가능 데이터 세트 수)를 결정할 수 있다. 패리티 데이터 세트 수(m)은 2*f <= m <= (R-1)*f 사이에서 정할 수 있다(단, m은 f의 정수 배이다). 따라서, 블록체인 노드 당 최대 저장 가능 데이터 세트 수는 2이상, (R-1) 이하이다. 블록체인 노드 당 저장 가능 데이터 수로 1도 가능하나, 1일 경우, 블록체인 노드 별 저장공간을 고려하지 않는 것과 동일한 상황이 되므로 제외한다.
일 예로, 비잔틴 노드 비율(R)이 5이고 블록체인 노드들의 수 n = 10 이라면, f=1이 된다. 따라서 m 및 블록체인 노드 당 최대 저장 가능 데이터 세트 수의 범위는 [2, 3, 4]이다. 실시 예에 따라 적합하게 [2, 4]범위의 수 중 하나를 선택할 수 있다.
도 6은 본 발명의 일 실시예에 따라 인코딩된 데이터 세트 저장 방법의 다른 예이다.
도 6을 참조하면, 4개의 블록체인 노드들(602, 604, 606, 608)이 블록체인 네트워크에 참여하고 있음을 알 수 있다. 이하, 다른 실시예에 따른 인코딩 및 해싱 프로세스를 설명하기 위해 블록체인 노드(602)를 기준으로 설명한다. 새로운 블록 데이터가 블록체인 네트워크에서 컨센서스 과정을 통해 결정되어 블록체인에 추가될 때(612), 블록체인 노드(602)는 ECC(614)를 수행하여 블록 데이터를 인코딩할 수 있다. 도 3과 달리, 블록체인 노드(602)는 블록 데이터가 블록체인에 추가될 때 블록 데이터에 대해 ECC를 수행한다. 이를 통해 블록체인 노드들은 전체 블록을 저장할 필요없이 데이터 저장 방법에 따라 인코딩된 데이터 세트의 선택된 부분과 나머지 데이터 세트에 대한 해시값들만 저장할 수 있고, 더욱 저장 공간을 절약할 수 있다.
도 3의 예시와 유사하게 블록체인 노드(602)는 ECC를 수행한 후, 데이터 저장 방법에 따라 블록체인 노드(602)에서 저장할 데이터 세트(들)을 선택한다. 저장할 데이터 세트 이외의 데이터 세트(들)에 대해서는 해시값을 계산할 수 있다. 그리고 선택된 데이터 세트(들)와 계산한 해시값들을 저장할 수 있다. 선택된 데이터 세트(들) 이외의 데이터 세트(들)과 블록 데이터는 삭제될 수 있다.
블록체인 노드들은 블록 200의 데이터가 필요할 경우, 데이터 저장 방법에 따라 블록체인 노드들(602, 604, 606, 608)로부터 저장한 데이터 세트들을 제공받을 수 있다. 제공받은 데이터 세트(들) 각각에 대해 해싱을 수행하고 그 결과를 자신이 저장하고 있는 해시값(들)과 동일한 지 비교하여 동일하면 정확한 데이터로 인지한다. 정확한 데이터로 인지된 데이터 세트 들이 k개 이상일 경우, 데이터 세트들로부터 원본 블록데이터를 디코딩할 수 있다.
도 7은 블록체인에 새로운 블록체인 노드의 추가 및 블록 생성 상황을 나타낸 일 예이다.
도 7을 참조하면, 블록 1에서 블록 100이 생성될 때, 블록체인 네트워크에는 4개의 블록체인 노드 1, 2, 3, 4가 존재한다. PBFT 컨센서스를 가정하면, 최대 허용 비잔틴 노드의 수 f는 1이다. 수학식 1, 2, 3 및 4를 참조하면, 블록체인 노드가 4개인 경우 ECC 인코딩을 위한 패리티 데이터 세트 수 m = 2, 서브 블록 데이터 세트 수 k = 2이다. 인코딩된 블록들은 각각 4개의 블록체인 노드들에 도 4및 도 5를 참조하여 설명한 저장 방법에 따라 분산 저장된다.
도 7을 참조하면, 블록 101의 생성 동안 블록체인 노드 5가 블록체인 네트워크에 추가된다. 이때, 블록체인 노드 5는 블록 1에서 블록 100까지의 블록들의 사본을 저장할 수 있다. 만일 노드 5의 저장 공간이 부족하여 블록 1에서 블록 100까지의 사본을 저장할 수 없을 경우, 후술할 재인코딩 과정에 따라 노드 5는 재인코딩 과정을 시작할 수 있다. 만일 재인코딩에 대한 합의에 실패할 경우, 노드 5의 추가는 거절될 수 있다. 블록 101부터 블록 200까지는 블록체인 네트워크에 노드가 총 5개로 최대 허용 비잔틴 노드 수 f = 1, 패리티 데이터 세트 수 m = 2, 서브 블록 데이터 세트 수 k = 3이 된다. 따라서 블록 각각은 3개의 데이터 세트로 분할되고 인코딩을 통해 전체 5개의 데이터 세트로 분할되어, 저장 방법에 따라 블록체인 노드 5개에 분산 저장될 수 있다.
블록 201의 생성 동안 블록체인 노드 6이 블록체인 네트워크에 추가되는 경우, 블록체인 노드 6은 블록 1에서 블록 200까지의 블록들의 사본을 저장할 수 있다. 노드 6의 저장공간이 부족한 경우 노드 5가 추가될 때와 유사하게 재인코딩을 요청할 수 있다. 블록 201부터 블록 300까지는 블록체인 네트워크에 노드가 총 6개로 최대 허용 비잔틴 노드 수 f = 1, 패리티 데이터 세트 수 m = 2, 서브 블록 데이터 세트 수 k = 4가 된다. 따라서 블록 각각은 4개의 데이터 세트로 분할되고 인코딩을 통해 전체 6개의 데이터 세트로 분할되어, 저장 방법에 따라 블록체인 노드 6개에 분산 저장될 수 있다.
블록 301의 생성 동안 블록체인 노드 7이 블록체인 네트워크에 추가되는 경우, 블록체인 노드 6은 블록 1에서 블록 300까지의 블록들의 사본을 저장할 수 있다. 노드 7의 저장공간이 부족한 경우 노드 5및 노드 6이 추가될 때와 유사하게 재인코딩을 요청할 수 있다. 블록 301부터 블록 400까지는 블록체인 네트워크에 노드가 총 7개로 최대 허용 비잔틴 노드 수 f = 2, 패리티 데이터 세트 수 m = 4, 서브 블록 데이터 세트 수 k = 3이 된다. 따라서 블록 각각은 3개의 데이터 세트로 분할되고 인코딩을 통해 전체 7개의 데이터 세트로 분할되어, 저장 방법에 따라 블록체인 노드 7개에 분산 저장될 수 있다.
블록 401의 생성 동안 블록체인 노드 8가 블록체인 네트워크에 추가되는 경우, 블록체인 노드 8은 블록 1에서 블록 400까지의 블록들의 사본을 저장할 수 있다. 노드 8의 저장공간이 부족한 경우 노드 5, 6 및 노드 7이 추가될 때와 유사하게 재인코딩을 요청할 수 있다. 블록 401부터 블록 500까지는 블록체인 네트워크에 노드가 총 8개로 최대 허용 비잔틴 노드 수 f = 2, 패리티 데이터 세트 수 m = 4, 서브 블록 데이터 세트 수 k = 4가 된다. 따라서 블록 각각은 4개의 데이터 세트로 분할되고 인코딩을 통해 전체 8개의 데이터 세트로 분할되어, 저장 방법에 따라 블록체인 노드 8개에 분산 저장될 수 있다.
블록 501의 생성 동안 블록체인 노드 9가 블록체인 네트워크에 추가되는 경우, 블록체인 노드 9는 블록 1에서 블록 500까지의 블록들의 사본을 저장할 수 있다. 노드 9의 저장공간이 부족한 경우 노드 5, 6, 7 및 노드 8이 추가될 때와 유사하게 재인코딩을 요청할 수 있다. 블록 501부터는 블록체인 네트워크에 노드가 총 9개로 최대 허용 비잔틴 노드 수 f = 2, 패리티 데이터 세트 수 m = 4, 서브 블록 데이터 세트 수 k = 5가 된다. 따라서 블록 각각은 5개의 데이터 세트로 분할되고 인코딩을 통해 전체 9개의 데이터 세트로 분할되어, 저장 방법에 따라 블록체인 노드 9개에 분산 저장될 수 있다.
한편, 상기 도 7에 대한 설명을 참조하면, 블록체인 네트워크에 새로운 노드가 추가되는 경우, 블록의 인코딩 방식이 변경되게 된다. 일 예로, 블록 100의 경우 패리티 데이터 세트 수 m = 2, 서브 블록 데이터 세트 수 k = 2인 반면, 블록 101의 경우 패리티 데이터 세트 수 m = 2, 서브 블록 데이터 세트 수 k = 3이 될 수 있다. 이러한 인코딩 방식의 변경 사항은 향후 특정 블록 데이터를 접근할 경우, 블록체인 네트워크에서 식별할 수 있어야 디코딩이 가능하게 된다.
도 8은 본 발명의 일 실시예에 따른 인덱스 데이터 구조의 일 예이다.
도 8을 참조하면, 블록 101에서 블록 200까지의 범위에 해당하는 블록들은 전체 노드 수가 5개이며 순서는 (Node1, Node2, Node3, Node4, Node5)로 구성된다. 또한, ECC 인코딩을 위해 블록 데이터를 분할할 수인 k 값은 3으로 각 블록 데이터는 3개의 데이터 세트로 분할된다. 인코딩을 통해 생성할 패리티 데이터 세트 수 m은 2로서 2개의 패리티 데이터 세트를 생성한다. 인코딩이 완료된 5개의 데이터 세트 각각은 도 4 및 도 5를 참조하여 설명한 저장 방법에 따라 5개의 노드들에 분산 저장될 수 있다.
도 8의 인덱스 데이터 구조는 블록 데이터와는 다른 유형의 정보로서 블록체인 원장에 저장할 수 있고 블록체인 네트워크에서 공유될 수 있다.
이하, 본 발명의 일 실시예에 따른 재인코딩 과정을 상세히 설명한다.
블록체인 네트워크 내의 블록체인 노드들이 블록 1에서 블록 500까지의 블록에 대해 저장공간 효율성을 위해 ECC 인코딩을 재수행하는 것에 합의하는 경우, 9개의 블록체인 노드 모두를 고려한 ECC 인코딩을 재수행할 수 있다. ECC 인코딩 재수행은 블록체인 네트워크에 참여하고 있는 블록체인 노드들 중 임의의 노드가 자신의 저장공간 활용률이 일정비율을 초과하는 경우 다른 블록체인 노드들에 재인코딩에 대한 합의를 요청함으로써 시작될 수 있다. 또는 블록체인 네트워크 내에 완전한 노드로서 참여하는 블록체인 노드 이외의 신뢰 노드가 존재할 경우, 신뢰 노드가 블록체인 네트워크의 중복 비율이 특정 임계치를 초과하는 경우 시작될 수 있다.
일 실시예에서 이러한 재인코딩은 도 3에서 설명한 것처럼 특정 블록을 선택적으로 인코딩 하는 경우, 블록 별 중복비율에 기초하여 시작될 수 있다.
다른 실시예에서 이러한 재인코딩은 도 6에서 설명한 것처럼, 지속적인 블록 인코딩이 발생하는 경우, 여러 블록을 동시에 포함하는 블록 구간에서 수행될 수 있다.
재인코딩 과정은 재인코딩 대상 블록들 각각에 대하여, 블록 데이터의 복구과정을 먼저 수행한 후 블록체인 네트워크의 총 블록체인 노드 수를 통해 수학식 1, 2, 3 및 4 에 설명한 방법에 따라 패리티 데이터 세트 수와 서브 블록 데이터 세트 수를 참조하여 수행된다. 인코딩이 완료된 후 데이터 세트들은 도 4 및 도 5를 참조하여 설명한 저장 방법을 통해 저장된다. 이때 인덱스 데이터 구조 역시 수정될 수 있다.
도 9는 본 발명의 일 실시예에 따른 블록 접근 및 복구 과정을 나타낸다.
도 9를 참조하면, 클라이언트 장치(910)가 스마트 계약 등을 위해 블록 99가 필요한 경우, 블록체인으로부터 블록 데이터를 가져오기 위해 블록체인 노드(일 예로 노드 1(920a)에 블록 99번에 대한 요청을 보낼 수 있다. 해당 요청을 받은 노드 1은 해당 블록 데이터를 위해 인덱스 데이터 구조(930)을 판독할 수 있다. 인덱스 판독을 통해 해당 블록 99의 ECC 인코딩 방식을 인식하고, 도 4 및 도 5를 참조하여 설명한 방식으로 확률 분포 기반 랜덤 정수 발생 함수(제1함수)를 실행하여 노드 번호 시퀀스를 얻는다. 이를 통해 총 4개(n = k + m)의 데이터 세트 저장 노드 위치를 파악한다.
도 5를 참조하여 설명한 상황을 참조하면, Data1은 노드 3을 통해, Data2와 parity2는 노드 2를 통해 획득하고, parity1은 노드 1 자신에서 획득한다. 이후 다른 노드들(노드 2, 노드 3)로부터 획득한 데이터 세트의 해시값을 생성하고, 이들을 자신이 저장하고 있는 해시값과 비교하여 올바른 데이터 세트인지 확인한다. 확인 시 해시값이 일치하지 않으면 해당 데이터 세트를 제공한 노드를 결함 노드로 판단할 수 있다. 획득한 데이터 세트들(Data1, Data2, parity2)들 중 정확하다고 확인된 데이터 세트들과 자신이 저장하고 있는 데이터 세트(Parity1)를 함께 디코딩하여 블록 99를 복구할 수 있다. 복구된 블록 99는 클라이언트에 제공될 수 있다.
이하, 본 발명의 일 실시예로서 재인코딩 가능성을 줄여 시스템 부하를 감소시키기 위한 ECC 인코딩 방식을 설명하기 위해, 허용가능한 비잔틴 노드 수에 따른 전체 노드 수와의 관계를 도시한다. 즉 동일한 최대허용 비잔틴 노드 수 f에 대하여 블록체인 노드 수의 범위 n은 아래와 같을 수 있다.
따라서, 동일한 비잔틴 노드 수 f에 대한 블록체인 노드 수 n의 최대 값 N은 하기 수학식 5와 같을 수 있다.
[수학식 5]
블록체인 네트워크에 참여하는 블록체인 노드들의 수(n)에 따라, 최대 허용 가능한 비잔틴 노드의 수(f)가 결정될 수 있다. 역으로 동일한 최대 허용 가능 비잔틴 노드의 수(f)에 따라 블록체인 노드들의 총수는 특정한 범위의 값을 가질 수 있다.
이와 같이 비잔틴 노드 수 f가 결정되면, 동일 f값에 대해 총 블록체인 노드 수의 범위는 컨센서스 방식에 따른 비잔틴 노드 비율(R)에 f를 곱하고 1을 더한 값보다 크거나 같고, 비잔틴 노드 비율(R)과 f+1을 곱한 값 이하이다. 따라서, ECC 인코딩을 위해 블록 데이터를 분할하는 수(k)를 n - m 대신, n이 가질 수 있는 값의 범위 중 최대값인 N=R*(f+1)을 활용하여 N - m으로 설정하는 경우, 향후 노드가 추가되더라도 재인코딩이 불필요할 수 있게 된다.
따라서 ECC 인코딩 시, f값을 결정한 후, n의 범위 중 최대값인 N값을 이용하여 ECC 인코딩을 수행한다면 재인코딩을 줄일 수 있다. 도 5의 예시를 참고하면, 현재 총 블록체인 노드 수(n)는 4이고, 허용가능 최대 비잔틴 노드 수(f)는 1이다. 따라서 n의 범위는 4 이상, 6이하이다. 따라서 ECC 인코딩은 (k=2, m=2) 대신 (k=4, m=2)로 수행된다. 이 상황에서 노드 5가 추가되어도 ECC 인코딩은 변경없이 허용가능한 코드 레이트가 달성된다. 노드 6이 추가되어도 역시 ECC 인코딩 변경없이 허용가능한 코드 레이트가 달성된다.
이처럼 ECC 인코딩 방식 변경없이, 노드 수가 추가되는 경우, 추가되는 노드가 포함되어 확률 분포 기반 랜덤 정수 발생함수(제1 함수)의 시퀀스 결과가 달라지므로 이를 반영하기 위해 블록체인 노드 간 데이터 세트들의 재배치가 수행된다. 재배치 비용은 재인코딩 비용(복구와 인코딩 비용의 합)에 비해 상대적으로 매우 작을 수 있다.
도 10은 본 발명의 일 실시예에 따른 블록 그룹 데이터 인코딩 및 해싱 프로세스를 나타낸다.
도 10을 참조하면, 총 4개의 블록체인 노드들(1002, 1004, 1006, 1008)이 블록체인 네트워크에 참여한다.
도 10를 참조하면 블록체인 노드(1002)는 도 3에서 설명한 것처럼 단일 블록별로 ECC 인코딩, 분할 및 해싱을 수행하는 대신 여러 블록 데이터로 구성된 블록 그룹을 대상으로 ECC 인코딩, 분할 및 해싱을 수행할 수 있다. 수학식 1, 2, 3 및 4에 따르면 블록체인 노드 수가 4인 경우, 패리티 데이터 세트 수(m)는 2, 블록 데이터 분할 데이터 세트 수(k)는 2로 결정된다.
결정된 k값에 따라 본 예에서 설명하는 블록그룹의 블록 개수가 k로 결정된다. 즉, 수학식 1, 2, 3 및 4를 참조하면 k는 2이므로 블록 2개가 블록 그룹이 된다. 도 10에서는 블록 99와 블록 100을 대상으로 ECC 인코딩 과정(1014)을 설명한다. 블록 데이터 원본으로 블록 99와 블록 100이 사용되고, 이들은 2개의 데이터 세트로 분할된다. 블록체인 네트워크에서 각각의 블록 데이터는 그 크기가 상이할 수 있다. 반면에 ECC 인코딩을 위해서는 분할된 데이터 세트의 크기가 동일해야 하므로 블록 그룹내에서 가장 큰 사이즈를 갖는 블록크기로 각 블록의 사이즈를 맞춘다. 이를 위해 블록데이터 뒤에 원하는 사이즈가 되도록 0값을 채운다. 소거 코드와 같은 체계적인(systematic) 코드인 경우 분할된 데이터 세트 각각은 원본 데이터와 동일한 블록 99, 블록 100이 된다.
이후 ECC 인코딩을 통해 패리티 블록 2개가 생성된다. 생성된 4개의 데이터 세트는 도 4 및 도 5에서 설명한 저장방법을 통해 블록체인 노드들에 분산 저장된다. 또한 인코딩된 4개의 데이터 세트 각각에 대해 해시를 수행(1016)하여 해시값들(H-블록99, H-블록100, H-parity1, H-parity2)을 계산할 수 있다. 각 노드는 자신이 저장하는 인코딩된 데이터 세트를 제외한 나머지 데이터 세트들에 대한 해시값들을 저장한다. 해시값들은 향후 해당 블록을 복원할 때, 다른 노드로부터 제공받은 인코딩된 데이터 세트의 진위여부를 확인하기 위해 사용된다.
일 실시예로 블록체인 노드(1002)가 저장 방법에 따라 블록99를 저장하도록 지정되면, 블록체인 노드(1002)는 블록99와 나머지 데이터 세트들에 대한 해시값들인 H-블록100, H-parity1, H-parity2를 함께 저장한다. 선택된 데이터 세트(들) 이외의 데이터 세트(들)은 저장공간 절약을 위해 삭제할 수 있다.
도 10에서 설명한 대로 각 블록 대신 블록 그룹을 대상으로 ECC 인코딩을 적용하는 경우, 인코딩된 데이터 세트 중 원본 블록들(블록 99, 블록 100)이 데이터 세트로서 제공되어 디코딩 과정 없이 해당 블록을 복구할 수 있는 장점이 있다. 블록체인 네트워크의 운영자는 블록체인 네트워크 운영 상황에 적합하도록 블록 별 인코딩과 블록 그룹 대상 인코딩 방식을 선택적으로 활용할 수 있다.
도 11은 ECC 인코딩된 데이터 세트들 이외에 추가적인 블록 데이터를 일부 블록체인 노드에 저장하는 예시이다.
일부 실시예들에서 디코딩 과정 없이 블록 데이터 접근 가능성을 높이기 위해, 인코딩된 데이터 세트의 분산 저장 외에 부가적으로 원본 블록 데이터를 선택적으로 블록체인 네트워크 노드들에 저장할 수 있다. 도 5 또는 도 10을 참조하면, 인코딩된 데이터 세트 중 첫번째(Data1 또는 블록 99)는 노드 3(506, 1006)에 저장되고, 두번째 데이터 세트(Data2 또는 블록 100)는 노드 2(504, 1004)에 저장된다. 세번째 데이터 세트(parity1)는 노드 1(502, 1002)에, 네번째 데이터 세트(parity2)는 노드 2에 저장된다.
이와는 별개로 인코딩 대상 블록 데이터(블록 99 내지는 블록 100)를 디코딩 없이 접근할 수 있는 기회를 확대하기 위해 블록 데이터 자체를 추가적으로 블록체인 노드들 중 하나 이상에 저장할 수 있다. 이하, 도 11을 참고하여 상기 저장 방법을 상세히 설명한다. 본 실시예에서는 이해를 위해 원본 블록 데이터의 1개 사본을 저장하는 것을 예로 설명한다. 그러나 추가적인 블록 사본 저장 개수는 선택적으로 적용할 수 있다. 이를 위해 블록 99를 위해 도 4와 도 5를 참조하여 설명한 확률 분포 기반 랜덤 정수 발생함수와 유사한 제2 함수를 활용하여 랜덤 정수를 [1, 블록체인 노드 총 수]범위에서 발생시킨다. 이하, 블록 99를 위해 발생시킨 랜덤 정수의 시퀀스가 (3, 2, 2, 1, 4, …)라고 가정한다.
이때 블록 99의 추가 사본 저장 위치의 후보로 노드 3이 선택된다. 그러나 노드 3은 이미 인코딩된 데이터 세트 중 블록 99에 대응되는 부분을 저장하고 있으므로 중복되어 후보에서 제외된다. 다음 시퀀스 번호는 2번이다. 노드 2는 인코딩된 데이터 세트 중 블록 99를 저장하지 않으므로 블록 99 사본 저장의 대상이 된다. 따라서, 도 11에서 빗금으로 표기된 것처럼 블록 99의 사본은 노드 2에 저장된다. 유사하게 블록 100에 대해 제2 함수를 적용하고 랜덤 정수 시퀀스가 (1, 2, 3, 2, 4, ….)라고 가정하면, 첫번째 후보가 노드 1이고 노드 1은 인코딩된 데이터 세트들 중 블록 100을 저장하지 않으므로 블록 100의 추가 사본 저장 노드가 된다.
만약 추가적으로 저장하는 블록 사본의 개수가 2개라면 제2 함수 및 제3 함수를 사용하여 처리할 수 있다.
일부 실시예들에서, 블록체인 노드가 블록체인 네트워크에서 탈퇴하거나 삭제되는 경우, 탈퇴/삭제를 인지한 블록체인 노드는 블록체인 네트워크내에서 합의를 통해 ECC 재수행을 실행할 수 있다. 만약 수학식 5에서 설명한 N을 기준으로 ECC 인코딩 된 경우라면 블록체인 노드 수(n)이 [R*f + 1, R*(f+1)] 범위 이내에 있을 경우, ECC 인코딩 재실행은 불필요하다. 만약 이 범위내에 있지 않거나, ECC 인코딩 방식을 총 노드 수 n을 고려하여 인코딩한 경우는 ECC 인코딩 재수행을 고려해야 한다.
도 8를 참조하면, 인덱스 데이터 구조를 통해 특정 블록을 위한 인코딩의 코드 레이트(k/(k+m))를 알 수 있다. 노드 탈퇴 후의 총 노드 수(n')와 허용 가능한 최대 비잔틴 노드 수(f')을 통해 탈퇴 후의 코드 레이트((n'- (R-1)*f')/n')를 구할 수 있다. 탈퇴 후의 코드 레이트가 인코딩 코드 레이트 이상이 된다면 ECC 재수행은 불필요하다. 탈퇴 후의 코드 레이트가 인코딩 코드 레이트 미만이라면 ECC 재수행을 수행하여 해당 노드의 탈퇴에 대처할 수 있다.
도 12는 실시예에 따른 컴퓨터 시스템의 구성을 나타낸 도면이다.
실시예에 따른 에러 정정 코드 기반 블록체인 데이터 저장 장치는 컴퓨터로 읽을 수 있는 기록매체와 같은 컴퓨터 시스템(1200)에서 구현될 수 있다.
컴퓨터 시스템(1200)은 버스(1220)를 통하여 서로 통신하는 하나 이상의 프로세서(1210), 메모리(1230), 사용자 인터페이스 입력 장치(1240), 사용자 인터페이스 출력 장치(1250) 및 스토리지(1260)를 포함할 수 있다. 또한, 컴퓨터 시스템(1200)은 네트워크(1280)에 연결되는 네트워크 인터페이스(1270)를 더 포함할 수 있다. 프로세서(1210)는 중앙 처리 장치 또는 메모리(1230)나 스토리지(1260)에 저장된 프로그램 또는 프로세싱 인스트럭션들을 실행하는 반도체 장치일 수 있다. 메모리(1230) 및 스토리지(1260)는 휘발성 매체, 비휘발성 매체, 분리형 매체, 비분리형 매체, 통신 매체, 또는 정보 전달 매체 중에서 적어도 하나 이상을 포함하는 저장 매체일 수 있다. 예를 들어, 메모리(1230)는 ROM(1231)이나 RAM(1232)을 포함할 수 있다.
본 발명의 일 실시예에 따른 에러 정정 코드 기반 블록체인 데이터 저장 장치는 하나 이상의 프로세서(1210) 및 상기 하나 이상의 프로세서에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리(1230)를 포함하고, 상기 적어도 하나 이상의 프로그램은 저장할 블록 데이터를 복수의 서브 블록 데이터 세트로 분할하는 단계, 상기 블록 데이터에 상응하는 패리티 데이터 세트를 생성하는 단계 및 상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 블록체인 데이터 저장 노드들의 저장 용량에 비례하도록 저장하는 단계의 수행을 위한 명령어들을 포함한다.
이때, 상기 저장 용량에 비례하도록 저장하는 단계는 상기 서브 블록 데이터 세트 또는 상기 패리티 데이터 세트를 저장하지 않은 다른 블록체인 데이터 저장 노드에 상기 서브 블록 데이터 세트 또는 상기 패리티 데이터 세트에 상응하는 해시값을 저장할 수 있다.
이때, 상기 블록체인 데이터 저장 노드들은 상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 저장할 수 있는 최대 데이터 세트 수를 가질 수 있다.
이때, 상기 최대 데이터 세트 수는 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율에 기반하여 결정될 수 있다.
이때, 상기 패리티 데이터 세트의 수는 허용할 수 있는 비잔틴 노드 수 및 상기 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율에 기반하여 결정될 수 있다.
또한, 상기 패리티 데이터 세트의 수는 상기 최대 데이터 세트 수 및 허용할 수 있는 비잔틴 노드 수에 기반하여 결정될 수 있다.
이때, 상기 프로그램은 신규 블록체인 데이터 저장 노드가 추가되면, 상기 신규 블록체인 데이터 저장 노드에 기존 블록체인 데이터를 재인코딩하여 저장하는 단계의 수행을 위한 명령어를 더 포함할 수 있다.
이때, 상기 재인코딩하여 저장하는 단계는 변경된 블록체인 데이터 저장 노드 수에 상응하도록 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수를 조절할 수 있다.
이때, 상기 재인코딩하여 저장하는 단계는 신규 블록체인 데이터 저장 노드가 추가되고, 상기 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수의 변경이 필요하지 않으면 상기 패리티 데이터 세트 및 서브 블록 데이터 세트의 재배치를 수행할 수 있다.
이때, 상기 프로그램은 상기 조절된 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수를 기설정된 데이터 구조로 저장하는 단계의 수행을 위한 명령어를 더 포함할 수 있다.
이때, 상기 저장 용량에 비례하도록 저장하는 단계는 상기 블록체인 데이터 저장 장치들의 저장 용량에 상응하도록 생성된 확률 분포 기반 랜덤 정수 발생 함수를 이용하여 수행될 수 있다.
이때, 서브 블록 데이터 세트 수 및 패리티 데이터 세트 수의 합은 R*(f+1)에 상응하고, R은 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율을 나타내고, f는 허용 가능한 비잔틴 노드의 수를 나타낼 수 있다.
이때, 상기 프로그램은 블록체인 데이터 저장 노드가 탈퇴하면, 상기 블록체인 데이터 저장 노드 탈퇴 후 코드 레이트와 상기 블록체인 데이터 저장 노드 탈퇴 전 코드 레이트를 비교하는 단계의 수행을 위한 명령어를 더 포함할 수 있다.
이때, 상기 코드 레이트를 비교하는 단계는 상기 탈퇴 후 코드 레이트가 상기 탈퇴 전 코드 레이트 이상이면 재인코딩을 수행하지 않을 수 있다.
이때, 상기 저장할 블록 데이터는 복수의 블록 그룹 데이터에 상응할 수 있다.
본 발명에서 설명하는 특정 실행들은 실시예들로서, 어떠한 방법으로도 본 발명의 범위를 한정하는 것은 아니다. 명세서의 간결함을 위하여, 종래 전자적인 구성들, 제어시스템들, 소프트웨어, 상기 시스템들의 다른 기능적인 측면들의 기재는 생략될 수 있다. 또한, 도면에 도시된 구성 요소들 간의 선들의 연결 또는 연결 부재들은 기능적인 연결 및/또는 물리적 또는 회로적 연결들을 예시적으로 나타낸 것으로서, 실제 장치에서는 대체 가능하거나 추가의 다양한 기능적인 연결, 물리적인 연결, 또는 회로 연결들로서 나타내어질 수 있다. 또한, “필수적인”, “중요하게” 등과 같이 구체적인 언급이 없다면 본 발명의 적용을 위하여 반드시 필요한 구성 요소가 아닐 수 있다.
따라서, 본 발명의 사상은 상기 설명된 실시예에 국한되어 정해져서는 아니되며, 후술하는 특허청구범위뿐만 아니라 이 특허청구범위와 균등한 또는 이로부터 등가적으로 변경된 모든 범위는 본 발명의 사상의 범주에 속한다고 할 것이다.
1200: 컴퓨터 시스템 1212: 프로세서
1220: 버스 1230: 메모리
1231: 롬 1232: 램
1240: 사용자 인터페이스 입력 장치
1250: 사용자 인터페이스 출력 장치
1260: 스토리지 1270: 네트워크 인터페이스
1280: 네트워크

Claims (20)

  1. 복수의 블록체인 데이터 저장 노드에 의해 수행되는 에러 정정 코드 기반 블록체인 데이터 저장 방법에 있어서,
    저장할 블록 데이터를 복수의 서브 블록 데이터 세트로 분할하는 단계;
    상기 블록 데이터에 상응하는 패리티 데이터 세트를 생성하는 단계; 및
    상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 블록체인 데이터 저장 노드들의 저장 용량에 비례하도록 저장하는 단계;
    를 포함하는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  2. 청구항 1에 있어서,
    상기 저장 용량에 비례하도록 저장하는 단계는
    상기 서브 블록 데이터 세트 또는 상기 패리티 데이터 세트를 저장하지 않은 다른 블록체인 데이터 저장 노드에 상기 서브 블록 데이터 세트 또는 상기 패리티 데이터 세트에 상응하는 해시값을 저장하는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  3. 청구항 1에 있어서,
    상기 블록체인 데이터 저장 노드는
    상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 저장할 수 있는 최대 데이터 세트 수를 갖는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  4. 청구항 3에 있어서,
    상기 최대 데이터 세트 수는
    정상 노드 대비 허용할 수 있는 비잔틴 노드 비율에 기반하여 결정되는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  5. 청구항 1에 있어서,
    상기 패리티 데이터 세트의 수는
    허용할 수 있는 비잔틴 노드 수 및 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율에 기반하여 결정되는 것을 특징으로 하는 데이터 저장 방법.
  6. 청구항 1에 있어서,
    상기 방법은
    신규 블록체인 데이터 저장 노드가 추가되면, 상기 신규 블록체인 데이터 저장 노드에 기존 블록체인 데이터를 재인코딩하여 저장하는 단계를 더 포함하는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  7. 청구항 6에 있어서,
    상기 재인코딩하여 저장하는 단계는
    변경된 블록체인 데이터 저장 노드 수에 상응하도록 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수를 조절하는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  8. 청구항 7에 있어서,
    상기 재인코딩하여 저장하는 단계는
    신규 블록체인 데이터 저장 노드가 추가되고, 상기 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수의 변경이 필요하지 않으면 상기 패리티 데이터 세트 및 서브 블록 데이터 세트의 재배치를 수행하는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  9. 청구항 8에 있어서,
    상기 방법은
    상기 조절된 패리티 데이터 세트 수 및 서브 블록 데이터 세트 수를 기설정된 데이터 구조로 저장하는 단계를 더 포함하는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  10. 청구항 1에 있어서,
    상기 저장 용량에 비례하도록 저장하는 단계는
    상기 블록체인 데이터 저장 장치들의 저장 용량에 상응하도록 생성된 확률 분포 기반 랜덤 정수 발생 함수를 이용하여 수행되는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  11. 청구항 1에 있어서,
    서브 블록 데이터 세트 수 및 패리티 데이터 세트 수의 합은 R*(f+1)에 상응하고,
    R은 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율을 나타내고, f는 허용 가능한 비잔틴 노드의 수를 나타내는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  12. 청구항 1에 있어서,
    상기 방법은
    블록체인 데이터 저장 노드가 탈퇴하면, 상기 블록체인 데이터 저장 노드 탈퇴 후 코드 레이트와 상기 블록체인 데이터 저장 노드 탈퇴 전 코드 레이트를 비교하는 단계를 더 포함하는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  13. 청구항 12에 있어서,
    상기 코드 레이트를 비교하는 단계는
    상기 탈퇴 후 코드 레이트가 상기 탈퇴 전 코드 레이트 이상이면 재인코딩을 수행하지 않는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  14. 청구항 1에 있어서,
    상기 저장할 블록 데이터는 복수의 블록 그룹 데이터에 상응하는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 방법.
  15. 하나 이상의 프로세서; 및
    상기 하나 이상의 프로세서에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리를 포함하고,
    상기 적어도 하나 이상의 프로그램은
    저장할 블록 데이터를 복수의 서브 블록 데이터 세트로 분할하는 단계;
    상기 블록 데이터에 상응하는 패리티 데이터 세트를 생성하는 단계; 및
    상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 블록체인 데이터 저장 노드들의 저장 용량에 비례하도록 저장하는 단계
    의 수행을 위한 명령어들을 포함하는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 장치.
  16. 청구항 15에 있어서,
    상기 저장 용량에 비례하도록 저장하는 단계는
    상기 서브 블록 데이터 세트 또는 상기 패리티 데이터 세트를 저장하지 않은 다른 블록체인 데이터 저장 노드에 상기 서브 블록 데이터 세트 또는 상기 패리티 데이터 세트에 상응하는 해시값을 저장하는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 장치.
  17. 청구항 15에 있어서,
    상기 블록체인 데이터 저장 노드들은
    상기 서브 블록 데이터 세트 및 상기 패리티 데이터 세트를 저장할 수 있는 최대 데이터 세트 수를 갖는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 장치.
  18. 청구항 17에 있어서,
    상기 최대 데이터 세트 수는
    정상 노드 대비 허용할 수 있는 비잔틴 노드 비율에 기반하여 결정되는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 장치.
  19. 청구항 15에 있어서,
    상기 패리티 데이터 세트의 수는
    허용할 수 있는 비잔틴 노드 수 및 정상 노드 대비 허용할 수 있는 비잔틴 노드 비율에 기반하여 결정되는 것을 특징으로 하는 데이터 저장 방법.
  20. 청구항 15에 있어서,
    상기 프로그램은
    신규 블록체인 데이터 저장 노드가 추가되면, 상기 신규 블록체인 데이터 저장 노드에 기존 블록체인 데이터를 재인코딩하여 저장하는 단계의 수행을 위한 명령어를 더 포함하는 것을 특징으로 하는 에러 정정 코드 기반 블록체인 데이터 저장 장치.
KR1020230104187A 2022-10-21 2023-08-09 에러 정정 코드 기반 블록체인 데이터 저장 방법 및 장치 KR20240056400A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20220136483 2022-10-21
KR1020220136483 2022-10-21

Publications (1)

Publication Number Publication Date
KR20240056400A true KR20240056400A (ko) 2024-04-30

Family

ID=90884876

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020230104187A KR20240056400A (ko) 2022-10-21 2023-08-09 에러 정정 코드 기반 블록체인 데이터 저장 방법 및 장치

Country Status (1)

Country Link
KR (1) KR20240056400A (ko)

Similar Documents

Publication Publication Date Title
US11327840B1 (en) Multi-stage data recovery in a distributed storage network
US11740826B2 (en) Policy-based hierarchical data protection in distributed storage
US10339006B2 (en) Proxying slice access requests during a data evacuation
US10042707B2 (en) Recovering affinity with imposter slices
RU2501072C2 (ru) Распределенное хранение восстанавливаемых данных
CN110750382B (zh) 用于提高数据修复性能的最小存储再生码编码方法及系统
US10860256B2 (en) Storing data utilizing a maximum accessibility approach in a dispersed storage network
US11442827B2 (en) Policy-based hierarchical data protection in distributed storage
CN109478125B (zh) 操纵分布式一致性协议以识别期望的存储单元集
CN115292340B (zh) 基于分布式网络编码的区块链存储优化方法及装置
US10958731B2 (en) Indicating multiple encoding schemes in a dispersed storage network
JP2018524705A (ja) データ転送中にデータアクセス要求を処理するための方法及びシステム
CN111045853A (zh) 一种提高纠删码恢复速度的方法、装置及后台服务器
US10318382B2 (en) Determining missing encoded data slices
JP2021086289A (ja) 分散ストレージシステムおよび分散ストレージシステムのパリティ更新方法
KR20240056400A (ko) 에러 정정 코드 기반 블록체인 데이터 저장 방법 및 장치
US20240134739A1 (en) Method and apparatus for storing blockchain data based on error correction code
Wei et al. expanCodes: Tailored LDPC codes for big data storage
US20230179423A1 (en) Method and apparatus for storing blockchain transaction data and distributed storage system using the same
CN109814812B (zh) 基于内容碎片化放置的快速数据转移方法
US20230342250A1 (en) Allocating Data in a Decentralized Computer System
KR20230084026A (ko) 블록체인 트랜잭션 데이터 저장 방법, 장치 및 이를 이용한 분산 저장 시스템
KR20240056402A (ko) 파운틴 코드를 이용한 블록체인 트랜잭션 데이터 저장 방법 및 이를 위한 장치
CN117762696A (zh) 节点数据修复方法、装置及分布式存储系统、设备和介质