---
status: LIVE_THREE_NODE_SIGNED_RPC_BLOCK_QUORUM_PROVEN_AND_REVOKED
production_rpc_enabled: false
validator_changed: false
external_transaction_enabled: false
main_server_outage_continuity_proven: false
---

# NAT-safe RPC 블록 증명 live canary

## 결과

2026-08-05에 고정 hostname 없이 fresh heartbeat와 canonical validator runtime 조건으로 PC 3대를 동적으로 선택했다. 대상 장치에만 만료되는 rollout 정책과 Sync Client `1.4.69-rpc-attest-common-checkpoint-default-off-locked`를 배포했다.

세 PC는 운영자 키나 validator 키를 사용하지 않았다. 각 PC가 별도의 Ed25519 노드 키를 생성하고 Windows DPAPI Current User 범위로 private key를 보호했다. 서버가 지정한 공통 체크포인트에 대해 각 로컬 canonical RPC에서 block number, hash, parent hash를 조회한 뒤 outbound heartbeat로 서명 envelope를 제출했다.

실측 결과는 다음과 같다.

- 세 PC 모두 블록 `620000`을 서명했다.
- 세 서명이 합의한 block hash는 `0x978de27d6f9f33a5933291c1fc42851c27bd5173708f36b0a4c5b51feca33721`이다.
- 서로 다른 Ed25519 node key 3개가 검증되어 3-of-3 quorum을 구성했다.
- 직접 inbound RPC 포트를 열지 않고 기존 outbound heartbeat 경로만 사용했으므로 NAT 뒤 PC도 참여했다.
- 서버가 본 network failure-domain hash는 2개였다. 다만 CDN, 프록시, 공유 NAT를 배제하는 노드 측 네트워크 challenge는 아직 없으므로 물리적 failure-domain 독립성까지 증명한 것은 아니다.
- 쓰기 RPC와 transaction submission은 허용하지 않았다.
- production 환경의 permissionless RPC flag는 켜지 않았다.
- validator role, key, process, validator set은 변경하지 않았다.

quorum 확인 직후 rollout feature flag를 `false`로 갱신했다. 세 노드가 `POLICY_DISABLED`를 보고하고 모든 2분 attestation lease가 만료된 후 임시 rollout policy 파일을 삭제했다.

## 공통 체크포인트 규칙

활성 canonical runtime들의 가장 낮은 head에서 안전 깊이 512블록을 뺀 뒤 5,000블록 경계로 내림한다. 이 방식은 높이가 약 4천 블록 다른 노드들도 모두 보유한 안정된 블록 하나를 서명하게 하며, 첫 heartbeat에서 challenge를 받기 전에는 PC가 임의의 자체 head를 서명하지 않는다.

서버는 다음을 모두 검증한다.

1. chain ID가 `20260718`인지
2. Ed25519 서명과 public-key hash가 일치하는지
3. 기존 device에 묶인 node key가 재바인딩되지 않았는지
4. attestation block이 서버가 지정한 공통 체크포인트와 정확히 같은지
5. attestation이 만료되지 않았고 TTL 상한을 지키는지
6. quorum이 서로 다른 node key의 서명으로 구성됐는지

## 아직 남은 경계

이번 canary는 메인 서버가 살아 있는 동안 outbound heartbeat로 세 서명을 모으는 경로를 증명했다. 따라서 메인 서버 접근 불가 시에도 서비스가 계속된다는 최종 증명은 아니다.

다음 단계는 이 서명들을 PC peer gateway끼리 교환해 메인 서버 없이 quorum certificate를 만들고 조회하는 것이다. 그 다음 stateless service capsule, 클라이언트 bootstrap/failover, 서명 이벤트·projection 복구를 연결해야 한다.

기계 판독 증거는 `evidence/nat-safe-rpc-attestation-live-canary-redacted.json`에 기록한다.
