본문으로 건너뛰기

아키텍처

프로토콜은 컨트랙트 세 개와 피어투피어 전송 하나입니다. 나머지는 모두 클라이언트입니다.

컨트랙트(Base Sepolia, chain 84532)​

컨트랙트주소
WorkerRegistry v0.20xFbE9FF497dC24bD69d13E4201418938Df7435Ff6
JobEscrow v0.20x8175df796A659681009BeDa4609a3cFe9d281D82
MockUSDC(테스트 전용)0xEb33DFC0424810039337a38510ef522e9E7F9727

WorkerRegistry​

function register(bytes32 peerId, bytes32 policyHash) external;
function registerWithLocator(bytes32 peerId, bytes32 policyHash, string locator) external;
function advertise(string calldata locator) external;
function selfDeactivate() external;
function isActive(address wallet) external view returns (bool);
function count() external view returns (uint256);
  • 지갑당 하나. 다시 등록해도 최초 등록 시각은 유지됩니다.
  • advertise()는 로그 비용이 낮고 길이 제한이 있습니다(MAX_LOCATOR_BYTES = 256).
  • 비활성화는 셀프서비스이며, 운영자가 사유와 함께 비활성화할 수도 있습니다.

JobEscrow​

function openSession(address worker, uint128 amount) external returns (uint256 id);
function settle(uint256 id, bytes32 receiptHash, uint128 spend, bytes calldata workerSig) external;
function refund(uint256 id) external;
function claim() external;
  • settle()은 세션 영수증에 대한 워커 서명을 검증합니다.
  • 분배는 99 / 1(워커 / 재무).
  • 사용하지 않은 에스크로는 refund()로 사용자에게 돌아갑니다.

전송​

libp2p over TCP/QUIC, Noise와 yamux. 레지스트리의 peer ID가 클라이언트가 기대하는 신원이며, 일치하지 않으면 핸드셰이크를 중단합니다.

  • DCUtR이 대부분의 NAT 통과를 담당합니다.
  • 릴레이는 직접 경로를 만들 수 없을 때만, 그것도 핸드셰이크에만 씁니다. 릴레이 한도 (128 KiB / 2분)로는 스트리밍이 불가능합니다.
  • IPv6는 지원하지만 옵트인입니다.

신용과 도달성​

워커는 행동에서 나온 신용 점수를 갖습니다. 토큰이 아니며 살 수 없습니다. 두 게이트가 이를 씁니다.

  • 도달성 게이트 — 핸드셰이크에 반복 실패한 워커는 우선순위가 낮아집니다.
  • 신용 게이트 — 기록이 나쁜 워커는 기본적으로 표시되지 않습니다.

둘 다 클라이언트 정책이며 컨트랙트 상태가 아니므로, 클라이언트는 언제든 무시할 수 있습니다.

Commit-challenge​

실제로 돌리지 않는 모델을 주장하는 워커를 막기 위해, 클라이언트는 첫 토큰 전에 무작위 챌린지에 대한 커밋먼트를 요구할 수 있습니다. 내지 못하는 워커는 끊깁니다.

의도적으로 없는 것​

  • 오케스트레이터, 작업 큐 서버, 프롬프트 데이터베이스.
  • 토큰, 스테이킹, 거버넌스 컨트랙트.
  • 메인넷 배포.
  • 데스크톱 앱 텔레메트리.