-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmining.go
68 lines (56 loc) · 2.82 KB
/
mining.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package bn
import (
"context"
"github.com/libsv/go-bc"
"github.com/libsv/go-bn/models"
)
// MiningClient interfaces interaction with the mining sub commands on a bitcoin node.
type MiningClient interface {
BlockTemplate(ctx context.Context, opts *models.BlockTemplateRequest) (*models.BlockTemplate, error)
MiningCandidate(ctx context.Context, opts *models.OptsMiningCandidate) (*models.MiningCandidate, error)
MiningInfo(ctx context.Context) (*models.MiningInfo, error)
NetworkHashPS(ctx context.Context, opts *models.OptsNetworkHashPS) (uint64, error)
PrioritiseTx(ctx context.Context, txID string, feeDelta int64) (bool, error)
SubmitBlock(ctx context.Context, block *bc.Block, params *models.OptsSubmitBlock) (string, error)
SubmitMiningSolution(ctx context.Context, solution *models.MiningSolution) (string, error)
VerifyBlockCandidate(ctx context.Context, block *bc.Block, params *models.OptsSubmitBlock) (string, error)
}
// NewMiningClient returns a client only capable of interfacing with the mining sub commands on a bitcoin node.
func NewMiningClient(oo ...BitcoinClientOptFunc) MiningClient {
return NewNodeClient(oo...)
}
func (c *client) BlockTemplate(ctx context.Context, opts *models.BlockTemplateRequest) (*models.BlockTemplate, error) {
var resp models.BlockTemplate
return &resp, c.rpc.Do(ctx, "getblocktemplate", &resp, c.argsFor(opts)...)
}
func (c *client) MiningCandidate(ctx context.Context,
opts *models.OptsMiningCandidate) (*models.MiningCandidate, error) {
var resp models.MiningCandidate
return &resp, c.rpc.Do(ctx, "getminingcandidate", &resp, c.argsFor(opts)...)
}
func (c *client) MiningInfo(ctx context.Context) (*models.MiningInfo, error) {
var resp models.MiningInfo
return &resp, c.rpc.Do(ctx, "getmininginfo", &resp)
}
// TODO: verify is working with non-zero value
func (c *client) NetworkHashPS(ctx context.Context, opts *models.OptsNetworkHashPS) (uint64, error) {
var resp int64
return uint64(resp), c.rpc.Do(ctx, "getnetworkhashps", &resp, c.argsFor(opts)...)
}
func (c *client) PrioritiseTx(ctx context.Context, txID string, feeDelta int64) (bool, error) {
var resp bool
return resp, c.rpc.Do(ctx, "prioritisetx", &resp, txID, 0, feeDelta)
}
func (c *client) SubmitBlock(ctx context.Context, block *bc.Block, params *models.OptsSubmitBlock) (string, error) {
var resp string
return resp, c.rpc.Do(ctx, "submitblock", &resp, c.argsFor(params, block.String())...)
}
func (c *client) SubmitMiningSolution(ctx context.Context, solution *models.MiningSolution) (string, error) {
var resp string
return resp, c.rpc.Do(ctx, "submitminingsolution", &resp, solution)
}
func (c *client) VerifyBlockCandidate(ctx context.Context, block *bc.Block,
params *models.OptsSubmitBlock) (string, error) {
var resp string
return resp, c.rpc.Do(ctx, "verifyblockcandidate", &resp, c.argsFor(params, block.String())...)
}