devops

Cardano Input Endorsers 개념 이해하기 본문

Cardano

Cardano Input Endorsers 개념 이해하기

vata500 2024. 2. 7. 00:04
반응형

최근에 Input Endorsers가 카르다노 커뮤니티에서 많이 언급되었다. 가장 기대하는 업데이트 중 하나로 손꼽히지만, 개념이 쉽지않다. 

여러 자료를 참고해서 이해하기 쉽게 풀어보자.

기존 시스템

Cardano는 여러 노드의 PoS 합의 알고리즘을 기반으로 네트워크가 구성된다. 평균 20초마다 블록이 생성되는데, 블록 생성 노드는 무작위로 추첨되어 블록을 생성한다. 여기서 블록 검증은 50~100 밀리초 정도 소요된다.

그러나 이 알고리즘의 계산은 네트워크의 대역폭을 낭비한다고 여겨진다. 노드가 블록 생성하고 검증하는 이 짧은 시간을 제외하곤 대부분 노드 CPU가 유휴 상태가 되기 때문이다.

네트워크 리소스는 병렬적으로 사용될 수 있으나, 알고리즘은 순차적이다. 병렬 시스템에 순차적인 알고리즘은 자원을 비효율적으로 사용할 수 밖에 없다. 여기서 순차적인 것은 블록 생산에만 적용된다. 블록 검증이 동시에 이뤄질 순 없다. 모두가 통일된 전역 상태를 이루기 위해선 일정 데이터가 동기화가 되는 통신이 필수적이다. 그렇다고 확장성을 높이기 위해서 블록 생성 빈도를 줄이거나, 블록 크기를 높이는 것은 확장성을 높이는 좋은 해결책이 아니다.

간단히 말해서 기존 시스템에는 자원의 비효율적인 사용과 한정된 트랜잭션 처리량, 그리고 순차적 데이터 처리로 인한 문제가 있다.

다행히도 카르다노는 UTxO 모델을 사용하기 때문에, 충돌하는 트랜잭션을 구별하는 것은 간단하다. 그래서 검증 결과에 관계없이, 다른 순서 혹은 병렬로 검증될 수 있기 때문에 동시성과 병렬화로 알고리즘을 만드는 것이 비교적 쉽다.

여기서 Input Endorsers가 병렬적으로 데이터 검증을 가능하게 해주는 알고리즘이라고 볼 수 있다.

Input Endorsers

Input Endorsers는 블록 생성 사이에 존재하는 유휴 시간에 3가지 유형의 블록을 활용하여 트랜잭션 처리에 병렬성과 동시성을 모두 달성할 수 있다.

  • 병렬성: 여러 작업이 동시에 실행
  • 동시성: 여러 작업이 겹치는 기간에 진행

여러 트랜잭션이 서로 다른 노드에 의해서 동시에 검증되고, 보증될 수 있도록 하여 병렬성을 구현한다. 이어서 각 슬롯에서 여러 블록이 생성되고 전파되도록 하여 동시성도 구현하여 네트워크의 처리량과 퍼포먼스를 높인다.

Input Endorsers의 세 가지 블록

IE라고 부르자. IE는 입력 블록(Input Block), 보증 블록(Endorsement Blocks) 그리고 순위 블록(Ranking Block)이라는 세 유형의 블록을 사용한다. 블록 생성에 있어 카르다노는 무작위 프로세스를 사용하기 때문에, 일부 블록 유형이 하나의 슬롯에서 병렬적으로 생성될 수 있다. 

각 블록 유형엔 서로 다른 주조 빈도가 설정된다.

  • 입력 블록: 0.2~2초
  • 보증 블록: 5~10초
  • 순위 블록: 15~30초

