Fabcoin Core  0.16.2
P2P Digital Currency
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
dev::eth::EthashClient Class Reference

#include <EthashClient.h>

Inheritance diagram for dev::eth::EthashClient:
[legend]
Collaboration diagram for dev::eth::EthashClient:
[legend]

Public Member Functions

 EthashClient (ChainParams const &_params, int _networkID, p2p::Host *_host, std::shared_ptr< GasPricer > _gpForAdoption, std::string const &_dbPath=std::string(), WithExisting _forceAction=WithExisting::Trust, TransactionQueue::Limits const &_l=TransactionQueue::Limits{1024, 1024})
 Trivial forwarding constructor. More...
 
Ethashethash () const
 
void setShouldPrecomputeDAG (bool _precompute)
 Enable/disable precomputing of the DAG for next epoch. More...
 
bool isMining () const
 Are we mining now? More...
 
u256 hashrate () const
 The hashrate... More...
 
WorkingProgress miningProgress () const
 Check the progress of the mining. More...
 
bool shouldServeWork () const
 
std::tuple< h256, h256, h256getEthashWork ()
 Update to the latest transactions and get hash of the current block to be mined minus the nonce (the 'work hash') and the difficulty to be met. More...
 
bool submitEthashWork (h256 const &_mixHash, h64 const &_nonce)
 Submit the proof for the proof-of-work. More...
 
void submitExternalHashrate (u256 const &_rate, h256 const &_id)
 
- Public Member Functions inherited from dev::eth::Client
 Client (ChainParams const &_params, int _networkID, p2p::Host *_host, std::shared_ptr< GasPricer > _gpForAdoption, std::string const &_dbPath=std::string(), WithExisting _forceAction=WithExisting::Trust, TransactionQueue::Limits const &_l=TransactionQueue::Limits{1024, 1024})
 
virtual ~Client ()
 Destructor. More...
 
ChainParams const & chainParams () const
 Get information on this chain. More...
 
void setGasPricer (std::shared_ptr< GasPricer > _gp)
 Resets the gas pricer to some other object. More...
 
std::shared_ptr< GasPricergasPricer () const
 
virtual void flushTransactions () override
 Blocks until all pending transactions have been processed. More...
 
ImportResult queueBlock (bytes const &_block, bool _isSafe=false)
 Queues a block for import. More...
 
ExecutionResult call (Address _dest, bytes const &_data=bytes(), u256 _gas=125000, u256 _value=0, u256 _gasPrice=1 *ether, Address const &_from=Address())
 Makes the given call. Nothing is recorded into the state. This cheats by creating a null address and endowing it with a lot of ETH. More...
 
virtual u256 gasLimitRemaining () const override
 Get the remaining gas limit in this block. More...
 
virtual u256 gasBidPrice () const override
 Get the gas bid price. More...
 
dev::eth::Block block (h256 const &_blockHash, PopulationStatistics *o_stats) const
 Get the block. More...
 
dev::eth::State state (unsigned _txi, h256 const &_block) const
 Get the state of the given block part way through execution, immediately before transaction index _txi. More...
 
dev::eth::State state (unsigned _txi) const
 Get the state of the currently pending block part way through execution, immediately before transaction index _txi. More...
 
dev::eth::Block postState () const
 Get the object representing the current state of Ethereum. More...
 
BlockChain const & blockChain () const
 Get the object representing the current canonical blockchain. More...
 
BlockQueueStatus blockQueueStatus () const
 Get some information on the block queue. More...
 
SyncStatus syncStatus () const override
 Get some information on the block syncing. More...
 
BlockQueue const & blockQueue () const
 Get the block queue. More...
 
OverlayDB const & stateDB () const
 Get the block queue. More...
 
TransactionQueue::Status transactionQueueStatus () const
 Get some information on the transaction queue. More...
 
TransactionQueue::Limits transactionQueueLimits () const
 
std::tuple< ImportRoute, bool, unsigned > syncQueue (unsigned _max=1)
 Freeze worker thread and sync some of the block queue. More...
 
