Ledger Hardware Wallet ETH JavaScript bindings.
- Eth
- Parameters
- Examples
- getAddress
- signTransaction
- getAppConfiguration
- signPersonalMessage
- signEIP712HashedMessage
- starkGetPublicKey
- starkSignOrder
- starkSignOrder_v2
- starkSignTransfer
- starkSignTransfer_v2
- starkProvideQuantum
- starkProvideQuantum_v2
- starkUnsafeSign
- eth2GetPublicKey
- eth2SetWithdrawalIndex
- getEIP1024PublicEncryptionKey
- getEIP1024SharedSecret
- loadInfosForContractMethod
- byContractAddressAndChainId
- list
- ResolutionConfig
Ethereum API
transportTransportscrambleKey(optional, default"w0w")loadConfigLoadConfig (optional, default{})
import Eth from "@ledgerhq/hw-app-eth";
const eth = new Eth(transport)get Ethereum address for a given BIP 32 path.
eth.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
You can sign a transaction and retrieve v, r, s given the raw transaction and the BIP 32 path of the account to sign.
pathstring : the BIP32 path to sign the transaction onrawTxHexstring : the raw ethereum transaction in hexadecimal to signresolution(LedgerEthTransactionResolution | null)? : resolution is an object with all "resolved" metadata necessary to allow the device to clear sign information. This includes: ERC20 token information, plugins, contracts, NFT signatures,... You must explicitly provide something to avoid having a warning. By default, you can use Ledger's service or your own resolution service. See services/types.js for the contract. Setting the value to "null" will fallback everything to blind signing but will still allow the device to sign the transaction.
import ledgerService from "@ledgerhq/hw-app-eth/lib/services/ledger"
const tx = "e8018504e3b292008252089428ee52a8f3d6e5d15f8b131996950d7f296c7952872bd72a2487400080"; // raw tx to sign
const resolution = await ledgerService.resolveTransaction(tx);
const result = eth.signTransaction("44'/60'/0'/0/0", tx, resolution);
console.log(result);Returns Promise<{s: string, v: string, r: string}>
Returns Promise<{arbitraryDataEnabled: number, erc20ProvisioningNecessary: number, starkEnabled: number, starkv2Supported: number, version: string}>
You can sign a message according to eth_sign RPC call and retrieve v, r, s given the message and the BIP 32 path of the account to sign.
eth.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}>
Sign a prepared message following web3.eth.signTypedData specification. The host computes the domain separator and hashStruct(message)
eth.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}>
get Stark public key for a given BIP 32 path.
Returns Promise<Buffer> the Stark public key
sign a Stark order
pathstring a path in BIP 32 formatsourceTokenAddress(string | undefined)sourceQuantizationBigNumber quantization used for the source tokendestinationTokenAddress(string | undefined)destinationQuantizationBigNumber quantization used for the destination tokensourceVaultnumber ID of the source vaultdestinationVaultnumber ID of the destination vaultamountSellBigNumber amount to sellamountBuyBigNumber amount to buynoncenumber transaction noncetimestampnumber transaction validity timestamp
Returns Promise<(Buffer | {r: string, s: string})> the signature
sign a Stark order using the Starkex V2 protocol
pathstring a path in BIP 32 formatsourceTokenAddress(string | undefined)sourceQuantizationTypeStarkQuantizationType quantization type used for the source tokensourceQuantization(BigNumber | undefined)sourceMintableBlobOrTokenId(BigNumber | undefined)destinationTokenAddress(string | undefined)destinationQuantizationTypeStarkQuantizationType quantization type used for the destination tokendestinationQuantization(BigNumber | undefined)destinationMintableBlobOrTokenId(BigNumber | undefined)sourceVaultnumber ID of the source vaultdestinationVaultnumber ID of the destination vaultamountSellBigNumber amount to sellamountBuyBigNumber amount to buynoncenumber transaction noncetimestampnumber transaction validity timestamp
Returns Promise<(Buffer | {r: string, s: string})> the signature
sign a Stark transfer
pathstring a path in BIP 32 formattransferTokenAddress(string | undefined)transferQuantizationBigNumber quantization used for the token to be transferredtargetPublicKeystring target Stark public keysourceVaultnumber ID of the source vaultdestinationVaultnumber ID of the destination vaultamountTransferBigNumber amount to transfernoncenumber transaction noncetimestampnumber transaction validity timestamp
Returns Promise<(Buffer | {r: string, s: string})> the signature
sign a Stark transfer or conditional transfer using the Starkex V2 protocol
pathstring a path in BIP 32 formattransferTokenAddress(string | undefined)transferQuantizationTypeStarkQuantizationType quantization type used for the token to be transferredtransferQuantization(BigNumber | undefined)transferMintableBlobOrTokenId(BigNumber | undefined)targetPublicKeystring target Stark public keysourceVaultnumber ID of the source vaultdestinationVaultnumber ID of the destination vaultamountTransferBigNumber amount to transfernoncenumber transaction noncetimestampnumber transaction validity timestampconditionalTransferAddressstring?conditionalTransferFactBigNumber?
Returns Promise<(Buffer | {r: string, s: string})> the signature
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
operationContract(string | undefined) contract address of the token to be transferred (not present for ETH)operationQuantizationBigNumber quantization used for the token to be transferred
provide quantization information before singing a deposit or withdrawal Stark powered contract call using the Starkex V2 protocol
It shall be run following a provideERC20TokenInformation call for the given contract
operationContract(string | undefined) contract address of the token to be transferred (not present for ETH)operationQuantizationTypeStarkQuantizationType quantization type of the token to be transferredoperationQuantizationBigNumber?operationMintableBlobOrTokenIdBigNumber?
sign the given hash over the Stark curve It is intended for speed of execution in case an unknown Stark model is pushed and should be avoided as much as possible.
Returns Promise<(Buffer | {r: string, s: string})> the signature
get an Ethereum 2 BLS-12 381 public key for a given BIP 32 path.
eth.eth2GetPublicKey("12381/3600/0/0").then(o => o.publicKey)Returns Promise<{publicKey: string}> an object with a publicKey
Set the index of a Withdrawal key used as withdrawal credentials in an ETH 2 deposit contract call signature
It shall be run before the ETH 2 deposit transaction is signed. If not called, the index is set to 0
withdrawalIndexnumber index path in the EIP 2334 path m/12381/3600/withdrawalIndex/0
Returns Promise<boolean> True if the method was executed successfully
get a public encryption key on Curve25519 according to EIP 1024
eth.getEIP1024PublicEncryptionKey("44'/60'/0'/0/0").then(o => o.publicKey)Returns Promise<{publicKey: string}> an object with a publicKey
get a shared secret on Curve25519 according to EIP 1024
pathstring a path in BIP 32 formatremotePublicKeyHexstring remote Curve25519 public keyboolDisplayboolean?
eth.getEIP1024SharedSecret("44'/60'/0'/0/0", "87020e80af6e07a6e4697f091eacadb9e7e6629cb7e5a8a371689a3ed53b3d64").then(o => o.sharedSecret)Returns Promise<{sharedSecret: string}> an object with a shared secret
Retrieve the metadatas a given contract address and a method selector
Returns Promise<(ContractMethod | undefined)>
Retrieve the token information by a given contract address if any
Returns (TokenInfo | null | undefined)
list all the ERC20 tokens informations
Returns Array<TokenInfo>
Allows to configure precisely what the service need to resolve. for instance you can set nft:true if you need clear signing on NFTs. If you set it and it is not a NFT transaction, it should still work but will do a useless service resolution.
Type: {nft: boolean?, externalPlugins: boolean?, erc20: boolean?}
