Skip to content

Commit

Permalink
Add hw app XAH
Browse files Browse the repository at this point in the history
  • Loading branch information
WietseWind committed Apr 18, 2024
1 parent 66abe9b commit 30d3914
Show file tree
Hide file tree
Showing 8 changed files with 483 additions and 0 deletions.
3 changes: 3 additions & 0 deletions libs/ledgerjs/packages/hw-app-xah/.unimportedrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"entry": ["src/Xah.ts"]
}
8 changes: 8 additions & 0 deletions libs/ledgerjs/packages/hw-app-xah/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# @ledgerhq/hw-app-xah

## 6.28.5

### Patch Changes

- Updated dependencies []:
- @ledgerhq/hw-transport@6.30.5
154 changes: 154 additions & 0 deletions libs/ledgerjs/packages/hw-app-xah/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
<img src="https://user-images.githubusercontent.com/4631227/191834116-59cf590e-25cc-4956-ae5c-812ea464f324.png" height="100" />

[GitHub](https://github.com/LedgerHQ/ledger-live/),
[Ledger Devs Discord](https://developers.ledger.com/discord-pro),
[Developer Portal](https://developers.ledger.com/)

## @ledgerhq/hw-app-xrp

Ledger Hardware Wallet XRP JavaScript bindings.

***

## Are you adding Ledger support to your software wallet?

You may be using this package to communicate with the XRP Nano App.

For a smooth and quick integration:

* See the developers’ documentation on the [Developer Portal](https://developers.ledger.com/docs/transport/overview/) and
* Go on [Discord](https://developers.ledger.com/discord-pro/) to chat with developer support and the developer community.

***

## API

<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

#### Table of Contents

* [Xrp](#xrp)
* [Parameters](#parameters)
* [Examples](#examples)
* [getAddress](#getaddress)
* [Parameters](#parameters-1)
* [Examples](#examples-1)
* [signTransaction](#signtransaction)
* [Parameters](#parameters-2)
* [Examples](#examples-2)
* [getAppConfiguration](#getappconfiguration)
* [Examples](#examples-3)

### Xrp

XRP API

#### Parameters

* `transport` **Transport**&#x20;
* `scrambleKey` (optional, default `"XRP"`)

#### Examples

```javascript
import Transport from "@ledgerhq/hw-transport-node-hid";
// import Transport from "@ledgerhq/hw-transport-u2f"; // for browser
import Xrp from "@ledgerhq/hw-app-xrp";
import { encode } from 'ripple-binary-codec';

function establishConnection() {
return Transport.create()
.then(transport => new Xrp(transport));
}

function fetchAddress(xrp) {
return xrp.getAddress("44'/144'/0'/0/0");
}

function signTransaction(xrp, deviceData, seqNo) {
let transactionJSON = {
TransactionType: "Payment",
Account: deviceData.address,
Destination: "rTooLkitCksh5mQa67eaa2JaWHDBnHkpy",
Amount: "1000000",
Fee: "15",
Flags: 2147483648,
Sequence: seqNo,
SigningPubKey: deviceData.publicKey.toUpperCase()
};

const transactionBlob = encode(transactionJSON);

console.log('Sending transaction to device for approval...');
return xrp.signTransaction("44'/144'/0'/0/0", transactionBlob);
}

function prepareAndSign(xrp, seqNo) {
return fetchAddress(xrp)
.then(deviceData => signTransaction(xrp, deviceData, seqNo));
}

establishConnection()
.then(xrp => prepareAndSign(xrp, 123))
.then(signature => console.log(`Signature: ${signature}`))
.catch(e => console.log(`An error occurred (${e.message})`));
```

#### getAddress

get XRP address for a given BIP 32 path.

##### Parameters

* `path` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a path in BIP 32 format
* `display` **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** optionally enable or not the display
* `chainCode` **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** optionally enable or not the chainCode request
* `ed25519` **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** optionally enable or not the ed25519 curve (secp256k1 is default)

##### Examples

```javascript
const result = await xrp.getAddress("44'/144'/0'/0/0");
const { publicKey, address } = result;
```

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<{publicKey: [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String), address: [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String), chainCode: [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?}>** an object with a publicKey, address and (optionally) chainCode

#### signTransaction

sign a XRP transaction with a given BIP 32 path

The rawTxHex parameter is the serialized transaction blob represented as
hex.

##### Parameters

* `path` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a path in BIP 32 format
* `rawTxHex` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a raw hex string representing a serialized transaction blob.
This parameter can be encoded using [ripple-binary-codec](https://www.npmjs.com/package/ripple-binary-codec).
See <https://xrpl.org/serialization.html> for more documentation on the serialization format.
* `ed25519` **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** optionally enable or not the ed25519 curve (secp256k1 is default)

##### Examples

```javascript
const signature = await xrp.signTransaction("44'/144'/0'/0/0", "12000022800000002400000002614000000001315D3468400000000000000C73210324E5F600B52BB3D9246D49C4AB1722BA7F32B7A3E4F9F2B8A1A28B9118CC36C48114F31B152151B6F42C1D61FE4139D34B424C8647D183142ECFC1831F6E979C6DA907E88B1CAD602DB59E2F");
```

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** a signature as hex string

#### getAppConfiguration

get the version of the XRP app installed on the hardware device

##### Examples

```javascript
const result = await xrp.getAppConfiguration();

{
"version": "1.0.3"
}
```

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<{version: [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)}>** an object with a version
6 changes: 6 additions & 0 deletions libs/ledgerjs/packages/hw-app-xah/jest.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import baseConfig from "../../jest.config";

export default {
...baseConfig,
rootDir: __dirname,
};
56 changes: 56 additions & 0 deletions libs/ledgerjs/packages/hw-app-xah/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
{
"name": "@ledgerhq/hw-app-xah",
"version": "6.28.5",
"description": "Ledger Hardware Wallet Ripple Application API",
"keywords": [
"Ledger",
"LedgerWallet",
"Xahau",
"xah",
"NanoS",
"Blue",
"Hardware Wallet"
],
"repository": {
"type": "git",
"url": "https://github.com/LedgerHQ/ledger-live.git"
},
"bugs": {
"url": "https://github.com/LedgerHQ/ledger-live/issues"
},
"homepage": "https://github.com/LedgerHQ/ledger-live/tree/develop/libs/ledgerjs/packages/hw-app-xah",
"publishConfig": {
"access": "public"
},
"main": "lib/Xah.js",
"module": "lib-es/Xah.js",
"types": "lib/Xah.d.ts",
"license": "Apache-2.0",
"dependencies": {
"@ledgerhq/hw-transport": "workspace:^",
"bip32-path": "0.4.2"
},
"devDependencies": {
"@ledgerhq/hw-transport-mocker": "workspace:^",
"@types/jest": "^29.5.10",
"@types/node": "^20.8.10",
"documentation": "14.0.2",
"jest": "^29.7.0",
"rimraf": "^4.4.1",
"source-map-support": "^0.5.21",
"ts-jest": "^29.1.1",
"ts-node": "^10.4.0"
},
"scripts": {
"clean": "rimraf lib lib-es",
"build": "tsc && tsc -m ES6 --outDir lib-es",
"prewatch": "pnpm build",
"watch": "tsc --watch",
"doc": "documentation readme src/** --section=API --pe ts --re ts --re d.ts",
"lint": "eslint ./src --no-error-on-unmatched-pattern --ext .ts,.tsx --cache",
"lint:fix": "pnpm lint --fix",
"test": "jest",
"unimported": "unimported"
},
"gitHead": "dd0dea64b58e5a9125c8a422dcffd29e5ef6abec"
}

0 comments on commit 30d3914

Please sign in to comment.