miner

package
v1.1.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 17, 2019 License: MIT Imports: 22 Imported by: 5

Documentation

Overview

Package miner implements Matrix block creation and mining.

Index

Constants

View Source
const (
	ModuleWork  = "Miner_Work"
	ModuleMiner = "Miner"
)

Variables

View Source
var (
	LimitBroadcastRole = errors.New("change Broadcast to others")
)

Functions

This section is empty.

Types

type Agent

type Agent interface {
	Work() chan<- *Work
	SetReturnCh(chan<- *types.Header)
	Stop()
	Start()
	GetHashRate() int64
}

Agent can register themself with the worker

type ChainReader added in v1.1.1

type ChainReader interface {
	Config() *params.ChainConfig
	Engine(version []byte) consensus.Engine
	DPOSEngine(version []byte) consensus.DPOSEngine
	VerifyHeader(header *types.Header) error
	GetCurrentHash() common.Hash
	GetGraphByHash(hash common.Hash) (*mc.TopologyGraph, *mc.ElectGraph, error)
	GetBroadcastAccounts(blockHash common.Hash) ([]common.Address, error)
	GetInnerMinerAccounts(blockHash common.Hash) ([]common.Address, error)
	GetVersionSuperAccounts(blockHash common.Hash) ([]common.Address, error)
	GetBlockSuperAccounts(blockHash common.Hash) ([]common.Address, error)
	GetBroadcastIntervalByHash(blockHash common.Hash) (*mc.BCIntervalInfo, error)
	GetA0AccountFromAnyAccount(account common.Address, blockHash common.Hash) (common.Address, common.Address, error)
	CurrentHeader() *types.Header
	// GetBlock retrieves a block from the database by hash and number.
	GetBlock(hash common.Hash, number uint64) *types.Block
	GetHeader(hash common.Hash, number uint64) *types.Header

	// GetHeaderByNumber retrieves a block header from the database by number.
	GetHeaderByNumber(number uint64) *types.Header

	// GetHeaderByHash retrieves a block header from the database by its hash.
	GetHeaderByHash(hash common.Hash) *types.Header
}

type CpuAgent

type CpuAgent struct {
	// contains filtered or unexported fields
}

func NewCpuAgent

func NewCpuAgent(chain ChainReader) *CpuAgent

func (*CpuAgent) GetHashRate

func (self *CpuAgent) GetHashRate() int64

func (*CpuAgent) SetReturnCh

func (self *CpuAgent) SetReturnCh(ch chan<- *types.Header)

func (*CpuAgent) Start

func (self *CpuAgent) Start()

func (*CpuAgent) Stop

func (self *CpuAgent) Stop()

func (*CpuAgent) Work

func (self *CpuAgent) Work() chan<- *Work

type Miner

type Miner struct {
	// contains filtered or unexported fields
}

Miner creates blocks and searches for proof-of-work values.

func New

func New(bc *core.BlockChain, config *params.ChainConfig, mux *event.TypeMux, hd *msgsend.HD) (*Miner, error)

func (*Miner) Getworker

func (s *Miner) Getworker() *worker

func (*Miner) HashRate

func (self *Miner) HashRate() (tot int64)

func (*Miner) Mining

func (self *Miner) Mining() bool

func (*Miner) Pending

func (self *Miner) Pending() (*types.Block, *state.StateDBManage)

Pending returns the currently pending block and associated state.

func (*Miner) PendingBlock

func (self *Miner) PendingBlock() *types.Block

// PendingBlock returns the currently pending block. // // Note, to access both the pending block and the pending state // simultaneously, please use Pending(), as the pending state can // change between multiple method calls

func (*Miner) Register

func (self *Miner) Register(agent Agent)

func (*Miner) SetExtra

func (self *Miner) SetExtra(extra []byte) error

func (*Miner) Start

func (self *Miner) Start()

Start

func (*Miner) Stop

func (self *Miner) Stop()

func (*Miner) Unregister

func (self *Miner) Unregister(agent Agent)

type RemoteAgent

type RemoteAgent struct {
	// contains filtered or unexported fields
}

func NewRemoteAgent

func NewRemoteAgent(chain consensus.ChainReader, engine consensus.Engine) *RemoteAgent

func (*RemoteAgent) GetHashRate

func (a *RemoteAgent) GetHashRate() (tot int64)

GetHashRate returns the accumulated hashrate of all identifier combined

func (*RemoteAgent) GetWork

func (a *RemoteAgent) GetWork() ([3]string, error)

func (*RemoteAgent) SetReturnCh

func (a *RemoteAgent) SetReturnCh(returnCh chan<- *types.Header)

func (*RemoteAgent) Start

func (a *RemoteAgent) Start()

func (*RemoteAgent) Stop

func (a *RemoteAgent) Stop()

func (*RemoteAgent) SubmitHashrate

func (a *RemoteAgent) SubmitHashrate(id common.Hash, rate uint64)

func (*RemoteAgent) SubmitWork

func (a *RemoteAgent) SubmitWork(nonce types.BlockNonce, mixDigest, hash common.Hash) bool

SubmitWork tries to inject a pow solution into the remote agent, returning whether the solution was accepted or not (not can be both a bad pow as well as any other error, like no work pending).

func (*RemoteAgent) Work

func (a *RemoteAgent) Work() chan<- *Work

type Result

type Result struct {
	Difficulty *big.Int
	Header     *types.Header
}

type Work

type Work struct {
	Block *types.Block // the new block
	// contains filtered or unexported fields
}

Work is the workers current environment and holds all of the current state information

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL