diff --git a/alethzero/Main.ui b/alethzero/Main.ui
index 81622e48e..7fa72bae2 100644
--- a/alethzero/Main.ui
+++ b/alethzero/Main.ui
@@ -130,9 +130,7 @@
Deb&ug
-
-
@@ -502,19 +500,6 @@
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
-
-
@@ -541,13 +526,6 @@
- -
-
-
- &Execute
-
-
-
-
@@ -599,6 +577,33 @@
+ -
+
+
+ &Execute
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+ -
+
+
+ De&bug
+
+
+
@@ -966,14 +971,6 @@
&Preview
-
-
- true
-
-
- &Debug EVM Execution
-
-
false
@@ -985,17 +982,6 @@
F10
-
-
- false
-
-
- &Continue
-
-
- F5
-
-
diff --git a/alethzero/MainWin.cpp b/alethzero/MainWin.cpp
index e7f362869..e62bebf80 100644
--- a/alethzero/MainWin.cpp
+++ b/alethzero/MainWin.cpp
@@ -1000,6 +1000,7 @@ void Main::on_mine_triggered()
void Main::on_send_clicked()
{
+ debugFinished();
u256 totalReq = value() + fee();
m_client->lock();
for (auto i: m_myKeys)
@@ -1007,52 +1008,62 @@ void Main::on_send_clicked()
{
m_client->unlock();
Secret s = i.secret();
- if (ui->enableDebug->isChecked())
+ if (isCreation())
+ m_client->transact(s, value(), m_data, m_init, ui->gas->value(), gasPrice());
+ else
+ m_client->transact(s, value(), fromString(ui->destination->currentText()), m_data, ui->gas->value(), gasPrice());
+ refresh();
+ return;
+ }
+ m_client->unlock();
+ statusBar()->showMessage("Couldn't make transaction: no single account contains at least the required amount.");
+}
+
+void Main::on_debug_clicked()
+{
+ debugFinished();
+ u256 totalReq = value() + fee();
+ m_client->lock();
+ for (auto i: m_myKeys)
+ if (m_client->state().balance(i.address()) >= totalReq)
+ {
+ m_client->unlock();
+ Secret s = i.secret();
+ m_client->lock();
+ m_executiveState = state();
+ m_client->unlock();
+ m_currentExecution = unique_ptr(new Executive(m_executiveState));
+ Transaction t;
+ t.nonce = m_executiveState.transactionsFrom(toAddress(s));
+ t.value = value();
+ t.gasPrice = gasPrice();
+ t.gas = ui->gas->value();
+ t.data = m_data;
+ if (isCreation())
{
- m_client->lock();
- m_executiveState = state();
- m_client->unlock();
- m_currentExecution = unique_ptr(new Executive(m_executiveState));
- Transaction t;
- t.nonce = m_executiveState.transactionsFrom(toAddress(s));
- t.value = value();
- t.gasPrice = gasPrice();
- t.gas = ui->gas->value();
- t.data = m_data;
- if (isCreation())
- {
- t.receiveAddress = Address();
- t.init = m_init;
- }
- else
- {
- t.receiveAddress = fromString(ui->destination->currentText());
- t.data = m_data;
- }
- t.sign(s);
- auto r = t.rlp();
- m_currentExecution->setup(&r);
-
- m_pcWarp.clear();
- m_history.clear();
- bool ok = true;
- while (ok)
- {
- m_history.append(WorldState({m_currentExecution->vm().curPC(), m_currentExecution->vm().gas(), m_currentExecution->vm().stack(), m_currentExecution->vm().memory(), m_currentExecution->state().contractStorage(m_currentExecution->ext().myAddress)}));
- ok = !m_currentExecution->go(1);
- }
- initDebugger();
- m_currentExecution.reset();
- updateDebugger();
+ t.receiveAddress = Address();
+ t.init = m_init;
}
else
{
- if (isCreation())
- m_client->transact(s, value(), m_data, m_init, ui->gas->value(), gasPrice());
- else
- m_client->transact(s, value(), fromString(ui->destination->currentText()), m_data, ui->gas->value(), gasPrice());
- refresh();
+ t.receiveAddress = fromString(ui->destination->currentText());
+ t.data = m_data;
+ }
+ t.sign(s);
+ auto r = t.rlp();
+ m_currentExecution->setup(&r);
+
+ m_pcWarp.clear();
+ m_history.clear();
+ bool ok = true;
+ while (ok)
+ {
+ m_history.append(WorldState({m_currentExecution->vm().curPC(), m_currentExecution->vm().gas(), m_currentExecution->vm().stack(), m_currentExecution->vm().memory(), m_currentExecution->state().contractStorage(m_currentExecution->ext().myAddress)}));
+ ok = !m_currentExecution->go(1);
}
+ initDebugger();
+ m_currentExecution.reset();
+ updateDebugger();
return;
}
m_client->unlock();
@@ -1065,14 +1076,6 @@ void Main::on_create_triggered()
m_keysChanged = true;
}
-void Main::on_enableDebug_triggered()
-{
- ui->debugPanel->setEnabled(ui->enableDebug->isChecked());
- ui->send->setText(ui->enableDebug->isChecked() ? "D&ebug" : "&Execute");
- if (!ui->enableDebug->isChecked())
- debugFinished();
-}
-
void Main::on_debugStep_triggered()
{
ui->debugTimeline->setValue(ui->debugTimeline->value() + 1);
@@ -1088,18 +1091,14 @@ void Main::debugFinished()
ui->debugStorage->setHtml("");
ui->debugStateInfo->setText("");
ui->send->setEnabled(true);
- ui->enableDebug->setEnabled(true);
ui->debugStep->setEnabled(false);
- ui->debugContinue->setEnabled(false);
ui->debugPanel->setEnabled(false);
}
void Main::initDebugger()
{
ui->send->setEnabled(false);
- ui->enableDebug->setEnabled(false);
ui->debugStep->setEnabled(true);
- ui->debugContinue->setEnabled(true);
ui->debugPanel->setEnabled(true);
ui->debugCode->setEnabled(false);
ui->debugTimeline->setMinimum(0);
diff --git a/alethzero/MainWin.h b/alethzero/MainWin.h
index b90d024d4..488454b53 100644
--- a/alethzero/MainWin.h
+++ b/alethzero/MainWin.h
@@ -298,7 +298,7 @@ private slots:
void on_quit_triggered() { close(); }
void on_urlEdit_editingFinished();
void on_debugStep_triggered();
- void on_enableDebug_triggered();
+ void on_debug_clicked();
void on_debugTimeline_valueChanged();
void refresh(bool _override = false);