virtual Address author () const override
 Get the block author. More...
 
virtual void setAuthor (Address const &_us) override
 Set the block author address. More...
 
strings sealers () const
 Type of sealers available for this seal engine. More...
 
std::string sealer () const
 Current sealer in use. More...
 
void setSealer (std::string const &_id)
 Change sealer. More...
 
bytes sealOption (std::string const &_name) const
 Review option for the sealer. More...
 
bool setSealOption (std::string const &_name, bytes const &_value)
 Set option for the sealer. More...
 
void startSealing () override
 Start sealing. More...
 
void stopSealing () override
 Stop sealing. More...
 
bool wouldSeal () const override
 Are we sealing now? More...
 
bool isSyncing () const override
 Are we updating the chain (syncing or importing a new block)? More...
 
bool isMajorSyncing () const override
 Are we syncing the chain? More...
 
u256 networkId () const override
 Gets the network id. More...
 
void setNetworkId (u256 const &_n) override
 Sets the network id. More...
 
SealEngineFacesealEngine () const override
 Get the seal engine. More...
 
DownloadMan const * downloadMan () const
 
void clearPending ()
 Clears pending transactions. Just for debug use. More...
 
void killChain ()
 Kills the blockchain. Just for debug use. More...
 
void reopenChain (ChainParams const &_p, WithExisting _we=WithExisting::Trust)
 Reloads the blockchain. Just for debug use. More...
 
void reopenChain (WithExisting _we)
 
void retryUnknown ()
 Retries all blocks with unknown parents. More...
 
ActivityReport activityReport ()
 Get a report of activity. More...
 
void setExtraData (bytes const &_extraData)
 Set the extra data that goes into sealed blocks. More...
 
void rewind (unsigned _n)
 Rewind to a prior head. More...
 
void rescue ()
 Rescue the chain. More...
 
void executeInMainThread (std::function< void()> const &_function)
 Queues a function to be executed in the main thread (that owns the blockchain, etc). More...
 
virtual Block block (h256 const &_block) const override
 
- Public Member Functions inherited from dev::eth::ClientBase
 ClientBase (TransactionQueue::Limits const &_l=TransactionQueue::Limits{1024, 1024})
 
virtual ~ClientBase ()
 
virtual std::pair< h256, AddresssubmitTransaction (TransactionSkeleton const &_t, Secret const &_secret) override
 Submits the given transaction. More...
 
virtual 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. More...
 
virtual ExecutionResult create (Address const &_secret, u256 _value, bytes const &_data, u256 _gas, u256 _gasPrice, BlockNumber _blockNumber, FudgeFactor _ff=FudgeFactor::Strict) override
 Makes the given create. Nothing is recorded into the state. More...
 
virtual std::pair< u256, ExecutionResultestimateGas (Address const &_from, u256 _value, Address _dest, bytes const &_data, int64_t _maxGas, u256 _gasPrice, BlockNumber _blockNumber, GasEstimationCallback const &_callback) override
 Estimate gas usage for call/create. More...
 
virtual u256 balanceAt (Address _a, BlockNumber _block) const override
 
virtual u256 countAt (Address _a, BlockNumber _block) const override
 
virtual u256 stateAt (Address _a, u256 _l, BlockNumber _block) const override
 
virtual h256 stateRootAt (Address _a, BlockNumber _block) const override
 
virtual bytes codeAt (Address _a, BlockNumber _block) const override
 
virtual h256 codeHashAt (Address _a, BlockNumber _block) const override
 
virtual std::map< h256, std::pair< u256, u256 > > storageAt (Address _a, BlockNumber _block) const override
 
virtual LocalisedLogEntries logs (unsigned _watchId) const override
 
virtual LocalisedLogEntries logs (LogFilter const &_filter) const override
 
virtual void prependLogsFromBlock (LogFilter const &_filter, h256 const &_blockHash, BlockPolarity _polarity, LocalisedLogEntries &io_logs) const
 
