Documentation ¶
Overview ¶
Package stratumminer provides some utilities and common code for specific client implementations
Package stratumminer is responsible for finding valid block headers and submitting them to a stratum server
Package stratumminer implements the basic stratum protocol. This is normal jsonrpc but the go standard library is insufficient since we need features like notifications.
Index ¶
- type BaseClient
- type DeprecatedJobCall
- type ErrorCallback
- type GenericClient
- type HeaderProvider
- type HeaderReporter
- type NotificationHandler
- type SiadClient
- func (sc *SiadClient) Connected() bool
- func (sc *SiadClient) GetHeaderForWork() (target []byte, header []byte, deprecationChannel chan bool, job interface{}, ...)
- func (sc *SiadClient) SetDeprecatedJobCall(call DeprecatedJobCall)
- func (sc *SiadClient) Start()
- func (sc *SiadClient) Stop()
- func (sc *SiadClient) SubmitHeader(header []byte, job interface{}) (err error)
- type StratumClient
- func (sc *StratumClient) Connected() bool
- func (sc *StratumClient) GetHeaderForWork() (target, header []byte, deprecationChannel chan bool, job interface{}, ...)
- func (sc *StratumClient) RestartOnError(err error)
- func (sc *StratumClient) Start()
- func (sc *StratumClient) Stop()
- func (sc *StratumClient) SubmitHeader(header []byte, job interface{}) (err error)
- func (sc *StratumClient) SubscribeAndAuthorize()
- type StratumMiner
- func (sm *StratumMiner) Close() error
- func (sm *StratumMiner) Connected() bool
- func (sm *StratumMiner) Hashrate() float64
- func (sm *StratumMiner) Mining() bool
- func (sm *StratumMiner) StartStratumMining(server, username string)
- func (sm *StratumMiner) StopStratumMining()
- func (sm *StratumMiner) Submissions() uint64
- type TcpClient
- func (c *TcpClient) Call(serviceMethod string, args []string) (reply interface{}, err error)
- func (c *TcpClient) Close()
- func (c *TcpClient) Connected() bool
- func (c *TcpClient) Dial(host string) (err error)
- func (c *TcpClient) Listen()
- func (c *TcpClient) SetNotificationHandler(method string, handler NotificationHandler)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BaseClient ¶
type BaseClient struct {
// contains filtered or unexported fields
}
BaseClient implements some common properties and functionality
func (*BaseClient) AddJobToDeprecate ¶
func (sc *BaseClient) AddJobToDeprecate(jobid string)
AddJobToDeprecate add the jobid to the list of jobs that should be deprecated when the times comes
func (*BaseClient) DeprecateOutstandingJobs ¶
func (sc *BaseClient) DeprecateOutstandingJobs()
DeprecateOutstandingJobs closes all deprecationChannels and removes them from the list This method is not threadsafe
func (*BaseClient) GetDeprecationChannel ¶
func (sc *BaseClient) GetDeprecationChannel(jobid string) chan bool
GetDeprecationChannel return the channel that will be closed when a job gets deprecated
func (*BaseClient) SetDeprecatedJobCall ¶
func (sc *BaseClient) SetDeprecatedJobCall(call DeprecatedJobCall)
SetDeprecatedJobCall sets the function to be called when the previous jobs should be abandoned
type DeprecatedJobCall ¶
type DeprecatedJobCall func()
DeprecatedJobCall is a function that can be registered on a client to be executed when the server indicates that all previous jobs should be abandoned
type ErrorCallback ¶
type ErrorCallback func(err error)
ErrorCallback is the type of function that be registered to be notified of errors requiring a client to be dropped and a new one to be created
type GenericClient ¶
type GenericClient interface { HeaderProvider HeaderReporter // Start connects to a sia daemon and starts supplying valid headers // It can be empty in case of a "getwork" implementation or maintain a tcp connection // in case of stratum for example Start() // Stop disconnects Stop() // Connected specifies if we're connected or not Connected() bool // SetDeprecatedJobCall sets the function to be called when the previous jobs should be // abandoned SetDeprecatedJobCall(call DeprecatedJobCall) }
GenericClient defines the interface for a client towards a work provider
func NewClient ¶
func NewClient(connectionstring, pooluser string) (sc GenericClient)
NewClient creates a new client given a '[stratum+tcp://]host:port' connectionstring
type HeaderProvider ¶
type HeaderProvider interface { // GetHeaderForWork providers a header to mine on // the deprecationChannel is closed when the job should be abandoned GetHeaderForWork() (target, header []byte, deprecationChannel chan bool, job interface{}, err error) }
HeaderProvider supplies headers for a miner to mine on
type HeaderReporter ¶
type HeaderReporter interface { //SubmitHeader reports a solved header SubmitHeader(header []byte, job interface{}) (err error) }
HeaderReporter defines the required method a SIA client or pool client should implement for miners to be able to report solved headers
type NotificationHandler ¶
type NotificationHandler func(args []interface{})
NotificationHandler is the signature for a function that handles notifications
type SiadClient ¶
type SiadClient struct {
// contains filtered or unexported fields
}
SiadClient is a simple client to a spd
func (*SiadClient) Connected ¶
func (sc *SiadClient) Connected() bool
Connected is always true if we're using a local node
func (*SiadClient) GetHeaderForWork ¶
func (sc *SiadClient) GetHeaderForWork() (target []byte, header []byte, deprecationChannel chan bool, job interface{}, err error)
GetHeaderForWork fetches new work from the SIA daemon
func (*SiadClient) SetDeprecatedJobCall ¶
func (sc *SiadClient) SetDeprecatedJobCall(call DeprecatedJobCall)
SetDeprecatedJobCall does nothing
func (*SiadClient) SubmitHeader ¶
func (sc *SiadClient) SubmitHeader(header []byte, job interface{}) (err error)
SubmitHeader reports a solved header to the SIA daemon
type StratumClient ¶
type StratumClient struct { User string BaseClient // contains filtered or unexported fields }
StratumClient is a sia client using the stratum protocol
func (*StratumClient) Connected ¶
func (sc *StratumClient) Connected() bool
Connected returns whether or not the stratumclient has an open tcp connection
func (*StratumClient) GetHeaderForWork ¶
func (sc *StratumClient) GetHeaderForWork() (target, header []byte, deprecationChannel chan bool, job interface{}, err error)
GetHeaderForWork fetches new work from the SIA daemon
func (*StratumClient) RestartOnError ¶
func (sc *StratumClient) RestartOnError(err error)
RestartOnError closes the old tcpclient and starts the process of opening a new tcp connection
func (*StratumClient) Start ¶
func (sc *StratumClient) Start()
Start connects to the stratumserver and processes the notifications
func (*StratumClient) Stop ¶
func (sc *StratumClient) Stop()
Stop shuts down the stratumclient and closes the tcp connection
func (*StratumClient) SubmitHeader ¶
func (sc *StratumClient) SubmitHeader(header []byte, job interface{}) (err error)
SubmitHeader reports a solution to the stratum server
func (*StratumClient) SubscribeAndAuthorize ¶
func (sc *StratumClient) SubscribeAndAuthorize()
SubscribeAndAuthorize first attempts to authorize and, if successful, subscribes
type StratumMiner ¶
type StratumMiner struct { HashRateReports chan float64 Client GenericClient // contains filtered or unexported fields }
StratumMiner does the actual stratum mining
func (*StratumMiner) Close ¶
func (sm *StratumMiner) Close() error
Close is called when the module is shutting down and shuts down the miner
func (*StratumMiner) Connected ¶
func (sm *StratumMiner) Connected() bool
Connected returns whether or not the miner has an open tcp connection to the stratum server
func (*StratumMiner) Hashrate ¶
func (sm *StratumMiner) Hashrate() float64
Hashrate returns the miner's hashrate
func (*StratumMiner) Mining ¶
func (sm *StratumMiner) Mining() bool
Mining returns whether or not the miner is both connected and hashing
func (*StratumMiner) StartStratumMining ¶
func (sm *StratumMiner) StartStratumMining(server, username string)
StartStratumMining spins off two goroutines: One listens for work via a tcp connection and pushes it into a work channel The other waits for work from the channel and then grinds on it and submits solutions
func (*StratumMiner) StopStratumMining ¶
func (sm *StratumMiner) StopStratumMining()
StopStratumMining tells the miner to stop mining
func (*StratumMiner) Submissions ¶
func (sm *StratumMiner) Submissions() uint64
Submissions returns the count of submissions submitted by the miner
type TcpClient ¶
type TcpClient struct { ErrorCallback ErrorCallback // contains filtered or unexported fields }
TcpClient maintains a connection to the stratum server and (de)serializes requests/reponses/notifications
func (*TcpClient) Call ¶
Call invokes the named function, waits for it to complete, and returns its error status.
func (*TcpClient) Connected ¶
Connected returns whether or not the tcp client has an open tcp socket
func (*TcpClient) Dial ¶
Dial connects to a stratum+tcp at the specified network address. This function is not threadsafe If an error occurs, it is both returned here and through the ErrorCallback of the TcpClient
func (*TcpClient) Listen ¶
func (c *TcpClient) Listen()
Listen reads data from the open connection, deserializes it and dispatches the reponses and notifications This is a blocking function and will continue to listen until an error occurs (io or deserialization)
func (*TcpClient) SetNotificationHandler ¶
func (c *TcpClient) SetNotificationHandler(method string, handler NotificationHandler)
SetNotificationHandler registers a function to handle notification for a specific method. This function is not threadsafe and all notificationhandlers should be set prior to calling the Dial function