Sui의 작동 방식

이 문서에는 두 가지 주요 목표가 있습니다. 먼저 Sui의 주요 기능과 설계 선택 사항을 제시하면서 수이에 대한 하이레벨 수준의 개요를 제공합니다. 그런 다음 잠재적 사용자가 Sui가 자신들의 사용 사례에 적합한지 판단할 수 있도록 Sui와 기존 블록체인 시스템과의 비교 분석을 실시합니다.

이 문서는 크립토 스페이스에 대해 잘 아는 엔지니어, 개발자 및 독자를 위해 작성되었습니다. 그렇다고 해서 프로그래밍 언어나 탈중앙 시스템에 대한 깊은 이해를 가정하지 않습니다. Sui의 작동 방식에 대한 훨씬 더 깊은 설명은 Sui 백서를 참조하십시오. Sui와 다른 블록체인 시스템 간의 접근 방식의 차이에 대한 하이레벨 수준의 개요는 How Sui Differs from Other Blockchains 참조하십시오.

tl;dr

Sui 블록체인은 이전에는 상상할 수 없었던 속도와 규모로 작동합니다. Sui는 일반적인 블록체인 트랜잭션이 단순한 전송이라고 가정하고 그 사용을 최적화합니다. Sui는 각 요청의 멱등성(idempotent)을 충족하고, 네트워크 연결을 더 오래 유지하며, 트랜잭션이 즉시 완료되도록 함으로써 이를 수행합니다. Sui는 단일 라이터 객체를 최적화하여 단순한 트랜잭션에 대한 합의를 배제하는 설계를 가능하게 합니다.

전통적인 블록체인의 파이어 앤 포겟(fire and forget) 방식 대신, Sui는 요청자와 검증자 간의 양방향 통신을 보장하며, 간단한 트랜잭션이 거의 즉각적인 완결성을 갖습니다. 짧은 지연 시간을 통해서 실시간 완결성이 필요한 게임 및 기타 설정에 온체인 트랜잭션을 쉽게 통합할 수 있습니다. 또한, Sui는 Move로 작성된 스마트 컨트랙트를 지원하는데, Move 언어는 강력한 내재 보안성과 더 이해하기 쉬운 프로그래밍 모델을 가진 블록체인을 위해 설계되었습니다.

대역폭 비용이 지속적으로 감소하는 세계에서, 우리는 사용자를 대신하여 쉽고, 재미있고, 투표 검증 시 수익성이 있을 수 있는 서비스 생태계를 만들고 있습니다.

구성 요소

다음과 같은 주요 Sui 개념을 숙지할 필요가 있습니다.

  • 객체(Objects) - Sui에는 Move 패키지(스마트 컨트랙트)에 의해 생성되고 관리되는 프로그래밍 가능한 객체가 있습니다. Move 패키지 자체도 개체입니다. 따라서 Sui 객체는 가변 데이터 값과 불변 패키지 두 가지 범주로 분할될 수 있습니다.

  • 트랜잭션(Transactions) - Sui 원장에 대한 모든 업데이트는 트랜잭션을 통해 수행됩니다. 이 절에서는 Sui가 지원하는 트랜잭션 유형과 실행 시 원장이 어떻게 변경되는지 설명합니다.

  • 검증자(Validators) - Sui 네트워크는 독립된 검증자 집합에 의해 운영되며, 각 검증자는 별도의 시스템(또는 동일한 엔티티에 의해 운영되는 시스템의 샤드 클러스터)에서 자체 Sui 소프트웨어의 인스턴스를 실행합니다.

아키텍처

Sui는 프로그래밍 가능한 객체의 집합을 저장하는 분산 원장입니다. 각 객체는 단일 주소에 의해 소유되며 각 주소는 임의의 수의 객체를 소유할 수 있습니다.

원장은 특정 주소에 의해 전송된 거래를 통해 업데이트됩니다. 트랜잭션은 객체를 만들고, 삭제하고, 쓸 수 있을 뿐만 아니라 다른 주소로 전송할 수도 있습니다.

구조적으로, 트랜잭션은 입력 객체 참조의 집합과 원장에 이미 존재하는 Move 코드 객체에 대한 포인터를 포함한다. 트랜잭션을 실행하면 입력 객체 및 해당 소유자와 함께 새로 생성된 객체 집합이 업데이트됩니다. 보낸 사람의 주소가 A인 트랜잭션은 A가 소유하거나 공유된 객체 혹은 처음 두 그룹의 다른 객체가 소유한 객체로 받아들일 수 있습니다.

