#include #include #include #include "Main.h" #include "ui_Main.h" using namespace std; using namespace eth; Main::Main(QWidget *parent) : QDialog(parent), ui(new Ui::Main), m_client("AlephZero/v0.1") { setWindowFlags(Qt::Window); ui->setupUi(this); readSettings(); refresh(); m_refresh = new QTimer(this); connect(m_refresh, SIGNAL(timeout()), SLOT(refresh())); m_refresh->start(1000); } Main::~Main() { writeSettings(); delete ui; } void Main::writeSettings() { QSettings s("ethereum", "alephzero"); QByteArray b; b.resize(32); memcpy(b.data(), &m_myKey, 32); s.setValue("address", b); } void Main::readSettings() { QSettings s("ethereum", "alephzero"); QByteArray b = s.value("address").toByteArray(); if (b.isEmpty()) m_myKey = KeyPair::create(); else { h256 k; memcpy(&k, b.data(), 32); m_myKey = KeyPair(k); } m_client.setAddress(m_myKey.address()); /*for (uint i = 0; !s.value(QString("peer%1").arg(i)).isNull(); ++i) { s.value(QString("peer%1").arg(i)).toString(); }*/ } void Main::refresh() { ui->balance->setText(QString::fromStdString(toString(m_client.state().balance(m_myKey.address()))) + " wei"); ui->peerCount->setText(QString::fromStdString(toString(m_client.peerCount())) + " peer(s)"); ui->address->setText(QString::fromStdString(asHex(m_client.state().address().asArray()))); ui->peers->clear(); for (PeerInfo const& i: m_client.peers()) ui->peers->addItem(QString("%3 ms - %1:%2 - %4").arg(i.endpoint.address().to_string().c_str()).arg(i.endpoint.port()).arg(chrono::duration_cast(i.lastPing).count()).arg(i.clientVersion.c_str())); auto d = m_client.blockChain().details(); auto diff = BlockInfo(m_client.blockChain().block()).difficulty; ui->blockChain->setText(QString("%1 blocks @ (%3) - %2").arg(d.number).arg(toLog2(d.totalDifficulty)).arg(toLog2(diff))); } void Main::on_net_toggled() { if (ui->net->isChecked()) m_client.startNetwork(ui->port->value()); else m_client.stopNetwork(); } void Main::on_connect_clicked() { QString s = QInputDialog::getText(this, "Enter first peer", "Enter a peer to which a connection may be made", QLineEdit::Normal, "127.0.0.1:30303"); string host = s.section(":", 0, 0).toStdString(); short port = s.section(":", 1).toInt(); m_client.connect(host, port); } void Main::on_mine_toggled() { if (ui->mine->isChecked()) m_client.startMining(); else m_client.stopMining(); } void Main::on_send_clicked() { Secret s = Secret(fromUserHex(ui->address->text().toStdString())); Address r = Address(fromUserHex(ui->destination->text().toStdString())); m_client.transact(s, r, ui->value->value(), ui->fee->value()); refresh(); } void Main::on_create_clicked() { KeyPair p = KeyPair::create(); QString s = QString::fromStdString("New key:\n" + asHex(p.secret().asArray()) + "\nAddress: " + asHex(p.address().asArray())); QMessageBox::information(this, "New Key", s, QMessageBox::Ok); }