57 lines
945 B
Go
57 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)
|
||
|
}
|