6 "github.com/bytom/errors"
7 "github.com/bytom/protocol/bc"
8 "github.com/bytom/protocol/bc/types"
11 func (a *API) getWork() Response {
12 work, err := a.GetWork()
14 return NewErrorResponse(err)
16 return NewSuccessResponse(work)
19 type SubmitWorkReq struct {
20 BlockHeader *types.BlockHeader `json:"block_header"`
23 func (a *API) submitWork(ctx context.Context, req *SubmitWorkReq) Response {
24 if err := a.SubmitWork(req.BlockHeader); err != nil {
25 return NewErrorResponse(err)
27 return NewSuccessResponse(true)
30 func (a *API) getBlockHeaderByHeight(ctx context.Context, req struct {
31 Height uint64 `json:"block_height"`
33 block, err := a.chain.GetBlockByHeight(req.Height)
35 return NewErrorResponse(err)
38 resp := &BlockHeaderByHeight{
39 BlockHeader: &block.BlockHeader,
40 Reward: block.Transactions[0].Outputs[0].Amount,
42 return NewSuccessResponse(resp)
45 // GetWorkResp is resp struct for API
46 type GetWorkResp struct {
47 BlockHeader *types.BlockHeader `json:"block_header"`
48 Seed *bc.Hash `json:"seed"`
51 func (a *API) GetWork() (*GetWorkResp, error) {
52 bh, err := a.miningPool.GetWork()
57 seed, err := a.chain.CalcNextSeed(&bh.PreviousBlockHash)
68 func (a *API) SubmitWork(bh *types.BlockHeader) error {
69 return a.miningPool.SubmitWork(bh)
72 func (a *API) setMining(in struct {
73 IsMining bool `json:"is_mining"`
76 return a.startMining()
81 func (a *API) startMining() Response {
84 return NewErrorResponse(errors.New("Failed to start mining"))
86 return NewSuccessResponse("")
89 func (a *API) stopMining() Response {
92 return NewErrorResponse(errors.New("Failed to stop mining"))
94 return NewSuccessResponse("")