OSDN Git Service

a8d2c5d7ddaae0e768f21bb7e19ece06bbc957e2
[bytom/bytom-spv.git] / blockchain / miner.go
1 package blockchain
2
3 import (
4         "context"
5
6         "github.com/bytom/api"
7         "github.com/bytom/protocol/bc/types"
8 )
9
10 func (bcr *BlockchainReactor) GetWork() (*api.GetWorkResp, error) {
11         bh, err := bcr.miningPool.GetWork()
12         if err != nil {
13                 return nil, err
14         }
15
16         seed, err := bcr.chain.GetSeed(bh.Height, &bh.PreviousBlockHash)
17         if err != nil {
18                 return nil, err
19         }
20
21         return &api.GetWorkResp{
22                 BlockHeader: bh,
23                 Seed:        seed,
24         }, nil
25 }
26
27 func (bcr *BlockchainReactor) SubmitWork(bh *types.BlockHeader) bool {
28         return bcr.miningPool.SubmitWork(bh)
29 }
30
31 func (a *API) getWork() Response {
32         work, err := a.bcr.GetWork()
33         if err != nil {
34                 return NewErrorResponse(err)
35         }
36         return NewSuccessResponse(work)
37 }
38
39 func (a *API) submitWork(bh *types.BlockHeader) Response {
40         return NewSuccessResponse(a.bcr.SubmitWork(bh))
41 }
42
43 func (a *API) getBlockHeaderByHeight(ctx context.Context, req struct {
44         Height uint64 `json:"block_height"`
45 }) Response {
46         block, err := a.chain.GetBlockByHeight(req.Height)
47         if err != nil {
48                 return NewErrorResponse(err)
49         }
50
51         resp := &api.BlockHeaderByHeight{
52                 BlockHeader: &block.BlockHeader,
53                 Reward:      block.Transactions[0].Outputs[0].Amount,
54         }
55         return NewSuccessResponse(resp)
56 }