From a0e44e3281fcef0913b172ed4cdb5283a8d4a46b Mon Sep 17 00:00:00 2001 From: obscuren Date: Sat, 4 Apr 2015 12:40:11 +0200 Subject: [PATCH] basic glog --- blockpool/section.go | 2 +- cmd/utils/flags.go | 4 ---- core/block_processor.go | 24 +++++------------------- core/chain_manager.go | 10 ++++++++++ core/state/state_object.go | 19 +++++++++++++++---- core/state/statedb.go | 4 +--- core/vm/common.go | 6 ++---- core/vm/vm.go | 11 ++++------- logger/glog/glog.go | 1 + tests/vm/gh_test.go | 15 ++++++++------- 10 files changed, 47 insertions(+), 49 deletions(-) diff --git a/blockpool/section.go b/blockpool/section.go index 14e91cf333..49004d4ef3 100644 --- a/blockpool/section.go +++ b/blockpool/section.go @@ -132,7 +132,7 @@ func (self *section) addSectionToBlockChain(p *peer) { } self.bp.lock.Unlock() - plog.Infof("[%s] insert %v blocks [%v/%v] into blockchain", sectionhex(self), len(blocks), hex(blocks[0].Hash()), hex(blocks[len(blocks)-1].Hash())) + plog.Debugf("[%s] insert %v blocks [%v/%v] into blockchain", sectionhex(self), len(blocks), hex(blocks[0].Hash()), hex(blocks[len(blocks)-1].Hash())) err := self.bp.insertChain(blocks) if err != nil { self.invalid = true diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index e370cddec4..0609bcf75a 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -228,10 +228,6 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config { // Set the log type glog.SetToStderr(ctx.GlobalBool(LogToStdErrFlag.Name)) - glog.V(2).Infoln("test it") - - glog.V(3).Infoln("other stuff") - return ð.Config{ Name: common.MakeName(clientID, version), DataDir: ctx.GlobalString(DataDirFlag.Name), diff --git a/core/block_processor.go b/core/block_processor.go index 0a98f3e32e..b3e18a70ac 100644 --- a/core/block_processor.go +++ b/core/block_processor.go @@ -165,15 +165,9 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (td *big // Create a new state based on the parent's root (e.g., create copy) state := state.New(parent.Root(), sm.db) - // track (possible) uncle block - var uncle bool // Block validation if err = sm.ValidateHeader(block.Header(), parent.Header()); err != nil { - if err != BlockEqualTSErr { - return - } - err = nil - uncle = true + return } // There can be at most two uncles @@ -231,23 +225,14 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (td *big // Sync the current block's state to the database state.Sync() - if !uncle { - // Remove transactions from the pool - sm.txpool.RemoveSet(block.Transactions()) - } + // Remove transactions from the pool + sm.txpool.RemoveSet(block.Transactions()) // This puts transactions in a extra db for rpc for i, tx := range block.Transactions() { putTx(sm.extraDb, tx, block, uint64(i)) } - if uncle { - chainlogger.Infof("found possible uncle block #%d (%x...)\n", header.Number, block.Hash().Bytes()[0:4]) - return td, nil, BlockEqualTSErr - } else { - chainlogger.Infof("processed block #%d (%d TXs %d UNCs) (%x...)\n", header.Number, len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4]) - } - return td, state.Logs(), nil } @@ -272,7 +257,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 int64(block.Time) > time.Now().Unix() { + // Allow future blocks up to 4 seconds + if int64(block.Time)+4 > time.Now().Unix() { return BlockFutureErr } diff --git a/core/chain_manager.go b/core/chain_manager.go index bf5ba9b405..b9a08b13dd 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" ) @@ -494,6 +495,10 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error { queue[i] = ChainEvent{block, logs} queueEvent.canonicalCount++ + + if glog.V(logger.Debug) { + glog.Infof("inserted block #%d (%d TXs %d UNCs) (%x...)\n", block.Number(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4]) + } } else { queue[i] = ChainSideEvent{block, logs} queueEvent.sideCount++ @@ -503,6 +508,11 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error { } + if len(chain) > 0 && glog.V(logger.Info) { + start, end := chain[0], chain[len(chain)-1] + glog.Infof("imported %d blocks [%x / %x] #%v\n", len(chain), start.Hash().Bytes()[:4], end.Hash().Bytes()[:4], end.Number()) + } + go self.eventMux.Post(queueEvent) return nil diff --git a/core/state/state_object.go b/core/state/state_object.go index a7c20722c0..e44bf2cd60 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -7,6 +7,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" ) @@ -121,7 +123,10 @@ func NewStateObjectFromBytes(address common.Address, data []byte, db common.Data func (self *StateObject) MarkForDeletion() { self.remove = true self.dirty = true - statelogger.Debugf("%x: #%d %v X\n", self.Address(), self.nonce, self.balance) + + if glog.V(logger.Debug) { + glog.Infof("%x: #%d %v X\n", self.Address(), self.nonce, self.balance) + } } func (c *StateObject) getAddr(addr common.Hash) *common.Value { @@ -185,13 +190,17 @@ func (c *StateObject) GetInstr(pc *big.Int) *common.Value { func (c *StateObject) AddBalance(amount *big.Int) { c.SetBalance(new(big.Int).Add(c.balance, amount)) - statelogger.Debugf("%x: #%d %v (+ %v)\n", c.Address(), c.nonce, c.balance, amount) + if glog.V(logger.Debug) { + glog.Infof("%x: #%d %v (+ %v)\n", c.Address(), c.nonce, c.balance, amount) + } } func (c *StateObject) SubBalance(amount *big.Int) { c.SetBalance(new(big.Int).Sub(c.balance, amount)) - statelogger.Debugf("%x: #%d %v (- %v)\n", c.Address(), c.nonce, c.balance, amount) + if glog.V(logger.Debug) { + glog.Infof("%x: #%d %v (- %v)\n", c.Address(), c.nonce, c.balance, amount) + } } func (c *StateObject) SetBalance(amount *big.Int) { @@ -225,7 +234,9 @@ func (c *StateObject) ConvertGas(gas, price *big.Int) error { func (self *StateObject) SetGasPool(gasLimit *big.Int) { self.gasPool = new(big.Int).Set(gasLimit) - statelogger.Debugf("%x: gas (+ %v)", self.Address(), self.gasPool) + if glog.V(logger.Debug) { + glog.Infof("%x: gas (+ %v)", self.Address(), self.gasPool) + } } func (self *StateObject) BuyGas(gas, price *big.Int) error { diff --git a/core/state/statedb.go b/core/state/statedb.go index 33e8c20e58..e027533aa8 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -6,12 +6,10 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/trie" - "github.com/golang/glog" ) -var statelogger = logger.NewLogger("STATE") - // StateDBs within the ethereum protocol are used to store anything // within the merkle trie. StateDBs take care of caching and storing // nested states. It's the general query interface to retrieve: diff --git a/core/vm/common.go b/core/vm/common.go index 0a93c3dd96..7b8b7dc4d6 100644 --- a/core/vm/common.go +++ b/core/vm/common.go @@ -5,11 +5,9 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" ) -var vmlogger = logger.NewLogger("VM") - // Global Debug flag indicating Debug VM (full logging) var Debug bool @@ -41,7 +39,7 @@ func NewVm(env Environment) VirtualMachine { case JitVmTy: return NewJitVm(env) default: - vmlogger.Infoln("unsupported vm type %d", env.VmType()) + glog.V(0).Infoln("unsupported vm type %d", env.VmType()) fallthrough case StdVmTy: return New(env) diff --git a/core/vm/vm.go b/core/vm/vm.go index 6222ef8c24..118f600768 100644 --- a/core/vm/vm.go +++ b/core/vm/vm.go @@ -7,6 +7,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/params" ) @@ -885,9 +886,7 @@ func (self *Vm) RunPrecompiled(p *PrecompiledAccount, callData []byte, context * func (self *Vm) Printf(format string, v ...interface{}) VirtualMachine { if self.debug { - if self.logTy == LogTyPretty { - self.logStr += fmt.Sprintf(format, v...) - } + self.logStr += fmt.Sprintf(format, v...) } return self @@ -895,10 +894,8 @@ func (self *Vm) Printf(format string, v ...interface{}) VirtualMachine { func (self *Vm) Endl() VirtualMachine { if self.debug { - if self.logTy == LogTyPretty { - vmlogger.Infoln(self.logStr) - self.logStr = "" - } + glog.V(0).Infoln(self.logStr) + self.logStr = "" } return self diff --git a/logger/glog/glog.go b/logger/glog/glog.go index a0c4727f82..7f8cedbf1b 100644 --- a/logger/glog/glog.go +++ b/logger/glog/glog.go @@ -1055,6 +1055,7 @@ func (v Verbose) Infoln(args ...interface{}) { // Infof is equivalent to the global Infof function, guarded by the value of v. // See the documentation of V for usage. func (v Verbose) Infof(format string, args ...interface{}) { + fmt.Println(v) if v { logging.printf(infoLog, format, args...) } diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go index 69e2a9819c..a96a3eba62 100644 --- a/tests/vm/gh_test.go +++ b/tests/vm/gh_test.go @@ -9,8 +9,10 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/tests/helper" ) @@ -80,14 +82,13 @@ func RunVmTest(p string, t *testing.T) { tests := make(map[string]VmTest) helper.CreateFileTests(t, p, &tests) + vm.Debug = true + glog.SetV(4) + glog.SetToStderr(true) for name, test := range tests { - /* - vm.Debug = true - helper.Logger.SetLogLevel(5) - if name != "Call1MB1024Calldepth" { - continue - } - */ + if name != "stackLimitPush32_1024" { + continue + } db, _ := ethdb.NewMemDatabase() statedb := state.New(common.Hash{}, db) for addr, account := range test.Pre {