Browse Source

Fix for multiple transactions.

Show transaction nonces.
Fix when sending transactions with data.
cl-refactor
Gav Wood 11 years ago
parent
commit
46543c3b2e
  1. 28
      alethzero/MainWin.cpp
  2. 6
      libethereum/Client.cpp
  3. 2
      libethereum/PeerNetwork.cpp
  4. 6
      libethereum/Transaction.h

28
alethzero/MainWin.cpp

@ -144,10 +144,11 @@ void Main::refresh()
ui->transactionQueue->clear(); ui->transactionQueue->clear();
for (pair<h256, Transaction> const& i: m_client->pending()) for (pair<h256, Transaction> const& i: m_client->pending())
{ {
ui->transactionQueue->addItem(QString("%1 @ %2 <- %3") ui->transactionQueue->addItem(QString("%1 [%4] @ %2 <- %3")
.arg(formatBalance(i.second.value).c_str()) .arg(formatBalance(i.second.value).c_str())
.arg(asHex(i.second.receiveAddress.asArray()).c_str()) .arg(asHex(i.second.receiveAddress.asArray()).c_str())
.arg(asHex(i.second.sender().asArray()).c_str()) ); .arg(asHex(i.second.sender().asArray()).c_str())
.arg((unsigned)i.second.nonce));
} }
ui->transactions->clear(); ui->transactions->clear();
@ -159,10 +160,11 @@ void Main::refresh()
for (auto const& i: RLP(bc.block(h))[1]) for (auto const& i: RLP(bc.block(h))[1])
{ {
Transaction t(i.data()); Transaction t(i.data());
ui->transactions->addItem(QString("%1 @ %2 <- %3") ui->transactions->addItem(QString("%1 [%4] @ %2 <- %3")
.arg(formatBalance(t.value).c_str()) .arg(formatBalance(t.value).c_str())
.arg(asHex(t.receiveAddress.asArray()).c_str()) .arg(asHex(t.receiveAddress.asArray()).c_str())
.arg(asHex(t.sender().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; u256s data;
data.reserve(m_data.size()); data.reserve(m_data.size());
for (QString const& i: m_data) 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); m_client->transact(s, r, value(), data);
refresh(); refresh();
return; return;

6
libethereum/Client.cpp

@ -98,15 +98,15 @@ void Client::stopMining()
void Client::transact(Secret _secret, Address _dest, u256 _amount, u256s _data) void Client::transact(Secret _secret, Address _dest, u256 _amount, u256s _data)
{ {
m_lock.lock(); lock_guard<mutex> l(m_lock);
Transaction t; Transaction t;
t.nonce = m_s.transactionsFrom(toAddress(_secret)); cnote << "New transaction " << t;
t.nonce = m_mined.transactionsFrom(toAddress(_secret));
t.receiveAddress = _dest; t.receiveAddress = _dest;
t.value = _amount; t.value = _amount;
t.data = _data; t.data = _data;
t.sign(_secret); t.sign(_secret);
m_tq.attemptImport(t.rlp()); m_tq.attemptImport(t.rlp());
m_lock.unlock();
m_changed = true; m_changed = true;
} }

2
libethereum/PeerNetwork.cpp

@ -70,7 +70,7 @@ bool eth::isPrivateAddress(bi::address _addressToCheck)
{ {
bi::address_v4 v4Address = _addressToCheck.to_v4(); bi::address_v4 v4Address = _addressToCheck.to_v4();
bi::address_v4::bytes_type bytesToCheck = v4Address.to_bytes(); bi::address_v4::bytes_type bytesToCheck = v4Address.to_bytes();
if (bytesToCheck[0] == 10) if (bytesToCheck[0] == 10 || bytesToCheck[0] == 127)
return true; return true;
if (bytesToCheck[0] == 172 && (bytesToCheck[1] >= 16 && bytesToCheck[1] <=31)) if (bytesToCheck[0] == 172 && (bytesToCheck[1] >= 16 && bytesToCheck[1] <=31))
return true; return true;

6
libethereum/Transaction.h

@ -61,6 +61,12 @@ struct Transaction
using Transactions = std::vector<Transaction>; using Transactions = std::vector<Transaction>;
inline std::ostream& operator<<(std::ostream& _out, Transaction const& _t)
{
_out << "{" << _t.receiveAddress << "/" << _t.nonce << "*" << _t.value << "}";
return _out;
}
} }

Loading…
Cancel
Save