Merge remote-tracking branch 'upstream/poc-9' into blockpool3
This commit is contained in:
		| @@ -159,8 +159,6 @@ func (gui *Gui) Stop() { | ||||
| 		gui.win.Hide() | ||||
| 	} | ||||
|  | ||||
| 	gui.uiLib.jsEngine.Stop() | ||||
|  | ||||
| 	guilogger.Infoln("Stopped") | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -58,7 +58,8 @@ type UiLib struct { | ||||
| } | ||||
|  | ||||
| func NewUiLib(engine *qml.Engine, eth *eth.Ethereum, assetPath string) *UiLib { | ||||
| 	lib := &UiLib{XEth: xeth.New(eth), engine: engine, eth: eth, assetPath: assetPath, jsEngine: javascript.NewJSRE(eth), filterCallbacks: make(map[int][]int)} //, filters: make(map[int]*xeth.JSFilter)} | ||||
| 	x := xeth.New(eth) | ||||
| 	lib := &UiLib{XEth: x, engine: engine, eth: eth, assetPath: assetPath, jsEngine: javascript.NewJSRE(x), filterCallbacks: make(map[int][]int)} //, filters: make(map[int]*xeth.JSFilter)} | ||||
| 	lib.filterManager = filter.NewFilterManager(eth.EventMux()) | ||||
| 	go lib.filterManager.Start() | ||||
|  | ||||
|   | ||||
| @@ -253,9 +253,6 @@ func (sm *BlockProcessor) ValidateHeader(block, parent *types.Header) error { | ||||
| 		return fmt.Errorf("Difficulty check failed for block %v, %v", block.Difficulty, expd) | ||||
| 	} | ||||
|  | ||||
| 	//expl := CalcGasLimit(parent, block) | ||||
| 	//if expl.Cmp(block.Header().GasLimit) != 0 { | ||||
|  | ||||
| 	// block.gasLimit - parent.gasLimit <= parent.gasLimit / 1024 | ||||
| 	a := new(big.Int).Sub(block.GasLimit, parent.GasLimit) | ||||
| 	b := new(big.Int).Div(parent.GasLimit, big.NewInt(1024)) | ||||
| @@ -263,8 +260,8 @@ func (sm *BlockProcessor) ValidateHeader(block, parent *types.Header) error { | ||||
| 		return fmt.Errorf("GasLimit check failed for block %v (%v > %v)", block.GasLimit, a, b) | ||||
| 	} | ||||
|  | ||||
| 	if block.Time < parent.Time { | ||||
| 		return ValidationError("Block timestamp not after prev block (%v - %v)", block.Time, parent.Time) | ||||
| 	if block.Time <= parent.Time { | ||||
| 		return ValidationError("Block timestamp not after or equal to prev block (%v - %v)", block.Time, parent.Time) | ||||
| 	} | ||||
|  | ||||
| 	if int64(block.Time) > time.Now().Unix() { | ||||
|   | ||||
| @@ -31,15 +31,18 @@ type StateQuery interface { | ||||
| func CalcDifficulty(block, parent *types.Header) *big.Int { | ||||
| 	diff := new(big.Int) | ||||
|  | ||||
| 	//adjust := new(big.Int).Rsh(parent.Difficulty(), 10) | ||||
| 	//if block.Time() >= parent.Time()+8 { | ||||
| 	adjust := new(big.Int).Div(parent.Difficulty, big.NewInt(2048)) | ||||
| 	min := big.NewInt(2048) | ||||
| 	adjust := new(big.Int).Div(parent.Difficulty, min) | ||||
| 	if (block.Time - parent.Time) < 8 { | ||||
| 		diff.Add(parent.Difficulty, adjust) | ||||
| 	} else { | ||||
| 		diff.Sub(parent.Difficulty, adjust) | ||||
| 	} | ||||
|  | ||||
| 	if diff.Cmp(GenesisDiff) < 0 { | ||||
| 		return GenesisDiff | ||||
| 	} | ||||
|  | ||||
| 	return diff | ||||
| } | ||||
|  | ||||
| @@ -378,9 +381,12 @@ func (bc *ChainManager) Stop() { | ||||
| } | ||||
|  | ||||
| func (self *ChainManager) InsertChain(chain types.Blocks) error { | ||||
| 	println("insert chain start") | ||||
| 	self.tsmu.Lock() | ||||
| 	defer self.tsmu.Unlock() | ||||
|  | ||||
| 	defer println("insert chain end") | ||||
|  | ||||
| 	for _, block := range chain { | ||||
| 		// Call in to the block processor and check for errors. It's likely that if one block fails | ||||
| 		// all others will fail too (unless a known block is returned). | ||||
| @@ -422,14 +428,18 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error { | ||||
| 		self.mu.Unlock() | ||||
|  | ||||
| 		if canonical { | ||||
| 			jsonlogger.LogJson(&logger.EthChainNewHead{ | ||||
| 				BlockHash:     ethutil.Bytes2Hex(block.Hash()), | ||||
| 				BlockNumber:   block.Number(), | ||||
| 				ChainHeadHash: ethutil.Bytes2Hex(cblock.Hash()), | ||||
| 				BlockPrevHash: ethutil.Bytes2Hex(block.ParentHash()), | ||||
| 			}) | ||||
| 			/* | ||||
| 				jsonlogger.LogJson(&logger.EthChainNewHead{ | ||||
| 					BlockHash:     ethutil.Bytes2Hex(block.Hash()), | ||||
| 					BlockNumber:   block.Number(), | ||||
| 					ChainHeadHash: ethutil.Bytes2Hex(cblock.Hash()), | ||||
| 					BlockPrevHash: ethutil.Bytes2Hex(block.ParentHash()), | ||||
| 				}) | ||||
| 			*/ | ||||
| 			self.setTransState(state.New(block.Root(), self.db)) | ||||
| 			self.eventMux.Post(ChainEvent{block, td}) | ||||
| 		} else { | ||||
| 			//self.eventMux. | ||||
| 		} | ||||
|  | ||||
| 		if split { | ||||
|   | ||||
| @@ -22,8 +22,10 @@ var ZeroHash512 = make([]byte, 64) | ||||
| var EmptyShaList = crypto.Sha3(ethutil.Encode([]interface{}{})) | ||||
| var EmptyListRoot = crypto.Sha3(ethutil.Encode("")) | ||||
|  | ||||
| var GenesisDiff = big.NewInt(131072) | ||||
|  | ||||
| func GenesisBlock(db ethutil.Database) *types.Block { | ||||
| 	genesis := types.NewBlock(ZeroHash256, ZeroHash160, nil, big.NewInt(2048), 42, "") | ||||
| 	genesis := types.NewBlock(ZeroHash256, ZeroHash160, nil, GenesisDiff, 42, "") | ||||
| 	genesis.Header().Number = ethutil.Big0 | ||||
| 	genesis.Header().GasLimit = big.NewInt(1000000) | ||||
| 	genesis.Header().GasUsed = ethutil.Big0 | ||||
| @@ -53,7 +55,6 @@ func GenesisBlock(db ethutil.Database) *types.Block { | ||||
| 	} | ||||
| 	statedb.Sync() | ||||
| 	genesis.Header().Root = statedb.Root() | ||||
| 	fmt.Println(genesis) | ||||
|  | ||||
| 	return genesis | ||||
| } | ||||
|   | ||||
| @@ -40,12 +40,12 @@ type Header struct { | ||||
| 	Time uint64 | ||||
| 	// Extra data | ||||
| 	Extra string | ||||
| 	// Nonce | ||||
| 	Nonce []byte | ||||
| 	// Mix digest for quick checking to prevent DOS | ||||
| 	MixDigest ethutil.Bytes | ||||
| 	// SeedHash used for light client verification | ||||
| 	SeedHash ethutil.Bytes | ||||
| 	// Mix digest for quick checking to prevent DOS | ||||
| 	MixDigest ethutil.Bytes | ||||
| 	// Nonce | ||||
| 	Nonce []byte | ||||
| } | ||||
|  | ||||
| func (self *Header) rlpData(withNonce bool) []interface{} { | ||||
| @@ -62,9 +62,11 @@ func (self *Header) rlpData(withNonce bool) []interface{} { | ||||
| 		self.GasLimit, | ||||
| 		self.GasUsed, | ||||
| 		self.Time, | ||||
| 		self.Extra} | ||||
| 		self.Extra, | ||||
| 		self.SeedHash, | ||||
| 	} | ||||
| 	if withNonce { | ||||
| 		fields = append(fields, self.SeedHash, self.MixDigest, self.Nonce) | ||||
| 		fields = append(fields, self.MixDigest, self.Nonce) | ||||
| 	} | ||||
|  | ||||
| 	return fields | ||||
|   | ||||
| @@ -250,7 +250,7 @@ func (self *ethProtocol) handle() error { | ||||
| 			return self.protoError(ErrDecode, "msg %v: %v", msg, err) | ||||
| 		} | ||||
| 		hash := request.Block.Hash() | ||||
| 		fmt.Println("received block: %x", hash) | ||||
| 		fmt.Printf("received block: %x\n", hash) | ||||
| 		_, chainHead, _ := self.chainManager.Status() | ||||
|  | ||||
| 		jsonlogger.LogJson(&logger.EthChainReceivedNewBlock{ | ||||
|   | ||||
| @@ -25,12 +25,13 @@ func Big(num string) *big.Int { | ||||
| // BigD | ||||
| // | ||||
| // Shortcut for new(big.Int).SetBytes(...) | ||||
| func BigD(data []byte) *big.Int { | ||||
| func Bytes2Big(data []byte) *big.Int { | ||||
| 	n := new(big.Int) | ||||
| 	n.SetBytes(data) | ||||
|  | ||||
| 	return n | ||||
| } | ||||
| func BigD(data []byte) *big.Int { return Bytes2Big(data) } | ||||
|  | ||||
| func BitTest(num *big.Int, i int) bool { | ||||
| 	return num.Bit(i) > 0 | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/ethereum/ethash" | ||||
| 	"github.com/ethereum/go-ethereum/core" | ||||
| 	"github.com/ethereum/go-ethereum/core/types" | ||||
| 	"github.com/ethereum/go-ethereum/ethutil" | ||||
| @@ -138,7 +139,7 @@ out: | ||||
| 			} | ||||
| 			break out | ||||
| 		case <-timer.C: | ||||
| 			minerlogger.Debugln("Hash rate:", self.HashRate(), "Khash") | ||||
| 			minerlogger.Infoln("Hash rate:", self.HashRate(), "Khash") | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -164,7 +165,6 @@ func (self *worker) wait() { | ||||
|  | ||||
| 				if err := self.chain.InsertChain(types.Blocks{self.current.block}); err == nil { | ||||
| 					self.mux.Post(core.NewMinedBlockEvent{self.current.block}) | ||||
| 					fmt.Println("GOOD BLOCK", self.current.block) | ||||
| 				} else { | ||||
| 					self.commitNewWork() | ||||
| 				} | ||||
| @@ -190,7 +190,11 @@ func (self *worker) commitNewWork() { | ||||
| 	self.mu.Lock() | ||||
| 	defer self.mu.Unlock() | ||||
|  | ||||
| 	self.current = env(self.chain.NewBlock(self.coinbase), self.eth) | ||||
| 	block := self.chain.NewBlock(self.coinbase) | ||||
| 	seednum := ethash.GetSeedBlockNum(block.NumberU64()) | ||||
| 	block.Header().SeedHash = self.chain.GetBlockByNumber(seednum).SeedHash() | ||||
|  | ||||
| 	self.current = env(block, self.eth) | ||||
| 	parent := self.chain.GetBlock(self.current.block.ParentHash()) | ||||
| 	self.current.coinbase.SetGasPool(core.CalcGasLimit(parent, self.current.block)) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user