---
tags: Client library
order: 6
---
# Wallet Module of Bandchain.js
This module provides functionalities to manage BandChain account. It can be used to create a private key from mnemonic, sign and verify signature, and account address manipulation.
## `PrivateKey`
A class for wrapping signing key, which is a byte array of private key, used for signature creation and public key derivation.
### `generate(path)`
A static method for generating new private key with random mnemonic phrase.
> If path is not given, default to Band's HD prefix 494 and all other indexes being zeroes.
#### Parameter
- path `string` - The HD path that follows the BIP32 standard (optional)
#### Return
- `[string, PrivateKey]` - A tuple of mnemonic phrase and [`PrivateKey`] instance
#### Exception
| Type | Description |
| ----------- | ------------------------- |
| CreateError | Cannot create private key |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PrivateKey } = Wallet;
const [mnemonic, priv] = PrivateKey.generate("m/44'/494'/0'/0/3");
```
---
### `fromMnemonic(word, path)`
A static method for creating a [`PrivateKey`] instance from a given mnemonic phrase and a HD derivation path.
> If path is not given, default to Band's HD prefix 494 and all other indexes being zeroes.
#### Parameter
- **words** `string` - The mnemonic phrase for recover private key
- **path** `string` - The HD path that follows the BIP32 standard (optional)
#### Return
- [`PrivateKey`] - Initialized PrivateKey object
#### Exception
| Type | Description |
| ----------- | ------------------------- |
| CreateError | Cannot create private key |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PrivateKey } = Wallet;
const priv = PrivateKey.fromMnemonic("test mnemonic");
```
---
### `fromHex(priv)`
Create a [`PrivateKey`] instance from a given a hex representation of signing key.
#### Parameter
- **priv** `string` - A hex representation of signing key.
#### Return
- [`PrivateKey`] - Initialized PrivateKey object
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PrivateKey } = Wallet;
const priv = PrivateKey.fromHex(
"2442b724db7189468f16accc0fc505f0609817eb129e13702e696d8b84609ea9"
);
```
---
### `toHex`
Return a hex representation of signing key.
#### Return
- `string` - A hex representation of signing key.
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PrivateKey } = Wallet;
const priv = PrivateKey.fromMnemonic("test mnemonic");
console.log(priv.toHex());
```
#### Result
```
2cb2e2d3582cebf0664d9cda0b89c5d478ae12fac19a6f4ed9c10a7406a19615
```
---
### `toPubkey`
Create a [`PublicKey`] instance which is associated with given private key.
#### Return
- [`PublicKey`] - A PublicKey that can be used to verify the signatures made with this PrivateKey.
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PrivateKey } = Wallet;
const priv = PrivateKey.fromMnemonic("test mnemonic");
console.log(priv.toPubkey().toHex());
```
#### Result
```
02b2b0d35cb1c6d3923813c64e46a82d29e12d03288f438b9d3cf232d9a22bcb83
```
---
### `sign(msg)`
Sign and the given bytes array.
#### Parameter
- **msg** `Buffer` - The message that will be hashed and signed.
#### Return
- `Buffer` - A signature of this private key over the given message
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PrivateKey } = Wallet;
const priv = PrivateKey.fromMnemonic("test mnemonic");
console.log(priv.sign(Buffer.from("test message")).toString("hex"));
```
#### Result
```
4bbc9a7ea54b47b11c67a4074e8d9bca068cb64c788f67342c4033b1b6f0553e1bc63cdf9bc2fb6e89c1e965c1e0f0712a51c250627282309cd2fccf1470f4f6
```
---
## `PublicKey`
Class for wraping verify Key`, which is a byte array of public key, used for signature verification, and generate bech32-encoded address.
### `fromAccBech32(bech)`
Creates a [`PublicKey`] instance from a bech32-encoded public key with account-pubkey prefix.
#### Parameter
- **bech** `string` - A bech32-encoded with account public key prefix.
#### Return
- [`PublicKey`] - A PublicKey instance
#### Exception
| Type | Description |
| ----------- | --------------------- |
| ValueError | Invalid bech32 prefix |
| DecodeError | Cannot decode bech32 |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PublicKey } = Wallet;
const publickey = PublicKey.fromAccBech32(
"bandpub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q6mw8s9v"
);
```
---
### `fromValBech32(bech)`
Creates a [`PublicKey`] instance from a bech32-encoded public key with validator-pubkey prefix
#### Parameter
- **bech** `string` - A bech32-encoded with validator public key prefix
#### Return
- [`PublicKey`] - A PublicKey instance
#### Exception
| Type | Description |
| ----------- | --------------------- |
| ValueError | Invalid bech32 prefix |
| DecodeError | Cannot decode bech32 |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PublicKey } = Wallet;
const publickey = PublicKey.fromValBech32(
"bandvaloperpub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q69gsm29"
);
```
---
### `fromConsBech32(bech)`
Creates a [`PublicKey`] instance from a bech32-encoded public key with validator-consensus-pubkey prefix
#### Parameter
- **bech** `string` A bech32-encoded with validator consensus public key prefix
#### Return
- [`PublicKey`] - A PublicKey instance
#### Exception
| Type | Description |
| ----------- | --------------------- |
| ValueError | Invalid bech32 prefix |
| DecodeError | Cannot decode bech32 |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PublicKey } = Wallet;
const publickey = PublicKey.fromConsBech32(
"bandvalconspub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q6r8ytws"
);
```
---
### `toHex`
Returns a hex representation of verifying key.
#### Return
- `string` - A hex representation of verifying key.
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PublicKey } = Wallet;
const publickey = PublicKey.fromAccBech32(
"bandpub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q6mw8s9v"
);
console.log(publickey.toHex());
```
#### Result
```
0351e98e1be097250f2ff4188c0aace0a716e69a992cd77f9dfe436b3e8b34280d
```
---
### `toPubkeyProto`
Returns an instance of Cosmos SDK Protobuf's [`PubKey`], which can be used for constructing transactions.
#### Return
- [`PubKey`] - An instance of Cosmos SDK Protobuf's `PubKey`
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PublicKey } = Wallet;
const publickey = PublicKey.fromAccBech32(
"bandpub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q6mw8s9v"
);
// Converting to base64 is for displaying only
console.log(publickey.toPubkeyProto().getKey_asB64());
```
#### Result
```
A1HpjhvglyUPL/QYjAqs4KcW5pqZLNd/nf5Daz6LNCgN
```
---
### `toAccBech32`
Returns bech32-encoded public key with account-pubkey prefix
#### Return
- `string` - A bech32-encoded with account public key prefix.
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PublicKey } = Wallet;
const publickey = PublicKey.fromAccBech32(
"bandpub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q6mw8s9v"
);
console.log(publickey.toAccBech32());
```
#### Result
```
bandpub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q6mw8s9v
```
---
### `toValBech32`
Returns bech32-encoded public key with validator-pubkey prefix
#### Return
- `string` - A bech32-encoded with validator public key prefix.
### Exceptions
| Type | Description |
| --------------------- | -------------------------------- |
| UnsuccessfulCallError | Unsuccessful bech32.toWords call |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PublicKey } = Wallet;
const publickey = PublicKey.fromAccBech32(
"bandpub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q6mw8s9v"
);
console.log(publickey.toValBech32());
```
#### Result
```
bandvaloperpub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q69gsm29
```
---
### `toConsBech32`
Returns bech32-encoded public key with validator-consensus-pubkey prefix
#### Return
- `string` - A bech32-encoded with validator consensus public key prefix.
### Exceptions
| Type | Description |
| --------------------- | -------------------------------- |
| UnsuccessfulCallError | Unsuccessful bech32.toWords call |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PublicKey } = Wallet;
const publickey = PublicKey.from_acc_bech32(
"bandpub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q6mw8s9v"
);
console.log(publickey.toConsBech32());
```
#### Result
```
bandvalconspub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q6r8ytws
```
---
### `toAddress`
Returns an [`Address`] instance from given public key
#### Return
- [`Address`] - An Address instance.
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PublicKey } = Wallet;
const publickey = PublicKey.fromAccBech32(
"bandpub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q6mw8s9v"
);
console.log(publickey.toAddress().toHex());
```
#### Result
```
8bb66ae5bb7e5ce1035557cf1c77430b987683d2
```
---
### `verify(msg, sig)`
Verify a signature made over provided data.
#### Parameter
- **msg** `Buffer` A data signed by the `signature`, will be hashed using sha256 function
- **sig** `Buffer` A encoding of the signature
#### Return
- `boolean` True if the verification was successful
#### Exception
| Type | Description |
| ----------------- | ---------------------------------------- |
| BadSignatureError | if the signature is invalid or malformed |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { PrivateKey } = Wallet;
const priv = PrivateKey.fromMnemonic("test mnemonic");
const pubkey = priv.toPubkey();
const msg = Buffer.from("test message");
const sig = priv.sign(msg);
console.log(pubkey.verify(msg, sig));
```
#### Result
```
true
```
---
## `Address`
Class for wraping Address. Adding method to encode/decode to Bech32 format.
### `fromAccBech32(bech)`
Create an [`Address`] instance from a bech32-encoded with account prefix.
#### Parameter
- **bech** `string` - A bech32-encoded with account prefix.
#### Return
- [`Address`] - A Address instance
#### Exception
| Type | Description |
| ----------- | --------------------- |
| ValueError | Invalid bech32 prefix |
| DecodeError | Cannot decode bech32 |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { Address } = Wallet;
address = Address.fromAccBech32("band13eznuehmqzd3r84fkxu8wklxl22r2qfmtlth8c");
```
---
### `fromValBech32(bech)`
Create an [`Address`] instance from a bech32-encoded with validator prefix
#### Parameter
- **bech** `string` - A bech32-encoded with validator prefix
#### Return
- [`Address`] - A Address instance
#### Exception
| Type | Description |
| ----------- | --------------------- |
| ValueError | Invalid bech32 prefix |
| DecodeError | Cannot decode bech32 |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { Address } = Wallet;
address = Address.fromValBech32(
"bandvaloper13eznuehmqzd3r84fkxu8wklxl22r2qfm8f05zn"
);
```
---
### `fromConsBech32(bech)`
Create an [`Address`] instance from a bech32-encoded with validator consensus prefix
#### Parameter
- **bech** `string` - A bech32-encoded with validator consensus prefix
#### Return
- [`Address`] - A Address instance
#### Exception
| Type | Description |
| ----------- | --------------------- |
| ValueError | Invalid bech32 prefix |
| DecodeError | Cannot decode bech32 |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { Address } = Wallet;
const address = Address.fromConsBech32(
"bandvalcons13eznuehmqzd3r84fkxu8wklxl22r2qfmn6ugwj"
);
```
---
### `toHex`
Return a hex representation of `Address`.
#### Return
- `string` - A hex representation of Address.
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { Address } = Wallet;
const address = Address.fromAccBech32(
"band13eznuehmqzd3r84fkxu8wklxl22r2qfmtlth8c"
);
console.log(address.toHex());
```
#### Result
```
8e453e66fb009b119ea9b1b8775be6fa9435013b
```
---
### `toAccBech32`
Return bech32-encoded with account prefix
#### Return
- `string` - A bech32-encoded with account prefix.
### Exceptions
| Type | Description |
| --------------------- | -------------------------------- |
| UnsuccessfulCallError | Unsuccessful bech32.toWords call |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { Address } = Wallet;
const address = Address.fromAccBech32(
"band13eznuehmqzd3r84fkxu8wklxl22r2qfmtlth8c"
);
console.log(Address.toAccBech32());
```
#### Result
```
band13eznuehmqzd3r84fkxu8wklxl22r2qfmtlth8c
```
---
### `toValBech32`
Return bech32-encoded with validator prefix
#### Return
- `string` A bech32-encoded with validator prefix.
### Exceptions
| Type | Description |
| --------------------- | -------------------------------- |
| UnsuccessfulCallError | Unsuccessful bech32.toWords call |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { Address } = Wallet;
const address = Address.fromAccBech32(
"band13eznuehmqzd3r84fkxu8wklxl22r2qfmtlth8c"
);
console.log(address.toValBech32());
```
#### Result
```
bandvaloper13eznuehmqzd3r84fkxu8wklxl22r2qfm8f05zn
```
---
### `toConsBech32`
Return bech32-encoded with validator consensus prefix
#### Return
- `string` - A bech32-encoded with validator consensus prefix.
### Exceptions
| Type | Description |
| --------------------- | -------------------------------- |
| UnsuccessfulCallError | Unsuccessful bech32.toWords call |
#### Example
```javascript=
import { Wallet } from "@bandprotocol/bandchain.js";
const { Address } = Wallet;
const address = Address.fromAccBech32(
"band13eznuehmqzd3r84fkxu8wklxl22r2qfmtlth8c"
);
console.log(address.toConsBech32());
```
#### Result
```
bandvalcons13eznuehmqzd3r84fkxu8wklxl22r2qfmn6ugwj
```
[privatekey]: TODO:-add-link
[publickey]: TODO:-add-link
[address]: TODO:-add-link
[pubkey]: TODO:-add-link