virtual unsigned installWatch (LogFilter const &_filter, Reaping _r=Reaping::Automatic) override
 Install, uninstall and query watches. More...
 
virtual unsigned installWatch (h256 _filterId, Reaping _r=Reaping::Automatic) override
 
virtual bool uninstallWatch (unsigned _watchId) override
 
virtual LocalisedLogEntries peekWatch (unsigned _watchId) const override
 
virtual LocalisedLogEntries checkWatch (unsigned _watchId) override
 
virtual h256 hashFromNumber (BlockNumber _number) const override
 
virtual BlockNumber numberFromHash (h256 _blockHash) const override
 
virtual int compareBlockHashes (h256 _h1, h256 _h2) const override
 
virtual BlockHeader blockInfo (h256 _hash) const override
 
virtual BlockDetails blockDetails (h256 _hash) const override
 
virtual Transaction transaction (h256 _transactionHash) const override
 
virtual LocalisedTransaction localisedTransaction (h256 const &_transactionHash) const override
 
virtual Transaction transaction (h256 _blockHash, unsigned _i) const override
 
virtual LocalisedTransaction localisedTransaction (h256 const &_blockHash, unsigned _i) const override
 
virtual TransactionReceipt transactionReceipt (h256 const &_transactionHash) const override
 
virtual LocalisedTransactionReceipt localisedTransactionReceipt (h256 const &_transactionHash) const override
 
virtual std::pair< h256, unsigned > transactionLocation (h256 const &_transactionHash) const override
 
virtual Transactions transactions (h256 _blockHash) const override
 
virtual TransactionHashes transactionHashes (h256 _blockHash) const override
 
virtual BlockHeader uncle (h256 _blockHash, unsigned _i) const override
 
virtual UncleHashes uncleHashes (h256 _blockHash) const override
 
virtual unsigned transactionCount (h256 _blockHash) const override
 
virtual unsigned uncleCount (h256 _blockHash) const override
 
virtual unsigned number () const override
 
virtual Transactions pending () const override
 Get a map containing each of the pending transactions. More...
 
virtual h256s pendingHashes () const override
 
virtual BlockHeader pendingInfo () const override
 
virtual BlockDetails pendingDetails () const override
 
virtual EVMSchedule evmSchedule () const override
 
virtual ImportResult injectTransaction (bytes const &_rlp, IfDropped _id=IfDropped::Ignore) override
 Injects the RLP-encoded transaction given by the _rlp into the transaction queue directly. More...
 
virtual ImportResult injectBlock (bytes const &_block) override
 Injects the RLP-encoded block given by the _rlp into the block queue directly. More...
 
virtual Addresses addresses (BlockNumber _block) const override
 
virtual bool isKnown (h256 const &_hash) const override
 
virtual bool isKnown (BlockNumber _block) const override
 
virtual bool isKnownTransaction (h256 const &_transactionHash) const override
 
virtual bool isKnownTransaction (h256 const &_blockHash, unsigned _i) const override
 
Block block (BlockNumber _h) const
 
- Public Member Functions inherited from dev::eth::Interface
 Interface ()
 Constructor. More...
 
virtual ~Interface ()
 Destructor. More...
 
void submitTransaction (Secret const &_secret, u256 const &_value, Address const &_dest, bytes const &_data=bytes(), u256 const &_gas=1000000, u256 const &_gasPrice=DefaultGasPrice, u256 const &_nonce=Invalid256)
 Submits the given message-call transaction. More...
 
Address submitTransaction (Secret const &_secret, u256 const &_endowment, bytes const &_init, u256 const &_gas=1000000, u256 const &_gasPrice=DefaultGasPrice, u256 const &_nonce=Invalid256)
 Submits a new contract-creation transaction. More...
 
ExecutionResult call (Address const &_from, u256 _value, Address _dest, bytes const &_data=bytes(), u256 _gas=1000000, u256 _gasPrice=DefaultGasPrice, FudgeFactor _ff=FudgeFactor::Strict)
 
