hw-app-vap

Ledger Hardware Wallet Vapory Application API

Usage no npm install needed!

<script type="module">
  import hwAppVap from 'https://cdn.skypack.dev/hw-app-vap';
</script>

README

Github, Ledger Devs Slack

@ledgerhq/hw-app-vap

Ledger Hardware Wallet VAP JavaScript bindings.

API

Table of Contents

byContractAddress

Retrieve the token information by a given contract address if any

Parameters

Returns TokenInfo?

list

list all the ERC20 tokens informations

Returns Array<TokenInfo>

Vap

Vapory API

Parameters

  • transport Transport<any>
  • scrambleKey string (optional, default "w0w")

Examples

import Vap from "@ledgerhq/hw-app-vap";
const vap = new Vap(transport)

getAddress

get Vapory address for a given BIP 32 path.

Parameters
Examples
vap.getAddress("44'/60'/0'/0/0").then(o => o.address)

Returns Promise<{publicKey: string, address: string, chainCode: string?}> an object with a publicKey, address and (optionally) chainCode

provideERC20TokenInformation

This commands provides a trusted description of an ERC 20 token to associate a contract address with a ticker and number of decimals.

It shall be run immediately before performing a transaction involving a contract calling this contract address to display the proper token information to the user if necessary.

Parameters
  • info any : a blob from "erc20.js" utilities that contains all token information.
    • info.data
Examples
import { byContractAddress } from "@ledgerhq/hw-app-vap/erc20"
const zrxInfo = byContractAddress("0xe41d2489571d322189246dafa5ebde1f4699f498")
if (zrxInfo) await appVap.provideERC20TokenInformation(zrxInfo)
const signed = await appVap.signTransaction(path, rawTxHex)

Returns Promise<boolean>

signTransaction

You can sign a transaction and retrieve v, r, s given the raw transaction and the BIP 32 path of the account to sign

Parameters
Examples
vap.signTransaction("44'/60'/0'/0/0", "e8018504e3b292008252089428ee52a8f3d6e5d15f8b131996950d7f296c7952872bd72a2487400080").then(result => ...)

Returns Promise<{s: string, v: string, r: string}>

getAppConfiguration

Returns Promise<{arbitraryDataEnabled: number, erc20ProvisioningNecessary: number, starkEnabled: number, version: string}>

signPersonalMessage

You can sign a message according to vap_sign RPC call and retrieve v, r, s given the message and the BIP 32 path of the account to sign.

Parameters
Examples
vap.signPersonalMessage("44'/60'/0'/0/0", Buffer.from("test").toString("hex")).then(result => {
var v = result['v'] - 27;
v = v.toString(16);
if (v.length < 2) {
v = "0" + v;
}
console.log("Signature 0x" + result['r'] + result['s'] + v);
})

Returns Promise<{v: number, s: string, r: string}>

signEIP712HashedMessage

Sign a prepared message following web3.vap.signTypedData specification. The host computes the domain separator and hashStruct(message)

Parameters
Examples
vap.signEIP712HashedMessage("44'/60'/0'/0/0", Buffer.from("0101010101010101010101010101010101010101010101010101010101010101").toString("hex"), Buffer.from("0202020202020202020202020202020202020202020202020202020202020202").toString("hex")).then(result => {
var v = result['v'] - 27;
v = v.toString(16);
if (v.length < 2) {
v = "0" + v;
}
console.log("Signature 0x" + result['r'] + result['s'] + v);
})

Returns Promise<{v: number, s: string, r: string}>

starkGetPublicKey

get Stark public key for a given BIP 32 path.

Parameters

Returns Promise<Buffer> the Stark public key

starkSignOrder

sign a Stark order

Parameters
  • path string a path in BIP 32 format
  • sourceTokenAddress string?
  • sourceQuantization BigNumber quantization used for the source token
  • destinationTokenAddress string?
  • destinationQuantization BigNumber quantization used for the destination token
  • sourceVault number ID of the source vault
  • destinationVault number ID of the destination vault
  • amountSell BigNumber amount to sell
  • amountBuy BigNumber amount to buy
  • nonce number transaction nonce
  • timestamp number transaction validity timestamp

Returns Promise<Buffer> the signature

starkSignTransfer

sign a Stark transfer

Parameters
  • path string a path in BIP 32 format
  • transferTokenAddress string?
  • transferQuantization BigNumber quantization used for the token to be transferred
  • targetPublicKey string target Stark public key
  • sourceVault number ID of the source vault
  • destinationVault number ID of the destination vault
  • amountTransfer BigNumber amount to transfer
  • nonce number transaction nonce
  • timestamp number transaction validity timestamp

Returns Promise<Buffer> the signature

starkProvideQuantum

provide quantization information before singing a deposit or withdrawal Stark powered contract call

It shall be run following a provideERC20TokenInformation call for the given contract

Parameters
  • operationContract string? contract address of the token to be transferred (not present for VAP)
  • operationQuantization BigNumber quantization used for the token to be transferred

Returns Promise<boolean>