An open API service indexing awesome lists of open source software.

https://github.com/nextu1337/simple-nano-wallet

Benskalz' simple nano wallet rewritten in TypeScript with some additional features (in memory key managment)
https://github.com/nextu1337/simple-nano-wallet

crypto cryptocurrency nano nanocurrency payments xno

Last synced: 2 months ago
JSON representation

Benskalz' simple nano wallet rewritten in TypeScript with some additional features (in memory key managment)

Awesome Lists containing this project

README

        

**Simple Nano Wallet**
# WORK IN PROGRESS, WILL BE DONE SOON
Simple nano wallet with in memory key managment. Originally made by [Nanswap Nodes](https://nanswap.com/nodes), rewritten in typescript and added some features.
Rewritten by [nx2](https://github.com/nextu1337)

**Core Features**
- Easily send and receive nano with local signature
- Use your own node or any node provider
- Auto receive blocks of wallet accounts with websocket
- Receive blocks (manually)
- Create wallet from seed or from random entropy
- Create derived accounts
- Suppport custom prefix & decimal for custom network such as Banano or DogeNano

**New Features**
- TypeScript support & refactored code
- Allow multiple nodes for RPC & Work servers for failover

**Installation**
Using npm
```bash
npm install simple-nano-wallet
```
Using yarn
```bash
yarn add simple-nano-wallet
```

**Usage:**
**Create new wallet**
```ts
import { randomBytes } from 'crypto';
import { Wallet } from 'simple-nano-wallet';

const seed = randomBytes(32).toString('hex').toUpperCase();

// initialize wallet
const wallet = new Wallet({
rpcUrls: 'http://127.0.0.1:7076', // if you have multiple nodes, you can provide an array of nodes
workUrls: ['http://127.0.0.1:7076', 'https://fallback-node.com'], // multiple nodes for failover, singular node passed as string is also valid
wsUrl: `ws://127.0.0.1:7078`,
defaultRep: "nano_1banexkcfuieufzxksfrxqf6xy8e57ry1zdtq9yn7jntzhpwu4pg4hajojmq",
seed,
});

// Generate 10 derived accounts
wallet.createAccounts(10)
console.log(wallet.accounts)
// ["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**
```ts
// receive receivable block for an account
const hash = "A1B2C3D4E5F6..."
const amount = wallet.tools.megaToRaw(0.001)

await wallet.receiveFunds("nano_3g5hpb4kwqgakt4cx11ftq6xztx1matfhgkmhunj3sx4f4s3nwb6hfi3nts1", { hash, amount })
```

**Send**
```ts
// send 0.001 nano from nano_3g5hp... to nano_3g5hp...
const hash = await wallet.sendFunds({
source: "nano_3g5hpb4kwqgakt4cx11ftq6xztx1matfhgkmhunj3sx4f4s3nwb6hfi3nts1", // IMPORTANT: must be in wallet.accounts.
destination: "nano_3g5hpb4kwqgakt4cx11ftq6xztx1matfhgkmhunj3sx4f4s3nwb6hfi3nts1",
amount: wallet.tools.megaToRaw(0.001),
})

console.log(hash)
// "A1B2C3D4E5F6..."
```

**Custom networks**
```ts
const headerAuth = { // custom header for authentification
"nodes-api-key": process.env.NODES_API_KEY
}

// DogeNano Wallet
const walletXDG = new Wallet({
rpcUrls: 'https://nodes.nanswap.com/XDG',
workUrls: 'https://nodes.nanswap.com/XDG',
wsUrl: `wss://nodes.nanswap.com/ws/?ticker=XDG&api=${process.env.NODES_API_KEY}`,
seed: seedXDG,
defaultRep: "xdg_1e4ecrhmcws6kwiegw8dsbq5jstq7gqj7fspjmgiu11q55s6xnsnp3t9jqxf",
addressPrefix: 'xdg_',
decimalPlaces: 26,
customHeaders: headerAuth,
subscribeAll: false,
})

// Banano Wallet
const walletBAN = new Wallet({
rpcUrls: 'https://nodes.nanswap.com/BAN',
workUrls: 'https://nodes.nanswap.com/BAN',
wsUrl: `wss://nodes.nanswap.com/ws/?ticker=BAN&api=${process.env.NODES_API_KEY}`,
seed: seedBAN,
defaultRep: "ban_1banexkcfuieufzxksfrxqf6xy8e57ry1zdtq9yn7jntzhpwu4pg4hajojmq",
addressPrefix: 'ban_',
decimalPlaces: 29,
customHeaders: headerAuth,
subscribeAll: false,
})
```
Despite the rewrite, this lib is **still** intended for small project (<5000 accounts), for a more scablable system, it is recommended to use a database to store the accounts keys.