f513fca6a7
1. Fixed a bug, which reads certs even TLS is disabled 2. Persists Stratum TCP connection with auto-reconnect. (retry backoff increases from 1s to 60s maximum) 3. Stratum update jobs on previous notifications are canceled when a new notification arrives. Usually, the jobs are so short and completed immediately. However, if the Stratum connection is broken, this prevents the bridge from accumulating stale jobs.
56 lines
945 B
Go
56 lines
945 B
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net"
|
|
)
|
|
|
|
type stratumClient struct {
|
|
server string
|
|
passwd string
|
|
coinid string
|
|
conn *net.TCPConn
|
|
}
|
|
|
|
func newStratumClient(server, passwd, coinid string) *stratumClient {
|
|
|
|
return &stratumClient{
|
|
server: server,
|
|
}
|
|
}
|
|
|
|
func (c *stratumClient) dial() error {
|
|
|
|
addr, err := net.ResolveTCPAddr("tcp", c.server)
|
|
if err != nil {
|
|
return fmt.Errorf("resolve tcp addr: %w", err)
|
|
}
|
|
|
|
conn, err := net.DialTCP("tcp", nil, addr)
|
|
if err != nil {
|
|
return fmt.Errorf("dial tcp: %w", err)
|
|
}
|
|
c.conn = conn
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *stratumClient) send(ctx context.Context, msg string) error {
|
|
|
|
select {
|
|
case <-ctx.Done():
|
|
return ctx.Err()
|
|
default:
|
|
}
|
|
|
|
_, err := c.conn.Write([]byte(msg))
|
|
|
|
return err
|
|
}
|
|
|
|
func stratumUpdateBlockMsg(stratumPass, coinid, blockHash string) string {
|
|
|
|
return fmt.Sprintf(`{"id":1,"method":"mining.update_block","params":[%q,%s,%q]}`,
|
|
stratumPass, coinid, blockHash)
|
|
}
|