ExecutionResult call (Secret const &_secret, u256 _value, Address _dest, bytes const &_data, u256 _gas, u256 _gasPrice, BlockNumber _blockNumber, FudgeFactor _ff=FudgeFactor::Strict)
 
ExecutionResult call (Secret const &_secret, u256 _value, Address _dest, bytes const &_data, u256 _gas, u256 _gasPrice, FudgeFactor _ff=FudgeFactor::Strict)
 
ExecutionResult create (Address const &_from, u256 _value, bytes const &_data=bytes(), u256 _gas=1000000, u256 _gasPrice=DefaultGasPrice, FudgeFactor _ff=FudgeFactor::Strict)
 
ExecutionResult create (Secret const &_secret, u256 _value, bytes const &_data, u256 _gas, u256 _gasPrice, BlockNumber _blockNumber, FudgeFactor _ff=FudgeFactor::Strict)
 
ExecutionResult create (Secret const &_secret, u256 _value, bytes const &_data, u256 _gas, u256 _gasPrice, FudgeFactor _ff=FudgeFactor::Strict)
 
int getDefault () const
 
void setDefault (BlockNumber _block)
 
u256 balanceAt (Address _a) const
 
u256 countAt (Address _a) const
 
u256 stateAt (Address _a, u256 _l) const
 
bytes codeAt (Address _a) const
 
h256 codeHashAt (Address _a) const
 
std::map< h256, std::pair< u256, u256 > > storageAt (Address _a) const
 
LocalisedLogEntries peekWatchSafe (unsigned _watchId) const
 
LocalisedLogEntries checkWatchSafe (unsigned _watchId)
 
BlockHeader blockInfo (BlockNumber _block) const
 
BlockDetails blockDetails (BlockNumber _block) const
 
Transaction transaction (BlockNumber _block, unsigned _i) const
 
unsigned transactionCount (BlockNumber _block) const
 
Transactions transactions (BlockNumber _block) const
 
TransactionHashes transactionHashes (BlockNumber _block) const
 
BlockHeader uncle (BlockNumber _block, unsigned _i) const
 
UncleHashes uncleHashes (BlockNumber _block) const
 
unsigned uncleCount (BlockNumber _block) const
 
virtual Addresses addresses () const
 Get a list of all active addresses. More...
 

Protected Member Functions

u256 externalHashrate () const
 
- Protected Member Functions inherited from dev::eth::Client
void init (p2p::Host *_extNet, std::string const &_dbPath, WithExisting _forceAction, u256 _networkId)
 Perform critical setup functions. More...
 
BlockChainbc () override
 InterfaceStub methods. More...
 
BlockChain const & bc () const override
 
