Ethereum  PoC-8
The C++ Implementation of Ethereum
Client.h
Go to the documentation of this file.
1 /*
2  This file is part of cpp-ethereum.
3 
4  cpp-ethereum is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  cpp-ethereum is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
16 */
22 #pragma once
23 
24 #include "Block.h"
25 #include "BlockChain.h"
26 #include "BlockChainImporter.h"
27 #include "ClientBase.h"
28 #include "CommonNet.h"
29 #include "StateImporter.h"
30 #include "WarpCapability.h"
31 #include <libdevcore/Common.h>
32 #include <libdevcore/CommonIO.h>
33 #include <libdevcore/Guards.h>
34 #include <libdevcore/Worker.h>
35 #include <libethcore/SealEngine.h>
36 #include <libp2p/Common.h>
37 #include <array>
38 #include <atomic>
39 #include <condition_variable>
40 #include <list>
41 #include <mutex>
42 #include <queue>
43 #include <string>
44 #include <thread>
45 
46 #include <boost/filesystem/path.hpp>
47 
48 
49 namespace dev
50 {
51 namespace eth
52 {
53 
54 class Client;
55 class DownloadMan;
56 class EthereumCapability;
57 
59 {
60  Active = 0,
62  Deleted
63 };
64 
66 {
67  unsigned ticks = 0;
68  std::chrono::system_clock::time_point since = std::chrono::system_clock::now();
69 };
70 
71 std::ostream& operator<<(std::ostream& _out, ActivityReport const& _r);
72 
76 class Client: public ClientBase, protected Worker
77 {
78 public:
79  Client(ChainParams const& _params, int _networkID, p2p::Host& _host,
80  std::shared_ptr<GasPricer> _gpForAdoption,
81  boost::filesystem::path const& _dbPath = boost::filesystem::path(),
82  boost::filesystem::path const& _snapshotPath = boost::filesystem::path(),
83  WithExisting _forceAction = WithExisting::Trust,
84  TransactionQueue::Limits const& _l = TransactionQueue::Limits{1024, 1024});
86  virtual ~Client();
87 
89  ChainParams const& chainParams() const { return bc().chainParams(); }
90 
92  void setGasPricer(std::shared_ptr<GasPricer> _gp) { m_gp = _gp; }
93  std::shared_ptr<GasPricer> gasPricer() const { return m_gp; }
94 
97  h256 submitTransaction(TransactionSkeleton const& _t, Secret const& _secret) override;
98 
100  h256 importTransaction(Transaction const& _t) override;
101 
103  ExecutionResult call(Address const& _secret, u256 _value, Address _dest, bytes const& _data, u256 _gas, u256 _gasPrice, BlockNumber _blockNumber, FudgeFactor _ff = FudgeFactor::Strict) override;
104 
106  void flushTransactions() override;
107 
109  Transactions pending() const override;
110 
112  ImportResult queueBlock(bytes const& _block, bool _isSafe = false);
113 
115  u256 gasLimitRemaining() const override { return m_postSeal.gasLimitRemaining(); }
117  u256 gasBidPrice() const override { return m_gp->bid(); }
118 
119  // [PRIVATE API - only relevant for base clients, not available in general]
121  dev::eth::Block block(h256 const& _blockHash, PopulationStatistics* o_stats) const;
122 
126  BlockChain const& blockChain() const { return bc(); }
130  SyncStatus syncStatus() const override;
134  BlockQueue const& blockQueue() const { return m_bq; }
136  OverlayDB const& stateDB() const { return m_stateDB; }
140 
142  std::tuple<ImportRoute, bool, unsigned> syncQueue(unsigned _max = 1);
143 
144  // Sealing stuff:
145  // Note: "mining"/"miner" is deprecated. Use "sealing"/"sealer".
146 
147  Address author() const override { ReadGuard l(x_preSeal); return m_preSeal.author(); }
148  void setAuthor(Address const& _us) override
149  {
151  m_preSeal.setAuthor(_us);
152  restartMining();
153  }
154 
156  strings sealers() const { return sealEngine()->sealers(); }
158  std::string sealer() const { return sealEngine()->sealer(); }
160  void setSealer(std::string const& _id) { sealEngine()->setSealer(_id); if (wouldSeal()) startSealing(); }
162  bytes sealOption(std::string const& _name) const { return sealEngine()->option(_name); }
164  bool setSealOption(std::string const& _name, bytes const& _value) { auto ret = sealEngine()->setOption(_name, _value); if (wouldSeal()) startSealing(); return ret; }
165 
167  void startSealing() override;
169  void stopSealing() override { m_wouldSeal = false; }
171  bool wouldSeal() const override { return m_wouldSeal; }
172 
174  bool isSyncing() const override;
176  bool isMajorSyncing() const override;
177 
179  u256 networkId() const override;
181  void setNetworkId(u256 const& _n) override;
182 
184  SealEngineFace* sealEngine() const override { return bc().sealEngine(); }
185 
186  // Debug stuff:
187 
188  DownloadMan const* downloadMan() const;
190  void clearPending();
195  void reopenChain(WithExisting _we);
201  void setExtraData(bytes const& _extraData) { m_extraData = _extraData; }
203  void rewind(unsigned _n);
205  void rescue() { bc().rescue(m_stateDB); }
206 
207  std::unique_ptr<StateImporterFace> createStateImporter() { return dev::eth::createStateImporter(m_stateDB); }
208  std::unique_ptr<BlockChainImporterFace> createBlockChainImporter() { return dev::eth::createBlockChainImporter(m_bc); }
209 
211  void executeInMainThread(std::function<void()> const& _function);
212 
213  Block block(h256 const& _block) const override;
214  using ClientBase::block;
215 
218 
220  Handler<bytes const&> setOnBlockSealed(std::function<void(bytes const&)> _handler)
221  {
222  return m_onBlockSealed.add(_handler);
223  }
226  std::function<void(h256s const&, h256s const&)> _handler)
227  {
228  return m_onChainChanged.add(_handler);
229  }
230 
232  std::tuple<h256, h256, h256> getWork() override;
233 
234 protected:
237  void init(p2p::Host& _extNet, boost::filesystem::path const& _dbPath,
238  boost::filesystem::path const& _snapshotPath, WithExisting _forceAction, u256 _networkId);
239 
241  BlockChain& bc() override { return m_bc; }
242  BlockChain const& bc() const override { return m_bc; }
243 
246  Block preSeal() const override { ReadGuard l(x_preSeal); return m_preSeal; }
247  Block postSeal() const override { ReadGuard l(x_postSeal); return m_postSeal; }
248  void prepareForTransaction() override;
249 
252  void appendFromNewPending(TransactionReceipt const& _receipt, h256Hash& io_changed, h256 _sha3);
253 
256  void appendFromBlock(h256 const& _blockHash, BlockPolarity _polarity, h256Hash& io_changed);
257 
260  void noteChanged(h256Hash const& _filters);
261 
263  virtual bool submitSealed(bytes const& _s);
264 
265 protected:
267  void startedWorking() override;
268 
270  void doWork(bool _doWait);
271  void doWork() override { doWork(true); }
272 
274  void doneWorking() override;
275 
277  void rejigSealing();
278 
280  void onDeadBlocks(h256s const& _blocks, h256Hash& io_changed);
281 
283  virtual void onNewBlocks(h256s const& _blocks, h256Hash& io_changed);
284 
286  void resyncStateFromChain();
288  void restartMining();
289 
291  void resetState();
292 
295  void onChainChanged(ImportRoute const& _ir);
296 
298  void syncBlockQueue();
299 
301  void syncTransactionQueue();
302 
305 
307  void onBlockQueueReady() { m_syncBlockQueue = true; m_signalled.notify_all(); }
308 
311  void onPostStateChanged();
312 
314  void checkWatchGarbage();
315 
317  void tick();
318 
321  void onBadBlock(Exception& _ex) const;
322 
324  void callQueuedFunctions();
325 
327  bool shouldServeWork() const
328  {
329  return blockQueue().items().first == 0 && (sealEngine()->isMining() || remoteActive());
330  }
331 
333  bool remoteActive() const;
334 
338 
339  std::shared_ptr<GasPricer> m_gp;
340 
349  std::atomic<bool> m_remoteWorking = { false };
350  std::atomic<bool> m_needStateReset = { false };
351  std::chrono::system_clock::time_point m_lastGetWork;
352 
353  std::weak_ptr<EthereumCapability> m_host;
354  std::weak_ptr<WarpCapability> m_warpHost;
355 
356  std::condition_variable m_signalled;
358 
362 
363  std::atomic<bool> m_wouldSeal = { false };
364  bool m_wouldButShouldnot = false;
365 
366  mutable std::chrono::system_clock::time_point m_lastGarbageCollection;
368  mutable std::chrono::system_clock::time_point m_lastTick = std::chrono::system_clock::now();
370 
371  unsigned m_syncAmount = 50;
372 
374 
376  std::queue<std::function<void()>> m_functionQueue;
377 
378  std::atomic<bool> m_syncTransactionQueue = {false};
379  std::atomic<bool> m_syncBlockQueue = {false};
380 
382 
384 
387 
390 };
391 
392 }
393 }
dev::eth::Client::m_preSeal
Block m_preSeal
The present state of the client.
Definition: Client.h:343
dev::eth::SealEngineFace::sealer
virtual std::string sealer() const
Definition: SealEngine.h:72
dev::eth::Client::reopenChain
void reopenChain(ChainParams const &_p, WithExisting _we=WithExisting::Trust)
Reloads the blockchain. Just for debug use.
Definition: Client.cpp:269
dev::eth::Client::~Client
virtual ~Client()
Destructor.
Definition: Client.cpp:90
dev::eth::Client::preSeal
Block preSeal() const override
Definition: Client.h:246
dev::eth::Client::createBlockChainImporter
std::unique_ptr< BlockChainImporterFace > createBlockChainImporter()
Definition: Client.h:208
dev::eth::BlockQueue
A queue of blocks. Sits between network or other I/O and the BlockChain. Sorts them ready for blockch...
Definition: BlockQueue.h:224
dev::eth::BlockQueue::status
BlockQueueStatus status() const
Get some infomration on the current status.
Definition: BlockQueue.cpp:379
dev::eth::Client::startedWorking
void startedWorking() override
Called when Worker is starting.
Definition: Client.cpp:232
dev::SharedMutex
boost::shared_mutex SharedMutex
Definition: Guards.h:39
dev::eth::TransactionSkeleton
Definition: Common.h:184
dev::eth::Client::init
void init(p2p::Host &_extNet, boost::filesystem::path const &_dbPath, boost::filesystem::path const &_snapshotPath, WithExisting _forceAction, u256 _networkId)
Definition: Client.cpp:97
dev::eth::Deleting
@ Deleting
Definition: Client.h:61
dev::eth::Client::m_wouldButShouldnot
bool m_wouldButShouldnot
True if the last time we called rejigSealing wouldSeal() was true but sealer's shouldSeal() was false...
Definition: Client.h:364
dev::eth::Client::syncQueue
std::tuple< ImportRoute, bool, unsigned > syncQueue(unsigned _max=1)
Freeze worker thread and sync some of the block queue.
Definition: Client.cpp:164
dev::eth::Client::sealEngine
SealEngineFace * sealEngine() const override
Get the seal engine.
Definition: Client.h:184
dev::eth::Client::bc
BlockChain & bc() override
InterfaceStub methods.
Definition: Client.h:241
dev::eth::Client::m_syncAmount
unsigned m_syncAmount
Number of blocks to sync in each go.
Definition: Client.h:371
dev::eth::ImportResult
ImportResult
Definition: Common.h:97
dev::eth::Transaction
Encodes a transaction, ready to be exported to or freshly imported from RLP.
Definition: Transaction.h:86
dev::eth::Client::m_sealingInfo
BlockHeader m_sealingInfo
The header we're attempting to seal on (derived from m_postSeal).
Definition: Client.h:348
dev::eth::BlockChain::rescue
void rescue(OverlayDB const &_db)
Rescue the database.
Definition: BlockChain.cpp:1041
dev::eth::BlockHeader
Encapsulation of a block header. Class to contain all of a block header's data. It is able to parse a...
Definition: BlockHeader.h:97
dev::eth::SealEngineFace
Definition: SealEngine.h:46
dev::eth::Client::startWorking
void startWorking()
should be called after the constructor of the most derived class finishes.
Definition: Client.h:217
dev::eth::Client::x_working
SharedMutex x_working
Lock on m_working.
Definition: Client.h:346
dev::eth::Transactions
std::vector< Transaction > Transactions
Nice name for vector of Transaction.
Definition: Transaction.h:122
dev::eth::Client::m_lastGarbageCollection
std::chrono::system_clock::time_point m_lastGarbageCollection
When did we last both doing GC on the watches?
Definition: Client.h:366
dev::eth::Client::Client
Client(ChainParams const &_params, int _networkID, p2p::Host &_host, std::shared_ptr< GasPricer > _gpForAdoption, boost::filesystem::path const &_dbPath=boost::filesystem::path(), boost::filesystem::path const &_snapshotPath=boost::filesystem::path(), WithExisting _forceAction=WithExisting::Trust, TransactionQueue::Limits const &_l=TransactionQueue::Limits{1024, 1024})
Definition: Client.cpp:73
dev::eth::Deleted
@ Deleted
Definition: Client.h:62
dev::eth::SyncStatus
Definition: CommonNet.h:96
dev::SecureFixedHash< 32 >
dev::eth::SealEngineFace::isMining
virtual bool isMining() const
Definition: SealEngine.h:55
dev::eth::FudgeFactor::Strict
@ Strict
dev::eth::Client::x_functionQueue
SharedMutex x_functionQueue
Definition: Client.h:375
dev::eth::Client::setGasPricer
void setGasPricer(std::shared_ptr< GasPricer > _gp)
Resets the gas pricer to some other object.
Definition: Client.h:92
dev::eth::ChainParams
Definition: ChainParams.h:38
dev::eth::Client::m_host
std::weak_ptr< EthereumCapability > m_host
Definition: Client.h:353
dev::eth::FudgeFactor
FudgeFactor
Definition: Interface.h:51
dev::eth::TransactionQueue::limits
Limits limits() const
Definition: TransactionQueue.h:113
std::swap
void swap(dev::eth::Watch &_a, dev::eth::Watch &_b)
Definition: Interface.h:282
dev::eth::Client::wouldSeal
bool wouldSeal() const override
Are we sealing now?
Definition: Client.h:171
dev::eth::Client::setOnBlockSealed
Handler< bytes const & > setOnBlockSealed(std::function< void(bytes const &)> _handler)
Change the function that is called when a new block is sealed.
Definition: Client.h:220
dev::eth::Block::author
Address author() const
Get the author address for any transactions we do and rewards we get.
Definition: Block.h:109
dev::eth::Client::stateDB
OverlayDB const & stateDB() const
Get the state database.
Definition: Client.h:136
dev::eth::ClientWorkState
ClientWorkState
Definition: Client.h:59
dev::eth::Client::m_syncTransactionQueue
std::atomic< bool > m_syncTransactionQueue
Definition: Client.h:378
dev::eth::Client::syncStatus
SyncStatus syncStatus() const override
Get some information on the block syncing.
Definition: Client.cpp:802
dev::eth::Client::submitSealed
virtual bool submitSealed(bytes const &_s)
Submit.
Definition: Client.cpp:830
dev::eth::PopulationStatistics
Definition: Block.h:55
dev::eth::Client::blockQueueStatus
BlockQueueStatus blockQueueStatus() const
Get some information on the block queue.
Definition: Client.h:128
dev::eth::Client::m_logger
Logger m_logger
Definition: Client.h:388
dev::eth::SealEngineFace::setSealer
virtual void setSealer(std::string const &)
Definition: SealEngine.h:73
dev::eth::Client::submitTransaction
h256 submitTransaction(TransactionSkeleton const &_t, Secret const &_secret) override
Definition: Client.cpp:872
dev::eth::Client::m_syncBlockQueue
std::atomic< bool > m_syncBlockQueue
Definition: Client.h:379
dev::eth::Client::doneWorking
void doneWorking() override
Called when Worker is exiting.
Definition: Client.cpp:249
Worker.h
dev::eth::BlockChain::sealEngine
SealEngineFace * sealEngine() const
Definition: BlockChain.h:308
dev::eth::Client::startSealing
void startSealing() override
Start sealing.
Definition: Client.cpp:583
dev::eth::Client::chainParams
ChainParams const & chainParams() const
Get information on this chain.
Definition: Client.h:89
dev::eth::Active
@ Active
Definition: Client.h:60
ClientBase.h
dev::eth::Client::pending
Transactions pending() const override
Retrieve pending transactions.
Definition: Client.cpp:797
dev::eth::Client::m_bc
BlockChain m_bc
Maintains block database and owns the seal engine.
Definition: Client.h:335
dev::FixedHash< 32 >
dev::eth::Client::callQueuedFunctions
void callQueuedFunctions()
Executes the pending functions in m_functionQueue.
Definition: Client.cpp:184
dev::eth::SealEngineFace::option
bytes option(std::string const &_name) const
Definition: SealEngine.h:68
dev::VerbosityInfo
@ VerbosityInfo
Definition: Log.h:70
dev::eth::Client::networkId
u256 networkId() const override
Gets the network id.
Definition: Client.cpp:202
dev::eth::Client::m_warpHost
std::weak_ptr< WarpCapability > m_warpHost
Definition: Client.h:354
dev::WithExisting::Kill
@ Kill
dev::eth::Client::m_tqReady
Handler m_tqReady
Definition: Client.h:359
dev::WithExisting
WithExisting
Definition: Common.h:292
dev::Exception
Base class for all exceptions.
Definition: Exceptions.h:39
dev::eth::Client::m_needStateReset
std::atomic< bool > m_needStateReset
Need reset working state to premin on next sync.
Definition: Client.h:350
dev::eth::Client::x_preSeal
SharedMutex x_preSeal
Lock on m_preSeal.
Definition: Client.h:342
dev::eth::TransactionQueue::status
Status status() const
Definition: TransactionQueue.h:110
dev::WithExisting::Trust
@ Trust
dev::eth::BlockPolarity
BlockPolarity
Definition: Common.h:81
dev::eth::Client::importTransaction
h256 importTransaction(Transaction const &_t) override
Imports the given transaction into the transaction queue.
Definition: Client.cpp:880
dev::eth::Client::transactionQueueLimits
TransactionQueue::Limits transactionQueueLimits() const
Definition: Client.h:139
dev::eth::Client::onNewBlocks
virtual void onNewBlocks(h256s const &_blocks, h256Hash &io_changed)
Called on chain changes.
Definition: Client.cpp:476
dev::eth::Client::bc
BlockChain const & bc() const override
Definition: Client.h:242
dev::eth::BlockChain::chainParams
ChainParams const & chainParams() const
Definition: BlockChain.h:306
dev::eth::Client::resetState
void resetState()
Clear working state of transactions.
Definition: Client.cpp:539
dev::eth::BlockQueue::retryAllUnknown
void retryAllUnknown()
Force a retry of all the blocks with unknown parents.
Definition: BlockQueue.cpp:497
dev::eth::Client::getWork
std::tuple< h256, h256, h256 > getWork() override
Definition: Client.cpp:934
dev::eth::Client::createStateImporter
std::unique_ptr< StateImporterFace > createStateImporter()
Definition: Client.h:207
dev::eth::Client::setAuthor
void setAuthor(Address const &_us) override
Set the block author address.
Definition: Client.h:148
dev::h256Hash
std::unordered_set< h256 > h256Hash
Definition: FixedHash.h:365
dev::h256s
std::vector< h256 > h256s
Definition: FixedHash.h:361
CommonIO.h
dev::eth::Client::appendFromNewPending
void appendFromNewPending(TransactionReceipt const &_receipt, h256Hash &io_changed, h256 _sha3)
Definition: Client.cpp:334
dev::eth::TransactionQueue::Status
Definition: TransactionQueue.h:103
dev::Logger
boost::log::sources::severity_channel_logger<> Logger
Definition: Log.h:124
Common.h
dev::eth::Client::blockChain
BlockChain const & blockChain() const
Get the object representing the current canonical blockchain.
Definition: Client.h:126
Block.h
dev::eth::Client::m_wouldSeal
std::atomic< bool > m_wouldSeal
True if we /should/ be sealing.
Definition: Client.h:363
dev::eth::Client::m_stateDB
OverlayDB m_stateDB
Acts as the central point for the state database, so multiple States can share it.
Definition: Client.h:341
dev::eth::Client::block
dev::eth::Block block(h256 const &_blockHash, PopulationStatistics *o_stats) const
Get the block.
Definition: Client.cpp:774
dev::eth::TransactionQueue::Limits
Definition: TransactionQueue.h:47
StateImporter.h
dev::eth::Client::call
ExecutionResult call(Address const &_secret, u256 _value, Address _dest, bytes const &_data, u256 _gas, u256 _gasPrice, BlockNumber _blockNumber, FudgeFactor _ff=FudgeFactor::Strict) override
Makes the given call. Nothing is recorded into the state.
Definition: Client.cpp:912
dev::eth::Client
Main API hub for interfacing with Ethereum.
Definition: Client.h:77
dev::eth::Client::downloadMan
DownloadMan const * downloadMan() const
dev::eth::BlockQueueStatus
Definition: BlockQueue.h:44
DEV_WRITE_GUARDED
#define DEV_WRITE_GUARDED(MUTEX)
Definition: Guards.h:136
dev::eth::Client::gasLimitRemaining
u256 gasLimitRemaining() const override
Get the remaining gas limit in this block.
Definition: Client.h:115
dev::bytes
std::vector< byte > bytes
Definition: Common.h:72
dev::eth::Client::m_remoteWorking
std::atomic< bool > m_remoteWorking
Has the remote worker recently been reset?
Definition: Client.h:349
dev::eth::BlockQueue::items
std::pair< unsigned, unsigned > items() const
Get information on the items queued.
Definition: BlockQueue.h:252
dev::createLogger
Logger createLogger(int _severity, std::string const &_channel)
Definition: Log.h:125
dev::eth::Client::restartMining
void restartMining()
Update m_preSeal, m_working, m_postSeal blocks from the latest state of the chain.
Definition: Client.cpp:498
SealEngine.h
dev::eth::Client::resyncStateFromChain
void resyncStateFromChain()
Called after processing blocks by onChainChanged(_ir)
Definition: Client.cpp:489
WarpCapability.h
dev::ReadGuard
boost::shared_lock< boost::shared_mutex > ReadGuard
Definition: Guards.h:44
dev::eth::BlockChain
Implements the blockchain database. All data this gives is disk-backed. @threadsafe.
Definition: BlockChain.h:105
dev::eth::ClientBase
Definition: ClientBase.h:68
dev::eth::Client::m_bq
BlockQueue m_bq
Maintains a list of incoming blocks not yet on the blockchain (to be imported).
Definition: Client.h:336
dev::eth::Client::m_extraData
bytes m_extraData
Definition: Client.h:381
dev::eth::Client::blockQueue
BlockQueue const & blockQueue() const
Get the block queue.
Definition: Client.h:134
dev::eth::Client::queueBlock
ImportResult queueBlock(bytes const &_block, bool _isSafe=false)
Queues a block for import.
Definition: Client.cpp:157
dev::eth::Client::syncBlockQueue
void syncBlockQueue()
Signal handler for when the block queue needs processing.
Definition: Client.cpp:384
dev::OverlayDB
Definition: OverlayDB.h:34
dev::eth::Client::setExtraData
void setExtraData(bytes const &_extraData)
Set the extra data that goes into sealed blocks.
Definition: Client.h:201
dev::eth::Client::postSeal
Block postSeal() const override
Definition: Client.h:247
BlockChain.h
dev::eth::Client::m_gp
std::shared_ptr< GasPricer > m_gp
The gas pricer.
Definition: Client.h:339
dev::eth::TransactionQueue
A queue of Transactions, each stored as RLP. Maintains a transaction queue sorted by nonce diff and g...
Definition: TransactionQueue.h:45
dev::eth::Client::setSealer
void setSealer(std::string const &_id)
Change sealer.
Definition: Client.h:160
dev::eth::Client::clearPending
void clearPending()
Clears pending transactions. Just for debug use.
Definition: Client.cpp:318
dev::eth::Client::m_onBlockSealed
Signal< bytes const & > m_onBlockSealed
Called if we have sealed a new block.
Definition: Client.h:383
dev::eth::Client::gasBidPrice
u256 gasBidPrice() const override
Get the gas bid price.
Definition: Client.h:117
dev::VerbosityDebug
@ VerbosityDebug
Definition: Log.h:71
dev::Mutex
std::mutex Mutex
Definition: Guards.h:37
dev::eth::Client::rewind
void rewind(unsigned _n)
Rewind to a prior head.
Definition: Client.cpp:849
dev::eth::Client::flushTransactions
void flushTransactions() override
Blocks until all pending transactions have been processed.
Definition: Client.cpp:792
dev::eth::Client::stopSealing
void stopSealing() override
Stop sealing.
Definition: Client.h:169
dev::eth::Client::setSealOption
bool setSealOption(std::string const &_name, bytes const &_value)
Set option for the sealer.
Definition: Client.h:164
dev::strings
std::vector< std::string > strings
Definition: Common.h:143
dev::eth::ActivityReport::since
std::chrono::system_clock::time_point since
Definition: Client.h:68
dev::eth::Client::onChainChanged
void onChainChanged(ImportRoute const &_ir)
Definition: Client.cpp:554
dev::eth::SealEngineFace::sealers
virtual strings sealers() const
Definition: SealEngine.h:71
dev::eth::Client::appendFromBlock
void appendFromBlock(h256 const &_blockHash, BlockPolarity _polarity, h256Hash &io_changed)
Definition: Client.cpp:353
dev::eth::Client::m_bqReady
Handler m_bqReady
Definition: Client.h:361
dev::eth::Client::m_functionQueue
std::queue< std::function< void()> > m_functionQueue
Functions waiting to be executed in the main thread.
Definition: Client.h:376
dev::eth::Client::m_signalled
std::condition_variable m_signalled
Definition: Client.h:356
dev::eth::Client::postState
dev::eth::Block postState() const
Get the object representing the current state of Ethereum.
Definition: Client.h:124
dev::eth::BlockNumber
unsigned BlockNumber
Definition: Common.h:64
dev::eth::Client::transactionQueueStatus
TransactionQueue::Status transactionQueueStatus() const
Get some information on the transaction queue.
Definition: Client.h:138
dev::eth::Client::x_signalled
Mutex x_signalled
Definition: Client.h:357
dev::eth::Client::m_tqReplaced
Handler< h256 const & > m_tqReplaced
Definition: Client.h:360
dev::eth::Client::remoteActive
bool remoteActive() const
Definition: Client.cpp:571
dev::Worker::startWorking
void startWorking()
Starts worker thread; causes startedWorking() to be called.
Definition: Worker.cpp:30
dev::eth::Client::checkWatchGarbage
void checkWatchGarbage()
Does garbage collection on watches.
Definition: Client.cpp:725
dev::u256
boost::multiprecision::number< boost::multiprecision::cpp_int_backend< 256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void > > u256
Definition: Common.h:121
dev::eth::Signal::add
std::shared_ptr< HandlerAux > add(Callback const &_h)
Definition: Common.h:162
BlockChainImporter.h
dev::eth::operator<<
std::ostream & operator<<(std::ostream &_out, BlockHeader const &_bi)
Definition: BlockHeader.h:217
dev::eth::Client::shouldServeWork
bool shouldServeWork() const
Is there an active and valid remote worker?
Definition: Client.h:327
dev::eth::Client::m_tq
TransactionQueue m_tq
Maintains a list of incoming transactions not yet in a block on the blockchain.
Definition: Client.h:337
dev::eth::Client::isMajorSyncing
bool isMajorSyncing() const override
Are we syncing the chain?
Definition: Client.cpp:222
dev::eth::TransactionReceipt
Definition: TransactionReceipt.h:40
dev::eth::ImportRoute
Definition: Common.h:90
dev::eth::Client::gasPricer
std::shared_ptr< GasPricer > gasPricer() const
Definition: Client.h:93
dev::eth::Client::killChain
void killChain()
Kills the blockchain. Just for debug use.
Definition: Client.h:192
dev::eth::Client::onDeadBlocks
void onDeadBlocks(h256s const &_blocks, h256Hash &io_changed)
Called on chain changes.
Definition: Client.cpp:457
dev
Definition: Address.cpp:21
dev::eth::Client::m_working
Block m_working
The state of the client which we're sealing (i.e. it'll have all the rewards added),...
Definition: Client.h:347
dev::eth::Client::tick
void tick()
Ticks various system-level objects.
Definition: Client.cpp:712
dev::eth::Client::isSyncing
bool isSyncing() const override
Are we updating the chain (syncing or importing a new block)?
Definition: Client.cpp:215
dev::eth::Client::onBadBlock
void onBadBlock(Exception &_ex) const
Definition: Client.cpp:170
dev::eth::ExecutionResult
Description of the result of executing a transaction.
Definition: Transaction.h:71
dev::eth::Client::prepareForTransaction
void prepareForTransaction() override
Definition: Client.cpp:753
CommonNet.h
dev::eth::Client::sealer
std::string sealer() const
Current sealer in use.
Definition: Client.h:158
dev::eth::Client::m_lastGetWork
std::chrono::system_clock::time_point m_lastGetWork
Is there an active and valid remote worker?
Definition: Client.h:351
dev::eth::Handler
std::shared_ptr< typename Signal< Args... >::HandlerAux > Handler
Definition: Common.h:181
Guards.h
dev::eth::ActivityReport
Definition: Client.h:66
dev::eth::SealEngineFace::setOption
bool setOption(std::string const &_name, bytes const &_value)
Definition: SealEngine.h:69
dev::eth::Client::noteChanged
void noteChanged(h256Hash const &_filters)
Definition: Client.cpp:644
dev::eth::Client::onPostStateChanged
void onPostStateChanged()
Definition: Client.cpp:576
dev::eth::ClientBase::block
virtual Block block(h256 const &_h) const =0
dev::eth::Client::m_lastTick
std::chrono::system_clock::time_point m_lastTick
When did we last tick()?
Definition: Client.h:368
dev::eth::createStateImporter
std::unique_ptr< StateImporterFace > createStateImporter(OverlayDB &_stateDb)
Definition: StateImporter.cpp:93
dev::eth::Signal
Super-duper signal mechanism. TODO: replace with somthing a bit heavier weight.
Definition: Common.h:134
dev::eth::Block::gasLimitRemaining
u256 gasLimitRemaining() const
Get the remaining gas limit in this block.
Definition: Block.h:180
dev::eth::Client::syncTransactionQueue
void syncTransactionQueue()
Signal handler for when the block queue needs processing.
Definition: Client.cpp:409
dev::eth::Block::setAuthor
void setAuthor(Address const &_id)
Definition: Block.h:113
dev::eth::Client::m_report
ActivityReport m_report
Definition: Client.h:373
dev::eth::Client::setNetworkId
void setNetworkId(u256 const &_n) override
Sets the network id.
Definition: Client.cpp:209
dev::eth::Client::m_postSeal
Block m_postSeal
The state of the client which we're sealing (i.e. it'll have all the rewards added).
Definition: Client.h:345
dev::eth::Client::activityReport
ActivityReport activityReport()
Get a report of activity.
Definition: Client.h:199
dev::eth::Client::retryUnknown
void retryUnknown()
Retries all blocks with unknown parents.
Definition: Client.h:197
dev::eth::ActivityReport::ticks
unsigned ticks
Definition: Client.h:67
dev::eth::Client::sealers
strings sealers() const
Type of sealers available for this seal engine.
Definition: Client.h:156
dev::eth::Client::populateTransactionWithDefaults
TransactionSkeleton populateTransactionWithDefaults(TransactionSkeleton const &_t) const override
Populate the uninitialized fields in the supplied transaction with default values.
Definition: Client.cpp:812
dev::eth::Block
Active model of a block within the block chain. Keeps track of all transactions, receipts and state f...
Definition: Block.h:69
dev::eth::Client::x_postSeal
SharedMutex x_postSeal
Lock on m_postSeal.
Definition: Client.h:344
dev::eth::Client::m_loggerDetail
Logger m_loggerDetail
Definition: Client.h:389
dev::eth::createBlockChainImporter
std::unique_ptr< BlockChainImporterFace > createBlockChainImporter(BlockChain &_blockChain)
Definition: BlockChainImporter.cpp:60
dev::eth::Client::m_onChainChanged
Signal< h256s const &, h256s const & > m_onChainChanged
Called when blockchain was changed.
Definition: Client.h:386
dev::eth::Client::author
Address author() const override
Get the block author address.
Definition: Client.h:147
dev::eth::Client::rejigSealing
void rejigSealing()
Called when wouldSeal(), pendingTransactions() have changed.
Definition: Client.cpp:597
dev::eth::Client::onTransactionQueueReady
void onTransactionQueueReady()
Magically called when m_tq needs syncing. Be nice and don't block.
Definition: Client.h:304
dev::eth::Client::doWork
void doWork() override
Called continuously following sleep for m_idleWaitMs.
Definition: Client.h:271
dev::eth::Client::executeInMainThread
void executeInMainThread(std::function< void()> const &_function)
Queues a function to be executed in the main thread (that owns the blockchain, etc).
Definition: Client.cpp:311
dev::eth::Client::sealOption
bytes sealOption(std::string const &_name) const
Review option for the sealer.
Definition: Client.h:162
dev::eth::Client::setOnChainChanged
Handler< h256s const &, h256s const & > setOnChainChanged(std::function< void(h256s const &, h256s const &)> _handler)
Change the function that is called when blockchain was changed.
Definition: Client.h:225
dev::eth::Client::rescue
void rescue()
Rescue the chain.
Definition: Client.h:205
dev::Worker
Definition: Worker.h:49
dev::eth::Client::onBlockQueueReady
void onBlockQueueReady()
Magically called when m_bq needs syncing. Be nice and don't block.
Definition: Client.h:307