diff --git a/packages/launchpad-ledger/demo/index.html b/packages/launchpad-ledger/demo/index.html
index 1575c6bd..7a04b1cd 100644
--- a/packages/launchpad-ledger/demo/index.html
+++ b/packages/launchpad-ledger/demo/index.html
@@ -24,9 +24,13 @@
+
+
+
+
-
+
diff --git a/packages/launchpad-ledger/src/demo/web.ts b/packages/launchpad-ledger/src/demo/web.ts
index 8269c3a3..b5790a08 100644
--- a/packages/launchpad-ledger/src/demo/web.ts
+++ b/packages/launchpad-ledger/src/demo/web.ts
@@ -1,13 +1,16 @@
-import { toHex, toUtf8 } from "@cosmjs/encoding";
+import { toBase64, toUtf8 } from "@cosmjs/encoding";
+import { AccountData, makeCosmoshubPath } from "@cosmjs/launchpad";
import { LedgerSigner } from "../ledgersigner";
declare const window: any;
declare const document: any;
-function createMessage(address: string): string {
+let accounts: readonly AccountData[] = [];
+
+function createMessage(accountNumber: number, address: string): string {
return `{
- "account_number": 0,
+ "account_number": ${accountNumber},
"chain_id": "testing",
"fee": {
"amount": [{ "amount": 100, "denom": "ucosm" }],
@@ -29,21 +32,44 @@ function createMessage(address: string): string {
}`;
}
-const signer = new LedgerSigner({ testModeAllowed: true });
+const signer = new LedgerSigner({
+ testModeAllowed: true,
+ hdPaths: [makeCosmoshubPath(0), makeCosmoshubPath(1), makeCosmoshubPath(2)],
+});
+
+window.updateMessage = (accountNumber: number) => {
+ const account = accounts[accountNumber];
+ if (account === undefined) {
+ return;
+ }
+
+ const address = accounts[accountNumber].address;
+ const addressInput = document.getElementById("address");
+ addressInput.value = address;
+ const messageTextArea = document.getElementById("message");
+ messageTextArea.textContent = createMessage(accountNumber, address);
+};
window.getAccounts = async function getAccounts(): Promise {
+ const accountNumberInput = document.getElementById("account-number");
const addressInput = document.getElementById("address");
const accountsDiv = document.getElementById("accounts");
const messageTextArea = document.getElementById("message");
accountsDiv.textContent = "Loading...";
try {
- const accounts = await signer.getAccounts();
- const prettyAccounts = accounts.map((account) => ({ ...account, pubkey: toHex(account.pubkey) }));
- accountsDiv.textContent = JSON.stringify(prettyAccounts, null, "\t");
+ accounts = await signer.getAccounts();
+ const prettyAccounts = accounts.map((account: AccountData) => ({
+ ...account,
+ pubkey: toBase64(account.pubkey),
+ }));
+ accountsDiv.textContent = JSON.stringify(prettyAccounts, null, "\n");
+ const accountNumber = 0;
+ accountNumberInput.max = accounts.length - 1;
+ accountNumberInput.value = accountNumber;
const address = accounts[0].address;
addressInput.value = address;
- messageTextArea.textContent = createMessage(address);
+ messageTextArea.textContent = createMessage(accountNumber, address);
} catch (error) {
accountsDiv.textContent = error;
}
@@ -54,10 +80,11 @@ window.sign = async function sign(): Promise {
signatureDiv.textContent = "Loading...";
try {
+ const accountNumber = document.getElementById("account-number").value;
const address = document.getElementById("address").value;
const rawMessage = document.getElementById("message").textContent;
const message = JSON.stringify(JSON.parse(rawMessage));
- const signature = await signer.sign(address, toUtf8(message));
+ const signature = await signer.sign(address, toUtf8(message), undefined, parseInt(accountNumber, 10));
signatureDiv.textContent = JSON.stringify(signature, null, "\t");
} catch (error) {
signatureDiv.textContent = error;