virtual Block preSeal () const override
 Returns the state object for the full block (i.e. More...
 
virtual Block postSeal () const override
 
virtual void prepareForTransaction () override
 
void appendFromNewPending (TransactionReceipt const &_receipt, h256Hash &io_changed, h256 _sha3)
 Collate the changed filters for the bloom filter of the given pending transaction. More...
 
void appendFromBlock (h256 const &_blockHash, BlockPolarity _polarity, h256Hash &io_changed)
 Collate the changed filters for the hash of the given block. More...
 
void noteChanged (h256Hash const &_filters)
 Record that the set of filters _filters have changed. More...
 
virtual bool submitSealed (bytes const &_s)
 Submit. More...
 
void startedWorking () override
 Called when Worker is starting. More...
 
void doWork (bool _doWait)
 Do some work. Handles blockchain maintenance and sealing. More...
 
void doWork () override
 Called continuously following sleep for m_idleWaitMs. More...
 
void doneWorking () override
 Called when Worker is exiting. More...
 
void rejigSealing ()
 Called when wouldSeal(), pendingTransactions() have changed. More...
 
void onDeadBlocks (h256s const &_blocks, h256Hash &io_changed)
 Called on chain changes. More...
 
virtual void onNewBlocks (h256s const &_blocks, h256Hash &io_changed)
 Called on chain changes. More...
 
void resyncStateFromChain ()
 Called after processing blocks by onChainChanged(_ir) More...
 
void resetState ()
 Clear working state of transactions. More...
 
void onChainChanged (ImportRoute const &_ir)
 Magically called when the chain has changed. More...
 
void syncBlockQueue ()
 Signal handler for when the block queue needs processing. More...
 
void syncTransactionQueue ()
 Signal handler for when the block queue needs processing. More...
 
void onTransactionQueueReady ()
 Magically called when m_tq needs syncing. Be nice and don't block. More...
 
void onBlockQueueReady ()
 Magically called when m_bq needs syncing. Be nice and don't block. More...
 
void onPostStateChanged ()
 Called when the post state has changed (i.e. More...
 
void checkWatchGarbage ()
 Does garbage collection on watches. More...
 
void tick ()
 Ticks various system-level objects. More...
 
void onBadBlock (Exception &_ex) const
 Called when we have attempted to import a bad block. More...
 
void callQueuedFunctions ()
 Executes the pending functions in m_functionQueue. More...
 
bool remoteActive () const
 Is there an active and valid remote worker? More...
 
- Protected Member Functions inherited from dev::Worker
 Worker (std::string const &_name="anon", unsigned _idleWaitMs=30)
 
 Worker (Worker &&_m)
 Move-constructor. More...
 
Workeroperator= (Worker &&_m)
 Move-assignment. More...
 
virtual ~Worker ()
 
void setName (std::string _n)
 Allows changing worker name if work is stopped. More...
 
void startWorking ()
 Starts worker thread; causes startedWorking() to be called. More...
 
void stopWorking ()
 Stop worker thread; causes call to stopWorking(). More...
 
bool isWorking () const
 Returns if worker thread is present. More...
 
virtual void workLoop ()
 Overrides doWork(); should call shouldStop() often and exit when true. More...
 
bool shouldStop () const
 

Protected Attributes

std::unordered_map< h256, std::pair< u256, std::chrono::steady_clock::time_point > > m_externalRates
 
SharedMutex x_externalRates
 
- Protected Attributes inherited from dev::eth::Client
BlockChain m_bc
 Maintains block database and owns the seal engine. More...
 
BlockQueue m_bq
 Maintains a list of incoming blocks not yet on the blockchain (to be imported). More...
 
std::shared_ptr< GasPricerm_gp
 The gas pricer. More...
 
OverlayDB m_stateDB
 Acts as the central point for the state database, so multiple States can share it. More...
 
SharedMutex x_preSeal
 Lock on m_preSeal. More...
 
Block m_preSeal
 The present state of the client. More...
 
SharedMutex x_postSeal
 Lock on m_postSeal. More...
 
Block m_postSeal
 The state of the client which we're sealing (i.e. it'll have all the rewards added). More...
 
SharedMutex x_working
 Lock on m_working. More...
 
Block m_working
 The state of the client which we're sealing (i.e. it'll have all the rewards added), while we're actually working on it. More...
 
BlockHeader m_sealingInfo
 The header we're attempting to seal on (derived from m_postSeal). More...
 
bool m_remoteWorking = false
 Has the remote worker recently been reset? More...
 
std::atomic< bool > m_needStateReset = { false }
 Need reset working state to premin on next sync. More...
 
std::chrono::system_clock::time_point m_lastGetWork
 Is there an active and valid remote worker? More...
 
std::weak_ptr< EthereumHostm_host
 Our Ethereum Host. Don't do anything if we can't lock. More...
 
Handler m_tqReady
 
Handler< h256 const & > m_tqReplaced
 
Handler m_bqReady
 
bool m_wouldSeal = false
 True if we /should/ be sealing. More...
 
bool m_wouldButShouldnot = false
 True if the last time we called rejigSealing wouldSeal() was true but sealer's shouldSeal() was false. More...
 
std::chrono::system_clock::time_point m_lastGarbageCollection
 When did we last both doing GC on the watches? More...
 
std::chrono::system_clock::time_point m_lastTick = std::chrono::system_clock::now()
 When did we last tick()? More...
 
