@xyo-network/wallet 4.1.6 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/HDWallet.d.ts.map +1 -1
- package/dist/browser/index.mjs +3 -2
- package/dist/browser/index.mjs.map +1 -1
- package/dist/neutral/HDWallet.d.ts.map +1 -1
- package/dist/neutral/index.mjs +3 -2
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/node/HDWallet.d.ts.map +1 -1
- package/dist/node/index.mjs +3 -2
- package/dist/node/index.mjs.map +1 -1
- package/package.json +13 -13
- package/src/HDWallet.ts +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HDWallet.d.ts","sourceRoot":"","sources":["../../src/HDWallet.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,OAAO,
|
|
1
|
+
{"version":3,"file":"HDWallet.d.ts","sourceRoot":"","sources":["../../src/HDWallet.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,OAAO,EAAa,GAAG,EACxB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,OAAO,EAAc,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EACL,aAAa,EAId,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,cAAc,EAAgB,MAAM,2BAA2B,CAAA;AACxE,OAAO,EACQ,YAAY,EAAE,QAAQ,EACpC,MAAM,QAAQ,CAAA;AAEf,qBACa,QAAS,SAAQ,OAAQ,YAAW,cAAc;IAM3D,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY;IALvC,gBAAyB,UAAU,SAA8C;IACjF,iBAA0B,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAK;gBAGlF,GAAG,EAAE,OAAO,EACO,IAAI,EAAE,YAAY,EACrC,UAAU,EAAE,kBAAkB;IAKhC,IAAa,OAAO,IAAI,OAAO,CAE9B;IAED,IAAa,YAAY,IAAI,eAAe,CAE3C;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAE9B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAExB;IAED,IAAI,UAAU,IAAI,GAAG,CAEpB;IAED,IAAI,SAAS,IAAI,GAAG,CAEnB;WAEqB,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;WAa9D,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;WAIlF,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;WAMrD,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;WAMrF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;WAI/E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAM9E,MAAM,CAAC,gBAAgB,CAAC,QAAQ,GAAE,MAAM,EAAoB,EAAE,QAAQ,GAAE,MAAY,GAAG,MAAM;WAIvE,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;qBAIhC,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAOjH,SAAS,CAAC,MAAM,CAAC,+BAA+B,CAAC,aAAa,EAAE,cAAc,GAAG,cAAc;IAUzF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAavD,MAAM,EAAE,MAAM,QAAQ,CAGrB;CACF"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -18,6 +18,7 @@ import { toUint8Array } from "@xylabs/arraybuffer";
|
|
|
18
18
|
import { assertEx } from "@xylabs/assert";
|
|
19
19
|
import { globallyUnique } from "@xylabs/base";
|
|
20
20
|
import {
|
|
21
|
+
asAddress,
|
|
21
22
|
hexFromHexString
|
|
22
23
|
} from "@xylabs/hex";
|
|
23
24
|
import { staticImplements } from "@xylabs/static-implements";
|
|
@@ -38,7 +39,7 @@ var HDWallet = class extends Account {
|
|
|
38
39
|
this.node = node;
|
|
39
40
|
}
|
|
40
41
|
get address() {
|
|
41
|
-
return hexFromHexString(this.node.address, { prefix: false });
|
|
42
|
+
return asAddress(hexFromHexString(this.node.address, { prefix: false }), true);
|
|
42
43
|
}
|
|
43
44
|
get addressBytes() {
|
|
44
45
|
return toUint8Array(this.address, void 0, 16).buffer;
|
|
@@ -113,7 +114,7 @@ var HDWallet = class extends Account {
|
|
|
113
114
|
}
|
|
114
115
|
static async createFromNodeInternal(node, previousHash) {
|
|
115
116
|
const privateKey = toUint8Array(node.privateKey.replace("0x", ""));
|
|
116
|
-
assertEx(
|
|
117
|
+
assertEx(privateKey.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`);
|
|
117
118
|
const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash);
|
|
118
119
|
return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet;
|
|
119
120
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/HDWallet.ts"],"sourcesContent":["import { generateMnemonic } from '@scure/bip39'\nimport { wordlist as englishWordlist } from '@scure/bip39/wordlists/english'\nimport { toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { globallyUnique } from '@xylabs/base'\nimport {\n Address, Hex, hexFromHexString,\n} from '@xylabs/hex'\nimport { staticImplements } from '@xylabs/static-implements'\nimport { Account, PrivateKey } from '@xyo-network/account'\nimport {\n AccountConfig,\n isMnemonicInitializationConfig,\n isPhraseInitializationConfig,\n isPrivateKeyInitializationConfig,\n} from '@xyo-network/account-model'\nimport type { PrivateKeyInstance } from '@xyo-network/key-model'\nimport { WalletInstance, WalletStatic } from '@xyo-network/wallet-model'\nimport {\n defaultPath, HDNodeWallet, Mnemonic,\n} from 'ethers'\n\n@staticImplements<WalletStatic>()\nexport class HDWallet extends Account implements WalletInstance {\n static override readonly uniqueName = globallyUnique('HDWallet', HDWallet, 'xyo')\n protected static override _addressMap: Record<Address, WeakRef<WalletInstance>> = {}\n\n constructor(\n key: unknown,\n protected readonly node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(Account._protectedConstructorKey, privateKey)\n }\n\n override get address(): Address {\n return hexFromHexString(this.node.address, { prefix: false })\n }\n\n override get addressBytes(): ArrayBufferLike {\n return toUint8Array(this.address, undefined, 16).buffer\n }\n\n get chainCode(): string {\n return this.node.chainCode\n }\n\n get depth(): number {\n return this.node.depth\n }\n\n get extendedKey(): string {\n return this.node.extendedKey\n }\n\n get fingerprint(): string {\n return this.node.fingerprint\n }\n\n get index(): number {\n return this.node.index\n }\n\n get mnemonic(): Mnemonic | null {\n return this.node.mnemonic\n }\n\n get parentFingerprint(): string {\n return this.node.parentFingerprint\n }\n\n get path(): string | null {\n return this.node.path\n }\n\n get privateKey(): Hex {\n return this.node.privateKey.toLowerCase() as Hex\n }\n\n get publicKey(): Hex {\n return this.node.publicKey.toLowerCase() as Hex\n }\n\n static override async create(opts?: AccountConfig): Promise<WalletInstance> {\n if (isPhraseInitializationConfig(opts)) {\n return await this.fromPhrase(opts.phrase)\n }\n if (isMnemonicInitializationConfig(opts)) {\n return await this.fromPhrase(opts.mnemonic, opts.path)\n }\n if (isPrivateKeyInitializationConfig(opts)) {\n throw new Error('Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.')\n }\n throw new Error('Invalid initialization config')\n }\n\n static async createFromNode(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n return await this.createFromNodeInternal(node, previousHash)\n }\n\n static async fromExtendedKey(key: string): Promise<WalletInstance> {\n const node = HDNodeWallet.fromExtendedKey(key)\n /* TODO: Handle HDNodeVoidWallet */\n return await HDWallet.createFromNode(node as HDNodeWallet)\n }\n\n static async fromMnemonic(mnemonic: Mnemonic, path: string = defaultPath): Promise<WalletInstance> {\n const node = HDNodeWallet.fromMnemonic(mnemonic, path)\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static async fromPhrase(phrase: string, path: string = defaultPath): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path)\n }\n\n static async fromSeed(seed: string | ArrayBufferLike): Promise<WalletInstance> {\n const node = HDNodeWallet.fromSeed(toUint8Array(seed))\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static generateMnemonic(wordlist: string[] = englishWordlist, strength: number = 256): string {\n return generateMnemonic(wordlist, strength)\n }\n\n static override async random(): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(HDWallet.generateMnemonic()))\n }\n\n protected static async createFromNodeInternal(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n const privateKey = toUint8Array(node.privateKey.replace('0x', ''))\n assertEx(
|
|
1
|
+
{"version":3,"sources":["../../src/HDWallet.ts"],"sourcesContent":["import { generateMnemonic } from '@scure/bip39'\nimport { wordlist as englishWordlist } from '@scure/bip39/wordlists/english'\nimport { toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { globallyUnique } from '@xylabs/base'\nimport {\n Address, asAddress, Hex, hexFromHexString,\n} from '@xylabs/hex'\nimport { staticImplements } from '@xylabs/static-implements'\nimport { Account, PrivateKey } from '@xyo-network/account'\nimport {\n AccountConfig,\n isMnemonicInitializationConfig,\n isPhraseInitializationConfig,\n isPrivateKeyInitializationConfig,\n} from '@xyo-network/account-model'\nimport type { PrivateKeyInstance } from '@xyo-network/key-model'\nimport { WalletInstance, WalletStatic } from '@xyo-network/wallet-model'\nimport {\n defaultPath, HDNodeWallet, Mnemonic,\n} from 'ethers'\n\n@staticImplements<WalletStatic>()\nexport class HDWallet extends Account implements WalletInstance {\n static override readonly uniqueName = globallyUnique('HDWallet', HDWallet, 'xyo')\n protected static override _addressMap: Record<Address, WeakRef<WalletInstance>> = {}\n\n constructor(\n key: unknown,\n protected readonly node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(Account._protectedConstructorKey, privateKey)\n }\n\n override get address(): Address {\n return asAddress(hexFromHexString(this.node.address, { prefix: false }), true)\n }\n\n override get addressBytes(): ArrayBufferLike {\n return toUint8Array(this.address, undefined, 16).buffer\n }\n\n get chainCode(): string {\n return this.node.chainCode\n }\n\n get depth(): number {\n return this.node.depth\n }\n\n get extendedKey(): string {\n return this.node.extendedKey\n }\n\n get fingerprint(): string {\n return this.node.fingerprint\n }\n\n get index(): number {\n return this.node.index\n }\n\n get mnemonic(): Mnemonic | null {\n return this.node.mnemonic\n }\n\n get parentFingerprint(): string {\n return this.node.parentFingerprint\n }\n\n get path(): string | null {\n return this.node.path\n }\n\n get privateKey(): Hex {\n return this.node.privateKey.toLowerCase() as Hex\n }\n\n get publicKey(): Hex {\n return this.node.publicKey.toLowerCase() as Hex\n }\n\n static override async create(opts?: AccountConfig): Promise<WalletInstance> {\n if (isPhraseInitializationConfig(opts)) {\n return await this.fromPhrase(opts.phrase)\n }\n if (isMnemonicInitializationConfig(opts)) {\n return await this.fromPhrase(opts.mnemonic, opts.path)\n }\n if (isPrivateKeyInitializationConfig(opts)) {\n throw new Error('Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.')\n }\n throw new Error('Invalid initialization config')\n }\n\n static async createFromNode(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n return await this.createFromNodeInternal(node, previousHash)\n }\n\n static async fromExtendedKey(key: string): Promise<WalletInstance> {\n const node = HDNodeWallet.fromExtendedKey(key)\n /* TODO: Handle HDNodeVoidWallet */\n return await HDWallet.createFromNode(node as HDNodeWallet)\n }\n\n static async fromMnemonic(mnemonic: Mnemonic, path: string = defaultPath): Promise<WalletInstance> {\n const node = HDNodeWallet.fromMnemonic(mnemonic, path)\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static async fromPhrase(phrase: string, path: string = defaultPath): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path)\n }\n\n static async fromSeed(seed: string | ArrayBufferLike): Promise<WalletInstance> {\n const node = HDNodeWallet.fromSeed(toUint8Array(seed))\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static generateMnemonic(wordlist: string[] = englishWordlist, strength: number = 256): string {\n return generateMnemonic(wordlist, strength)\n }\n\n static override async random(): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(HDWallet.generateMnemonic()))\n }\n\n protected static async createFromNodeInternal(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n const privateKey = toUint8Array(node.privateKey.replace('0x', ''))\n assertEx(privateKey.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`)\n const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash)\n return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet\n }\n\n protected static getCachedWalletOrCacheNewWallet(createdWallet: WalletInstance): WalletInstance {\n const existingWallet = this._addressMap[createdWallet.address]?.deref()\n if (existingWallet) {\n return existingWallet\n }\n const ref = new WeakRef(createdWallet)\n this._addressMap[createdWallet.address] = ref\n return createdWallet\n }\n\n async derivePath(path: string): Promise<WalletInstance> {\n // if an absolute path, check if it matches the parent root and work with it\n if (path.startsWith('m/')) {\n const parentPath = this.path\n if (parentPath !== null && path.startsWith(parentPath)) {\n const childPath = path.slice(parentPath.length + 1)\n return await HDWallet.createFromNode(this.node.derivePath(childPath))\n }\n throw new Error(`Invalid absolute path ${path} for wallet with path ${parentPath}`)\n }\n return await HDWallet.createFromNode(this.node.derivePath(path))\n }\n\n neuter: () => HDWallet = () => {\n this.node.neuter()\n return this\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HDWallet.d.ts","sourceRoot":"","sources":["../../src/HDWallet.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,OAAO,
|
|
1
|
+
{"version":3,"file":"HDWallet.d.ts","sourceRoot":"","sources":["../../src/HDWallet.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,OAAO,EAAa,GAAG,EACxB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,OAAO,EAAc,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EACL,aAAa,EAId,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,cAAc,EAAgB,MAAM,2BAA2B,CAAA;AACxE,OAAO,EACQ,YAAY,EAAE,QAAQ,EACpC,MAAM,QAAQ,CAAA;AAEf,qBACa,QAAS,SAAQ,OAAQ,YAAW,cAAc;IAM3D,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY;IALvC,gBAAyB,UAAU,SAA8C;IACjF,iBAA0B,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAK;gBAGlF,GAAG,EAAE,OAAO,EACO,IAAI,EAAE,YAAY,EACrC,UAAU,EAAE,kBAAkB;IAKhC,IAAa,OAAO,IAAI,OAAO,CAE9B;IAED,IAAa,YAAY,IAAI,eAAe,CAE3C;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAE9B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAExB;IAED,IAAI,UAAU,IAAI,GAAG,CAEpB;IAED,IAAI,SAAS,IAAI,GAAG,CAEnB;WAEqB,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;WAa9D,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;WAIlF,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;WAMrD,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;WAMrF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;WAI/E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAM9E,MAAM,CAAC,gBAAgB,CAAC,QAAQ,GAAE,MAAM,EAAoB,EAAE,QAAQ,GAAE,MAAY,GAAG,MAAM;WAIvE,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;qBAIhC,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAOjH,SAAS,CAAC,MAAM,CAAC,+BAA+B,CAAC,aAAa,EAAE,cAAc,GAAG,cAAc;IAUzF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAavD,MAAM,EAAE,MAAM,QAAQ,CAGrB;CACF"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -18,6 +18,7 @@ import { toUint8Array } from "@xylabs/arraybuffer";
|
|
|
18
18
|
import { assertEx } from "@xylabs/assert";
|
|
19
19
|
import { globallyUnique } from "@xylabs/base";
|
|
20
20
|
import {
|
|
21
|
+
asAddress,
|
|
21
22
|
hexFromHexString
|
|
22
23
|
} from "@xylabs/hex";
|
|
23
24
|
import { staticImplements } from "@xylabs/static-implements";
|
|
@@ -38,7 +39,7 @@ var HDWallet = class extends Account {
|
|
|
38
39
|
this.node = node;
|
|
39
40
|
}
|
|
40
41
|
get address() {
|
|
41
|
-
return hexFromHexString(this.node.address, { prefix: false });
|
|
42
|
+
return asAddress(hexFromHexString(this.node.address, { prefix: false }), true);
|
|
42
43
|
}
|
|
43
44
|
get addressBytes() {
|
|
44
45
|
return toUint8Array(this.address, void 0, 16).buffer;
|
|
@@ -113,7 +114,7 @@ var HDWallet = class extends Account {
|
|
|
113
114
|
}
|
|
114
115
|
static async createFromNodeInternal(node, previousHash) {
|
|
115
116
|
const privateKey = toUint8Array(node.privateKey.replace("0x", ""));
|
|
116
|
-
assertEx(
|
|
117
|
+
assertEx(privateKey.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`);
|
|
117
118
|
const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash);
|
|
118
119
|
return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet;
|
|
119
120
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/HDWallet.ts"],"sourcesContent":["import { generateMnemonic } from '@scure/bip39'\nimport { wordlist as englishWordlist } from '@scure/bip39/wordlists/english'\nimport { toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { globallyUnique } from '@xylabs/base'\nimport {\n Address, Hex, hexFromHexString,\n} from '@xylabs/hex'\nimport { staticImplements } from '@xylabs/static-implements'\nimport { Account, PrivateKey } from '@xyo-network/account'\nimport {\n AccountConfig,\n isMnemonicInitializationConfig,\n isPhraseInitializationConfig,\n isPrivateKeyInitializationConfig,\n} from '@xyo-network/account-model'\nimport type { PrivateKeyInstance } from '@xyo-network/key-model'\nimport { WalletInstance, WalletStatic } from '@xyo-network/wallet-model'\nimport {\n defaultPath, HDNodeWallet, Mnemonic,\n} from 'ethers'\n\n@staticImplements<WalletStatic>()\nexport class HDWallet extends Account implements WalletInstance {\n static override readonly uniqueName = globallyUnique('HDWallet', HDWallet, 'xyo')\n protected static override _addressMap: Record<Address, WeakRef<WalletInstance>> = {}\n\n constructor(\n key: unknown,\n protected readonly node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(Account._protectedConstructorKey, privateKey)\n }\n\n override get address(): Address {\n return hexFromHexString(this.node.address, { prefix: false })\n }\n\n override get addressBytes(): ArrayBufferLike {\n return toUint8Array(this.address, undefined, 16).buffer\n }\n\n get chainCode(): string {\n return this.node.chainCode\n }\n\n get depth(): number {\n return this.node.depth\n }\n\n get extendedKey(): string {\n return this.node.extendedKey\n }\n\n get fingerprint(): string {\n return this.node.fingerprint\n }\n\n get index(): number {\n return this.node.index\n }\n\n get mnemonic(): Mnemonic | null {\n return this.node.mnemonic\n }\n\n get parentFingerprint(): string {\n return this.node.parentFingerprint\n }\n\n get path(): string | null {\n return this.node.path\n }\n\n get privateKey(): Hex {\n return this.node.privateKey.toLowerCase() as Hex\n }\n\n get publicKey(): Hex {\n return this.node.publicKey.toLowerCase() as Hex\n }\n\n static override async create(opts?: AccountConfig): Promise<WalletInstance> {\n if (isPhraseInitializationConfig(opts)) {\n return await this.fromPhrase(opts.phrase)\n }\n if (isMnemonicInitializationConfig(opts)) {\n return await this.fromPhrase(opts.mnemonic, opts.path)\n }\n if (isPrivateKeyInitializationConfig(opts)) {\n throw new Error('Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.')\n }\n throw new Error('Invalid initialization config')\n }\n\n static async createFromNode(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n return await this.createFromNodeInternal(node, previousHash)\n }\n\n static async fromExtendedKey(key: string): Promise<WalletInstance> {\n const node = HDNodeWallet.fromExtendedKey(key)\n /* TODO: Handle HDNodeVoidWallet */\n return await HDWallet.createFromNode(node as HDNodeWallet)\n }\n\n static async fromMnemonic(mnemonic: Mnemonic, path: string = defaultPath): Promise<WalletInstance> {\n const node = HDNodeWallet.fromMnemonic(mnemonic, path)\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static async fromPhrase(phrase: string, path: string = defaultPath): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path)\n }\n\n static async fromSeed(seed: string | ArrayBufferLike): Promise<WalletInstance> {\n const node = HDNodeWallet.fromSeed(toUint8Array(seed))\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static generateMnemonic(wordlist: string[] = englishWordlist, strength: number = 256): string {\n return generateMnemonic(wordlist, strength)\n }\n\n static override async random(): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(HDWallet.generateMnemonic()))\n }\n\n protected static async createFromNodeInternal(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n const privateKey = toUint8Array(node.privateKey.replace('0x', ''))\n assertEx(
|
|
1
|
+
{"version":3,"sources":["../../src/HDWallet.ts"],"sourcesContent":["import { generateMnemonic } from '@scure/bip39'\nimport { wordlist as englishWordlist } from '@scure/bip39/wordlists/english'\nimport { toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { globallyUnique } from '@xylabs/base'\nimport {\n Address, asAddress, Hex, hexFromHexString,\n} from '@xylabs/hex'\nimport { staticImplements } from '@xylabs/static-implements'\nimport { Account, PrivateKey } from '@xyo-network/account'\nimport {\n AccountConfig,\n isMnemonicInitializationConfig,\n isPhraseInitializationConfig,\n isPrivateKeyInitializationConfig,\n} from '@xyo-network/account-model'\nimport type { PrivateKeyInstance } from '@xyo-network/key-model'\nimport { WalletInstance, WalletStatic } from '@xyo-network/wallet-model'\nimport {\n defaultPath, HDNodeWallet, Mnemonic,\n} from 'ethers'\n\n@staticImplements<WalletStatic>()\nexport class HDWallet extends Account implements WalletInstance {\n static override readonly uniqueName = globallyUnique('HDWallet', HDWallet, 'xyo')\n protected static override _addressMap: Record<Address, WeakRef<WalletInstance>> = {}\n\n constructor(\n key: unknown,\n protected readonly node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(Account._protectedConstructorKey, privateKey)\n }\n\n override get address(): Address {\n return asAddress(hexFromHexString(this.node.address, { prefix: false }), true)\n }\n\n override get addressBytes(): ArrayBufferLike {\n return toUint8Array(this.address, undefined, 16).buffer\n }\n\n get chainCode(): string {\n return this.node.chainCode\n }\n\n get depth(): number {\n return this.node.depth\n }\n\n get extendedKey(): string {\n return this.node.extendedKey\n }\n\n get fingerprint(): string {\n return this.node.fingerprint\n }\n\n get index(): number {\n return this.node.index\n }\n\n get mnemonic(): Mnemonic | null {\n return this.node.mnemonic\n }\n\n get parentFingerprint(): string {\n return this.node.parentFingerprint\n }\n\n get path(): string | null {\n return this.node.path\n }\n\n get privateKey(): Hex {\n return this.node.privateKey.toLowerCase() as Hex\n }\n\n get publicKey(): Hex {\n return this.node.publicKey.toLowerCase() as Hex\n }\n\n static override async create(opts?: AccountConfig): Promise<WalletInstance> {\n if (isPhraseInitializationConfig(opts)) {\n return await this.fromPhrase(opts.phrase)\n }\n if (isMnemonicInitializationConfig(opts)) {\n return await this.fromPhrase(opts.mnemonic, opts.path)\n }\n if (isPrivateKeyInitializationConfig(opts)) {\n throw new Error('Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.')\n }\n throw new Error('Invalid initialization config')\n }\n\n static async createFromNode(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n return await this.createFromNodeInternal(node, previousHash)\n }\n\n static async fromExtendedKey(key: string): Promise<WalletInstance> {\n const node = HDNodeWallet.fromExtendedKey(key)\n /* TODO: Handle HDNodeVoidWallet */\n return await HDWallet.createFromNode(node as HDNodeWallet)\n }\n\n static async fromMnemonic(mnemonic: Mnemonic, path: string = defaultPath): Promise<WalletInstance> {\n const node = HDNodeWallet.fromMnemonic(mnemonic, path)\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static async fromPhrase(phrase: string, path: string = defaultPath): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path)\n }\n\n static async fromSeed(seed: string | ArrayBufferLike): Promise<WalletInstance> {\n const node = HDNodeWallet.fromSeed(toUint8Array(seed))\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static generateMnemonic(wordlist: string[] = englishWordlist, strength: number = 256): string {\n return generateMnemonic(wordlist, strength)\n }\n\n static override async random(): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(HDWallet.generateMnemonic()))\n }\n\n protected static async createFromNodeInternal(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n const privateKey = toUint8Array(node.privateKey.replace('0x', ''))\n assertEx(privateKey.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`)\n const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash)\n return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet\n }\n\n protected static getCachedWalletOrCacheNewWallet(createdWallet: WalletInstance): WalletInstance {\n const existingWallet = this._addressMap[createdWallet.address]?.deref()\n if (existingWallet) {\n return existingWallet\n }\n const ref = new WeakRef(createdWallet)\n this._addressMap[createdWallet.address] = ref\n return createdWallet\n }\n\n async derivePath(path: string): Promise<WalletInstance> {\n // if an absolute path, check if it matches the parent root and work with it\n if (path.startsWith('m/')) {\n const parentPath = this.path\n if (parentPath !== null && path.startsWith(parentPath)) {\n const childPath = path.slice(parentPath.length + 1)\n return await HDWallet.createFromNode(this.node.derivePath(childPath))\n }\n throw new Error(`Invalid absolute path ${path} for wallet with path ${parentPath}`)\n }\n return await HDWallet.createFromNode(this.node.derivePath(path))\n }\n\n neuter: () => HDWallet = () => {\n this.node.neuter()\n return this\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HDWallet.d.ts","sourceRoot":"","sources":["../../src/HDWallet.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,OAAO,
|
|
1
|
+
{"version":3,"file":"HDWallet.d.ts","sourceRoot":"","sources":["../../src/HDWallet.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,OAAO,EAAa,GAAG,EACxB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,OAAO,EAAc,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EACL,aAAa,EAId,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,cAAc,EAAgB,MAAM,2BAA2B,CAAA;AACxE,OAAO,EACQ,YAAY,EAAE,QAAQ,EACpC,MAAM,QAAQ,CAAA;AAEf,qBACa,QAAS,SAAQ,OAAQ,YAAW,cAAc;IAM3D,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY;IALvC,gBAAyB,UAAU,SAA8C;IACjF,iBAA0B,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAK;gBAGlF,GAAG,EAAE,OAAO,EACO,IAAI,EAAE,YAAY,EACrC,UAAU,EAAE,kBAAkB;IAKhC,IAAa,OAAO,IAAI,OAAO,CAE9B;IAED,IAAa,YAAY,IAAI,eAAe,CAE3C;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAE9B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAExB;IAED,IAAI,UAAU,IAAI,GAAG,CAEpB;IAED,IAAI,SAAS,IAAI,GAAG,CAEnB;WAEqB,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;WAa9D,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;WAIlF,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;WAMrD,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;WAMrF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;WAI/E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAM9E,MAAM,CAAC,gBAAgB,CAAC,QAAQ,GAAE,MAAM,EAAoB,EAAE,QAAQ,GAAE,MAAY,GAAG,MAAM;WAIvE,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;qBAIhC,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAOjH,SAAS,CAAC,MAAM,CAAC,+BAA+B,CAAC,aAAa,EAAE,cAAc,GAAG,cAAc;IAUzF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAavD,MAAM,EAAE,MAAM,QAAQ,CAGrB;CACF"}
|
package/dist/node/index.mjs
CHANGED
|
@@ -18,6 +18,7 @@ import { toUint8Array } from "@xylabs/arraybuffer";
|
|
|
18
18
|
import { assertEx } from "@xylabs/assert";
|
|
19
19
|
import { globallyUnique } from "@xylabs/base";
|
|
20
20
|
import {
|
|
21
|
+
asAddress,
|
|
21
22
|
hexFromHexString
|
|
22
23
|
} from "@xylabs/hex";
|
|
23
24
|
import { staticImplements } from "@xylabs/static-implements";
|
|
@@ -38,7 +39,7 @@ var HDWallet = class extends Account {
|
|
|
38
39
|
this.node = node;
|
|
39
40
|
}
|
|
40
41
|
get address() {
|
|
41
|
-
return hexFromHexString(this.node.address, { prefix: false });
|
|
42
|
+
return asAddress(hexFromHexString(this.node.address, { prefix: false }), true);
|
|
42
43
|
}
|
|
43
44
|
get addressBytes() {
|
|
44
45
|
return toUint8Array(this.address, void 0, 16).buffer;
|
|
@@ -113,7 +114,7 @@ var HDWallet = class extends Account {
|
|
|
113
114
|
}
|
|
114
115
|
static async createFromNodeInternal(node, previousHash) {
|
|
115
116
|
const privateKey = toUint8Array(node.privateKey.replace("0x", ""));
|
|
116
|
-
assertEx(
|
|
117
|
+
assertEx(privateKey.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`);
|
|
117
118
|
const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash);
|
|
118
119
|
return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet;
|
|
119
120
|
}
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/HDWallet.ts"],"sourcesContent":["import { generateMnemonic } from '@scure/bip39'\nimport { wordlist as englishWordlist } from '@scure/bip39/wordlists/english'\nimport { toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { globallyUnique } from '@xylabs/base'\nimport {\n Address, Hex, hexFromHexString,\n} from '@xylabs/hex'\nimport { staticImplements } from '@xylabs/static-implements'\nimport { Account, PrivateKey } from '@xyo-network/account'\nimport {\n AccountConfig,\n isMnemonicInitializationConfig,\n isPhraseInitializationConfig,\n isPrivateKeyInitializationConfig,\n} from '@xyo-network/account-model'\nimport type { PrivateKeyInstance } from '@xyo-network/key-model'\nimport { WalletInstance, WalletStatic } from '@xyo-network/wallet-model'\nimport {\n defaultPath, HDNodeWallet, Mnemonic,\n} from 'ethers'\n\n@staticImplements<WalletStatic>()\nexport class HDWallet extends Account implements WalletInstance {\n static override readonly uniqueName = globallyUnique('HDWallet', HDWallet, 'xyo')\n protected static override _addressMap: Record<Address, WeakRef<WalletInstance>> = {}\n\n constructor(\n key: unknown,\n protected readonly node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(Account._protectedConstructorKey, privateKey)\n }\n\n override get address(): Address {\n return hexFromHexString(this.node.address, { prefix: false })\n }\n\n override get addressBytes(): ArrayBufferLike {\n return toUint8Array(this.address, undefined, 16).buffer\n }\n\n get chainCode(): string {\n return this.node.chainCode\n }\n\n get depth(): number {\n return this.node.depth\n }\n\n get extendedKey(): string {\n return this.node.extendedKey\n }\n\n get fingerprint(): string {\n return this.node.fingerprint\n }\n\n get index(): number {\n return this.node.index\n }\n\n get mnemonic(): Mnemonic | null {\n return this.node.mnemonic\n }\n\n get parentFingerprint(): string {\n return this.node.parentFingerprint\n }\n\n get path(): string | null {\n return this.node.path\n }\n\n get privateKey(): Hex {\n return this.node.privateKey.toLowerCase() as Hex\n }\n\n get publicKey(): Hex {\n return this.node.publicKey.toLowerCase() as Hex\n }\n\n static override async create(opts?: AccountConfig): Promise<WalletInstance> {\n if (isPhraseInitializationConfig(opts)) {\n return await this.fromPhrase(opts.phrase)\n }\n if (isMnemonicInitializationConfig(opts)) {\n return await this.fromPhrase(opts.mnemonic, opts.path)\n }\n if (isPrivateKeyInitializationConfig(opts)) {\n throw new Error('Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.')\n }\n throw new Error('Invalid initialization config')\n }\n\n static async createFromNode(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n return await this.createFromNodeInternal(node, previousHash)\n }\n\n static async fromExtendedKey(key: string): Promise<WalletInstance> {\n const node = HDNodeWallet.fromExtendedKey(key)\n /* TODO: Handle HDNodeVoidWallet */\n return await HDWallet.createFromNode(node as HDNodeWallet)\n }\n\n static async fromMnemonic(mnemonic: Mnemonic, path: string = defaultPath): Promise<WalletInstance> {\n const node = HDNodeWallet.fromMnemonic(mnemonic, path)\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static async fromPhrase(phrase: string, path: string = defaultPath): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path)\n }\n\n static async fromSeed(seed: string | ArrayBufferLike): Promise<WalletInstance> {\n const node = HDNodeWallet.fromSeed(toUint8Array(seed))\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static generateMnemonic(wordlist: string[] = englishWordlist, strength: number = 256): string {\n return generateMnemonic(wordlist, strength)\n }\n\n static override async random(): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(HDWallet.generateMnemonic()))\n }\n\n protected static async createFromNodeInternal(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n const privateKey = toUint8Array(node.privateKey.replace('0x', ''))\n assertEx(
|
|
1
|
+
{"version":3,"sources":["../../src/HDWallet.ts"],"sourcesContent":["import { generateMnemonic } from '@scure/bip39'\nimport { wordlist as englishWordlist } from '@scure/bip39/wordlists/english'\nimport { toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { globallyUnique } from '@xylabs/base'\nimport {\n Address, asAddress, Hex, hexFromHexString,\n} from '@xylabs/hex'\nimport { staticImplements } from '@xylabs/static-implements'\nimport { Account, PrivateKey } from '@xyo-network/account'\nimport {\n AccountConfig,\n isMnemonicInitializationConfig,\n isPhraseInitializationConfig,\n isPrivateKeyInitializationConfig,\n} from '@xyo-network/account-model'\nimport type { PrivateKeyInstance } from '@xyo-network/key-model'\nimport { WalletInstance, WalletStatic } from '@xyo-network/wallet-model'\nimport {\n defaultPath, HDNodeWallet, Mnemonic,\n} from 'ethers'\n\n@staticImplements<WalletStatic>()\nexport class HDWallet extends Account implements WalletInstance {\n static override readonly uniqueName = globallyUnique('HDWallet', HDWallet, 'xyo')\n protected static override _addressMap: Record<Address, WeakRef<WalletInstance>> = {}\n\n constructor(\n key: unknown,\n protected readonly node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(Account._protectedConstructorKey, privateKey)\n }\n\n override get address(): Address {\n return asAddress(hexFromHexString(this.node.address, { prefix: false }), true)\n }\n\n override get addressBytes(): ArrayBufferLike {\n return toUint8Array(this.address, undefined, 16).buffer\n }\n\n get chainCode(): string {\n return this.node.chainCode\n }\n\n get depth(): number {\n return this.node.depth\n }\n\n get extendedKey(): string {\n return this.node.extendedKey\n }\n\n get fingerprint(): string {\n return this.node.fingerprint\n }\n\n get index(): number {\n return this.node.index\n }\n\n get mnemonic(): Mnemonic | null {\n return this.node.mnemonic\n }\n\n get parentFingerprint(): string {\n return this.node.parentFingerprint\n }\n\n get path(): string | null {\n return this.node.path\n }\n\n get privateKey(): Hex {\n return this.node.privateKey.toLowerCase() as Hex\n }\n\n get publicKey(): Hex {\n return this.node.publicKey.toLowerCase() as Hex\n }\n\n static override async create(opts?: AccountConfig): Promise<WalletInstance> {\n if (isPhraseInitializationConfig(opts)) {\n return await this.fromPhrase(opts.phrase)\n }\n if (isMnemonicInitializationConfig(opts)) {\n return await this.fromPhrase(opts.mnemonic, opts.path)\n }\n if (isPrivateKeyInitializationConfig(opts)) {\n throw new Error('Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.')\n }\n throw new Error('Invalid initialization config')\n }\n\n static async createFromNode(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n return await this.createFromNodeInternal(node, previousHash)\n }\n\n static async fromExtendedKey(key: string): Promise<WalletInstance> {\n const node = HDNodeWallet.fromExtendedKey(key)\n /* TODO: Handle HDNodeVoidWallet */\n return await HDWallet.createFromNode(node as HDNodeWallet)\n }\n\n static async fromMnemonic(mnemonic: Mnemonic, path: string = defaultPath): Promise<WalletInstance> {\n const node = HDNodeWallet.fromMnemonic(mnemonic, path)\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static async fromPhrase(phrase: string, path: string = defaultPath): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path)\n }\n\n static async fromSeed(seed: string | ArrayBufferLike): Promise<WalletInstance> {\n const node = HDNodeWallet.fromSeed(toUint8Array(seed))\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static generateMnemonic(wordlist: string[] = englishWordlist, strength: number = 256): string {\n return generateMnemonic(wordlist, strength)\n }\n\n static override async random(): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(HDWallet.generateMnemonic()))\n }\n\n protected static async createFromNodeInternal(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n const privateKey = toUint8Array(node.privateKey.replace('0x', ''))\n assertEx(privateKey.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`)\n const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash)\n return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet\n }\n\n protected static getCachedWalletOrCacheNewWallet(createdWallet: WalletInstance): WalletInstance {\n const existingWallet = this._addressMap[createdWallet.address]?.deref()\n if (existingWallet) {\n return existingWallet\n }\n const ref = new WeakRef(createdWallet)\n this._addressMap[createdWallet.address] = ref\n return createdWallet\n }\n\n async derivePath(path: string): Promise<WalletInstance> {\n // if an absolute path, check if it matches the parent root and work with it\n if (path.startsWith('m/')) {\n const parentPath = this.path\n if (parentPath !== null && path.startsWith(parentPath)) {\n const childPath = path.slice(parentPath.length + 1)\n return await HDWallet.createFromNode(this.node.derivePath(childPath))\n }\n throw new Error(`Invalid absolute path ${path} for wallet with path ${parentPath}`)\n }\n return await HDWallet.createFromNode(this.node.derivePath(path))\n }\n\n neuter: () => HDWallet = () => {\n this.node.neuter()\n return this\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/wallet",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.2.0",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -30,21 +30,21 @@
|
|
|
30
30
|
"types": "dist/neutral/index.d.ts",
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@scure/bip39": "^1.6.0",
|
|
33
|
-
"@xylabs/arraybuffer": "^4.
|
|
34
|
-
"@xylabs/assert": "^4.
|
|
35
|
-
"@xylabs/base": "^4.
|
|
36
|
-
"@xylabs/hex": "^4.
|
|
37
|
-
"@xylabs/static-implements": "^4.
|
|
38
|
-
"@xyo-network/account": "^4.
|
|
39
|
-
"@xyo-network/account-model": "^4.
|
|
40
|
-
"@xyo-network/key-model": "^4.
|
|
41
|
-
"@xyo-network/wallet-model": "^4.
|
|
33
|
+
"@xylabs/arraybuffer": "^4.14.1",
|
|
34
|
+
"@xylabs/assert": "^4.14.1",
|
|
35
|
+
"@xylabs/base": "^4.14.1",
|
|
36
|
+
"@xylabs/hex": "^4.14.1",
|
|
37
|
+
"@xylabs/static-implements": "^4.14.1",
|
|
38
|
+
"@xyo-network/account": "^4.2.0",
|
|
39
|
+
"@xyo-network/account-model": "^4.2.0",
|
|
40
|
+
"@xyo-network/key-model": "^4.2.0",
|
|
41
|
+
"@xyo-network/wallet-model": "^4.2.0",
|
|
42
42
|
"ethers": "^6.15.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@xylabs/ts-scripts-yarn3": "^7.0.
|
|
46
|
-
"@xylabs/tsconfig": "^7.0.
|
|
47
|
-
"@xylabs/vitest-matchers": "^4.
|
|
45
|
+
"@xylabs/ts-scripts-yarn3": "^7.0.1",
|
|
46
|
+
"@xylabs/tsconfig": "^7.0.1",
|
|
47
|
+
"@xylabs/vitest-matchers": "^4.14.1",
|
|
48
48
|
"typescript": "^5.8.3",
|
|
49
49
|
"vitest": "^3.2.4"
|
|
50
50
|
},
|
package/src/HDWallet.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { toUint8Array } from '@xylabs/arraybuffer'
|
|
|
4
4
|
import { assertEx } from '@xylabs/assert'
|
|
5
5
|
import { globallyUnique } from '@xylabs/base'
|
|
6
6
|
import {
|
|
7
|
-
Address, Hex, hexFromHexString,
|
|
7
|
+
Address, asAddress, Hex, hexFromHexString,
|
|
8
8
|
} from '@xylabs/hex'
|
|
9
9
|
import { staticImplements } from '@xylabs/static-implements'
|
|
10
10
|
import { Account, PrivateKey } from '@xyo-network/account'
|
|
@@ -34,7 +34,7 @@ export class HDWallet extends Account implements WalletInstance {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
override get address(): Address {
|
|
37
|
-
return hexFromHexString(this.node.address, { prefix: false })
|
|
37
|
+
return asAddress(hexFromHexString(this.node.address, { prefix: false }), true)
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
override get addressBytes(): ArrayBufferLike {
|
|
@@ -130,7 +130,7 @@ export class HDWallet extends Account implements WalletInstance {
|
|
|
130
130
|
|
|
131
131
|
protected static async createFromNodeInternal(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {
|
|
132
132
|
const privateKey = toUint8Array(node.privateKey.replace('0x', ''))
|
|
133
|
-
assertEx(
|
|
133
|
+
assertEx(privateKey.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`)
|
|
134
134
|
const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash)
|
|
135
135
|
return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet
|
|
136
136
|
}
|