Miner fixes and updates (including miner)
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user