OSDN Git Service

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