OSDN Git Service

Merge pull request #1832 from Bytom/prod
[bytom/bytom.git] / api / miner.go
index 8607371..029993e 100644 (file)
@@ -4,10 +4,11 @@ import (
        "context"
        "strconv"
 
-       chainjson "github.com/bytom/encoding/json"
-       "github.com/bytom/errors"
-       "github.com/bytom/protocol/bc"
-       "github.com/bytom/protocol/bc/types"
+       chainjson "github.com/bytom/bytom/encoding/json"
+       "github.com/bytom/bytom/errors"
+       "github.com/bytom/bytom/event"
+       "github.com/bytom/bytom/protocol/bc"
+       "github.com/bytom/bytom/protocol/bc/types"
 )
 
 // BlockHeaderJSON struct provides support for get work in json format, when it also follows
@@ -68,7 +69,30 @@ func (a *API) getWorkJSON() Response {
        return NewSuccessResponse(work)
 }
 
-// SubmitWorkJSONReq is req struct for submit-work API
+// SubmitBlockReq is req struct for submit-block API
+type SubmitBlockReq struct {
+       Block *types.Block `json:"raw_block"`
+}
+
+// submitBlock trys to submit a raw block to the chain
+func (a *API) submitBlock(ctx context.Context, req *SubmitBlockReq) Response {
+       isOrphan, err := a.chain.ProcessBlock(req.Block)
+       if err != nil {
+               return NewErrorResponse(err)
+       }
+
+       if isOrphan {
+               return NewErrorResponse(errors.New("block submitted is orphan"))
+       }
+
+       if err = a.eventDispatcher.Post(event.NewMinedBlockEvent{Block: *req.Block}); err != nil {
+               return NewErrorResponse(err)
+       }
+
+       return NewSuccessResponse(true)
+}
+
+// SubmitWorkReq is req struct for submit-work API
 type SubmitWorkReq struct {
        BlockHeader *types.BlockHeader `json:"block_header"`
 }