| 
									
										
										
										
											2014-10-18 13:20:06 +02:00
										 |  |  | package ui | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2014-12-04 10:28:02 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/core" | 
					
						
							| 
									
										
										
										
											2014-10-23 15:01:27 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/ethutil" | 
					
						
							| 
									
										
										
										
											2014-10-18 13:20:06 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-10 00:51:56 +01:00
										 |  |  | func fromHex(s string) []byte { | 
					
						
							|  |  |  | 	if len(s) > 1 { | 
					
						
							|  |  |  | 		if s[0:2] == "0x" { | 
					
						
							|  |  |  | 			s = s[2:] | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return ethutil.Hex2Bytes(s) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-04 10:28:02 +01:00
										 |  |  | func NewFilterFromMap(object map[string]interface{}, eth core.EthManager) *core.Filter { | 
					
						
							|  |  |  | 	filter := core.NewFilter(eth) | 
					
						
							| 
									
										
										
										
											2014-10-18 13:20:06 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if object["earliest"] != nil { | 
					
						
							|  |  |  | 		val := ethutil.NewValue(object["earliest"]) | 
					
						
							|  |  |  | 		filter.SetEarliestBlock(val.Int()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if object["latest"] != nil { | 
					
						
							|  |  |  | 		val := ethutil.NewValue(object["latest"]) | 
					
						
							|  |  |  | 		filter.SetLatestBlock(val.Int()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if object["to"] != nil { | 
					
						
							|  |  |  | 		val := ethutil.NewValue(object["to"]) | 
					
						
							| 
									
										
										
										
											2015-01-10 00:51:56 +01:00
										 |  |  | 		filter.AddTo(fromHex(val.Str())) | 
					
						
							| 
									
										
										
										
											2014-10-18 13:20:06 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if object["from"] != nil { | 
					
						
							|  |  |  | 		val := ethutil.NewValue(object["from"]) | 
					
						
							| 
									
										
										
										
											2015-01-10 00:51:56 +01:00
										 |  |  | 		filter.AddFrom(fromHex(val.Str())) | 
					
						
							| 
									
										
										
										
											2014-10-18 13:20:06 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if object["max"] != nil { | 
					
						
							|  |  |  | 		val := ethutil.NewValue(object["max"]) | 
					
						
							|  |  |  | 		filter.SetMax(int(val.Uint())) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if object["skip"] != nil { | 
					
						
							|  |  |  | 		val := ethutil.NewValue(object["skip"]) | 
					
						
							|  |  |  | 		filter.SetSkip(int(val.Uint())) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if object["altered"] != nil { | 
					
						
							|  |  |  | 		filter.Altered = makeAltered(object["altered"]) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return filter | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Conversion methodn | 
					
						
							| 
									
										
										
										
											2014-12-04 10:28:02 +01:00
										 |  |  | func mapToAccountChange(m map[string]interface{}) (d core.AccountChange) { | 
					
						
							| 
									
										
										
										
											2014-10-18 13:20:06 +02:00
										 |  |  | 	if str, ok := m["id"].(string); ok { | 
					
						
							| 
									
										
										
										
											2015-01-10 00:51:56 +01:00
										 |  |  | 		d.Address = fromHex(str) | 
					
						
							| 
									
										
										
										
											2014-10-18 13:20:06 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if str, ok := m["at"].(string); ok { | 
					
						
							| 
									
										
										
										
											2015-01-10 00:51:56 +01:00
										 |  |  | 		d.StateAddress = fromHex(str) | 
					
						
							| 
									
										
										
										
											2014-10-18 13:20:06 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // data can come in in the following formats: | 
					
						
							|  |  |  | // ["aabbccdd", {id: "ccddee", at: "11223344"}], "aabbcc", {id: "ccddee", at: "1122"} | 
					
						
							| 
									
										
										
										
											2014-12-04 10:28:02 +01:00
										 |  |  | func makeAltered(v interface{}) (d []core.AccountChange) { | 
					
						
							| 
									
										
										
										
											2014-10-18 13:20:06 +02:00
										 |  |  | 	if str, ok := v.(string); ok { | 
					
						
							| 
									
										
										
										
											2015-01-10 00:51:56 +01:00
										 |  |  | 		d = append(d, core.AccountChange{fromHex(str), nil}) | 
					
						
							| 
									
										
										
										
											2014-10-18 13:20:06 +02:00
										 |  |  | 	} else if obj, ok := v.(map[string]interface{}); ok { | 
					
						
							|  |  |  | 		d = append(d, mapToAccountChange(obj)) | 
					
						
							|  |  |  | 	} else if slice, ok := v.([]interface{}); ok { | 
					
						
							|  |  |  | 		for _, item := range slice { | 
					
						
							|  |  |  | 			d = append(d, makeAltered(item)...) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return | 
					
						
							|  |  |  | } |