From 0d4baf1fe31ba09f24c5bfda7e816ff3caa81ef9 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Tue, 15 Sep 2020 18:51:11 +0200 Subject: [PATCH] launchpad-ledger: Add Node.js demo --- packages/launchpad-ledger/demo/node.js | 14 ++++++ packages/launchpad-ledger/src/demo/node.ts | 47 +++++++++++++++++++ .../src/demo/{index.ts => web.ts} | 0 .../launchpad-ledger/webpack.demo.config.js | 2 +- 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 packages/launchpad-ledger/demo/node.js create mode 100644 packages/launchpad-ledger/src/demo/node.ts rename packages/launchpad-ledger/src/demo/{index.ts => web.ts} (100%) diff --git a/packages/launchpad-ledger/demo/node.js b/packages/launchpad-ledger/demo/node.js new file mode 100644 index 00000000..345c531f --- /dev/null +++ b/packages/launchpad-ledger/demo/node.js @@ -0,0 +1,14 @@ +const demo = require("../build/demo/node"); + +async function run() { + const accounts = await demo.getAccounts(); + console.info("Accounts from Ledger device:"); + console.table(accounts); + + const address = accounts[0].address; + const signature = await demo.sign(address, address); + console.info("Signature from Ledger device:"); + console.info(signature); +} + +run().catch(console.error); diff --git a/packages/launchpad-ledger/src/demo/node.ts b/packages/launchpad-ledger/src/demo/node.ts new file mode 100644 index 00000000..3de64c36 --- /dev/null +++ b/packages/launchpad-ledger/src/demo/node.ts @@ -0,0 +1,47 @@ +import { toHex, toUtf8 } from "@cosmjs/encoding"; +import { StdSignature } from "@cosmjs/launchpad"; + +import { LedgerSigner } from "../ledgersigner"; + +function createMessage(fromAddress: string, toAddress: string): string { + return `{ + "account_number": 0, + "chain_id": "testing", + "fee": { + "amount": [{ "amount": 100, "denom": "ucosm" }], + "gas": 250 + }, + "memo": "Some memo", + "msgs": [{ + "type": "cosmos-sdk/MsgSend", + "value": { + "amount": [{ + "amount": "1234567", + "denom": "ucosm" + }], + "from_address": "${fromAddress}", + "to_address": "${toAddress}" + } + }], + "sequence": 0 + }`; +} + +const signer = new LedgerSigner({ testModeAllowed: true }); + +export async function getAccounts(): Promise< + ReadonlyArray<{ + readonly algo: string; + readonly address: string; + readonly pubkey: string; + }> +> { + const accounts = await signer.getAccounts(); + return accounts.map((account) => ({ ...account, pubkey: toHex(account.pubkey) })); +} + +export async function sign(fromAddress: string, toAddress: string): Promise { + const rawMessage = createMessage(fromAddress, toAddress); + const message = JSON.stringify(JSON.parse(rawMessage)); + return signer.sign(fromAddress, toUtf8(message)); +} diff --git a/packages/launchpad-ledger/src/demo/index.ts b/packages/launchpad-ledger/src/demo/web.ts similarity index 100% rename from packages/launchpad-ledger/src/demo/index.ts rename to packages/launchpad-ledger/src/demo/web.ts diff --git a/packages/launchpad-ledger/webpack.demo.config.js b/packages/launchpad-ledger/webpack.demo.config.js index e16bea23..534338d5 100644 --- a/packages/launchpad-ledger/webpack.demo.config.js +++ b/packages/launchpad-ledger/webpack.demo.config.js @@ -8,7 +8,7 @@ module.exports = [ { // bundle used for Ledger demo target: target, - entry: glob.sync("./build/demo/index.js"), + entry: glob.sync("./build/demo/web.js"), output: { path: demodir, filename: "ledger.js",