m.Handle("/gas-rate", jsonHandler(a.gasRate))
m.Handle("/get-work", jsonHandler(a.getWork))
m.Handle("/submit-work", jsonHandler(a.submitWork))
+ m.Handle("/set-mining", jsonHandler(a.setMining))
handler := latencyHandler(m, walletEnable)
handler = maxBytesHandler(handler) // TODO(tessr): consider moving this to non-core specific mux
import (
"context"
+ "github.com/bytom/errors"
"github.com/bytom/protocol/bc"
"github.com/bytom/protocol/bc/types"
)
func (a *API) SubmitWork(bh *types.BlockHeader) error {
return a.miningPool.SubmitWork(bh)
}
+
+func (a *API) setMining(in struct {
+ IsMining bool `json:"is_mining"`
+}) Response {
+ if in.IsMining {
+ return a.StartMining()
+ } else {
+ return a.StopMining()
+ }
+}
+
+func (a *API) StartMining() Response {
+ if a.cpuMiner.IsMining() {
+ return NewErrorResponse(errors.New("Mining is already running"))
+ }
+ a.cpuMiner.Start()
+ return NewSuccessResponse("")
+}
+
+func (a *API) StopMining() Response {
+ a.cpuMiner.Stop()
+ if a.cpuMiner.IsMining() {
+ return NewErrorResponse(errors.New("Failed to stop mining"))
+ }
+ return NewSuccessResponse("")
+}
import (
"os"
+ "strings"
"github.com/bytom/util"
"github.com/spf13/cobra"
printJSON(data)
},
}
+
+var miningCmd = &cobra.Command{
+ Use: "set-mining <true or false>",
+ Short: "start or stop mining",
+ Args: cobra.ExactArgs(1),
+ Run: func(cmd *cobra.Command, args []string) {
+ param := strings.ToLower(args[0])
+ isMining := false
+ switch param {
+ case "true":
+ isMining = true
+ default:
+ isMining = false
+ }
+ miningInfo := &struct {
+ IsMining bool `json:"is_mining"`
+ }{IsMining: isMining}
+ data, exitCode := util.ClientCall("/set-mining", miningInfo)
+ if exitCode != util.Success {
+ os.Exit(exitCode)
+ }
+ printJSON(data)
+ },
+}