# 계정 추상화

> NeuroChain의 네이티브 계정 추상화 — 가스 대납 풀, 앱과 AI 에이전트가 범위·지출 한도·만료 안에서 작업하게 하는 세션 키, .agent 계정, AI 어시스턴트를 체인에 연결하는 MCP 서버.

Source: https://docs.nro.world/ko/ai/account-abstraction

NeuroChain에서 계정은 컨트랙트가 아니라 ML-DSA-65 키이므로, 계정 추상화는 지갑 컨트랙트로 흉내 내는 대신 프로토콜에 내장되어 있습니다. 여기에는 세 가지가 포함됩니다: **다른 사람이 가스를 지불**하고, **제한된 키가 여러분을 대신해 작업**하며, **AI 에이전트가 이 둘을 안전하게 사용**합니다.

## 가스 대납

**가스 풀**은 트랜잭션 수수료를 지불하기 위해 따로 마련해 둔 NRO입니다.

| 수수료를 내는 주체 | 조건 |
|--------------------|------|
| 보낸 사람 자신의 풀 | 수수료를 낼 만큼 충분히 있을 때 |
| 네트워크의 온보딩 스폰서 | 지갑이 송금 금액은 감당할 수 있지만 수수료는 감당할 수 없을 때(받은 금액만 가진 신규 사용자) |
| 보낸 사람의 잔액 | 그 밖의 경우 |

규칙:

- 대납 수수료는 트랜잭션당 최대 `NEUROCHAIN_MAX_SPONSORED_FEE`(100 000 uNRO)입니다.
- 대납 수수료도 다른 수수료와 마찬가지로 소각되고 제안자에게 지급됩니다.
- 온보딩 스폰서는 `NEUROCHAIN_GAS_SPONSOR`(기본값 `neuro:faucet.vault`)입니다. 그 풀은 제네시스에서 `NEUROCHAIN_GAS_SPONSOR_FUND`(1 000 000 NRO)로 한 번 충전되고, 이후 예치를 통해 보충됩니다.

| 작업 | 엔드포인트 | 서명 대상 |
|------|------------|-----------|
| 자신의 풀에 NRO 넣기 | `POST /api/v1/sponsor/deposit` (`address`, `amount`) | `neuro:system.sponsor` |
| 돌려받기 | `POST /api/v1/sponsor/withdraw` (`address`, `amount`) | `neuro:system.sponsor` |
| 풀 잔액 | `GET /api/v1/sponsor/:address` | — |

## 세션 키 {#session-keys}

**세션 키**는 여러분의 마스터 키가 계정을 대신해 작업하도록 승인한 별도의 ML-DSA-65 키이며, 여러분이 정한 한도 안에서만 작동합니다.

| 한도 | 필드 | 의미 |
|------|------|------|
| 범위 | `scope` | 키가 보낼 수 있는 쉼표로 구분된 주소들, 또는 아무 곳이나 허용하는 `*` |
| 지출 한도 | `cap` | 키가 수명 동안 이동할 수 있는 총 uNRO |
| 만료 | `expiry_block` | 키가 유효한 마지막 블록 높이; 미래여야 함 |

```json
POST /api/v1/session/grant
{
  "account": "neuro:<15 hex>.human",
  "session_pk": "<세션 공개 키, hex>",
  "scope": "neuro:<10 hex>.app",
  "cap": 5000000,
  "expiry_block": 120000,
  "signature": "…", "public_key": "<마스터 키>", "nonce": 1791200000000
}
```

그 후 세션 키는 **계정으로서** 일반 트랜잭션에 서명합니다(`from` = 여러분의 주소, `public_key` = 세션 키). 모든 검증자는 합의 과정에서 다음을 확인합니다.

1. 서명이 세션 키에 대해 유효한가;
2. 계정이 그 키를 부여했으며, 철회되지 않았는가;
3. 현재 높이가 `expiry_block`을 지나지 않았는가;
4. 대상이 `scope`에 있는가;
5. 지금까지 지출한 금액에 이번 금액을 더해도 `cap` 이내인가.

지출은 트랜잭션이 성공적으로 적용될 때만 기록됩니다. 언제든지 `POST /api/v1/session/revoke`(`account`, `session_pk`)로 철회할 수 있고, `GET /api/v1/session/list/:account`로 권한 목록을 조회할 수 있습니다.

**세션 키가 절대 할 수 없는 일:** [Sentinel](./sentinel) 신뢰 목록 관리, 보류된 송금의 확인이나 취소 — 이들은 마스터 키가 필요합니다. 따라서 에이전트는 위험한 송금을 시작할 수는 있지만, 승인할 수 있는 것은 여러분뿐입니다.

**테스트 방법:** 여러 검증자에서 실행한 네트워크 테스트를 통해 동시 트랜잭션에서도 지출 한도가 유지되고, 재전송된 트랜잭션이 거부되며, 철회가 모든 노드에서 적용됨을 확인했습니다.

## `.agent` 계정

`.agent` 주소는 AI 에이전트 계정을 위한 유료 이름입니다. 여러분의 `.human` 지갑이 등록하고, 여러분의 키가 제어하며, 에이전트의 가스 풀과 세션 키를 보관하기 위한 것입니다. 검증자가 아니며 스테이크도 보유하지 않습니다. 가격은 사용자 지정 이름과 마찬가지로 이름 길이에 따라 정해집니다([주소 → 이름 가격](/ko/learn/addresses#name-prices)).

`POST /api/v1/agents/register`(`name`, `owner`; `neuro:system.agent`에 대해 서명), `GET /api/v1/agents/:address`.

## MCP를 통한 AI 에이전트

`neurochain-mcp` 서버는 AI 어시스턴트(Claude Code, Claude Desktop, 모든 MCP 클라이언트)에게 체인 읽기 권한을 주고, 세션 키가 있으면 `nc_transfer`, `nc_call_contract`, `nc_deploy`도 제공합니다 — 마스터 키는 절대 제공하지 않습니다. 설정, 모든 도구, 한도: [AI 에이전트 (MCP)](/ko/build/mcp).
