규제 컴플라이언스를 위한 지출 한도 구현
MAWS에서 에이전트의 지출 한도를 설정하고 사전 검사로 시험한 뒤, 무엇이 이를 강제하고 무엇이 강제하지 않는지 확인합니다.
학습 목표
- ✓에이전트의 지출 한도를 설정하는 방법(IdentityRegistry에 저장되고 MAWS가 강제).
- ✓정책 사전 검사를 사용하여 한도를 테스트하는 방법.
- ✓MAWS와 체인의 PCL이 각각 위반을 어떻게 처리하는지.
사전 요구사항
- 200 OKRW 이상을 보유한 ACTIVE 에이전트가 필요합니다. 첫 번째 에이전트 생성 및 자금 지원에서 만든 에이전트를 사용할 수 있습니다.
필요 도구
MCP Client
AI 에이전트가 예산을 넘지 않도록 IdentityRegistry 레코드에
spendingLimit을 설정합니다. MAWS는 무엇이든 서명하기 전에 이 한도를 검사합니다. 체인은 이 값을 읽지 않으므로, 에이전트 지갑 키로 MAWS를 거치지 않고 보낸 트랜잭션은 이 한도에 묶이지 않습니다. 1
1. 정책 설정
policy.set을 사용하여 트랜잭션당 100 OKRW 한도를 설정합니다.LLM 도구 호출
policy.set json
{
"agentId": "<agent-id>",
"spendingLimit": "100"
} 2
2. 사전 검사로 테스트
전송을 시도하기 전에
policy.preflight를 사용하여 150 OKRW 전송이 허용되는지 확인합니다.LLM 도구 호출
policy.preflight json
{
"agentId": "<agent-id>",
"to": "0xRandomAddress",
"amount": "150"
} 참고: 사전 검사는
Amount 150 OKRW exceeds spending limit 100 OKRW라는 이유와 함께 policyCheck.allowed: false와 canTransact: false를 반환합니다. 3
3. 전송 시도
에이전트가 사전 검사를 무시하고 150 OKRW로
transfer.send를 호출하면 MCP 서버는 오프체인에서 이를 차단하고 POLICY_REJECTED ToolError를 반환합니다. transfer.send는 정책보다 잔액을 먼저 검사하므로, 이 오류를 보려면 에이전트가 150 OKRW 이상을 보유해야 합니다. 잔액이 그보다 적으면 INSUFFICIENT_BALANCE를 대신 반환합니다.LLM 도구 호출
transfer.send json
{
"agentId": "<agent-id>",
"to": "0xRandomAddress",
"amount": "150"
} 마무리
이제 MAWS는 한도를 넘는 전송을 서명하기 전에 거부합니다. 이 한도를 강제하는 것은 그것뿐이며, 어떤 체인 모듈도
spendingLimit을 읽지 않습니다. 체인이 직접 강제하는 한도가 필요하면 TransferLimit 값(atokrw 단위의 32바이트 uint256)을 저장합니다. 다만 체인은 AGENT_OKRW_TRANSFER_LIMIT_POLICY가 설정된 곳에서만 이 값을 강제하며, 테스트넷의 전역 정책에는 이 정책이 들어 있지 않습니다. pcl-template-agent-okrw-transfer-limit-policy를 참고합니다.