aboutsummaryrefslogtreecommitdiffstats
path: root/ui/filter.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-10-18 19:20:06 +0800
committerobscuren <geffobscura@gmail.com>2014-10-18 19:20:06 +0800
commitd2bb83833ffadc91d128a1833853ec3240b8c824 (patch)
treed73b32a16971da3a3a413f8acd6e01bff0fa25fa /ui/filter.go
parent70a00d602e38e4a2dc1658d483192165c3e479b8 (diff)
downloaddexon-d2bb83833ffadc91d128a1833853ec3240b8c824.tar.gz
dexon-d2bb83833ffadc91d128a1833853ec3240b8c824.tar.zst
dexon-d2bb83833ffadc91d128a1833853ec3240b8c824.zip
Moved Filter's wrapping functions to their own util package. Fixes #61
* CLI ethereum should no longer require the Qt/QML package
Diffstat (limited to 'ui/filter.go')
-rw-r--r--ui/filter.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/ui/filter.go b/ui/filter.go
new file mode 100644
index 000000000..29a7aae86
--- /dev/null
+++ b/ui/filter.go
@@ -0,0 +1,75 @@
+package ui
+
+import (
+ "github.com/ethereum/eth-go/ethchain"
+ "github.com/ethereum/eth-go/ethutil"
+)
+
+func NewFilterFromMap(object map[string]interface{}, eth ethchain.EthManager) *ethchain.Filter {
+ filter := ethchain.NewFilter(eth)
+
+ 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"])
+ filter.AddTo(ethutil.Hex2Bytes(val.Str()))
+ }
+
+ if object["from"] != nil {
+ val := ethutil.NewValue(object["from"])
+ filter.AddFrom(ethutil.Hex2Bytes(val.Str()))
+ }
+
+ 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
+func mapToAccountChange(m map[string]interface{}) (d ethchain.AccountChange) {
+ if str, ok := m["id"].(string); ok {
+ d.Address = ethutil.Hex2Bytes(str)
+ }
+
+ if str, ok := m["at"].(string); ok {
+ d.StateAddress = ethutil.Hex2Bytes(str)
+ }
+
+ return
+}
+
+// data can come in in the following formats:
+// ["aabbccdd", {id: "ccddee", at: "11223344"}], "aabbcc", {id: "ccddee", at: "1122"}
+func makeAltered(v interface{}) (d []ethchain.AccountChange) {
+ if str, ok := v.(string); ok {
+ d = append(d, ethchain.AccountChange{ethutil.Hex2Bytes(str), nil})
+ } 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
+}