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 func (a *API) getWorkJSON() Response {
20 work, err := a.GetWorkJSON()
22 return NewErrorResponse(err)
24 return NewSuccessResponse(work)
27 // SubmitWorkReq used to submitWork req
28 type SubmitWorkReq struct {
29 BlockHeader *types.BlockHeader `json:"block_header"`
32 func (a *API) submitWork(ctx context.Context, req *SubmitWorkReq) Response {
33 if err := a.SubmitWork(req.BlockHeader); err != nil {
34 return NewErrorResponse(err)
36 return NewSuccessResponse(true)
39 func (a *API) submitWorkJSON(ctx context.Context, req *SubmitWorkReq) Response {
40 if err := a.SubmitWork(req.BlockHeader); err != nil {
41 return NewErrorResponse(err)
43 return NewSuccessResponse(true)
46 // GetWorkResp is resp struct for API
47 type GetWorkResp struct {
48 BlockHeader *types.BlockHeader `json:"block_header"`
49 Seed *bc.Hash `json:"seed"`
53 func (a *API) GetWork() (*GetWorkResp, error) {
54 bh, err := a.miningPool.GetWork()
59 seed, err := a.chain.CalcNextSeed(&bh.PreviousBlockHash)
70 type BlockHeaderJSON struct {
71 Version uint64 `json:"version"` // The version of the block.
72 Height uint64 `json:"height"` // The height of the block.
73 PreviousBlockHash bc.Hash `json:"previous_block_hash"` // The hash of the previous block.
74 Timestamp uint64 `json:"timestamp"` // The time of the block in seconds.
75 Nonce uint64 `json:"nonce"` // Nonce used to generate the block.
76 Bits uint64 `json:"bits"` // Difficulty target for the block.
77 BlockCommitment *types.BlockCommitment `json:"block_commitment"` //Block commitment
80 // GetWorkResp is resp struct for API get-work-json
81 type GetWorkJSONResp struct {
82 BlockHeader *BlockHeaderJSON `json:"block_header"`
83 Seed *bc.Hash `json:"seed"`
86 // GetWorkJSON get work in json
87 func (a *API) GetWorkJSON() (*GetWorkJSONResp, error) {
88 bh, err := a.miningPool.GetWork()
93 seed, err := a.chain.CalcNextSeed(&bh.PreviousBlockHash)
98 blockCommitment := &types.BlockCommitment{
99 TransactionsMerkleRoot: bh.BlockCommitment.TransactionsMerkleRoot,
100 TransactionStatusHash: bh.BlockCommitment.TransactionStatusHash,
103 return &GetWorkJSONResp{
104 BlockHeader: &BlockHeaderJSON{
107 PreviousBlockHash: bh.PreviousBlockHash,
108 Timestamp: bh.Timestamp,
111 BlockCommitment: blockCommitment,
117 // SubmitWork submit work
118 func (a *API) SubmitWork(bh *types.BlockHeader) error {
119 return a.miningPool.SubmitWork(bh)
122 func (a *API) setMining(in struct {
123 IsMining bool `json:"is_mining"`
126 return a.startMining()
128 return a.stopMining()
131 func (a *API) startMining() Response {
134 return NewErrorResponse(errors.New("Failed to start mining"))
136 return NewSuccessResponse("")
139 func (a *API) stopMining() Response {
142 return NewErrorResponse(errors.New("Failed to stop mining"))
144 return NewSuccessResponse("")