diff --git a/alethzero/MainWin.cpp b/alethzero/MainWin.cpp index 7f5847009..1036c1ea0 100644 --- a/alethzero/MainWin.cpp +++ b/alethzero/MainWin.cpp @@ -144,10 +144,11 @@ void Main::refresh() ui->transactionQueue->clear(); for (pair const& i: m_client->pending()) { - ui->transactionQueue->addItem(QString("%1 @ %2 <- %3") - .arg(formatBalance(i.second.value).c_str()) - .arg(asHex(i.second.receiveAddress.asArray()).c_str()) - .arg(asHex(i.second.sender().asArray()).c_str()) ); + ui->transactionQueue->addItem(QString("%1 [%4] @ %2 <- %3") + .arg(formatBalance(i.second.value).c_str()) + .arg(asHex(i.second.receiveAddress.asArray()).c_str()) + .arg(asHex(i.second.sender().asArray()).c_str()) + .arg((unsigned)i.second.nonce)); } ui->transactions->clear(); @@ -159,10 +160,11 @@ void Main::refresh() for (auto const& i: RLP(bc.block(h))[1]) { Transaction t(i.data()); - ui->transactions->addItem(QString("%1 @ %2 <- %3") - .arg(formatBalance(t.value).c_str()) - .arg(asHex(t.receiveAddress.asArray()).c_str()) - .arg(asHex(t.sender().asArray()).c_str()) ); + ui->transactions->addItem(QString("%1 [%4] @ %2 <- %3") + .arg(formatBalance(t.value).c_str()) + .arg(asHex(t.receiveAddress.asArray()).c_str()) + .arg(asHex(t.sender().asArray()).c_str()) + .arg((unsigned)t.nonce)); } } } @@ -310,7 +312,15 @@ void Main::on_send_clicked() u256s data; data.reserve(m_data.size()); for (QString const& i: m_data) - data.push_back(u256(i.toStdString())); + { + u256 d = 0; + try + { + d = u256(i.toStdString()); + } + catch (...) {} + data.push_back(d); + } m_client->transact(s, r, value(), data); refresh(); return; diff --git a/libethereum/Client.cpp b/libethereum/Client.cpp index a22b10498..cd0e72d87 100644 --- a/libethereum/Client.cpp +++ b/libethereum/Client.cpp @@ -98,15 +98,15 @@ void Client::stopMining() void Client::transact(Secret _secret, Address _dest, u256 _amount, u256s _data) { - m_lock.lock(); + lock_guard l(m_lock); Transaction t; - t.nonce = m_s.transactionsFrom(toAddress(_secret)); + cnote << "New transaction " << t; + t.nonce = m_mined.transactionsFrom(toAddress(_secret)); t.receiveAddress = _dest; t.value = _amount; t.data = _data; t.sign(_secret); m_tq.attemptImport(t.rlp()); - m_lock.unlock(); m_changed = true; } diff --git a/libethereum/PeerNetwork.cpp b/libethereum/PeerNetwork.cpp index 77e446af8..1b1afeba3 100644 --- a/libethereum/PeerNetwork.cpp +++ b/libethereum/PeerNetwork.cpp @@ -70,7 +70,7 @@ bool eth::isPrivateAddress(bi::address _addressToCheck) { bi::address_v4 v4Address = _addressToCheck.to_v4(); bi::address_v4::bytes_type bytesToCheck = v4Address.to_bytes(); - if (bytesToCheck[0] == 10) + if (bytesToCheck[0] == 10 || bytesToCheck[0] == 127) return true; if (bytesToCheck[0] == 172 && (bytesToCheck[1] >= 16 && bytesToCheck[1] <=31)) return true; diff --git a/libethereum/Transaction.h b/libethereum/Transaction.h index bacd125f8..d7029a0f2 100644 --- a/libethereum/Transaction.h +++ b/libethereum/Transaction.h @@ -61,6 +61,12 @@ struct Transaction using Transactions = std::vector; +inline std::ostream& operator<<(std::ostream& _out, Transaction const& _t) +{ + _out << "{" << _t.receiveAddress << "/" << _t.nonce << "*" << _t.value << "}"; + return _out; +} + }