폰 노드라고 말하려면, 무엇을 증명해야 하는가
Gene Son • Xode • OMNI node design ·
스마트폰에서 블록체인 라이트노드를 돌리는 건 어렵지만 할 수 있는 문제다. 진짜 어려운 건 그다음이다. 기기에 보상을 주기 시작하는 순간, 정직하고 증명 가능한 설계를 해야 한다.
“폰 노드”라는 말의 정확한 뜻
모바일 DePIN 앱에서 “당신의 폰이 노드가 됩니다”라는 말은 흔하다. 하지만 대부분은 서버가 주기적으로 신호를 보내고, 폰은 화면에 “살아 있음”을 표시한다는 뜻이다. OMNI에는 이 차이를 구분하는 상태 플래그가 있다.
약한 주장: 체인에서 직접 받음
백엔드를 거치지 않고 체인 RPC에서 최신 블록을 받았다. 중개자는 줄었지만, 여전히 누군가 알려 준 숫자일 수 있다.
강한 주장: 폰이 스스로 검증함
기기 안의 라이트 클라이언트가 파이널리티를 직접 확인했다. 폰은 전달받은 숫자를 믿는 대신 체인을 검증한다.
두 번째 플래그는 네이티브 smoldot 라이트 클라이언트의 Warp Sync 완료 여부다. 값이 0이면 아직 검증되지 않은 것이다. 검증되지 않았다면 검증됐다고 말하지 않는다. 이 부분이 현재 설계에서 불편하지만 중요한 지점이다.
보상을 붙이는 순간 문제는 달라진다. 노드를 돌리는 보상을 주면, 사람들은 노드를 돌리는 대신 노드를 돌리는 것처럼 보이는 가장 쉬운 방법을 찾을 수 있다.
DePIN에서 어려운 건 일을 시키는 게 아니다. 일했다는 걸 증명하게 만드는 것이다.
하트비트는 왜 거짓말하기 쉬운가
가장 단순한 하트비트는 서버가 알려 준 블록 높이에 서명한다. 서명은 누가 답을 보냈는지는 증명하지만, 그 답이 맞는지는 증명하지 못한다. 검증이 어디에서 일어나는지가 하트비트의 의미를 바꾼다.
서버 → 폰: “누군가 알려 준 숫자에 서명했다”
체인
P2P → 폰 · smoldot
파이널리티 검증: “이 기기가 체인을 직접 따라갔다”
검증의 위치가 하트비트의 의미를 바꾼다그렇다고 검증 하나로 모든 문제가 해결되지는 않는다. 강한 기기 검증이라도 정체된 상태를 계속 보고할 수 있다. 그래서 주장을 세 단계로 나눠야 한다.
LAYER 1: 이 노드가 체인을 실제로 따라가는가
온디바이스 라이트 클라이언트가 체인을 검증한다. 서버 응답을 그대로 믿지 않는다.
LAYER 2: 이 기기는 기기 고유의 것인가
하드웨어 기반 키가 지갑과 기기를 연결한다. 앱을 복제하거나 여러 기기로 가장하기 어렵게 만든다.
LAYER 3: 새로운 참여가 실제로 일어나는가
기기가 실제로 연결되어 있는지, 참여가 계속되고 있는지 확인한다. 계정만 살아 있고 기기는 멈춘 상태일 수 있다.
실패를 정직하게 말하는 일
핵심은 “작동 중”과 “검증 완료”를 하나의 상태로 뭉뚱그리지 않는 것이다. 연결은 됐지만 라이트 클라이언트가 아직 동기화 중일 수 있다. 이 둘은 같은 말이 아니다.
화면에 켜진 초록 불은 사용자가 보고 싶은 신호일 수 있지만, 네트워크가 실제로 증명한 사실과 같지는 않다. 같은 숫자라도 어디서 왔는지에 따라 의미가 달라진다.
같은 숫자라도 원인이 다르면 다른 문장으로 읽혀야 한다. 검증 방법이 다르기 때문이다.
배터리와 데이터가 진짜 제약이다
스마트폰은 서버가 아니다. 사용자는 배터리와 데이터 요금제를 직접 부담한다. 라이트 클라이언트는 가볍게 설계되어야 하고, 앱은 기기에 저장 공간과 네트워크 사용량을 투명하게 보여줘야 한다.
초기 동기화는 시간이 더 걸릴 수 있다. Warp Sync가 끝나기 전에는 검증 완료라고 표시하지 않아야 한다. 상태를 솔직하게 보여주는 일은 사용자의 신뢰를 지키는 일부다.
이런 제약은 블로그 문구가 아니라 DePIN 앱을 만드는 실제 조건이다. 성능과 검증을 함께 고려하고, 어느 쪽도 숨기지 않아야 한다.
정리
폰을 노드라고 부르는 일은 세 가지 문제로 나뉜다. 체인을 따라가는 문제(라이트 클라이언트), 따라가는 걸 증명하는 문제(검증 위치와 하드웨어 키), 그리고 계속 따라가는 문제(배터리와 데이터)다.
셋 중 하나라도 놓치면 나머지가 무의미해진다. 검증 없는 노드는 속임수고, 증명 없는 보상은 파밍이며, 비용을 감춘 설계는 지속될 수 없다.