Nostr Wallet Connect(NWC)는 Nostr 릴레이를 통해 Lightning 지갑을 원격 제어하는 NIP-47 프로토콜입니다. 릴레이는 비트코인 자체가 아닌 메시지를 전달하며, 개인 노드와 수탁 서비스 모두 사용할 수 있습니다.
클라이언트 앱이 요청을 보내면 지갑 서비스가 검증하고 결제 인터페이스를 호출합니다. NWC 자체는 비트코인 키 보유자를 정하지 않습니다. 개인 노드와 수탁 지갑은 같은 프로토콜을 쓰면서도 신뢰와 복구 방식은 다를 수 있습니다. [NWC — NIP-47: Core protocol] [NWC — Project overview]
연결 URI에는 서비스 공개키, 릴레이, 클라이언트 연결 비밀키인 secret이 들어 있습니다. 지갑 seed는 아니지만 승인된 요청에 서명할 수 있습니다. QR이나 사본이 다른 앱에 접근 권한을 줄 수 있습니다. 연결마다 다른 키를 쓰면 서로 연결 짓기 어려워집니다. [NWC — NIP-47: Core protocol]
공개 info 이벤트는 서비스 기능을 알리고 get_info는 해당 연결에서 가능한 메서드를 반환합니다. 기본에는 pay_invoice, make_invoice, lookup_invoice, get_balance, get_info가 있습니다. 이력, keysend, 알림은 선택 확장입니다. 지원과 권한을 따로 확인해야 하며 메서드 이름이 일반적인 결제 동의는 아닙니다. [NWC — NIP-47: Core protocol] [NWC — Optional specifications] [NWC-02 — Notifications]
Info는 kind 13194, 요청은 23194, 응답은 23195입니다. p 태그는 상대방, 응답의 e 태그는 요청을 가리킵니다. 클라이언트는 서명, 예상 서비스 키, 요청 연결, result_type을 검사합니다. 릴레이에서 이벤트를 받은 것만으로 실행이 증명되지는 않습니다. [NWC — NIP-47: Core protocol]
NIP-47 금액과 수수료는 msat이며 1000 msat는 한 satoshi입니다. 단위를 혼동하면 천 배 차이가 납니다. 성공한 pay_invoice는 preimage를, 실패 응답은 error를 제공합니다. make_invoice로 청구서를 만드는 것은 결제가 아니며 lookup_invoice로 상태를 조회할 수 있습니다. [NWC — NIP-47: Core protocol]
현재 협상은 nip44_v2를 선호하며 구형 nip04는 호환성을 위해 남아 있습니다. encryption 태그가 없으면 구형 모드입니다. NIP-44 자체는 forward secrecy를 제공하지 않습니다. 릴레이는 종류, 태그, 연결 키, 시간을 볼 수 있습니다. NWC 연결에 사용자의 주 신원 키를 사용해서는 안 됩니다. [NWC — NIP-47: Core protocol] [Nostr — NIP-44: Encrypted payloads]
NWC 요청과 응답은 임시 이벤트입니다. 릴레이 장애나 서비스 오프라인으로 메시지가 사라질 수 있고, 이미 완료된 결제의 응답만 없어질 수도 있습니다. timeout 후에는 lookup_invoice나 지갑에서 상태부터 확인하세요. 침묵은 확실한 실패가 아니며 새 요청이 자동으로 안전한 재시도는 아닙니다. [NWC — NIP-47: Core protocol]
서비스는 메서드, 예산, 유효기간을 제한하고 연결 키를 폐기할 수 있습니다. 제한은 클라이언트 화면뿐 아니라 서비스가 집행해야 합니다. 앱에서 연결을 삭제해도 지갑 권한이 남을 수 있습니다. 철회는 향후 사용을 막지만 완료된 결제를 되돌리지는 않습니다. [NWC — NIP-47: Core protocol]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Nostr, Lightning Network, BOLT 11, 지갑, 개인 키, Satoshi. 다음 항목에서도 이 글을 참조합니다 Nostr, BOLT 11.