@xyo-network/wallet 5.0.7 → 5.1.1
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/index.mjs
CHANGED
|
@@ -13,7 +13,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
13
13
|
|
|
14
14
|
// src/HDWallet.ts
|
|
15
15
|
import { generateMnemonic } from "@scure/bip39";
|
|
16
|
-
import { wordlist as englishWordlist } from "@scure/bip39/wordlists/english";
|
|
16
|
+
import { wordlist as englishWordlist } from "@scure/bip39/wordlists/english.js";
|
|
17
17
|
import { toUint8Array } from "@xylabs/arraybuffer";
|
|
18
18
|
import { assertEx } from "@xylabs/assert";
|
|
19
19
|
import { globallyUnique } from "@xylabs/base";
|
|
@@ -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, 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 protected readonly node: HDNodeWallet\n\n constructor(\n key: symbol,\n node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(key, privateKey)\n this.node = node\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
|
+
{"version":3,"sources":["../../src/HDWallet.ts"],"sourcesContent":["import { generateMnemonic } from '@scure/bip39'\nimport { wordlist as englishWordlist } from '@scure/bip39/wordlists/english.js'\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 protected readonly node: HDNodeWallet\n\n constructor(\n key: symbol,\n node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(key, privateKey)\n this.node = node\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/dist/neutral/index.mjs
CHANGED
|
@@ -13,7 +13,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
13
13
|
|
|
14
14
|
// src/HDWallet.ts
|
|
15
15
|
import { generateMnemonic } from "@scure/bip39";
|
|
16
|
-
import { wordlist as englishWordlist } from "@scure/bip39/wordlists/english";
|
|
16
|
+
import { wordlist as englishWordlist } from "@scure/bip39/wordlists/english.js";
|
|
17
17
|
import { toUint8Array } from "@xylabs/arraybuffer";
|
|
18
18
|
import { assertEx } from "@xylabs/assert";
|
|
19
19
|
import { globallyUnique } from "@xylabs/base";
|
|
@@ -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, 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 protected readonly node: HDNodeWallet\n\n constructor(\n key: symbol,\n node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(key, privateKey)\n this.node = node\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
|
+
{"version":3,"sources":["../../src/HDWallet.ts"],"sourcesContent":["import { generateMnemonic } from '@scure/bip39'\nimport { wordlist as englishWordlist } from '@scure/bip39/wordlists/english.js'\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 protected readonly node: HDNodeWallet\n\n constructor(\n key: symbol,\n node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(key, privateKey)\n this.node = node\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/dist/node/index.mjs
CHANGED
|
@@ -13,7 +13,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
13
13
|
|
|
14
14
|
// src/HDWallet.ts
|
|
15
15
|
import { generateMnemonic } from "@scure/bip39";
|
|
16
|
-
import { wordlist as englishWordlist } from "@scure/bip39/wordlists/english";
|
|
16
|
+
import { wordlist as englishWordlist } from "@scure/bip39/wordlists/english.js";
|
|
17
17
|
import { toUint8Array } from "@xylabs/arraybuffer";
|
|
18
18
|
import { assertEx } from "@xylabs/assert";
|
|
19
19
|
import { globallyUnique } from "@xylabs/base";
|
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, 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 protected readonly node: HDNodeWallet\n\n constructor(\n key: symbol,\n node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(key, privateKey)\n this.node = node\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
|
+
{"version":3,"sources":["../../src/HDWallet.ts"],"sourcesContent":["import { generateMnemonic } from '@scure/bip39'\nimport { wordlist as englishWordlist } from '@scure/bip39/wordlists/english.js'\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 protected readonly node: HDNodeWallet\n\n constructor(\n key: symbol,\n node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(key, privateKey)\n this.node = node\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": "5.
|
|
3
|
+
"version": "5.1.1",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -33,22 +33,22 @@
|
|
|
33
33
|
"src"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@scure/bip39": "~
|
|
37
|
-
"@xylabs/arraybuffer": "~5.0.
|
|
38
|
-
"@xylabs/assert": "~5.0.
|
|
39
|
-
"@xylabs/base": "~5.0.
|
|
40
|
-
"@xylabs/hex": "~5.0.
|
|
41
|
-
"@xylabs/static-implements": "~5.0.
|
|
42
|
-
"@xyo-network/account": "~5.
|
|
43
|
-
"@xyo-network/account-model": "~5.
|
|
44
|
-
"@xyo-network/key-model": "~5.
|
|
45
|
-
"@xyo-network/wallet-model": "~5.
|
|
36
|
+
"@scure/bip39": "~2.0.0",
|
|
37
|
+
"@xylabs/arraybuffer": "~5.0.11",
|
|
38
|
+
"@xylabs/assert": "~5.0.11",
|
|
39
|
+
"@xylabs/base": "~5.0.11",
|
|
40
|
+
"@xylabs/hex": "~5.0.11",
|
|
41
|
+
"@xylabs/static-implements": "~5.0.11",
|
|
42
|
+
"@xyo-network/account": "~5.1.1",
|
|
43
|
+
"@xyo-network/account-model": "~5.1.1",
|
|
44
|
+
"@xyo-network/key-model": "~5.1.1",
|
|
45
|
+
"@xyo-network/wallet-model": "~5.1.1",
|
|
46
46
|
"ethers": "~6.15.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@xylabs/ts-scripts-yarn3": "~7.1.
|
|
50
|
-
"@xylabs/tsconfig": "~7.1.
|
|
51
|
-
"@xylabs/vitest-matchers": "~5.0.
|
|
49
|
+
"@xylabs/ts-scripts-yarn3": "~7.1.7",
|
|
50
|
+
"@xylabs/tsconfig": "~7.1.7",
|
|
51
|
+
"@xylabs/vitest-matchers": "~5.0.11",
|
|
52
52
|
"typescript": "~5.9.2",
|
|
53
53
|
"vitest": "~3.2.4"
|
|
54
54
|
},
|
package/src/HDWallet.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { generateMnemonic } from '@scure/bip39'
|
|
2
|
-
import { wordlist as englishWordlist } from '@scure/bip39/wordlists/english'
|
|
2
|
+
import { wordlist as englishWordlist } from '@scure/bip39/wordlists/english.js'
|
|
3
3
|
import { toUint8Array } from '@xylabs/arraybuffer'
|
|
4
4
|
import { assertEx } from '@xylabs/assert'
|
|
5
5
|
import { globallyUnique } from '@xylabs/base'
|