Browse Source

Remove old Client network code & API.

Move over JsonRpcServer to WebThree.
cl-refactor
Gav Wood 10 years ago
parent
commit
5735e8c55e
  1. 4
      CMakeLists.txt
  2. 4
      alethzero/MainWin.cpp
  3. 34
      eth/EthStubServer.cpp
  4. 7
      eth/EthStubServer.h
  5. 19
      eth/main.cpp
  6. 170
      libethereum/Client.cpp
  7. 34
      libethereum/Client.h
  8. 4
      libqethereum/QmlEthereum.cpp
  9. 8
      libqethereum/QmlEthereum.h
  10. 2
      test/TestHelper.cpp
  11. 10
      third/MainWin.cpp

4
CMakeLists.txt

@ -353,7 +353,7 @@ if (NOT LANGUAGES)
add_subdirectory(exp) add_subdirectory(exp)
endif () endif ()
if(NOT ("${TARGET_PLATFORM}" STREQUAL "w64")) if(NOT ("${TARGET_PLATFORM}" STREQUAL "w64"))
add_subdirectory(neth) #add_subdirectory(neth) // resurect once moved over to WebThree API.
endif () endif ()
if(QTQML) if(QTQML)
add_definitions(-DETH_QTQML) add_definitions(-DETH_QTQML)
@ -369,7 +369,7 @@ if (NOT LANGUAGES)
add_subdirectory(third) add_subdirectory(third)
if(QTQML) if(QTQML)
#add_subdirectory(iethxi) #add_subdirectory(iethxi)
add_subdirectory(walleth) #add_subdirectory(walleth) // resurect once we want to submit ourselves to QML.
endif() endif()
endif() endif()
endif() endif()

4
alethzero/MainWin.cpp

@ -506,7 +506,7 @@ void Main::writeSettings()
s.setValue("privateChain", m_privateChain); s.setValue("privateChain", m_privateChain);
s.setValue("verbosity", ui->verbosity->value()); s.setValue("verbosity", ui->verbosity->value());
bytes d = ethereum()->savePeers(); bytes d = m_webThree->savePeers();
if (d.size()) if (d.size())
m_peers = QByteArray((char*)d.data(), (int)d.size()); m_peers = QByteArray((char*)d.data(), (int)d.size());
s.setValue("peers", m_peers); s.setValue("peers", m_peers);
@ -1250,7 +1250,7 @@ void Main::on_contracts_currentItemChanged()
void Main::on_idealPeers_valueChanged() void Main::on_idealPeers_valueChanged()
{ {
ethereum()->setIdealPeerCount(ui->idealPeers->value()); m_webThree->setIdealPeerCount(ui->idealPeers->value());
} }
void Main::on_ourAccounts_doubleClicked() void Main::on_ourAccounts_doubleClicked()

34
eth/EthStubServer.cpp

