검증자/콜레이터 분리
이 기능은 현재 테스트넷 전용입니다! 자신의 책임 하에 참여하세요.
TON 블록체인의 핵심 기능은 네트워크 노드에 걸쳐 트랜잭션 처리를 분산하고, "모두가 모든 트랜잭션을 확인"하는 방식에서 "각 트랜잭션은 안전한 검증자 부분집합이 확인"하는 방식으로 전환하는 것입니다. 하나의 워크체인이 필요한 수의 샤드체인으로 분할될 때 샤드를 통해 처리량을 무한히 수평적으로 확장할 수 있는 이 능력이 TON을 다른 L1 네트워크와 구별짓습니다.
그러나 담합을 방지하기 위해 한 샤드나 다른 샤드를 처리하는 검증자 부분집합을 정기적으로 교체해야 합니다. 동시에 트랜잭션을 처리하기 위해 검증자는 명백히 트랜잭션 이전의 샤드 상태를 알아야 합니다. 가장 단순한 접근방식은 모든 검증자가 모든 샤드의 상태를 알도록 요구하는 것입니다.
이 접근방식은 TON 사용자 수가 수백만 명 범위 내이고 TPS(초당 트랜잭션)가 100 미만일 때는 잘 작동합니다. 하나 향후 TON이 초당 수천 개의 트랜잭션을 처리하고 수억 또는 수십억 명의 사람들을 서비스할 때는 어떤 단일 서버도 전체 네트워크의 실제 상태를 유지할 수 없을 것입니다. 다행히도 TON은 이러한 부하를 염두에 두고 설계되었으며 처리량과 상태 업데이트 모두의 샤딩을 지원합니다.
이는 두 가지 역할의 분리를 통해 달성됩니다:
- 콜레이터 - 네트워크의 일부만 감시하고, 실제 상태를 알며 다음 블록을 콜레이트(생성)하는 액터
- 검증자 - 콜레이터로부터 새 블록을 받아 유효성을 확인하고 서명하여 스테이크를 잃을 위험을 감수하면서 정확성을 효과적으로 보장하는 액터
동시에 TON의 아키텍처는 검증자가 특별히 제작된 증명을 확인함으로써 실제로 블록체인 상태를 저장하지 않고도 새 블록을 효과적으로 검증할 수 있게 합니다.
이러한 방식으로, TON의 처리량이 단일 머신이 처리하기에는 너무 무거워질 때, 네트워크는 각각 처리할 수 있는 체인의 일부만 처리하는 콜레이터들의 서브네트워크와 새로운 트랜잭션을 커밋하기 위한 많은 안전한 집합을 형성하는 검증자들의 서브네트워크로 구성될 것입니다.
현재 TON 테스트넷은 이 검증자/콜레이터 분리를 테스트하는 데 사용되고 있으며, 일부 검증자는 평소처럼 작동하고 일부 검증자는 스스로 블록을 콜레이트하지 않고 콜레이터로부터 받습니다.
"라이트 검증자"로 참여하기
새로운 노드 소프트웨어는 accelerator 브랜치에서 사용할 수 있습니다.
콜레이터
새 콜레이터를 생성하려면 TON 노드를 설정해야 합니다; -M
플래그를 사용하여 처리하지 않는 샤드체인을 감시하지 않도록 노드를 강제할 수 있습니다.
validator-engine-console
에서 콜레이터를 위한 새 키를 생성하고, 이 키에 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 샤드, 그 조상 및 후손에서 블록을 콜레이트할 수 있습니다; 또한 콜레이션에 필요하므로 이러한 모든 샤드를 모니터링합니다.
콜레이터는 다음 명령으로 중지할 수 있습니다:
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
마스터체인은 기본적으로 항상 모니터링됩니다. 샤드는 delshard 0 -9223372036854775808
를 사용하여 제거할 수 있습니다.
라이트 클라이언트
전역 설정은 liteservers
와 liteservers_v2
중 하나 이상의 섹션을 포함해야 합니다. 첫 번째 섹션은 모든 샤드 상태에 대한 데이터를 가진 "전체" 라이트서버를 포함합니다. 두 번째 섹션은 블록체인의 일부에 대한 데이터를 포함하는 "부분" 라이트서버를 포함합니다.
"부분" 라이트서버는 다음과 같이 설명됩니다:
"liteservers_v2": [
{
"ip": ...,
"port": ...,
"id": {
"@type": "pub.ed25519",
"key": "..."
},
"shards": [
{
"workchain": 0,
"shard": -9223372036854775808
}
]
}
...
]