Handle Errors
Handle errors, manage fees, and dispose of sensitive data.
This guide explains how to handle transaction errors, handle connection errors, and follow best practices for fee management and memory cleanup.
Transaction Errors
Transactions sent via account.sendTransaction() can fail for several reasons. Wrap transaction calls in a try/catch block to handle specific error types:
try {
const result = await account.sendTransaction({
to: 'bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh',
value: 100000n
})
console.log('Transaction hash:', result.hash)
} catch (error) {
if (error.message.includes('Insufficient balance')) {
console.error('Not enough funds in wallet')
} else if (error.message.includes('dust limit')) {
console.error('Amount is below the minimum dust limit')
} else if (error.message.includes('Invalid address')) {
console.error('Recipient address is invalid')
} else {
console.error('Transaction failed:', error.message)
}
}Connection Errors
Network issues with the Electrum server can cause failures across all operations. Handle connection errors at a higher level:
try {
const balance = await account.getBalance()
console.log('Balance:', balance, 'satoshis')
} catch (error) {
if (error.message.includes('ECONNREFUSED') || error.message.includes('timeout')) {
console.error('Network error: check Electrum server connection')
} else if (error.message.includes('Invalid seed')) {
console.error('Invalid seed phrase provided')
} else {
console.error('Operation failed:', error.message)
}
}Best Practices
Fee Management
You can retrieve current network fee rates using wallet.getFeeRates():
const feeRates = await wallet.getFeeRates()
console.log('Normal fee rate:', feeRates.normal, 'sat/vB')
console.log('Fast fee rate:', feeRates.fast, 'sat/vB')wallet.getFeeRates() fetches rates from the mempool.space API, while account.sendTransaction() estimates fees from the connected Electrum server. Use getFeeRates() for display purposes.
Dispose of Sensitive Data
For security, clear sensitive data from memory when a session is complete. Use account.dispose() and wallet.dispose() to securely wipe private keys:
try {
const result = await account.sendTransaction({
to: 'bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh',
value: 100000n
})
console.log('Transaction hash:', result.hash)
} finally {
account.dispose()
wallet.dispose()
}Always call dispose() when finished with accounts. Private keys are securely wiped from memory using sodium_memzero. Electrum connections are automatically closed. Disposal is irreversible.