Skip to content

Toolkit for Nano cryptocurrency client side offline integrations

License

Notifications You must be signed in to change notification settings

Falsen/nanocurrency-web-js

 
 

Repository files navigation

nanocurrency-web

Build Status

Toolkit for Nano cryptocurrency client side offline implementations allowing you to build web- and mobile applications using Nano without compromising the user's keys by sending them out of their own device.

The toolkit supports creating and importing wallets and signing blocks on-device. Meaning that the user's keys should never be required to leave the device.

Features

  • Generate wallets with a BIP32 mnemonic phrase
  • BIP39/44 private key derivation
  • Mnemonic is compatible with the Ledger Nano implementation
  • Import wallets with a mnemonic phrase or a seed
  • Sign send, receive and change blocks with a private key
  • Runs in all web browsers and mobile frameworks built with Javascript
  • Convert Nano units

Usage

npm install nanocurrency-web
WARNING: do not use any of the keys or addresses listed below to send real assets

Wallet handling

import { wallet } from 'nanocurrency-web'

// Generates a new wallet with a mnemonic phrase, seed and an account
// You can also generate your own entropy for the mnemonic or set a seed password
// Notice, that losing the password will make the mnemonic phrase void
const wallet = wallet.generate(entropy?, password?)

// Import a wallet with the mnemonic phrase
const wallet = wallet.fromMnemonic(mnemonic, seedPassword?)

// Import a wallet with a seed
const wallet = wallet.fromSeed(seed)

// Derive private keys for a seed, from and to are number indexes
const accounts = wallet.accounts(seed, from, to)
The returned wallet JSON format is as follows:
{
	mnemonic: 'edge defense waste choose enrich upon flee junk siren film clown finish luggage leader kid quick brick print evidence swap drill paddle truly occur',
 	seed: '0dc285fde768f7ff29b66ce7252d56ed92fe003b605907f7a4f683c3dc8586d34a914d3c71fc099bb38ee4a59e5b081a3497b7a323e90cc68f67b5837690310c',
	accounts: [
		{
			accountIndex: 0,
			privateKey: '3be4fc2ef3f3b7374e6fc4fb6e7bb153f8a2998b3b3dab50853eabe128024143',
			publicKey: '5b65b0e8173ee0802c2c3e6c9080d1a16b06de1176c938a924f58670904e82c4',
			address: 'nano_1pu7p5n3ghq1i1p4rhmek41f5add1uh34xpb94nkbxe8g4a6x1p69emk8y1d'
		}
	]
}

Signing a receive block

import { block } from 'nanocurrency-web'

const privateKey = '781186FB9EF17DB6E3D1056550D9FAE5D5BBADA6A6BC370E4CBB938B1DC71DA3';
const data = {
	// Your current balance in RAW
	walletBalanceRaw: '18618869000000000000000000000000',

	// From the pending transaction
	fromAddress: 'nano_1e5aqegc1jb7qe964u4adzmcezyo6o146zb8hm6dft8tkp79za3sxwjym5rx',

	// Your address
	toAddress: 'nano_3kyb49tqpt39ekc49kbej51ecsjqnimnzw1swxz4boix4ctm93w517umuiw8',

	// From wallet info
	representativeAddress: 'nano_1stofnrxuz3cai7ze75o174bpm7scwj9jn3nxsn8ntzg784jf1gzn1jjdkou',

	// From wallet info
	frontier: '92BA74A7D6DC7557F3EDA95ADC6341D51AC777A0A6FF0688A5C492AB2B2CB40D',

	// From the pending transaction in RAW
	amountRaw: '7000000000000000000000000000000',

	// Generate the work server-side or a DPOW service
	work: 'c5cf86de24b24419',
}

// Returns a correctly formatted and signed block ready to be sent to the blockchain
const signedBlock = block.sign(data, privateKey)

Signing a send block

import { block } from 'nanocurrency-web'

const privateKey = '781186FB9EF17DB6E3D1056550D9FAE5D5BBADA6A6BC370E4CBB938B1DC71DA3';
const data = {
	// Current balance from wallet info
	walletBalanceRaw: '5618869000000000000000000000000',

	// Your wallet address
	fromAddress: 'nano_1e5aqegc1jb7qe964u4adzmcezyo6o146zb8hm6dft8tkp79za3sxwjym5rx',

	// The address to send to
	toAddress: 'nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p',

	// From wallet info
	representativeAddress: 'nano_1stofnrxuz3cai7ze75o174bpm7scwj9jn3nxsn8ntzg784jf1gzn1jjdkou',

	// Previous block, from wallet info
	frontier: '92BA74A7D6DC7557F3EDA95ADC6341D51AC777A0A6FF0688A5C492AB2B2CB40D',

	// The amount to send in RAW
	amountRaw: '2000000000000000000000000000000',

	// Generate work on server-side or a DPOW service
	work: 'fbffed7c73b61367',
}

// Returns a correctly formatted and signed block ready to be sent to the blockchain
const signedBlock = block.sign(data, privateKey)

Signing a change representative block

import { block } from 'nanocurrency-web'

const privateKey = '781186FB9EF17DB6E3D1056550D9FAE5D5BBADA6A6BC370E4CBB938B1DC71DA3';
const data = {
	// Your current balance, from account info
	walletBalanceRaw: '3000000000000000000000000000000',

	// Your wallet address
	address: 'nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php',

	// The new representative
	representativeAddress: 'nano_1anrzcuwe64rwxzcco8dkhpyxpi8kd7zsjc1oeimpc3ppca4mrjtwnqposrs',

	// Previous block, from account info
	frontier: '128106287002E595F479ACD615C818117FCB3860EC112670557A2467386249D4',

	// Generate work on the server side or a DPOW service
	work: '0000000000000000',
}

// Returns a correctly formatted and signed block ready to be sent to the blockchain
const signedBlock = block.sign(data, privateKey)

Converting units

import { converter } from 'nanocurrency-web'

// Convert 1 Nano to RAW
const converted = converter.convert('1', 'NANO', 'RAW')

// Convert 1 RAW to Nano
const converted = converter.convert('1000000000000000000000000000000', 'RAW', 'NANO')

Contributions

You are welcome to contribute to the module. To develop, use the following commands

  • npm install to install all the dependencies
  • npm run build to build the Typescript code
  • npm run test to run the tests

Donations

If this helped you in your endeavours and you feel like supporting the developer, feel free to donate some Nano:

nano_35wfowmdqqe34uhmh4fo8i51kxkpr9ybahc4fb7yuzzxtez3oje4et5nk75d

About

Toolkit for Nano cryptocurrency client side offline integrations

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 85.7%
  • JavaScript 14.3%