aboutsummaryrefslogtreecommitdiffstats
path: root/ethchain
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 /ethchain
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 'ethchain')
-rw-r--r--ethchain/filter.go104
1 files changed, 9 insertions, 95 deletions
diff --git a/ethchain/filter.go b/ethchain/filter.go
index 447163b68..90f2512ab 100644
--- a/ethchain/filter.go
+++ b/ethchain/filter.go
@@ -6,12 +6,10 @@ import (
"math"
"github.com/ethereum/eth-go/ethstate"
- "github.com/ethereum/eth-go/ethutil"
- "gopkg.in/qml.v1"
)
-type data struct {
- id, address []byte
+type AccountChange struct {
+ Address, StateAddress []byte
}
// Filtering interface
@@ -23,7 +21,7 @@ type Filter struct {
from, to [][]byte
max int
- altered []data
+ Altered []AccountChange
BlockCallback func(*Block)
MessageCallback func(ethstate.Messages)
@@ -35,48 +33,8 @@ func NewFilter(eth EthManager) *Filter {
return &Filter{eth: eth}
}
-func NewFilterFromMap(object map[string]interface{}, eth EthManager) *Filter {
- filter := 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
-}
-
-func (self *Filter) AddAltered(id, address []byte) {
- self.altered = append(self.altered, data{id, address})
+func (self *Filter) AddAltered(address, stateAddress []byte) {
+ self.Altered = append(self.Altered, AccountChange{address, stateAddress})
}
// Set the earliest and latest block for filtering.
@@ -185,16 +143,16 @@ func (self *Filter) FilterMessages(msgs []*ethstate.Message) []*ethstate.Message
}
var match bool
- if len(self.altered) == 0 {
+ if len(self.Altered) == 0 {
match = true
}
- for _, item := range self.altered {
- if len(item.id) > 0 && bytes.Compare(message.To, item.id) != 0 {
+ for _, accountChange := range self.Altered {
+ if len(accountChange.Address) > 0 && bytes.Compare(message.To, accountChange.Address) != 0 {
continue
}
- if len(item.address) > 0 && !includes(message.ChangedAddresses, item.address) {
+ if len(accountChange.StateAddress) > 0 && !includes(message.ChangedAddresses, accountChange.StateAddress) {
continue
}
@@ -246,47 +204,3 @@ func (self *Filter) bloomFilter(block *Block) bool {
return fromIncluded && toIncluded
}
-
-// Conversion methodn
-func mapToData(m map[string]interface{}) (d data) {
- if str, ok := m["id"].(string); ok {
- d.id = ethutil.Hex2Bytes(str)
- }
-
- if str, ok := m["at"].(string); ok {
- d.address = 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 []data) {
- if str, ok := v.(string); ok {
- d = append(d, data{ethutil.Hex2Bytes(str), nil})
- } else if obj, ok := v.(map[string]interface{}); ok {
- d = append(d, mapToData(obj))
- } else if slice, ok := v.([]interface{}); ok {
- for _, item := range slice {
- d = append(d, makeAltered(item)...)
- }
- } else if qList, ok := v.(*qml.List); ok {
- var s []interface{}
- qList.Convert(&s)
-
- fmt.Println(s)
-
- d = makeAltered(s)
- } else if qMap, ok := v.(*qml.Map); ok {
- var m map[string]interface{}
- qMap.Convert(&m)
- fmt.Println(m)
-
- d = makeAltered(m)
- } else {
- panic(fmt.Sprintf("makeAltered err (unknown conversion): %T\n", v))
- }
-
- return
-}