From c47866d25174bd783ee6bcd5b400d81d7bf598bb Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 5 Mar 2015 09:14:58 +0100 Subject: Miner fixes and updates (including miner) --- core/block_processor.go | 7 ++----- core/chain_manager.go | 28 +++++++++++++++++++--------- core/genesis.go | 5 +++-- core/types/block.go | 14 ++++++++------ 4 files changed, 32 insertions(+), 22 deletions(-) (limited to 'core') diff --git a/core/block_processor.go b/core/block_processor.go index c2799dc48..34c12729c 100644 --- a/core/block_processor.go +++ b/core/block_processor.go @@ -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() { diff --git a/core/chain_manager.go b/core/chain_manager.go index f2382cf8d..d2a6560c1 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -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 { diff --git a/core/genesis.go b/core/genesis.go index f675be53f..a3f5dfb38 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -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 } diff --git a/core/types/block.go b/core/types/block.go index 18a21e8c6..31c7c2b87 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -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 -- cgit