Browse Source

Updated LOG to match proper gas in all cases

obscuren 11 years ago
parent
commit
cb4d168ecc
6 changed files with 17 additions and 43 deletions
  1. 0 26
      block_pool.go
  2. 3 2
      chain/chain_manager.go
  3. 9 5
      chain/dagger.go
  4. 1 1
      peer.go
  5. 1 7
      vm/types.go
  6. 3 2
      vm/vm_debug.go

+ 0 - 26
block_pool.go

@@ -336,32 +336,6 @@ out:
 						self.Remove(block.Hash())
 					}
 				}
-
-				/*
-					// Test and import
-					bchain := chain.NewChain(blocks)
-					_, err := chainManager.TestChain(bchain)
-					if err != nil && !chain.IsTDError(err) {
-						poollogger.Debugln(err)
-
-						self.Reset()
-
-						if self.peer != nil && self.peer.conn != nil {
-							poollogger.Debugf("Punishing peer for supplying bad chain (%v)\n", self.peer.conn.RemoteAddr())
-						}
-
-						// This peer gave us bad hashes and made us fetch a bad chain, therefor he shall be punished.
-						self.eth.BlacklistPeer(self.peer)
-						self.peer.StopWithReason(DiscBadPeer)
-						self.td = ethutil.Big0
-						self.peer = nil
-					} else {
-						chainManager.InsertChain(bchain)
-						for _, block := range blocks {
-							self.Remove(block.Hash())
-						}
-					}
-				*/
 			}
 		}
 	}

+ 3 - 2
chain/chain_manager.go

@@ -321,7 +321,6 @@ func NewChain(blocks Blocks) *BlockChain {
 	return chain
 }
 
-// This function assumes you've done your checking. No checking is done at this stage anymore
 func (self *ChainManager) InsertChain(chain Blocks) error {
 	for _, block := range chain {
 		td, messages, err := self.Ethereum.BlockManager().Process(block)
@@ -330,7 +329,9 @@ func (self *ChainManager) InsertChain(chain Blocks) error {
 				continue
 			}
 
-			chainlogger.Infof("block process failed %v (%x)\n", block.Number, block.Hash()[:4])
+			chainlogger.Infof("block #%v process failed (%x)\n", block.Number, block.Hash()[:4])
+			chainlogger.Infoln(block)
+			chainlogger.Infoln(err)
 			return err
 		}
 

+ 9 - 5
chain/dagger.go

@@ -81,13 +81,17 @@ func (pow *EasyPow) Verify(hash []byte, diff *big.Int, nonce []byte) bool {
 	d := append(hash, nonce...)
 	sha.Write(d)
 
-	v := ethutil.BigPow(2, 256)
-	ret := new(big.Int).Div(v, diff)
+	verification := new(big.Int).Div(ethutil.BigPow(2, 256), diff)
+	res := ethutil.U256(ethutil.BigD(sha.Sum(nil)))
 
-	res := new(big.Int)
-	res.SetBytes(sha.Sum(nil))
+	/*
+		fmt.Printf("hash w/o nonce %x\n", hash)
+		fmt.Printf("2**256 / %v = %v\n", diff, verification)
+		fmt.Printf("%v <= %v\n", res, verification)
+		fmt.Printf("vlen: %d rlen: %d\n", len(verification.Bytes()), len(res.Bytes()))
+	*/
 
-	return res.Cmp(ret) == -1
+	return res.Cmp(verification) <= 0
 }
 
 func (pow *EasyPow) SetHash(hash *big.Int) {

+ 1 - 1
peer.go

@@ -24,7 +24,7 @@ const (
 	// The size of the output buffer for writing messages
 	outputBufferSize = 50
 	// Current protocol version
-	ProtocolVersion = 45
+	ProtocolVersion = 46
 	// Current P2P version
 	P2PVersion = 2
 	// Ethereum network version

+ 1 - 7
vm/types.go

@@ -163,8 +163,8 @@ const (
 	// 0xf0 range - closures
 	CREATE OpCode = 0xf0 + iota
 	CALL
-	RETURN
 	CALLCODE
+	RETURN
 
 	// 0x70 range - other
 	SUICIDE = 0xff
@@ -309,12 +309,6 @@ var opCodeToString = map[OpCode]string{
 	SWAP15: "SWAP15",
 	SWAP16: "SWAP16",
 
-	LOG0: "LOG0",
-	LOG1: "LOG1",
-	LOG2: "LOG2",
-	LOG3: "LOG3",
-	LOG4: "LOG4",
-
 	// 0xf0 range
 	CREATE:   "CREATE",
 	CALL:     "CALL",

+ 3 - 2
vm/vm_debug.go

@@ -165,10 +165,11 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
 			n := int(op - LOG0)
 			require(n + 2)
 
-			mSize, mStart := stack.Peekn()
 			gas.Set(GasLog)
 			addStepGasUsage(new(big.Int).Mul(big.NewInt(int64(n)), GasLog))
-			addStepGasUsage(new(big.Int).Add(mSize, mStart))
+
+			mSize, _ := stack.Peekn()
+			addStepGasUsage(mSize)
 		case EXP:
 			require(2)