From 749eacd64a16b88b5116316d0e1607cd15181c26 Mon Sep 17 00:00:00 2001 From: LiYanLance Date: Thu, 23 May 2024 11:45:29 +0800 Subject: [PATCH 1/2] test: add test for eth ur utils --- .../ur-registry-eth/__tests__/utils.test.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 packages/ur-registry-eth/__tests__/utils.test.ts diff --git a/packages/ur-registry-eth/__tests__/utils.test.ts b/packages/ur-registry-eth/__tests__/utils.test.ts new file mode 100644 index 0000000..98ba8f4 --- /dev/null +++ b/packages/ur-registry-eth/__tests__/utils.test.ts @@ -0,0 +1,26 @@ +// @ts-nocheck + +import { generateAddressFromXpub, findHDPathFromAddress } from "../src/utlis"; + +describe("utils", () => { + + // abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about + // m/44'/60'/0' + const xpub = "xpub6DCoCpSuQZB2jawqnGMEPS63ePKWkwWPH4TU45Q7LPXWuNd8TMtVxRrgjtEshuqpK3mdhaWHPFsBngh5GFZaM6si3yZdUsT8ddYM3PwnATt"; + const firstAddress = "0x9858EfFD232B4033E47d90003D41EC34EcaEda94"; + const secondAddress = "0x6Fac4D18c912343BF86fa7049364Dd4E424Ab9C0"; + + describe("generateAddressFromXpub", () => { + it("should derive address from xpub", () => { + expect(generateAddressFromXpub(xpub, "m/0/0")).toBe(firstAddress); + expect(generateAddressFromXpub(xpub, "m/0/1")).toBe(secondAddress); + }) + }) + + describe("findHDPathFromAddress", () => { + it("should find HD path from given address", () => { + expect(findHDPathFromAddress(firstAddress, xpub, 10, "m/44'/60'/0'")).toBe("m/44'/60'/0'/0/0") + expect(findHDPathFromAddress(secondAddress, xpub, 10, "m/44'/60'/0'")).toBe("m/44'/60'/0'/0/1") + }) + }) +}); From 6bc2ce65c7b3935c13fa0ccd510d68e3c86d2517 Mon Sep 17 00:00:00 2001 From: LiYanLance Date: Thu, 23 May 2024 14:57:32 +0800 Subject: [PATCH 2/2] chore: bump @ethereumjs/util version to 9.0.3 --- packages/ur-registry-eth/package.json | 4 ++-- packages/ur-registry-eth/src/utlis.ts | 2 +- pnpm-lock.yaml | 18 ++++++++++++++++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/ur-registry-eth/package.json b/packages/ur-registry-eth/package.json index 3a8f29e..3dcf098 100644 --- a/packages/ur-registry-eth/package.json +++ b/packages/ur-registry-eth/package.json @@ -1,6 +1,6 @@ { "name": "@keystonehq/bc-ur-registry-eth", - "version": "0.19.1", + "version": "0.20.0", "description": "bc-ur-registry extension for ETH", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -25,7 +25,7 @@ "author": "soralit ", "license": "ISC", "dependencies": { - "@ethereumjs/util": "^8.0.0", + "@ethereumjs/util": "^9.0.3", "@keystonehq/bc-ur-registry": "^0.6.0", "hdkey": "^2.0.1", "uuid": "^8.3.2" diff --git a/packages/ur-registry-eth/src/utlis.ts b/packages/ur-registry-eth/src/utlis.ts index b81d131..feac8c0 100644 --- a/packages/ur-registry-eth/src/utlis.ts +++ b/packages/ur-registry-eth/src/utlis.ts @@ -7,7 +7,7 @@ export const generateAddressFromXpub = (xpub: string, derivePath: string) => { const node = HDKey.fromExtendedKey(xpub); const publicKey = node.derive(derivePath); const address = - "0x" + publicToAddress(publicKey.publicKey, true).toString("hex"); + "0x" + Buffer.from(publicToAddress(publicKey.publicKey, true)).toString("hex"); return toChecksumAddress(address); }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9cb66f6..bf7b9f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -714,8 +714,8 @@ importers: packages/ur-registry-eth: dependencies: '@ethereumjs/util': - specifier: ^8.0.0 - version: 8.1.0 + specifier: ^9.0.3 + version: 9.0.3 '@keystonehq/bc-ur-registry': specifier: ^0.6.0 version: 0.6.4 @@ -2502,6 +2502,12 @@ packages: hasBin: true dev: false + /@ethereumjs/rlp@5.0.2: + resolution: {integrity: sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==} + engines: {node: '>=18'} + hasBin: true + dev: false + /@ethereumjs/tx@3.5.2: resolution: {integrity: sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==} dependencies: @@ -2528,6 +2534,14 @@ packages: micro-ftch: 0.3.1 dev: false + /@ethereumjs/util@9.0.3: + resolution: {integrity: sha512-PmwzWDflky+7jlZIFqiGsBPap12tk9zK5SVH9YW2OEnDN7OEhCjUOMzbOqwuClrbkSIkM2ERivd7sXZ48Rh/vg==} + engines: {node: '>=18'} + dependencies: + '@ethereumjs/rlp': 5.0.2 + ethereum-cryptography: 2.1.3 + dev: false + /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'}