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") + }) + }) +}); 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 489440a..5392f59 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -710,8 +710,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 @@ -2498,6 +2498,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: @@ -2524,6 +2530,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'}