diff --git a/libethereum/ClientBase.cpp b/libethereum/ClientBase.cpp index 2cef62680..f463b0195 100644 --- a/libethereum/ClientBase.cpp +++ b/libethereum/ClientBase.cpp @@ -45,7 +45,7 @@ State ClientBase::asOf(BlockNumber _h) const return asOf(bc().numberHash(_h)); } -h256 ClientBase::submitTransaction(TransactionSkeleton const& _t, Secret const& _secret) +pair ClientBase::submitTransaction(TransactionSkeleton const& _t, Secret const& _secret) { prepareForTransaction(); @@ -59,7 +59,7 @@ h256 ClientBase::submitTransaction(TransactionSkeleton const& _t, Secret const& StructuredLogger::transactionReceived(t.sha3().abridged(), t.sender().abridged()); cnote << "New transaction " << t; - return t.sha3(); + return make_pair(t.sha3(), toAddress(ts.from, ts.nonce)); } // TODO: remove try/catch, allow exceptions diff --git a/libethereum/ClientBase.h b/libethereum/ClientBase.h index 05766b3a1..82f03def0 100644 --- a/libethereum/ClientBase.h +++ b/libethereum/ClientBase.h @@ -77,7 +77,7 @@ public: /// Submits the given transaction. /// @returns the new transaction's hash. - virtual h256 submitTransaction(TransactionSkeleton const& _t, Secret const& _secret) override; + virtual std::pair submitTransaction(TransactionSkeleton const& _t, Secret const& _secret) override; using Interface::submitTransaction; /// Makes the given call. Nothing is recorded into the state. diff --git a/libethereum/Interface.cpp b/libethereum/Interface.cpp index efa304bd5..e95e03a45 100644 --- a/libethereum/Interface.cpp +++ b/libethereum/Interface.cpp @@ -46,6 +46,5 @@ Address Interface::submitTransaction(Secret const& _secret, u256 const& _endowme ts.gas = _gas; ts.gasPrice = _gasPrice; ts.nonce = _nonce; - submitTransaction(ts, _secret); - return toAddress(toAddress(_secret), _nonce); + return submitTransaction(ts, _secret).second; } diff --git a/libethereum/Interface.h b/libethereum/Interface.h index c65670a30..973433af9 100644 --- a/libethereum/Interface.h +++ b/libethereum/Interface.h @@ -67,7 +67,7 @@ public: /// Submits a new transaction. /// @returns the transaction's hash. - virtual h256 submitTransaction(TransactionSkeleton const& _t, Secret const& _secret) = 0; + virtual std::pair submitTransaction(TransactionSkeleton const& _t, Secret const& _secret) = 0; /// Submits the given message-call transaction. void submitTransaction(Secret const& _secret, u256 const& _value, Address const& _dest, bytes const& _data = bytes(), u256 const& _gas = 10000, u256 const& _gasPrice = 10 * szabo, u256 const& _nonce = UndefinedU256); diff --git a/libweb3jsonrpc/AccountHolder.cpp b/libweb3jsonrpc/AccountHolder.cpp index f4b3a9f9f..43a7073d2 100644 --- a/libweb3jsonrpc/AccountHolder.cpp +++ b/libweb3jsonrpc/AccountHolder.cpp @@ -109,7 +109,7 @@ AddressHash SimpleAccountHolder::realAccounts() const h256 SimpleAccountHolder::authenticate(dev::eth::TransactionSkeleton const& _t) { if (isRealAccount(_t.from)) - return m_client()->submitTransaction(_t, m_keyManager.secret(_t.from, [&](){ return m_getPassword(_t.from); })); + return m_client()->submitTransaction(_t, m_keyManager.secret(_t.from, [&](){ return m_getPassword(_t.from); })).first; else if (isProxyAccount(_t.from)) queueTransaction(_t); return h256(); @@ -118,7 +118,7 @@ h256 SimpleAccountHolder::authenticate(dev::eth::TransactionSkeleton const& _t) h256 FixedAccountHolder::authenticate(dev::eth::TransactionSkeleton const& _t) { if (isRealAccount(_t.from)) - return m_client()->submitTransaction(_t, m_accounts[_t.from]); + return m_client()->submitTransaction(_t, m_accounts[_t.from]).first; else if (isProxyAccount(_t.from)) queueTransaction(_t); return h256(); diff --git a/mix/ClientModel.cpp b/mix/ClientModel.cpp index eae3f8834..90ff19feb 100644 --- a/mix/ClientModel.cpp +++ b/mix/ClientModel.cpp @@ -674,8 +674,7 @@ void ClientModel::debugRecord(unsigned _index) Address ClientModel::deployContract(bytes const& _code, TransactionSettings const& _ctrTransaction) { - Address newAddress = m_client->submitTransaction(_ctrTransaction.sender, _ctrTransaction.value, _code, _ctrTransaction.gas, _ctrTransaction.gasPrice, _ctrTransaction.gasAuto); - return newAddress; + return m_client->submitTransaction(_ctrTransaction.sender, _ctrTransaction.value, _code, _ctrTransaction.gas, _ctrTransaction.gasPrice, _ctrTransaction.gasAuto); } void ClientModel::callAddress(Address const& _contract, bytes const& _data, TransactionSettings const& _tr) diff --git a/mix/MixClient.cpp b/mix/MixClient.cpp index 7978ff1ac..c73763076 100644 --- a/mix/MixClient.cpp +++ b/mix/MixClient.cpp @@ -303,14 +303,14 @@ State MixClient::asOf(h256 const& _block) const return ret; } -h256 MixClient::submitTransaction(eth::TransactionSkeleton const& _ts, Secret const& _secret, bool _gasAuto) +pair MixClient::submitTransaction(eth::TransactionSkeleton const& _ts, Secret const& _secret, bool _gasAuto) { WriteGuard l(x_state); TransactionSkeleton ts = _ts; ts.nonce = m_state.transactionsFrom(toAddress(_secret)); eth::Transaction t(ts, _secret); executeTransaction(t, m_state, false, _gasAuto, _secret); - return t.sha3(); + return make_pair(t.sha3(), toAddress(ts.from, ts.nonce)); } dev::eth::ExecutionResult MixClient::call(Address const& _from, u256 _value, Address _dest, bytes const& _data, u256 _gas, u256 _gasPrice, BlockNumber _blockNumber, bool _gasAuto, FudgeFactor _ff) diff --git a/mix/MixClient.h b/mix/MixClient.h index e4ad9c133..748dd1cdc 100644 --- a/mix/MixClient.h +++ b/mix/MixClient.h @@ -58,8 +58,8 @@ public: dev::eth::ExecutionResult create(Address const& _secret, u256 _value, bytes const& _data = bytes(), u256 _gas = 10000, u256 _gasPrice = 10 * eth::szabo, eth::BlockNumber _blockNumber = eth::PendingBlock, eth::FudgeFactor _ff = eth::FudgeFactor::Strict) override; using ClientBase::submitTransaction; - virtual h256 submitTransaction(eth::TransactionSkeleton const& _ts, Secret const& _secret) override { return submitTransaction(_ts, _secret, false); } - h256 submitTransaction(eth::TransactionSkeleton const& _ts, Secret const& _secret, bool _gasAuto); + virtual std::pair submitTransaction(eth::TransactionSkeleton const& _ts, Secret const& _secret) override { return submitTransaction(_ts, _secret, false); } + std::pair submitTransaction(eth::TransactionSkeleton const& _ts, Secret const& _secret, bool _gasAuto); dev::eth::ExecutionResult call(Address const& _secret, u256 _value, Address _dest, bytes const& _data, u256 _gas, u256 _gasPrice, eth::BlockNumber _blockNumber, bool _gasAuto, eth::FudgeFactor _ff = eth::FudgeFactor::Strict); void setAddress(Address _us) override; diff --git a/neth/main.cpp b/neth/main.cpp index d5cb4bb4b..5ec253440 100644 --- a/neth/main.cpp +++ b/neth/main.cpp @@ -1057,9 +1057,7 @@ int main(int argc, char** argv) else if (gas < minGas) cwarn << "Minimum gas amount is" << minGas; else - { c->submitTransaction(us.secret(), endowment, init, gas); - } } } else if (c && cmd == "inspect")