unsigned m_syncAmount = 50
 Number of blocks to sync in each go. More...
 
ActivityReport m_report
 
SharedMutex x_functionQueue
 
std::queue< std::function< void()> > m_functionQueue
 Functions waiting to be executed in the main thread. More...
 
std::condition_variable m_signalled
 
Mutex x_signalled
 
std::atomic< bool > m_syncTransactionQueue = {false}
 
std::atomic< bool > m_syncBlockQueue = {false}
 
bytes m_extraData
 
- Protected Attributes inherited from dev::eth::ClientBase
TransactionQueue m_tq
 } More...
 
Mutex x_filtersWatches
 Our lock. More...
 
std::unordered_map< h256, InstalledFilterm_filters
 The dictionary of filters that are active. More...
 
std::unordered_map< h256, h256sm_specialFilters = std::unordered_map<h256, std::vector<h256>>{{PendingChangedFilter, {}}, {ChainChangedFilter, {}}}
 The dictionary of special filters and their additional data. More...
 
std::map< unsigned, ClientWatchm_watches
 Each and every watch - these reference a filter. More...
 
- Protected Attributes inherited from dev::eth::Interface
int m_default = PendingBlock
 

Detailed Description

Definition at line 36 of file EthashClient.h.

Constructor & Destructor Documentation

EthashClient::EthashClient ( ChainParams const &  _params,
int  _networkID,
p2p::Host _host,
std::shared_ptr< GasPricer _gpForAdoption,
std::string const &  _dbPath = std::string(),
WithExisting  _forceAction = WithExisting::Trust,
TransactionQueue::Limits const &  _l = TransactionQueue::Limits{1024, 1024} 
)

Trivial forwarding constructor.

Definition at line 45 of file EthashClient.cpp.

Here is the call graph for this function:

Member Function Documentation

Ethash * EthashClient::ethash ( ) const

Definition at line 60 of file EthashClient.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

u256 EthashClient::externalHashrate ( ) const
protected

Definition at line 124 of file EthashClient.cpp.

Here is the caller graph for this function:

std::tuple< h256, h256, h256 > EthashClient::getEthashWork ( )

Update to the latest transactions and get hash of the current block to be mined minus the nonce (the 'work hash') and the difficulty to be met.

Returns
Tuple of hash without seal, seed hash, target boundary.

Definition at line 85 of file EthashClient.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

u256 EthashClient::hashrate ( ) const

The hashrate...

Definition at line 77 of file EthashClient.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

bool EthashClient::isMining ( ) const

Are we mining now?

Definition at line 65 of file EthashClient.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

WorkingProgress EthashClient::miningProgress ( ) const

Check the progress of the mining.

Definition at line 70 of file EthashClient.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void EthashClient::setShouldPrecomputeDAG ( bool  _precompute)

Enable/disable precomputing of the DAG for next epoch.

Definition at line 111 of file EthashClient.cpp.

Here is the call graph for this function:

bool dev::eth::EthashClient::shouldServeWork ( ) const
inline
Returns
true only if it's worth bothering to prep the mining block.

Definition at line 65 of file EthashClient.h.

Here is the call graph for this function:

Here is the caller graph for this function:

bool EthashClient::submitEthashWork ( h256 const &  _mixHash,
h64 const &  _nonce 
)

Submit the proof for the proof-of-work.

Parameters
_sA valid solution.
Returns
true if the solution was indeed valid and accepted.

Definition at line 105 of file EthashClient.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void EthashClient::submitExternalHashrate ( u256 const &  _rate,
h256 const &  _id 
)

Definition at line 118 of file EthashClient.cpp.

Here is the caller graph for this function:

Member Data Documentation

std::unordered_map<h256, std::pair<u256, std::chrono::steady_clock::time_point> > dev::eth::EthashClient::m_externalRates
mutableprotected

Definition at line 84 of file EthashClient.h.

SharedMutex dev::eth::EthashClient::x_externalRates
mutableprotected

Definition at line 85 of file EthashClient.h.


The documentation for this class was generated from the following files: