UNPKG

nano-wallet-js

Version:

SDK for developers to create and interact with Nanocurrency wallet easily

132 lines (93 loc) β€’ 4.14 kB
# nano-wallet-js SDK for developers to create and interact with Nanocurrency wallets easily with Typescript or Javascript ## Why to use it ? - πŸŽ‰ Easy to use, no need to configure RPC calls - πŸ§‘β€πŸ’» Allows you to configure multiple RPC and Work Servers separately. - πŸ‘· Automatic fallback when a request fails - 🌐 Runtime agnostic: Compatible with Node.js, Browser, EDGE, Bun, Deno and others. - ⚑️ Efficient and agnostic state management allows you to store the wallet state with your favorite tool and start the instance with the previous state. - πŸ”’οΈ Safe and non-custodial: Your privateKey is never shared with RPC or any server, all signatures and key derivation is made on client side by [nanocurrency.js library](https://github.com/marvinroger/nanocurrency-js) ## How to use it #### Install nano-wallet-js package ``` npm install nano-wallet-js ``` #### Init the Wallet instance and sync: ```js import NanoWallet from 'nano-wallet-js'; const config = { privateKey: '000AAFF...', // The privateKey (secret) of your wallet (not the SEED, neither the MNEMONIC) rpcUrls: ['http://[::1]:7076'], // A string or an array of RPC addresses workerUrls: ['http://[::1]:7076'], // A string or an array of RPC Worker Server. Can be the same as rpcUrls representative: 'nano_3kc8wwut3u8g1kwa6x4drkzu346bdbyqzsn14tmabrpeobn8igksfqkzajbb', // representative account debug: true, // show console log message (optional) }; const wallet = new NanoWallet(config); await wallet.sync(); ``` #### Optionally, init with a state: ```js // It is only needed at wallet initialization. // You can use a Database, Filesystem, KV, Redux or whatever... const state = await getFromMyStorage(); const wallet = new NanoWallet(config, state); // Subscribe to state changes to persist in your storage wallet.subscribe(async state => { await saveIntoMyStorage(state); }); ``` ### Properties: - `wallet.account`: Your wallet account / address - `wallet.balance`: Your wallet balance in raws - `wallet.receivable`: Total amount to be received - `wallet.receivableBlocks`: Array of pending blocks to receive with blockHash and amount - `wallet.frontier`: Previous block hash (your last transaction) - `wallet.representative`: The representative you set when initing the instance - `wallet.currentRepresentative`: Your current representative. Make a transaction or call `.setRepresentative()` to update. ### Methods: **Sync**: Force wallet synchronization, updating frontier, balance, receivable and representative. ```js await wallet.sync(); console.log(wallet.frontier, wallet.balance, ...) ``` **Get Receivables**: Returns an array containing the blocks that have not been received yet by this account. Each block contains the `hash` property which you need to receive it using **Receive**. ```js await wallet.getReceivable(); console.log(wallet.receivable, wallet.receivableBlocks); ``` **Receive**: Receive amount manually. This process will be automated in next releases. ```js for (const receivable of wallet.receivableBlocks) { const { hash } = await wallet.receive(receivables.blockHash); } ``` **Send**: Send amount in raws to another wallet. ```js const to = 'nano_1abcd...'; const amount = '1000000000000000000000000000'; // 0.001 Nano const { hash } = await wallet.send(to, amount); // print the updated balance console.log('Balance:', wallet.balance); ``` **Sweep**: Send all balance to another wallet (Careful!) ```js const to = 'nano_3efgh...'; const { hash } = await wallet.sweep(to); ``` **Set Representative**: Set a new representative ```js const rep = 'nano_4ijk1mno...'; await wallet.setRepresentative(rep); // print console.log(wallet.representative, wallet.currentRepresentative); ``` More methods soon... ## 🚧 Work in progress! This is a initial release, not recommended for production use yet. ## Donate ΣΎ If you find this library useful and want to support its development please consider donating: **nano_3dqh8z8ncswmf7151gryu7mqpwbw4f68hi7d8g433omtuabfi438etyyp9ik** <kbd><img src="https://i.ibb.co/Gs6yhv2/nano-wallet-js-qr-code.png" width="200px" height="200px" /></kbd>