Sui validator는 Byzantine Consistent Broadcast를 사용하여 높은 처리량를 기록하는 방식인 병렬 처리 방식으로 트랜잭션을 실행하고 합의합니다.

시스템 개요

이 섹션은 Sui가 주요 성능 및 보안 목표를 달성하는 방법에 대해 더 많은 정보를 얻고자 하는 독자들을 위해 작성되었습니다.

Sui는 일반적인 블록체인 트랜잭션이 사용자 간 전송 또는 자산 조정이라고 가정하고 해당 시나리오에 맞춰 환경을 최적화합니다. 따라서 Sui는 (i)특정 소유자만 수정할 수 있는 소유 객체와 (ii)특정 소유자가 없고 둘 이상의 사용자가 수정할 수 있는 공유 객체 두 가지로 자산을 구분합니다. 이러한 구별을 통해 소유 객체만 포함하는 단순 트랜잭션에 대해 합의 과정을 배제하고 매우 짧은 지연 시간을 달성할 수 있습니다.

Sui는 블록체인 성장에 대한 주요 장애점인 head-of-line blocking을 어느정도 해결합니다. 블록체인 노드는 최근 검증된 트랜잭션과 같이 전체 블록체인의 상태를 나타내는 축전지 역할을 지속적으로 수행합니다. 노드들은 합의 프로토콜에 참여하여 블록에 대한 트랜잭션 수정(추가, 제거, 변이)을 반영하는 업데이트를 해당 스테이트에 추가합니다. 그 합의 프로토콜은 블록 추가 이전의 블록체인의 상태, 상태 업데이트 자체의 유효성과 적합성, 블록 추가 후의 블록체인의 상태에 대한 합의로 이어진다. 이러한 블록 누적량은 주기적으로 축전지에 수집됩니다.

Sui에서 이 합의 프로토콜은 트랜잭션이 공유 객체를 포함할 때만 필요합니다. 이를 위해 Sui는 Narwhal and Tusk DAG 기반 멤풀과 효율적인 비잔틴 장애 허용(BFT) 합의를 제공합니다. 공유 객체가 관련될 때 Sui 검증자는 공유 객체에 액세스하는 다른 트랜잭션과 함께 트랜잭션을 완전히 정렬하는, 다른 블록체인에서 적극적인 검증자로 취급되는 역할을 수행합니다.

Sui는 하나의 상태 집합이 아닌 특정 객체를 관리하는 데 집중하기 때문에, 해당 객체를 특별한 방식으로 기록합니다: (i) Sui의 모든 객체가 고유한 버전 번호를 가지고 있으며 (ii) 모든 새로운 버전은 여러 종속성, 자체 버전 객체를 포함할 수 있는 트랜잭션에서 생성됩니다.

결과적으로, Sui validator(또는 상태 사본이 있는 다른 객체)는 생성 이후부터의 객체의 인과적 역사를 보여줄 수 있습니다. Sui는 대부분의 경우에 객체 간의 인과 이력이 무관하다고 명시하지만, 이 이력이 관련된 소수의 경우 Sui는 이 관계를 데이터에서 명시합니다.

Sui는 트랜잭션 처리가 고전적인 의미에서의 궁극적인 일관성을 준수함을 보장합니다. 이것은 두 부분으로 나뉩니다.

  • 최종 전송(Eventual delivery) - 한 정직한 검증자가 트랜잭션을 처리하면 다른 정직한 검증자도 결국 모두 같은 작업을 수행합니다.

  • 수렴(Convergence) - 동일한 트랜잭션 집합을 확인한 두 검증자가 시스템에 대한 동일한 뷰를 공유(동일한 상태에 도달)합니다.

그러나 블록체인과 달리 Sui는 수렴을 목격하기 위해 거래를 멈추지 않습니다.

단순 트랜잭션

많은 트랜잭션들은 블록체인 상태의 다른 임의적 부분들과 복잡한 상호의존성을 갖지 않습니다. 종종 금융 서비스 이용자들은 자산을 수취인에게 보내기를 원하며, 이러한 단순 거래가 허용되는지 여부를 측정하는 데 필요한 유일한 데이터는 발송인의 계정에 대한 최신 정보이다. 이러한 정보 관측을 통해 Sui는 합의를 포기하고 대신 Byzantine Consistent Broadcast을 기반으로 한 더 간단한 알고리즘을 사용할 수 있습니다. 실제 단순 트랜잭션의 예는 잠재적 single-writer apps 목록을 참조하십시오.

