Browse Source

Merge pull request #1113 from obscuren/develop

core: block database version update
Jeffrey Wilcke 10 năm trước cách đây
mục cha
commit
3590591e67
3 tập tin đã thay đổi với 34 bổ sung8 xóa
  1. 24 1
      cmd/geth/admin.go
  2. 6 6
      cmd/geth/main.go
  3. 4 1
      core/block_processor.go

+ 24 - 1
cmd/geth/admin.go

@@ -88,6 +88,7 @@ func (js *jsre) adminBindings() {
 	debug.Set("getBlockRlp", js.getBlockRlp)
 	debug.Set("setHead", js.setHead)
 	debug.Set("processBlock", js.debugBlock)
+	debug.Set("seedhash", js.seedHash)
 	// undocumented temporary
 	debug.Set("waitForBlocks", js.waitForBlocks)
 }
@@ -118,6 +119,27 @@ func (js *jsre) getBlock(call otto.FunctionCall) (*types.Block, error) {
 	return block, nil
 }
 
+func (js *jsre) seedHash(call otto.FunctionCall) otto.Value {
+	if len(call.ArgumentList) > 0 {
+		if call.Argument(0).IsNumber() {
+			num, _ := call.Argument(0).ToInteger()
+			hash, err := ethash.GetSeedHash(uint64(num))
+			if err != nil {
+				fmt.Println(err)
+				return otto.UndefinedValue()
+			}
+			v, _ := call.Otto.ToValue(fmt.Sprintf("0x%x", hash))
+			return v
+		} else {
+			fmt.Println("arg not a number")
+		}
+	} else {
+		fmt.Println("requires number argument")
+	}
+
+	return otto.UndefinedValue()
+}
+
 func (js *jsre) pendingTransactions(call otto.FunctionCall) otto.Value {
 	txs := js.ethereum.TxPool().GetTransactions()
 
@@ -220,10 +242,11 @@ func (js *jsre) debugBlock(call otto.FunctionCall) otto.Value {
 	vm.Debug = true
 	_, err = js.ethereum.BlockProcessor().RetryProcess(block)
 	if err != nil {
-		glog.Infoln(err)
+		fmt.Println(err)
 	}
 	vm.Debug = old
 
+	fmt.Println("ok")
 	return otto.UndefinedValue()
 }
 

+ 6 - 6
cmd/geth/main.go

@@ -533,9 +533,9 @@ func importchain(ctx *cli.Context) {
 	}
 
 	// force database flush
-	ethereum.BlockDb().Close()
-	ethereum.StateDb().Close()
-	ethereum.ExtraDb().Close()
+	ethereum.BlockDb().Flush()
+	ethereum.StateDb().Flush()
+	ethereum.ExtraDb().Flush()
 
 	fmt.Printf("Import done in %v", time.Since(start))
 
@@ -630,9 +630,9 @@ func upgradeDb(ctx *cli.Context) {
 	}
 
 	// force database flush
-	ethereum.BlockDb().Close()
-	ethereum.StateDb().Close()
-	ethereum.ExtraDb().Close()
+	ethereum.BlockDb().Flush()
+	ethereum.StateDb().Flush()
+	ethereum.ExtraDb().Flush()
 
 	os.Remove(exportFile)
 

+ 4 - 1
core/block_processor.go

@@ -21,7 +21,7 @@ import (
 const (
 	// must be bumped when consensus algorithm is changed, this forces the upgradedb
 	// command to be run (forces the blocks to be imported again using the new algorithm)
-	BlockChainVersion = 2
+	BlockChainVersion = 3
 )
 
 var receiptsPre = []byte("receipts-")
@@ -159,6 +159,9 @@ func (sm *BlockProcessor) RetryProcess(block *types.Block) (logs state.Logs, err
 		return nil, ParentError(header.ParentHash)
 	}
 	parent := sm.bc.GetBlock(header.ParentHash)
+	if !sm.Pow.Verify(block) {
+		return nil, ValidationError("Block's nonce is invalid (= %x)", block.Nonce)
+	}
 
 	return sm.processWithParent(block, parent)
 }