정확한 시간은 결정되지 않았으나, 필요에 따라 조정될 것이다. 위에서 언급했던 것처럼, 유휴 상태에 이뤄지는 프로세스는 다음과 같다.

  1. IE를 사용하면 새 트랜잭션이 보류중인 모든 트랜잭션이 이동하는 mempool에 들어간다.
  2. 노드는 여러 트랜잭션을 그룹화하고 초당 여러 Input Block을 생성한다.
  3. 다른 노드는 Input Block을 병렬로 검증하고 Endorsement Block을 생성한다. (이 과정은 20초의 빈 시간동안 병렬적으로 이뤄짐)
  4. 다른 노드는 Endorsement Block을 검증하고 보증 리포트를 생성한다.
  5. 하나의 Endorsement Block 에 대한 리포트가 생성되면 노드는 이를 통해 현재 순차적 모델이 작동하는 방식과 유사한 최종 Ranking Block을 생성하여 체인에 추가한다.

그래서 각 블록의 역할은 다음과 같다.

Input Block

  • 트랜잭션의 신속한 처리: Input Block은 네트워크에 발생하는 트랜잭션을 빠르게 포착하고 블록에 포함시켜 처리 이는 트랜잭션을 빠르게 네트워크에 전파하고 검증하는 데 중점
  • 멤풀(mempool) 비우기: 노드는 자신의 멤풀에 있는 트랜잭션을 Input Block에 포함시켜 멤풀을 효율적으로 관리하고, 네트워크의 대기 시간을 줄임
  • 트랜잭션의 병렬 처리 지원: 다수의 Input Block이 동시에 생성되고 처리될 수 있어, 네트워크는 더 많은 트랜잭션을 동시에 처리할 수 있음

Endorsement Block

  • 트랜잭션의 검증 및 승인: Endorsement Block은 Input Block에 포함된 트랜잭션들이 유효하고 네트워크에 의해 승인되었음을 나타냄. 이 과정을 통해 트랜잭션의 정확성을 보증
  • 네트워크 합의 가속화: Endorsement Block은 여러 Input Block을 참조할 수 있으며, 이를 통해 트랜잭션에 대한 네트워크의 합의를 더 빠르게 이룰 수 있음.
  • 블록간 연결 구성: 여러 Endorsement Block이 서로를 참조하여 트리와 같은 구조를 형성할 수 있으며, 이는 네트워크의 트랜잭션 처리 및 검증 과정을 더욱 효율적으로 만들게 해줌

Ranking Block

  • 네트워크 합의 및 최종성 확보: Ranking Block은 네트워크 합의의 기반을 형성하며, 트랜잭션의 최종성을 확보함. 이는 블록체인의 전통적인 선형 구조를 유지하며 네트워크 전체의 합의 상태를 반영
  • Endorsement Block 참조: Ranking Block은 하나 이상의 Endorsement Block을 참조하며, 이를 통해 트랜잭션이 유효하고 네트워크에 의해 승인되었음을 최종적으로 확정
  • 블록체인의 선형성 유지: Ranking Block은 이전 Ranking Block을 참조함으로써 블록체인의 연속성과 선형성을 보장함. 이 과정은 더블 스펜딩(double spending) 공격을 방지하고 전체 블록체인의 정확성을 유지하는 데 필수적임

확장성 향상을 위해서 이더리움 네트워크는 Sharding을 솔루션으로 제시했으나, 카르다노는 UTxO를 활용한 Input Endorsers를 구현했다. 샤딩의 경우엔 복사본을 여러개 생성했을 때 샤드 간 동기화와 통신의 오버헤드 문제가 있다.

그러나 IE는 UTxO 모델을 기반으로, 트랜잭션 선택과 블록 생성을 분리할 수 있어, 병렬 처리와 동시성 구현이 가능하다.

현재 구조적인 문제에 놓인 이더리움에선 구현할 수 없는 솔루션이기 때문에 더욱 관심이 간다. 앞으로 확장성 향상에 얼마나 영향을 끼칠지 지켜봐야겠다.

https://cexplorer.io/article/understanding-input-endorsers

https://www.linkedin.com/pulse/input-endorsers-simple-possible-lucas-macchiavelli-cujff/

반응형
Comments