light: implemented VMState.Empty() (#3357)

This commit is contained in:
Felföldi Zsolt 2016-11-28 11:31:15 +01:00 committed by Felix Lange
parent e4bf004560
commit 665bb43a4c
2 changed files with 14 additions and 2 deletions

View File

@ -201,14 +201,19 @@ func (self *StateObject) Copy() *StateObject {
// Attribute accessors // Attribute accessors
// //
// empty returns whether the account is considered empty.
func (self *StateObject) empty() bool {
return self.nonce == 0 && self.balance.BitLen() == 0 && bytes.Equal(self.codeHash, emptyCodeHash)
}
// Balance returns the account balance // Balance returns the account balance
func (self *StateObject) Balance() *big.Int { func (self *StateObject) Balance() *big.Int {
return self.balance return self.balance
} }
// Address returns the address of the contract/account // Address returns the address of the contract/account
func (c *StateObject) Address() common.Address { func (self *StateObject) Address() common.Address {
return c.address return self.address
} }
// Code returns the contract code // Code returns the contract code

View File

@ -263,6 +263,13 @@ func (s *VMState) Exist(addr common.Address) bool {
return res return res
} }
// Empty returns true if the account at the given address is considered empty
func (s *VMState) Empty(addr common.Address) bool {
so, err := s.state.GetStateObject(s.ctx, addr)
s.errHandler(err)
return so == nil || so.empty()
}
// HasSuicided returns true if the given account has been marked for deletion // HasSuicided returns true if the given account has been marked for deletion
// or false if the account does not exist // or false if the account does not exist
func (s *VMState) HasSuicided(addr common.Address) bool { func (s *VMState) HasSuicided(addr common.Address) bool {