README
nkn-wallet-js
JavaScript implementation of NKN wallet.
Note: This repository is in the early development stage and may not have all functions working properly. It should be used only for testing now.
Install
Node
npm i nkn-wallet
Browser
Use dist/nkn-wallet.js
or dist/nkn-wallet.min.js
.
If you use it in React Native, you also need to follow the installation guide in react-native-crypto.
Usage
- import
// ES6
import nknWallet from 'nkn-wallet';
// ES5
var nknWallet = require('nkn-wallet');
- Create a new wallet
const wallet = nknWallet.newWallet('password');
- Get wallet's json string
const walletJson = wallet.toJSON();
- Load wallet from a wallet json string
const walletFromJson = nknWallet.loadJsonWallet(walletJson, 'password');
- Restore wallet from a private key
const walletFromSeed = nknWallet.restoreWalletBySeed(wallet.getSeed(), 'new-wallet-password');
- Verify whether an address is valid
console.log(nknWallet.verifyAddress(wallet.address));
- Verify password of the wallet
console.log(wallet.verifyPassword('password'));
- Get balance of this wallet
wallet.getBalance()
.then(function(value) {
console.log('Balance for this wallet is:', value.toString());
})
.catch(function(error) {
console.log('Get balance fail:', error);
});
- Transfer token to some address
wallet.transferTo(wallet.address, 1)
.then(function(data) {
console.log('Transfer success:', data);
})
.catch(function(error) {
console.log('Transfer fail:', error);
});
- Register name for this wallet
wallet.registerName('some-name')
.then(function(data) {
console.log('Register name success:', data);
})
.catch(function(error) {
console.log('Register name fail:', error);
});
- Delete name for this wallet
wallet.deleteName('some-name')
.then(function(data) {
console.log('Delete name success:', data);
}).catch(function(error) {
console.log('Delete name fail:', error);
});
- Subscribe to specified topic for this wallet for next 10 blocks
wallet.subscribe('topic', 10, 'identifier')
.then(function(data) {
console.log('Subscribe success:', data);
}).catch(function(error) {
console.log('Subscribe fail:', error);
});
Check examples for full examples.
Configure
NKN wallet only stores some static information such as encrypted private keys, addresses and so on. All dynamic information needs to be queried from a NKN node. By default it will try to use RPC server provided by us, but you can change it (together with NKN token ID) by calling the global configure function:
nknWallet.configure({
rpcAddr: 'http://127.0.0.1:30003',
})
Note that configure is optional. If you don't call configure()
, default
configurations will be used.
API
- nknWallet
/***
* global configuration:
* {
* rpcAddr:'',
* }
*
* @param config | Object
*/
nknWallet.configure(config)
/**
* create a new wallet
* @param password : string : the password to encrypt wallet
* @returns {NknWallet} : a NknWallet instance
*/
nknWallet.newWallet(password)
/***
* load wallet from json string
* @param walletJson : string : a json format wallet
* @param password : string : password for this wallet
* @returns {NknWallet | null} : return NknWallet instance or null if key information is missing.
*
* !this method will thow an error if the password is wrong!
*/
nknWallet.loadJsonWallet(walletJson, password)
/***
* restore a wallet from private key
* @param privateKey : string : the private key for wallet restore
* @param password : string : password for new wallet
* @returns {NknWallet} : a NknWallet instance
*/
nknWallet.restoreWalletBySeed(privateKey, password)
/***
* verify whether an address is valid
* @param address : string : an address
* @returns {boolean} : verifies whether an address is valid
*/
nknWallet.verifyAddress(address)
- NknWallet
All of the following methods are instance methods
/***
* generate wallet json
* @returns {string} : wallet json
*/
toJSON()
/***
* get the public key of this wallet
* @returns {string} : the public key of this wallet
*/
getPublicKey()
/***
* verify password of the wallet
* @param password : string : password for this wallet
* @returns {boolean} : verifies whether the password is correct
*/
verifyPassword(password)
/***
* get the private key of this wallet
* @returns {string} : the private key of this wallet
*
* !!! anyone with the private key has the power to restore a full-featured wallet !!!!
*/
getPrivateKey()
/***
* transfer nkn to some valid address
* @param toAddress : string : valid nkn address
* @param value : number : value for transfer
*
* !!! the fail function will be called for any transfer errors
* and the parameter applied is a WalletError instance. !!!
*/
transferTo(toAddress, value)
/***
* register name on nkn for current wallet
* @param name : string : name to register
*
* !!! the fail function will be called for any register errors
* and the parameter applied is a WalletError instance. !!!
*/
registerName(name)
/***
* delete name on nkn for current wallet
* @param name : string : name to delete
*
* !!! the fail function will be called for any delete errors
* and the parameter applied is a WalletError instance. !!!
*/
deleteName(name)
/***
* subscribe to topic on nkn for current wallet
* @param topic : string : topic to subscribe to
* @param duration : number : subscription duration
* @param identifier : string : optional identifier
* @param meta : string : optional metadata
*
* !!! the fail function will be called for any register errors
* and the parameter applied is a WalletError instance. !!!
*/
subscribe(topic, duration, identifier = '', meta = '', options = {})
/***
* query balance
* @returns {promise} : if resolved, the parameter is a decimal.js instance
*/
getBalance()
Contributing
Can I submit a bug, suggestion or feature request?
Yes. Please open an issue for that.
Can I contribute patches?
Yes, we appreciate your help! To make contributions, please fork the repo, push your changes to the forked repo with signed-off commits, and open a pull request here.
Please sign off your commit. This means adding a line "Signed-off-by: Name
git commit -s