From 857b393eb49479ee3cc2f7a438fc79c2ef04c3bd Mon Sep 17 00:00:00 2001 From: willclarktech Date: Tue, 11 May 2021 12:28:59 +0200 Subject: [PATCH] proto-signing: Add makeCosmoshubPath helper --- packages/proto-signing/src/index.ts | 1 + packages/proto-signing/src/paths.spec.ts | 26 ++++++++++++++++++++++++ packages/proto-signing/src/paths.ts | 15 ++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 packages/proto-signing/src/paths.spec.ts create mode 100644 packages/proto-signing/src/paths.ts diff --git a/packages/proto-signing/src/index.ts b/packages/proto-signing/src/index.ts index e6490c7d..3136762c 100644 --- a/packages/proto-signing/src/index.ts +++ b/packages/proto-signing/src/index.ts @@ -16,6 +16,7 @@ export { } from "./registry"; export { DirectSecp256k1HdWallet, DirectSecp256k1HdWalletOptions } from "./directsecp256k1hdwallet"; export { DirectSecp256k1Wallet } from "./directsecp256k1wallet"; +export { makeCosmoshubPath } from "./paths"; export { decodePubkey, encodePubkey } from "./pubkey"; export { AccountData, diff --git a/packages/proto-signing/src/paths.spec.ts b/packages/proto-signing/src/paths.spec.ts new file mode 100644 index 00000000..17fd85b6 --- /dev/null +++ b/packages/proto-signing/src/paths.spec.ts @@ -0,0 +1,26 @@ +import { Slip10RawIndex } from "@cosmjs/crypto"; + +import { makeCosmoshubPath } from "./paths"; + +describe("paths", () => { + describe("makeCosmoshubPath", () => { + it("works", () => { + // m/44'/118'/0'/0/0 + expect(makeCosmoshubPath(0)).toEqual([ + Slip10RawIndex.hardened(44), + Slip10RawIndex.hardened(118), + Slip10RawIndex.hardened(0), + Slip10RawIndex.normal(0), + Slip10RawIndex.normal(0), + ]); + // m/44'/118'/0'/0/123 + expect(makeCosmoshubPath(123)).toEqual([ + Slip10RawIndex.hardened(44), + Slip10RawIndex.hardened(118), + Slip10RawIndex.hardened(0), + Slip10RawIndex.normal(0), + Slip10RawIndex.normal(123), + ]); + }); + }); +}); diff --git a/packages/proto-signing/src/paths.ts b/packages/proto-signing/src/paths.ts new file mode 100644 index 00000000..bf4dd185 --- /dev/null +++ b/packages/proto-signing/src/paths.ts @@ -0,0 +1,15 @@ +import { HdPath, Slip10RawIndex } from "@cosmjs/crypto"; + +/** + * The Cosmos Hub derivation path in the form `m/44'/118'/0'/0/a` + * with 0-based account index `a`. + */ +export function makeCosmoshubPath(a: number): HdPath { + return [ + Slip10RawIndex.hardened(44), + Slip10RawIndex.hardened(118), + Slip10RawIndex.hardened(0), + Slip10RawIndex.normal(0), + Slip10RawIndex.normal(a), + ]; +}