이러한 프로토콜은 피어리뷰 보안 보증과 함께 제공되는 FastPay 설계를 기반으로 합니다. 간단히 말해서, Sui는 전체 체인이 아닌 관련 데이터 조각만을 잠그는는 접근 방식을 취합니다. 이 경우 필요한 정보는 발송인 계정뿐이며, 이 계정은 한 번에 하나의 트랜잭션만 보낼 수 있습니다.

Sui는 Move의 객체 모델과 강력한 소유권 모델을 활용하여, 이 접근 방식을 발송인의 통제 하에 있는 여러 요소에 명시적으로 의존하는 더 많은 관련 트랜잭션으로 확장한다. 의존성을 명시하도록 요구함으로써, Sui는 트랜잭션 검증에 multi-lane 접근 방식을 적용하여 독립적인 트랜잭션 흐름이 다른 것들로부터 방해받지 않고 진행될 수 있도록 합다.

Sui는 트랜잭션을 기존 블록으로 일괄 처리하는 대신 개별적으로 검증합니다. 이 접근 방식의 주요 장점은 낮은 지연 시간이며, 성공적인 각 트랜잭션은 Sui 네트워크에 의해 트랜잭션이 처리된다는 것을 증명하는 최종 인증서를 빠르게 획득합니다.

따라서 Sui에서 트랜잭션을 제출하는 과정은 전통적인 블록체인보다 조금 더 간섭에 관대한 방법입니다. 일반적인 블록체인이 동일한 작성자의 다수의 트랜잭션을 파이어 앤 포겟 모드로 받아들일 수 있는 반면, Sui 트랜잭션 제출은 다음과 같은 단계를 따릅니다.

  1. 발송인이 모든 Sui 검증자에게 트랜잭션을 알립니다.

  2. 각 Sui validator는 이 거래에 대한 개별 투표로 응답합니다. 각 투표는 검증자가 소유한 지분에 따라 일정한 가중치를 갖습니다.

  3. 발송인은 이 투표들 중 비잔틴 저항 요건을 충족하는 다수 표를 증명서로 모아서 모든 Sui 검증자들에게 알립니다. 이렇게 하면 트랜잭션이 삭제(혹은 취소)되지 않는 최종성이 보장되므로 트랜잭션이 처리됩니다.

  4. 선택적으로, 발송인은 트랜잭션의 효과를 자세히 설명하는 인증서를 수집할 수 있습니다.

이러한 단계는 발송인에게 더 많은 것을 요구하지만, 이 단계들을 효율적으로 수행함으로써 최소한의 지연 시간으로 파이널리티에 대한 암호화 증명을 제공할 수 있습니다. 원본 트랜잭션 자체를 작성하는 것 외에도, 트랜잭션에 대한 세션 관리는 프라이빗 키에 대한 접근을 요구하지 않으며 제3자에게 위임할 수 있습니다. Sui는 이 방식을 이용하여 Sui Gateway services를 제공합니다.

복잡한 컨트랙트

복잡한 스마트 컨트랙트는 둘 이상의 사용자가 (스마트 계약 특정 규칙에 따라) 변형할 수 있는 공유 객체로부터 이익을 얻을 수 있습니다. 이 경우 Sui는 합의 프로토콜을 사용하여 공유 객체와 관련된 모든 트랜잭션을 정렬합니다. Sui는 Narwhal에 기반한 새로운 피어 리뷰 합의 프로토콜을 사용합니다. 이는 성능과 견고함 측면에서 모두 최첨단으로 취급되는 방식입니다.

