Эх сурвалжийг харах

Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop

obscuren 10 жил өмнө
parent
commit
6657d544db

+ 1 - 1
cmd/mist/bindings.go

@@ -67,7 +67,7 @@ func (self *Gui) DumpState(hash, path string) {
 			i, _ := strconv.Atoi(hash[1:])
 			block = self.eth.ChainManager().GetBlockByNumber(uint64(i))
 		} else {
-			block = self.eth.ChainManager().GetBlock(common.Hex2Bytes(hash))
+			block = self.eth.ChainManager().GetBlock(common.HexToHash(hash))
 		}
 
 		if block == nil {

+ 6 - 5
cmd/mist/gui.go

@@ -31,11 +31,11 @@ import (
 	"sort"
 	"time"
 
+	"github.com/ethereum/go-ethereum/common"
 	"github.com/ethereum/go-ethereum/core"
 	"github.com/ethereum/go-ethereum/core/types"
 	"github.com/ethereum/go-ethereum/eth"
 	"github.com/ethereum/go-ethereum/ethdb"
-	"github.com/ethereum/go-ethereum/common"
 	"github.com/ethereum/go-ethereum/logger"
 	"github.com/ethereum/go-ethereum/ui/qt/qwhisper"
 	"github.com/ethereum/go-ethereum/xeth"
@@ -230,7 +230,8 @@ func (self *Gui) loadMergedMiningOptions() {
 
 func (gui *Gui) insertTransaction(window string, tx *types.Transaction) {
 	var inout string
-	if gui.eth.AccountManager().HasAccount(tx.From()) {
+	from, _ := tx.From()
+	if gui.eth.AccountManager().HasAccount(common.Hex2Bytes(from.Hex())) {
 		inout = "send"
 	} else {
 		inout = "recv"
@@ -238,8 +239,8 @@ func (gui *Gui) insertTransaction(window string, tx *types.Transaction) {
 
 	var (
 		ptx  = xeth.NewTx(tx)
-		send = common.Bytes2Hex(tx.From())
-		rec  = common.Bytes2Hex(tx.To())
+		send = from.Hex()
+		rec  = tx.To().Hex()
 	)
 	ptx.Sender = send
 	ptx.Address = rec
@@ -263,7 +264,7 @@ func (gui *Gui) readPreviousTransactions() {
 }
 
 func (gui *Gui) processBlock(block *types.Block, initial bool) {
-	name := common.Bytes2Hex(block.Coinbase())
+	name := block.Coinbase().Hex()
 	b := xeth.NewBlock(block)
 	b.Name = name
 

+ 2 - 2
cmd/mist/html_container.go

@@ -29,8 +29,8 @@ import (
 	"path"
 	"path/filepath"
 
-	"github.com/ethereum/go-ethereum/core/types"
 	"github.com/ethereum/go-ethereum/common"
+	"github.com/ethereum/go-ethereum/core/types"
 	"github.com/ethereum/go-ethereum/xeth"
 	"github.com/howeyc/fsnotify"
 	"github.com/obscuren/qml"
@@ -139,7 +139,7 @@ func (app *HtmlApplication) Window() *qml.Window {
 }
 
 func (app *HtmlApplication) NewBlock(block *types.Block) {
-	b := &xeth.Block{Number: int(block.NumberU64()), Hash: common.Bytes2Hex(block.Hash())}
+	b := &xeth.Block{Number: int(block.NumberU64()), Hash: block.Hash().Hex()}
 	app.webView.Call("onNewBlockCb", b)
 }
 

+ 1 - 2
cmd/mist/qml_container.go

@@ -25,7 +25,6 @@ import (
 	"runtime"
 
 	"github.com/ethereum/go-ethereum/core/types"
-	"github.com/ethereum/go-ethereum/common"
 	"github.com/ethereum/go-ethereum/xeth"
 	"github.com/obscuren/qml"
 )
@@ -68,7 +67,7 @@ func (app *QmlApplication) NewWatcher(quitChan chan bool) {
 
 // Events
 func (app *QmlApplication) NewBlock(block *types.Block) {
-	pblock := &xeth.Block{Number: int(block.NumberU64()), Hash: common.Bytes2Hex(block.Hash())}
+	pblock := &xeth.Block{Number: int(block.NumberU64()), Hash: block.Hash().Hex()}
 	app.win.Call("onNewBlockCb", pblock)
 }
 

+ 81 - 0
miner/remote_agent.go

@@ -0,0 +1,81 @@
+package miner
+
+import (
+	"github.com/ethereum/ethash"
+	"github.com/ethereum/go-ethereum/common"
+	"github.com/ethereum/go-ethereum/core/types"
+)
+
+type RemoteAgent struct {
+	work        *types.Block
+	currentWork *types.Block
+
+	quit     chan struct{}
+	workCh   chan *types.Block
+	returnCh chan<- Work
+}
+
+func NewRemoteAgent() *RemoteAgent {
+	agent := &RemoteAgent{}
+	go agent.run()
+
+	return agent
+}
+
+func (a *RemoteAgent) Work() chan<- *types.Block {
+	return a.workCh
+}
+
+func (a *RemoteAgent) SetWorkCh(returnCh chan<- Work) {
+	a.returnCh = returnCh
+}
+
+func (a *RemoteAgent) Start() {
+	a.quit = make(chan struct{})
+	a.workCh = make(chan *types.Block, 1)
+}
+
+func (a *RemoteAgent) Stop() {
+	close(a.quit)
+	close(a.workCh)
+}
+
+func (a *RemoteAgent) GetHashRate() int64 { return 0 }
+
+func (a *RemoteAgent) run() {
+out:
+	for {
+		select {
+		case <-a.quit:
+			break out
+		case work := <-a.workCh:
+			a.work = work
+		}
+	}
+}
+
+func (a *RemoteAgent) GetWork() [3]string {
+	var res [3]string
+
+	// XXX Wait here until work != nil ?
+	if a.work != nil {
+		res[0] = a.work.HashNoNonce().Hex()
+		seedHash, _ := ethash.GetSeedHash(a.currentWork.NumberU64())
+		res[1] = common.Bytes2Hex(seedHash)
+		res[2] = common.Bytes2Hex(a.work.Difficulty().Bytes())
+	}
+
+	return res
+}
+
+func (a *RemoteAgent) SubmitWork(nonce uint64, mixDigest, seedHash common.Hash) bool {
+	// Return true or false, but does not indicate if the PoW was correct
+
+	// Make sure the external miner was working on the right hash
+	if a.currentWork != nil && a.work != nil && a.currentWork.Hash() == a.work.Hash() {
+		a.returnCh <- Work{a.currentWork.Number().Uint64(), nonce, mixDigest.Bytes(), seedHash.Bytes()}
+		return true
+	}
+
+	return false
+}

+ 0 - 81
xeth/miner_agent.go

@@ -1,81 +0,0 @@
-package xeth
-
-import (
-	"github.com/ethereum/go-ethereum/common"
-	"github.com/ethereum/go-ethereum/core/types"
-	"github.com/ethereum/go-ethereum/miner"
-)
-
-type Agent struct {
-	work        *types.Block
-	currentWork *types.Block
-
-	quit     chan struct{}
-	workCh   chan *types.Block
-	returnCh chan<- miner.Work
-}
-
-func NewAgent() *Agent {
-	agent := &Agent{}
-	go agent.run()
-
-	return agent
-}
-
-func (a *Agent) Work() chan<- *types.Block {
-	return a.workCh
-}
-
-func (a *Agent) SetWorkCh(returnCh chan<- miner.Work) {
-	a.returnCh = returnCh
-}
-
-func (a *Agent) Start() {
-	a.quit = make(chan struct{})
-	a.workCh = make(chan *types.Block, 1)
-}
-
-func (a *Agent) Stop() {
-	close(a.quit)
-	close(a.workCh)
-}
-
-func (a *Agent) GetHashRate() int64 { return 0 }
-
-func (a *Agent) run() {
-out:
-	for {
-		select {
-		case <-a.quit:
-			break out
-		case work := <-a.workCh:
-			a.work = work
-		}
-	}
-}
-
-func (a *Agent) GetWork() [3]string {
-	// TODO return HashNoNonce, DAGSeedHash, Difficulty
-	var res [3]string
-
-	// XXX Wait here untill work != nil ?.
-	if a.work != nil {
-		res[0] = a.work.HashNoNonce().Hex() // Header Hash No Nonce
-		res[1] = common.Hash{}.Hex()        // DAG Seed
-		res[2] = common.Hash{}.Hex()        // Difficulty
-	}
-
-	return res
-}
-
-func (a *Agent) SubmitWork(nonce uint64, mixDigest, seedHash common.Hash) bool {
-	// Return true or false, but does not indicate if the PoW was correct
-
-	// Make sure the external miner was working on the right hash
-	if a.currentWork != nil && a.work != nil && a.currentWork.Hash() == a.work.Hash() {
-		a.returnCh <- miner.Work{a.currentWork.Number().Uint64(), nonce, mixDigest.Bytes(), seedHash.Bytes()}
-		return true
-	}
-
-	return false
-}

+ 3 - 3
xeth/xeth.go

@@ -102,7 +102,7 @@ type XEth struct {
 	// register map[string][]*interface{} // TODO improve return type
 
 	// Miner agent
-	agent *Agent
+	agent *miner.RemoteAgent
 }
 
 // New creates an XEth that uses the given frontend.
@@ -120,7 +120,7 @@ func New(eth Backend, frontend Frontend) *XEth {
 		frontend:       frontend,
 		logs:           make(map[int]*logFilter),
 		messages:       make(map[int]*whisperFilter),
-		agent:          NewAgent(),
+		agent:          miner.NewRemoteAgent(),
 	}
 	eth.Miner().Register(xeth.agent)
 
@@ -170,7 +170,7 @@ func (self *XEth) stop() {
 func (self *XEth) DefaultGas() *big.Int      { return defaultGas }
 func (self *XEth) DefaultGasPrice() *big.Int { return defaultGasPrice }
 
-func (self *XEth) RemoteMining() *Agent { return self.agent }
+func (self *XEth) RemoteMining() *miner.RemoteAgent { return self.agent }
 
 func (self *XEth) AtStateNum(num int64) *XEth {
 	chain := self.Backend().ChainManager()