지갑
NeuroChain 지갑은 24단어 복구 문구입니다. 그 밖의 모든 것 — 서명 키와 .human 주소 — 은 이 문구로부터 브라우저 안에서 계산되며, 브라우저 밖으로 나가지 않습니다.
지갑을 사용하는 방법
아래 방법은 모두 같은 키와 같은 .human 주소를 사용합니다. 차이는 키가 어디에 있고 누가 서명하는지입니다.
| 방법 | 키 위치 | 서명 주체 | 용도 | 문서 |
|---|---|---|---|---|
| 웹 지갑 | 여러분의 브라우저, 비밀번호로 암호화 | 앱에서 직접 | 일상적인 사용: 전송, 스테이킹, 투표, 이름 등록, 에이전트 관리 | 이 페이지 |
| 서명 팝업 | 여러분의 브라우저 (웹 지갑) | 팝업에서 승인하는 본인 | 다른 사이트의 dApp에 문구를 넘기지 않고 사용 | Signer SDK |
| JavaScript SDK | 여러분의 페이지나 스크립트 | 전달받은 문구를 가진 여러분의 코드 | 자체 지갑을 가진 dApp이나 자동화 구축 | JavaScript SDK |
| 세션 키 (AI 에이전트) | 에이전트의 머신 — 별도의 제한된 키 | 여러분이 정한 범위, 지출 한도, 만료 기간 안에서 에이전트 | MCP를 통해 AI 어시스턴트가 여러분 대신 작업하도록 허용 | AI 에이전트 (MCP) |
유료 이름 (.node, .vault, .agent, …) | 자체 키 없음 | 이를 소유한 .human 지갑 | 검증자, 공동 트레저리, 에이전트 계정 | 주소 |
.vault는 여러 멤버가 함께 제어합니다: 지급에는 임계값 이상의 멤버 서명이 필요합니다.
생성 또는 가져오기
| 일어나는 일 | |
|---|---|
| 생성 | 브라우저가 256비트 무작위 엔트로피로 24개 단어를 생성합니다(체크섬이 있는 BIP-39 단어 목록). 단어는 한 번만 표시되니 꼭 적어 두세요. |
| 가져오기 | 기존의 24단어 문구를 입력합니다. 다른 어떤 처리보다 먼저 체크섬을 검증합니다. |
브라우저는 단어로부터 주소에 설명된 대로 ML-DSA-65 키 쌍과 주소를 파생합니다. 같은 문구는 어느 기기에서든 항상 같은 주소를 만듭니다.
키 보관 위치
| 항목 | 위치 | 보호 |
|---|---|---|
| 복구 문구 | 브라우저 localStorage, 키 nc_ks_<address> | 비밀번호로 암호화: PBKDF2-SHA256(100 000회 반복, 무작위 16바이트 솔트) → AES-256-GCM |
| 서명 키 | 열려 있는 탭의 메모리에만 | 잠금 해제 후 문구로부터 다시 파생 |
| 비밀번호 | 어디에도 저장되지 않음 | 문구를 암호화하고 복호화하는 데만 사용 |
한 브라우저에 여러 지갑을 함께 둘 수 있으며, 앱에서 전환할 수 있습니다.
비밀번호가 아니라 문구를 보관하세요
비밀번호는 이 브라우저에 저장된 사본의 잠금만 해제합니다. 문구와 브라우저 데이터를 모두 잃으면 지갑은 사라지며, 누구도 복구할 수 없습니다. 문구가 유출되면 누구나 여러분으로 서명할 수 있으니, 아이덴티티를 통해 새 키로 교체하세요.
NRO 전송
- 앱이 다음 nonce와 현재 기본 수수료(base fee)를 읽습니다.
- 가스 가격을 1.5 × 기본 수수료(올림)로 설정하여, 블록에 포함되기 전에 기본 수수료가 올라도 트랜잭션이 유효하도록 합니다.
- 브라우저가 잔액, nonce, 수수료를 로컬(WASM)에서 확인하고, 전송 전에 오류를 표시합니다.
- 여러분의 키로
nc-tx-v2|from|to|value|nonce에 서명하고, 공개 키와 함께 트랜잭션을 전송합니다. - 노드는 서명과 공개 키로부터 여러분의 주소가 파생되는지를 확인한 뒤 트랜잭션을 대기열에 넣습니다.
자기 자신에게 보내는 전송은 수수료만 들며, 앱에도 그렇게 표시됩니다.
트랜잭션 상태
| 상태 | 의미 |
|---|---|
pending | 노드가 수락했고 mempool에서 대기 중입니다. 60초 안에 블록에 포함되지 않으면 버려집니다. |
confirmed | 최종 확정된 블록에 포함되어 적용되었습니다. |
failed | 최종 확정된 블록에 포함되었지만 컨트랙트 호출이 trap되었거나 fuel이 소진되었습니다. 금액과 스토리지 변경은 롤백되고, 수수료와 nonce는 소비됩니다. |
held | 수락되었지만 Sentinel 정책 계층 기본값 꺼짐에 의해 지연되었습니다: 금액은 일정 시간 후 자동으로 해제되거나, 여러분의 확인을 기다립니다. |
cancelled | 여러분이 취소한 보류 트랜잭션입니다. 금액은 반환됩니다. |
refunded | 금액이 여러분에게 반환되었습니다 — 확인 없이 만료된 보류 트랜잭션이거나, 시간 초과된 크로스 샤드 전송입니다. |
서명된 작업
스테이킹, 이름 등록, 투표 등은 전송이 아니지만 같은 방식으로 서명됩니다. 지갑은 nc-tx-v2|<you>|<system target>|<value>|<nonce>에 서명하며, 여기서 대상(target)이 작업을 나타냅니다(neuro:system.stake, neuro:system.node, neuro:system.name, neuro:system.governance, …).
이런 작업에서 nonce는 밀리초 타임스탬프이며, 노드는 여러분의 주소에서 마지막으로 본 nonce보다 큰 값만 받아들입니다 — 가로챈 요청을 재전송할 수 없습니다.
Faucet 테스트 네트워크 전용
CHAIN_ENV=testnet으로 시작한 노드에서는 POST /api/v1/faucet이 테스트용 NRO를 지급합니다. CHAIN_ENV=mainnet(기본값)에서는 비활성화되어 있습니다.
| 설정 | 기본값 | 변수 |
|---|---|---|
| 요청당 금액 | 50 NRO | 요청 필드 amount |
| 요청당 최대 금액 | 100 NRO | NEUROCHAIN_FAUCET_MAX_NRO |
| 주소별 대기 시간 | 24시간 | NEUROCHAIN_FAUCET_COOLDOWN_SECS (0이면 꺼짐) |
curl -s -X POST "$NODE_RPC/api/v1/faucet" \
-H 'Content-Type: application/json' \
-d '{"address":"neuro:<your address>.human","public_key":"<your ML-DSA-65 public key, hex>"}'faucet은 주소에 처음 자금을 지급할 때, 전송된 공개 키를 그 주소에 바인딩합니다.
명령줄 지갑
노드 저장소에는 아직 예전 명령줄 지갑인 neurowallet이 있습니다. 이 지갑은 현재 주소 체계(NC_KDF_v3)보다 먼저 만들어졌고 ML-DSA-65로 서명하지 않기 때문에, 그 주소와 트랜잭션은 현재 네트워크에서 받아들여지지 않습니다. 웹 지갑이나 JavaScript SDK를 사용하세요.