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);