From dda5af0e6ca3059649ff2ee36b92ab5acff20677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Tue, 9 Feb 2016 16:03:04 +0200 Subject: [PATCH] eth, miner: move the public miner api into eth to access etherbase --- eth/api.go | 52 ++++++++++++++++++++++++++++++++++ eth/backend.go | 2 +- miner/api.go | 75 -------------------------------------------------- 3 files changed, 53 insertions(+), 76 deletions(-) delete mode 100644 miner/api.go diff --git a/eth/api.go b/eth/api.go index 5265905892..09ae0c468a 100644 --- a/eth/api.go +++ b/eth/api.go @@ -169,6 +169,58 @@ func (s *PublicEthereumAPI) Syncing() (interface{}, error) { return false, nil } +// PublicMinerAPI provides an API to control the miner. +// It offers only methods that operate on data that pose no security risk when it is publicly accessible. +type PublicMinerAPI struct { + e *Ethereum + agent *miner.RemoteAgent +} + +// NewPublicMinerAPI create a new PublicMinerAPI instance. +func NewPublicMinerAPI(e *Ethereum) *PublicMinerAPI { + agent := miner.NewRemoteAgent() + e.Miner().Register(agent) + + return &PublicMinerAPI{e, agent} +} + +// Mining returns an indication if this node is currently mining. +func (s *PublicMinerAPI) Mining() bool { + return s.e.IsMining() +} + +// SubmitWork can be used by external miner to submit their POW solution. It returns an indication if the work was +// accepted. Note, this is not an indication if the provided work was valid! +func (s *PublicMinerAPI) SubmitWork(nonce rpc.HexNumber, solution, digest common.Hash) bool { + return s.agent.SubmitWork(nonce.Uint64(), digest, solution) +} + +// GetWork returns a work package for external miner. The work package consists of 3 strings +// result[0], 32 bytes hex encoded current block header pow-hash +// result[1], 32 bytes hex encoded seed hash used for DAG +// result[2], 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty +func (s *PublicMinerAPI) GetWork() ([]string, error) { + if !s.e.IsMining() { + if err := s.e.StartMining(0, ""); err != nil { + return nil, err + } + } + if work, err := s.agent.GetWork(); err == nil { + return work[:], nil + } else { + glog.Infof("%v\n", err) + } + return nil, fmt.Errorf("mining not ready") +} + +// SubmitHashrate can be used for remote miners to submit their hash rate. This enables the node to report the combined +// hash rate of all miners which submit work through this node. It accepts the miner hash rate and an identifier which +// must be unique between nodes. +func (s *PublicMinerAPI) SubmitHashrate(hashrate rpc.HexNumber, id common.Hash) bool { + s.agent.SubmitHashrate(id, hashrate.Uint64()) + return true +} + // PrivateMinerAPI provides private RPC methods to control the miner. // These methods can be abused by external users and must be considered insecure for use by untrusted users. type PrivateMinerAPI struct { diff --git a/eth/backend.go b/eth/backend.go index 352522f614..752a561d4c 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -274,7 +274,7 @@ func (s *Ethereum) APIs() []rpc.API { }, { Namespace: "eth", Version: "1.0", - Service: miner.NewPublicMinerAPI(s.Miner()), + Service: NewPublicMinerAPI(s), Public: true, }, { Namespace: "eth", diff --git a/miner/api.go b/miner/api.go deleted file mode 100644 index fae2203f52..0000000000 --- a/miner/api.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2015 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package miner - -import ( - "fmt" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/logger/glog" - "github.com/ethereum/go-ethereum/rpc" -) - -// PublicMinerAPI provides an API to control the miner. -// It offers only methods that operate on data that pose no security risk when it is publicly accessible. -type PublicMinerAPI struct { - miner *Miner - agent *RemoteAgent -} - -// NewPublicMinerAPI create a new PublicMinerAPI instance. -func NewPublicMinerAPI(miner *Miner) *PublicMinerAPI { - agent := NewRemoteAgent() - miner.Register(agent) - - return &PublicMinerAPI{miner, agent} -} - -// Mining returns an indication if this node is currently mining. -func (s *PublicMinerAPI) Mining() bool { - return s.miner.Mining() -} - -// SubmitWork can be used by external miner to submit their POW solution. It returns an indication if the work was -// accepted. Note, this is not an indication if the provided work was valid! -func (s *PublicMinerAPI) SubmitWork(nonce rpc.HexNumber, solution, digest common.Hash) bool { - return s.agent.SubmitWork(nonce.Uint64(), digest, solution) -} - -// GetWork returns a work package for external miner. The work package consists of 3 strings -// result[0], 32 bytes hex encoded current block header pow-hash -// result[1], 32 bytes hex encoded seed hash used for DAG -// result[2], 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty -func (s *PublicMinerAPI) GetWork() ([]string, error) { - if !s.Mining() { - s.miner.Start(s.miner.coinbase, 0) - } - if work, err := s.agent.GetWork(); err == nil { - return work[:], nil - } else { - glog.Infof("%v\n", err) - } - return nil, fmt.Errorf("mining not ready") -} - -// SubmitHashrate can be used for remote miners to submit their hash rate. This enables the node to report the combined -// hash rate of all miners which submit work through this node. It accepts the miner hash rate and an identifier which -// must be unique between nodes. -func (s *PublicMinerAPI) SubmitHashrate(hashrate rpc.HexNumber, id common.Hash) bool { - s.agent.SubmitHashrate(id, hashrate.Uint64()) - return true -}