QiHDWallet
The Qi HD wallet is a BIP44-compliant hierarchical deterministic wallet used for managing a set of addresses in the Qi ledger. This is wallet implementation is the primary way to interact with the Qi UTXO ledger on the Quai network.
The Qi HD wallet supports:
- Adding accounts to the wallet heierchy
- Generating addresses for a specific account in any Zone
- Signing and sending transactions for any address in the wallet
- Serializing the wallet to JSON and deserializing it back to a wallet instance.
Example
Extends
AbstractHDWallet
<QiAddressInfo
>
Properties
Property | Modifier | Type | Default value | Description |
---|---|---|---|---|
bip47HDNode | private | HDNodeWallet | undefined | The BIP47 HDNode instance used for deriving payment code addresses. This follows the BIP47 derivation path m/47’/969’/account’/0/index |
changeBip44 | private | Bip44QiWallet | undefined | The BIP44 wallet instance used for deriving change (sending) addresses. This follows the BIP44 derivation path m/44’/969’/account’/0/index |
externalBip44 | private | Bip44QiWallet | undefined | The BIP44 wallet instance used for deriving external (receiving) addresses. This follows the BIP44 derivation path m/44’/969’/account’/0/index |
paymentChannels | private | Map <string , PaymentChannel > | ... | Map of payment channels indexed by counterparty payment code |
privatekeyWallet | private | PrivatekeyQiWallet | undefined | The private key wallet instance used for deriving addresses from private keys. |
bip47derivationPath | private | string | "m/47'/969'" | The BIP47 derivation path m/47’/969’ |
Accessors
openChannels
Gets the payment codes for all open channels.
Returns
string
[]
The payment codes for all open channels.
Source
Methods
addAddress()
Adds a new address to the wallet.
Parameters
Parameter | Type | Description |
---|---|---|
account | number | The account number. |
addressIndex | number | The address index. |
Returns
The address info for the new address.
Overrides
AbstractHDWallet.addAddress
Source
addChangeAddress()
Adds a new change address to the wallet.
Parameters
Parameter | Type | Description |
---|---|---|
account | number | The account number. |
addressIndex | number | The address index. |
Returns
The address info for the new address.
Source
aggregate()
Aggregates all the available UTXOs for the specified zone and account. This method creates a new transaction with all the available UTXOs as inputs and as fewest outputs as possible.
Parameters
Parameter | Type | Description |
---|---|---|
zone | Zone | The zone to aggregate the balance for. |
options ? | QiTransactionOptions | Optional transaction configuration. |
Returns
Promise
<TransactionResponse
>
The transaction response.
Source
checkAddressUse()
Checks if the specified address is used by querying the network node for the outpoints of the address. If the address is used, the outpoints are imported into the wallet.
Parameters
Parameter | Type | Description |
---|---|---|
address | string | The address to check. |
Returns
Promise
<{
"isUsed"
: boolean
;
"outpoints"
: Outpoint
[];
}>
A promise that resolves to an object containing a boolean indicating whether the address is used and an array of outpoints.
isUsed
outpoints
Throws
If the query fails.
Source
connect()
Connects the wallet to a provider and propagates the connection to all subwallets.
Parameters
Parameter | Type | Description |
---|---|---|
provider | Provider | The provider. |
Returns
void
Overrides
AbstractHDWallet.connect
Source
convertToQuai()
Converts an amount of Qi to Quai and sends it to a specified Quai address.
Parameters
Parameter | Type | Description |
---|---|---|
destinationAddress | string | The Quai address to send the converted Quai to. |
amount | bigint | The amount of Qi to convert to Quai. |
options ? | QiTransactionOptions | Optional transaction configuration. |
Returns
Promise
<TransactionResponse
>
A promise that resolves to the transaction response.
Throws
If the destination address is invalid, the amount is zero, or the conversion fails.
Source
getAddressInfo()
Locates the address information for the given address, searching through standard addresses, change addresses, and payment channel addresses.
Parameters
Parameter | Type | Description |
---|---|---|
address | string | The address to locate. |
Returns
null
| QiAddressInfo
The address info or null if not found.
Overrides
AbstractHDWallet.getAddressInfo
Source
getAddressesForAccount()
Gets the addresses for a given account.
Parameters
Parameter | Type | Description |
---|---|---|
account | number | The account number. |
Returns
The addresses for the account.
Overrides
AbstractHDWallet.getAddressesForAccount
Source
getAddressesForZone()
Gets the addresses for the specified zone.
Parameters
Parameter | Type | Description |
---|---|---|
zone | Zone | The zone. |
Returns
The addresses for the zone.
Overrides
AbstractHDWallet.getAddressesForZone
Source
getBalanceForZone()
Gets the total balance for a specific zone by summing balances from all address types:
- BIP44 external addresses
- BIP44 change addresses
- BIP47 payment channel addresses
- Imported private key addresses
Parameters
Parameter | Type | Description |
---|---|---|
zone | Zone | The zone to get the balance for |
Returns
Promise
<bigint
>
The total balance in the zone as a bigint
Source
getChangeAddressesForOutputs()
Gets a set of unused change addresses for transaction outputs and updates their status in the wallet. This method retrieves unused BIP44 change addresses, marks them as attempted use, and maintains the wallet’s address mapping state.
Parameters
Parameter | Type | Default value | Description |
---|---|---|---|
count | number | undefined | The number of change addresses needed |
zone | Zone | undefined | The zone to get change addresses from |
account ? | number | 0 | The account index to use (defaults to 0). Default is 0 |
Returns
Promise
<string
[]>
A promise that resolves to an array of change addresses
Source
getChangeAddressesForZone()
Gets the change addresses for the specified zone.
Parameters
Parameter | Type | Description |
---|---|---|
zone | Zone | The zone. |
Returns
The change addresses for the zone.
Source
getGapAddressesForZone()
Gets the gap addresses for the specified zone.
Parameters
Parameter | Type | Description |
---|---|---|
zone | Zone | The zone. |
Returns
The gap addresses for the zone.
Source
getGapChangeAddressesForZone()
Gets the gap change addresses for the specified zone.
Parameters
Parameter | Type | Description |
---|---|---|
zone | Zone | The zone. |
Returns
The gap change addresses for the zone.
Source
getGapPaymentChannelAddressesForZone()
Gets the gap payment channel addresses for the specified payment code.
Parameters
Parameter | Type | Description |
---|---|---|
paymentCode | string | The payment code. |
zone | Zone | - |
Returns
The gap payment channel addresses for the payment code.
Source
getImportedAddresses()
Gets all addresses that were imported via private keys.
Parameters
Parameter | Type | Description |
---|---|---|
zone ? | Zone | Optional zone to filter addresses by |
Returns
Array of address info objects for imported addresses
Source
getNextAddress()
Promise that resolves to the next address for the specified account and zone.
Parameters
Parameter | Type | Description |
---|---|---|
account | number | The account number. |
zone | Zone | The zone. |
Returns
Promise
<QiAddressInfo
>
The next Qi address information.
Overrides
AbstractHDWallet.getNextAddress
Source
getNextAddressSync()
Synchronously retrieves the next address for the specified account and zone.
Parameters
Parameter | Type | Description |
---|---|---|
account | number | The account number. |
zone | Zone | The zone. |
Returns
The next Qi address information.
Overrides
AbstractHDWallet.getNextAddressSync
Source
getNextChangeAddress()
Promise that resolves to the next change address for the specified account and zone.
Parameters
Parameter | Type | Description |
---|---|---|
account | number | The index of the account for which to retrieve the next change address. |
zone | Zone | The zone in which to retrieve the next change address. |
Returns
Promise
<QiAddressInfo
>
The next change neutered address information.
Source
getNextChangeAddressSync()
Synchronously retrieves the next change address for the specified account and zone.
Parameters
Parameter | Type | Description |
---|---|---|
account | number | The index of the account for which to retrieve the next change address. |
zone | Zone | The zone in which to retrieve the next change address. |
Returns
The next change neutered address information.
Source
getNextReceiveAddress()
Generates a payment address for receiving funds from the specified sender’s BIP47 payment code. Uses Diffie-Hellman key exchange to derive the address from the sender’s public key and receiver’s private key.
Parameters
Parameter | Type | Default value | Description |
---|---|---|---|
senderPaymentCode | string | undefined | The Base58-encoded BIP47 payment code of the sender. |
zone | Zone | undefined | - |
account | number | 0 | - |
Returns
A promise that resolves to the payment address for receiving funds.
Throws
Throws an error if the payment code version is invalid.
Source
getNextSendAddress()
Generates a payment address for sending funds to the specified receiver’s BIP47 payment code. Uses Diffie-Hellman key exchange to derive the address from the receiver’s public key and sender’s private key.
Parameters
Parameter | Type | Default value | Description |
---|---|---|---|
receiverPaymentCode | string | undefined | The Base58-encoded BIP47 payment code of the receiver. |
zone | Zone | undefined | - |
account | number | 0 | - |
Returns
A promise that resolves to the payment address for sending funds.
Throws
Throws an error if the payment code version is invalid.
Source
getOutpoints()
Gets the outpoints for the specified zone.
Parameters
Parameter | Type | Description |
---|---|---|
zone | Zone | The zone. |
Returns
The outpoints for the zone.
Source
getPaymentChannelAddressesForZone()
Gets the payment channel addresses for the specified zone.
Parameters
Parameter | Type | Description |
---|---|---|
paymentCode | string | The payment code. |
zone | Zone | The zone. |
Returns
The payment channel addresses for the zone.
Source
getPaymentCode()
Creates a new BIP47 payment code for the specified account. The payment code is derived from the account’s BIP32 root key.
Parameters
Parameter | Type | Default value | Description |
---|---|---|---|
account | number | 0 | The account index to derive the payment code from. |
Returns
string
A promise that resolves to the Base58-encoded BIP47 payment code.
Source
getPrivateKey()
Returns the private key for a given address. This method should be used with caution as it exposes the private key to the user.
Parameters
Parameter | Type | Description |
---|---|---|
address | string | The address associated with the desired private key. |
Returns
string
The private key.
Overrides
AbstractHDWallet.getPrivateKey
Source
getPrivateKeyForTxInput()
Retrieves the private key for a given transaction input.
This method derives the private key for a transaction input by locating the address info and then deriving the private key based on where the address info was found:
- For BIP44 addresses (standard or change), it uses the HD wallet to derive the private key.
- For payment channel addresses (BIP47), it uses PaymentCodePrivate to derive the private key.
Parameters
Parameter | Type | Description |
---|---|---|
input | TxInput | The transaction input containing the public key. |
Returns
string
The private key corresponding to the transaction input.
Throws
If the input does not contain a public key or if the address information cannot be found.
Source
getUnusedBIP44Addresses()
Gets a set of unused BIP44 addresses from the specified derivation path. It first checks if there are any unused addresses available in the _addressesMap and uses those if possible. If there are not enough unused addresses, it will generate new ones.
Parameters
Parameter | Type | Description |
---|---|---|
amount | number | The number of addresses to get. |
account | number | - |
path | string | The derivation path to get addresses from. |
zone | Zone | The zone to get addresses from. |
Returns
An array of addresses.
Source
importOutpoints()
Imports an array of outpoints into their corresponding wallets based on their derivation paths.
Parameters
Parameter | Type | Description |
---|---|---|
outpoints | OutpointInfo [] | The outpoints to import. |
Returns
void
Source
importPrivateKey()
Imports a private key and adds it to the wallet.
Parameters
Parameter | Type | Description |
---|---|---|
privateKey | string | The private key to import (hex string) |
Returns
Promise
<QiAddressInfo
>
The address information for the imported key
Throws
If the private key is invalid or the address is already in use
Source
openChannel()
Receives a payment code and stores it in the wallet for future use. If the payment code is already in the wallet, it will be ignored.
Parameters
Parameter | Type | Description |
---|---|---|
paymentCode | string | The payment code to store. |
Returns
void
Source
outpointsToUTXOs()
Converts outpoints for a specific zone to UTXO format.
Parameters
Parameter | Type | Description |
---|---|---|
zone | Zone | The zone to filter outpoints for. |
Returns
UTXO
[]
An array of UTXO objects.
Source
prepareAndSendTransaction()
Prepares and sends a transaction with the specified parameters.
Parameters
Parameter | Type | Description |
---|---|---|
amount | bigint | The amount of Qi to send. |
originZone | Zone | The zone where the transaction originates. |
getDestinationAddresses | (count ) => Promise <string []> | A function that returns a promise resolving to an array of destination addresses. |
coinSelectorCreator | (utxos ) => FewestCoinSelector | ConversionCoinSelector | - |
options | QiTransactionOptions | - |
Returns
Promise
<TransactionResponse
>
A promise that resolves to the transaction response.
Throws
If provider is not set, insufficient balance, no available UTXOs, or insufficient spendable balance.
Source
prepareFeeEstimationTransaction()
Prepares a fee estimation transaction with the specified parameters.
Parameters
Parameter | Type | Description |
---|---|---|
selection | SelectedCoinsResult | The selected coins result. |
inputPubKeys | string [] | The public keys of the inputs. |
sendAddresses | string [] | The addresses to send to. |
changeAddresses | string [] | The addresses to change to. |
Returns
QiPerformActionTransaction
The prepared transaction.
Source
prepareTransaction()
Prepares a transaction with the specified parameters.
Parameters
Parameter | Type | Description |
---|---|---|
selection | SelectedCoinsResult | The selected coins result. |
sendAddresses | string [] | The addresses to send to. |
changeAddresses | string [] | The addresses to change to. |
chainId | number | The chain ID. |
options | QiTransactionOptions | - |
Returns
Promise
<QiTransaction
>
A promise that resolves to the prepared transaction.
Source
scan()
Scans the specified zone for addresses with unspent outputs. Starting at index 0, it will generate new addresses until the gap limit is reached for external and change BIP44 addresses and payment channel addresses.
Parameters
Parameter | Type | Default value | Description |
---|---|---|---|
zone | Zone | undefined | The zone in which to scan for addresses. |
account ? | number | 0 | The index of the account to scan. Default is 0 |
Returns
Promise
<void
>
A promise that resolves when the scan is complete.
Throws
If the zone is invalid.
Source
sendTransaction()
Sends a transaction to a specified recipient payment code in a specified zone.
Parameters
Parameter | Type | Description |
---|---|---|
recipientPaymentCode | string | The payment code of the recipient. |
amount | bigint | The amount of Qi to send. |
originZone | Zone | The zone where the transaction originates. |
destinationZone | Zone | The zone where the transaction is sent. |
options ? | QiTransactionOptions | Optional transaction configuration. |
Returns
Promise
<TransactionResponse
>
A promise that resolves to the transaction response.
Throws
If the payment code is invalid, the amount is zero, or the zones are invalid.
Source
serialize()
Serializes the HD wallet state into a format suitable for storage or transmission.
Returns
An object representing the serialized state of the HD wallet, including outpoints, change addresses, gap addresses, and other inherited properties.
Overrides
AbstractHDWallet.serialize
Source
setAddressUseChecker()
Sets the address use checker. The provided callback function should accept an address as input and return a boolean indicating whether the address is in use. If the callback returns true, the address is considered used and if it returns false, the address is considered unused.
Parameters
Parameter | Type | Description |
---|---|---|
checker | AddressUsageCallback | The address use checker. |
Returns
void
Source
signMessage()
Signs a message using the private key associated with the given address.
Parameters
Parameter | Type | Description |
---|---|---|
address | string | The address for which the message is to be signed. |
message | string | Uint8Array | The message to be signed, either as a string or Uint8Array. |
Returns
Promise
<string
>
A promise that resolves to the signature of the message in hexadecimal string format.
Overrides
AbstractHDWallet.signMessage
Throws
If the address does not correspond to a valid HD node or if signing fails.
Source
signTransaction()
Signs a Qi transaction and returns the serialized transaction.
Parameters
Parameter | Type | Description |
---|---|---|
tx | QiTransactionRequest | The transaction to sign. |
Returns
Promise
<string
>
The serialized transaction.
Overrides
AbstractHDWallet.signTransaction
Throws
If the UTXO transaction is invalid.
Source
sync()
Scans the specified zone for addresses with unspent outputs. Starting at the last address index, it will generate new addresses until the gap limit is reached for external and change BIP44 addresses and payment channel addresses.
Parameters
Parameter | Type | Default value | Description |
---|---|---|---|
zone | Zone | undefined | The zone in which to sync addresses. |
account ? | number | 0 | The index of the account to sync. Default is 0 |
onOutpointsCreated ? | OutpointsCallback | undefined | - |
onOutpointsDeleted ? | OutpointsCallback | undefined | - |
Returns
Promise
<void
>
A promise that resolves when the sync is complete.
Throws
If the zone is invalid.
Source
validateDerivationPath()
Validates that the derivation path is either a BIP44 path or a valid payment code.
Parameters
Parameter | Type | Description |
---|---|---|
path | string | The derivation path to validate |
isChange | boolean | Whether this is a change address |
Returns
void
Throws
If the path is invalid
Source
xPub()
Returns the extended public key of the root node of the BIP44 HD wallet.
Returns
string
The extended public key.
Source
createRandom()
Creates a random HD wallet.
Type parameters
Type parameter |
---|
T extends AbstractHDWallet <NeuteredAddressInfo , T > |
Parameters
Parameter | Type | Description |
---|---|---|
this | Object | The constructor of the HD wallet. |
password ? | string | The password. |
wordlist ? | Wordlist | The wordlist. |
Returns
T
The created instance.
Inherited from
AbstractHDWallet.createRandom
Source
wallet/abstract-hdwallet.ts:195
deserialize()
Deserializes a serialized QiHDWallet object and reconstructs the wallet instance.
Parameters
Parameter | Type | Description |
---|---|---|
serialized | SerializedQiHDWallet | The serialized object representing the state of a QiHDWallet. |
Returns
Promise
<QiHDWallet
>
A promise that resolves to a reconstructed QiHDWallet instance.
Overrides
AbstractHDWallet.deserialize
Throws
If the serialized data is invalid or if any addresses in the gap addresses or gap change addresses do not exist in the wallet.
Source
fromMnemonic()
Creates an HD wallet from a mnemonic.
Type parameters
Type parameter |
---|
T extends AbstractHDWallet <NeuteredAddressInfo , T > |
Parameters
Parameter | Type | Description |
---|---|---|
this | Object | The constructor of the HD wallet. |
mnemonic | Mnemonic | The mnemonic. |
Returns
T
The created instance.
Inherited from
AbstractHDWallet.fromMnemonic
Source
wallet/abstract-hdwallet.ts:180
fromPhrase()
Creates an HD wallet from a phrase.
Type parameters
Type parameter |
---|
T extends AbstractHDWallet <NeuteredAddressInfo , T > |
Parameters
Parameter | Type | Description |
---|---|---|
this | Object | The constructor of the HD wallet. |
phrase | string | The phrase. |
password ? | string | The password. |
wordlist ? | Wordlist | The wordlist. |
Returns
T
The created instance.
Inherited from
AbstractHDWallet.fromPhrase