본문으로 건너뛰기

샤드

샤딩은 데이터베이스 설계에서 기원한 성숙한 개념입니다. 이는 하나의 논리적 데이터 세트를 여러 데이터베이스에 나누어 분산시키는 것으로, 이 데이터베이스들은 서로 독립적이며 여러 서버에 배포될 수 있습니다. 간단히 말해, 샤딩은 수평적 확장성을 가능하게 합니다 - 데이터를 독립적인 여러 조각으로 나누어 병렬로 처리할 수 있게 하는 것입니다. 이는 데이터에서 빅 데이터로의 전환에서 중요한 개념입니다. 데이터 세트가 전통적인 방법으로 처리하기에는 너무 커질 때, 더 작게 분할하지 않으면 확장할 다른 방법이 없습니다.

TON 블록체인의 샤딩 메커니즘은 많은 수의 거래를 처리할 수 있게 합니다. TON 블록체인은 하나의 마스터체인과 최대 232개의 워크체인으로 구성됩니다. 각 워크체인은 자체 규칙을 가진 별도의 체인입니다. 각 워크체인은 260개의 샤드체인 또는 하위 샤드로 추가로 분할될 수 있으며, 이는 워크체인의 상태의 일부를 포함합니다. 현재 TON에서는 하나의 워크체인, 즉 베이스체인만 운영되고 있습니다. TON에서 샤딩의 주요 아이디어는 계정 A가 계정 B에 메시지를 보내고 계정 C가 계정 D에 메시지를 보낼 때, 이 두 작업이 비동기적으로 수행될 수 있다는 것입니다.

기본적으로 베이스체인 (workchain=0)에는 샤드 번호 0x8000000000000000 (또는 이진 표현으로 1000000000000000000000000000000000000000000000000000000000000000)인 하나의 샤드만 존재합니다. 마스터체인 (workchain=-1)은 항상 하나의 샤드만 가집니다.

마스터체인

마스터체인은 네트워크 구성과 모든 워크체인의 최종 상태를 저장하는 주요 체인입니다. 이를 마스터체인이 생태계의 모든 샤드에 대한 단일 진실의 원천이자 핵심 디렉토리로 이해할 수 있습니다.

마스터체인은 현재 설정, 활성 검증자 목록과 그들의 스테이크, 활성 워크체인 및 관련 샤드체인을 포함한 기본 프로토콜 정보를 담고 있습니다. 가장 중요한 것은 모든 워크체인과 샤드체인의 최신 블록 해시를 기록하여 네트워크 전반에 걸친 합의를 강제하는 것입니다.

워크체인

마스터체인은 워크체인이라고 불리는 개별 체인으로 분할됩니다. 워크체인은 특정 거래나 사용 사례에 맞게 맞춤화된 블록체인으로, TON 네트워크 내에서 병렬로 작동합니다.

차별화

TON 블록체인을 설계할 때, 샤딩을 활용하는 다른 블록체인과 차별화되는 두 가지 주요 결정이 있었습니다.

첫째, TON은 네트워크 부하에 따라 블록체인을 동적으로 분할합니다. 거래 수가 임계 수준에 도달하면 블록체인은 자동으로 두 개의 별도 샤드체인으로 분할됩니다. 한쪽 부분의 부하가 계속 증가하면 다시 절반으로 분할되며, 이 과정은 필요에 따라 계속됩니다. 거래 수가 감소하면 샤드는 다시 합쳐질 수 있습니다. 이 적응형 모델은 주어진 시간에 필요한 만큼의 샤드를 생성할 수 있게 합니다.

TON을 차별화하는 두 번째 솔루션은 샤드 수의 비고정 원칙입니다. 이더리움 2.0과 같이 고정된 샤드 수(64개 샤드)를 지원하는 시스템과 달리, TON은 네트워크의 필요에 따라 샤드를 계속 추가할 수 있으며, 이론적으로는 워크체인당 260개의 샤드를 한도로 설정하고 있습니다. 이 숫자는 매우 커서 사실상 무한대이며, 지구상의 모든 사람에게 1억 개 이상의 샤드를 제공하고도 남을 수 있습니다. 이 접근 방식은 사전에 예측하기 어려운 동적 확장 요구를 충족하는 유일한 방법입니다.

