| 
									
										
										
										
											2014-10-31 14:43:14 +01:00
										 |  |  | package state | 
					
						
							| 
									
										
										
										
											2014-10-27 11:44:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-11 12:16:36 +01:00
										 |  |  | import ( | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2015-03-16 23:10:26 +01:00
										 |  |  | 	"io" | 
					
						
							| 
									
										
										
										
											2014-11-11 12:16:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/common" | 
					
						
							| 
									
										
										
										
											2015-03-16 23:10:26 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/rlp" | 
					
						
							| 
									
										
										
										
											2014-11-11 12:16:36 +01:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2014-10-27 11:44:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | type Log interface { | 
					
						
							| 
									
										
										
										
											2015-03-16 18:42:18 +01:00
										 |  |  | 	Address() common.Address | 
					
						
							| 
									
										
										
										
											2015-03-16 23:10:26 +01:00
										 |  |  | 	Topics() []common.Hash | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | 	Data() []byte | 
					
						
							| 
									
										
										
										
											2015-02-22 13:24:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	Number() uint64 | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type StateLog struct { | 
					
						
							| 
									
										
										
										
											2015-03-16 18:42:18 +01:00
										 |  |  | 	address common.Address | 
					
						
							| 
									
										
										
										
											2015-03-16 23:10:26 +01:00
										 |  |  | 	topics  []common.Hash | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | 	data    []byte | 
					
						
							| 
									
										
										
										
											2015-02-22 13:24:26 +01:00
										 |  |  | 	number  uint64 | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-16 23:10:26 +01:00
										 |  |  | func NewLog(address common.Address, topics []common.Hash, data []byte, number uint64) *StateLog { | 
					
						
							| 
									
										
										
										
											2015-02-22 13:24:26 +01:00
										 |  |  | 	return &StateLog{address, topics, data, number} | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-16 18:42:18 +01:00
										 |  |  | func (self *StateLog) Address() common.Address { | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | 	return self.address | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-16 23:10:26 +01:00
										 |  |  | func (self *StateLog) Topics() []common.Hash { | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | 	return self.topics | 
					
						
							| 
									
										
										
										
											2014-10-27 11:44:16 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-10-29 10:34:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | func (self *StateLog) Data() []byte { | 
					
						
							|  |  |  | 	return self.data | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-22 13:24:26 +01:00
										 |  |  | func (self *StateLog) Number() uint64 { | 
					
						
							|  |  |  | 	return self.number | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-16 18:42:18 +01:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | func NewLogFromValue(decoder *common.Value) *StateLog { | 
					
						
							| 
									
										
										
										
											2015-03-16 18:42:18 +01:00
										 |  |  | 	var extlog struct { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | 	log := &StateLog{ | 
					
						
							|  |  |  | 		address: decoder.Get(0).Bytes(), | 
					
						
							|  |  |  | 		data:    decoder.Get(2).Bytes(), | 
					
						
							| 
									
										
										
										
											2014-10-29 10:34:40 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	it := decoder.Get(1).NewIterator() | 
					
						
							|  |  |  | 	for it.Next() { | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | 		log.topics = append(log.topics, it.Value().Bytes()) | 
					
						
							| 
									
										
										
										
											2014-10-29 10:34:40 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return log | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-03-16 18:42:18 +01:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2014-10-29 10:34:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-16 23:10:26 +01:00
										 |  |  | func (self *StateLog) EncodeRLP(w io.Writer) error { | 
					
						
							|  |  |  | 	return rlp.Encode(w, []interface{}{self.address, self.topics, self.data}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | func (self *StateLog) RlpData() interface{} { | 
					
						
							| 
									
										
										
										
											2015-03-16 11:27:38 +01:00
										 |  |  | 	return []interface{}{self.address, common.ByteSliceToInterface(self.topics), self.data} | 
					
						
							| 
									
										
										
										
											2014-10-29 10:34:40 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-03-16 23:10:26 +01:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2014-10-29 10:34:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | func (self *StateLog) String() string { | 
					
						
							|  |  |  | 	return fmt.Sprintf(`log: %x %x %x`, self.address, self.topics, self.data) | 
					
						
							| 
									
										
										
										
											2014-11-11 12:16:36 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | type Logs []Log | 
					
						
							| 
									
										
										
										
											2014-10-29 10:34:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-16 23:10:26 +01:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2014-10-29 10:34:40 +01:00
										 |  |  | func (self Logs) RlpData() interface{} { | 
					
						
							|  |  |  | 	data := make([]interface{}, len(self)) | 
					
						
							|  |  |  | 	for i, log := range self { | 
					
						
							|  |  |  | 		data[i] = log.RlpData() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return data | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-03-16 23:10:26 +01:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2014-11-11 12:16:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | func (self Logs) String() (ret string) { | 
					
						
							| 
									
										
										
										
											2014-11-11 12:16:36 +01:00
										 |  |  | 	for _, log := range self { | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | 		ret += fmt.Sprintf("%v", log) | 
					
						
							| 
									
										
										
										
											2014-11-11 12:16:36 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return "[" + ret + "]" | 
					
						
							| 
									
										
										
										
											2014-11-11 12:16:36 +01:00
										 |  |  | } |