Prevent double-sends from quick double-button-clicks
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@174 1a98c847-1fd6-4fd8-948a-caf3550aa51b
This commit is contained in:
parent
c891967b6f
commit
3cac997e19
1 changed files with 60 additions and 56 deletions
116
ui.cpp
116
ui.cpp
|
@ -1929,69 +1929,73 @@ void CSendDialog::OnButtonPaste(wxCommandEvent& event)
|
|||
|
||||
void CSendDialog::OnButtonSend(wxCommandEvent& event)
|
||||
{
|
||||
CWalletTx wtx;
|
||||
string strAddress = (string)m_textCtrlAddress->GetValue();
|
||||
static CCriticalSection cs_sendlock;
|
||||
TRY_CRITICAL_BLOCK(cs_sendlock)
|
||||
{
|
||||
CWalletTx wtx;
|
||||
string strAddress = (string)m_textCtrlAddress->GetValue();
|
||||
|
||||
// Parse amount
|
||||
int64 nValue = 0;
|
||||
if (!ParseMoney(m_textCtrlAmount->GetValue(), nValue) || nValue <= 0)
|
||||
{
|
||||
wxMessageBox(_("Error in amount "), _("Send Coins"));
|
||||
return;
|
||||
}
|
||||
if (nValue > GetBalance())
|
||||
{
|
||||
wxMessageBox(_("Amount exceeds your balance "), _("Send Coins"));
|
||||
return;
|
||||
}
|
||||
if (nValue + nTransactionFee > GetBalance())
|
||||
{
|
||||
wxMessageBox(string(_("Total exceeds your balance when the ")) + FormatMoney(nTransactionFee) + _(" transaction fee is included "), _("Send Coins"));
|
||||
return;
|
||||
}
|
||||
|
||||
// Parse bitcoin address
|
||||
uint160 hash160;
|
||||
bool fBitcoinAddress = AddressToHash160(strAddress, hash160);
|
||||
|
||||
if (fBitcoinAddress)
|
||||
{
|
||||
// Send to bitcoin address
|
||||
CScript scriptPubKey;
|
||||
scriptPubKey << OP_DUP << OP_HASH160 << hash160 << OP_EQUALVERIFY << OP_CHECKSIG;
|
||||
|
||||
string strError = SendMoney(scriptPubKey, nValue, wtx, true);
|
||||
if (strError == "")
|
||||
wxMessageBox(_("Payment sent "), _("Sending..."));
|
||||
else if (strError != "ABORTED")
|
||||
wxMessageBox(strError + " ", _("Sending..."));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Parse IP address
|
||||
CAddress addr(strAddress);
|
||||
if (!addr.IsValid())
|
||||
// Parse amount
|
||||
int64 nValue = 0;
|
||||
if (!ParseMoney(m_textCtrlAmount->GetValue(), nValue) || nValue <= 0)
|
||||
{
|
||||
wxMessageBox(_("Invalid address "), _("Send Coins"));
|
||||
wxMessageBox(_("Error in amount "), _("Send Coins"));
|
||||
return;
|
||||
}
|
||||
if (nValue > GetBalance())
|
||||
{
|
||||
wxMessageBox(_("Amount exceeds your balance "), _("Send Coins"));
|
||||
return;
|
||||
}
|
||||
if (nValue + nTransactionFee > GetBalance())
|
||||
{
|
||||
wxMessageBox(string(_("Total exceeds your balance when the ")) + FormatMoney(nTransactionFee) + _(" transaction fee is included "), _("Send Coins"));
|
||||
return;
|
||||
}
|
||||
|
||||
// Message
|
||||
wtx.mapValue["to"] = strAddress;
|
||||
wtx.mapValue["from"] = m_textCtrlFrom->GetValue();
|
||||
wtx.mapValue["message"] = m_textCtrlMessage->GetValue();
|
||||
// Parse bitcoin address
|
||||
uint160 hash160;
|
||||
bool fBitcoinAddress = AddressToHash160(strAddress, hash160);
|
||||
|
||||
// Send to IP address
|
||||
CSendingDialog* pdialog = new CSendingDialog(this, addr, nValue, wtx);
|
||||
if (!pdialog->ShowModal())
|
||||
return;
|
||||
if (fBitcoinAddress)
|
||||
{
|
||||
// Send to bitcoin address
|
||||
CScript scriptPubKey;
|
||||
scriptPubKey << OP_DUP << OP_HASH160 << hash160 << OP_EQUALVERIFY << OP_CHECKSIG;
|
||||
|
||||
string strError = SendMoney(scriptPubKey, nValue, wtx, true);
|
||||
if (strError == "")
|
||||
wxMessageBox(_("Payment sent "), _("Sending..."));
|
||||
else if (strError != "ABORTED")
|
||||
wxMessageBox(strError + " ", _("Sending..."));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Parse IP address
|
||||
CAddress addr(strAddress);
|
||||
if (!addr.IsValid())
|
||||
{
|
||||
wxMessageBox(_("Invalid address "), _("Send Coins"));
|
||||
return;
|
||||
}
|
||||
|
||||
// Message
|
||||
wtx.mapValue["to"] = strAddress;
|
||||
wtx.mapValue["from"] = m_textCtrlFrom->GetValue();
|
||||
wtx.mapValue["message"] = m_textCtrlMessage->GetValue();
|
||||
|
||||
// Send to IP address
|
||||
CSendingDialog* pdialog = new CSendingDialog(this, addr, nValue, wtx);
|
||||
if (!pdialog->ShowModal())
|
||||
return;
|
||||
}
|
||||
|
||||
CRITICAL_BLOCK(cs_mapAddressBook)
|
||||
if (!mapAddressBook.count(strAddress))
|
||||
SetAddressBookName(strAddress, "");
|
||||
|
||||
EndModal(true);
|
||||
}
|
||||
|
||||
CRITICAL_BLOCK(cs_mapAddressBook)
|
||||
if (!mapAddressBook.count(strAddress))
|
||||
SetAddressBookName(strAddress, "");
|
||||
|
||||
EndModal(true);
|
||||
}
|
||||
|
||||
void CSendDialog::OnButtonCancel(wxCommandEvent& event)
|
||||
|
|
Loading…
Reference in a new issue