@ -25,14 +25,15 @@
#include <libevmface/Instruction.h> #include <libevmface/Instruction.h>
#include <liblll/Compiler.h> #include <liblll/Compiler.h>
#include <libethereum/Client.h> #include <libethereum/Client.h>
#include <libwebthree/WebThree.h>
#include "CommonJS.h" #include "CommonJS.h"
using namespace std; using namespace std;
using namespace dev; using namespace dev;
using namespace dev::eth; using namespace dev::eth;
EthStubServer::EthStubServer(jsonrpc::AbstractServerConnector* _conn, Client& _client): EthStubServer::EthStubServer(jsonrpc::AbstractServerConnector* _conn, WebThreeDirect& _web3):
AbstractEthStubServer(_conn), AbstractEthStubServer(_conn),
m_client(_client) m_web3(_web3)
{ {
} }
@ -59,20 +60,25 @@ Json::Value EthStubServer::procedures()
return ret; return ret;
} }
dev::eth::Client& EthStubServer::ethereum() const
{
return *m_web3.ethereum();
}
std::string EthStubServer::coinbase() std::string EthStubServer::coinbase()
{ {
return toJS(m_client.address()); return toJS(ethereum().address());
} }
std::string EthStubServer::balanceAt(std::string const& _a) std::string EthStubServer::balanceAt(std::string const& _a)
{ {
return toJS(m_client.balanceAt(jsToAddress(_a), 0)); return toJS(ethereum().balanceAt(jsToAddress(_a), 0));
} }
Json::Value EthStubServer::check(Json::Value const& _as) Json::Value EthStubServer::check(Json::Value const& _as)
{ {
// TODO // TODO
// if (m_client.changed()) // if (ethereum().changed())
return _as; return _as;
/* else /* else
{ {
@ -84,7 +90,7 @@ Json::Value EthStubServer::check(Json::Value const& _as)
std::string EthStubServer::create(const std::string& _bCode, const std::string& _sec, const std::string& _xEndowment, const std::string& _xGas, const std::string& _xGasPrice) std::string EthStubServer::create(const std::string& _bCode, const std::string& _sec, const std::string& _xEndowment, const std::string& _xGas, const std::string& _xGasPrice)
{ {
Address ret = m_client.transact(jsToSecret(_sec), jsToU256(_xEndowment), jsToBytes(_bCode), jsToU256(_xGas), jsToU256(_xGasPrice)); Address ret = ethereum().transact(jsToSecret(_sec), jsToU256(_xEndowment), jsToBytes(_bCode), jsToU256(_xGas), jsToU256(_xGasPrice));
return toJS(ret); return toJS(ret);
} }
@ -100,17 +106,17 @@ std::string EthStubServer::gasPrice()
bool EthStubServer::isContractAt(const std::string& _a) bool EthStubServer::isContractAt(const std::string& _a)
{ {
return m_client.codeAt(jsToAddress(_a), 0).size(); return ethereum().codeAt(jsToAddress(_a), 0).size();
} }
bool EthStubServer::isListening() bool EthStubServer::isListening()
{ {
return m_client.haveNetwork(); return m_web3.haveNetwork();
} }
bool EthStubServer::isMining() bool EthStubServer::isMining()
{ {
return m_client.isMining(); return ethereum().isMining();
} }
std::string EthStubServer::key() std::string EthStubServer::key()
@ -130,23 +136,23 @@ Json::Value EthStubServer::keys()
int EthStubServer::peerCount() int EthStubServer::peerCount()
{ {
return m_client.peerCount(); return m_web3.peerCount();
} }
std::string EthStubServer::storageAt(const std::string& _a, const std::string& x) std::string EthStubServer::storageAt(const std::string& _a, const std::string& x)
{ {
return toJS(m_client.stateAt(jsToAddress(_a), jsToU256(x), 0)); return toJS(ethereum().stateAt(jsToAddress(_a), jsToU256(x), 0));
} }
Json::Value EthStubServer::transact(const std::string& _aDest, const std::string& _bData, const std::string& _sec, const std::string& _xGas, const std::string& _xGasPrice, const std::string& _xValue) Json::Value EthStubServer::transact(const std::string& _aDest, const std::string& _bData, const std::string& _sec, const std::string& _xGas, const std::string& _xGasPrice, const std::string& _xValue)
{ {
m_client.transact(jsToSecret(_sec), jsToU256(_xValue), jsToAddress(_aDest), jsToBytes(_bData), jsToU256(_xGas), jsToU256(_xGasPrice)); ethereum().transact(jsToSecret(_sec), jsToU256(_xValue), jsToAddress(_aDest), jsToBytes(_bData), jsToU256(_xGas), jsToU256(_xGasPrice));
return Json::Value(); return Json::Value();
} }
std::string EthStubServer::txCountAt(const std::string& _a) std::string EthStubServer::txCountAt(const std::string& _a)
{ {
return toJS(m_client.countAt(jsToAddress(_a), 0)); return toJS(ethereum().countAt(jsToAddress(_a), 0));
} }
std::string EthStubServer::secretToAddress(const std::string& _a) std::string EthStubServer::secretToAddress(const std::string& _a)
@ -167,7 +173,7 @@ Json::Value EthStubServer::block(const std::string& _hash)
Json::Value EthStubServer::blockJson(const std::string& _hash) Json::Value EthStubServer::blockJson(const std::string& _hash)
{ {
Json::Value res; Json::Value res;
auto const& bc = m_client.blockChain(); auto const& bc = ethereum().blockChain();
auto b = _hash.length() ? bc.block(h256(_hash)) : bc.block(); auto b = _hash.length() ? bc.block(h256(_hash)) : bc.block();

7
eth/EthStubServer.h

@ -29,12 +29,12 @@
#include "abstractethstubserver.h" #include "abstractethstubserver.h"
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
namespace dev { namespace eth { class Client; } class KeyPair; } namespace dev { class WebThreeDirect; namespace eth { class Client; } class KeyPair; }
class EthStubServer: public AbstractEthStubServer class EthStubServer: public AbstractEthStubServer
{ {
public: public:
EthStubServer(jsonrpc::AbstractServerConnector* _conn, dev::eth::Client& _client); EthStubServer(jsonrpc::AbstractServerConnector* _conn, dev::WebThreeDirect& _web3);
virtual Json::Value procedures(); virtual Json::Value procedures();
virtual std::string balanceAt(std::string const& _a); virtual std::string balanceAt(std::string const& _a);
@ -57,7 +57,8 @@ public:
virtual Json::Value block(const std::string&); virtual Json::Value block(const std::string&);
void setKeys(std::vector<dev::KeyPair> _keys) { m_keys = _keys; } void setKeys(std::vector<dev::KeyPair> _keys) { m_keys = _keys; }
private: private:
dev::eth::Client& m_client; dev::eth::Client& ethereum() const;
dev::WebThreeDirect& m_web3;
std::vector<dev::KeyPair> m_keys; std::vector<dev::KeyPair> m_keys;
Json::Value jsontypeToValue(int); Json::Value jsontypeToValue(int);
Json::Value blockJson(const std::string&); Json::Value blockJson(const std::string&);

19
eth/main.cpp

@ -300,7 +300,8 @@ int main(int argc, char** argv)
cout << credits(); cout << credits();
dev::WebThreeDirect web3("Ethereum(++)/" + clientName + "v" + dev::Version + "/" DEV_QUOTED(ETH_BUILD_TYPE) "/" DEV_QUOTED(ETH_BUILD_PLATFORM), dbPath, false, mode == NodeMode::Full ? set<string>{"eth", "shh"} : set<string>{}, NetworkPreferences(listenPort, publicIP, upnp, false)); NetworkPreferences netPrefs(listenPort, publicIP, upnp, false);
dev::WebThreeDirect web3("Ethereum(++)/" + clientName + "v" + dev::Version + "/" DEV_QUOTED(ETH_BUILD_TYPE) "/" DEV_QUOTED(ETH_BUILD_PLATFORM), dbPath, false, mode == NodeMode::Full ? set<string>{"eth", "shh"} : set<string>{}, netPrefs);
web3.setIdealPeerCount(peers); web3.setIdealPeerCount(peers);
eth::Client& c = *web3.ethereum(); eth::Client& c = *web3.ethereum();
@ -315,7 +316,7 @@ int main(int argc, char** argv)
auto_ptr<EthStubServer> jsonrpcServer; auto_ptr<EthStubServer> jsonrpcServer;
if (jsonrpc > -1) if (jsonrpc > -1)
{ {
jsonrpcServer = auto_ptr<EthStubServer>(new EthStubServer(new jsonrpc::HttpServer(jsonrpc), c)); jsonrpcServer = auto_ptr<EthStubServer>(new EthStubServer(new jsonrpc::HttpServer(jsonrpc), web3));
jsonrpcServer->setKeys({us}); jsonrpcServer->setKeys({us});
jsonrpcServer->StartListening(); jsonrpcServer->StartListening();
} }
@ -353,20 +354,20 @@ int main(int argc, char** argv)
iss >> cmd; iss >> cmd;
if (cmd == "netstart") if (cmd == "netstart")
{ {
unsigned port; iss >> netPrefs.listenPort;
iss >> port; web3.setNetworkPreferences(netPrefs);
c.startNetwork((short)port); web3.startNetwork();
} }
else if (cmd == "connect") else if (cmd == "connect")
{ {
string addr; string addr;
unsigned port; unsigned port;
iss >> addr >> port; iss >> addr >> port;
c.connect(addr, (short)port); web3.connect(addr, (short)port);
} }
else if (cmd == "netstop") else if (cmd == "netstop")
{ {
c.stopNetwork(); web3.stopNetwork();
} }
else if (cmd == "minestart") else if (cmd == "minestart")
{ {
@ -399,7 +400,7 @@ int main(int argc, char** argv)
{ {
if (jsonrpc < 0) if (jsonrpc < 0)
jsonrpc = 8080; jsonrpc = 8080;
jsonrpcServer = auto_ptr<EthStubServer>(new EthStubServer(new jsonrpc::HttpServer(jsonrpc), c)); jsonrpcServer = auto_ptr<EthStubServer>(new EthStubServer(new jsonrpc::HttpServer(jsonrpc), web3));
jsonrpcServer->setKeys({us}); jsonrpcServer->setKeys({us});
jsonrpcServer->StartListening(); jsonrpcServer->StartListening();
} }
@ -426,7 +427,7 @@ int main(int argc, char** argv)
} }
else if (cmd == "peers") else if (cmd == "peers")
{ {
for (auto it: c.peers()) for (auto it: web3.peers())
cout << it.host << ":" << it.port << ", " << it.clientVersion << ", " cout << it.host << ":" << it.port << ", " << it.clientVersion << ", "
<< std::chrono::duration_cast<std::chrono::milliseconds>(it.lastPing).count() << "ms" << std::chrono::duration_cast<std::chrono::milliseconds>(it.lastPing).count() << "ms"
<< endl; << endl;

170
libethereum/Client.cpp

@ -53,21 +53,6 @@ void VersionChecker::setOk()
} }
} }
Client::Client(std::string const& _clientVersion, Address _us, std::string const& _dbPath, bool _forceClean):
m_clientVersion(_clientVersion),
m_vc(_dbPath),
m_bc(_dbPath, !m_vc.ok() || _forceClean),
m_stateDB(State::openDB(_dbPath, !m_vc.ok() || _forceClean)),
m_preMine(_us, m_stateDB),
m_postMine(_us, m_stateDB)
{
setMiningThreads();
if (_dbPath.size())
Defaults::setDBPath(_dbPath);
m_vc.setOk();
work();
}
Client::Client(p2p::Host* _extNet, std::string const& _dbPath, bool _forceClean, u256 _networkId): Client::Client(p2p::Host* _extNet, std::string const& _dbPath, bool _forceClean, u256 _networkId):
m_vc(_dbPath), m_vc(_dbPath),
m_bc(_dbPath, !m_vc.ok() || _forceClean), m_bc(_dbPath, !m_vc.ok() || _forceClean),
@ -107,7 +92,15 @@ Client::~Client()
m_work->join(); m_work->join();
m_work.reset(nullptr); m_work.reset(nullptr);
} }
stopNetwork(); if (m_workNet)
{
if (m_workNetState.load(std::memory_order_acquire) == Active)
m_workNetState.store(Deleting, std::memory_order_release);
while (m_workNetState.load(std::memory_order_acquire) != Deleted)
this_thread::sleep_for(chrono::milliseconds(10));
m_workNet->join();
m_workNet.reset(nullptr);
}
} }
void Client::ensureWorking() void Client::ensureWorking()
@ -143,21 +136,23 @@ void Client::killChain()
void Client::clearPending() void Client::clearPending()
{ {
WriteGuard l(x_stateDB);
if (!m_postMine.pending().size())
return;
h256Set changeds; h256Set changeds;
for (unsigned i = 0; i < m_postMine.pending().size(); ++i) {
appendFromNewPending(m_postMine.bloom(i), changeds); WriteGuard l(x_stateDB);
changeds.insert(PendingChangedFilter); if (!m_postMine.pending().size())
m_postMine = m_preMine; return;
for (unsigned i = 0; i < m_postMine.pending().size(); ++i)
appendFromNewPending(m_postMine.bloom(i), changeds);
changeds.insert(PendingChangedFilter);
m_postMine = m_preMine;
}
if (!m_extHost.lock())
{ {
ReadGuard l(x_miners); ReadGuard l(x_miners);
for (auto& m: m_miners) for (auto& m: m_miners)
m.noteStateChange(); m.noteStateChange();
} }
noteChanged(changeds); noteChanged(changeds);
} }
@ -228,117 +223,14 @@ void Client::appendFromNewBlock(h256 _block, h256Set& o_changed) const
o_changed.insert(i.first); o_changed.insert(i.first);
} }
void Client::startNetwork(unsigned short _listenPort, std::string const& _seedHost, unsigned short _port, NodeMode _mode, unsigned _peers, string const& _publicIP, bool _upnp, u256 _networkId)
{
static const char* c_threadName = "net";
{
UpgradableGuard l(x_net);
if (m_net.get())
return;
{
UpgradeGuard ul(l);
if (!m_workNet)
m_workNet.reset(new thread([&]()
{
setThreadName(c_threadName);
m_workNetState.store(Active, std::memory_order_release);
while (m_workNetState.load(std::memory_order_acquire) != Deleting)
workNet();
m_workNetState.store(Deleted, std::memory_order_release);
}));
if (!m_extHost.lock())
{
m_net.reset(new Host(m_clientVersion, NetworkPreferences(_listenPort, _publicIP, _upnp, false)));
if (_mode == NodeMode::Full)
m_net->registerCapability(new EthereumHost(m_bc, _networkId));
}
}
m_net->setIdealPeerCount(_peers);
}
if (!m_extHost.lock())
if (_seedHost.size())
connect(_seedHost, _port);
ensureWorking();
}
void Client::stopNetwork()
{
UpgradableGuard l(x_net);
if (m_workNet)
{
if (m_workNetState.load(std::memory_order_acquire) == Active)
m_workNetState.store(Deleting, std::memory_order_release);
while (m_workNetState.load(std::memory_order_acquire) != Deleted)
this_thread::sleep_for(chrono::milliseconds(10));
m_workNet->join();
}
if (m_net)
{
UpgradeGuard ul(l);
m_net.reset(nullptr);
m_workNet.reset(nullptr);
}
}
void Client::setNetworkId(u256 _n) void Client::setNetworkId(u256 _n)
{ {
if (auto h = m_extHost.lock()) if (auto h = m_extHost.lock())
h->setNetworkId(_n); h->setNetworkId(_n);
} }
std::vector<PeerInfo> Client::peers()
{
ReadGuard l(x_net);
return m_net ? m_net->peers() : std::vector<PeerInfo>();
}
size_t Client::peerCount() const
{
ReadGuard l(x_net);
return m_net ? m_net->peerCount() : 0;
}
void Client::setIdealPeerCount(size_t _n) const
{
ReadGuard l(x_net);
if (m_net)
return m_net->setIdealPeerCount(_n);
}
bytes Client::savePeers()
{
ReadGuard l(x_net);
if (m_net)
return m_net->savePeers();
return bytes();
}
void Client::restorePeers(bytesConstRef _saved)
{
ReadGuard l(x_net);
if (m_net)
return m_net->restorePeers(_saved);
}
void Client::connect(std::string const& _seedHost, unsigned short _port)
{
ReadGuard l(x_net);
if (!m_net.get())
return;
m_net->connect(_seedHost, _port);
}
void Client::setMiningThreads(unsigned _threads) void Client::setMiningThreads(unsigned _threads)
{ {
if (m_extHost.lock())
return;
stopMining(); stopMining();
auto t = _threads ? _threads : thread::hardware_concurrency(); auto t = _threads ? _threads : thread::hardware_concurrency();
@ -353,8 +245,6 @@ void Client::setMiningThreads(unsigned _threads)
MineProgress Client::miningProgress() const MineProgress Client::miningProgress() const
{ {
MineProgress ret; MineProgress ret;
if (m_extHost.lock())
return ret;
ReadGuard l(x_miners); ReadGuard l(x_miners);
for (auto& m: m_miners) for (auto& m: m_miners)
ret.combine(m.miningProgress()); ret.combine(m.miningProgress());
@ -364,8 +254,6 @@ MineProgress Client::miningProgress() const
std::list<MineInfo> Client::miningHistory() std::list<MineInfo> Client::miningHistory()
{ {
std::list<MineInfo> ret; std::list<MineInfo> ret;
if (m_extHost.lock())
return ret;
ReadGuard l(x_miners); ReadGuard l(x_miners);
if (m_miners.empty()) if (m_miners.empty())
@ -479,23 +367,6 @@ void Client::workNet()
// Process network events. // Process network events.
// Synchronise block chain with network. // Synchronise block chain with network.
// Will broadcast any of our (new) transactions and blocks, and collect & add any of their (new) transactions and blocks. // Will broadcast any of our (new) transactions and blocks, and collect & add any of their (new) transactions and blocks.
{
ReadGuard l(x_net);
if (m_net)
{
cwork << "NETWORK";
m_net->process(); // must be in guard for now since it uses the blockchain.
// returns h256Set as block hashes, once for each block that has come in/gone out.
if (m_net->cap<EthereumHost>())
{
cwork << "NET <==> TQ ; CHAIN ==> NET ==> BQ";
m_net->cap<EthereumHost>()->sync(m_tq, m_bq);
cwork << "TQ:" << m_tq.items() << "; BQ:" << m_bq.items();
}
}
}
if (auto h = m_extHost.lock()) if (auto h = m_extHost.lock())
h->sync(m_tq, m_bq); h->sync(m_tq, m_bq);
@ -509,7 +380,6 @@ void Client::work()
cworkin << "WORK"; cworkin << "WORK";
h256Set changeds; h256Set changeds;
if (!m_extHost.lock())
{ {
ReadGuard l(x_miners); ReadGuard l(x_miners);
for (auto& m: m_miners) for (auto& m: m_miners)
@ -580,7 +450,7 @@ void Client::work()
rsm = true; rsm = true;
} }
} }
if (!m_extHost.lock() && rsm) if (rsm)
{ {
ReadGuard l(x_miners); ReadGuard l(x_miners);
for (auto& m: m_miners) for (auto& m: m_miners)

34
libethereum/Client.h

@ -113,9 +113,6 @@ class Client: public MinerHost, public Interface
friend class Miner; friend class Miner;
public: public:
/// Original Constructor.
explicit Client(std::string const& _clientVersion, Address _us = Address(), std::string const& _dbPath = std::string(), bool _forceClean = false);
/// New-style Constructor. /// New-style Constructor.
explicit Client(p2p::Host* _host, std::string const& _dbPath = std::string(), bool _forceClean = false, u256 _networkId = 0); explicit Client(p2p::Host* _host, std::string const& _dbPath = std::string(), bool _forceClean = false, u256 _networkId = 0);
@ -195,32 +192,6 @@ public:
/// Get the object representing the current canonical blockchain. /// Get the object representing the current canonical blockchain.
BlockChain const& blockChain() const { return m_bc; } BlockChain const& blockChain() const { return m_bc; }
// Misc stuff:
void setClientVersion(std::string const& _name) { m_clientVersion = _name; }
// Network stuff:
/// Get information on the current peer set.
std::vector<p2p::PeerInfo> peers();
/// Same as peers().size(), but more efficient.
size_t peerCount() const;
/// Same as peers().size(), but more efficient.
void setIdealPeerCount(size_t _n) const;
/// Start the network subsystem.
void startNetwork(unsigned short _listenPort = 30303, std::string const& _remoteHost = std::string(), unsigned short _remotePort = 30303, NodeMode _mode = NodeMode::Full, unsigned _peers = 5, std::string const& _publicIP = std::string(), bool _upnp = true, u256 _networkId = 0);
/// Connect to a particular peer.
void connect(std::string const& _seedHost, unsigned short _port = 30303);
/// Stop the network subsystem.
void stopNetwork();
/// Is the network subsystem up?
bool haveNetwork() { ReadGuard l(x_net); return !!m_net; }
/// Save peers
bytes savePeers();
/// Restore peers
void restorePeers(bytesConstRef _saved);
// Mining stuff: // Mining stuff:
/// Check block validity prior to mining. /// Check block validity prior to mining.
@ -274,7 +245,7 @@ private:
/// @param _justQueue If true will only processing the transaction queues. /// @param _justQueue If true will only processing the transaction queues.
void work(); void work();
/// Do some work on the network. /// Syncs the queues with the network.
void workNet(); void workNet();
/// Overrides for being a mining host. /// Overrides for being a mining host.
@ -300,7 +271,6 @@ private:
State asOf(int _h) const; State asOf(int _h) const;
State asOf(unsigned _h) const; State asOf(unsigned _h) const;
std::string m_clientVersion; ///< Our end-application client's name/version.
VersionChecker m_vc; ///< Dummy object to check & update the protocol version. VersionChecker m_vc; ///< Dummy object to check & update the protocol version.
BlockChain m_bc; ///< Maintains block database. BlockChain m_bc; ///< Maintains block database.
TransactionQueue m_tq; ///< Maintains a list of incoming transactions not yet in a block on the blockchain. TransactionQueue m_tq; ///< Maintains a list of incoming transactions not yet in a block on the blockchain.
@ -313,8 +283,6 @@ private:
std::unique_ptr<std::thread> m_workNet; ///< The network thread. std::unique_ptr<std::thread> m_workNet; ///< The network thread.
std::atomic<ClientWorkState> m_workNetState; std::atomic<ClientWorkState> m_workNetState;
mutable boost::shared_mutex x_net; ///< Lock for the network existance.
std::unique_ptr<p2p::Host> m_net; ///< Should run in background and send us events when blocks found and allow us to send blocks as required.
std::weak_ptr<EthereumHost> m_extHost; ///< Our Ethereum Host. Don't do anything if we can't lock. std::weak_ptr<EthereumHost> m_extHost; ///< Our Ethereum Host. Don't do anything if we can't lock.

4
libqethereum/QmlEthereum.cpp

@ -50,7 +50,7 @@ using dev::g_logVerbosity;
// Can get rid of this once we've sorted out ITC for signalling & multiplexed querying. // Can get rid of this once we've sorted out ITC for signalling & multiplexed querying.
dev::eth::Client* g_qmlClient; dev::eth::Client* g_qmlClient;
QObject* g_qmlMain; QObject* g_qmlMain;
#if 0
QmlAccount::QmlAccount(QObject*) QmlAccount::QmlAccount(QObject*)
{ {
} }
@ -177,6 +177,8 @@ void QmlEthereum::transact(Secret _secret, Address _dest, u256 _amount, u256 _ga
client()->transact(_secret, _amount, _dest, bytes(_data.data(), _data.data() + _data.size()), _gas, _gasPrice); client()->transact(_secret, _amount, _dest, bytes(_data.data(), _data.data() + _data.size()), _gas, _gasPrice);
} }
#endif
// extra bits needed to link on VS // extra bits needed to link on VS
#ifdef _MSC_VER #ifdef _MSC_VER

8
libqethereum/QmlEthereum.h

@ -23,8 +23,8 @@ Q_DECLARE_METATYPE(dev::u256)
Q_DECLARE_METATYPE(dev::Address) Q_DECLARE_METATYPE(dev::Address)
Q_DECLARE_METATYPE(dev::Secret) Q_DECLARE_METATYPE(dev::Secret)
Q_DECLARE_METATYPE(dev::KeyPair) Q_DECLARE_METATYPE(dev::KeyPair)
Q_DECLARE_METATYPE(QmlAccount*) //Q_DECLARE_METATYPE(QmlAccount*)
Q_DECLARE_METATYPE(QmlEthereum*) //Q_DECLARE_METATYPE(QmlEthereum*)
class QmlU256Helper: public QObject class QmlU256Helper: public QObject
{ {
@ -75,7 +75,7 @@ public:
Q_INVOKABLE QString stringOf(dev::Address _a) const { return QString::fromStdString(dev::toHex(_a.asArray())); } Q_INVOKABLE QString stringOf(dev::Address _a) const { return QString::fromStdString(dev::toHex(_a.asArray())); }
Q_INVOKABLE QString toAbridged(dev::Address _a) const { return QString::fromStdString(_a.abridged()); } Q_INVOKABLE QString toAbridged(dev::Address _a) const { return QString::fromStdString(_a.abridged()); }
}; };
#if 0
class QmlAccount: public QObject class QmlAccount: public QObject
{ {
Q_OBJECT Q_OBJECT
@ -155,7 +155,7 @@ private:
Q_PROPERTY(bool listening READ isListening WRITE setListening) Q_PROPERTY(bool listening READ isListening WRITE setListening)
Q_PROPERTY(bool mining READ isMining WRITE setMining) Q_PROPERTY(bool mining READ isMining WRITE setMining)
}; };
#endif
#if 0 #if 0
template <class T> T to(QVariant const& _s) { if (_s.type() != QVariant::String) return T(); auto s = _s.toString().toLatin1(); assert(s.size() == sizeof(T)); return *(T*)s.data(); } template <class T> T to(QVariant const& _s) { if (_s.type() != QVariant::String) return T(); auto s = _s.toString().toLatin1(); assert(s.size() == sizeof(T)); return *(T*)s.data(); }
template <class T> QVariant toQJS(T const& _s) { QLatin1String ret((char*)&_s, sizeof(T)); assert(QVariant(QString(ret)).toString().toLatin1().size() == sizeof(T)); assert(*(T*)(QVariant(QString(ret)).toString().toLatin1().data()) == _s); return QVariant(QString(ret)); } template <class T> QVariant toQJS(T const& _s) { QLatin1String ret((char*)&_s, sizeof(T)); assert(QVariant(QString(ret)).toString().toLatin1().size() == sizeof(T)); assert(*(T*)(QVariant(QString(ret)).toString().toLatin1().data()) == _s); return QVariant(QString(ret)); }

2
test/TestHelper.cpp

@ -42,11 +42,13 @@ void mine(Client& c, int numBlocks)
void connectClients(Client& c1, Client& c2) void connectClients(Client& c1, Client& c2)
{ {
#if 0
short c1Port = 20000; short c1Port = 20000;
short c2Port = 21000; short c2Port = 21000;
c1.startNetwork(c1Port); c1.startNetwork(c1Port);
c2.startNetwork(c2Port); c2.startNetwork(c2Port);
c2.connect("127.0.0.1", c1Port); c2.connect("127.0.0.1", c1Port);
#endif
} }
} }

10
third/MainWin.cpp

@ -356,7 +356,7 @@ void Main::writeSettings()
s.setValue("address", b); s.setValue("address", b);
s.setValue("url", ui->urlEdit->text()); s.setValue("url", ui->urlEdit->text());
bytes d = ethereum()->savePeers(); bytes d = m_web3->savePeers();
if (d.size()) if (d.size())
m_peers = QByteArray((char*)d.data(), (int)d.size()); m_peers = QByteArray((char*)d.data(), (int)d.size());
s.setValue("peers", m_peers); s.setValue("peers", m_peers);
@ -471,7 +471,7 @@ void Main::refreshBalances()
void Main::refreshNetwork() void Main::refreshNetwork()
{ {
auto ps = ethereum()->peers(); auto ps = m_web3->peers();
ui->peerCount->setText(QString::fromStdString(toString(ps.size())) + " peer(s)"); ui->peerCount->setText(QString::fromStdString(toString(ps.size())) + " peer(s)");
} }
@ -560,10 +560,10 @@ void Main::ensureNetwork()
web3()->connect(defPeer); web3()->connect(defPeer);
} }
else else
if (!ethereum()->peerCount()) if (!m_web3->peerCount())
ethereum()->connect(defPeer); m_web3->connect(defPeer);
if (m_peers.size()) if (m_peers.size())
ethereum()->restorePeers(bytesConstRef((byte*)m_peers.data(), m_peers.size())); m_web3->restorePeers(bytesConstRef((byte*)m_peers.data(), m_peers.size()));
} }
void Main::on_connect_triggered() void Main::on_connect_triggered()

Loading…
Cancel
Save