Merge pull request #14515 from karalabe/golint-tooooolong
core: fix various golint warnings and errors
This commit is contained in:
		
						commit
						b7ff0d42e3
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -18,7 +18,7 @@ package core | ||||
| 
 | ||||
| import "github.com/ethereum/go-ethereum/common" | ||||
| 
 | ||||
| // Set of manually tracked bad hashes (usually hard forks)
 | ||||
| // BadHashes represent a set of manually tracked bad hashes (usually hard forks)
 | ||||
| var BadHashes = map[common.Hash]bool{ | ||||
| 	common.HexToHash("05bef30ef572270f654746da22639a7a0c97dd97a7050b9e252391996aaeb689"): true, | ||||
| 	common.HexToHash("7d05d08cbc596a2e5e4f13b80a743e53e09221b5323c3a61946b20873e58583f"): true, | ||||
|  | ||||
| @ -98,10 +98,10 @@ func (b *BlockGen) Number() *big.Int { | ||||
| 	return new(big.Int).Set(b.header.Number) | ||||
| } | ||||
| 
 | ||||
| // AddUncheckedReceipts forcefully adds a receipts to the block without a
 | ||||
| // AddUncheckedReceipt forcefully adds a receipts to the block without a
 | ||||
| // backing transaction.
 | ||||
| //
 | ||||
| // AddUncheckedReceipts will cause consensus failures when used during real
 | ||||
| // AddUncheckedReceipt will cause consensus failures when used during real
 | ||||
| // chain processing. This is best used in conjunction with raw block insertion.
 | ||||
| func (b *BlockGen) AddUncheckedReceipt(receipt *types.Receipt) { | ||||
| 	b.receipts = append(b.receipts, receipt) | ||||
|  | ||||
| @ -64,7 +64,7 @@ var ( | ||||
| 	oldBlockReceiptsPrefix = []byte("receipts-block-") | ||||
| 	oldBlockHashPrefix     = []byte("block-hash-") // [deprecated by the header/block split, remove eventually]
 | ||||
| 
 | ||||
| 	ChainConfigNotFoundErr = errors.New("ChainConfig not found") // general config not found error
 | ||||
| 	ErrChainConfigNotFound = errors.New("ChainConfig not found") // general config not found error
 | ||||
| 
 | ||||
| 	mipmapBloomMu sync.Mutex // protect against race condition when updating mipmap blooms
 | ||||
| 
 | ||||
| @ -546,7 +546,7 @@ func mipmapKey(num, level uint64) []byte { | ||||
| 	return append(mipmapPre, append(lkey, key.Bytes()...)...) | ||||
| } | ||||
| 
 | ||||
| // WriteMapmapBloom writes each address included in the receipts' logs to the
 | ||||
| // WriteMipmapBloom writes each address included in the receipts' logs to the
 | ||||
| // MIP bloom bin.
 | ||||
| func WriteMipmapBloom(db ethdb.Database, number uint64, receipts types.Receipts) error { | ||||
| 	mipmapBloomMu.Lock() | ||||
| @ -638,7 +638,7 @@ func WriteChainConfig(db ethdb.Database, hash common.Hash, cfg *params.ChainConf | ||||
| func GetChainConfig(db ethdb.Database, hash common.Hash) (*params.ChainConfig, error) { | ||||
| 	jsonChainConfig, _ := db.Get(append(configPrefix, hash[:]...)) | ||||
| 	if len(jsonChainConfig) == 0 { | ||||
| 		return nil, ChainConfigNotFoundErr | ||||
| 		return nil, ErrChainConfigNotFound | ||||
| 	} | ||||
| 
 | ||||
| 	var config params.ChainConfig | ||||
|  | ||||
| @ -41,7 +41,7 @@ type NewMinedBlockEvent struct{ Block *types.Block } | ||||
| // RemovedTransactionEvent is posted when a reorg happens
 | ||||
| type RemovedTransactionEvent struct{ Txs types.Transactions } | ||||
| 
 | ||||
| // RemovedLogEvent is posted when a reorg happens
 | ||||
| // RemovedLogsEvent is posted when a reorg happens
 | ||||
| type RemovedLogsEvent struct{ Logs []*types.Log } | ||||
| 
 | ||||
| type ChainEvent struct { | ||||
|  | ||||
| @ -20,4 +20,4 @@ import ( | ||||
| 	"math/big" | ||||
| ) | ||||
| 
 | ||||
| var BlockReward *big.Int = big.NewInt(5e+18) | ||||
| var BlockReward = big.NewInt(5e+18) | ||||
|  | ||||
| @ -133,7 +133,7 @@ func SetupGenesisBlock(db ethdb.Database, genesis *Genesis) (*params.ChainConfig | ||||
| 	newcfg := genesis.configOrDefault(stored) | ||||
| 	storedcfg, err := GetChainConfig(db, stored) | ||||
| 	if err != nil { | ||||
| 		if err == ChainConfigNotFoundErr { | ||||
| 		if err == ErrChainConfigNotFound { | ||||
| 			// This case happens if a genesis write was interrupted.
 | ||||
| 			log.Warn("Found genesis block without chain config") | ||||
| 			err = WriteChainConfig(db, stored, newcfg) | ||||
|  | ||||
| @ -201,15 +201,6 @@ func (hc *HeaderChain) WriteHeader(header *types.Header) (status WriteStatus, er | ||||
| // header writes should be protected by the parent chain mutex individually.
 | ||||
| type WhCallback func(*types.Header) error | ||||
| 
 | ||||
| // InsertHeaderChain attempts to insert the given header chain in to the local
 | ||||
| // chain, possibly creating a reorg. If an error is returned, it will return the
 | ||||
| // index number of the failing header as well an error describing what went wrong.
 | ||||
| //
 | ||||
| // The verify parameter can be used to fine tune whether nonce verification
 | ||||
| // should be done or not. The reason behind the optional check is because some
 | ||||
| // of the header retrieval mechanisms already need to verfy nonces, as well as
 | ||||
| // because nonces can be verified sparsely, not needing to check each.
 | ||||
| 
 | ||||
| func (hc *HeaderChain) ValidateHeaderChain(chain []*types.Header, checkFreq int) (int, error) { | ||||
| 	// Do a sanity check that the provided chain is actually ordered and linked
 | ||||
| 	for i := 1; i < len(chain); i++ { | ||||
| @ -257,6 +248,14 @@ func (hc *HeaderChain) ValidateHeaderChain(chain []*types.Header, checkFreq int) | ||||
| 	return 0, nil | ||||
| } | ||||
| 
 | ||||
| // InsertHeaderChain attempts to insert the given header chain in to the local
 | ||||
| // chain, possibly creating a reorg. If an error is returned, it will return the
 | ||||
| // index number of the failing header as well an error describing what went wrong.
 | ||||
| //
 | ||||
| // The verify parameter can be used to fine tune whether nonce verification
 | ||||
| // should be done or not. The reason behind the optional check is because some
 | ||||
| // of the header retrieval mechanisms already need to verfy nonces, as well as
 | ||||
| // because nonces can be verified sparsely, not needing to check each.
 | ||||
| func (hc *HeaderChain) InsertHeaderChain(chain []*types.Header, writeHeader WhCallback, start time.Time) (int, error) { | ||||
| 	// Collect some import statistics to report on
 | ||||
| 	stats := struct{ processed, ignored int }{} | ||||
|  | ||||
| @ -21,8 +21,6 @@ import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/ethereum/go-ethereum/core/types" | ||||
| 	// "github.com/ethereum/go-ethereum/crypto"
 | ||||
| 
 | ||||
| 	"github.com/ethereum/go-ethereum/ethdb" | ||||
| 	"github.com/ethereum/go-ethereum/event" | ||||
| ) | ||||
| @ -38,24 +36,24 @@ type TestManager struct { | ||||
| 	Blocks     []*types.Block | ||||
| } | ||||
| 
 | ||||
| func (s *TestManager) IsListening() bool { | ||||
| func (tm *TestManager) IsListening() bool { | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func (s *TestManager) IsMining() bool { | ||||
| func (tm *TestManager) IsMining() bool { | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func (s *TestManager) PeerCount() int { | ||||
| func (tm *TestManager) PeerCount() int { | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func (s *TestManager) Peers() *list.List { | ||||
| func (tm *TestManager) Peers() *list.List { | ||||
| 	return list.New() | ||||
| } | ||||
| 
 | ||||
| func (s *TestManager) BlockChain() *BlockChain { | ||||
| 	return s.blockChain | ||||
| func (tm *TestManager) BlockChain() *BlockChain { | ||||
| 	return tm.blockChain | ||||
| } | ||||
| 
 | ||||
| func (tm *TestManager) TxPool() *TxPool { | ||||
|  | ||||
| @ -134,112 +134,113 @@ func ApplyMessage(evm *vm.EVM, msg Message, gp *GasPool) ([]byte, *big.Int, erro | ||||
| 	return ret, gasUsed, err | ||||
| } | ||||
| 
 | ||||
| func (self *StateTransition) from() vm.AccountRef { | ||||
| 	f := self.msg.From() | ||||
| 	if !self.state.Exist(f) { | ||||
| 		self.state.CreateAccount(f) | ||||
| func (st *StateTransition) from() vm.AccountRef { | ||||
| 	f := st.msg.From() | ||||
| 	if !st.state.Exist(f) { | ||||
| 		st.state.CreateAccount(f) | ||||
| 	} | ||||
| 	return vm.AccountRef(f) | ||||
| } | ||||
| 
 | ||||
| func (self *StateTransition) to() vm.AccountRef { | ||||
| 	if self.msg == nil { | ||||
| func (st *StateTransition) to() vm.AccountRef { | ||||
| 	if st.msg == nil { | ||||
| 		return vm.AccountRef{} | ||||
| 	} | ||||
| 	to := self.msg.To() | ||||
| 	to := st.msg.To() | ||||
| 	if to == nil { | ||||
| 		return vm.AccountRef{} // contract creation
 | ||||
| 	} | ||||
| 
 | ||||
| 	reference := vm.AccountRef(*to) | ||||
| 	if !self.state.Exist(*to) { | ||||
| 		self.state.CreateAccount(*to) | ||||
| 	if !st.state.Exist(*to) { | ||||
| 		st.state.CreateAccount(*to) | ||||
| 	} | ||||
| 	return reference | ||||
| } | ||||
| 
 | ||||
| func (self *StateTransition) useGas(amount uint64) error { | ||||
| 	if self.gas < amount { | ||||
| func (st *StateTransition) useGas(amount uint64) error { | ||||
| 	if st.gas < amount { | ||||
| 		return vm.ErrOutOfGas | ||||
| 	} | ||||
| 	self.gas -= amount | ||||
| 	st.gas -= amount | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (self *StateTransition) buyGas() error { | ||||
| 	mgas := self.msg.Gas() | ||||
| func (st *StateTransition) buyGas() error { | ||||
| 	mgas := st.msg.Gas() | ||||
| 	if mgas.BitLen() > 64 { | ||||
| 		return vm.ErrOutOfGas | ||||
| 	} | ||||
| 
 | ||||
| 	mgval := new(big.Int).Mul(mgas, self.gasPrice) | ||||
| 	mgval := new(big.Int).Mul(mgas, st.gasPrice) | ||||
| 
 | ||||
| 	var ( | ||||
| 		state  = self.state | ||||
| 		sender = self.from() | ||||
| 		state  = st.state | ||||
| 		sender = st.from() | ||||
| 	) | ||||
| 	if state.GetBalance(sender.Address()).Cmp(mgval) < 0 { | ||||
| 		return errInsufficientBalanceForGas | ||||
| 	} | ||||
| 	if err := self.gp.SubGas(mgas); err != nil { | ||||
| 	if err := st.gp.SubGas(mgas); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	self.gas += mgas.Uint64() | ||||
| 	st.gas += mgas.Uint64() | ||||
| 
 | ||||
| 	self.initialGas.Set(mgas) | ||||
| 	st.initialGas.Set(mgas) | ||||
| 	state.SubBalance(sender.Address(), mgval) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (self *StateTransition) preCheck() error { | ||||
| 	msg := self.msg | ||||
| 	sender := self.from() | ||||
| func (st *StateTransition) preCheck() error { | ||||
| 	msg := st.msg | ||||
| 	sender := st.from() | ||||
| 
 | ||||
| 	// Make sure this transaction's nonce is correct
 | ||||
| 	if msg.CheckNonce() { | ||||
| 		if n := self.state.GetNonce(sender.Address()); n != msg.Nonce() { | ||||
| 		if n := st.state.GetNonce(sender.Address()); n != msg.Nonce() { | ||||
| 			return fmt.Errorf("invalid nonce: have %d, expected %d", msg.Nonce(), n) | ||||
| 		} | ||||
| 	} | ||||
| 	return self.buyGas() | ||||
| 	return st.buyGas() | ||||
| } | ||||
| 
 | ||||
| // TransitionDb will transition the state by applying the current message and returning the result
 | ||||
| // including the required gas for the operation as well as the used gas. It returns an error if it
 | ||||
| // failed. An error indicates a consensus issue.
 | ||||
| func (self *StateTransition) TransitionDb() (ret []byte, requiredGas, usedGas *big.Int, err error) { | ||||
| 	if err = self.preCheck(); err != nil { | ||||
| func (st *StateTransition) TransitionDb() (ret []byte, requiredGas, usedGas *big.Int, err error) { | ||||
| 	if err = st.preCheck(); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	msg := self.msg | ||||
| 	sender := self.from() // err checked in preCheck
 | ||||
| 	msg := st.msg | ||||
| 	sender := st.from() // err checked in preCheck
 | ||||
| 
 | ||||
| 	homestead := self.evm.ChainConfig().IsHomestead(self.evm.BlockNumber) | ||||
| 	homestead := st.evm.ChainConfig().IsHomestead(st.evm.BlockNumber) | ||||
| 	contractCreation := msg.To() == nil | ||||
| 
 | ||||
| 	// Pay intrinsic gas
 | ||||
| 	// TODO convert to uint64
 | ||||
| 	intrinsicGas := IntrinsicGas(self.data, contractCreation, homestead) | ||||
| 	intrinsicGas := IntrinsicGas(st.data, contractCreation, homestead) | ||||
| 	if intrinsicGas.BitLen() > 64 { | ||||
| 		return nil, nil, nil, vm.ErrOutOfGas | ||||
| 	} | ||||
| 	if err = self.useGas(intrinsicGas.Uint64()); err != nil { | ||||
| 	if err = st.useGas(intrinsicGas.Uint64()); err != nil { | ||||
| 		return nil, nil, nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	var ( | ||||
| 		evm = self.evm | ||||
| 		evm = st.evm | ||||
| 		// vm errors do not effect consensus and are therefor
 | ||||
| 		// not assigned to err, except for insufficient balance
 | ||||
| 		// error.
 | ||||
| 		vmerr error | ||||
| 	) | ||||
| 	if contractCreation { | ||||
| 		ret, _, self.gas, vmerr = evm.Create(sender, self.data, self.gas, self.value) | ||||
| 		ret, _, st.gas, vmerr = evm.Create(sender, st.data, st.gas, st.value) | ||||
| 	} else { | ||||
| 		// Increment the nonce for the next transaction
 | ||||
| 		self.state.SetNonce(sender.Address(), self.state.GetNonce(sender.Address())+1) | ||||
| 		ret, self.gas, vmerr = evm.Call(sender, self.to().Address(), self.data, self.gas, self.value) | ||||
| 		st.state.SetNonce(sender.Address(), st.state.GetNonce(sender.Address())+1) | ||||
| 		ret, st.gas, vmerr = evm.Call(sender, st.to().Address(), st.data, st.gas, st.value) | ||||
| 	} | ||||
| 	if vmerr != nil { | ||||
| 		log.Debug("VM returned with error", "err", err) | ||||
| @ -250,33 +251,33 @@ func (self *StateTransition) TransitionDb() (ret []byte, requiredGas, usedGas *b | ||||
| 			return nil, nil, nil, vmerr | ||||
| 		} | ||||
| 	} | ||||
| 	requiredGas = new(big.Int).Set(self.gasUsed()) | ||||
| 	requiredGas = new(big.Int).Set(st.gasUsed()) | ||||
| 
 | ||||
| 	self.refundGas() | ||||
| 	self.state.AddBalance(self.evm.Coinbase, new(big.Int).Mul(self.gasUsed(), self.gasPrice)) | ||||
| 	st.refundGas() | ||||
| 	st.state.AddBalance(st.evm.Coinbase, new(big.Int).Mul(st.gasUsed(), st.gasPrice)) | ||||
| 
 | ||||
| 	return ret, requiredGas, self.gasUsed(), err | ||||
| 	return ret, requiredGas, st.gasUsed(), err | ||||
| } | ||||
| 
 | ||||
| func (self *StateTransition) refundGas() { | ||||
| func (st *StateTransition) refundGas() { | ||||
| 	// Return eth for remaining gas to the sender account,
 | ||||
| 	// exchanged at the original rate.
 | ||||
| 	sender := self.from() // err already checked
 | ||||
| 	remaining := new(big.Int).Mul(new(big.Int).SetUint64(self.gas), self.gasPrice) | ||||
| 	self.state.AddBalance(sender.Address(), remaining) | ||||
| 	sender := st.from() // err already checked
 | ||||
| 	remaining := new(big.Int).Mul(new(big.Int).SetUint64(st.gas), st.gasPrice) | ||||
| 	st.state.AddBalance(sender.Address(), remaining) | ||||
| 
 | ||||
| 	// Apply refund counter, capped to half of the used gas.
 | ||||
| 	uhalf := remaining.Div(self.gasUsed(), common.Big2) | ||||
| 	refund := math.BigMin(uhalf, self.state.GetRefund()) | ||||
| 	self.gas += refund.Uint64() | ||||
| 	uhalf := remaining.Div(st.gasUsed(), common.Big2) | ||||
| 	refund := math.BigMin(uhalf, st.state.GetRefund()) | ||||
| 	st.gas += refund.Uint64() | ||||
| 
 | ||||
| 	self.state.AddBalance(sender.Address(), refund.Mul(refund, self.gasPrice)) | ||||
| 	st.state.AddBalance(sender.Address(), refund.Mul(refund, st.gasPrice)) | ||||
| 
 | ||||
| 	// Also return remaining gas to the block gas counter so it is
 | ||||
| 	// available for the next transaction.
 | ||||
| 	self.gp.AddGas(new(big.Int).SetUint64(self.gas)) | ||||
| 	st.gp.AddGas(new(big.Int).SetUint64(st.gas)) | ||||
| } | ||||
| 
 | ||||
| func (self *StateTransition) gasUsed() *big.Int { | ||||
| 	return new(big.Int).Sub(self.initialGas, new(big.Int).SetUint64(self.gas)) | ||||
| func (st *StateTransition) gasUsed() *big.Int { | ||||
| 	return new(big.Int).Sub(st.initialGas, new(big.Int).SetUint64(st.gas)) | ||||
| } | ||||
|  | ||||
| @ -209,6 +209,7 @@ func (pool *TxPool) resetState() { | ||||
| 	pool.promoteExecutables(currentState) | ||||
| } | ||||
| 
 | ||||
| // Stop terminates the transaction pool.
 | ||||
| func (pool *TxPool) Stop() { | ||||
| 	pool.events.Unsubscribe() | ||||
| 	close(pool.quit) | ||||
| @ -238,6 +239,7 @@ func (pool *TxPool) SetGasPrice(price *big.Int) { | ||||
| 	log.Info("Transaction pool price threshold updated", "price", price) | ||||
| } | ||||
| 
 | ||||
| // State returns the virtual managed state of the transaction pool.
 | ||||
| func (pool *TxPool) State() *state.ManagedState { | ||||
| 	pool.mu.RLock() | ||||
| 	defer pool.mu.RUnlock() | ||||
| @ -850,22 +852,22 @@ func newTxSet() *txSet { | ||||
| 
 | ||||
| // contains returns true if the set contains the given transaction hash
 | ||||
| // (not thread safe, should be called from a locked environment)
 | ||||
| func (self *txSet) contains(hash common.Hash) bool { | ||||
| 	_, ok := self.txMap[hash] | ||||
| func (ts *txSet) contains(hash common.Hash) bool { | ||||
| 	_, ok := ts.txMap[hash] | ||||
| 	return ok | ||||
| } | ||||
| 
 | ||||
| // add adds a transaction hash to the set, then removes entries older than txSetDuration
 | ||||
| // (not thread safe, should be called from a locked environment)
 | ||||
| func (self *txSet) add(hash common.Hash) { | ||||
| 	self.txMap[hash] = struct{}{} | ||||
| func (ts *txSet) add(hash common.Hash) { | ||||
| 	ts.txMap[hash] = struct{}{} | ||||
| 	now := time.Now() | ||||
| 	self.txOrd[self.addPtr] = txOrdType{hash: hash, time: now} | ||||
| 	self.addPtr++ | ||||
| 	ts.txOrd[ts.addPtr] = txOrdType{hash: hash, time: now} | ||||
| 	ts.addPtr++ | ||||
| 	delBefore := now.Add(-txSetDuration) | ||||
| 	for self.delPtr < self.addPtr && self.txOrd[self.delPtr].time.Before(delBefore) { | ||||
| 		delete(self.txMap, self.txOrd[self.delPtr].hash) | ||||
| 		delete(self.txOrd, self.delPtr) | ||||
| 		self.delPtr++ | ||||
| 	for ts.delPtr < ts.addPtr && ts.txOrd[ts.delPtr].time.Before(delBefore) { | ||||
| 		delete(ts.txMap, ts.txOrd[ts.delPtr].hash) | ||||
| 		delete(ts.txOrd, ts.delPtr) | ||||
| 		ts.delPtr++ | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -91,7 +91,7 @@ func (in *Interpreter) enforceRestrictions(op OpCode, operation operation, stack | ||||
| } | ||||
| 
 | ||||
| // Run loops and evaluates the contract's code with the given input data and returns
 | ||||
| // the return byte-slice and an error if one occured.
 | ||||
| // the return byte-slice and an error if one occurred.
 | ||||
| //
 | ||||
| // It's important to note that any errors returned by the interpreter should be
 | ||||
| // considered a revert-and-consume-all-gas operation. No error specific checks
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user