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
Properties
Property | Modifier | Type | Default value | Description |
---|---|---|---|---|
_addressesMap | private | Map <string , QiAddressInfo []> | ... | A map containing address information for all addresses known to the wallet. This includes: - BIP44 derived addresses (external) - BIP44 derived change addresses - BIP47 payment code derived addresses for receiving funds The key is the derivation path or payment code, and the value is an array of QiAddressInfo objects. |
_paymentCodeSendAddressMap | private | Map <string , QiAddressInfo []> | ... | A map containing address information for sending funds to counterparties using BIP47 payment codes. Remarks The key is the receiver’s payment code, and the value is an array of QiAddressInfo objects. These addresses are derived from the receiver’s payment code and are used only for sending funds. They are not part of the set of addresses that this wallet can control or spend from. This map is used to keep track of addresses generated for each payment channel to ensure proper address rotation and avoid address reuse when sending funds. |
Accessors
openChannels
Gets the payment codes for all open channels.
Returns
string
[]
The payment codes for all open channels.
Source
xPub
Returns the extended public key of the root node of the HD wallet.
Returns
string
The extended public key.
Source
Methods
_findLastUsedIndex()
Finds the last used index in an array of QiAddressInfo objects. If no index is found, returns -1.
Parameters
Parameter | Type | Description |
---|---|---|
addresses | undefined | QiAddressInfo [] | The array of QiAddressInfo objects. |
account | number | - |
zone | Zone | - |
Returns
number
The last used index.
Source
_getNextQiAddress()
Derives the next Qi BIP 44 address for the specified account and zone.
Parameters
Parameter | Type | Description |
---|---|---|
account | number | The account number. |
zone | Zone | The zone. |
isChange | boolean | Whether to derive a change address. |
Returns
The next Qi address information.
Source
_getPaymentCodePrivate()
Generates a BIP47 private payment code for the specified account. The payment code is created by combining the account’s public key and chain code.
Parameters
Parameter | Type | Description |
---|---|---|
account | number | The account index for which to generate the private payment code. |
Returns
PaymentCodePrivate
A promise that resolves to the PaymentCodePrivate instance.
Source
_scan()
Internal method to scan the specified zone for addresses with unspent outputs. This method handles the actual scanning logic, generating new addresses until the gap limit is reached for both gap and change 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 provider is not set.
Source
_scanDerivationPath()
Scans for the next address in the specified zone and account, checking for associated outpoints, and updates the address count and gap addresses accordingly.
Parameters
Parameter | Type | Description |
---|---|---|
path | string | - |
zone | Zone | The zone in which the address is being scanned. |
account | number | The index of the account for which the address is being scanned. |
Returns
Promise
<void
>
A promise that resolves when the scan is complete.
Throws
If an error occurs during the address scanning or outpoints retrieval process.
Source
addAddress()
Adds an address to the wallet.
Parameters
Parameter | Type | Default value | Description |
---|---|---|---|
account | number | undefined | The account number. |
addressIndex | number | undefined | The address index. |
isChange ? | boolean | false | Whether the address is a change address. Default is false |
Returns
The added address info.
Inherited from
AbstractHDWallet.addAddress
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
checkPendingOutpoints()
Checks the status of pending outpoints and updates the wallet’s UTXO set accordingly.
Parameters
Parameter | Type | Description |
---|---|---|
zone | Zone | The zone in which to check the pending outpoints. |
Returns
Promise
<void
>
Source
connect()
Connects the wallet to a provider.
Parameters
Parameter | Type | Description |
---|---|---|
provider | Provider | The provider. |
Returns
void
Inherited from
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. |
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()
Gets the address info for a given address.
Parameters
Parameter | Type | Description |
---|---|---|
address | string | The address. |
Returns
null
| NeuteredAddressInfo
The address info or null if not found.
Inherited from
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.
Inherited from
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 the specified zone, including locked UTXOs.
Parameters
Parameter | Type | Description |
---|---|---|
zone | Zone | The zone to get the balance for. |
Returns
bigint
The total balance for the zone.
Source
getChangeAddressInfo()
Gets the address info for a given address.
Parameters
Parameter | Type | Description |
---|---|---|
address | string | The address. |
Returns
null
| QiAddressInfo
The address info or null if not found.
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
getGapPaymentChannelAddresses()
Gets the gap payment channel addresses for the specified payment code.
Parameters
Parameter | Type | Description |
---|---|---|
paymentCode | string | The payment code. |
Returns
The gap payment channel addresses for the payment code.
Source
getLockedBalanceForZone()
Gets the locked balance for the specified zone.
Parameters
Parameter | Type | Description |
---|---|---|
zone | Zone | The zone to get the locked balance for. |
blockNumber ? | number | - |
Returns
Promise
<bigint
>
The locked balance for the zone.
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.
Inherited from
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
getSpendableBalanceForZone()
Gets the locked balance for the specified zone.
Parameters
Parameter | Type | Description |
---|---|---|
zone | Zone | The zone to get the locked balance for. |
blockNumber ? | number | - |
Returns
Promise
<bigint
>
The locked balance for the zone.
Source
importOutpoints()
Imports an array of outpoints.
Parameters
Parameter | Type | Description |
---|---|---|
outpoints | OutpointInfo [] | The outpoints to import. |
Returns
void
Source
locateAddressInfo()
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.
Source
moveOutpointToAvailable()
Moves an outpoint from pending back to available outpoints.
Parameters
Parameter | Type | Description |
---|---|---|
outpointInfo | OutpointInfo | The outpoint info to move. |
Returns
void
Source
moveOutpointsToPending()
Moves specified inputs to pending outpoints.
Parameters
Parameter | Type | Description |
---|---|---|
inputs | TxInput [] | List of inputs used in the transaction. |
Returns
void
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. |
minDenominationToUse ? | number | The minimum denomination to allow for the UTXOs. |
Returns
UTXO
[]
An array of UTXO objects.
Source
removeOutpointFromPending()
Removes an outpoint from the pending outpoints.
Parameters
Parameter | Type | Description |
---|---|---|
outpoint | Outpoint | The outpoint to remove. |
Returns
void
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. |
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 |
Returns
Promise
<void
>
A promise that resolves when the sync is complete.
Throws
If the zone is invalid.
Source
createRandom()
Creates a random HD wallet.
Type parameters
Type parameter |
---|
T extends AbstractHDWallet <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
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 <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
fromPhrase()
Creates an HD wallet from a phrase.
Type parameters
Type parameter |
---|
T extends AbstractHDWallet <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
Source
Was this page helpful?