KR102635029B1 - 정보 중심 기반 네트워킹 기반 블록체인 방법 및 장치 - Google Patents
정보 중심 기반 네트워킹 기반 블록체인 방법 및 장치 Download PDFInfo
- Publication number
- KR102635029B1 KR102635029B1 KR1020210125916A KR20210125916A KR102635029B1 KR 102635029 B1 KR102635029 B1 KR 102635029B1 KR 1020210125916 A KR1020210125916 A KR 1020210125916A KR 20210125916 A KR20210125916 A KR 20210125916A KR 102635029 B1 KR102635029 B1 KR 102635029B1
- Authority
- KR
- South Korea
- Prior art keywords
- peer
- block
- transaction
- module
- ndn
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 54
- 230000006855 networking Effects 0.000 title claims abstract description 12
- 230000004044 response Effects 0.000 claims description 33
- 230000008569 process Effects 0.000 claims description 23
- 238000003672 processing method Methods 0.000 claims description 20
- 238000005065 mining Methods 0.000 claims description 10
- 239000000284 extract Substances 0.000 claims description 9
- 238000003780 insertion Methods 0.000 claims description 5
- 230000037431 insertion Effects 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 52
- 230000006870 function Effects 0.000 description 11
- 238000011144 upstream manufacturing Methods 0.000 description 11
- 238000012545 processing Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 8
- 230000005540 biological transmission Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 238000007726 management method Methods 0.000 description 7
- 238000012795 verification Methods 0.000 description 7
- 230000002085 persistent effect Effects 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 240000002834 Paulownia tomentosa Species 0.000 description 5
- 235000010678 Paulownia tomentosa Nutrition 0.000 description 5
- 230000008901 benefit Effects 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 3
- RTZKZFJDLAIYFH-UHFFFAOYSA-N Diethyl ether Chemical compound CCOCC RTZKZFJDLAIYFH-UHFFFAOYSA-N 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 101100217298 Mus musculus Aspm gene Proteins 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013496 data integrity verification Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1061—Peer-to-peer [P2P] networks using node-based peer discovery mechanisms
- H04L67/1065—Discovery involving distributed pre-established resource-based relationships among peers, e.g. based on distributed hash tables [DHT]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/7453—Address table lookup; Address filtering using hashing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1074—Peer-to-peer [P2P] networks for supporting data block transmission mechanisms
- H04L67/1076—Resource dissemination mechanisms or network resource keeping policies for optimal resource availability in the overlay network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
본 개시는 이름 기반 네트워킹에 기초한 블록체인에서 알림 및 당김 데이터 브로드캐스팅 방법 및 장치에 관한 것으로, 제 1 피어가 제 1 데이터를 포함하고 있음을 암시하는 전송 인터레스트 패킷 및 알림 메시지를 제 2 피어 및 제 3 피어로 각각 전송하고, 상기 제 1 피어가 상기 제 2 피어 및 상기 제 3 피어로부터 상기 제 1 데이터를 요청하는 요청 인터레스트 패킷을 각각 수신하고, 상기 제 1 피어가 상기 요청 인터레스트 패킷에 대응하는 제 1 데이터 패킷을 상기 제 2 피어 및 상기 제 3 피어로 전송하되, 상기 제 2 피어로부터 수신된 제 1 요청 인터레스트 패킷과 상기 제 3 피어로부터 수신된 제 2 요청 인터레스트 패킷은 중간 노드에서 결합(aggregate)되고, 상기 제 1 데이터 패킷은 상기 중간 노드에서 캐싱(caching)되는 것을 요지로 한다.
Description
본 개시는 블록체인 방법 및 장치에 대한 것으로서, 구체적으로, 정보 중심 기반 네트워킹 기반 블록체인 방법 및 장치에 대한 기술이다.
이름 기반 네트워킹(Named Date Networking, 이하, NDN) 기술은 단말 간의 연결 없이 데이터의 이름을 사용하여 데이터를 요청하고 그에 대한 전달을 받는 정보 중심 네트워킹 (Information Centric Networking, 이하, ICN) 구조의 대표적인 기술 중 하나이다.
NDN은 각 콘텐츠가 다른 콘텐츠와 겹치지 않는 계층적인 이름(Hierarchical name)이 할당되며 이 이름을 기반으로 전송이 이루어지게 된다. 콘텐츠 생성시 각 콘텐츠에 할당된 이름을 기반으로 콘텐츠를 발행하게 되고, 그 이름으로 콘텐츠르 요청하면 데이터가 전달되는 구조이다.
TCP/IP 기반 블록체인, 특히 이더리움 클라이언트의 데이터 통신은 P2P 오버레이에서 구현된다. 트랜잭션 또는 블록과 같은 데이터는 홉 단위 방식으로 전파하여 전체 네트워크에 브로드캐스트된다. 데이터가 노드에 도착하면 유효성이 검사되고 몇 개의 인접 피어로 멀티캐스트된다. 이 브로드캐스트 메커니즘은 효율적이지 않으며 일반적으로 데이터가 중복 전송되기 때문에 불필요한 대역폭이 발생한다.
본 발명은 ICN(정보 중심 네트워킹) 기술 중 하나인 NDN(named data networking)을 이용하여 네트워크 계층 프로토콜에서 이러한 문제를 해결하기 위해 제안되었다. 기존 NDN 기반 블록체인 솔루션은 모든 블록체인 클라이언트가 동일한 데이터 집합을 갖는 것을 목표로 하기 때문에 블록체인에서 데이터 브로드캐스트를 데이터 동기화 문제로 설정하고 문제를 해결하였다. 그러나 이러한 접근 방식의 경우, 다음과 같은 몇 가지 문제가 있다.
첫째, 이러한 동기화 프로토콜은 모든 참가자 노드에 공통의 전역 프리픽스를 설정해야 한다. 각 데이터에 고유한 이름이 부여됨으로써 네트워크 내 캐싱이 완벽하게 활용된다. 그러나 이 요구 사항을 충족하는 것은 블록체인 네트워크에 있어 쉽지 않다.
NDN 네트워크에서 임의의 노드의 프리픽스 등록 절차는 각 노드가 프리픽스를 다른 노드에 알릴(announce) 수 있는 권한을 보유해야 하는 정책 기반 프로세스이다. 따라서 매우 많은 수의 퍼블릭 노드를 갖는 블록체인 네트워크에서 이러한 절차는 많은 비용이 발생한다.
둘째, 이러한 프로토콜은 데이터의 브로드캐스트를 위해 멀티캐스트 포워딩 전략(forwarding strategy)을 사용한다. 즉, 참가자 노드가 다른 피어에게 현재 상태를 알리고자 할 때마다 네트워크에 단일 인터레스트를 전송하고 인터레스트 프리픽스를 수신할 수 있는 모든 피어에게 인터레스트가 멀티캐스트된다. 이 전략은 중간 경로상에 있는 모든 NDN 노드의 포워딩 엔진(NFD)에 멀티캐스트 포워딩 전략이 활성화된 경우에만 작동한다.
셋째, 블록체인 시스템 자체의 보안에 있다. 브로드캐스트 방식의 사용은 블록체인 네트워크에 대한 플러딩 공격에 취약하다. 악의적인 노드가 정상적이지 않은 데이터 조각을 다른 피어에게 브로드캐스트하여 불필요한 작업에 시간과 계산을 낭비하도록 요청할 수 있다.
따라서, 종래 기술의 경우, 동일한 데이터가 중복으로 전송되고, 보안성이 떨어지는 문제점이 있었다.
본 개시의 목적은 특정 노드가 다른 노드에게 자신이 제 1 데이터를 갖고 있음을 알려주고, 제 1 데이터를 받고 싶다는 응답 신호를 다른 노드로부터 수신하면, 응답 신호에 대응하는 제 1 데이터를 다른 노드로 전송하고, 다른 노드는 수신한 제 1 데이터를 검증하여, 유효하지 않은 데이터는 브로드캐스팅되지 않는 블록체인 방법 및 장치를 제공하는 데 있다.
본 개시의 목적은 트랜잭션과 블록이 고유한 이름을 갖고 특정 노드가 각각의 인터레스트 패킷을 결합할 수 있는 블록체인 방법 및 장치를 제공하는 데 있다.
본 개시의 목적은 트랜잭션과 블록이 고유한 이름을 갖고 특정 노드가 데이터 패킷을 캐싱하고, 캐싱된 데이터를 개별 목적지 노드로 전송할 수 있는 블록체인 방법 및 장치를 제공하는 데 있다.
본 개시의 다른 목적 및 장점들은 하기의 설명에 의해서 이해될 수 있으며, 본 개시의 실시예에 의해 보다 분명하게 알게 될 것이다. 또한, 본 개시의 목적 및 장점들은 특허청구범위에 나타낸 수단 및 그 조합에 의해 실현될 수 있음을 쉽게 알 수 있을 것이다.
본 개시의 일 실시예에 따른, 이름 기반 네트워킹에 기초한 블록체인에서 알림 및 당김 데이터 브로드캐스팅 방법은, 제 1 피어가 제 1 데이터를 포함하고 있음을 암시하는 제 1 인터레스트 패킷 및 알림 메시지를 제 2 피어로 전송하는 단계; 상기 제 1 피어가 상기 제 1 인터레스트 패킷과 내용이 동일하고 수신하는 피어가 다른 제 2 인터레스트 패킷 및 상기 알림 메시지를 제 3 피어로 전송하는 단계; 상기 제 1 피어가 상기 제 2 피어로부터 상기 제 1 데이터를 요청하는 제 3 인터레스트 패킷을 수신하는 단계; 상기 제 1 피어가 상기 제 3 피어로부터 상기 제 1 데이터를 요청하는 제 4 인터레스트 패킷을 수신하는 단계; 상기 제 1 피어가 상기 제 3 인터레스트 패킷에 대응하는 제 1 데이터 패킷을 제 2 피어로 전송하는 단계; 및 상기 제 1 피어가 상기 제 4 인터레스트 패킷에 대응하는 상기 제 1 데이터 패킷을 제 3 피어로 전송하는 단계를 포함하되, 상기 제 3 인터레스트 패킷과 제 4 인터레스트 패킷은 중간 노드에서 결합(aggregate)되고, 상기 제 1 데이터 패킷은 상기 중간 노드에서 캐싱되는 것을 특징으로 한다.
본 개시의 일 실시예에 따른, 알림 및 당김 데이터 브로드캐스팅 방법은, 상기 제 2 피어는 캐싱된 상기 제 1 데이터 패킷을 상기 중간 노드로부터 수신하면, 수신된 상기 제 1 데이터 패킷의 데이터 무결성을 검증하는 단계; 검증된 상기 제 1 데이터 패킷을 다른 피어로 알림하는 단계를 포함한다.
본 개시의 일 실시예에 따른, 알림 및 당김 데이터 브로드캐스팅 방법은, NDN 이름에 포함된 해시값과 수신된 상기 제 1 데이터 패킷의 해시값을 기초로 데이터 무결성을 검증하는 단계를 포함한다.
본 개시의 일 실시예에 따른, 알림 및 당김 데이터 브로드캐스팅 방법은, NDN 이름에 포함된 해시값과 수신된 상기 제 1 데이터 패킷의 해시값이 동일하면, 데이터 무결성을 검증으로 결정하는 단계를 포함한다.
본 개시의 일 실시예에 따른, 알림 및 당김 데이터 브로드캐스팅 방법은, 상기 제 3 피어는 캐싱된 상기 제 1 데이터 패킷을 상기 중간 노드로부터 수신하면, 상기 제 1 데이터 패킷의 데이터 무결성을 검증하는 단계; 검증된 상기 제 1 데이터 패킷을 다른 피어로 알림(announce)하는 단계를 포함한다.
본 개시의 일 실시예에 따른, 알림 및 당김 데이터 브로드캐스팅 방법은, 상기 알림 메시지는 트랜잭션 알림 메시지 및 블록 알림 메시지 중 적어도 하나를 포함하는 것을 특징으로 한다.
본 개시의 일 실시예에 따른, 알림 및 당김 데이터 브로드캐스팅 방법은, 상기 알림 메시지는 데이터의 고유 아이디로 사용할 수 있는 데이터 개체의 해시값을 포함하는 것을 특징으로 한다.
본 개시의 일 실시 예에 따른, 이름 기반 네트워킹에 기초한 블록체인에서 트랜잭션 처리 방법은, 제 1 피어에서, 사용자 인터페이스 백엔드 모듈(UIB)이 트랜잭션을 트랜잭션 풀 모듈로 전달하는 단계; 상기 트랜잭션 풀 모듈은 현재 보류 중인 트랜잭션 목록에 트랜잭션을 추가하는 단계; 상기 트랜잭션 풀 모듈은 추가된 트랜잭션을 컨트롤러(190)에 알리는 단계; 상기 컨트롤러는 제 2 피어에게 트랜잭션 알림을 보내도록 NDN 트랜스포트 모듈에 요청하는 단계; 상기 NDN 트랜스포트 모듈은 주변의 모든 피어에게 트랜잭션 알림 메시지를 전송하는 단계; 제 2 피어가 트랜잭션 알림 메시지를 수신하면, 상기 트랜잭션 알림 메시지를 컨트롤러로 전달하는 단계; 상기 컨트롤러는 트랜잭션 알림 메시지에 대응하는 트랜잭션을 제 1 피어로부터 가져오는 명령을 트랜잭션 페쳐 모듈로 전달하는 단계; 상기 트랜잭션 페쳐 모듈은 트랜잭션 요청 신호를 컨트롤러에 전달하는 단계; 상기 컨트롤러는 트랜잭션 요청 신호를 NDN 트랜스포트 모듈로 전달하는 단계; NDN 트랜스포트 모듈은 상기 트랜잭션 요청 신호를 포함하는 트랜잭션 요청 메시지를 제 1 피어로 전송하는 단계; 상기 제 1 피어의 NDN 트랜스포트 모듈(180)은 수신된 트랜잭션 요청 메시지를 컨트롤러로 전달하는 단계; 상기 제 1 피어의 컨트롤러는 상기 트랙잭션 요청 메시지에 대응하는 트랜잭션을 상기 NDN 트랜스포트 모듈로 전달하는 단계; 상기 제 1 피어의 NDN 트랜스포트 모듈은 NDN 데이터 패킷에 트랜잭션을 삽입하고, 상기 NDN 데이터 패킷을 포함하는 제 1 메시지를 상기 제 2 피어로 전송하는 단계; 상기 제 2 피어의 NDN 트랜스포트 모듈이 상기 제 1 메시지를 수신하면, 상기 제 1 메시지를 상기 제 2 피어의 컨트롤러로 전달하는 단계; 상기 컨트롤러는 상기 제 1 메시지를 확인하고 상기 제 1 메시지로부터 트랜잭션을 추출하고, 추출된 상기 트랜잭션을 트랜잭션 페쳐 모듈로 전달하는 단계; 상기 트랜잭션 페쳐 모듈은 가져오기 목록에서 상기 트랜잭션을 제거하고, 상기 트랜잭션을 트랜잭션 풀 모듈로 전달하는 단계; 상기 트랜잭션 풀 모듈은 상기 트랜잭션을 보류 목록에 추가하는 단계; 상기 트랜잭션 풀 모듈은 새로 추가된 트랜잭션을 수집하고, 수집된 상기 트랜잭션을 상기 컨트롤러로 전달하는 단계; 상기 컨트롤러는 피어 관리자 모듈에서 피어 목록을 가져온 후, 피어 목록에 있는 피어에게 NDN 트랜스포트 모듈을 통해 알림을 보내도록 요청하는 단계; 및 상기 NDN 트랜스포트 모듈은 트랜잭션 알림 메시지를 다른 피어로 전송하는 단계를 포함한다.
본 개시의 일 실시예에 따른, 블록체인에서 트랜잭션 처리 방법은, 상기 트랜잭션 풀 모듈은 동시에 새로운 트랜잭션이 추가될 때마다 채굴기 모듈에도 트랜잭션을 알리는 단계를 포함한다.
본 개시의 일 실시예에 따른, 블록체인에서 트랜잭션 처리 방법은, 채굴기 모듈은 현재 채굴 진행 중인 작업을 멈추고 새로 추가된 트랜잭션을 포함한 후, 다시 새로운 블록을 채굴하는 작업을 시작하는 단계를 더 포함한다.
본 개시의 일 실시예에 따른, 블록체인에서 트랜잭션 처리 방법은, 상기 트랜잭션 알림 메시지가 정상인 경우, 상기 컨트롤러는 NDN 트랜스포트 모듈을 통해 상기 제 1 피어의 알림에 대한 응답을 상기 제 1 피어로 전송하는 단계를 더 포함한다.
본 개시의 일 실시예에 따른, 블록체인에서 트랜잭션 처리 방법은, 상기 컨트롤러는 상기 제 1 피어의 알림에 대한 응답을 더미 데이터 패킷으로 상기 제 1 피어로 전송하는 단계를 더 포함한다.
본 개시의 일 실시예에 따른, 블록체인에서 트랜잭션 처리 방법은, 트랜잭션 페쳐 모듈은 복수의 피어로부터 동시에 여러 알림을 수신하는 단계를 더 포함한다.
본 개시의 일 실시예에 따른, 블록체인에서 트랜잭션 처리 방법은, 상기 제 1 피어의 NDN 트랜스포트 모듈은 NDN 데이터 패킷에 트랜잭션을 캡슐화하여 삽입하는 단계를 더 포함한다.
본 개시의 일 실시예에 따른, 이름 기반 네트워킹에 기초한 블록체인에서 블록 처리(Block processing) 방법에 있어서, 채굴기 모듈이 새로운 블록에 대한 작업증명 솔루션을 찾으면, 채굴된 블록을 컨트롤러로 전달하는 단계; 컨트롤러는 모든 관리되는 피어에게 블록을 알리도록 NDN 트랜스포트 모듈에 요청하는 단계; 상기 NDN 트랜스포트 모듈은 블록 알림 메시지를 제 2 피어를 포함하는 목록에 있는 모든 피어로 전송하는 단계; 상기 제 2 피어에 상기 블록 알림 메시지가 도착하고, 상기 NDN 트랜스포트 모듈은 상기 블록 알림 메시지를 컨트롤러로 전달하는 단계; 상기 컨트롤러는 블록 알림 메시지에 대응하는 블록을 제 1 피어로부터 가져오는 명령을 블록 페쳐 모듈로 전달하는 단계; 상기 블록 페쳐 모듈은 블록 요청 신호를 상기 컨트롤러로 전달하는 단계; 상기 컨트롤러는 상기 NDN 트랜스포트 모듈이 제 1 피어에서 블록을 가져오도록 요청하는 단계; 상기 NDN 트랜스포트 모듈은 블록 요청 메시지를 상기 제 1 피어로 전송하는 단계; 상기 제 1 피어의 NDN 트랜스포트 모듈은 수신된 블록 요청 메시지를 컨트롤러로 전달하는 단계; 상기 컨트롤러는 상기 블록 요청 메시지에 대응하는 블록을 상기 NDN 트랜스포트 모듈로 전달하는 단계; 상기 NDN 트랜스포트 모듈은 블록을 NDN 데이터 패킷에 블록을 삽입하고, 상기 NDN 패킷을 포함하는 제 1 메시지를 상기 제 2 피어로 전송하는 단계; 상기 제 2 피어의 NDN 트랜스포트 모듈이 제 1 메시지를 수신하고, 수신된 제 1 메시지를 컨트롤러로 전달하는 단계; 상기 제 2 피어의 컨트롤러는 제 1 메시지로부터 블록을 추출하고, 추출된 블록을 블록 페쳐 모듈로 전달하는 단계; 상기 블록 페쳐 모듈은 가져온 블록의 유효성 검사를 위해 합의 모듈에 요청하는 단계; 상기 제 2 피어의 합의 모듈은 블록을 검증하는 단계; 상기 합의 모듈은 검증 결과를 블록 페쳐 모듈에 반환하는 단계; 상기 블록 페쳐 모듈은 NDN 트랜스포트 모듈에게 모든 관리되는 다른 피어에게 블록을 알리도록 요청하는 단계; 상기 NDN 트랜스포트 모듈은 블록 알림 메시지를 다른 피어로 전송하는 단계를 포함한다.
본 개시의 일 실시예에 따른, 블록체인에서 블록 처리 방법은, 상기 블록 알림 메시지가 정상인 경우, 상기 컨트롤러는 상기 NDN 트랜스포트 모듈을 통해 상기 제 1 피어의 알림에 대한 응답을 상기 제 1 피어로 전송하는 단계를 더 포함한다.
본 개시의 일 실시예에 따른, 블록체인에서 블록 처리 방법은, 상기 컨트롤러는 상기 제 1 피어의 알림에 대한 응답을 더미 데이터 패킷으로 상기 제 1 피어로 전송하는 단계를 더 포함한다.
본 개시의 일 실시예에 따른, 블록체인에서 블록 처리 방법은, 상기 블록 페쳐 모듈은 복수의 다른 피어로부터 동시에 여러 블록 알림을 수신하는 단계를 더 포함한다.
본 개시의 일 실시예에 따른, 블록체인에서 블록 처리 방법은, 상기 제 1 피어의 NDN 트랜스포트 모듈은 NDN 데이터 패킷에 블록을 캡슐화하여 삽입하는 단계를 더 포함한다.
본 개시의 일 실시예에 따른, 블록체인에서 블록 처리 방법은, 상기 블록 페쳐 모듈은 체인 관리자 모듈에 블록 삽입을 주기적으로 요청하여, 로컬 블록체인에 새로 가져온 블록을 추가하는 단계를 더 포함한다.
본 발명에 대하여 위에서 간략하게 요약된 특징들은 후술하는 본 발명의 상세한 설명의 예시적인 양상일 뿐이며, 본 발명의 범위를 제한하는 것은 아니다
본 개시에 따르면, 특정 노드가 다른 노드에게 자신이 제 1 데이터를 갖고 있음을 알려주고, 제 1 데이터를 받고 싶다는 응답 신호를 다른 노드로부터 수신하면, 응답 신호에 대응하는 제 1 데이터를 다른 노드로 전송하고, 다른 노드는 수신한 제 1 데이터를 검증하여, 유효하지 않은 데이터는 브로드캐스팅되지 않으므로 데이터를 브로드캐스팅할 때 보안성을 향상 시킬 수 있다.
본 개시에 따르면, 트랜잭션과 블록이 고유한 이름을 갖고, 특정 노드가 각각의 인터레스트 패킷을 결합할 수 있으므로 데이터 검색 효율을 향상시킬 수 있다.
본 개시에 따르면, 트랜잭션과 블록이 고유한 이름을 갖고 특정 노드에서 데이터 패킷을 캐싱하고, 캐싱된 데이터를 개별 목적지 노드로 전송할 수 있으므로 데이터 중복을 감소시킬 수 있는 장점이 있다.
본 개시에 따르면, 블록체인 데이터 개체의 이름을 고유하게 지정하여 NDN 기술의 네트워크 내 캐싱 및 기본 멀티캐스팅 기능을 가능하게 함으로써, NDN 네트워크의 고급 기능을 활용하는 블록 및 트랜잭션 전파를 위한 새로운 프로토콜을 통해서, IP 기반 이더리움 블록체인에서 피할 수 없는 트래픽 중복성을 제거할 수 있다.
본 발명에 따르면, P2P 계층은 데이터 개체에 대한 이름, 위치 매핑을 수행하는 이름 확인 시스템 역할을 하므로 시스템이 배포 비용 없이 NDN 플랫폼에서 작동할 수 있어 확장성이 향상되는 장점이 있다.
본 개시에서 얻을 수 있는 효과는 이상에서 언급한 효과들로 제한되지 않으며, 언급하지 않은 또 다른 효과들은 아래의 기재로부터 본 개시가 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
도 1은 본 발명의 일 실시예에 따른, NDN을 통한 이더리움 블록체인 클라이언트를 도시한 도면이다.
도 2는 본 개시의 일 실시예에 따른, NDN 패킷에 이름을 할당하는 실시 예를 도시한 도면이다.
도 3은 본 개시의 일 실시 예에 따른, NDN 인터레스트 패킷과 데이터 패킷의 포맷을 도시한 도면이다.
도 4는 본 개시의 일 실시 예에 따른, 위치 독립적 데이터 오브젝트를 찾아가는 실시 예를 도시한 도면이다.
도 5는 본 개시의 일 실시 예에 따른, RPC 메시지의 실시 예를 도면이다.
도 6은 본 개시의 일 실시 예에 따른, NDN 패킷에서 상태 메시지를 캡슐화하는 것을 도시한 도면이다.
도 7은 본 개시의 일 실시 예에 따른, 알림-당김(Announce-Pull) 데이터 브로드캐스팅(data broadcasting)방법을 도시한 도면이다.
도 8은 본 개시의 일 실시 예에 따른, 알림 메시지의 실시 예를 도시한 도면이다.
도 9는 본 개시의 일 실시 예에 따른, 데이터 요청과 그 응답 메시지의 실시 예를 도시한 도면이다.
도 10은 본 개시의 일 실시 예에 따른, 세그먼트 데이터의 응답 메시지의 실시 예를 도시한 도면이다.
도 11은 본 개시의 일 실시 예에 따른, 피어 관리 프로세스를 도시한 도면이다.
도 12는 본 개시의 일 실시 예에 따른, 트랜잭션 처리 프로세스를 도시한 도면이다.
도 13은 본 개시의 다른 실시 예에 따른, 블록 처리 프로세스를 도시한 도면이다.
도 14는 본 개시의 다른 실시 예에 따른, 체인 동기화 프로세스를 도시한 도면이다.
도 15는 본 개시의 다른 실시 예에 따른, 알림 당김 데이터 브로드캐스팅에서 메시지 전송의 실시 예를 도시한 도면이다.
도 16은 본 개시의 다른 실시 예에 따른, 알림 당김 데이터 브로드캐스팅에서 데이터를 요청하는 실시 예를 도시한 도면이다.
도 17은 본 개시의 다른 실시 예에 따른, 알림 당김 데이터 브로드캐스팅에서 요청된 데이터를 캐싱하는 실시 예를 도시한 도면이다.
도 18은 본 개시의 다른 실시 예에 따른, 트래픽량의 효과를 도시한 도면이다.
도 19는 본 개시의 다른 실시 예에 따른, 트래픽 중복 비율의 효과를 도시한 도면이다.
도 20은 본 개시의 다른 실시 예에 따른, 캐싱 효율을 도시한 도면이다.
도 21은 본 개시의 다른 실시 예에 따른, 네트워크 사이즈에 대한 캐싱 비율을 도시한 도면이다.
도 22는 본 개시의 일 실시 예에 따른, 데이터 무결성 검증 장치의 구성도를 도시한 도면이다.
도 2는 본 개시의 일 실시예에 따른, NDN 패킷에 이름을 할당하는 실시 예를 도시한 도면이다.
도 3은 본 개시의 일 실시 예에 따른, NDN 인터레스트 패킷과 데이터 패킷의 포맷을 도시한 도면이다.
도 4는 본 개시의 일 실시 예에 따른, 위치 독립적 데이터 오브젝트를 찾아가는 실시 예를 도시한 도면이다.
도 5는 본 개시의 일 실시 예에 따른, RPC 메시지의 실시 예를 도면이다.
도 6은 본 개시의 일 실시 예에 따른, NDN 패킷에서 상태 메시지를 캡슐화하는 것을 도시한 도면이다.
도 7은 본 개시의 일 실시 예에 따른, 알림-당김(Announce-Pull) 데이터 브로드캐스팅(data broadcasting)방법을 도시한 도면이다.
도 8은 본 개시의 일 실시 예에 따른, 알림 메시지의 실시 예를 도시한 도면이다.
도 9는 본 개시의 일 실시 예에 따른, 데이터 요청과 그 응답 메시지의 실시 예를 도시한 도면이다.
도 10은 본 개시의 일 실시 예에 따른, 세그먼트 데이터의 응답 메시지의 실시 예를 도시한 도면이다.
도 11은 본 개시의 일 실시 예에 따른, 피어 관리 프로세스를 도시한 도면이다.
도 12는 본 개시의 일 실시 예에 따른, 트랜잭션 처리 프로세스를 도시한 도면이다.
도 13은 본 개시의 다른 실시 예에 따른, 블록 처리 프로세스를 도시한 도면이다.
도 14는 본 개시의 다른 실시 예에 따른, 체인 동기화 프로세스를 도시한 도면이다.
도 15는 본 개시의 다른 실시 예에 따른, 알림 당김 데이터 브로드캐스팅에서 메시지 전송의 실시 예를 도시한 도면이다.
도 16은 본 개시의 다른 실시 예에 따른, 알림 당김 데이터 브로드캐스팅에서 데이터를 요청하는 실시 예를 도시한 도면이다.
도 17은 본 개시의 다른 실시 예에 따른, 알림 당김 데이터 브로드캐스팅에서 요청된 데이터를 캐싱하는 실시 예를 도시한 도면이다.
도 18은 본 개시의 다른 실시 예에 따른, 트래픽량의 효과를 도시한 도면이다.
도 19는 본 개시의 다른 실시 예에 따른, 트래픽 중복 비율의 효과를 도시한 도면이다.
도 20은 본 개시의 다른 실시 예에 따른, 캐싱 효율을 도시한 도면이다.
도 21은 본 개시의 다른 실시 예에 따른, 네트워크 사이즈에 대한 캐싱 비율을 도시한 도면이다.
도 22는 본 개시의 일 실시 예에 따른, 데이터 무결성 검증 장치의 구성도를 도시한 도면이다.
이하에서는 첨부한 도면을 참고로 하여 본 개시의 실시 예에 대하여 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나, 본 개시는 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시 예에 한정되지 않는다.
본 개시의 실시 예를 설명함에 있어서 공지 구성 또는 기능에 대한 구체적인 설명이 본 개시의 요지를 흐릴 수 있다고 판단되는 경우에는 그에 대한 상세한 설명은 생략한다. 그리고, 도면에서 본 개시에 대한 설명과 관계없는 부분은 생략하였으며, 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
본 개시에 있어서, 서로 구별되는 구성요소들은 각각의 특징을 명확하게 설명하기 위함이며, 구성요소들이 반드시 분리되는 것을 의미하지는 않는다. 즉, 복수의 구성요소가 통합되어 하나의 하드웨어 또는 소프트웨어 단위로 이루어질 수도 있고, 하나의 구성요소가 분산되어 복수의 하드웨어 또는 소프트웨어 단위로 이루어질 수도 있다. 따라서, 별도로 언급하지 않더라도 이와 같이 통합된 또는 분산된 실시 예도 본 개시의 범위에 포함된다.
본 개시에 있어서, 다양한 실시 예에서 설명하는 구성요소들이 반드시 필수적인 구성요소들을 의미하는 것은 아니며, 일부는 선택적인 구성요소일 수 있다. 따라서, 일 실시 예에서 설명하는 구성요소들의 부분집합으로 구성되는 실시 예도 본 개시의 범위에 포함된다. 또한, 다양한 실시 예에서 설명하는 구성요소들에 추가적으로 다른 구성요소를 포함하는 실시 예도 본 개시의 범위에 포함된다.
본 개시에 있어서, 다양한 실시 예에서 설명하는 구성요소들이 반드시 필수적인 구성요소들을 의미하는 것은 아니며, 일부는 선택적인 구성요소일 수 있다. 따라서, 일 실시 예에서 설명하는 구성요소들의 부분집합으로 구성되는 실시 예도 본 개시의 범위에 포함된다. 또한, 다양한 실시 예에서 설명하는 구성요소들에 추가적으로 다른 구성요소를 포함하는 실시 예도 본 개시의 범위에 포함된다.
본 개시에 있어서, 제1, 제2 등의 용어는 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용되며, 특별히 언급되지 않는 한 구성요소들 간의 순서 또는 중요도 등을 한정하지 않는다. 따라서, 본 개시의 범위 내에서 일 실시 예에서의 제1 구성요소는 다른 실시 예에서 제2 구성요소라고 칭할 수도 있고, 마찬가지로 일 실시예에서의 제2 구성요소를 다른 실시예에서 제1 구성요소라고 칭할 수도 있다.
본 개시의 어떤 구성요소가 다른 구성요소에 “연결되어” 있다거나 “접속되어” 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있으나, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성 요소가 다른 구성 요소에 “직접 연결되어” 있다거나, “직접 접속되어” 있다고 언급된 때에는, 중간에 다른 구성 요소가 존재하지 않는 것으로 이해되어야 할 것이다.
또한, 본 개시에 있어서 본 개시의 실시예를 도시한 일 도면이 다른 도면과 양자 택일의 실시예에 해당하지 않는 한 각 도면에 대한 설명은 서로 다른 도면에 적용될 수 있다.
이하, 도면을 참조하여 본 개시에 대하여 더욱 상세하게 설명할 것이다.
도 1은 본 발명의 일 실시예에 따른, NDN을 통한 이더리움 블록체인 클라이언트를 도시한 도면이다.
도 1을 참조하면, 제 1 그룹의 구성 요소는 기존 이더리움 클라이언트에서 수정 없이 상속된다. 제 2 그룹의 구성 요소가 본 발명에 추가되었다. 제 3 그룹의 구성 요소는 기존 클라이언트에서 수정된다. 제 1 그룹은 흰색 구성이고, 제 2 그룹은 옅은 음영을 가진 구성 요소로 사용자 인터페이스 백엔드 모듈(UIB, 170), 구성 모듈(172)를 포함한다. 제 3 그룹은 짙은 음영을 가진 구성 요소이다.
도 1의 클라이언트(100)는 계정 관리자 모듈(Account Manager, AM, 111), 체인 관리자 모듈(Chain Manager, CM 112), 상태 관리자 모듈(State Manager, SM, 113), 블록체인 가상 머신 모듈(이더리움 가상 머신, EVM, 114), 트랜잭션 풀 모듈(TxPool, 120), 채굴기 모듈(Miner, 130), 암호화 모듈(Crypto, 115), 합의 모듈(Consensus, 116)를 포함한다. 피어 관리자 모듈(Peer Manager, PM, 140), 블록 가져오기 페쳐 모듈(BlkFetcher, 150), 트랜잭션 가져오기 페쳐 모듈(TxFetcher, 160), 체인 동기화(Chain Synchronizer, CS, 162), P2P 검색 모듈(P2P Discovery, 165), 사용자 인터페이스 백엔드 모듈(UIB, 170), 구성 모듈(Config, 172), 로깅 모듈(Logging, 174), 영구 데이터베이스 모듈(PDB, 176), NDN 트랜스포트 모듈(NDN Transport, 180) 및 컨트롤러(Controller, 190)을 포함한다.
다만, 도 1의 구성은 본 발명을 설명하기 위한 예시일 뿐이다. 따라서, 도 1의 구성의 일부 또는 전체가 단일 하드웨어 또는 소프트웨어 구성요소에 통합되어 구현될 수 있음이 명백하다.
계정 관리자(AM, 111)는 계정 관리 기능을 구현할 수 있다. AM(111)은 계정 생성, 삭제, 수정, 모니터링을 할 수 있다.
체인 매니저관리자 모듈(CM, 112)는 블록체인 데이터 구조를 구현할 수 있다. CM(112)은 블록/트랜잭션 쿼리, 블록 삽입과 같은 체인 조작을 위한 인터페이스를 제공할 수 있다.
상태 관리자(SM, 113)는 체인 상태 데이터 구조를 구현할 수 있다. 상태 관리자(113)는 기록 상태를 쿼리하고, 실행 트랜잭션을 통해 새 상태를 업데이트하고, 이전 상태로 롤백하기 위한 인터페이스를 제공할 수 있다. 체인 관리자 모듈(112)은 체인 내부 데이터 구조를 조작할 때 독점적으로 이러한 인터페이스를 사용한다.
이더리움 가상 머신(EVM, 114)은 체인 상태를 업데이트하기 위해 트랜잭션을 실행하기 위한 인터페이스를 제공할 수 있다. 상태 관리자 모듈(113)은 체인 상태를 업데이트할 때 독점적으로 이러한 인터페이스를 사용한다.
트랜잭션 풀 모듈(TxPool, 120)은 다음 채굴할 블록에 포함하기 위해 버퍼링되는 트랜잭션 목록을 관리할 수 있다. 트랜잭션은 사용자-클라이언트 직접 채널을 통해 사용자로부터 수신되거나 P2P 오버레이를 통한 트랜잭션 브로드캐스팅 수단으로 다른 피어로부터 수신될 수 있다. 전자의 경우 트랜잭션이 사용자 인터페이스 백엔드 모듈(UIB, 170)에 도착하고 후자의 경우 트랜잭션이 컨트롤러(190)에 도착한다. 이러한 경우, 컨트롤러(190)는 트랜잭션을 보류 목록에 추가하도록 트랜잭션 풀 모듈(120)에 요청한다. 주기적으로 트랜잭션 풀 모듈(TxPool) 모듈은 새 트랜잭션을 다른 모듈(알림 수신을 등록한 모듈)에 알린다. 채굴기 모듈(130)은 빌딩 블록에 대한 새 트랜잭션을 수집한다. 컨트롤러(190)는 네트워크의 다른 피어에게 전달하기 위한 새로운 트랜잭션을 학습한다.
채굴기 모듈(Miner, 130)은 채굴 기능을 구현할 수 있다. 채굴기 모듈(130)은 트랜잭션 풀 모듈(120) 에서 새로운 트랜잭션을 수집하고 새 블록을 구축할 수 있다. 블록 채굴 프로세스과정 동안 채굴기 모듈(130)은 현재 채굴 작업을 새로 고치기 위해 체인 관리자 모듈(112)의 체인 이벤트(새 블록이 삽입되었을 때)와 트랜잭션 풀 모듈(120)의 이벤트(새 트랜잭션 배치를 사용할 수 있을 때)를 수신할 수 있다.
암호 모듈(Crypto, 115)은 공개, 개인 키 유틸리티, 해싱, 및 서명 서명/검증과 같은) 기본 암호화 프리미티브를 구현할 수 있다.
합의 모듈(Consensus, 116)은 블록체인의 합의 프로토콜을 구현할 수 있다. 합의 모듈(116)은 채굴기 모듈(130) 및 체인 관리자 모듈(112)에 대해 다음 인터페이스를 제공할 수 있다.
합의 모듈(116)은 작업 증명(Proof of Work, POW) 솔루션을 찾아서 발견 및 발견된 솔루션 검증한다. 합의 모듈(116)은 블록 생성과 관련하여, 블록 헤더 생성, 블록 바디 주입, 및 맞춤형 정보의 추가로 블록 생성을 마무리한다. 블록 검증과 관련하여, 합의 모듈(116)은 블록 헤더, 블록 바디, 작업 증명을 검증한다.
피어 관리자 모듈(PM, 140)는 노드가 자신의 피어를 유지하는 방법을 구현할 수 있다. 피어 관리자 모듈(140)은 데이터를 알리고 가져올 피어를 선택하기 위해 컨트롤러 모듈(190), 블록 페쳐 모듈(150) 및 체인 동기화 모듈(162)에서 사용하는 피어 추가, 제거를 위한 인터페이스를 구현할 수 있다.
블록 페쳐 모듈(BlkFetcher, 150)는 블록을 가져오는 기능을 구현할 수 있다. 클라이언트가 다른 피어로부터 블록 알림을 수신하면 블록 페쳐 모듈(150)는 알림을 전달해 준 피어, 여기서, 본 발명은 이를 “알림 피어”로 칭함)에서 블록을 가져오고 블록 헤더의 유효성을 검사한 다음 로컬 체인에 블록을 추가하거나 블록이 유효하지 않은 경우 삭제하거나 다음을 위해 캐시할 수 있다.
트랜잭션 페쳐 모듈(TxFetcher, 160)는 트랜잭션을 가져오는 기능을 구현할 수 있다. 클라이언트가 다른 피어로부터 트랜잭션 알림을 수신하면 트랜잭션 페쳐 모듈(160)는 알림 피어에서 트랜잭션을 가져온 다음 트랜잭션 풀 모듈(120)에 추가할 수 있다.
체인 동기화 모듈 (Chain Synchronizer, CS, 162)는 블록체인 동기화 기능을 구현할 수 있다. 체인 동기화 모듈(162)는 클라이언트 로컬 체인의 동기화 상태를 주기적으로 확인하고 동기화 손실이 의심되는 경우 체인 동기화 프로토콜의 시작을 트리거할 수 있다. 체인 동기화 모듈(162)는 체인 동기화 과정에서 컨트롤러(190)의 인터페이스를 통해 블록체인 데이터를 가져온다. 체인 동기화 모듈(162)는 피어 관리자 모듈(140)에서 가져올 피어를 선택한다. 합의 모듈의 인터페이스를 사용하여 가져온 블록의 유효성을 검사한다. 그리고 체인 관리자의 인터페이스를 사용하여 블록을 삽입한다.
P2P 디스커버리 모듈(P2P Discovery, 165)은 P2P 오버레이 기능을 제공한다. 즉, 클라이언트가 네트워크를 구성하기 위해 네트워크 내의 다른 피어를 발견할 수 있다. P2P 디스커버리 모듈(165)은 라우팅 테이블을 구축하기 위해 Kademlia와 같은 P2P 알고리즘을 구현할 수 있다. 그 라우팅 테이블에는 피어 목록이 있을 수 있다. 새로 발견된 피어는 컨트롤러(190)를 통해 피어 관리자 모듈(140)에 통보되므로 피어 관리자 모듈(140)은 블록체인 메시지를 교환하는 데 사용할 수 있는 특정 수의 피어 목록을 유지할 수 있다.
사용자 인터페이스 백엔드(UIB, 170)는 블록체인 클라이언트의 모니터링 및 제어 API를 지원하기 위해 백엔드 서비스를 구현할 수 있다. 사용자 인터페이스 백엔드 모듈(UIB, 170)는 다양한 통신 채널, 예를 들면, WebSocket, 웹 서비스, HTTP을 통해 클라이언트 사용자로부터 명령을 수신하고 백엔드 기능을 트리거하여 명령을 처리한 다음 사용자에게 응답을 반환할 수 있다.
구성 모듈 (Config, 172) 은 입력 인자, 구성 파일 및 제네시스 파일에 대한 구문 분석을 제공할 수 있다.
로깅 모듈(Logging, 174)은 테스트 및 실험 연구를 돕기 위해 로깅 기능을 제공할 수 있다. 로깅 기능이 필요한 다른 모든 모듈에서 사용된다.
영구 데이터베이스 모듈(PDB, 176)는 블록체인 및 다른 데이터 구조, 예를 들어, 대기 중인 트랜잭션, 연결된 피어를 검색, 저장하기 위한 키-값(key-value) 백엔드 데이터베이스에 대한 인터페이스를 제공할 수 있다. 영구 데이터베이스 모듈(176)은 블록체인, 트랜잭션 및 체인 상태를 영구 저장소에 저장하여 상태 관리자, 체인 관리자 및 트랜잭션 풀 모듈(TxPool)에서 사용할 수 있다. 실행이 시작될 때 블록체인 데이터 구조와 캐시된 상태는 영구 데이터베이스 모듈(176)에 의해 영구 저장소로부터 로드된다.
NDN 트랜스포트 모듈(NDNTrans, 180) 은 NDN 기반 트랜스포트 계층으로서 NDN 패킷 송수신, NDN 패킷 구성, NFD에 NDN 프리픽스 알림(announcement)을 실행한다.
컨트롤러(controller, 190)는 다른 모듈에 대한 정보 허브 역할을 할 수 있다.
컨트롤러(190)는 NDN 트랜스포트 모듈(180)에서 전송 메시지를 수신하여 트랜잭션 페쳐 모듈(160), 블록 페쳐 모듈 (150) 및 체인 동기화 모듈 (162)를 포함한 다른 모듈이 처리하도록 전달한다.
컨트롤러(190)는 트랜잭션 페쳐 모듈(160), 블록 페쳐 모듈(150) 및 체인 동기화 모듈(162)에서 사용하는 트랜잭션, 블록 헤더, 블록 바디와 같은 블록체인 데이터를 가져오기 위한 인터페이스를 제공한다.
컨트롤러(190)는 피어 관리자 모듈(140)에서 제공하는 인터페이스를 통한 이더리움을 실행하고, 피어 간의 피어 관리를 한다.
다음으로, 데이터에 대한 이름 부여 및 전송(NDN naming and transport)에 대하여 설명한다.
모든 메시지 또는 데이터 객체는 NDN 이름이 할당되어야 한다. 애플리케이션 이름은 네트워크 이름과 분리될 수 있다. 응용 프로그램 이름은 호스트의 응용 프로그램에서 데이터 개체를 고유하게 식별하기 위한 위치 독립적인 이름이고, 네트워크 이름은 호스트에 NDN 인터레스트 패킷을 올바르게 전달하는 데 사용되는 호스트를 고유하게 식별하는 위치 종속적 이름이다. 따라서 NDN 인터레스트 패킷을 전송하기 전에 네트워크 이름을 미리 알고 있어야 한다고 가정한다.
도 2는 본 개시의 일 실시예에 따른, NDN 패킷에 이름을 할당하는 실시 예를 도시한 도면이다.
도 2를 참조하면, 애플리케이션 ndn-ethereum 클라이언트는 ETRI 네트워크 연구 부서의 Tung이 소유한 호스트에서 실행되고 있다. 호스트 이름은 전역적으로 라우팅 가능한 이름(예: /etri/dept-net/tung)이다. 애플리케이션에 있는 각 데이터 객체의 이름은 애플리케이션 이름 프리픽스(예: /ndn-ethereum)로 시작하고 그 뒤에 메시지 경로와 메시지에 대한 해시값이 온다. 여기서 메시지 경로는 RPC(remote procedure call), txannounce(트랜잭션 및 블록 알림), 상태, 데이터(트랜잭션 및 블록)와 같이 다양한 메시지 유형을 나타낸다.
도 3은 본 개시의 일 실시 예에 따른, NDN 인터레스트 패킷과 데이터 패킷의 포맷을 도시한 도면이다. 도 3은 도 3(a) 및 도 3(b)를 포함한다.
도 3(a)는 인터레스트 패킷을 도시한 도면이다. 도 3(b)는 데이터 패킷을 도시한 도면이다.
도 3(a)를 참조하면, NDN 인터레스트 패킷의 경우 메시지 내용은 먼저 AppParams 요소에 바이트 배열로 이진 인코딩된다. 바이트 배열의 해시 값도 이름의 일부가 된다. 메시지의 NDN 이름은 전역적으로 라우팅할 수 없으므로 인터레스트 패킷의 ForwardingHint를 통해서 패킷을 목적지로 라우팅한다.
ForwardingHint에는 메시지를 수신하여 처리할 수 있는 응용 프로그램을 실행하고 있는 전역적으로 라우팅 가능한 호스트 이름이 들어가게 된다.
도 3(b)를 참조하면, NDN 데이터 패킷의 경우 메시지 내용이 Content 요소에 바이트 배열로 이진 인코딩된다.
도 4는 본 개시의 일 실시 예에 따른, 위치 독립적 데이터 오브젝트를 찾아가는 실시 예를 도시한 도면이다.
도 4를 참조하면, 전역적으로 도달 가능한 네트워크 도메인(etri)의 하위 네트워크 도메인(dept-net)에 위치한 피어(tung)에는 이름 프리픽스 /etri/dept-net/가 부여된다. tung이 피어에게 해시 값이 0x32870…3인 데이터 오브젝트에 대해서 알림을 하여 다른 도메인 (예를 들어 /ucla 도메인)에 있는 피어 alex와 같이 다른 피어가 그 정보를 알고 있는 상황을 가정한다.
도메인(/ucla)에 있는 피어(alex)는 이름이 /ndn-ethereum/data/32870…3인 인터레스트 패킷을 네트워크로 전송한다. 패킷은 ForwardingHints에 해당 데이터 오브젝트의 생산자의 라우팅 가능한 이름 프리픽스를 갖는다. 이 경우 /etri/dept-net/tung이 거기에 해당한다. 이름 프리픽스는 도메인 이름으로 시작하고 데이터 오브젝트 생산자의 도메인 이름은 코어 네트워크의 모든 NDN 노드(NFD)에 전역적으로 알려지게되기 때문에 인터레스트 패킷은 결국 생산자 도메인 네트워크의 게이트웨이 NDN 노드(NFD)를 통해 생산자에게 도착한다.
이후 다른 도메인인 /kisti 및 /kaist에 있는 다른 피어도 동일한 데이터를 요청할 수 있다. /kisti 도메인 피어의 요청은 해당 도메인의 게이트웨이 라우터에서 결합(aggregate)되고 /kaist 도메인 피어의 요청은 /etri 도메인 게이트웨이 라우터에서 결합된다. 반환 데이터 패킷은 멀티캐스팅 및 네트워크 내 캐싱이 지원되는 이러한 전달 경로로 다시 전송된다.
다음으로 피어 검색(Peer Discovery)에 대하여 설명한다.
모든 P2P 오버레이 네트워크는 블록체인 네트워크에 사용할 수 있다. Ethereum은 P2P 네트워크를 생성하기 위해 Kademlia DHT(Distributed Hash Table)를 사용한다.
본 발명의 일 실시예에서 Kademlia가 사용될 수 있다. Kademlia 알고리즘 자체는 NDN 전송 네트워크에서도 변경되지 않는다. 그러나 RPC 기본 요소는 NDN 네트워크를 통해서 이루어져야 한다. 이는 인터레스트/데이터 통신 모델을 사용하여 이루어지며, 클라이언트는 RPC 호출 요청을 인터레스트에 포함하고 그 RPC 호출에 대한 서버 응답은 해당 데이터 패킷으로 전달한다.
본 발명의 일 실시예에서, 각 블록체인 클라이언트는 블록체인 클라이언트 간에 생성되는 P2P 오버레이 네트워크에서 전역적으로 고유한 '노드 아이덴티티'를 가질 수 있다. '노드 아이덴티티'는 고정 길이의 임의 비트 문자열일 수 있다. 보다 구체적으로, 각 블록체인 클라이언트는 한 쌍의 공개-개인 암호화 키를 소유할 수 있다.
본 발명의 일 실시예에서는 '노드 아이덴티티'는 공개 키의 해시(예: SHA1) 값을 사용할 수 있으며, 피어 전송 주소와 같은 기타 정보를 공개 키에 결합한 값에 대한 해시를 사용할 수 있다.
본 발명의 일 실시예에서, NDN 전송 네트워크를 통한 전달에 사용되는 각각의 P2P 메시지에는 NDN 이름이 할당된다. 이 NDN 이름은 대상 P2P 클라이언트에 전역적으로 라우팅할 수 있거나 그렇지 않을 수 있다. 만약 그렇지 않은 경우 전역적으로 라우팅 가능한 다른 이름을 대상으로 전달하기 위한 ForwardingHint로 사용할 수 있다. 인터레스트 패킷에 ForwardingHint가 있는 경우에는 ForwardingHint에 대한 전달 정보에 따라 패킷을 전달한다.
일 실시예에서, RPC(원격 절차 호출)는 도 3에 따른 인터레스트 및 데이터 패킷으로 구현될 수 있다. RPC 명령(Ping, FindNode) 및 해당 매개변수는 인터레스트 패킷의 ApplicationParameters (AppParams) 요소에서 이진 코딩될 수 있다. RPC 명령의 응답 데이터는 반환 데이터의 내용(Content) 부분에 이진 코딩될 수 있다. RPC 명령에 대한 인터레스트 패킷의 이름은 인터레스트 이름 끝에 응용 매개변수의 해시 값을 추가할 수 있다.
도 5는 본 개시의 일 실시 예에 따른, RPC 메시지의 실시 예를 도면이다. 도 5는 도 5(a) 및 도 5(b)를 포함한다.
도 5(a)는 인터레스트 패킷을 도시한 도면이다. 도 5(b)는 데이터 패킷을 도시한 도면이다.
도 5(a)를 참조하면, RPC 요청 메시지에는 보낸 사람의 노드 레코드, 요청의 명령 및 매개 변수 이름, 임의의 nonce 값이 포함된다. nonce 값은 요청에 대한 응답이 항상 최신 상태(캐싱 없음)가 되도록 요청의 NDN 이름의 고유성을 보장하기 위해 포함된다.
도 5(b)를 참조하면, 응답 메시지에는 응답 발신자의 노드 레코드, 요청 명령의 실행 상태를 나타내는 오류 값, 실행 결과가 포함된다. nonce 값은 데이터 패킷 이름에 이미 인코딩되어 있으므로 응답 메시지에 별도로 필요하지 않는다.
다음으로, 피어 관리(Peer Management)에 대하여 설명한다.
다른 피어와 블록체인 데이터를 교환하기 전에 노드는 피어를 신뢰할 수 있는 파트너로 수락해야만 한다. 클라이언트는 데이터 알림 및 검색을 위해 신뢰할 수 있는 피어 목록을 관리한다. 이 목록은 P2P 디스커버리 모듈이 유지하는 라우팅 테이블과 다르며, 라우팅 테이블 항목의 하위 집합으로 구성된다. 두 피어는 신뢰할 수 있는 파트너가 될 수 있는지 확인하고 블록체인 상태를 알기 위해 한 쌍의 상태 메시지를 서로 전송한다. 메시지는 노드 레코드, 제네시스 블록의 해시를 포함한 노드의 로컬 블록체인 상태, 마지막 블록의 해시 및 블록 번호, 체인의 현재 총 난이도 등의 정보를 포함한다.
도 6은 본 개시의 일 실시 예에 따른, NDN 패킷에서 상태 메시지를 캡슐화하는 것을 도시한 도면이다. 도 6은 도 6(a) 및 도 6(b)를 포함한다.
도 6(a)는 인터레스트 패킷을 도시한 도면이다. 도 6(b)는 데이터 패킷을 도시한 도면이다.
도 6(a)를 참조하면, 노드가 자신의 체인 상태를 피어에게 알리고자 할 때 NDN 인터레스트 패킷에 상태 메시지(StatusMsg)를 삽입하여 피어에게 전송한다. 패킷을 수신할 때 피어는 보낸 피어에게 체인 상태를 알리고 싶어할 수도 있다.
도 6(b)를 참조하면, 응답 데이터 패킷에 상태 메시지(StatusMsg)를 삽입하여 다시 전송한다.
다음으로, 트랜잭션 및 블록 전파(Transaction and Block Propagation)에 대하여 설명한다.
블록체인은 분산 데이터베이스이므로 데이터 브로드캐스팅이 주요 통신 모델이다. 트랜잭션이나 블록과 같이 새로 생성된 데이터는 원본에서 모든 다른 노드로 브로드캐스트된다. 플러딩 공격 방지를 위해 P2P 오버레이를 통한 브로드캐스팅이 필요하지만 동일한 데이터 패킷이 중복 전송될 수 있어 메커니즘이 효율적이지 않는다.
본 발명에서는 P2P의 플러딩 공격 방지 기능을 유지하면서 NDN의 네트워크 내 캐싱 및 기본 멀티캐스팅 기능을 활용할 수 있는 알림-당김 (Announce-pull) 데이터 전파 모델을 설계한다. 이 모델은 블록체인 네트워크에서 브로드캐스트되는 일반 데이터 개체에 적용될 수 있다.
브로드캐스팅 방식의 주요 아이디어는 P2P 오버레이를 통해 새로운 데이터 개체의 가용성을 알리고 이점을 최대한 활용하는 NDN의 당김(pull) 방식을 사용하여 데이터를 검색하는 것이다. 개체는 위치 독립적인 전역적으로 고유한 이름을 갖는다.
도 7은 본 개시의 일 실시 예에 따른, 알림-당김(Announce-Pull) 데이터 브로드캐스팅(data broadcasting)방법을 도시한 도면이다.
도 7을 참조하면, 제 1 피어(100)가 제 1 데이터를 포함하고 있음을 암시하는 제 1 인터레스트 패킷 및 알림 메시지(10)를 제 2 피어(200)로 전송한다(S110).
제 1 피어(100)가 상기 제 1 인터레스트 패킷과 내용이 동일하고 수신하는 피어가 다른 제 2 인터레스트 패킷 및 상기 알림 메시지(20)를 제 3 피어(300)로 전송한다 (S120). 여기서, 알림 메시지는 트랜잭션 알림 메시지 및 블록 알림 메시지 중 적어도 하나를 포함한다.
제 1 피어(100)가 제 2 피어(200)로부터 제 1 데이터를 요청하는 제 3 인터레스트 패킷(30)을 수신한다(S130).
제 1 피어(100)가 제 3 피어(300)로부터 상기 제 1 데이터를 요청하는 제 4 인터레스트 패킷을 수신한다(S140).
제 1 피어(100)가 제 3 인터레스트 패킷(30)에 대응하는 제 1 데이터 패킷(40)을 제 2 피어(200)로 전송한다(S150).
제 1 피어(100)가 상기 제 4 인터레스트 패킷에 대응하는 상기 제 1 데이터 패킷을 제 3 피어로 전송한다(S160).
여기서, 제 3 인터레스트 패킷과 제 4 인터레스트 패킷은 중간 노드(400)에서 결합(aggregate)된다.
즉, 중간 노드(400)는 제 3 인터레스트 패킷과 제 4 인터레스트 패킷을 결합(aggregate)하여, 제 1 피어(100)에게 제 3 인터레스트 패킷과 제 4 인터레스트 패킷이 결합된 인터레스트 패킷을 전송할 수 있다. 여기서, 결합의 주체는 중간 노드(400)이다.
그리고, 제 1 데이터 패킷(40)은 상기 중간 노드(400)에서 캐싱(caching)된다. 여기서, 캐싱(caching)은 이전 트랜잭션 중에 알게된 정보를 이후의 트랜잭션을 처리하는데 사용하는 정보 복제의 한 형태를 의미한다.
즉, 중간 노드(400)는 제 1 데이터 패킷(40)을 저장하고, 우선적으로 제 1 데이터 패킷(40)을 제 2 피어(200)로 전송한다. 그리고, 나중에 필요시, 캐싱된 제 1 데이터 패킷(40)을 제 3 피어(300)로 전송한다. 여기서, 캐싱의 주체는 중간 노드이다.
여기서, 피어는 단말 간의 맺어진 관계를 의미하고, 구체적으로, P2P오버레이 망에서 연결을 한 관계를 의미한다. 구체적으로, 피어는 블록체인 네트워크에서 자신과 관계를 맺은 상대 단말 노드를 의미한다. 예를 들어, 제 1 피어와 관계를 맺은 상대 단말 노드는 제 2 피어, 제 3 피어가 될 수 있다. 중간 노드의 속성은 NDN 노드이다.
다음으로, 제 2 피어(200)는 캐싱된 상기 제 1 데이터 패킷(40)을 상기 중간 노드(400)로부터 수신하면, 수신된 상기 제 1 데이터 패킷(40)의 데이터 무결성을 검증한다(S170).
제 2 피어(200)는 NDN 이름에 포함된 해시값과 수신된 상기 제 1 데이터 패킷의 해시값을 기초로 데이터 무결성을 검증한다.
제 2 피어(200)의 블록 페쳐 모듈(150)와 트랜잭션 페쳐 모듈(160)은 데이터 무결성을 검증한다. 제 2 피어(200)는 NDN 이름에 포함된 해시값과 수신된 상기 제 1 데이터 패킷의 해시값이 동일하면, 데이터 무결성을 검증으로 결정한다. 제 2 피어(200)는 NDN 이름에 포함된 해시값과 수신된 상기 제 1 데이터 패킷의 해시값이 동일하지 않으면, 데이터 무결성을 실패로 결정한다.
제 2 피어(200)는 검증된 제 1 데이터 패킷을 다른 피어로 알림(announce)한다(S180).
제 3 피어(300)는 캐싱된 상기 제 1 데이터 패킷(40)을 상기 중간 노드(400)로부터 수신하면, 제 1 데이터 패킷의 데이터 무결성을 검증한다(S190).
제 3 피어(300)는 검증된 제 1 데이터 패킷을 다른 피어로 알림(announce)한다(S200).
알림(Announcement)에 대하여 설명한다.
피어가 데이터 개체(또는 그 목록)를 브로드캐스트하려고 할 때 인터레스트 패킷을 통해서 알림을 피어에게 보냅니다. 알림에는 데이터의 ID로 사용할 수 있는 데이터 개체의 해시 값이 포함된다. 알림은 각 피어에게 전달되므로 고유한 이름을 지정해야 한다. 하지만 내용은 동일하다.
도 8은 본 개시의 일 실시 예에 따른, 알림 메시지의 실시 예를 도시한 도면이다.
도 8을 참조하면, 알림 메시지에는 트랜잭션 알림 메시지(810)와 블록 알림 메시지(820)의 두 가지 유형이 있다.
트랜잭션 알림 메시지(810)에 대하여 설명한다.
이 메시지는 클라이언트 노드에서 트랜잭션 풀에 있는 완료되지 않은 트랜잭션을 피어에게 알린다. 노드는 새로운 피어를 수락한 후 그 피어에게 이 메시지를 보내서 보류 중인 트랜잭션을 알린다. 메시지에는 트랜잭션 해시 목록이 포함되어 있다. 해시 값의 개수는 NDN 패킷의 허용 가능한 크기보다 크지 않도록 제한되어야 한다. 보류 중인 트랜잭션의 수가 패킷 최대 크기보다 크게 되면 여러 개의 알림 메시지로 분할될 수 있다. 발신자 정보는 알림 발신자의 노드 레코드이다. 수신자는 인증을 위해 노드 레코드의 유효성을 검사해야 한다.
type TxAnnMsg struct {
Sender NodeRecord // signed node record of sender
Hashes []common.Hash //array of hash values
}
다음으로, 블록 알림 메시지(820)에 대하여 설명한다.
이 메시지는 피어에게 새로운 채굴 블록을 알리기 위해 클라이언트 노드에서 전송된다. 이 메시지에는 새로운 블록의 해시와 해당 블록 번호가 포함된다. 트랜잭션 알림 메시지와 마찬가지로 인증을 위해 보낸 사람의 노드 레코드가 포함되어야 한다.
type BlkAnnMsg struct {
Sender NodeRecord // signed node record of sender
Bhashes common.Hash //block hash
Bnumber unit64 //block number
다음으로, 데이터 당김(Date Pull)에 대하여 설명한다.
알림을 수신한 피어는 인터레스트/데이터 당김(pull) 메커니즘을 통해 알림을 보낸 피어로부터 데이터를 가져온다. 알림으로 전달된 각 데이터 해시에 대해 전역적으로 유일한 이름을 가진 인터레스트 패킷을 만들어 알림을 보낸 피어로 전송한다. 알림으로 전달된 각 데이터의 해시는 인터레스트 이름의 일부로 직접 사용하거나 다른 간접 메커니즘을 사용하여 해시에서 이름을 만들어 낼 수 있다. 동일한 데이터를 요청하는 인터레스트 패킷은 동일한 이름을 갖기 때문에 알림을 보낸 피어로 전달되는 여러 개의 인터레스트 패킷은 중간 노드에서 결합(aggregate)될 수 있다. 그리고 인터레스트에 대해 반환되는 데이터 패킷은 각 노드에서 후속 검색을 위해 캐시될 수 있다.
피어가 데이터를 성공적으로 수신하면, NDN 이름에 포함된 해시값과 전달된 데이터에 대한 해시 계산 결과값을 비교하여 데이터 무결성을 확인해야 한다.
피어는 데이터가 유효한 경우에만 다른 피어에게 데이터를 알린다. 따라서 잘못된 데이터 패킷은 플러딩 공격을 방지하는 정직한 피어에서 차단된다.
도 9는 본 개시의 일 실시 예에 따른, 데이터 요청과 그 응답 메시지의 실시 예를 도시한 도면이다. 도 9는 도 9(a) 및 도 9(b)를 포함한다.
도 9(a)는 인터레스트 패킷을 도시한 도면이다. 도 9(b)는 데이터 패킷을 도시한 도면이다.
데이터 요청(Data Request)에 대하여 설명한다.
도 9(a)를 참조하면, 데이터 요청 메시지에는 트랜잭션 요청 메시지, 블록 요청 메시지, 블록 헤더 요청 메시지의 세 가지 유형이 있다. 각 유형의 요청 메시지는 일반 요청 메시지로 래핑된다. 그리고 일반 메시지는 NDN 인터레스트 패킷에 포함된다. 이 래핑 방식을 사용하면 모든 종류의 요청 메시지를 제공하는 데 하나의 프리픽스만 사용할 수 있어 구현을 단순화할 수 있다.
메시지에는 두 가지 요소가 있다. qtype은 내부 요청 유형을 지정한다. query는 요청 유형에 따라 다른 요청 데이터에 대한 일반 포인터이다.
type DataQuery struct {
qtype byte
query interface{}
}
다음으로, 트랜잭션 요청 메시지(Transaction Request Message)에 대하여 설명한다.
이 메시지는 처리되지 않고 아직 남아 있는 트랜잭션을 요청하기 위해 전송된다. 여기에는 트랜잭션의 해시가 포함된다. 수신된 알림에서 미리 알려진다.
type TxQuery struct {
Thash common.Hash // Transaction hash value
}
다음으로, 블록 요청 메시지 (Block Request Message)에 대하여 설명한다.
이 메시지는 블록, 헤더 또는 바디를 요청하기 위해 전송된다. 여기에는 블록의 해시와 블록 번호가 포함되며, 두 가지 정보 모두 요청하는 피어가 미리 알고 있다. 예를 들면, 블록 알림 메시지를 통해서 미리 알고 있다.
type BlockQuery struct {
Bhash common.Hash //256-bit
Bnum uint64
Part byte // flag: whole block/header/body
}
다음으로, 블록 헤더 요청 메시지(Block Headers Request Message)에 대하여 설명한다.
이 메시지는 체인 동기화 절차 중에 피어로부터 정규 체인의 헤더 배치를 요청하기 위해 전송된다. 이 메시지에는 첫 번째 블록의 인덱스, 검색할 헤더 수, 두 개의 연속 검색 헤더 사이에서 건너뛸 헤더 수를 정의하는 skip 매개변수가 포함된다.
type HeadersQuery struct {
From uint64
Count uint64
Skip uint64
}
다음으로, 데이터 응답(Data Response)에 대하여 설명한다.
도 9(b)를 참조하면, 요청 쿼리에 대한 응답 메시지를 통해 쿼리된 데이터 개체가 전달된다. 특히 트랜잭션은 트랜잭션 요청에 대한 응답 메시지이다. 헤더 목록은 헤더 요청에 대한 응답 메시지이다. 블록 헤더 또는 바디는 블록 요청에 대한 응답 메시지이다. 응답 메시지는 NDN 데이터 패킷 내에 캡슐화되기 전에 이진 인코딩된다.
도 10은 본 개시의 일 실시 예에 따른, 세그먼트 데이터의 응답 메시지의 실시 예를 도시한 도면이다.
도 10을 참조하면, 단일 NDN 데이터 패킷에 요청된 데이터 개체에 대한 충분한 공간이 없는 경우 오브젝트 바이너리는 조각으로 분할되며 개별 조각 각각은 하나의 데이터 패킷 내에 수용하기에 충분히 작다. 세그먼트 번호는 단조 증가 형태로 번호가 매겨진다. 세그먼트 번호는 해당 인터레스트 패킷 이름의 일부가 된다. 각 세그먼트에 대해 세그먼트가 최종 세그먼트인지 여부를 나타내는 부울 플래그가 끝에 별도의 바이트로 추가된다. 부울 플래그를 포함한 세그먼트는 NDN 데이터 패킷의 콘텐츠 필드에 포함된다. 데이터 패킷 이름은 해당 인터레스트 패킷의 이름과 동일해야 한다.
오브젝트의 분할 여부와 관계없이 첫 번째 인터레스트 패킷의 이름에는 세그먼트 번호가 없다. 첫 번째 세그먼트에는 암시적으로 0을 가정한다. 세그먼트를 받은 후 요청자는 마지막 바이트인 부울 플래그를 확인하여 더 많은 세그먼트를 가져와야 하는지 아닌지를 확인한다. 부울 플래그가 세그먼트가 더 남아있음을 나타내면 세그먼트 번호를 하나 증가시켜서 다음 요청을 보낸다. 이 과정은 마지막 세그먼트가 수신될 때까지 반복된다. 마지막 세그먼트까지 모두 수신 후 모든 세그먼트를 연결하여 완전한 바이너리 오브젝트를 재구성한다.
다음으로, 서비스 플로우(Service Flow)에 대하여 설명한다.
본 발명의 일실시예에 따라 처리되는 클라이언트 프로그램에서의 주요 정보 처리 흐름을 보여준다. 주요 흐름만을 표시하며 이 절차를 기반으로 좀 더 상세한 흐름이 더 있을 수 있다.
피어 디스커버리 및 관리(Peer Discovery and Management)에 대하여 설명한다.
새로운 피어가 Kademlia 라우팅 테이블에 추가될 때마다 P2P 디스커버리 모듈은 컨트롤러 모듈에 이벤트를 전송하여 새로 사용 가능한 피어를 알린다. 컨트롤러는 관리되는 피어 목록에 피어를 더 추가해야 하는지 확인한다. 사용 가능한 슬롯이 있는 경우 관리되는 피어 목록에 파트너를 추가하기 위해 원격 피어와 메시지 핸드 셰이크를 수행한다.
도 11은 본 개시의 일 실시 예에 따른, 피어 관리 프로세스를 도시한 도면이다.
도 11을 참조하면, 제 1 피어(100)의 P2P 핸들러(101)는 원격 피어인 제 2 피어(200)가 P2P 디스커버리 모듈(165)의 라우팅 테이블에 추가되면 컨트롤러(190) 에 이벤트를 알린다(S1101).
컨트롤러(190)는 클라이언트 실행 시작 시 구성 모듈에 의해 설정된 수용할 수 있는 최대 피어 수를 갖고 있다. 피어 목록에 새로운 피어를 추가할 수 있는지 확인하고, 추가가 가능하면, NDN 트랜스포트 모듈(180)에 제 2 피어(200)로 블록체인 상태를 알리는 메시지를 보내도록 요청한다(S1102).
NDN 트랜스포트 모듈(180)은 상태 메시지(10)를 제 2 피어(200)로 전송한다(S1103).
제 2 피어(200)의 NDN 트랜스포트 모듈(280)이 상태 메시지(10)를 수신하고, 컨트롤러(290)에 상태 메시지(10)를 처리하도록 알린다(S1104).
제 2 피어(200)의 컨트롤러(290)는 메시지 송신자인 제 1 피어(100)의 레코드와 수신된 상태 메시지(10)의 유효성을 확인한다. 제 1 피어(100)가 수락할 수 있는 경우, 제 2 피어(200)의 피어 관리자 모듈(240)에 제 1 피어(100)가 피어 관리 목록에 추가되도록 요청한다(S1105).
제 2 피어(200)의 피어 관리자 모듈(240)은 피어 목록에 제 1 피어(100)을 추가한다(S1106).
제 2 피어(200)의 컨트롤러(290)는 제 2 피어(200)의 NDN 트랜스포트 모듈(280)에 블록체인 상태를 알리는 메시지를 제 1 피어(100)에게 보내도록 요청한다(S1107).
제 2 피어(200)의 NDN 트랜스포트 모듈(280)은 상태 메시지(20)를 제 1 피어(100)로 전송한다(S1108).
제 1 피어(100)의 NDN 트랜스포트 모듈(180)은 상태 메시지(20)를 수신하여 제 1 피어(100)의 컨트롤러(190)에 상태 메시지(20)를 전달한다(S1109).
제 1 피어(100)의 컨트롤러(190)는 제 2 피어(200)의 메시지와 레코드를 확인하고, 제 1 피어(100)의 피어 관리자 모듈(140)에 제 2 피어(200)를 추가하도록 요청한다(S1110).
제 1 피어(100)의 피어 관리자 모듈(140)은 피어 목록에 제 2 피어(200)를 추가한다(S1111).
각 피어의 피어 관리자 모듈은 새로운 피어를 추가한 후 새 동기화 라운드가 시작되어야 하는지 확인할 수 있도록 체인 동기화 모듈에 피어 추가 이벤트를 알린다.
트랜잭션 전파(Transaction Propagation)에 대하여 설명한다.
클라이언트 노드는 두 가지 방법으로 새로운 트랜잭션을 수신한다. 사용자가 트랜잭션을 직접 보낸 후 사용자 인터페이스 백엔드 모듈(UIB)를 통해서 수신되거나, 다른 피어가 전파한 트랜잭션이 컨트롤러를 통해서 수신된다. 트랜잭션이 수신되면 클라이언트는 로컬 블록체인 상태를 기반으로 트랜잭션의 유효성을 확인한다. 트랜잭션이 이미 체인에 포함되어 있거나 유효하지 않은 경우 폐기된다. 그렇지 않으면 트랜잭션은 클라이언트의 피어 목록에 있는 다른 피어로 전달된다. 또한 클라이언트가 채굴을 실행하는 경우 트랜잭션은 채굴될 블록에 포함하기 위해 채굴자 모듈(130)에게 전송된다.
도 12는 본 개시의 일 실시 예에 따른, 트랜잭션 처리 프로세스를 도시한 도면이다. 본 발명은 트랜잭션 처리 장치(미도시)에 의하여 수행된다.
도 12를 참조하면, 제 1 피어(100)에서, 사용자 인터페이스 백엔드 모듈(UIB, 170)이 트랜잭션을 트랜잭션 풀 모듈(120)로 전달한다(S1201).
트랜잭션 풀 모듈(120)은 현재 보류 중인 트랜잭션 목록에 트랜잭션을 추가한다(S1202).
트랜잭션 풀 모듈(120)은 추가된 트랜잭션을 컨트롤러(190)에 알려준다 (S1203).
트랜잭션 풀 모듈(120)은 동시에 새로운 트랜잭션이 추가될 때마다 채굴기 모듈(130)에 트랜잭션을 알린다(S1203-1), 트랜잭션 풀 모듈(120)은 피어가 채굴 모드에서 실행 중인 경우, 채굴기 모듈(130)에 트랜잭션을 알린다.
채굴기 모듈(130)은 현재 채굴 진행 중인 작업을 멈추고 새로 추가된 트랜잭션을 포함한 후, 다시 새로운 블록을 채굴하는 작업을 시작한다(S1204-1).
컨트롤러(190)는 제 2 피어(200)에게 트랜잭션 알림을 보내도록 NDN 트랜스포트 모듈(180)에 요청한다(S1204).
NDN 트랜스포트 모듈(180)은 자신의 모든 피어에게 트랜잭션 알림 메시지(10)를 전송한다(S1205).
제 2 피어(200)가 트랜잭션 알림 메시지(10)를 제 1 피어(100)로부터 수신하면, 상기 트랜잭션 알림 메시지(10)를 컨트롤러(290)로 전달한다(S1206).
컨트롤러(290)는 트랜잭션 알림 메시지(10)에 대응하는 트랜잭션을 제 1 피어(100)로부터 가져오는 명령을 트랜잭션 페쳐 모듈(260)로 전달한다(S1207).
구체적으로, 컨트롤러(290)는 트랜잭션 알림 메시지(10)를 보낸 제 1 피어(100)의 메시지와 레코드를 확인한다.
트랜잭션 알림 메시지가 정상인 경우, 컨트롤러(190)는 NDN 트랜스포트 모듈(180)을 통해 상기 제 1 피어(100)의 알림에 대한 응답을 상기 제 1 피어(100)로 전송한다. 여기서, 컨트롤러(190)는 상기 제 1 피어의 알림에 대한 응답을 더미 데이터 패킷(콘텐트 없음)으로 상기 제 1 피어(100)로 전송할 수 있다. 컨트롤러(290)는 응답을 하지 않을 수 있다.
컨트롤러(290)는 각 해시 값 목록을 트랜잭션 알림 메시지(10)에서 추출하고, 해당 트랜잭션을 제 1 피어(100)로부터 가져오는 명령을 트랜잭션 페쳐 모듈(260)로 전달한다(S1207).
트랜잭션 페쳐 모듈(260)은 트랜잭션 요청 신호를 컨트롤러(290)로 전달한다(S1208).
트랜잭션 페쳐 모듈(260)은 복수의 피어로부터 동시에 여러 알림을 수신할 수 있다. 따라서, 트랜잭션 페쳐 모듈(260)은 다수의 알림을 통해서 전달된 트랜잭션에 대한 해시 값 목록을 유지 관리하고 있다. 트랜잭션 페쳐 모듈(260)은 여러 개의 트랜잭션을 동시에 가져오기 위한 다수의 작업자를 포함한다.
작업자는 트랜잭션을 가져오기 위해 트랜잭션 해시 값 목록에서 지속적으로 해시 값을 가져오고, 해당 피어로부터 트랜잭션을 요청하는 트랜잭션 요청 신호를 컨트롤러(290)로 전달한다(S1208).
컨트롤러(290)는 트랜잭션 요청 신호를 NDN 트랜스포트 모듈(280)로 전달한다(S1209).
NDN 트랜스포트 모듈(280)은 상기 트랜잭션 요청 신호를 포함하는 트랜잭션 요청 메시지(20)를 제 1 피어(100)로 전송한다(S1210).
제 1 피어(100)의 NDN 트랜스포트 모듈(180)은 수신된 트랜잭션 요청 메시지(20)를 컨트롤러(190)로 전달한다(S1211).
제 1 피어의 컨트롤러(190)는 트랙잭션 요청 메시지(20)에 대응하는 트랜잭션을 상기 NDN 트랜스포트 모듈(180)로 전달한다(S1212).
구체적으로, 컨트롤러(190)는 상기 트랜잭션 요청 메시지(20)에서 쿼리를 추출하고, 요청된 트랜잭션을 가져오기 위해 트랜잭션 풀 모듈(120)을 쿼리한다. 컨트롤러(190)는 트랜잭션을 NDN 트랜스포트 모듈(180)로 전달한다.
제 1 피어(100)의 NDN 트랜스포트 모듈(180)은 NDN 데이터 패킷에 트랜잭션을 삽입하고, 상기 NDN 데이터 패킷을 포함하는 제 1 메시지(30)를 상기 제 2 피어로 전송한다(S1213).
이 때, 제 1 피어의 NDN 트랜스포트 모듈(180)은 NDN 데이터 패킷에 트랜잭션을 캡슐화하여 삽입할 수 있다.
제 2 피어(200)의 NDN 트랜스포트 모듈(280)이 상기 제 1 메시지(30)를 수신하면, 제 1 메시지(30)를 상기 제 2 피어의 컨트롤러(280)로 전달한다(S1214).
컨트롤러(290)는 상기 제 1 메시지를 확인하고 상기 제 1 메시지로부터 트랜잭션을 추출하고, 추출된 상기 트랜잭션을 트랜잭션 페쳐 모듈(260)로 전달한다 (S1215).
트랜잭션 페쳐 모듈(260)은 가져오기 목록에서 상기 트랜잭션을 제거하고, 트랜잭션을 트랜잭션 풀 모듈(220)로 전달한다(S1216).
트랜잭션 풀 모듈(220)은 상기 트랜잭션을 보류 목록에 추가한다(S1217).
트랜잭션 풀 모듈(220)은 새로 추가된 트랜잭션을 주기적으로 수집하고, 수집된 상기 트랜잭션을 컨트롤러(280)로 전달한다(S1218).
컨트롤러(190)는 피어 관리자 모듈에서 피어 목록을 가져온 후(미도시), 피어 목록에 있는 피어에게 NDN 트랜스포트 모듈(290)을 통해 알림을 보내도록 요청한다(S1219).
NDN 트랜스포트 모듈(290)은 트랜잭션 알림 메시지(40)를 다른 피어로 전송한다(S1220).
블록 전파(Block Propagation)에 대하여 설명한다.
작업증명 솔루션을 찾은 첫 번째 블록체인 노드가 채굴자가 새로운 블록을 생성한다. 그런 다음 이 노드는 만든 블록을 피어에게 브로드캐스트한다. 피어는 블록을 검증하고 로컬 블록체인에 추가한다. 블록은 동일한 방법으로 계속 다른 피어로 전파된다.
도 13은 본 개시의 다른 실시 예에 따른, 블록 처리 프로세스를 도시한 도면이다. 본 발명은 블록 처리 장치(미도시)에 의하여 수행된다.
채굴기 모듈(130)이 새로운 블록에 대한 작업증명 솔루션을 찾으면, 채굴된 블록을 컨트롤러(190)로 전달한다(S1301).
컨트롤러(190)는 모든 관리되는 피어에게 블록을 알리도록 NDN 트랜스포트 모듈(180)에 요청한다(S1302). 이때 컨트롤러(190)는 피어 관리자 모듈(140)에서 피어 목록을 가져올 수 있다(미도시).
NDN 트랜스포트 모듈(180)은 블록 알림 메시지(10)를 제 2 피어(100)를 포함하는 목록에 있는 모든 피어로 전송한다(S1303).
제 2 피어(200)에 블록 알림 메시지(10)가 수신되, NDN 트랜스포트 모듈(280)은 블록 알림 메시지(10)를 컨트롤러(290)로 전달한다(S1304).
컨트롤러(290)는 블록 알림 메시지(10)에 대응하는 블록을 제 1 피어(100)로부터 가져오는 명령을 블록 페쳐 모듈(250)로 전달한다(S1305).
구체적으로, 컨트롤러(290)는 블록 알림 메시지(10)와 알림을 보낸 제 1 피어(100)의 레코드를 확인한다.
블록 알림 메시지(10)가 정상인 경우, 컨트롤러(290)는 NDN 트랜스포트 모듈(280)을 통해 제 1 피어(100)의 알림에 대한 응답을 상기 제 1 피어(100)로 전송한다. 컨트롤러(290)는 상기 제 1 피어의 알림에 대한 응답을 더미 데이터 패킷으로 상기 제 1 피어(100)로 전송한다. 이 경우, 컨트롤러(290)는 응답을 하지 않을 수 있다. 여기서, 더미 데이터 패킷은 컨텐츠가 없는 데이터 패킷을 의미한다.
컨트롤러(290)는 블록 알림 메시지(10)에서 각 블록 번호와 블록의 해시 값을 추출하여 해당 블록을 상기 제 1 피어(100)로부터 가져오는 명령을 블록 페쳐 모듈(260)로 전달한다.
블록 페쳐 모듈(260)은 블록 요청 신호를 컨트롤러(290)로 전달한다(S1306).
블록 페쳐 모듈(250)은 복수의 다른 피어로부터 동시에 여러 블록 알림을 수신한다. 따라서, 블록 페쳐 모듈(260)은 다수의 알림을 통해서 전달된 블록에 대한 블록 알림 목록을 유지 관리하고 있고, 블록 페쳐 모듈(250)는 여러 개의 블록을 동시에 가져오기 위해 다수의 작업자를 포함한다. 작업자는 블록을 가져오기 위해 블록 알림 목록에서 지속적으로 블록 정보를 가져와 해당 피어로부터 블록을 가져오도록 컨트롤러(290)에 요청한다(S1306).
컨트롤러(290)는 NDN 트랜스포트 모듈(280)가 제 1 피어(100)에서 블록을 가져오도록 요청한다(S1307).
NDN 트랜스포트 모듈(280)은 블록 요청 메시지(20)를 제 1 피어(100)로 전송한다(S1308).
제 1 피어(100)의 NDN 트랜스포트 모듈(180)은 수신된 블록 요청 메시지(20)를 컨트롤러(190)로 전달한다(S1309).
컨트롤러(190)는 블록 요청 메시지(20)에 대응하는 블록을 상기 NDN 트랜스포트 모듈(180)로 전달하는 단계(S1310).
컨트롤러(190)는 블록 요청 메시지(20)를 확인하고, 체인 관리자 모듈(112)로부터 요청된 블록을 가져온다. 요청된 블록은 NDN 트랜스포트 모듈(180)로 전달된다(S1310).
NDN 트랜스포트 모듈(180)은 블록을 NDN 데이터 패킷에 블록을 삽입하고, 블록이 삽입된 상기 NDN 패킷을 포함하는 제 1 메시지(30)를 제 2 피어(200)로 전송한다(S1311).
블록을 삽입할 때, 제 1 피어(100)의 NDN 트랜스포트 모듈(180)은 NDN 데이터 패킷에 블록을 캡슐화하여 삽입한다.
제 2 피어(200)의 NDN 트랜스포트 모듈(280)이 제 1 메시지(30)를 수신하고, 수신된 제 1 메시지(30)를 컨트롤러(290)로 전달한다(S1312). 여기서, 제 1 메시지(30)는 블록 데이터 메시지를 포함한다.
제 2 피어(200)의 컨트롤러(290)는 제 1 메시지(30)로부터 블록을 추출하고, 추출된 블록을 블록 페쳐 모듈(250)로 전달한다(S1313).
블록 페쳐 모듈(250)은 가져온 블록의 유효성 검사를 위해 합의 모듈(216)에 요청한다(S1314).
제 2 피어(200)의 합의 모듈(216)은 블록을 검증한다(S1315). 블록 검증 방법은 도 7에서의 방법과 동일하며, 이에 대한 자세한 설명은 생략한다.
합의 모듈(216)은 검증 결과를 블록 페쳐 모듈(250)에 반환한다(S1316).
블록 페쳐 모듈(250)은 컨트롤러(290)를 경유해서 NDN 트랜스포트 모듈(280)에게 모든 관리되는 다른 피어에게 블록을 알리도록 요청한다(S1317). 그림에는 표시되어 있지 않으나 관리되는 피어 정보는 컨트롤러(290)가 피어 관리자 모듈을 통해서 가져올 수 있다.
NDN 트랜스포트 모듈(280)은 블록 알림 메시지(40)를 다른 피어로 전송한다 (S1318).
블록 페쳐 모듈(250)은 체인 관리자 모듈(212)에 블록 삽입을 주기적으로 요청하여, 로컬 블록체인에 새로 가져온 블록을 추가한다(S1319).
체인 동기화(Chain Synchronization)에 대하여 설명한다.
각 피어는 자신의 로컬 체인이 다른 피어의 블록체인과 동기화되지 않은 것으로 판단할 때마다 체인 동기화를 시작한다. 동기화 불일치 감지는 주기적으로 또는 피어 상태 변경 알림을 수신할 때마다 수행한다. 또한 블록체인 네트워크에 처음 연결 또는 재연결할 때 이 절차를 진행해야 한다.
도 14는 본 개시의 다른 실시 예에 따른, 체인 동기화 프로세스를 도시한 도면이다. 도 14를 참조하면, 일반적으로 체인 동기화는 5가지 주요 단계로 구성된다.
a) 마스터 피어가 선택된다.
b) 피어의 로컬 체인과 마스터 피어의 로컬 체인 사이에서 일치가 이루어지는 마지막 블록을 찾는다.
c) 일치가 되지 않은 블록부터 최신 블록까지 마스터 피어에서 블록 헤더를 모두 다운로드한다.
d) 가용한 모든 피어로부터 블록 바디를 동시에 다운로드한다.
e) 다운로드한 블록을 피어의 로컬 체인에 삽입한다. 마지막 세 단계(c, d, 2)는 세 개의 독립적인 연동 쓰레드로 동시에 수행된다.
체인 동기화 모듈(Chain Synchronizer)는 체인 동기화 상태를 지속적으로 모니터링한다. 이를 위해 고정 주기 타이머로 주기적으로 확인함과 동시에 피어 관리자 모듈(140)의 피어 관리 목록의 변경을 통해서 확인한다. 이벤트가 발생할 때마다 체인 동기화 모듈(Chain Synchronizer)은 클라이언트 로컬 체인의 총 난이도를 다른 피어의 난이도와 비교하여 동기화 라운드 시작 여부를 확인한다.
피어 관리자 모듈(140)은 피어 업데이트 이벤트를 발생시킨다(S1401).
체인 동기화 모듈(162)는 체인 동기화 트리거 신호를 지속적으로 확인한다(S1402).
Step (a):
체인 동기화 모듈(162)은 피어 관리자 모듈(140)에게 가장 큰 체인 난이도를 가진 마스터 피어 확인을 요청한다(S1403). 피어는 새 블록을 브로드캐스트할 때마다 체인 난이도를 업데이트하여 보낸다.
피어 관리자 모듈(140)은 체인의 총 난이도가 가장 큰 피어를 체인 동기화 모듈(162)에게 알려준다(S1404). 체인 동기화 모듈(162)은 이를 체인 동기화를 위한 마스터 피어로 설정한다.
Step (b):
이 단계는 두 체인 간의 공통 블록을 찾을 수 있을 때까지 마스터 피어에 여러 번에 걸쳐서 블록 헤더 요청을 한다. 블록을 비교할 때는 블록 헤더만 필요하다. 여기에서는 이진 검색을 구현하여 가장 높은 공통 조상 블록을 찾을 수 있다. 나머지 단계(c, d, e)는 공통 조상에서 시작하여 모든 블록을 가져오는 것이다.
체인 동기화 모듈(162)은 마스터 피어로부터 블록 헤더를 요청한다(S1405).
NDN 트랜스포트 모듈(180)은 다수의 헤더 요청 메시지(10)를 제 2 피어(200)로 전송한다(S1406). 여기서, 제 2 피어(200)는 마스터 피어가 될 수 있다.
제 2 피어(200)의 NDN 트랜스포트 모듈(280)은 헤더 요청 메시지를 컨트롤러(290)로 전달한다(S1407).
컨트롤러(290)는 그림에는 표현되지 않았으나 체인 관리자 모듈(212)을 통해 블록 헤더를 가져와서, NDN 트랜스포트 모듈(280)로 전달한다(S1408).
NDN 트랜스포트 모듈(280)은 블록 헤더를 NDN 데이터 패킷으로 캡슐화하여 NDN 데이터 패킷을 포함하는 제 1 메시지(20)를 블록 헤더를 요청한 피어, 즉, 제 1 피어(100)로 다시 전송한다(S1409).
제 1 피어(100)의 NDN 트랜스포트 모듈(180)은 체인 동기화 모듈 (162)로 제 1 메시지(20)를 전달하여 요청된 블록 헤더가 추출되도록 한다(S1410).
Step (c), (d), (e) 에 대하여 설명한다.
앞서 언급했듯이 step c, d, e 3단계는 동시에 발생하므로 분리된 쓰레드 또는 Go 언어의 루틴 등으로 구현할 수 있다. 이 단계에서 체인 동기화 모듈(162)는 NDN 트랜스포트 모듈(180)에 다른 피어로부터 블록 헤더와 블록 바디를 가져오도록 요청한다. 헤더는 마스터 피어에서 직접 다운로드해야 하며 블록 바디는 피어 관리자 모듈에서 제공하는 피어 목록의 가용한 모든 피어로부터 다운로드할 수 있다.
로드 밸런싱을 위해 피어 관리자 모듈(140)은 피어를 선택함에 있어 피어 선택 정책을 구현할 수 있다. 이 기간 동안 NDN 트랜스포트 모듈(180)은 체인 동기화 모듈(162)이 요청한 대로 여러 헤더 요청 메시지(HeadersQuery)와 블록 요청 메시지(BlockQuery)를 보낼 수 있다(미도시).
제 1 피어(100)의 체인 동기화 모듈(162)은 피어 관리자 모듈(140)에 블록 헤더나 블록 바디를 가져올 임의의 피어를 선택하도록 요청한다(S1411).
제 1 피어(100)의 피어 관리자 모듈(140)은 피어 목록에서 임의의 피어를 선택한 다음 체인 동기화 모듈(162)로 반환한다(S1412).
제 1 피어(100)의 체인 동기화 모듈(162)은 마스터 피어로부터 블록 헤더 목록을 요청한다. 또는 번호와 해시 값이 지정된 블록의 블록 바디를 요청한다(S1413).
제 1 피어(100)의 NDN 트랜스포트 모듈(180)는 블록 헤더 또는 블록 바디 요청 메시지(30)를 제 2 피어(200)로 전송한다(S1414).
블록 헤더 또는 블록 바디에 대한 요청 메시지(30)를 받은 제 2 피어(200)의 NDN 트랜스포트 모듈(280)은 요청 메시지(30)를 컨트롤러(290)로 전달한다(S1415).
제 2 피어(200)의 컨트롤러(290)는 체인 관리자 모듈(미도시)을 통해 요청된 블록 헤더 및 블록 바디 중 적어도 하나를 얻은 후, 블록 헤더 및 블록 바디 중 적어도 하나를 NDN 트랜스포트 모듈(280)로 전달한다(S1416).
제 2 피어(200)의 NDN 트랜스포트 모듈(280)은 블록 헤더 및 블록 헤더 중 적어도 하나를 NDN 데이터 패킷으로 캡슐화하여, NDN 데이터 패킷을 포함하는 제 2 메시지(40)를 제 1 피어(100)로 전송한다(S1417).
제 1 피어(100)의 NDN 트랜스포트 모듈(180)은 메시지를 검증하고 처리하는 체인 동기화 모듈(162)로 제 2 메시지(40)를 전달한다(S1418).
블록이 헤더와 바디에서 어셈블될 때마다 체인 동기화 모듈(162)은 블록 검증을 위해 합의 모듈(116)을 요청한다(S1419).
합의 모듈(116)은 검증 결과를 체인 동기화 모듈(162)에 반환한다(S1420).
체인 동기화 모듈(162)은 체인 관리자 모듈(112)에 검증된 블록을 로컬 체인에 추가하도록 요청한다(S1421).
체인 관리자 모듈(112)는 로컬 체인에 삽입 결과를 체인 동기화 모듈(Chain Synchronizer)에 반환한다(S1422).
블록 가져오기 및 블록 삽입 중에 체인 동기화 모듈(162)이 피어의 악의적인 동작, 예를 들어, 잘못된 데이터 전송을 의심하는 경우 피어 관리자에게 피어를 삭제하도록 요청할 수 있다. 마스터 피어가 죽은 것으로 간주되거나 데이터를 가져올 피어가 남아 있지 않으면 동기화가 실패한다. 피어에 연결할 수 없거나 악의적인 행위를 하는 것으로 의심되면 피어가 죽은 것으로 간주한다.
마지막 블록이 로컬 체인에 성공적으로 삽입되면 동기화가 완료된다. 동기화가 끝나면 체인 동기화 모듈(162)은 NDN 트랜스포트 모듈(180)에 로컬 체인의 최신 블록을 관리되는 모든 피어에게 알리도록 요청한다. 발표는 다른 피어가 새로운 체인 상태를 알도록 하는 것이다.
체인 동기화 모듈(162)은 컨트롤러(162)를 통해 NDN 트랜스포트 모듈(180)이 모든 관리되는 피어에게 블록을 알리도록 요청한다. 체인 동기화 모듈(162)은 피어 관리자 모듈(140)에서 목록을 가져올 수 있다(미도시).
NDN 트랜스포트 모듈(180)은 블록 알림 메시지를 전송한다(S1423).
도 15는 본 개시의 다른 실시 예에 따른, 알림 당김 데이터 브로드캐스팅에서 메시지 전송의 실시 예를 도시한 도면이다.
도 15를 참조하면, 노드 역할을 하는 router NFD는 etri(11), kisti(12), ucla(13), kaist(14)를 포함한다.
bob(100)은 인터레스트 패킷(10)을 etri(11)를 거치고 kisti(12)를 거쳐서 ucla(13)을 통과하여, alice(200)에게 전송한다. 또한, 인터레스트 패킷(10)은 etri(11)를 거치고 kisti(12)를 거쳐서 James(300)에게 전송된다.
인터레스트 패킷(10)은 인터레스트 패킷의 위치, 인터레스트 패킷의 해시값, 애플리케이션 파라미터(application parameter)값으로 bob의 아이디, 블록의 해시를 포함한다.
즉, bob(100)은 인터레스트 패킷(10)을 통하여, 자신이 어떠한 데이터를 갖고 있다는 것을 주변의 다른 피어, alice(200)와 james(300)에게 알려준다.
도 16은 본 개시의 다른 실시 예에 따른, 알림 당김 데이터 브로드캐스팅에서 데이터를 요청하는 실시 예를 도시한 도면이다.
도 16을 참조하면, 노드 역할을 하는 router NFD는 etri(11), kisti(12), ucla(13), kaist(14)를 포함한다.
alice(200)은 인터레스트 패킷(20)을 ucla(13)를 거치고 kisti(12)를 거쳐서 etri(11)을 통과하여, bob (200)에게 전송한다.
인터레스트 패킷(20)은 인터레스트 패킷의 위치, 인터레스트 패킷의 해시값, 포워딩힌트(ForwardingHint)를 포함한다. 여기서, 해시는 bob의 데이터에 대한 고유한 이름이다. 인터레스트 패킷(20)에 포워딩힌트가 있는 경우, 포워딩힌트에 대한 전달 정보에 따라 패킷을 전달한다. 여기서, 포워딩힌트는 bob(10)이 그 데이터를 갖고 있다는 것을 의미한다.
즉, alice(200)는 자신이 bob(100)의 데이터를 요청한다는 것을 bob(100)에게 알려준다.
james(300)는 인터레스트 패킷(20)을 kisti(12)를 거쳐서 etri(11)을 통과하여, bob(100)에게 전송한다
즉, james(300)는 자신이 bob(100)의 데이터를 요청하는 것을 bob(100)에게 알려준다.
여기서, kisti(12) 노드는 alice(200)의 요청과 james(300)의 요청을 수신하고, 이를 결합(aggregate)하여 bob(100)에게 알려줄 수 있다.
도 17은 본 개시의 다른 실시 예에 따른, 알림 당김 데이터 브로드캐스팅에서 요청된 데이터를 캐싱하는 실시 예를 도시한 도면이다.
도 17을 참조하면, router NFD는 etri(11), kisti(12), ucla(13), kaist(14)를 포함한다.
bob(100)은 데이터 패킷(30)을 etri(11)을 통과하고 kisti(12)를 거쳐서 unla(13)을 통과하여, alice(200)에게 전송한다. 다음으로, 데이터 패킷(30)은 kisti(12)를 거쳐서 James(300)에게 전송된다.
데이터 패킷(30)은 인터레스트 패킷(20)에 대응하는 데이터 패킷을 의미하고, bob(100)이 가진 데이터로 alice(200)가 bob(100)에게 요청한 데이터를 의미한다.
데이터 패킷(30)은 우선 kisti(12)에 캐싱된다. 데이터 패킷(30)이 alice(200)에게 전송되는 것은 확정되었기 때문에, 우선 데이터 패킷(30)은 alice(200)에게 전송된다. 다음으로, bob(100)의 데이터를 요청하는 인터레스트 패킷(20)을 James(300)로부터 수신하면, kisti(12)에 캐싱된 데이터 패킷(30)이 James(300)로 전송된다.
또한, kisti(12)는 데이터 패킷(30)을 alice(200)와 james(300)로 전송할 수 있다.
본원발명에 따르면, 중간 노드가 데이터를 캐싱하고, 중간 노드가 캐싱된 데이터를 개별적으로 복수의 피어로 전송하기 때문에, 하나의 노드에서 복수의 다른 노드로 데이터를 전송할 때, 중복된 데이터가 전송되는 것을 방지할 수 있다.
도 18은 본 개시의 다른 실시 예에 따른, 트래픽량의 효과를 도시한 도면이다.
도 18을 참조하면, x 축은 시간을 의미하고, y 축은 트래픽량을 의미한다.
실험 조건은 다음과 같다.
IP 기반의 업/다운로드 스트림과 NDN 기반의 다운스트림과 업스트림을 비교한다.
네트워크는 5개의 NDN 도메인을 포함하고 있고, 개별 NDN 도메인은 각각 5, 10, 15, 20 개의 블록체인 노드를 갖고 있다.
상수 비율로 1 kb의 트랜잭션을 전송한다.
업스트림과 다운스트림 트래픽은 모든 노드에서 측정된다.
트래픽 중복 비율은 트래픽을 체인 저장 공간 크기로 나눈 값을 의미한다.
캐싱 비율은 다운스트림과 업스트림의 차이를 다운스트림으로 나눈 값을 의미한다.
도 18을 참조하면, 트래픽은 100 개의 노드를 포함하고, 1kb의 크기의 트랜잭션을 포함한다.
IP 업/다운스트림(1810), NDN 다운스트림(1820), NDN 업스트림(1830) 중에서, IP 업/다운 스트림(1810)의 기울기가 가장 크고, 다음으로, NDN 다운스트림(1820)의 기울기가 크고, NDN 업스트림(1830)의 기울기가 가장 작다.
따라서, NDN 다운스트림(1820)과 NDN 업스트림(1830)이 IP 업/다운 스트림(1810)보다 트래픽 양이 더 작으므로, 본원발명의 경우, 트래픽 양을 감소시킬 수 있는 효과가 있다.
도 19는 본 개시의 다른 실시 예에 따른, 트래픽 중복 비율의 효과를 도시한 도면이다. 도 19를 참조하면, x 축은 네트워크 크기를 의미하고, y 축은 트래픽 중복 비율을 의미한다. 여기서, 네트워크 크기는 노드의 개수를 의미한다. 트래픽은 100 개의 노드를 포함하고, 1kb의 크기의 트랜잭션을 포함한다.
트래픽 중복 비율은 트래픽을 체인 저장 공간 크기로 나눈 값을 의미한다. IP(1910)의 트래픽 중복 비율은 8 ~ 10 이다. NDN 다운스트림(1920)의 트래픽 중복 비율은 3 이다. NDN 업스트림(1930)의 트래픽 중복 비율은 1.7 이다.
네트워크 크기가 증가함에 따라, IP(1910)의 트래픽 중복 비율이 가장 큼을 알 수 있다. 따라서, NDN 다운스트림(1920)과 NDN 업스트림(1930)이 IP(1910)보다 트래픽 중복 비율이 더 작으므로, 본원발명의 경우, 트래픽 중복 비율을 감소시킬 수 있는 효과가 있다.
도 20은 본 개시의 다른 실시 예에 따른, 캐싱 효율을 도시한 도면이다. 도 20을 참조하면, x 축은 시간을 의미하고, y 축은 트래픽 양을 의미한다.
NDN 다운스트림(2010)은 시간이 흐름에 따라, 트래픽 양이 선형으로 증가한다. NDN 업스트림(2020)은 시간이 흐름에 따라, 트래픽 양이 선형으로 증가한다. NDN 다운스트림(2010)의 기울기는 NDN 업스트림(2020)의 기울기보다 크다.
캐싱 비율(2030)은 NDN 다운스트림(2010)과 NDN 업스트림(2020)의 차이를 NDN 다운스트림(2010)으로 나눈 값을 의미한다.
본 발명에 따르면, 캐싱 비율은 50 % 정도로 일정하게 유지된다.
도 21은 본 개시의 다른 실시 예에 따른, 네트워크 사이즈에 대한 캐싱 비율을 도시한 도면이다.
x 축은 네트워크 크기를 의미하고, y 축은 캐싱 비율을 의미한다. 여기서, 네트워크 크기는 노드의 개수를 의미한다.
도 21을 참조하면, 네트워크 크기가 증가함에 따라 캐싱 비율(2100)은 50 ~ 60 사이로 일정하게 유지됨을 알 수 있다.
도 22는 본 개시의 일 실시 예에 따른, 블록체인 장치의 구성도를 도시한 도면이다.
도 22를 참조하면, 블록체인 장치(1600)는 메모리(1602), 프로세서(1603), 송수신부(1604) 및 주변 장치(1601)를 포함할 수 있다. 또한, 일 예로, 블록체인 장치 (1600)는 다른 구성을 더 포함할 수 있으며, 상술한 실시예로 한정되지 않는다. 이때, 일 예로, 블록체인 장치(디바이스는 상술한 NDN 시스템에 기초하여 동작하는 장치일 수 있다.
보다 상세하게는, 도 22의 블록체인 장치(1600)는 NDN 디바이스, NDN 서버, 콘텐츠 라우터 등과 같은 예시적인 하드웨어/소프트웨어 아키텍처일 수 있다. 이때, 일 예로, 메모리(1602)는 비이동식 메모리 또는 이동식 메모리일 수 있다. 또한, 일 예로, 주변 장치(1601)는 디스플레이, GPS 또는 다른 주변기기들을 포함할 수 있으며, 상술한 실시예로 한정되지 않는다.
또한, 일 예로, 상술한 블록체인 장치(1600)는 상기 송수신부(1604)와 같이 통신 회로를 포함할 수 있으며, 이에 기초하여 외부 디바이스와 통신을 수행할 수 있다.
또한, 일 예로, 프로세서(1603)는 범용 프로세서, DSP(digital signal processor), DSP 코어, 제어기, 마이크로제어기, ASIC들(Application Specific Integrated Circuits), FPGA(Field Programmable Gate Array) 회로들, 임의의 다른 유형의 IC(integrated circuit) 및 상태 머신과 관련되는 하나 이상의 마이크로프로세서 중 적어도 하나 이상일 수 있다. 즉, 상술한 블록체인 장치(1600)를 제어하기 위한 제어 역할을 수행하는 하드웨어적/소프트웨어적 구성일 수 있다.
이때, 프로세서(1603)는 노드의 다양한 필수 기능들을 수행하기 위해 메모리(1602)에 저장된 컴퓨터 실행가능한 명령어들을 실행할 수 있다. 일 예로, 프로세서(1603)는 신호 코딩, 데이터 처리, 전력 제어, 입출력 처리 및 통신 동작 중 적어도 어느 하나를 제어할 수 있다. 또한, 프로세서(1603)는 물리 계층, MAC 계층, 어플리케이션 계층들을 제어할 수 있다. 또한, 일 예로, 프로세서(1603)는 액세스 계층 및/또는 어플리케이션 계층 등에서 인증 및 보안 절차를 수행할 수 있으며, 상술한 실시예로 한정되지 않는다.
일 예로, 프로세서(1603)는 송수신부(1604)를 통해 다른 장치들과 통신을 수행할 수 있다. 일 예로, 프로세서(1603)는 컴퓨터 실행가능한 명령어들의 실행을 통해 노드가 네트워크를 통해 다른 노드들과 통신을 수행하게 제어할 수 있다. 즉, 본 발명에서 수행되는 통신이 제어될 수 있다. 일 예로, 다른 노드들은 NDN 서버, 콘텐츠 라우터 및 그 밖의 다른 디바이스들일 수 있다. 일 예로, 송수신부(1604)는 안테나를 통해 RF 신호를 전송할 수 있으며, 다양한 통신망에 기초하여 신호를 전송할 수 있다.
또한, 일 예로, 안테나 기술로서 MIMO 기술, 빔포밍 등이 적용될 수 있으며, 상술한 실시예로 한정되지 않는다. 또한, 송수신부(1604)를 통해 송수신한 신호는 변조 및 복조되어 프로세서(1603)에 의해 제어될 수 있으며, 상술한 실시 예로 한정되지 않는다.
본 개시의 다양한 실시 예는 모든 가능한 조합을 나열한 것이 아니고 본 개시의 대표적인 양상을 설명하기 위한 것이며, 다양한 실시 예에서 설명하는 사항들은 독립적으로 적용되거나 또는 둘 이상의 조합으로 적용될 수도 있다.
또한, 본 개시의 다양한 실시 예는 하드웨어, 펌웨어(firmware), 소프트웨어, 또는 그들의 결합 등에 의해 구현될 수 있다. 하드웨어에 의한 구현의 경우, 하나 또는 그 이상의 ASICs(Application Specific Integrated Circuits), DSPs(Digital Signal Processors), DSPDs(Digital Signal Processing Devices), PLDs(Programmable Logic Devices), FPGAs(Field Programmable Gate Arrays), 범용 프로세서(general processor), 컨트롤러, 마이크로 컨트롤러, 마이크로 프로세서 등에 의해 구현될 수 있다. 예를 들어, 종단 혹은 에지에서 사용될 수 있는 비 일시적 컴퓨터 판독가능한 매체에 저장된 프로그램의 형식이나, 에지 혹은 클라우드에서 사용될 수 있는 비 일시적 컴퓨터 판독 가능한 매체에 저장된 프로그램의 형식으로도 구현될 수 있음은 자명하다. 또한, 다양한 하드웨어 및 소프트웨어의 결합으로도 구현될 수 있다.
본 개시의 범위는 다양한 실시 예의 방법에 따른 동작이 장치 또는 컴퓨터 상에서 실행되도록 하는 소프트웨어 또는 머신-실행 가능한 명령들(예를 들어, 운영체제, 애플리케이션, 펌웨어(firmware), 프로그램 등), 및 이러한 소프트웨어 또는 명령 등이 저장되어 장치 또는 컴퓨터 상에서 실행 가능한 비-일시적 컴퓨터-판독가능 매체(non-transitory computer-readable medium)를 포함한다.
이상에서 설명한 본 개시는, 본 개시가 속하는 기술분야에서 통상의 지식을 가진 자에게 있어 본 개시의 기술적 사상을 벗어나지 않는 범위 내에서 여러 가지 치환, 변형 및 변경이 가능하므로, 본 개시의 범위는 전술한 실시예 및 첨부된 도면에 의해 한정되는 것이 아니다.
100 : 블록체인 장치
Claims (20)
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 이름 기반 네트워킹에 기초한 블록체인에서 트랜잭션 처리 방법에 있어서,
제 1 피어가 주변의 피어에게 트랜잭션 알림 메시지를 전송하는 단계;
상기 제 1 피어가 트랜잭션 알림 메시지에 대응하는 트랜잭션 요청 메시지를 제 2 피어로부터 수신하는 단계;
상기 제 1 피어가 수신된 상기 트랜잭션 요청 메시지에 대응하는 트랜잭션을 NDN 데이터 패킷에 삽입하는 단계;
상기 제 1 피어가 상기 NDN 데이터 패킷을 포함하는 제 1 메시지를 상기 제 2 피어로 전송하는 단계를 포함하고,
상기 제 1 피어의 트랜잭션 풀 모듈은 동시에 새로운 트랜잭션이 추가될 때마다 채굴기 모듈에도 트랜잭션을 알리는 단계를 포함하고,
상기 제 2 피어는 상기 제 1 메시지에 포함된 트랜잭션을 추출하여 보유 목록에 추가하는,
트랜잭션 처리 방법.
- 삭제
- 제 8 항에 있어서,
상기 제 1 피어의 채굴기 모듈은 새로 추가된 트랜잭션을 포함한 후, 다시 새로운 블록을 채굴하는 작업을 시작하는 단계를 더 포함하는,
트랜잭션 처리 방법.
- 제 8 항에 있어서,
상기 트랜잭션 알림 메시지가 정상인 경우, 상기 제 2 피어의 컨트롤러는 NDN 트랜스포트 모듈을 통해 상기 제 1 피어의 알림에 대한 응답을 상기 제 1 피어로 전송하는 단계를 더 포함하는,
트랜잭션 처리 방법.
- 제 11 항에 있어서,
상기 제 2 피어의 상기 컨트롤러는 상기 제 1 피어의 알림에 대한 응답을 더미 데이터 패킷으로 상기 제 1 피어로 전송하는 단계를 더 포함하는,
트랜잭션 처리 방법.
- 제 8 항에 있어서,
상기 제 2 피어의 트랜잭션 페쳐 모듈은 복수의 피어로부터 동시에 여러 알림을 수신하는 단계를 더 포함하는,
트랜잭션 처리 방법.
- 제 8 항에 있어서,
상기 제 1 피어의 NDN 트랜스포트 모듈은 상기 NDN 데이터 패킷에 트랜잭션을 캡슐화하여 삽입하는 단계를 더 포함하는,
트랜잭션 처리 방법.
- 이름 기반 네트워킹에 기초한 블록체인에서 블록 처리 방법에 있어서,
제 1 피어가 주변의 피어에게 블록 알림 메시지를 전송하는 단계;
상기 제 1 피어가 상기 블록 알림 메시지에 대응하는 블록 요청 메시지를 제 2 피어로부터 수신하는 단계;
상기 제 1 피어가 상기 블록 요청 메시지에 대응하는 블록을 NDN 데이터 패킷에 삽입하는 단계; 및
상기 제 1 피어가 상기 NDN 데이터 패킷을 포함하는 제 1 메시지를 상기 제 2 피어로 전송하는 단계를 포함하되,
상기 제 2 피어는 상기 제 1 메시지에 포함된 블록을 추출하여 검증하고,
상기 제 2 피어의 블록 페쳐 모듈은 체인 관리자 모듈에 블록 삽입을 주기적으로 요청하여, 로컬 블록체인에 새로 가져온 블록을 추가하는 블록 처리 방법. - 제 15 항에 있어서,
상기 블록 알림 메시지가 정상인 경우, 상기 제 2 피어의 컨트롤러는 NDN 트랜스포트 모듈을 통해 상기 제 1 피어의 알림에 대한 응답을 상기 제 1 피어로 전송하는 단계를 더 포함하는,
블록 처리 방법.
- 제 16 항에 있어서,
상기 컨트롤러는 상기 제 1 피어의 알림에 대한 응답을 더미 데이터 패킷으로 상기 제 1 피어로 전송하는 단계를 더 포함하는,
블록 처리 방법.
- 제 15 항에 있어서,
상기 제 2 피어의 블록 페쳐 모듈은 복수의 다른 피어로부터 동시에 여러 블록 알림을 수신하는 단계를 더 포함하는,
블록 처리 방법.
- 제 15 항에 있어서,
상기 제 1 피어의 NDN 트랜스포트 모듈은 NDN 데이터 패킷에 블록을 캡슐화하여 삽입하는 단계를 더 포함하는,
블록 처리 방법.
- 삭제
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/503,800 US12040975B2 (en) | 2020-11-06 | 2021-10-18 | Method and apparatus for blockchain based on information-centric networking |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200147529 | 2020-11-06 | ||
KR20200147529 | 2020-11-06 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20220061840A KR20220061840A (ko) | 2022-05-13 |
KR102635029B1 true KR102635029B1 (ko) | 2024-02-08 |
Family
ID=81583234
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020210125916A KR102635029B1 (ko) | 2020-11-06 | 2021-09-23 | 정보 중심 기반 네트워킹 기반 블록체인 방법 및 장치 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR102635029B1 (ko) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117748745B (zh) * | 2024-02-19 | 2024-05-10 | 国网浙江省电力有限公司宁波供电公司 | 一种优化增强配电网可靠性的方法及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017211850A (ja) * | 2016-05-26 | 2017-11-30 | 日本電信電話株式会社 | データ送受信方法およびセンシングシステム |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3340681B1 (en) * | 2011-07-12 | 2020-04-15 | Huawei Technologies Co., Ltd. | Seamless mobility schemes in named-data networking using multi-path routing and content caching |
KR102349450B1 (ko) * | 2014-12-08 | 2022-01-10 | 삼성전자주식회사 | 무결성 검사 데이터 제공 방법 및 장치 |
KR102064732B1 (ko) * | 2017-11-29 | 2020-01-10 | 주식회사 이루온 | 이동형 이종망 병합 서빙 게이트웨이 시스템 및 그 컨텐츠 제공 방법 |
-
2021
- 2021-09-23 KR KR1020210125916A patent/KR102635029B1/ko active IP Right Grant
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017211850A (ja) * | 2016-05-26 | 2017-11-30 | 日本電信電話株式会社 | データ送受信方法およびセンシングシステム |
Also Published As
Publication number | Publication date |
---|---|
KR20220061840A (ko) | 2022-05-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Kutscher et al. | Information-centric networking (ICN) research challenges | |
EP2959632B1 (en) | Augmenting name/prefix based routing protocols with trust anchor in information-centric networks | |
Zantout et al. | I2P data communication system | |
US8694675B2 (en) | Generalized dual-mode data forwarding plane for information-centric network | |
US10298712B2 (en) | Proxy interception | |
US20140173034A1 (en) | Content identification, retrieval and routing in the internet | |
Lu et al. | Delay/disruption tolerant network and its application in military communications | |
KR20170038148A (ko) | 상태 비유지 정보 중심 네트워킹을 위한 시스템 및 방법 | |
KR20120088777A (ko) | 오버레이 네트워크에서 통신 피어들의 선택을 지원하는 방법 및 시스템 | |
US12040975B2 (en) | Method and apparatus for blockchain based on information-centric networking | |
WO2013029569A1 (en) | A Generalized Dual-Mode Data Forwarding Plane for Information-Centric Network | |
CN107135266B (zh) | Http代理框架安全数据传输方法 | |
Guo et al. | Enabling blockchain applications over named data networking | |
Li et al. | IoT middleware architecture over information-centric network | |
Moll et al. | SoK: The evolution of distributed dataset synchronization solutions in NDN | |
KR102635029B1 (ko) | 정보 중심 기반 네트워킹 기반 블록체인 방법 및 장치 | |
CN106027555B (zh) | 一种采用sdn技术改善内容分发网络安全性的方法及系统 | |
US7689648B2 (en) | Dynamic peer network extension bridge | |
JP5784234B2 (ja) | 情報中心ネットワークのための一般化デュアルモードデータ転送プレーン | |
US10986209B2 (en) | Secure and reliable on-demand source routing in an information centric network | |
CN110971671A (zh) | 一种缩短远距离通信时网络连接延迟的方法及系统 | |
CN111327628B (zh) | 一种基于sdn的匿名通信系统 | |
Banerjee et al. | The survey, research challenges, and opportunities in ICN | |
KR20210071255A (ko) | 정보 중심 네트워킹(icn)에서 컨텐츠 내용 기반 관리 및 전송을 위한 시스템 및 방법 | |
Dulal | NDNSD: Service publishing and discovery in NDN |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |