아키텍처
GenKaKu가 프로덕션에서 실행하는 모든 것은 정적 사이트이거나 피어 프로세스입니다. 요청 경로에 GenKaKu 서버는 없습니다.
패키지
| 패키지 | 역할 |
|---|---|
@genkaku/protocol | 체인 바인딩, 에스크로 과금, libp2p 사이드카, Ollama 브리지 |
@genkaku/dsh-runtime | 두 플러그인이 공유하는 어댑터 |
@genkaku/dsh-worker-plugin | 로컬 모델 제공 |
@genkaku/dsh-user-plugin | 네트워크 모델 소비 |
@genkaku/seed | libp2p 릴레이와 피어 발견 서비스 |
@genkaku/admin | 시드 호스트용 운영자 콘솔 |
프로토콜 코어는 DeepSeek Harness에 의존하지 않습니다. 이는 의도된 것으로, 다른 어댑터가 코어를 건드릴 필요가 없어야 합니다.
온체인
Base Sepolia, chain ID 84532:
| 컨트랙트 | 주소 |
|---|---|
| WorkerRegistry | 0xFbE9FF497dC24bD69d13E4201418938Df7435Ff6 |
| JobEscrow | 0x8175df796A659681009BeDa4609a3cFe9d281D82 |
| MockUSDC (test only) | 0xEb33DFC0424810039337a38510ef522e9E7F9727 |
WorkerRegistry는 지갑별로 peer ID 다이제스트, bytes32 policy hash, 선택적 locator, 활성
플래그를 저장합니다. JobEscrow는 세션별 USDC를 보관하고, 워커의 영수증 서명을 검증하며,
99/1로 나누고 워커의 인출 가능 잔액에 기록합니다. 1% 수수료는 컨트랙트 상수입니다.
쓰기는 테스트넷 전용입니다. 메인넷 경로는 예외를 던집니다. 정식 USDC와 멀티시그 재무는 설정 플래그가 아니라 별도의 출시입니다.
데이터 플레인
워커는 다음 libp2p 프로토콜을 제공합니다.
/genkaku/open/0 session open
/genkaku/token/0 auth token
/genkaku/receipt/0 signed ledger increments
/genkaku/settle/0 co-sign a settlement
/genkaku/offers/0 offer board
/genkaku/policy/0 policy document
/genkaku/hello/0 identity, wallet proof, quote
모든 핸들러는 릴레이된 연결을 허용합니다(runOnLimitedConnection). 따라서 세션은 직접
연결이거나 릴레이 경유이며, 둘 다 일급입니다. libp2p가 스트림을 암호화하므로 릴레이는
암호문을 전달하고 메타데이터만 봅니다.
이 빌드에는 DCUtR / 홀 펀칭이 없습니다. 대칭 NAT 뒤의 피어는 릴레이를 쓰거나 도달할 수 없습니다.
발견
두 개의 독립 경로:
- 온체인 디렉터리 —
WorkerRegistry이벤트가 지갑, peer ID 다이제스트, 선택적 locator를 제공합니다. 플러그인은fallback목록이 있는 공개 RPC를 통해 로그를 읽습니다 (base-sepolia.gateway.tenderly.co가 첫 번째,sepolia.base.org는eth_getLogs를 200 블록으로 제한하므로 마지막). - 시드 릴레이 —
https://staging.genkaku.app/seed가 지금 유효한 multiaddr을GET /peers로 응답하고, 직접 연결할 수 없는 피어를 위한 서킷 릴레이를 제공합니다.
시드 주소는 프로토콜 패키지에 내장되어 있지만 GENKAKU_BOOTSTRAP_SEEDS(쉼표로 구분된
multiaddr)로 재정의할 수 있습니다.
과금 모델
pricePerHour : 6-decimal USDC, set by the worker
unit : 1 minute (60 units per hour)
billed : ceil(elapsed / 1min) × ceil(pricePerHour / 60)
반올림은 시간당 한 번만 일어나고 틱마다 일어나지 않으므로, 사용자는 견적된 시간당 가격보다 많이 지불하지 않고 워커의 미청구 노출은 최대 1분입니다.
유료 세션은 두 개의 트랜잭션입니다.
openEscrow(worker, pricePerHour)— 사용자 → JobEscrow,settle(...)— JobEscrow → 워커(99%) + 재무(1%), 나머지는 환불.
견적이 0이면 에스크로 없이 제공되며, 그래서 무료 워커는 ETH가 전혀 없는 머신에서도 돌릴 수
있습니다.
운영자 인터페이스
- Panel — DeepSeek Harness 안의 플러그인 자체 UI: 모델, 가격, 지갑, 인출, 결제, 수동 워커.
- Status server —
127.0.0.1의 로컬 HTTP 인터페이스로, 47821–47826 중 첫 번째 빈 포트를 쓰며 패널과 클라이언트 어댑터가 사용합니다. - Seed admin — 시드 VM에서 Caddy 뒤
/admin으로 제공되는 별도 콘솔로, 시드 통계와 체인 로그를 읽습니다. 지갑 키를 보관하지 않고 돈을 움직이지 않습니다.
의도적으로 없는 것
- 토큰, 스테이킹, 신용 점수 토큰이 없습니다.
- 오케스트레이션 서버, 프롬프트 데이터베이스가 없습니다.
- 자동 콘텐츠 필터가 없습니다. 프로토콜에는 워커가 프롬프트를 보기 전에 검사하는 훅이 없습니다.
- 메인넷 쓰기 경로가 없습니다.