# ledger-polkadot (JS Integration)

![zondax_light](docs/zondax_light.png)

[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![npm version](https://badge.fury.io/js/%40zondax%2Fledger-polkadot.svg)](https://badge.fury.io/js/%40zondax%2Fledger-polkadot)

This package provides a basic client library to communicate with Polkadot App running in a Ledger Nano S/S+/X or Stax
device.

# Available commands

This package exports a `PolkadotApp` class that receives any
[Ledger Transport](https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-transport) and has the
following functions, that execute commands in the device. All of them are typed.

They return the following basic structure + any other stuff relevant in that specific command.

```typescript
interface ResponseBase {
  errorMessage: string;
  returnCode: number;
}
```

Errors can be checked using the `returnCode` field. You should check if it's equal to `ERROR_CODE.NoError`.

```typescript
import { ERROR_CODE } from "@zondax/ledger-polkadot";

// we got the result from any method of the class
if (result.returnCode !== ERROR_CODE.NoError) {
  // handle with care
}
```

The following commands are available:

- `appInfo`: Get information from the device and application. This method is standard in all Ledger Apps.
- `getVersion`: Get app version and targetId.
- `getAddress`: Get address and pubkey. It takes the following arguments:
  - `path: string`: BIP44 path with length 5. Example: `"m/44'/354'/0'/1/0`.
    - Note: it needs to start with `"m/44'/354'`, otherwise it'll be rejected.
  - `ss58prefix: number`: [ss58 prefix](https://github.com/paritytech/ss58-registry) to encode the address with
- `sign`: Sign a transaction. It takes the following arguments:
  - `path: string`: BIP44 path with length 5. Example: `"m/44'/354'/0'/1/0`.
    - Note: it needs to start with `"m/44'/354'`, otherwise it'll be rejected.
  - `blob: Buffer`: SCALE-encoded transaction.
  - `metadata: Buffer`: SCALE-encoded `ShortMetadata` according to
    [spec](https://github.com/Alzymologist/metadata-shortener).
- `signRaw`: Sign arbitrary bytes (not a transaction). It gets the following arguments:
  - `path: string`: BIP44 path with length 5. Example: `"m/44'/354'/0'/1/0`.
    - Note: it needs to start with `"m/44'/354'`, otherwise it'll be rejected.
  - `blob: Buffer`: Bytes to sign, prefixed by `<Bytes>` and suffixed by `</Bytes>`.

# Who we are?

We are Zondax, a company pioneering blockchain services. If you want to know more about us, please visit us at
[zondax.ch](https://zondax.ch)
