프로젝트 소개

NanoPay는 Nano 암호화폐 네트워크를 위한 Node.js 및 TypeScript 라이브러리입니다. README에는 두 가지 사용 모드가 설명되어 있습니다: 완전한 워크플로를 위한 고수준 클라이언트와 단계별 제어를 위한 내보낸 함수. 둘 다 동일한 Nano 암호화 및 블록 빌더를 공유합니다. 설치는 npm install nanopay로 수행합니다. 버전 0.2.0은 URL 없이 createClient() 또는 createRpcClient()를 호출할 때 BerryPay의 공개 Nano 메인넷 RPC를 사용하며, 버전 0.1.0은 명시적인 URL을 요구합니다. Node.js 22+, ESM, CommonJS, TypeScript, 그리고 최신 브라우저가 지원됩니다. 브라우저 스크립트 번들은 NanoPay를 노출합니다. 계정은 createWallet, walletFromSeed, accountFromPrivateKey, walletFromMnemonic을 사용하여 생성하거나 복구할 수 있습니다. 네이티브 Nano 16진수 시드는 BLAKE2b 유도를 사용하고, BIP39 니모닉 시드는 Nano SLIP-0010 경로 m/44'/165'/index'를 따릅니다. README는 사용자가 지갑 시드 또는 니모닉과 패스프레이즈를 백업해야 하며, 개인 키는 하나의 계정만 제어한다고 경고합니다. 시드와 개인 키는 로그와 RPC 요청에서 제외해야 합니다. 전송, 수신, 확인을 위해 createClient는 getBalance, send, waitForConfirmation, receiveAll, changeRepresentative 메서드를 가진 클라이언트를 반환합니다. 클라이언트는 계정 상태를 읽고, 블록을 빌드하고, 로컬에서 서명하고, 작업을 요청하고, 검증한 후 제출합니다. 동일한 계정에 대한 쓰기는 클라이언트 인스턴스 내에서 큐에 들어가며, 다른 계정과 독립적인 읽기는 동시에 실행됩니다. 상태가 submitted이면 노드가 블록을 수락한 것이지만, waitForConfirmation을 사용하여 정산된 것으로 처리하기 전에 확인해야 합니다. TransactionError는 정확한 해시와 서명된 블록을 유지합니다. ReceiveAllError.completed는 이전의 성공적인 제출을 보존합니다. 쓰기는 자동으로 재시도되지 않으며, 제출 실패는 실패한 거래가 조정되고 client.resumeAccount가 호출될 때까지 해당 계정에 대한 추가 쓰기를 AccountBlockedError로 차단합니다. 완전한 제어를 위해 라이브러리는 generateSeed, derivePrivateKey, derivePublicKey, deriveAddress, buildSendBlock, hashBlock, signHash, attachSignature, getWorkRoot, attachWork, createRpcClient를 내보냅니다. 빌드 함수는 개인 키가 필요하지 않습니다. signBlock은 해싱과 서명을 결합합니다. createSendBlock, createReceiveBlock, createChangeBlock은 빌드와 서명을 결합하여 해시와 블록을 포함한 객체를 반환합니다. 이러한 함수는 노드에 연락하지 않습니다. prepareSend, prepareReceive, prepareChangeRepresentative는 원장 읽기를 추가하고 서명되지 않은 거래를 반환합니다. 외부 서명자는 publicKey와 sign(hash)를 구현합니다. 서명은 표준 Ed25519-SHA512가 아닌 Nano의 Ed25519-BLAKE2b를 사용해야 합니다. 작업 제공자는 root, threshold, signal을 사용하여 work를 구현하며, 로컬 WASM, GPU 서비스, 또는 별도의 작업 노드를 사용할 수 있습니다. 금액은 부동소수점 숫자 대신 문자열을 사용합니다. nanoToRaw와 rawToNano가 있으며, amount는 Nano를, amountRaw 또는 balanceRaw는 raw를 의미합니다. 하나의 Nano는 10^30 raw입니다. 분수 raw와 uint128 오버플로는 거부됩니다. 역사적인 Unit.nano는 10^24 raw를 의미하므로, 일반적인 Nano 금액에는 nanoToRaw를 사용해야 합니다. 결제 링크와 실시간 확인은 createPaymentUri, parsePaymentUri, watchConfirmations를 통해 지원됩니다. 결제 URI는 Nano에서 요구하는 대로 raw를 인코딩합니다. WebSocket 알림은 반복될 수 있으므로 사용자는 해시로 중복을 제거해야 합니다. 연결 끊김, 잘못된 메시지, 또는 버퍼 가득 참은 오류를 발생시킵니다. 스트림에는 자동 재연결이나 영구적인 결제 회계가 없습니다. 집중된 진입점에는 nanopay/keys, nanopay/blocks, nanopay/work, nanopay/amounts, nanopay/mnemonic, nanopay/rpc, nanopay/payments, nanopay/confirmations가 있으며, 각각 ESM, CommonJS, TypeScript를 지원합니다. keys 진입점에는 WASM이나 니모닉 단어 목록이 포함되어 있지 않습니다. WASM 작업 엔진은 영역당 한 번 컴파일되고, 동시 호출을 격리하며, 배치 사이에 양보합니다. workerIndex와 workerCount는 논스 공간을 분할하며, 별도의 Worker에서 실행해야 합니다. 메인넷 작업은 확률적이며, 지속적인 워크로드에는 GPU 작업 서비스가 권장됩니다. 범위와 호환성: 이 툴킷은 로컬 계정, 네이티브 및 니모닉 유도, 상태 블록, 서명, 작업, 원장 읽기, 전송/수신/변경 워크플로, 확인 추적, 결제 링크를 다룹니다. client.request와 rpc.request는 노드가 지원하는 추가 Nano RPC 명령을 노출합니다. 이 라이브러리는 합의 노드를 실행하지 않으며, 대표자를 선택하지 않으며, 비밀을 영구 저장하거나 암호화하지 않으며, 거래소 회계를 관리하지 않으며, 하드웨어 장치 전송을 제공하지 않습니다. 새로운 블록은 상태 형식을 사용하고, RPC 블록 읽기는 역사적인 블록 콘텐츠도 지원합니다. 원래 상류 함수 이름과 호출 서명은 deriveSecretKey와 해시 기반 signBlock을 포함하여 nanopay/legacy 아래에 보존됩니다. 이전 nanopay 결제-래퍼 API는 대체되었습니다. 개발 명령에는 npm ci, npm run check, npm run bench가 포함됩니다. 검사는 프로토콜 벡터, 워크플로, 브라우저 및 Worker 실행, 포맷팅, 그리고 깨끗한 npm 프로젝트로의 설치를 다룹니다. Playwright Chromium은 npx playwright install chromium으로 설치할 수 있습니다. npm run build:wasm은 LLVM clang과 wasm-ld를 사용하여 체크인된 바이너리를 재빌드하며, 일반 빌드는 기존 바이너리를 사용합니다. NanoPay는 GPL-3.0-only이며 nanocurrency-js를 기반으로 합니다. 소스, 빌드 스크립트, 원본 공지, 그리고 번들된 종속성 라이선스는 패키지와 함께 배송됩니다.