0.1.4 • Published 10 months ago

simple-nano-wallet-js-dev v0.1.4

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

Simple Nano Wallet JS

Simple nano wallet with in memory key managment and client side signatures.
Compatible with any nano node RPC & Websocket. Made by Nanswap Nodes.

Features

  • Send & Receive nano
  • Auto receive wallet's incoming blocks (requires websocket)
  • Compatible with Banano, DogeNano and any nano-node network with custom prefix & decimal
  • Receive all receivable blocks for an account
  • Create wallet from seed or from random entropy
  • Create derived accounts

Installation
Using npm

npm install simple-nano-wallet-js

Using yarn

yarn add simple-nano-wallet-js

Usage:
Create new wallet

const { Wallet } = require('simple-nano-wallet-js');
const { wallet: walletLib} = require('multi-nano-web')

let seed = walletLib.generateLegacy().seed // save & backup it somewhere!
// initialize wallet
const wallet = new Wallet({
            RPC_URL: 'http://127.0.0.1:7076',
            WORK_URL: 'http://127.0.0.1:7076',
            WS_URL: `ws://127.0.0.1:7078`,
            seed: seed,
            defaultRep: "nano_1banexkcfuieufzxksfrxqf6xy8e57ry1zdtq9yn7jntzhpwu4pg4hajojmq",
        })

// Generate 10 derived accounts
let accounts = wallet.createAccounts(10)
// ["nano_3g5hpb4kwqgakt4cx11ftq6xztx1matfhgkmhunj3sx4f4s3nwb6hfi3nts1", ... ]

Auto Receive
By default, when a websocket is provided, receivable blocks for all wallet accounts will be processed automatically.
To disable this feature, set autoReceive to false when initializing the wallet.

Manually Receive

// receive all receivable blocks for an account
let hashesReceive = await wallet.receiveAll("nano_3g5hpb4kwqgakt4cx11ftq6xztx1matfhgkmhunj3sx4f4s3nwb6hfi3nts1")

Send

// send 0.001 nano from nano_3g5hp... to nano_3g5hp...
let hash = await wallet.send({
        source: "nano_3g5hpb4kwqgakt4cx11ftq6xztx1matfhgkmhunj3sx4f4s3nwb6hfi3nts1", // must be in wallet. 
        destination: "nano_3g5hpb4kwqgakt4cx11ftq6xztx1matfhgkmhunj3sx4f4s3nwb6hfi3nts1",
        amount: wallet.megaToRaw(0.001),
})
        

Custom networks

let headerAuth = { // custom header for authentification
     "nodes-api-key": process.env.NODES_API_KEY
}

// DogeNano Wallet
const walletXDG = new Wallet({
            RPC_URL: 'https://nodes.nanswap.com/XDG',
            WORK_URL: 'https://nodes.nanswap.com/XDG',
            WS_URL: `wss://nodes.nanswap.com/ws/?ticker=XDG&api=${process.env.NODES_API_KEY}`,
            seed: seedXDG,
            defaultRep: "xdg_1e4ecrhmcws6kwiegw8dsbq5jstq7gqj7fspjmgiu11q55s6xnsnp3t9jqxf",
            prefix: 'xdg_',
            decimal: 26,
            customHeaders: headerAuth,
            wsSubAll: false, 
        })
// Banano Wallet
const walletBAN = new Wallet({
            RPC_URL: 'https://nodes.nanswap.com/BAN',
            WORK_URL: 'https://nodes.nanswap.com/BAN',
            WS_URL: `wss://nodes.nanswap.com/ws/?ticker=BAN&api=${process.env.NODES_API_KEY}`,
            seed: seedBAN,
            defaultRep: "ban_1banexkcfuieufzxksfrxqf6xy8e57ry1zdtq9yn7jntzhpwu4pg4hajojmq",
            prefix: 'ban_',
            decimal: 29,
            customHeaders: headerAuth,
            wsSubAll: false
        })

This lib is intended for small project (<5000 accounts), for a more scablable system, it is recommended to use a database to store the accounts keys.

Credits to nanocurrency-web for nano toolkit.