작동 방식
세션은 네 단계입니다. 발견, 핸드셰이크, 추론, 정산. 경로 어디에도 GenKaKu Labs가 운영하는 것은 없습니다.
1. 발견
워커는 WorkerRegistry에 등록합니다.
- peer ID — 응답할 libp2p 신원,
- policy hash — 제공하는 모델과 규칙,
- 선택적 locator — multiaddr 같은 주소 힌트.
레지스트리는 count()와 isActive(address)를 공개합니다. 앱은 공개 RPC로 읽으며,
신뢰해야 할 디렉터리 API는 없습니다.
locator는 선택 사항입니다. 데스크톱 앱은 publishAddress를 명시적으로 켜지 않는 한
공인 IP를 게시하지 않습니다. 한 번 체인에 올라간 locator는 영구적입니다.
2. 핸드셰이크
앱은 워커의 peer ID로 libp2p 연결을 엽니다. NAT 통과는 DCUtR을 쓰고, 양쪽이 대칭 NAT 뒤에 있으면 핸드셰이크에만 릴레이를 씁니다. 릴레이는 모델 트래픽을 나르지 않습니다. 128 KiB / 2분 한도로는 LLM 스트림을 감당할 수 없습니다.
hello 교환에서 고정되는 것:
- peer ID(레지스트리와 일치해야 함),
- 워커의 지갑 주소,
- policy hash,
- 시간당 견적과 과금 방식.
3. 추론
워커는 Ollama로 모델을 로컬에서 실행하고 직접 연결로 토큰을 스트리밍합니다. 프롬프트는 마켓플레이스에 저장되지 않습니다. 워커 운영자는 자신이 처리하는 트래픽을 볼 수 있습니다.
4. 정산
과금은 시간당 견적 + 시작된 분 누적입니다.
- 워커가 시간당 가격을 제시,
- 시작한 분마다 1분으로 계산,
- 2분 작업은 1시간이 아니라 2분치를 지불합니다.
사용자는 JobEscrow에 테스트 USDC를 예치해 세션을 엽니다. 종료 시:
- 워커가 세션 ID, 지출, 영수증 해시에 서명,
settle()이 서명을 검증하고 지출을 해제,- **99%**는 워커, **1%**는 재무,
- 나머지는
refund()로 사용자에게 반환.
워커는 언제든 claim()으로 누적 잔액을 인출할 수 있습니다.
오케스트레이터를 대체하는 것
| 기존 모델 | GenKaKu |
|---|---|
| 서버가 작업을 배정 | 사용자가 컨트랙트에서 워커를 선택 |
| 서버가 프롬프트를 저장 | 직접 피어 연결 |
| 서버가 사용량을 계량 | 시작된 분 누적 + 서명 영수증 |
| 서버가 지급 | 온체인 에스크로 해제 |
중간이 줄어든 만큼 신뢰 가정도 작아지지만 0은 아닙니다. 프롬프트를 워커에게 보여 주는 것은 여전히 신뢰이고, 실행하는 코드도 직접 신뢰해야 합니다.