ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Corda란?
    Cryptography 2021. 10. 26. 22:04
    반응형

    코르다(Corda)는 트랜잭션 배칭(batching)을 위해서 블록을 사용하지 않기 때문에 정의상 블록체인이 아닙니다. 그러나, 코르다는 분산 원장(distributed ledger)이며 블록체인이 제공하는 모든 이점을 제공해주는데요. 예로, 금융산업과 같은 분야에서 트랜잭션에 대해 공유하고 있는 원장을 참여자들이 이벤트가 발생한 이후에 매번 끊임없이 체크해야되는 필요성을 없애줍니다 (기존 Bitcoin, Ethereum과 같은 블록체인과 달리). 

     

    이번 글에서는 아래와 같은 점들을 알아보겠습니다:

     

    • 코르다란?
    • 아키텍쳐

    Image from [4]

     

    코르다란?

    코르다는 위에서 언급한 매번 원장을 체크하지 않아도 되는 이점 외에도 다양한 장점이 존재합니다.

     

    코르다는 참여자들이 모두 동일한 상태를 가지도록 하며, 모든 참여자가 코르다 네트워크 상의 모든 트랜잭션 알아야 될 필요성을 제거하고 오직 개별 참여자와 관계있는 트랜잭션만 알아도 되도록 만들어 줍니다. 그렇기에 데이터 크기 측면에서도 비용 절감을 제공합니다. 

     

    전통적인 블록체인 솔루션은 블록 안에 들어가는 트랜잭션들이라는 개념과 각 블록이 앞뒤로 암호학적으로 연결되어서 immutable한 트랜잭션 레코드를 제공합니다. 

     

    코르다는 블록체인의 이점을 제공하기 위해 처음부터 새로운 모델로 디자인 되었으나 전통적인 블록 기반의 블록체인은 제외하였습니다. 초기에 금융산업에서 조직이 보유한 로컬 원장을 관리하는 데에서 발생하는 이슈를 해결하기 위해 개발되었습니다. 기존에 각 조직은 각 조직만의 "view of truth"를 가지고 있었습니다. 이렇게 각자만의 view를 가진 상황은 운영상의 리스크나 마찰을 가져오게 되는데요. 더욱이, 데이터는 매 조직마다 중복으로 존재하기에 각 인프라와 복잡도를 관리하는 비용도 증가하게 됩니다. 이러한 타입의 문제들은 코르다가 초기에 분산 데이터베이스를 만들어서 해결하려고 목적했던 사항들입니다. 처음에 코르다는 오직 금융 애플리케이션에 집중했으나, 이제 정부와 공공기관, 헬스케어, 보험, 공급망 등으로 확장되었습니다. 

     

    코르다는 코르다 엔터프라이즈와 코르다 오픈소스의 2개 구현체가 존재합니다. 2개끼리 서로 호환가능하며 유사한 기능을 가지고 있습니다. 그러나, 엔터프라이즈 버젼은 엔터프라이즈 요구사항에 좀 더 특화되어 있습니다. 상업용 버젼 플랫폼은 프라이버시, 보안, 성능과 같은 비지니스 요구사항을 중점적으로 다룹니다. 또한, 방화벽, HA 노드, notaries, 하드웨어 보안 지원 모듈 등을 포함합니다. 

     

    아키텍쳐

    코르다 플랫폼의 주요 컴포넌트들은 코르다 네트워크, 상태 객체(계약 코드와 legal prose), 트랜잭션, 컨센서스, flows가 존재합니다. 

     

    코르다 네트워크

    코르다 네트워크는 완전 연결 그래프(fully connected graph)로 정의됩니다. Permissioned 네트워크로 직접 P2P 통신을 "need to know" 기반으로 제공하는데요. 다른 전통적인 블록체인과 분산 원장과 달리, 코르다에는 글로벌 브로드캐스트나 가십(gossip) 프로토콜이 존재하지 않습니다. 통신은 이해당사자 간에 포인트-to-포인트 기반으로 직접적으로 발생합니다. 피어(peers)나 노드들은 AMPQ 직렬화 프로토콜을 사용해 통신합니다. 네트워크 맵 서비스라고 불리는 서비스가 피어 리스트를 전달해주는 역할을 담당합니다. 

     

    큰 관점에서 코르다는 아래와 같은 아키텍쳐를 가지고 있습니다:

    Image from Author inspired by [1]

     

    상태객체

    상태객체는 금융적인 합의를 구성하는 가장 작은 단위의 데이터를 나타냅니다. 이러한 객체들은 디지털 문서로 당사간 공유된 합의에 대한 모든 정보를 기술하며 기록하고 있습니다. 상태객체들은 계약 코드와 legal prose를 참조하는 트랜잭션 실행 객체의 결과로 생성되거나 삭제됩니다.

     

    Legal prose는 옵셔널하며 계약에 법적 바인딩을 제공합니다. 그러나, 계약 코드는 객체의 상태를 관리하기 위해서 반드시 가지고 있어야 합니다. 이런 계약코드 안에 정의돈 비지니스 로직에 따라서 노드의 상태 전이 메커니즘을 제공해야 합니다. 상태객체는 현재 객체의 상태를 나타내는 데이터 구조를 포함하고 있습니다. 상태객체는 current(live)이거나 historic(더 이상 유효하지 않음)합니다. 

     

    예로 아래의 다이어그램에서, 상태객체는 객체의 현재 상태를 나타냅니다. 이 사례에서는 A가 B에서 1,000 GBP를 지불한다는 간단한 샘플 합의가 있습니다. 이것은 현재 상태를 보여주지만, 참조된 계약코드는 트랜잭션을 통해 상태를 변경할 수 있습니다. 상태객체는 상태머신(state machine)의 일종으로 업데이트된 상태객체를 생성하기 위한 트랜잭션을 의해 소비된다(consumed)고 볼 수 있습니다. 

     

    Image from Author inspired by [1]

     

    트랜잭션

    트랜잭션은 다른 상태 간의 전이를 수행하기 위해 사용됩니다. 예로, 위 다이어그램에서의 상태객체는 트랜잭션의 결과로 생성됩니다. 코르다는 비트코인 스타일의 UTXO 기반의 모델을 이러한 트랜잭션 처리에 사용합니다. 트랜잭션에 의한 상태 전이의 개념은 비트코인과 같습니다. 비트코인과 유사하게, 트랜잭션은 단일, 복수, 빈 값의 인풋을 가질 수 있으며, 단일 또는 복수의 아웃풋을 만듭니다. 모든 트랜잭션은 디지털 서명을 가집니다. 

     

    더욱이 코르다는 블록체인 상에서 트랜잭션을 정리하기 위한 블록을 사용하지 않기 때문에 채굴이라는 개념이 없습니다. 대신,  notary 서비스가 트랜잭션의 시간적 정렬을 제공하기 위해 사용됩니다. 코르다에서, 새로운 트랜잭션 타입은 JVM 바이트코드를 사용해 개발될 수 있으며, 이 점은 코르다를 매우 유연하고 강력하게 만듭니다. 

     

     

    컨센서스

    코르다의 컨센서스 모델은 매우 간단하며, notary 서비스라는 것에 기반합니다. 기본적인 아이디어는 트랜잭션은 notary 서비스를 통해 유니크한지 확인되고 유니크하다면 컨센서스 서비스를 통해 유효하다고 서명됩니다. 코르다 네트워크 상에는 단일 또는 복수로 된 클러스터의 notary 서비스가 존재할 수 있습니다. PBFT 또는 Raft와 같은 컨센서스 알고리즘이 notary 간의 합의를 위해 사용되나, 핵심 아이디어는 제안된 트랜잭션이 원장에 유효한 업데이트인지 아닌지를 확인하는 것입니다. 

     

    코르다의 컨센서스 타입에는 validity와 uniqueness 컨센서스가 존재합니다.

     

    Validity 컨센서스

    이 컨센서스는 아래와 같은 2가지를 보장하기 위해 사용됩니다:

     

    • 각 인풋과 아웃풋 상태의 계약이 제안된 트랜잭션을 수용하도록
    • 트랜잭션이 필요한 모든 서명을 보유하도록

    이 과정은 새롭게 단순히 제안된 트랜잭션만을 검증하진 않습니다. 이 과정은 트랜잭션의 모든 체인 안에 있는 모든 이전 트랜잭션도 검증하는데요. 다른 말로하면, 이 과정은 대상 트랜잭션 이전의 모든 트랜잭션들이 최종적으로 제안된 트랜잭션의 인풋을 생성하는지 검증합니다. 그렇기에 이 작업은 "walking the chain"이라고도 불립니다.

     

     

    Uniqueness 컨센서스

    이것은 유일성에 기반한 컨센서스와 상태의 유효성에 기반한 유효성 컨센서스를 제공합니다. 첫 번째 메커니즘은 트랜잭션의 유효성과 관련된 부분으로 모든 필요한 서명이 존재하고 상태가 적절한지 확인합니다. 두 번째 메커니즘은 중복 지불 공격을 감지하는 수단이며 트랜잭션이 이전에 지불된 적이 없고 유니크한지 확인합니다. Uniqueness 컨센서스는 오직 notary 서비스에 의해서만 체킹됩니다. 반대로, validity 컨센서스는 트랜잭션 서명 전에 필요한 서명자 각자에 의해 검증됩니다. 이 방식은 제안된 트랜잭션의 어떠한 인풋도 다른 트랜잭션에서 사용된 적이 없도록 보장합니다. 

     

     

    Flows

    코르다의 Flows는 새로운 아이디어로 비-중앙형 워크플로우 개발을 도와줍니다. 코르다 네트워크 상의 모든 커뮤니케이션은 이러한 flows를 통해 처리됩니다. 이것들은 트랜잭션 빌딩 프로토콜로 코드를 사용하여 다양하고 복잡한 금융적인 흐름을 정의하는 데에 사용됩니다. Flows는 비동기적인 상태머신으로 실행되며, 다른 노드 및 사용자와 연동합니다. 실행되는 동안, 잠시 중단되거나 필요에 따라 재시작될 수 있습니다. 

     

     

    Reference

    [1] Mastering Blockchain

    [2] https://www.youtube.com/watch?v=rFZhbvtT284

    [3] https://www.corda.net/blog/what-is-corda/

    [4] https://github.com/corda/corda

     

     

    반응형
Kaden Sungbin Cho