검증자/검사자 분리
이 기능은 현재 테스트넷 전용입니다! 본인 책임하에 참여하세요.
TON 블록체인의 핵심 기능은 네트워크 노드에 트랜잭션 처리를 분산하고 "모든 사람이 모든 트랜잭션을 확인하는 방식"에서 "모든 트랜잭션이 보안 검증자 하위 집합에 의해 확인되는 방식"으로 전환할 수 있다는 것입니다. 하나의 워크체인이 필요한 수의 샤드체인으로 분할될 때 샤드를 통해 처리량을 무한히 수평적으로 확장할 수 있는 이 기능은 TON을 다른 L1 네트워크와 차별화합니다.
그러나 담합을 방지하기 위해 하나 또는 다른 샤드를 처리하는 검증자 하위 집합을 정기적으로 순환시켜야 합니다. 동시에 트랜잭션을 처리하는 검증자는 이전 트랜잭션의 샤드 상태를 알고 있어야 합니다. 가장 간단한 접근 방식은 모든 검증자가 모든 샤드의 상태를 알도록 하는 것입니다.
이 접근 방식은 TON 사용자 수가 수백만 명 범위 내에 있고 TPS(초당 트랜잭션 수)가 수백 개 미만일 때 잘 작동합니다. 그러나 향후 TON이 초당 수천 건의 트랜잭션을 처리하고 수억 또는 수십억 명의 사용자를 서버에 저장하게 되면 단일 서버로는 전체 네트워크의 실제 상태를 유지할 수 없게 됩니다. 다행히도 TON은 이러한 부하를 염두에 두고 설계되었으며 처리량과 상태 업데이트 모두 샤딩을 지원합니다.
이는 두 가지 역할 분리를 통해 달성할 수 있습니다:
- 콜레이터 - 네트워크의 일부만 감시하고 실제 상태를 파악하여 다음 블록을 콜레이트(생성)하는 액터입니다.
- 검증자 - 콜레이터로부터 새로운 블록을 받아 유효성을 확인하고 서명하여 지분 손실의 위험을 감수하고 정확성을 효과적으로 보장하는 행위자입니다.
동시에 TON의 아키텍처는 검증자가 블록체인의 상태를 실제로 저장하지 않고도 특별히 제작된 증명을 확인하여 새로운 블록을 효과적으로 검증할 수 있도록 합니다.
이렇게 하면 TON의 처리량이 단일 머신에서 처리하기에는 너무 많을 경우, 네트워크는 처리할 수 있는 체인의 일부만 처리하는 콜레이터의 하위 네트워크와 새로운 거래를 커밋하기 위해 많은 보안 세트를 형성하는 검증자의 하위 네트워크로 구성됩니다.
현재 TON 테스트넷은 이 검증자/콜레이터 분리를 테스트하는 데 사용되며, 일부 검증자는 정상적으로 작동하고 일부 검증자는 스스로 블록을 콜레이트하지 않고 콜레이터로부터 블록을 받습니다.
"라이트 유효성 검사기"로 가입
새로운 노드 소프트웨어는 블록 생성 브랜치에서 사용할 수 있습니다.
콜레이터
새 콜레이터를 생성하려면 TON 노드를 설정해야 하며, 플래그 -M
을 사용하여 노드가 처리하지 않는 샤드체인을 주시하지 않도록 강제할 수 있습니다.
유효성 검사기 엔진 콘솔에서 콜레이터에 대한 새 키를 생성하고 이 키에 adnl 범주
0`을 설정한 다음 명령을 통해 콜레이션 엔티티를 추가합니다:
addcollator <adnl-id> <chain-id> <shard-id>
예를 들어
newkey
addadnl <adnl-id> 0
addcollator <adnl-id> 0 -9223372036854775808
wc:shard_pfx를 샤드하도록 구성된 콜레이터는 샤드 wc:shard_pfx, 그 조상 및 자손의 블록을 콜레이션할 수 있으며, 또한 콜레이션에 필요하므로 모든 shese 샤드를 모니터링합니다.
콜레이터는 명령어로 중지할 수 있습니다:
delcollator <adnl-id> 0 -9223372036854775808
현재 네트워크에는 하나의 콜레이터가 있으며 구성 -41은 해당 콜레이터의 adnl 주소를 알리는 데 사용됩니다.
유효성 검사기
검증자를 실행하려면 TON 노드를 설정하고, --lite-validator
플래그를 사용하여 검증자가 블록을 생성하는 대신 콜레이터에 새 블록을 요청하도록 하고 스테이킹 프로세스를 설정해야 합니다. 라이트 모드의 검증자는 -41
구성에서 콜레이터 노드를 사용합니다.
가장 쉬운 방법은 다음과 같습니다:
- 테스트넷용 MyTonCtrl 설정
- 유효성 검사기 중지
sudo systemctl stop validator
- 서비스 파일
sudo nano /etc/systemd/system/validator.service
업데이트:--lite-validator
플래그를 추가합니다. - systemctl
sudo systemctl daemon-reload
재로드 - 유효성 검사기 시작
sudo systemctl start validator
라이트서버
콜레이터와 마찬가지로 라이트서버는 블록체인의 일부만 모니터링하도록 구성할 수 있습니다. 이는 -M
옵션으로 노드를 실행하고 validator-engine-console
에서 샤드를 추가하면 됩니다:
addshard 0 -9223372036854775808
마스터체인은 기본적으로 항상 모니터링됩니다. 델하드 0 -9223372036854775808`을 사용하여 샤드를 제거할 수 있습니다.
라이트 클라이언트
글로벌 구성에는 두 섹션 중 하나 이상이 포함되어야 합니다: liteservers및
liteservers_v2`. 첫 번째 섹션에는 모든 샤드 상태에 대한 데이터가 있는 "전체" 라이트서버가 포함됩니다. 두 번째 섹션에는 블록체인의 일부에 대한 데이터를 포함하는 "부분" 라이트서버가 포함됩니다.
"부분" 라이트서버는 다음과 같이 설명됩니다:
"liteservers_v2": [
{
"ip": ...,
"port": ...,
"id": {
"@type": "pub.ed25519",
"key": "..."
},
"shards": [
{
"workchain": 0,
"shard": -9223372036854775808
}
]
}
...
]
라이트 클라이언트와 톤리브는 이 구성을 지원하며, 각 쿼리에 적합한 라이트서버를 선택할 수 있습니다. 각 라이트서버는 기본적으로 마스터체인을 모니터링하며, liteservers_v2
의 각 서버는 암시적으로 마스터체인에 대한 쿼리를 수락하도록 구성됩니다. 구성에서 샤드 wc:shard_pfx
는 서버가 샤드 wc:shard_pfx
, 그 조상 및 그 하위에 대한 쿼리를 허용한다는 것을 의미합니다(콜레이터 구성과 마찬가지로).
전체 데이터 정렬
기본적으로 유효성 검사기 세트에서 새 블록을 제안하는 유효성 검사기는 "블록 이전" 상태를 증명하는 데이터를 첨부하지 않습니다. 이 데이터는 다른 검증자가 로컬에 저장된 상태로부터 가져와야 합니다. 이렇게 하면 기존 노드(마스터 브랜치에서)와 새로운 노드가 합의에 도달할 수 있지만, 새로운 검증자는 모든 네트워크 상태를 주시해야 합니다.
검증자가 콜레이트된 데이터가 첨부된 블록을 공유할 때 새 프로토콜로 업그레이드하려면 다음을 수행하면 됩니다.
- 모든 유효성 검사기를 새 노드 버전으로 업그레이드하기
- full_collated_data](https://github.com/spycheese/ton/blob/block-generation/crypto/block/block.tlb#L737)를 true로 설정하기
다음 단계
검증자*와 검증자 역할을 분리하는 실질적인 능력은 무한한 처리량을 향한 여정의 주요 이정표이지만, 진정한 탈중앙화 및 검열 저항 네트워크를 만들기 위해서는 다음이 필요합니다.
- 콜레이터*의 독립성 및 중복성 보장
- 검증자와 콜레이터의 안정적이고 안전한 상호 작용 방식 보장
- 새로운 블록의 지속적인 콜레이션을 장려하는 콜레이터에 적합한 재무 모델을 보장합니다.
현재 이러한 작업은 해당 범위에서 제외됩니다.