JavaScript bindings for Kadena Ledger App, based on LedgerJS.
Here is a sample app for Node:
const Transport = require("@ledgerhq/hw-transport").default;
const Kadena = require("hw-app-kda").default;
const getPublicKey = async () => {
const kadena = new Kadena(await Transport.create());
return await kadena.getPublicKey("44'/626'/0'/0/0");
};
const signTransaction = async () => {
const transport = await Transport.create();
const kadena = new Kadena(await Transport.create());
return await kadena.signTransaction(
"44'/626'/0'/0/0",
"<transaction contents>"
);
};
const getVersion = async () => {
const transport = await Transport.create();
const kadena = new Kadena(await Transport.create());
return await kadena.getVersion();
};
const doAll = async () => {
console.log(await getPublicKey());
console.log(await signTransaction());
console.log(await getVersion());
};
doAll().catch(err => console.log(err));
transport
Transport<any>
scrambleKey
string (optional, default"Kadena"
)
import Kadena from "hw-app-kda";
const kadena = new Kadena(transport);
Get Kadena address for a given BIP-32 path.
path
string a path in BIP-32 format
const publicKey = await kadena.getPublicKey("44'/626'/0'/0/0");
Returns Promise<string> an object with a public key.
These APIs signs a transfer transaction constructed from the input parameters and returns the Pact Command and the public key.
-
signTransferTx
is for a same chain transfer, when the recipient account already exists. -
signTransferCreateTx
should be used if the recipient account does not exist on the chain.
This would create a "k:<recipient_pubkey>" account on the chain using the coin.transfer-create
and the keyset
{"pred":"keys-all","keys":[<recipient_pubkey>]}
signTransferCrossChainTx
should be used for cross-chain transfers.
The recipient's keyset
on the target chain will be {"pred":"keys-all","keys":[<recipient_pubkey>]}
An object> containing the following fields
-
recipient
string Public key or 'k:' account of the recipient.The recipient account will be the "k:<recipient_pubkey>". It is not possible to specify non-k recipient accounts. For sending to non-k accounts please use
signTransaction
-
recipient_chainId
number (required only forsignTransferCrossChainTx
). Should be a number between 0 and 19, and different fromchainId
. -
amount
string Transfer amount. -
chainId
number Sender's chainId. Should be a number between 0 and 19. -
network
string -
path
string (Optional, default value ="44'/626'/0'/0/0"
)Signing key's derivation path in BIP-32 format. Must be of the format
"44'/626'/<account>'/<change>/<address_index>"
-
namespace
string (Optional, default value = "")Token namespace, example:
free
If thenamespace
is specified then themodule
must also be specified. -
module
string (Optional, default value = "")Token module, example:
anedak
If themodule
is specified then thenamespace
must also be specified. -
gasPrice
string (Optional, default value = "1.0e-6") -
gasLimit
string (Optional, default value = "2300") -
creationTime
string (Optional, default value = current time) -
ttl
string (Optional, default value = "600") -
nonce
string (Optional, default value = "")
const { pact_command, pubkey } = await kadena.signTransferTx({
recipient: "k:b818be69f485c5bbd07ef916d31f6610fb74aba6ec87f7883b77fe0c3bbd20ad",
amount: "23.456",
chainId: 1,
network: "mainnet01",
});
const { pact_command, pubkey } = await kadena.signTransferCreateTx({
recipient: "k:b818be69f485c5bbd07ef916d31f6610fb74aba6ec87f7883b77fe0c3bbd20ad",
amount: "23.456",
chainId: 1,
network: "mainnet01",
});
const { pact_command, pubkey } = await kadena.signTransferCrossChainTx({
recipient: "k:b818be69f485c5bbd07ef916d31f6610fb74aba6ec87f7883b77fe0c3bbd20ad",
recipient_chainId: 2,
amount: "23.456",
chainId: 1,
network: "mainnet01",
});
Returns Promise<object> an object containing following fields
-
pact_command
object> Object containingcmd
,hash
andsigs
Ref: https://api.chainweb.com/openapi/pact.html#tag/model-command -
pubkey
string hex encoded Pubkey which was used for signing thecmd
Sign a transaction with a given BIP-32 path.
path
string a path in BIP-32 format
const publicKey = await kadena.signTransaction(
"44'/626'/0'/0/0",
"<transaction contents>"
);
Returns Promise<object> an object with text field containing a signature.
Get the version of the application installed on the hardware device.
console.log(await kadena.getVersion());
for version 0.1.0, it produces something like
{
major: 0
minor: 1
patch: 0
}
Returns Promise<{object}> an object with major, minor, and patch of the version.
Sign any arbitrary hash with a given BIP-32 path. This requires Kadena Ledger app v0.2.1 above, and hash signing must be enabled from the settings menu.
path
string a path in BIP-32 format
const publicKey = await kadena.signHash(
"44'/626'/0'/0/0",
"<hash, encoded as a hex string of length 64>"
);
Returns Promise<object> an object with text field containing a signature.