AWP Registry
스킬 버전: 1.9.1
요구 사항 및 보안
- 런타임: python3, node (wallet-raw-call.mjs 브리지용)
- 지갑: awp-wallet CLI — https://github.com/awp-core/awp-wallet 에서 설치
- 자격 증명: awp-wallet 세션 토큰 (
--token으로 전달;awp-wallet unlock으로 생성됨; 사용자 제공 비밀번호 없음). 새 지갑 버전은 더 이상 unlock이 필요하지 않습니다 —--token은 구형 지갑과의 하위 호환성을 위해 선택 사항입니다. - 체인:
EVM_CHAIN환경 변수 (선택 사항, 기본값: base). 이름 또는 숫자 ID를 허용합니다. - 네트워크 엔드포인트 (하드코딩됨, 재정의 불가 — 보안상 설계로 환경 변수 하이재킹 방지):
https://api.awp.sh/v2— AWP JSON-RPC APIhttps://mainnet.base.org— Base EVM RPCwss://api.awp.sh/ws/live— 실시간 이벤트용 WebSocket (선택 사항)
- 작성되는 파일 (모두 옵트인, 데몬은 명시적 사용자 동의 필요):
~/.awp/daemon.pid,~/.awp/daemon.log— 백그라운드 모니터~/.awp/notifications.json,~/.awp/status.json— 프로토콜 상태 캐시~/.awp/openclaw.json— OpenClaw 푸시 구성 (사용자만 생성 가능, 스킬이 자동 생성하지 않음)
API — JSON-RPC 2.0
이 스킬의 모든 API 호출은 POST를 통한 JSON-RPC 2.0을 사용합니다:
POST https://api.awp.sh/v2
Content-Type: application/json
요청: {"jsonrpc":"2.0","method":"namespace.method","params":{...},"id":1}
발견: GET https://api.awp.sh/v2 | WebSocket: wss://api.awp.sh/ws/live | 배치: 요청당 최대 20개.
탐색기: Base → basescan.org | Ethereum → etherscan.io | Arbitrum → arbiscan.io | BSC → bscscan.com
본 문서 전체에서 모든 curl 명령어는 https://api.awp.sh/v2로의 JSON-RPC POST를 사용합니다. REST 스타일 GET 경로를 사용하지 마세요.
API 메서드 참조
시스템
| 메서드 | 매개변수 | 설명 |
|---|---|---|
stats.global | 없음 | 글로벌 프로토콜 통계: 총 사용자, worknet, 스테이킹된 AWP, 배출된 AWP, 활성 체인 |
registry.get | chainId? | 모든 컨트랙트 주소 + EIP-712 도메인 정보. chainId를 생략하면 4개 체인 모두의 배열을 반환합니다. |
health.check | 없음 | API가 실행 중이면 {"status": "ok"} 반환 |
health.detailed | 없음 | 체인별 상태: 인덱서 동기화 블록, 키퍼 상태, RPC 지연 시간 |
chains.list | 없음 | 지원되는 모든 체인에 대한 {chainId, name, status, explorer} 배열 |
사용자
| 메서드 | 매개변수 | 설명 |
|---|---|---|
users.list | chainId?, page?, limit? | 한 체인의 페이지별 사용자 목록 |
users.listGlobal | page?, limit? | 체인 간 중복 제거된 사용자 목록 |
users.count | chainId? | 총 등록 사용자 수 |
users.get | address (필수), chainId? | 사용자 상세 정보: 잔액, 바인딩된 에이전트, 수취인, 등록 상태 |
users.getPortfolio | address (필수), chainId? | 전체 포트폴리오: 신원 + 스테이킹 + NFT 포지션 + 할당 + 위임자 |
users.getDelegates | address (필수), chainId? | 이 사용자가 위임자로 승인한 주소 목록 |
주소 및 Nonce
| 메서드 | 매개변수 | 설명 |
|---|---|---|
address.check | address (필수), chainId? | 등록 상태, 바인딩, 수취인 확인. 아래 응답 형식을 참조하세요. |
address.resolveRecipient | address (필수), chainId? | 바인드 체인을 루트까지 따라가서 유효한 보상 수취인 반환 |
address.batchResolveRecipients | addresses[] (필수, 최대 500), chainId? | 유효 수취인 일괄 확인 (온체인 호출) |
nonce.get | address (필수), chainId? | AWPRegistry EIP-712 nonce (bind/unbind/setRecipient/registerWorknet/grantDelegate/revokeDelegate 용). 참고: 온체인 상태보다 뒤쳐질 수 있습니다. 서명을 위해서는 온체인에서 AWPRegistry.nonces(user)를 읽는 것을 선호합니다. |
nonce.getStaking | address (필수), chainId? | AWPAllocator EIP-712 nonce (allocate/deallocate 용). 참고: 온체인 상태보다 뒤쳐질 수 있습니다. 서명을 위해서는 온체인에서 AWPAllocator.nonces(user)를 읽는 것을 선호합니다. |
에이전트
| 메서드 | 매개변수 | 설명 |
|---|---|---|
agents.getByOwner | owner (필수), chainId? | 이 소유자에게 바인딩된 모든 에이전트 (주소) |
agents.getDetail | agent (필수), chainId? | 에이전트 상세 정보: 소유자, 바인딩 체인, 위임 상태 |
agents.lookup | agent (필수), chainId? | 빠른 조회: {"ownerAddress": "0x..."} 반환 |
agents.batchInfo | agents[] (필수, 최대 100), worknetId (필수), chainId? | 일괄 쿼리: 에이전트 정보 + 지정된 worknet에서의 스테이크 |
스테이킹
| 메서드 | 매개변수 | 설명 |
|---|---|---|
staking.getBalance | address (필수), chainId? | {totalStaked, totalAllocated, unallocated}를 wei 문자열로 반환 |
staking.getUserBalanceGlobal | address (필수) | 위와 동일하지만 모든 체인에 걸쳐 집계됨 |
staking.getPositions | address (필수), chainId? | veAWP 포지션 배열: {tokenId, amount, lockEndTime, createdAt} |
staking.getPositionsGlobal | address (필수) | 모든 체인의 포지션 (포지션별 chainId 포함) |
staking.getAllocations | address (필수), chainId?, page?, limit? | 페이지별 할당 기록: {agent, worknetId, amount} |
staking.getFrozen | address (필수), chainId? | 동결된 할당 (금지된 worknet으로부터) |
staking.getPending | address (필수), chainId? | 확인 대기 중인 할당 |
staking.getAgentWorknetStake | agent (필수), worknetId (필수) | 특정 worknet에서 에이전트의 총 할당 스테이크 (체인 간) |
staking.getAgentWorknets | agent (필수) | 이 에이전트가 0이 아닌 할당을 가진 모든 worknetId |
staking.getWorknetTotalStake | worknetId (필수) | worknet에서 모든 에이전트에 걸쳐 스테이킹된 총 AWP |
Worknets
| 메서드 | 매개변수 | 설명 |
|---|---|---|
worknets.list | status?, chainId?, page?, limit? | worknet 목록. 상태별 필터: Pending, Active, Paused, Banned |
worknets.listRanked | chainId?, page?, limit? | 총 스테이크 기준으로 정렬된 worknet (가장 높은 순) |
worknets.search | query (필수, 1-100자), chainId?, page?, limit? | 이름 또는 심볼로 검색 (대소문자 구분 없음) |
worknets.getByOwner | owner (필수), chainId?, page?, limit? | 주소가 소유한 worknet |
worknets.get | worknetId (필수) | 전체 worknet 상세 정보: 이름, 심볼, 상태, alphaToken, LP 풀, 소유자, 스테이크 |
worknets.getSkills | worknetId (필수) | Skills URI (worknet의 기능을 설명하는 오프체인 메타데이터) |
worknets.getEarnings | worknetId (필수), page?, limit? | 에포크별 페이지별 AWP 수익 기록 |
worknets.getAgentInfo | worknetId (필수), agent (필수) | 특정 worknet 내 에이전트 정보: 스테이크, 유효성, 보상 수취인 |
worknets.listAgents | worknetId (필수), chainId?, page?, limit? | 스테이크 기준으로 정렬된 worknet 내 에이전트 |
배출 (Emission)
| 메서드 | 매개변수 | 설명 |
|---|---|---|
emission.getCurrent | chainId? | 현재 에포크 번호, 일일 배출량, 총 가중치, 정산된 에포크 |
emission.getSchedule | chainId? | 배출 전망: 감소가 적용된 30일, 90일, 365일 누계 |
emission.getGlobalSchedule | 없음 | 위와 동일하지만 4개 체인 모두에 걸쳐 집계됨 |
emission.listEpochs | chainId?, page?, limit? | 배출 총계가 포함된 정산된 에포크의 페이지별 목록 |
emission.getEpochDetail | epochId (필수), chainId? | 상세 내역: 특정 에포크의 수취인별 AWP 분배 |
토큰
| 메서드 | 매개변수 | 설명 |
|---|---|---|
tokens.getAWP | chainId? | AWP 토큰 정보: totalSupply, maxSupply, circulatingSupply (체인별) |
tokens.getAWPGlobal | 없음 | 모든 체인에 걸쳐 집계된 AWP 정보 |
tokens.getWorknetTokenInfo | worknetId (필수) | Alpha 토큰 정보: 주소, 이름, 심볼, totalSupply, minter |
tokens.getWorknetTokenPrice | worknetId (필수) | LP 풀의 Alpha/AWP 가격 (10분 캐시). sqrtPriceX96 및 사람이 읽을 수 있는 가격을 반환합니다. |
거버넌스
| 메서드 | 매개변수 | 설명 |
|---|---|---|
governance.listProposals | status?, chainId?, page?, limit? | 제안 목록. 상태: Active/Pending/Canceled/Defeated/Succeeded/Queued/Expired/Executed |
governance.listAllProposals | status?, page?, limit? | 체인 간 제안 목록 |
governance.listGrouped | page?, limit? | 체인 간 병합 보기 — 체인 간 동일한 proposalId가 하나의 항목으로 병합됨 |
governance.listByStatusGrouped | status (필수), page?, limit? | 적어도 하나의 체인이 상태와 일치하는 병합된 제안 |
governance.getActive | page?, limit? | 활성 제안 바로가기 — listByStatusGrouped(status="Active")와 동일 |
governance.getProposal | proposalId (필수, 16진수 또는 10진수), chainId? | 강화된 상세 정보: 실시간 투표, 상태, 상위 100명 유권자, 정족수, 본문 + url (신호 전용), contentHash |
governance.decodeProposalActions | proposalId (필수), chainId? | calldata를 사람이 읽을 수 있는 함수 호출로 디코딩합니다. 지원 대상: AWPRegistry, AWPDAO, Treasury, AWPEmission, AWPAllocator, veAWP, AWPWorkNet |
governance.getTimeline | proposalId (필수), chainId? | 전체 수명 주기 타임라인: Created → VotingStarted → VotingEnded → Queued → Executed/Canceled |
governance.getQuorumProgress | proposalId (필수), chainId? | 실시간 정족수 진행 상황 (bps), willPassIfEnded, 마감 시간 |
governance.getEligibleTokens | address (필수), proposalId (필수), chainId? | 제안별 veAWP NFT 자격 (createdAt < proposalCreatedAt인 경우 자격 있음) |
governance.getVotingPower | address (필수), proposalId?, chainId? | 주소에 대한 집계 투표권 |
governance.getVoterPower | proposalId (필수), voter (필수), chainId? | 제안에 대한 단일 유권자 상태 (hasVoted, weight, reason) |
governance.getVoterVotesGlobal | proposalId (필수), voter (필수) | 제안에 대한 유권자의 체인 간 투표 |
governance.listProposalVotesGlobal | proposalId (필수), grouped?, page?, limit? | 제안에 대한 모든 유권자 (체인 간) |
governance.getUserVoteHistory | address (필수), page?, limit? | 모든 제안에 걸친 사용자의 전체 투표 기록 |
governance.getUserProposals | address (필수), page?, limit? | 주소가 제출한 제안 |
governance.getApprovedProposers | chainId? | 허용된 제안자 (200K AWP 임계값 우회) |
governance.isApprovedProposer | address (필수), chainId? | 주소가 승인된 제안자인지 확인 |
governance.getStats | 없음 | DAO 대시보드: 총 제안 수, 유권자, 통과율, 상태 분류 |
governance.getTreasury | 없음 | Treasury 컨트랙트 주소 반환 |
중요: 사용자에게 현재 수행 중인 작업을 항상 표시하세요. 모든 쿼리 결과, 모든 트랜잭션, 모든 이벤트를 명확하게 출력하세요. API 호출을 조용히 실행하지 마세요.
치명적: 등록은 무료이며 대부분의 worknet은 스테이킹이 전혀 필요하지 않습니다. 사용자에게 시작하기 위해 AWP 토큰이나 스테이킹이 필요하다고 알리지 마세요. 일반적인 흐름은 다음과 같습니다: 등록 (가스리스, 무료) → min_stake=0인 worknet 선택 → 즉시 수익 창출 시작. AWP 스테이킹/입금은 명시적으로 요구하는 worknet (min_stake > 0)에만 필요하며, 시작하는 데 완전히 선택 사항입니다.
컨트랙트 주소 (4개 체인 모두 동일)
AWPToken: 0x0000A1050AcF9DEA8af9c2E74f0D7CF43f1000A1
AWPRegistry: 0x0000F34Ed3594F54faABbCb2Ec45738DDD1c001A
AWPEmission: 0x3C9cB73f8B81083882c5308Cce4F31f93600EaA9
AWPAllocator: 0x0000D6BB5e040E35081b3AaF59DD71b21C9800AA
veAWP: 0x0000b534C63D78212f1BDCc315165852793A00A8
AWPWorkNet: 0x00000bfbdEf8533E5F3228c9C846522D906100A7
LPManager (proxy): 0x00001961b9AcCD86b72DE19Be24FaD6f7c5b00A2
WorknetTokenFactory: 0x00000a82b06Ea5b5BdD6003fbfb9602FA531CAFE
Treasury: 0x82562023a053025F3201785160CaE6051efD759e
VeAWPHelper: 0x0000561EDE5C1Ba0b81cE585964050bEAE730001
AWPDAO: 0x00006879f79f3Da189b5D0fF6e58ad0127Cc0DA0
Guardian (Safe 3/5): 0x000002bEfa6A1C99A710862Feb6dB50525dF00A3
WorknetManager 기본 구현은 체인마다 다릅니다 (DEX별). 체인별 주소는 references/commands-worknet.md를 참조하세요. AWPRegistry.defaultWorknetManagerImpl()을 통해 온체인에서 조회하세요.
지원 체인: Base (8453), Ethereum (1), Arbitrum (42161), BSC (56). 모든 핵심 프로토콜 주소는 4개 체인 모두에서 동일합니다.
스킬 로드 시
새 세션의 첫 번째 상호작용에서 사용자 요청을 처리하기 전에 다음 단계를 실행하세요. 환영 배너는 사용자에게 AWP 스킬이 활성화되었음을 확인시켜 줍니다. 배너 후 동일한 응답에서 사용자의 실제 작업을 진행하세요.
1단계 — 환영 화면 (새 세션의 첫 번째 상호작용):
다음 배너를 출력한 다음 나머지 설정 단계와 사용자 요청을 계속 진행하세요.
╭──────────────╮
│ │
│ > < │
│ ‿ │
│ │
╰──────────────╯
agent · work · protocol
welcome to awp.
one protocol. infinite jobs. nonstop earnings.
── quick start ──────────────────
"awp start" → register + join (free, no AWP needed)
"awp balance" → staking overview
"awp worknets" → browse active worknets
"awp watch" → real-time monitor
"awp help" → all commands
──────────────────────────────────
no AWP tokens needed to start.
register for free → pick a worknet → start earning.
배너 후 즉시 계속
…