|
|
|
@ -1929,69 +1929,73 @@ void CSendDialog::OnButtonPaste(wxCommandEvent& event)
|
|
|
|
|
|
|
|
|
|
void CSendDialog::OnButtonSend(wxCommandEvent& event)
|
|
|
|
|
{
|
|
|
|
|
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())
|
|
|
|
|
static CCriticalSection cs_sendlock;
|
|
|
|
|
TRY_CRITICAL_BLOCK(cs_sendlock)
|
|
|
|
|
{
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
CWalletTx wtx;
|
|
|
|
|
string strAddress = (string)m_textCtrlAddress->GetValue();
|
|
|
|
|
|
|
|
|
|
// Parse bitcoin address
|
|
|
|
|
uint160 hash160;
|
|
|
|
|
bool fBitcoinAddress = AddressToHash160(strAddress, hash160);
|
|
|
|
|
// 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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (fBitcoinAddress)
|
|
|
|
|
{
|
|
|
|
|
// Send to bitcoin address
|
|
|
|
|
CScript scriptPubKey;
|
|
|
|
|
scriptPubKey << OP_DUP << OP_HASH160 << hash160 << OP_EQUALVERIFY << OP_CHECKSIG;
|
|
|
|
|
// Parse bitcoin address
|
|
|
|
|
uint160 hash160;
|
|
|
|
|
bool fBitcoinAddress = AddressToHash160(strAddress, hash160);
|
|
|
|
|
|
|
|
|
|
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())
|
|
|
|
|
if (fBitcoinAddress)
|
|
|
|
|
{
|
|
|
|
|
wxMessageBox(_("Invalid address "), _("Send Coins"));
|
|
|
|
|
return;
|
|
|
|
|
// 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();
|
|
|
|
|
// 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;
|
|
|
|
|
}
|
|
|
|
|
// 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, "");
|
|
|
|
|
CRITICAL_BLOCK(cs_mapAddressBook)
|
|
|
|
|
if (!mapAddressBook.count(strAddress))
|
|
|
|
|
SetAddressBookName(strAddress, "");
|
|
|
|
|
|
|
|
|
|
EndModal(true);
|
|
|
|
|
EndModal(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CSendDialog::OnButtonCancel(wxCommandEvent& event)
|
|
|
|
|