| 
									
										
										
										
											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" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/ethutil" | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2014-10-27 11:44:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | type Log interface { | 
					
						
							|  |  |  | 	ethutil.RlpEncodable | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Address() []byte | 
					
						
							|  |  |  | 	Topics() [][]byte | 
					
						
							|  |  |  | 	Data() []byte | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type StateLog struct { | 
					
						
							|  |  |  | 	address []byte | 
					
						
							|  |  |  | 	topics  [][]byte | 
					
						
							|  |  |  | 	data    []byte | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func NewLog(address []byte, topics [][]byte, data []byte) *StateLog { | 
					
						
							|  |  |  | 	return &StateLog{address, topics, data} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (self *StateLog) Address() []byte { | 
					
						
							|  |  |  | 	return self.address | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (self *StateLog) Topics() [][]byte { | 
					
						
							|  |  |  | 	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 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func NewLogFromValue(decoder *ethutil.Value) *StateLog { | 
					
						
							|  |  |  | 	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 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-04 12:35:23 +01:00
										 |  |  | func (self *StateLog) RlpData() interface{} { | 
					
						
							|  |  |  | 	return []interface{}{self.address, ethutil.ByteSliceToInterface(self.topics), self.data} | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							|  |  |  | func (self Logs) RlpData() interface{} { | 
					
						
							|  |  |  | 	data := make([]interface{}, len(self)) | 
					
						
							|  |  |  | 	for i, log := range self { | 
					
						
							|  |  |  | 		data[i] = log.RlpData() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return data | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											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
										 |  |  | } |