core, tests: Double SUICIDE fix
This commit is contained in:
		
							parent
							
								
									54088b0b8b
								
							
						
					
					
						commit
						36f7fe61c3
					
				| @ -20,8 +20,5 @@ import "github.com/ethereum/go-ethereum/common" | |||||||
| 
 | 
 | ||||||
| // Set of manually tracked bad hashes (usually hard forks)
 | // Set of manually tracked bad hashes (usually hard forks)
 | ||||||
| var BadHashes = map[common.Hash]bool{ | var BadHashes = map[common.Hash]bool{ | ||||||
| 	common.HexToHash("f269c503aed286caaa0d114d6a5320e70abbc2febe37953207e76a2873f2ba79"): true, | 	common.HexToHash("0x05bef30ef572270f654746da22639a7a0c97dd97a7050b9e252391996aaeb689"): true, | ||||||
| 	common.HexToHash("38f5bbbffd74804820ffa4bab0cd540e9de229725afb98c1a7e57936f4a714bc"): true, |  | ||||||
| 	common.HexToHash("7064455b364775a16afbdecd75370e912c6e2879f202eda85b9beae547fff3ac"): true, |  | ||||||
| 	common.HexToHash("5b7c80070a6eff35f3eb3181edb023465c776d40af2885571e1bc4689f3a44d8"): true, |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -82,8 +82,9 @@ type StateObject struct { | |||||||
| 	// Mark for deletion
 | 	// Mark for deletion
 | ||||||
| 	// When an object is marked for deletion it will be delete from the trie
 | 	// When an object is marked for deletion it will be delete from the trie
 | ||||||
| 	// during the "update" phase of the state transition
 | 	// during the "update" phase of the state transition
 | ||||||
| 	remove bool | 	remove  bool | ||||||
| 	dirty  bool | 	deleted bool | ||||||
|  | 	dirty   bool | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (self *StateObject) Reset() { | func (self *StateObject) Reset() { | ||||||
|  | |||||||
| @ -203,18 +203,20 @@ func (self *StateDB) UpdateStateObject(stateObject *StateObject) { | |||||||
| 
 | 
 | ||||||
| // Delete the given state object and delete it from the state trie
 | // Delete the given state object and delete it from the state trie
 | ||||||
| func (self *StateDB) DeleteStateObject(stateObject *StateObject) { | func (self *StateDB) DeleteStateObject(stateObject *StateObject) { | ||||||
|  | 	stateObject.deleted = true | ||||||
|  | 
 | ||||||
| 	addr := stateObject.Address() | 	addr := stateObject.Address() | ||||||
| 	self.trie.Delete(addr[:]) | 	self.trie.Delete(addr[:]) | ||||||
| 
 |  | ||||||
| 	//delete(self.stateObjects, addr.Str())
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Retrieve a state object given my the address. Nil if not found
 | // Retrieve a state object given my the address. Nil if not found
 | ||||||
| func (self *StateDB) GetStateObject(addr common.Address) *StateObject { | func (self *StateDB) GetStateObject(addr common.Address) (stateObject *StateObject) { | ||||||
| 	//addr = common.Address(addr)
 | 	stateObject = self.stateObjects[addr.Str()] | ||||||
| 
 |  | ||||||
| 	stateObject := self.stateObjects[addr.Str()] |  | ||||||
| 	if stateObject != nil { | 	if stateObject != nil { | ||||||
|  | 		if stateObject.deleted { | ||||||
|  | 			stateObject = nil | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		return stateObject | 		return stateObject | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -236,7 +238,7 @@ func (self *StateDB) SetStateObject(object *StateObject) { | |||||||
| // Retrieve a state object or create a new state object if nil
 | // Retrieve a state object or create a new state object if nil
 | ||||||
| func (self *StateDB) GetOrNewStateObject(addr common.Address) *StateObject { | func (self *StateDB) GetOrNewStateObject(addr common.Address) *StateObject { | ||||||
| 	stateObject := self.GetStateObject(addr) | 	stateObject := self.GetStateObject(addr) | ||||||
| 	if stateObject == nil { | 	if stateObject == nil || stateObject.deleted { | ||||||
| 		stateObject = self.CreateAccount(addr) | 		stateObject = self.CreateAccount(addr) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -150,7 +150,7 @@ func runBlockTests(bt map[string]*BlockTest, skipTests []string) error { | |||||||
| 
 | 
 | ||||||
| 		// test the block
 | 		// test the block
 | ||||||
| 		if err := runBlockTest(test); err != nil { | 		if err := runBlockTest(test); err != nil { | ||||||
| 			return err | 			return fmt.Errorf("%s: %v", name, err) | ||||||
| 		} | 		} | ||||||
| 		glog.Infoln("Block test passed: ", name) | 		glog.Infoln("Block test passed: ", name) | ||||||
| 
 | 
 | ||||||
|  | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user