Bitcoin Transection Handler
Bitcoin Transection Handler
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
@dataclass
class TransactionResult:
"""Data class to store transaction results"""
success: bool
tx_id: Optional[str] = None
details: Optional[Dict] = None
error: Optional[str] = None
class BitcoinTransactionHandler:
"""Handles Bitcoin transactions with improved error handling and performance"""
return TransactionResult(
success=True,
details={
'balance_satoshi': balance_satoshi,
'balance_btc': float(balance_btc),
'address': wallet.get_key().address
}
)
except Exception as e:
logger.error(f"Balance check failed: {e}")
return TransactionResult(success=False, error=str(e))
def create_transaction(
self,
sender_wallet_name: str,
recipient_address: str,
amount_btc: Union[float, Decimal],
fee_strategy: str = 'normal'
) -> TransactionResult:
"""
Create and send a Bitcoin transaction with improved handling and features
Args:
sender_wallet_name: Name of the sender's wallet
recipient_address: Recipient's Bitcoin address
amount_btc: Amount to send in BTC
fee_strategy: 'low', 'normal', or 'high' for fee calculation
"""
try:
# Input validation
if not self._check_wallet_exists(sender_wallet_name):
raise ValueError(f"Wallet '{sender_wallet_name}' not found")
# Initialize wallet
wallet = Wallet(sender_wallet_name)
wallet.scan() # Update UTXO set
# Check balance
balance = wallet.balance()
if balance < amount_satoshi:
raise ValueError(
f"Insufficient funds. Required: {amount_btc} BTC, "
f"Available: {self._satoshi_to_btc(balance)} BTC"
)
tx_info = tx.info()
return TransactionResult(
success=True,
tx_id=tx.txid,
details={
'amount_btc': amount_btc,
'fee_strategy': fee_strategy,
'fee_satoshi': tx_info.get('fee', 0),
'confirmations': tx_info.get('confirmations', 0),
'timestamp': tx_info.get('timestamp'),
'status': tx_info.get('status'),
'hex': tx_info.get('hex')
}
)
except Exception as e:
logger.error(f"Transaction failed: {e}")
return TransactionResult(success=False, error=str(e))
return False
# Usage example
def main():
# Initialize handler
handler = BitcoinTransactionHandler(network='testnet')
# Transaction parameters
sender_wallet = 'TestWallet'
recipient = 'tb1qrecipientaddressfortestnet'
amount = 0.001
# Create transaction
tx_result = handler.create_transaction(
sender_wallet,
recipient,
amount,
fee_strategy='normal'
)
if tx_result.success:
logger.info(f"Transaction successful! Details: {tx_result.details}")
else:
logger.error(f"Transaction failed: {tx_result.error}")
if __name__ == "__main__":
main()