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)
- Host: GitHub
- URL: https://github.com/nextu1337/simple-nano-wallet
- Owner: nextu1337
- License: apache-2.0
- Created: 2025-03-09T12:47:06.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2025-03-09T13:10:25.000Z (3 months ago)
- Last Synced: 2025-03-09T14:18:38.522Z (3 months ago)
- Topics: crypto, cryptocurrency, nano, nanocurrency, payments, xno
- Language: TypeScript
- Homepage:
- Size: 46.9 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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.