feat: Add private key input validation and implement insufficient balance check for ALGO transactions.

This commit is contained in:
void-57 2025-12-05 15:20:17 +05:30
parent 3358208817
commit 3c93a8637e

View File

@ -788,6 +788,23 @@
return; return;
} }
// Validate input - reject addresses, only accept private keys
const hexOnly = /^[0-9a-fA-F]+$/.test(privateKey);
const isHexKey = hexOnly && (privateKey.length === 64 || privateKey.length === 128);
const isBase58Key = !hexOnly && privateKey.length >= 50;
// Check if it looks like an address (ALGO address is 58 chars, BTC/FLO addresses are shorter)
if (privateKey.length === 58 || (privateKey.length >= 25 && privateKey.length <= 35 && !isBase58Key)) {
showNotification('⚠️ Addresses are not allowed. Please enter a BTC/FLO/ALGO private key', 'error');
return;
}
// Validate private key format
if (!isHexKey && !isBase58Key) {
showNotification('⚠️ Invalid private key format. Please enter a valid BTC/FLO/ALGO private key', 'error');
return;
}
try { try {
showLoading(true); showLoading(true);
const result = await algoCrypto.generateMultiChain(privateKey); const result = await algoCrypto.generateMultiChain(privateKey);
@ -1428,11 +1445,58 @@
const fromAddress = walletResult.ALGO.address; const fromAddress = walletResult.ALGO.address;
const algoPrivateKey = walletResult.ALGO.privateKey; const algoPrivateKey = walletResult.ALGO.privateKey;
// Get current balance
const accountInfo = await algoAPI.getBalance(fromAddress);
const currentBalance = accountInfo.balanceAlgo;
// Get transaction parameters // Get transaction parameters
const txParams = await algoAPI.getTransactionParams(); const txParams = await algoAPI.getTransactionParams();
const feeAlgo = txParams.fee / 1000000; const feeAlgo = txParams.fee / 1000000;
const totalAlgo = amount + feeAlgo; const totalAlgo = amount + feeAlgo;
// Check if balance is sufficient
if (totalAlgo > currentBalance) {
const errorMsg = `Insufficient balance! You need ${totalAlgo.toFixed(6)} ALGO (${amount.toFixed(6)} + ${feeAlgo.toFixed(6)} fee) but only have ${currentBalance.toFixed(6)} ALGO available.`;
showNotification('❌ ' + errorMsg, 'error');
// Show error in output area as well
const outputEl = document.getElementById('sendOutput');
outputEl.innerHTML = `
<div class="tx-details-card card" style="border-left: 4px solid var(--error-color);">
<div class="tx-details-header">
<div class="tx-status" style="color: var(--error-color);">
<i class="fa-solid fa-circle-exclamation"></i>
<span>Insufficient Balance</span>
</div>
</div>
<div class="tx-details-body">
<div class="tx-detail-row">
<span class="detail-label">Current Balance</span>
<span class="detail-value">${currentBalance.toFixed(6)} ALGO</span>
</div>
<div class="tx-detail-row">
<span class="detail-label">Amount to Send</span>
<span class="detail-value">${amount.toFixed(6)} ALGO</span>
</div>
<div class="tx-detail-row">
<span class="detail-label">Transaction Fee</span>
<span class="detail-value fee">${feeAlgo.toFixed(6)} ALGO</span>
</div>
<div class="tx-detail-row highlight" style="color: var(--error-color);">
<span class="detail-label">Total Required</span>
<span class="detail-value">${totalAlgo.toFixed(6)} ALGO</span>
</div>
<div class="tx-detail-row" style="color: var(--error-color); font-weight: 600;">
<span class="detail-label">Shortfall</span>
<span class="detail-value">${(totalAlgo - currentBalance).toFixed(6)} ALGO</span>
</div>
</div>
</div>
`;
outputEl.style.display = 'block';
return;
}
// Store pending transaction data // Store pending transaction data
pendingTx = { pendingTx = {
from: fromAddress, from: fromAddress,