JS Filter

This commit is contained in:
obscuren 2014-08-20 13:05:26 +02:00
parent b97ea0e447
commit 55a2f35a64
3 changed files with 53 additions and 8 deletions

View File

@ -72,8 +72,6 @@ func NewFilterFromMap(object map[string]interface{}, eth EthManager) *Filter {
filter.altered = makeAltered(object["altered"]) filter.altered = makeAltered(object["altered"])
} }
fmt.Println("ALTERED", filter.altered)
return filter return filter
} }
@ -123,7 +121,7 @@ func (self *Filter) SetTo(addr [][]byte) {
} }
func (self *Filter) AddTo(addr []byte) { func (self *Filter) AddTo(addr []byte) {
self.from = append(self.to, addr) self.to = append(self.to, addr)
} }
func (self *Filter) SetMax(max int) { func (self *Filter) SetMax(max int) {

View File

@ -1,6 +1,7 @@
package ethpipe package ethpipe
import ( import (
"bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"sync/atomic" "sync/atomic"
@ -119,6 +120,28 @@ func (self *JSPipe) EachStorage(addr string) string {
return string(valuesJson) return string(valuesJson)
} }
func (self *JSPipe) ToAscii(str string) string {
padded := ethutil.RightPadBytes([]byte(str), 32)
return "0x" + ethutil.Bytes2Hex(padded)
}
func (self *JSPipe) FromAscii(str string) string {
if ethutil.IsHex(str) {
str = str[2:]
}
return string(bytes.Trim(ethutil.Hex2Bytes(str), "\x00"))
}
func (self *JSPipe) FromNumber(str string) string {
if ethutil.IsHex(str) {
str = str[2:]
}
return ethutil.BigD(ethutil.Hex2Bytes(str)).String()
}
func (self *JSPipe) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr string) (*JSReceipt, error) { func (self *JSPipe) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr string) (*JSReceipt, error) {
var hash []byte var hash []byte
var contractCreation bool var contractCreation bool
@ -200,8 +223,7 @@ func (self *JSPipe) Watch(object map[string]interface{}) *JSFilter {
func (self *JSPipe) Messages(object map[string]interface{}) string { func (self *JSPipe) Messages(object map[string]interface{}) string {
filter := self.Watch(object) filter := self.Watch(object)
filter.Uninstall()
defer filter.Uninstall()
return filter.Messages() return filter.Messages()
@ -247,8 +269,8 @@ func (self *JSFilter) Messages() string {
} }
func (self *JSFilter) mainLoop() { func (self *JSFilter) mainLoop() {
blockChan := make(chan ethreact.Event, 1) blockChan := make(chan ethreact.Event, 5)
messageChan := make(chan ethreact.Event, 1) messageChan := make(chan ethreact.Event, 5)
// Subscribe to events // Subscribe to events
reactor := self.eth.Reactor() reactor := self.eth.Reactor()
reactor.Subscribe("newBlock", blockChan) reactor.Subscribe("newBlock", blockChan)
@ -267,12 +289,15 @@ out:
case msg := <-messageChan: case msg := <-messageChan:
if messages, ok := msg.Resource.(ethstate.Messages); ok { if messages, ok := msg.Resource.(ethstate.Messages); ok {
if self.MessageCallback != nil { if self.MessageCallback != nil {
println("messages!")
msgs := self.FilterMessages(messages) msgs := self.FilterMessages(messages)
if len(msgs) > 0 {
self.MessageCallback(msgs) self.MessageCallback(msgs)
} }
} }
} }
} }
}
} }
func (self *JSFilter) Changed(object interface{}) { func (self *JSFilter) Changed(object interface{}) {

View File

@ -173,6 +173,28 @@ func LeftPadBytes(slice []byte, l int) []byte {
return padded return padded
} }
func LeftPadString(str string, l int) string {
if l < len(str) {
return str
}
zeros := Bytes2Hex(make([]byte, (l-len(str))/2))
return zeros + str
}
func RightPadString(str string, l int) string {
if l < len(str) {
return str
}
zeros := Bytes2Hex(make([]byte, (l-len(str))/2))
return str + zeros
}
func Address(slice []byte) (addr []byte) { func Address(slice []byte) (addr []byte) {
if len(slice) < 20 { if len(slice) < 20 {
addr = LeftPadBytes(slice, 20) addr = LeftPadBytes(slice, 20)