# BsvWallet ⚡🔑

A simple Bitcoin SV wallet library

- can work offline ✅
- enable peer to peer transactions ✅
- follow the whitepaper ✅
- browser friendly ✅
- autocomplete in js and ts files ✅
- HD Private Keys at 0 technical cost ✅
- ❤️ easy to use ❤️

## How to install

```bash
npm i bsv-p2p-wallet
```

## How to import

### Typescript

```ts
const { PeerToPeerWallet } from "bsv-p2p-wallet"
```

### Javascript

```js
const { PeerToPeerWallet } = require("bsv-p2p-wallet");
```

## How to use

### Create or Import a wallet

#### Import with a mnemonic

```js
const myMnemonic = "awkward will execute giant ...";
const wallet = new PeerToPeerWallet({ key: myMnemonic });
```

#### Import with a seed string

```js
const seed = "Kwn6yDoKobVjH2dqa9UZ4c5yXfUQQo6PxdQ...";
const walet = new PeerToPeerWallet({ key: seed, keyFormat: "string" });
```

#### Create a new Wallet and get the mnemonic

```js
const wallet = new PeerToPeerWallet();
const myNewWalletMnemonic = wallet.mnemonic;
// to save it into a file
require("fs").writeFileSync("private.key", myNewWalletMnemonic);
// or into localStorage if your are into a web browser
localStorage.setItem("key", myNewWalletMnemonic);
```

## Create a new wallet and get your wallet Address

```js
const wallet = new PeerToPeerWallet();
const createWalletAddress = await wallet.createWallet();

console.log(createWalletAddress); // "1BrdwqTosre3x6hiLpkgtbeZMa...."
```

## Get wallet balance from wallet address

```js
const wallet = new PeerToPeerWallet();
const balanceInSatoshis = wallet.getBalance("1BrdwqTosre3x6hiLpkgtbeZMa....");

console.log(balanceInSatoshis); // 4
```

## Initiate IndexedDB to save transactions

```js
const wallet = new PeerToPeerWallet();
const initIndexedDb = wallet.initIndexedDb(idb);

/*idb is an window object
  const idb =
    window.indexedDB ||
    window.mozIndexedDB ||
    window.webkitIndexedDB ||
    window.msIndexedDB ||
    window.shimIndexedDB;/*
```

## Sign a tx for your friend and send Bitcoin

```js
const senderWallet = "1BrdwqTosre3x6hiLpkgt......";
const receiverWallet = "12qdvBirkFhAX8yH2kbsJWqdo......";
const sendBitcoinQuantity = 4;

const wallet = new PeerToPeerWallet();
const sendBitcoin = await wallet.sendBitcoin(
  senderWallet,
  receiverWallet,
  sendBitcoinQuantity
);
```

## Decode all signed Transactions for wallet address

```js
const wallet = new PeerToPeerWallet();
const walletAddress = "1BrdwqTosre3x6hiLpkgt....";

const allTransaction = await wallet.decodeAllTransactions(walletAddress);
```

## Get all exisiting signed Transactions of receiver wallet address

```js
const wallet = new PeerToPeerWallet();
const receiverWallet = "12qdvBirkFhAX8yH2kbsJWqdo......";

const existingTransactions = await wallet.getExistingTransactions(
  receiverWallet
);
```

## Dev note