공유 객체와 관련된 거래에는 가스비를 지불하기 위해 적어도 하나의 소유 객체가 포함됩니다. 따라서 Sui의 보안 속성을 보장하기 위해 거래 시퀀싱 프로토콜과 함께 소유 객체를 다루는 프로토콜을 신중하게 구성하는 것이 필수적입니다. 공유 객체가 관련되면 트랜잭션 제출은 다음 단계를 따릅니다.

  1. 발송인이 모든 Sui 검증자에게 트랜잭션을 알립니다.

  2. 각 Sui validator는 이 거래에 대한 개별 투표로 응답합니다. 각 투표는 검증자가 소유한 지분에 따라 일정한 가중치를 갖습니다.

  3. 발송인은 이 투표들 중 비잔틴 저항 요건을 충족하는 다수 표를 증명서로 모아서 모든 Sui 검증자들에게 알립니다. 그러나 이번에는 비잔틴 합의를 통해 증명서의 순서를 정합니다.

  4. 트랜잭션이 성공적으로 정렬되면 사용자는 검증인에게 인증서를 다시 알려 트랜잭션을 처리합니다.

확장성

상기했듯이, Sui는 소유된 객체만 포함하는 트랜잭션을 차례를 부여하지 않습니다. 대신 트랜잭션은 인과적으로 순서가 지정됩니다. 트랜잭션 T1이 트랜잭션 T2에서 입력 개체로 사용되는 출력 개체 01을 생성하면 검증인은 T2를 실행하기 전에 T1을 실행해야 합니다. 예를 들어, T1T3에 의해 사용되는 출력 객체를 생성하고 T2T3의 출력 객체를 사용할 수 있습니다. 그러나 인과관계가 없는 거래는 Sui 검증자가 어떤 순서로든 처리할 수 있습니다. 이러한 메커니즘을 통해 Sui는 실행을 대규모로 병렬화하고 여러 시스템에 걸쳐 분할할 수 있습니다.

Sui는 공유 객체와 관련된 트랜잭션을 완전히 정렬하기 위해 state-of-the-art Narwhal consensus protocol을 사용합니다. 컨센서스 하위 시스템은 검증자당 더 많은 시스템을 추가하여 더 많은 트랜잭션을 시퀀싱할 수 있다는 의미에서도 확장됩니다.

Sui 게이트웨이 서비스

Sui 모델은 제3자가 트랜잭션 제출을 지원하도록 권장합니다. 예를 들어, 앱 개발자(예: 게임 개발자)가 많은 사용자가 있는 경우, 사용자를 대신하여 투표 집계 및 인증서 제출을 관리할 수 있습니다. 앱 개발자는 자체 서버(예: 게임 상태를 저장하는 곳)를 사용하여 Sui Gateway 서비스를 실행할 수 있다. 우리는 그러한 서비스의 참조 구현(implementation)을 제공합니다.

앱 사용자가 모바일 기기에서 여러 검증인에게 트랜잭션을 전송하려고 시도하는 대신, 앱 개발자가 운영하는 Sui Gateway 서비스로 전송하는 앱에 트랜잭션을 제출할 수 있다. 수이 게이트웨이 서비스는 전체 트랜잭션 세션을 수행하고 결과를 사용자에게 반환합니다. 앱이 사용자의 개인 키를 알 필요가 없기 때문에 보안이 보장됩니다. 앱 소유자는 단순히 대역폭을 제공할 뿐입니다.

보다 구체적으로 말하면, 이 서비스는 축전지 역할을 하며 트랜잭션이 검증인 쿼럼(Quorum)에 의해 수신되고, 투표 쿼럼을 수집하고, 인증서를 검증인에게 제출하고, 클라이언트에 회신합니다. Sui Gateway는 가용성에 대해서만 신뢰되며 안전성은 신뢰되지 않습니다.

대역폭 비용이 지속적으로 감소하는 세상에서, Sui는 최종 사용자를 대신하여 중계되는 트랜잭션 투표와 인증서를 보장하기 위해 쉽고, 재미있고, 아마도 수익성이 있는 서비스 생태계를 조성합니다.

스마트 컨트랙트 프로그래밍

Sui 스마트 컨트랙트는 Move 언어로 작성됩니다. Move는 안전하고 표현력이 뛰어나며, 해당 시스템과 데이터 모델은 자연스럽게 Sui를 확장 가능하게 만드는 병렬 합의/실행 전략을 지원합니다. Move는 Diem blockchain을 위해 Meta에서 개발된 스마트 컨트랙트를 구축 목적의 오픈 소스 프로그래밍 언어입니다. 이 언어는 플랫폼에 구애받지 않으며, Sui 외에도 다른 플랫폼(예: 0L, StarCoin)에서도 인기를 얻고 있습니다.

Move의 기능에 대한 자세한 설명은 다음을 참조하십시오.

Last updated