Package Exports
- @nano/wallet
- @nano/wallet/nano.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@nano/wallet) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Offline Nano Wallet
LOCAL:
<script src="/nano.js"></script>
CDN:
<script src="https://unpkg.com/@nano/wallet"></script>
NPM:
// npm install @nano/wallet
const nano = require('@nano/wallet')
OFFLINE SIGNING:
var block = nano.sign({
type: "send",
walletBalanceRaw: '18618869000000000000000000000000',
toAddress: 'nano_3kyb49tqpt39ekc49kbej51ecsjqnimnzw1swxz4boix4ctm93w517umuiw8',
representativeAddress: 'nano_1stofnrxuz3cai7ze75o174bpm7scwj9jn3nxsn8ntzg784jf1gzn1jjdkou',
frontier: '92BA74A7D6DC7557F3EDA95ADC6341D51AC777A0A6FF0688A5C492AB2B2CB40D',
transactionHash: 'CBC911F57B6827649423C92C88C0C56637A4274FF019E77E24D61D12B5338783',
amountRaw: '7000000000000000000000000000000',
}, process.env.PRIVATE_KEY)
console.log( block )
// {
// type: 'state',
// account: 'nano_3kyb49tqpt39ekc49kbej51ecsjqnimnzw1swxz4boix4ctm93w517umuiw8',
// previous: '92BA74A7D6DC7557F3EDA95ADC6341D51AC777A0A6FF0688A5C492AB2B2CB40D',
// representative: 'nano_1stofnrxuz3cai7ze75o174bpm7scwj9jn3nxsn8ntzg784jf1gzn1jjdkou',
// balance: '25618869000000000000000000000000',
// link: 'CBC911F57B6827649423C92C88C0C56637A4274FF019E77E24D61D12B5338783',
// signature: 'd5dd2a53becfc8c3fd17ddee2aba651ef6ac28571b66a4dfb2f4820c7d04d235d226d1fb176eb3958bbbfb9145663a0b4ffffd59cfc4b23af24a2af5f51e6a0e',
// work: ''
// }
var signed = nano.sign({
type: "receive",
walletBalanceRaw: '18618869000000000000000000000000',
toAddress: 'nano_3kyb49tqpt39ekc49kbej51ecsjqnimnzw1swxz4boix4ctm93w517umuiw8',
representativeAddress: 'nano_1stofnrxuz3cai7ze75o174bpm7scwj9jn3nxsn8ntzg784jf1gzn1jjdkou',
frontier: '92BA74A7D6DC7557F3EDA95ADC6341D51AC777A0A6FF0688A5C492AB2B2CB40D',
transactionHash: 'CBC911F57B6827649423C92C88C0C56637A4274FF019E77E24D61D12B5338783',
amountRaw: '7000000000000000000000000000000',
work: 'c5cf86de24b24419',
}, process.env.PRIVATE_KEY)
var hash = await nano.process( signed )
CHANGE REP:
var signed = nano.sign({
walletBalanceRaw: '3000000000000000000000000000000',
address: 'nano_3igf8hd4sjshoibbbkeitmgkp1o6ug4xads43j6e4gqkj5xk5o83j8ja9php',
representativeAddress: 'nano_1anrzcuwe64rwxzcco8dkhpyxpi8kd7zsjc1oeimpc3ppca4mrjtwnqposrs', // new rep
frontier: '128106287002E595F479ACD615C818117FCB3860EC112670557A2467386249D4',
work: '0000000000000000',
}, process.env.PRIVATE_KEY)
var hash = await nano.process( signed )
LOCAL API
nano.generate()
nano.import( nano.generate() )
nano.accounts()
nano.add_account()
nano.sign(block, process.env.privateKey)
nano.convert('421.70', 'NANO', 'RAW') // 421700000000000000000000000000000
nano.encrypt('any_string', process.env.PASSWORD) // AES-256
nano.decrypt('any_string', process.env.PASSWORD) // UTF-8
nano.export(process.env.PASSWORD)
REQUIRES RPC
await nano.process(signedBlock)
await nano.balances()
await nano.receive()
await nano.send({ to: '@fosse', amount: 0.1 })
await nano.rpc({ action: "block_count" })
LOCALSTORAGE:
Build non-custodial Nano applications by persisting Wallets client-side. Using AES-256 ecryption. The longer
process.env.PASSWORD
, the more secure.
nano.offline({
filename: 'aes_encrypted_string.txt',
password: process.env.PASSWORD
})
console.log( nano.accounts() )
await nano.receive()
await nano.send({
to: [ 'nano_1faucet7b6xjyha7m13objpn5ubkquzd6ska8kwopzf1ecbfmn35d1zey3ys' ],
amount: nano.convert(0.001, 'NANO', 'RAW') // 'all'
})
IMPORT/EXPORT
A JSON string is encrypted with AES-256 using a user defined secret.
nano.offline({
filename: 'aes_encrypted_string.txt',
password: process.env.PASSWORD
})
console.log( nano.export() )
Encrypted:
AES-256::U2FsdGVkX1+jBdpxz6hMNOqWmidZQPqHjOHq7sGi94U0dMuPZsDfPRGVVDVQH5ZfvXku6aqEfmoR9LwoBbKKxGxrAzOwf2SvNcmvwdAsgAkmieOwVOCDbob46yMN7TZUnRDIOSNq3tEozfaf9vbH3SdRZgkCukblN5m+lA0yxKSDaPiczANZMgP6NdtjMNo2SHVVmJhWgz4i8MDCfk6ZeZChxL6UyuqR0hKyY0wEtXHndTapQuVYQ/Oyvb9ccNfqvgxirmYERiXPEFi/vndPwmS2AEGih7fWndSARkXtLgG3xTI2tWYvoMIef4ZouiFtOhfOXuiab0OteoQmlmW6C03Nb4e2SZrFyyIF9wWkXDcpHSqPBUJJzOPF/p8c8fyEbhpe/iEs6pObrLOSoh8S+t016ZF3ARntCeBtMVZCiwVS94Ru+zGcDVxJiny/oBywznxPlkCAnf4m5Tn6E9LpeLdi14feuGTCerGYW3MYM3jJbqUGRuaGw6OB1hRcKtpe3QLR/lmnw1jRkpux6K+5P2p4GsacK/l0Ul5caGnCeQWeDll3q8DIFD4Qhvp1qnawhMvpYu/RCwVTGvLFlkhYS/DruJEQuVErHK8bhfAvPZaF3Eyw5qzCoUaukcl2S1i5HzPsMgcxSfRxCmCH37bKd8YfE3wiC+7AatsN1QOvzzY=
Decrypted:
{
"mnemonic": "body hire team image luxury banana panther tiny clog beauty only cover frost tea pioneer between salt magnet ugly tourist process grit unlock rice",
"seed": "7202a6eb69fa3a465539648c35e55ad7e295f25c9a7a340f82b3d3e338f....33a4ee0939cd44a7abb1afe83ff2170cae4",
"accounts": [{
"accountIndex": 0,
"private": "d7cace49b3a20f83.....58cb61b8f2ef84f3",
"address": "nano_1h4ymsbu....3wotjakm1copzy56bd8na"
}]
}
License
MIT