분할

TON 블록체인에서 단일 계정의 거래 순서(예: Tx1 -> Tx2 -> Tx3 -> ...)를 계정 트래잭션 체인 또는 계정체인이라고 합니다. 이는 단일 계정과 관련된 거래의 연속임을 강조합니다. 여러 개의 AccountChains가 단일 샤드 내에서 결합하여 ShardChain을 형성합니다. ShardChain (이하 샤드)은 샤드 내 모든 거래를 저장하고 처리하는 역할을 하며, 각 거래 체인은 특정 계정 그룹에 의해 정의됩니다.

이 계정 그룹들은 공통 이진 접두사로 표시되며, 이는 동일 샤드에 클러스터링하는 기준으로 사용됩니다. 이 접두사는 샤드 ID에 나타나며 64비트 정수로 표현됩니다. 그 구조는 다음과 같습니다: <binary prefix>100000.... 예를 들어, ID가 1011100000...인 샤드는 접두사 1011로 시작하는 모든 계정을 포함합니다.

어떤 샤드의 거래 수가 증가하면, 이 샤드는 두 개의 샤드로 분할됩니다. 새로운 샤드는 다음과 같은 ID를 얻습니다: <parent prefix>01000...<parent prefix>11000...이며, 각각 <parent prefix>0<parent prefix>1로 시작하는 계정을 담당하게 됩니다. 샤드의 블록 일련 번호는 부모의 마지막 일련 번호에 1을 더한 값부터 연속적으로 시작합니다. 분할 후, 샤드는 독립적으로 작동하며 서로 다른 일련 번호를 가질 수 있습니다.

간단한 예:

마스터체인 블록은 헤더에 샤드에 대한 정보를 포함합니다. 샤드의 블록이 마스터체인 헤더에 나타나면, 해당 블록은 완료된 것으로 간주되며(롤백할 수 없음) 최종적으로 확정됩니다.

실제 예:

  • 마스터체인 블록 seqno=34607821은 두 개의 샤드를 포함합니다: (0,4000000000000000,40485798)(0,c000000000000000,40485843) (https://toncenter.com/api/v2/shards?seqno=34607821).
  • 샤드 shard=4000000000000000shard=2000000000000000shard=6000000000000000으로 분할되었으며, 마스터체인 블록 seqno=34607822는 세 개의 샤드를 가지게 됩니다: (0,c000000000000000,40485844), (0,2000000000000000,40485799) 그리고 (0,6000000000000000,40485799). 두 새로운 샤드는 동일한 일련 번호(seqnos)를 가지지만 다른 샤드 ID를 가지고 있다는 점에 유의하십시오 (https://toncenter.com/api/v2/shards?seqno=34607822).
  • 새로운 샤드는 독립적으로 작동하며, 100개의 마스터체인 블록 후(마스터체인 블록 seqno=34607921), 한 샤드는 마지막 블록으로 (0,2000000000000000,40485901)을 가지며 다른 하나는 (0,6000000000000000,40485897)을 가집니다 (https://toncenter.com/api/v2/shards?seqno=34607921).

병합

샤드에 대한 부하가 줄어들면 다시 병합할 수 있습니다:

  • 두 샤드는 공통 부모를 가지고 있어야 병합할 수 있으며, 따라서 샤드 ID는 <parent prefix>010...<parent prefix110...이어야 합니다. 병합된 샤드는 샤드 ID <parent prefix>10...을 갖게 됩니다(예: 10010... + 10110... = 1010...). 병합된 샤드의 첫 번째 블록은 seqno=max(seqno1, seqno2) + 1을 가집니다.

간단한 예:

실제 예:

참고 항목